screentinker/frontend/js
ScreenTinker 1f62ffbc3b feat(switcher): searchable/filterable org switcher (#16)
At MSP scale (100+ orgs) the org/workspace switcher dropdown was an
un-scrollable wall. Add a type-to-filter search box.

- Sticky search input at the top of the switcher menu, shown once the list
  reaches a threshold (>= 8 workspaces); below that the plain list is fine.
- Live client-side filter: case-insensitive substring match on
  "organization name + workspace name" (data-search haystack per row). The
  full list is already loaded from /me, so no extra requests.
- Keyboard nav: search is auto-focused on open; type filters, ArrowUp/Down
  move a highlight among visible rows, Enter selects (switches), Esc closes.
- "No matches" state when nothing matches; opening resets the filter.
- Refactored the switch action into a shared switchTo() used by both click
  and Enter.

Frontend only. Verified headless: filter narrows live, no-match state,
clear restores, arrow-key highlight. EN i18n added.

Closes #16.
2026-06-08 16:31:46 -05:00
..
components feat(switcher): searchable/filterable org switcher (#16) 2026-06-08 16:31:46 -05:00
i18n feat(switcher): searchable/filterable org switcher (#16) 2026-06-08 16:31:46 -05:00
views feat(admin): manage a user's workspace memberships (multi + per-workspace role) 2026-06-08 16:24:52 -05:00
api.js feat(admin): manage a user's workspace memberships (multi + per-workspace role) 2026-06-08 16:24:52 -05:00
app.js feat(signup): optional org-on-create for self-service signups (#12) 2026-06-05 11:16:27 -05:00
branding.js Fix white-label settings not applying on page load 2026-04-22 19:36:20 -05:00
i18n.js i18n: register Italian locale in language registry (followup to PR #2) 2026-05-11 20:05:09 -05:00
socket.js fix(socket): prefer WebSocket transport for dashboard socket 2026-05-16 11:15:18 -05:00
utils.js Phase 2.1: tenancy middleware, permission helpers, JWT workspace context, frontend + backend role-rename compat 2026-05-11 20:02:00 -05:00