Tooltips - New v-tooltip directive + TooltipHost floating panel replace the native title attribute across 95+ sites (topbar, timeline, sidebar, properties, stage overlays, fullscreen preview, export dialog, clipart drawer, modals). Styled dark card with a configurable label + optional help line for inline documentation; screen readers still get an aria-label when the panel is disabled. - Settings → Interface toggle (`ruwio:tooltipsEnabled`) hides the visual panel for users who know the app. IconButton now routes its title prop through v-tooltip so every existing call site is tooltip-aware without churn. Editor-hide + export filter - New `Layer.editorHidden` flag, eye toggle per layer row, skipped by the Konva stage and the mask-preview canvas path but honoured by exports and fullscreen preview (runtime untouched). - Export dialog gets a "Skip hidden tracks" switch that strips editor-hidden layers from every format (scene JS, runtime, example HTML, MP4, WebM) on opt-in. Disabled when the scene has no hidden layers. Button editor - `+` buttons appear on empty state slots in button-timeline rows and duplicate the nearest keyframe (prev by preference, next otherwise) onto that slot. New `duplicateKeyframeAt` store action carries props, easing, hold, and bezier handles across. Stage / interaction - Plain left-click on the empty content view pans the viewport, but only when the pointer isn't over a Konva shape — transformer handles, vertex dots, and selection boxes that extend past the canvas edge keep their drag. Settings reshuffle - Timeline tab merged into Document (Duration + FPS sit under a new "Timing" sub-heading). New Interface tab gathers three global prefs: Show tooltips, Show locked tracks, Asset thumbnails — driven by shared composables so the existing toolbar toggles stay in sync. Interface-tab CSS defensively resets the scoped label flex-column + uppercase rule that was making the toggle row look like an accident. Project identity + UX polish - Favicon wired up (moved to public/favicon.ico, linked from index.html); scripts/pack.sh packs the minimum Vue project (src, index.html, configs, public) into a tarball with the right version in the filename, and `npm run pack` drives it. - About dialog now credits Torsten Hoeltge. Test infra - Progress bar turns red mid-run on the first failure: runAll gets an onResult callback that TestOverlay uses to push each result into the reactive array incrementally. - mountComponent in the test harness registers v-tooltip on the isolated app instance so IconButton's aria-label contract actually fires under test. Regression tests - duplicateKeyframeAt: copy fidelity (props, easing, hold), collision refusal, unknown-id guards, separated-track targeting. - Shared composables: useTooltipPref and useAssetThumbsPref both return the same ref across calls and persist to localStorage. - Tooltip contract: IconButton ships `aria-label` (not title); live-DOM smoke tests match on aria-label selectors now. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
41 lines
1.0 KiB
Bash
Executable File
41 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Pack everything needed to install + run the Vue frontend into a
|
|
# single tarball: sources, entry HTML, Vite/TS config, and the lock
|
|
# file. Recipient runs:
|
|
#
|
|
# tar -xzf ruwio-<version>.tar.gz
|
|
# cd ruwio-<version>
|
|
# npm install
|
|
# npm run dev # or: npm run build
|
|
#
|
|
# Deliberately excluded: node_modules, dist, the render server,
|
|
# docker-compose, logo working files, personal notes, screenshots,
|
|
# .claude/, .git/.
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
VERSION=$(node -p "require('./package.json').version")
|
|
NAME="ruwio-${VERSION}"
|
|
OUT_DIR="dist-archive"
|
|
ARCHIVE="${OUT_DIR}/${NAME}.tar.gz"
|
|
|
|
mkdir -p "$OUT_DIR"
|
|
rm -f "$ARCHIVE"
|
|
|
|
# Explicit allowlist — everything else stays out. If you add a new
|
|
# top-level file the Vue app depends on (e.g. a separate env file or
|
|
# a PostCSS config), extend this list.
|
|
tar --transform "s,^,${NAME}/," -czf "$ARCHIVE" \
|
|
index.html \
|
|
package.json \
|
|
package-lock.json \
|
|
tsconfig.json \
|
|
vite.config.ts \
|
|
.gitignore \
|
|
public \
|
|
src
|
|
|
|
echo "Created $ARCHIVE"
|
|
ls -lh "$ARCHIVE"
|