# Aether Project Components

This document details the various UI components used throughout the Aether SvelteKit frontend project, categorized by their scope and functionality.

## 1. Aether Components (UI/UX)

### 1.1. System Components
These components are part of the core application shell and provide global functionalities.
* **`header`**: Application-wide header.
* **`main/module`s**: Main content area for modules.
* **`footer`**: Application-wide footer.
* **`app`**: Provides global application functionalities such as:
  * Refresh application state.
  * Clear IndexedDB.
  * Clear local storage (settings).
  * Toggle iframe visibility (also updates URL parameter).
  * Copy current URL.
  * Generate and display QR codes.
* **`menu`**: Various menus for different purposes:
  * **`mode`**: Edit mode toggle, more options (all or details).
  * **`access_type`**: Passcode input, clear access.
  * **`user`**: Sign in/out, reset password, email link, change username and email.
  * **`theme`**: Mode (light/dark), name (theme list).
* **`debug`**: Developer-facing tools:
  * Toggle debug mode (also updates URL parameter).
  * Show core and module storages.
  * Manually set initial timestamp.
* **`scroll_to`**: Navigation controls for scrolling:
  * Scroll to top of the page.
  * Scroll page up.
  * Scroll page down.
  * Scroll to bottom of the page.

### 1.2. Core Components
These are reusable components that provide common functionalities across different modules.
* **`copy_btn`**: A button to copy content to the clipboard.
  * Properties: `clipboard`, `bind:value`, `btn_text`, `btn_html`.
* **`txt_editor`**: A basic text area editor.
*   **`md_editor`**: Markdown editor.
    *   Uses CodeMirror (planned for rich text editing).
    *   **Note:** ShadEditor TipTap is present but marked for removal. ShadCN components are also being phased out in favor of CodeMirror for text editing.
* **`html_editor`**: HTML editor.
* **`media_player`**: Component for playing media files.
  * Properties: `hosted_file`, `archive_content`, `media_player`.
  * Bindings: `bind:host_id`, `bind:media_type`.
  * Status: `stopped`, `paused`, `playing`.
* **`hosted_file_li`**: Manages a list of hosted files, making them available for selection.
* **`hosted_file_link_to`**: Lists links per object, with bindings to add/remove links.
* **`upload_to_host`**: Component for uploading files to the host.
  * Handles multiple files.
  * Properties: `link_type`, `link_id`, `inner fragment` (label html).
  * Bindings: `bind:trigger`, `bind:show_spinner`, `bind:show_percent`.
  * Status: `started`, `uploading`, `finished`.
* **`upload_file_tbl`**: Table for uploaded files, includes checks for duplicate file hashes and removal from the list.
* **`download_from_host`**: Component for downloading files from the host.
  * Bindings: `bind:host_file_id`, `bind:filename`, `bind:file_ext`.
  * Properties: `btn inner fragment`.
  * Bindings: `bind:trigger`, `bind:show_spinner`, `bind:show_percent`.
  * Status: `started`, `downloading`, `finished`.
* **`data_store`**: Component for interacting with data stores.
* **`ae_crud`**: Generic CRUD (Create, Read, Update, Delete) component.
  * **Note:** Needs simplification.
  * Properties: `obj`, `prop`, `current_value`.
  * Bindings: `bind:value`, `bind:trigger`, `inner fragment`.
* **`ae_obj_prop_val`**: A wrapper for a function to manage object property values.
  * Bindings: `bind:obj_type`, `bind:obj_id`, `bind:obj_prop`, `bind:obj_value`, `bind:obj_new_value`, `bind:trigger`, `bind:show_spinner`, `bind:show_percent`.
  * Status: `status`, `result`.
* **`sql_qry`**: Component for executing SQL queries.
* **`obj_tbl`**: Object SQL results table or similar.
* **`qr_scanner`**: Component for scanning QR codes.
* **`websocket`**: Component for WebSocket communication.

### 1.3. Main / Module Components
These are components specific to main application sections or individual modules.
* **`menu`**:
  * **`options`**: Various settings, show/hide content and options, limit, sorting options.
  * **`actions`**: Various actions, sign in/out, email.

### 1.4. Object Menu
A standardized menu for interacting with objects.
* **Properties Displayed:** `id`, `name`, `group`, `priority`, `sort`, `alert`, `hide`, `enable`, `note`.
* **Future Properties:** `ext_id`, `ext_sys_id`, `code` (not yet ready).
* **Actions:** `create`, `view`, `edit`, `update`, `hide`, `disable`, `delete`, `alert` (message), `archive` (not yet ready).
* **Future Actions:** `copy`, `import`.
* **Sort Options:**
  * `[default]`: `group > priority > sort (ASC/DESC) > alert > name`
  * `[sort_updated]`: `group > priority > sort (ASC/DESC) > alert > updated_on > created_on`
  * `[priority_updated]`: `group > priority > updated_on (ASC/DESC) > created_on`
  * `[priority_name]`: `group > priority > name (ASC/DESC) > sort > alert > updated_on > created_on`
  * `[name]`: `priority > name (ASC/DESC) > sort > alert > updated_on > created_on`
  * `[created_on]`: `priority > created_on (ASC/DESC)`
  * `[updated_on]`: `priority > updated_on (ASC/DESC) > created_on`

## 2. Pop-ups
Standardized structure for various types of pop-up elements.
* **`modal_header`**:
  * `title`
  * `close` button
* **`modal_main`**: Main content area of the modal.
* **`modal_meta`**: Meta-information section.
* **`modal_footer`**:
  * `close` button
* **`Pop-up Modal (blocking)`**: A modal that blocks interaction with the rest of the page.
  * `modal position`
* **`Pop-up Modal Inline`**: A modal that appears inline with content.
  * `inline`, `inline-block`, `block` display options.
* **`Pop-up Dialog`**: A dialog box.
  * `dialog position`

## 3. Containers
Generic container types used for layout and grouping.
### 3.1. Navigation
* `link`
* `download`

### 3.2. Forms
* `save` button/action
* `clear value` action
* `set null value` action

### 3.3. Other Containers
* `help`: Blue themed container.
* `info`: Blue themed container.
* `alert`: Yellow themed container.
* `warning`: Orange themed container.
* `error`: Red themed container.
* `message`: Green themed container.

## 4. CSS Styling for UI Elements
* **Warning/Hide Buttons:** `variant-soft-warning hover:variant-filled-warning`
* **Error/Delete/Disable Buttons:** `variant-soft-error hover:variant-filled-error`
* **Submenu:** `flex flex-row items-center justify-center gap-1`
