[Launcher] Add accessibility controls + doc comments to sidebar menu

- New: menu_launcher_controls.svelte — bottom control bar for the launcher
  sidebar with font size cycler (A / A+ / A−) and light/dark mode toggle,
  always visible regardless of access level; visibility toggles (All Files /
  All Sessions) moved here from launcher_menu.svelte and restyled to
  preset-tonal-tertiary with descriptive title attributes
- launcher_menu.svelte — replace inline visibility-toggle block with
  <Menu_launcher_controls />; add full header doc-comment describing
  component structure and data flow
- menu_location_list.svelte — add header doc-comment covering purpose,
  visibility rules, data flow, and the intentional non-bindable prop pattern
- documentation/TODO__Agents.md — mark font size cycler task complete
This commit is contained in:
Scott Idem
2026-03-11 10:18:13 -04:00
parent 6a98b5801b
commit b479dea33e
4 changed files with 216 additions and 67 deletions

View File

@@ -1,4 +1,39 @@
<script lang="ts">
/**
* launcher_menu.svelte — Aether Launcher: Sidebar Menu Container
*
* PURPOSE:
* The main sidebar panel for the Aether Events Launcher. Composes all menu
* sub-components into a single vertical column and passes data down from the
* parent layout. This is intentionally a thin coordinator — business logic lives
* in the individual sub-components and the layout's liveQuery / effect layer.
*
* STRUCTURE (top to bottom):
* 1. Event-level files (lq__event_event_file_obj_li)
* Files attached directly to the event (e.g. a shared opening slide deck).
* Shown regardless of which room/session is selected.
*
* 2. Location selector (Menu_location_list_menu — edit mode only)
* Dropdown that lets operators switch the active room. Triggers a session
* list reload and navigates the URL to /launcher/{location_id}.
*
* 3. Location-level files (lq__location_event_file_obj_li)
* Files attached to the selected room — e.g. A/V setup guides, room schedules.
* Hidden until a room is selected.
*
* 4. Session list (Menu_session_list_menu)
* Compact button list of all sessions in the selected room. Operators click
* to switch the active session; hover pre-loads after a delay timer.
*
* 5. Launcher controls (Menu_launcher_controls)
* Bottom bar for accessibility and visibility settings: font size cycler,
* light/dark toggle, and (edit mode only) show/hide draft files/sessions.
*
* DATA FLOW:
* All liveQuery stores (lq__*) are passed in from +layout.svelte and originate
* from Dexie IndexedDB — never fetched directly here. Selection state is
* coordinated via $events_slct / $events_loc stores.
*/
interface Props {
lq__event_obj: any;
@@ -84,6 +119,7 @@
import Event_launcher_file_cont from './launcher_file_cont.svelte';
import Menu_location_list_menu from './menu_location_list.svelte';
import Menu_session_list_menu from './menu_session_list.svelte';
import Menu_launcher_controls from './menu_launcher_controls.svelte';
// *** Functions and Logic
@@ -214,67 +250,5 @@
/>
{/if}
{#if $ae_loc.edit_mode}
<div
class="
w-full max-w-full
flex flex-row gap-1 items-center justify-center
"
>
<button
type="button"
onclick={() => {
if ($events_loc.launcher.show_content__hidden_files) {
$events_loc.launcher.show_content__hidden_files = false;
$events_loc.launcher.hide_content__draft_files = true;
} else {
$events_loc.launcher.show_content__hidden_files = true;
$events_loc.launcher.hide_content__draft_files = false;
}
}}
class="
btn btn-sm
text-xs
w-1/2 max-w-1/2
preset-tonal-warning
hover:preset-tonal-success
transition-all
"
title="Toggle showing hidden files. Including files marked as 'draft'."
>
{#if $events_loc.launcher.show_content__hidden_files}
<span class="fas fa-eye-slash m-1 text-neutral-800/80"
></span>
Hide Files
{:else}
<span class="fas fa-eye m-1 text-neutral-800/80"></span>
All Files
{/if}
</button>
<button
type="button"
onclick={() => {
$events_loc.launcher.show_content__hidden_sessions =
!$events_loc.launcher.show_content__hidden_sessions;
}}
class="
btn btn-sm
text-xs
w-1/2 max-w-1/2
preset-tonal-warning
hover:preset-tonal-success
transition-all
"
>
{#if $events_loc.launcher.show_content__hidden_sessions}
<span class="fas fa-eye-slash m-1 text-neutral-800/80"
></span>
Hide Sessions
{:else}
<span class="fas fa-eye m-1 text-neutral-800/80"></span>
All Sessions
{/if}
</button>
</div>
{/if}
<Menu_launcher_controls />
</div>