Commit Graph

12 Commits

Author SHA1 Message Date
Andrew
c3ebf38a07 Prevent hidden action execution
Block execution of actions from an empty list
until user input specifies a selection, ensuring
actions not displayed don't trigger unexpectedly.
2026-07-13 19:20:15 +08:00
Andrew
592e5f92f8 Tone down inactive favourite stars 2026-07-13 16:00:32 +08:00
Andrew
39357533b2 Harden speed dial helper inputs 2026-07-13 16:00:29 +08:00
Andrew
c29ffdfc1a Extract script actions into an action source
Move plugin capability enumeration, loader
subscriptions, and action construction into
ScriptActionSource. Keep ActionRegistry focused
on generic action state, dispatch, and snapshots.

Use source rather than package for generic origin
metadata so future non-plugin providers share the
same interface. Action IDs and persisted
configuration remain unchanged.

Subscribe before initial enumeration so plugin
events cannot be missed between the snapshot and
callback registration. Add a focused test for
source startup.
2026-07-13 14:28:05 +08:00
Andrew
7b19145226 Share one fuzzy matcher across both dialogs
Plugins dialog and the Speed Dial popup each
carried a private copy of the same fuzzy
matcher and had already drifted. Move the
pure functions into a shared module loaded
by both pages, and add a unit test beside
it.
2026-07-10 17:32:31 +08:00
Andrew
df5c293d2e Stabilize action counts and tile ordinals 2026-07-10 17:18:30 +08:00
Andrew
35d189f1c7 Add right-click menu to reorder or unpin favs
Right-clicking a fav tile now opens a small
context menu with Move left, Move right, and
Unpin, instead of relying on drag-only reorder.

- speeddial.js: oncontextmenu handler, the
  menu build/position/dismiss logic, and an
  Escape-key close.
- style.css: .ctx-menu/.ctx-item styling.
- ActionRegistry: reorder_favourites persists
  the new bar order to AppConfig.
- SpeedDialDialog: routes the new
  reorder_favourites command from the page.
2026-07-10 17:18:00 +08:00
Andrew
7c9fa801fb Remove dead always-true runnable action field
runnable was hardcoded true on every action,
and only loaded+enabled capabilities ever
reach the registry, so every JS === false
branch was unreachable. Drop the field, its
JSON, the guards, and the orphan .disabled
CSS rule.
2026-07-10 17:12:52 +08:00
Andrew
73a1913447 Put package initial first in tile monogram (GC, not CG) 2026-07-10 15:08:33 +08:00
Andrew
672429cf17 Complete speed dial launcher helper layer; fix tile clip and arrow-nav
Wire the search-first launcher's pure helpers to their node-vm spec:
resultCountText, selectedActionId, actionLabel (accessible row/tile labels
with plugin-key disambiguation), and tileCode (collision-escalating
title/pkg/ordinal monogram). Plus three fixes surfaced by the test + review:

- visibleFavourites drops non-runnable favourites - a dead fav tile
  otherwise renders and run()s to a silent no-op on click.
- .fav-tile mirrors the list tile's inline-flex centering + 12px so a
  multi-char monogram (e.g. "EA1") no longer clips the bare button.
- Arrow Left/Right stop swallowing the search caret in the list zone;
  they only navigate when inside the favourites bar.
2026-07-10 15:06:44 +08:00
Andrew
3dfa83e407 Add search count indication 2026-07-10 14:33:25 +08:00
Andrew
6daef171c1 Add actions speed dial 2026-07-09 16:21:53 +08:00