# 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/rich-text editing handled by two active components:
    - `element_editor_codemirror.svelte` — CodeMirror 6, used for source/code editing
    - `element_editor_tiptap.svelte` — TipTap (WYSIWYG), used for rich-text content fields
- **`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.
- **`element_ae_obj_field_editor`**: Standard single-field inline editor. Replaces retired `ae_crud` v1/v2 components.
    - Props: `object_type`, `object_id`, `field_name`, `field_type`, `current_value`
    - Field types: `text`, `textarea`, `select`, `tiptap`, `checkbox`, `date`, `datetime`, `number`
    - Callbacks: `on_success`, `on_error`
    - Respects `$ae_loc.edit_mode` — edit trigger hidden when edit mode is off.
- **`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:** `preset-tonal-warning hover:preset-filled-warning-500`
- **Error/Delete/Disable Buttons:** `preset-tonal-error hover:preset-filled-error-500`
- **Submenu:** `flex flex-row items-center justify-center gap-1`
