Skip to content

[fix] launch quick-wins: clean play FAB + explorer/packs loading feedback - #71

Merged
AlexZ005 merged 9 commits into
mainfrom
fix/launch-quickwins
Jul 30, 2026
Merged

[fix] launch quick-wins: clean play FAB + explorer/packs loading feedback#71
AlexZ005 merged 9 commits into
mainfrom
fix/launch-quickwins

Conversation

@AlexZ005

Copy link
Copy Markdown
Collaborator

Two approved launch quick-wins (v1.0.x patch line; flows into release/1.1 on the next merge of main).

Controls play button (Option A, user-approved)

  • the grid-cell placeholder under the floating play button was a filled primary square whose corners peeked out around the circle → transparent spacer
  • white glyph in both themes + 3px optical centering nudge (fa-play is left-heavy)
  • ring in the pill background color + shadow for a clean punch-through

Explorer/packs loading feedback

  • FIX first-open stale flash: switching packs used to show the previous pack's items until the fetch resolved; loadPackItems now clears + flags a new openPackLoading store synchronously, with a sequence guard against slow-fetch clobbering
  • Explorer grid shows a spinner while a pack list loads (was: wrong "no items" message)
  • pack-item viewport drops hold a removable loading toast during the CDN fetch
  • attribution popup opens instantly in a loading state on first fetch, caches after

Verification

  • scripted store-driven checks 11/11 PASS on a lane server (incl. the stale-flash regression assert: opening pack B immediately clears pack A's items; toast lifecycle: appears → object lands → removed)
  • committed suites: controls-state ALL PASS, packs-explorer ALL PASS, packs ALL PASS; packs-drop 3 FAIL = the documented pre-existing drag-simulation cluster in the localhost env (CLAUDE.md known-failing list), untouched by this diff
  • svelte-check: exactly 476 errors / 62 warnings (baseline held, zero new)
  • npm run build green
  • before/after screenshots of the play button verified visually

🤖 Generated with Claude Code

AlexZ005 and others added 8 commits July 30, 2026 06:02
- the grid-cell placeholder under the floating play button was a FILLED
  primary square whose corners peeked out around the circle - now a
  transparent spacer of the same size
- play glyph white in both themes (was near-black on the primary orange)
  with a 3px optical nudge right (fa-play is left-heavy)
- ring in the pill background color + shadow so the FAB punches through
  the bar cleanly

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- packs.js: loadPackItems clears openPackItems and flags NEW openPackLoading
  synchronously on an uncached open (the fetch used to leave the PREVIOUS
  pack items on screen - the stale flash); a load sequence guard stops a slow
  first fetch from clobbering a newer pack switch
- Explorer grid: spinner Loading-pack-contents while openPackLoading instead
  of a wrong empty-state message
- explorerDrop: pack-item drops hold a removable Loading-name toast during
  the CDN fetch, removed on import start or failure; the 15s object toast
  timeout is the failsafe
- attribution popup opens immediately in a loading state on first fetch and
  caches the html for instant reopen

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- whole button scales on hover (centering translate moved from inline style
  to a tailwind class so the transforms compose instead of fighting)
- hovering Scale / Object list paints the spacer cell too (arbitrary hover
  variants), so the hover red runs continuously up to the circle - no more
  pill-colored notches above/below it
- clip-path circles the HIT AREA: the 50px square box used to intercept
  clicks and hovers meant for the neighbor cells it overlaps
- NOTE: the spacer keeps w-10 on purpose - the fr grid columns are
  content-sized and that 40px is what gives every cell its width

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- one icon language everywhere: Explorer (tree, breadcrumbs, KIND_ICONS item
  cards, install card, window title), Sidebar rows, Sessions/Library/Modules
  buttons and placeholders, Inspector file panel + env preset row + burst,
  object-list system/env row actions and lock badge, Users popover badges +
  Watch, Chat/ImagePreview/ModelPreview/TextEditor window titles, mesh-edit
  popup, node palette delete, dungeon dice
- context-menu labels lose their glyphs for now (plain text) - a proper icon
  column arrives with the menu consistency pass
- window tab titles are plain text (Explorer, Chat); typographic glyphs kept
  on purpose (x, +, arrows, list-drag handle) plus module toast celebration
- tests updated in the same commit: node-search label, explorer Textures row
  accessible name (no more emoji prefixes in matchers)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- NEW src/lib/trackpadNav.js (store-only, LOCAL prefs): window-capture wheel
  handler - two-finger trackpad swipes PAN the orbit camera (same math
  OrbitControls uses internally but does not expose); classic mouse wheels
  fall through to OrbitControls dolly untouched; shift+wheel pans (browsers
  map it to deltaX)
- pinch (ctrlKey wheel) never zooms the PAGE: swallowed over UI, camera-dolly
  over the canvas as before; iOS gesturestart + body touch-action pan-x pan-y
  suppress mobile page pinch on the chrome (canvas keeps its own gestures)
- Settings: Trackpad gestures Auto/On/Off (auto = fine-delta/deltaX heuristic)
  + Allow browser pinch zoom accessibility escape hatch (restores everything)
- App.svelte: startTrackpadNav() at boot + debug-hook module entry
- suite tests/e2e/trackpad-nav.test.cjs: 9 checks (pan vs zoom split, UI pinch
  swallowed, mode off, escape hatch) - ALL PASS on the lane server

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- ALL 193 fa- sites across 24 files migrated to tree-shaken lucide components
  (codemod for static <i> elements + manual pass for dynamic class compositions:
  Controls toolbar tints, Explorer KIND_ICONS, Objects/SimControls/VoiceChat/
  Inspector ternaries); sizes 16 inline / 18-20 toolbar / 24 play FAB;
  aria-hidden on decorative icons; play keeps a solid triangle via
  fill=currentColor + ml-0.5 optical centering; id=play-button stable hook
- NEW components/ui/Icon.svelte: data-driven name->component map (Explorer
  kinds, future menu defs); everything else imports named components directly
- Font Awesome REMOVED: +layout.js css import, package.json dependency,
  dependabot ignore entry, deps-check frozen list; Users.svelte FontAwesome
  font-glyph placeholder hacks replaced with plain placeholders
- scoped-CSS trap fixed with :global(): classes passed to lucide components
  land on the CHILD-scope svg (cx-chevron rotation, tp-toast-icon color,
  role-caret opacity were silently dead) - documented in CLAUDE.md gotchas
- svg.lucide baseline-alignment rule in ui.css
- e2e selectors updated: svg instead of i + getAttribute(class) (svg className
  is an SVGAnimatedString) in controls-state, controls-transform-tint,
  dock-float-exclusivity, flow-explorer-dock; play-exits uses #play-button
- gates: svelte-check exactly 476/62, build green

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- 7 new tokens --icon-{folder,image,audio,doc,object,prefab,danger}: dark
  defaults on :root (dark has no block) + per-theme values for light / green /
  bit8 / contrast in theme.css; appended to THEME_TOKENS (older custom
  .theme.json files fall back to the :root defaults)
- ui.css .ico-* classes color via currentColor (work on the svg or a wrapper)
- applied: Explorer tree + scene folders + grid folder cards amber, Prefabs +
  Library placeholders prefab-orange, KIND_COLORS map tints thumbnail-less
  item cards / props / Inspector file panel per kind, Clear Scene + Delete
  trash icons danger-red; everything else keeps inheriting the row text color
- also normalized placeholder icon sizes the codemod left at 16 in large cards

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the spacer under the play button splits into two 20px halves: hovering
  Scale paints only the LEFT half up to the circle, Object list only the
  RIGHT (the full-width paint peeked out red on the opposite side of the
  FAB); no transition - the neighbors hover is instant, the fade lagged
- total spacer width stays 40px (LOAD-BEARING for the fr column sizing)
- trackpad pan direction FLIPPED to content-follows-fingers as the default
  (touch-scrolling convention) + NEW Settings toggle Reverse trackpad pan
  for the opposite preference; suite gains a direction-flip check (11/11)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@AlexZ005
AlexZ005 merged commit 8cbb6e0 into main Jul 30, 2026
…docs

- play FAB clip-path moved from inline style to a ui.css rule so the 8-bit
  theme can square it back (its border-radius kill was overridden by the
  inline circle clip); bit8 override in theme.css - square look AND square
  hit area there, round everywhere else
- free 2D panning: the renderer canvas gets touch-action:none (lazily in the
  wheel handler) - Chromium axis-latches scroll gestures over the body
  pan-x/pan-y page-zoom guard, which locked two-finger pans to one axis
  unless started diagonally
- missed icons: Connect copy-id button (the &#x1f4cb; HTML entity dodged the
  emoji sweep) -> lucide Copy; AI hud button sparkles emoji -> lucide
  Sparkles in brand orange (text-primary-500)
- trackpad suite grows to 14 checks: gesture-window flick, pan-off,
  pinch-off (ALL PASS); CLAUDE.md gains the trackpadNav lib entry;
  e2e-verify skill: #play-button anchor + lucide svg selector rules
- CHANGELOG: 1.1.0 section (icon system, trackpad nav, loading feedback,
  play polish)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@AlexZ005
AlexZ005 deleted the fix/launch-quickwins branch August 5, 2026 20:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant