{
  "schemaVersion": "1.0.0",
  "readme": "",
  "modules": [
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-action-button.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-action-button",
          "declaration": {
            "name": "LoquixActionButton",
            "module": "/src/components/core/loquix-action-button.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-action-copy.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-action-copy",
          "declaration": {
            "name": "LoquixActionCopy",
            "module": "/src/components/core/loquix-action-copy.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-action-edit.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-action-edit",
          "declaration": {
            "name": "LoquixActionEdit",
            "module": "/src/components/core/loquix-action-edit.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-action-feedback.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-action-feedback",
          "declaration": {
            "name": "LoquixActionFeedback",
            "module": "/src/components/core/loquix-action-feedback.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-attachment-chip.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-attachment-chip",
          "declaration": {
            "name": "LoquixAttachmentChip",
            "module": "/src/components/core/loquix-attachment-chip.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-attachment-panel.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-attachment-panel",
          "declaration": {
            "name": "LoquixAttachmentPanel",
            "module": "/src/components/core/loquix-attachment-panel.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-caveat-notice.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-caveat-notice",
          "declaration": {
            "name": "LoquixCaveatNotice",
            "module": "/src/components/core/loquix-caveat-notice.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-chat-composer.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-chat-composer",
          "declaration": {
            "name": "LoquixChatComposer",
            "module": "/src/components/core/loquix-chat-composer.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-chat-container.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-chat-container",
          "declaration": {
            "name": "LoquixChatContainer",
            "module": "/src/components/core/loquix-chat-container.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-chat-header.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-chat-header",
          "declaration": {
            "name": "LoquixChatHeader",
            "module": "/src/components/core/loquix-chat-header.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-composer-toolbar.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-composer-toolbar",
          "declaration": {
            "name": "LoquixComposerToolbar",
            "module": "/src/components/core/loquix-composer-toolbar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-confidence-indicator.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-confidence-indicator",
          "declaration": {
            "name": "LoquixConfidenceIndicator",
            "module": "/src/components/core/loquix-confidence-indicator.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-correction-input.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-correction-input",
          "declaration": {
            "name": "LoquixCorrectionInput",
            "module": "/src/components/core/loquix-correction-input.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-disagreement-marker.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-disagreement-marker",
          "declaration": {
            "name": "LoquixDisagreementMarker",
            "module": "/src/components/core/loquix-disagreement-marker.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-disclosure-badge.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-disclosure-badge",
          "declaration": {
            "name": "LoquixDisclosureBadge",
            "module": "/src/components/core/loquix-disclosure-badge.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-drop-zone.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-drop-zone",
          "declaration": {
            "name": "LoquixDropZone",
            "module": "/src/components/core/loquix-drop-zone.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-dropdown-select.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-dropdown-select",
          "declaration": {
            "name": "LoquixDropdownSelect",
            "module": "/src/components/core/loquix-dropdown-select.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-example-gallery.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-example-gallery",
          "declaration": {
            "name": "LoquixExampleGallery",
            "module": "/src/components/core/loquix-example-gallery.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-feedback-form.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-feedback-form",
          "declaration": {
            "name": "LoquixFeedbackForm",
            "module": "/src/components/core/loquix-feedback-form.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-filter-bar.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-filter-bar",
          "declaration": {
            "name": "LoquixFilterBar",
            "module": "/src/components/core/loquix-filter-bar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-follow-up-suggestions.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-follow-up-suggestions",
          "declaration": {
            "name": "LoquixFollowUpSuggestions",
            "module": "/src/components/core/loquix-follow-up-suggestions.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-generation-controls.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-generation-controls",
          "declaration": {
            "name": "LoquixGenerationControls",
            "module": "/src/components/core/loquix-generation-controls.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-message-actions.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-message-actions",
          "declaration": {
            "name": "LoquixMessageActions",
            "module": "/src/components/core/loquix-message-actions.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-message-attachments.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-message-attachments",
          "declaration": {
            "name": "LoquixMessageAttachments",
            "module": "/src/components/core/loquix-message-attachments.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-message-avatar.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-message-avatar",
          "declaration": {
            "name": "LoquixMessageAvatar",
            "module": "/src/components/core/loquix-message-avatar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-message-content.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-message-content",
          "declaration": {
            "name": "LoquixMessageContent",
            "module": "/src/components/core/loquix-message-content.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-message-item.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-message-item",
          "declaration": {
            "name": "LoquixMessageItem",
            "module": "/src/components/core/loquix-message-item.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-message-list.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-message-list",
          "declaration": {
            "name": "LoquixMessageList",
            "module": "/src/components/core/loquix-message-list.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-mode-selector.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-mode-selector",
          "declaration": {
            "name": "LoquixModeSelector",
            "module": "/src/components/core/loquix-mode-selector.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-model-selector.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-model-selector",
          "declaration": {
            "name": "LoquixModelSelector",
            "module": "/src/components/core/loquix-model-selector.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-nudge-banner.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-nudge-banner",
          "declaration": {
            "name": "LoquixNudgeBanner",
            "module": "/src/components/core/loquix-nudge-banner.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-parameter-panel.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-parameter-panel",
          "declaration": {
            "name": "LoquixParameterPanel",
            "module": "/src/components/core/loquix-parameter-panel.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-prompt-input.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-prompt-input",
          "declaration": {
            "name": "LoquixPromptInput",
            "module": "/src/components/core/loquix-prompt-input.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-scroll-anchor.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-scroll-anchor",
          "declaration": {
            "name": "LoquixScrollAnchor",
            "module": "/src/components/core/loquix-scroll-anchor.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-suggestion-chips.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-suggestion-chips",
          "declaration": {
            "name": "LoquixSuggestionChips",
            "module": "/src/components/core/loquix-suggestion-chips.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-template-card.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-template-card",
          "declaration": {
            "name": "LoquixTemplateCard",
            "module": "/src/components/core/loquix-template-card.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-template-picker.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-template-picker",
          "declaration": {
            "name": "LoquixTemplatePicker",
            "module": "/src/components/core/loquix-template-picker.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-typing-indicator.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-typing-indicator",
          "declaration": {
            "name": "LoquixTypingIndicator",
            "module": "/src/components/core/loquix-typing-indicator.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-uncertainty-marker.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-uncertainty-marker",
          "declaration": {
            "name": "LoquixUncertaintyMarker",
            "module": "/src/components/core/loquix-uncertainty-marker.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/define-welcome-screen.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "custom-element-definition",
          "name": "loquix-welcome-screen",
          "declaration": {
            "name": "LoquixWelcomeScreen",
            "module": "/src/components/core/loquix-welcome-screen.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-action-button.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixActionButton",
          "cssProperties": [
            {
              "description": "Width/height of the button.",
              "name": "--loquix-action-size"
            },
            {
              "description": "Default background.",
              "name": "--loquix-action-bg"
            },
            {
              "description": "Hover background.",
              "name": "--loquix-action-hover-bg"
            },
            {
              "description": "Default icon colour.",
              "name": "--loquix-action-color"
            },
            {
              "description": "Hover icon colour.",
              "name": "--loquix-action-hover-color"
            }
          ],
          "cssParts": [
            {
              "description": "The `<button>` element.",
              "name": "button"
            }
          ],
          "slots": [
            {
              "description": "Icon SVG or any content to render inside the button.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "action",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Event name dispatched on click (e.g. `loquix-regenerate`).",
              "attribute": "action"
            },
            {
              "kind": "field",
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label for the button.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the button.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "method",
              "name": "_handleClick",
              "privacy": "protected",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fires a custom event whose name equals the `action` property.",
              "name": "*"
            }
          ],
          "attributes": [
            {
              "name": "action",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Event name dispatched on click (e.g. `loquix-regenerate`).",
              "fieldName": "action"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label for the button.",
              "fieldName": "label"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the button.",
              "fieldName": "disabled"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-action-button",
          "customElement": true,
          "summary": "Generic action button for chat message toolbars."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixActionButton",
          "declaration": {
            "name": "LoquixActionButton",
            "module": "src/components/core/loquix-action-button.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-action-copy.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixActionCopy",
          "cssProperties": [
            {
              "description": "Colour of the checkmark state.",
              "name": "--loquix-action-copied-color"
            },
            {
              "description": "Width/height of the button.",
              "name": "--loquix-action-size",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "description": "Default background.",
              "name": "--loquix-action-bg",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "description": "Hover background.",
              "name": "--loquix-action-hover-bg",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "description": "Default icon colour.",
              "name": "--loquix-action-color",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "description": "Hover icon colour.",
              "name": "--loquix-action-hover-color",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ],
          "cssParts": [
            {
              "description": "The `<button>` element (inherited).",
              "name": "button",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "copied",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Reflects the copied state to the host for CSS targeting.",
              "attribute": "copied",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_copyTimer",
              "type": {
                "text": "ReturnType<typeof setTimeout> | undefined"
              },
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_handleClick",
              "privacy": "protected",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "kind": "field",
              "name": "action",
              "type": {
                "text": "string"
              },
              "default": "'loquix-copy'",
              "description": "Event name dispatched on click (e.g. `loquix-regenerate`).",
              "attribute": "action",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "kind": "field",
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label for the button.",
              "attribute": "label",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the button.",
              "attribute": "disabled",
              "reflects": true,
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ],
          "events": [
            {
              "description": "When the copy button is clicked.",
              "name": "loquix-copy"
            },
            {
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fires a custom event whose name equals the `action` property.",
              "name": "*",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ],
          "attributes": [
            {
              "name": "copied",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Reflects the copied state to the host for CSS targeting.",
              "fieldName": "copied"
            },
            {
              "name": "action",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Event name dispatched on click (e.g. `loquix-regenerate`).",
              "fieldName": "action",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label for the button.",
              "fieldName": "label",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the button.",
              "fieldName": "disabled",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ],
          "superclass": {
            "name": "LoquixActionButton",
            "module": "/src/components/core/loquix-action-button.js"
          },
          "tagName": "loquix-action-copy",
          "customElement": true,
          "summary": "Copy action button with clipboard checkmark feedback.\n\nFires `loquix-copy` on click and shows a checkmark icon for 2 seconds.",
          "slots": [
            {
              "description": "Icon SVG or any content to render inside the button.",
              "name": "",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixActionCopy",
          "declaration": {
            "name": "LoquixActionCopy",
            "module": "src/components/core/loquix-action-copy.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-action-edit.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixActionEdit",
          "cssProperties": [
            {
              "description": "Trigger icon size.",
              "name": "--loquix-edit-icon-size"
            },
            {
              "description": "Trigger icon colour.",
              "name": "--loquix-edit-icon-color"
            },
            {
              "description": "Trigger icon hover colour.",
              "name": "--loquix-edit-icon-color-hover"
            },
            {
              "description": "Badge / bubble highlight colour.",
              "name": "--loquix-edit-highlight-color"
            },
            {
              "description": "Textarea border colour.",
              "name": "--loquix-edit-border-color"
            },
            {
              "description": "Textarea background.",
              "name": "--loquix-edit-textarea-bg"
            },
            {
              "description": "Textarea minimum height.",
              "name": "--loquix-edit-textarea-min-height"
            },
            {
              "description": "Textarea maximum height.",
              "name": "--loquix-edit-textarea-max-height"
            },
            {
              "description": "Gap between Submit/Cancel.",
              "name": "--loquix-edit-button-gap"
            }
          ],
          "cssParts": [
            {
              "description": "The pencil-icon trigger button.",
              "name": "trigger"
            },
            {
              "description": "The `<textarea>` in inline mode.",
              "name": "textarea"
            },
            {
              "description": "Container for Submit / Cancel buttons.",
              "name": "actions"
            },
            {
              "description": "The \"Save & Submit\" button.",
              "name": "submit-button"
            },
            {
              "description": "The \"Cancel\" button.",
              "name": "cancel-button"
            },
            {
              "description": "The \"Editing…\" badge in composer mode.",
              "name": "editing-badge"
            }
          ],
          "slots": [
            {
              "description": "Custom trigger icon (replaces default pencil).",
              "name": "icon"
            },
            {
              "description": "Content between textarea and buttons (e.g. warning text, branch info).",
              "name": "editor-footer"
            },
            {
              "description": "Custom editing indicator (replaces default badge in composer mode).",
              "name": "editing-indicator"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "mode",
              "type": {
                "text": "'inline' | 'composer'"
              },
              "default": "'inline'",
              "description": "Editing mode: `inline` (textarea in bubble) or `composer` (text to main input).",
              "attribute": "mode",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "messageId",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Message identifier.",
              "attribute": "message-id"
            },
            {
              "kind": "field",
              "name": "content",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Current message text. Passed as a JS property (not attribute).",
              "attribute": "content"
            },
            {
              "kind": "field",
              "name": "editing",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the component is currently in editing state.",
              "attribute": "editing",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the trigger button.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "submitLabel",
              "type": {
                "text": "string | undefined"
              },
              "description": "Label for the submit button (inline mode).",
              "attribute": "submit-label"
            },
            {
              "kind": "field",
              "name": "cancelLabel",
              "type": {
                "text": "string | undefined"
              },
              "description": "Label for the cancel button.",
              "attribute": "cancel-label"
            },
            {
              "kind": "field",
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Placeholder text for the textarea.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "_editText",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_originalContent",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_textareaEl",
              "type": {
                "text": "HTMLTextAreaElement"
              },
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "startEditing",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "description": "Programmatically enter editing mode."
            },
            {
              "kind": "method",
              "name": "cancelEditing",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "description": "Programmatically cancel editing."
            },
            {
              "kind": "method",
              "name": "completeEdit",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "newContent",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Programmatically complete editing with new content (used by composer mode)."
            },
            {
              "kind": "method",
              "name": "_handleTriggerClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleSubmit",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleCancel",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleInput",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleKeydown",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "KeyboardEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_autoResize",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "textarea",
                  "type": {
                    "text": "HTMLTextAreaElement"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_focusTextarea",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "_canSubmit",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "_renderTrigger",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderInlineEditor",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderComposerBadge",
              "privacy": "private"
            }
          ],
          "events": [
            {
              "description": "When editing begins. Detail: `{ messageId, content }`.",
              "name": "loquix-edit-start"
            },
            {
              "description": "When the user confirms the edit. Detail: `{ messageId, oldContent, newContent }`.",
              "name": "loquix-edit-submit"
            },
            {
              "description": "When the user cancels the edit. Detail: `{ messageId }`.",
              "name": "loquix-edit-cancel"
            }
          ],
          "attributes": [
            {
              "name": "mode",
              "type": {
                "text": "'inline' | 'composer'"
              },
              "default": "'inline'",
              "description": "Editing mode: `inline` (textarea in bubble) or `composer` (text to main input).",
              "fieldName": "mode"
            },
            {
              "name": "message-id",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Message identifier.",
              "fieldName": "messageId"
            },
            {
              "name": "content",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Current message text. Passed as a JS property (not attribute).",
              "fieldName": "content"
            },
            {
              "name": "editing",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the component is currently in editing state.",
              "fieldName": "editing"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the trigger button.",
              "fieldName": "disabled"
            },
            {
              "name": "submit-label",
              "type": {
                "text": "string | undefined"
              },
              "description": "Label for the submit button (inline mode).",
              "fieldName": "submitLabel"
            },
            {
              "name": "cancel-label",
              "type": {
                "text": "string | undefined"
              },
              "description": "Label for the cancel button.",
              "fieldName": "cancelLabel"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Placeholder text for the textarea.",
              "fieldName": "placeholder"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-action-edit",
          "customElement": true,
          "summary": "Action button for editing user messages. Supports inline and composer modes.\n\nIn **inline** mode, clicking the trigger replaces the message content with an\neditable textarea plus Save & Cancel buttons.\n\nIn **composer** mode, clicking the trigger dispatches `loquix-edit-start` so the\nhost application (or `<loquix-chat-container>`) can transfer the text to the main\ncomposer input. The component shows an \"Editing…\" badge until editing completes."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixActionEdit",
          "declaration": {
            "name": "LoquixActionEdit",
            "module": "src/components/core/loquix-action-edit.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-action-feedback.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixActionFeedback",
          "cssProperties": [
            {
              "description": "Colour when `active` is true.",
              "name": "--loquix-action-active-color"
            },
            {
              "description": "Width/height of the button.",
              "name": "--loquix-action-size",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "description": "Default background.",
              "name": "--loquix-action-bg",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "description": "Hover background.",
              "name": "--loquix-action-hover-bg",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "description": "Default icon colour.",
              "name": "--loquix-action-color",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "description": "Hover icon colour.",
              "name": "--loquix-action-hover-color",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ],
          "cssParts": [
            {
              "description": "The `<button>` element (inherited).",
              "name": "button",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "sentiment",
              "type": {
                "text": "FeedbackSentiment"
              },
              "default": "'positive'",
              "description": "Feedback sentiment: `positive` (thumbs up) or `negative` (thumbs down).",
              "attribute": "sentiment",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "active",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the feedback is currently selected/active.",
              "attribute": "active",
              "reflects": true
            },
            {
              "kind": "method",
              "name": "_handleClick",
              "privacy": "protected",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "kind": "field",
              "name": "action",
              "type": {
                "text": "string"
              },
              "default": "'loquix-feedback'",
              "description": "Event name dispatched on click (e.g. `loquix-regenerate`).",
              "attribute": "action",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "kind": "field",
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label for the button.",
              "attribute": "label",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the button.",
              "attribute": "disabled",
              "reflects": true,
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ],
          "events": [
            {
              "description": "When the button is clicked. Detail: `{ sentiment }`.",
              "name": "loquix-feedback"
            },
            {
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fires a custom event whose name equals the `action` property.",
              "name": "*",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ],
          "attributes": [
            {
              "name": "sentiment",
              "type": {
                "text": "FeedbackSentiment"
              },
              "default": "'positive'",
              "description": "Feedback sentiment: `positive` (thumbs up) or `negative` (thumbs down).",
              "fieldName": "sentiment"
            },
            {
              "name": "active",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the feedback is currently selected/active.",
              "fieldName": "active"
            },
            {
              "name": "action",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Event name dispatched on click (e.g. `loquix-regenerate`).",
              "fieldName": "action",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label for the button.",
              "fieldName": "label",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the button.",
              "fieldName": "disabled",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ],
          "superclass": {
            "name": "LoquixActionButton",
            "module": "/src/components/core/loquix-action-button.js"
          },
          "tagName": "loquix-action-feedback",
          "customElement": true,
          "summary": "Feedback action button (thumbs up/down) with toggle state.",
          "slots": [
            {
              "description": "Icon SVG or any content to render inside the button.",
              "name": "",
              "inheritedFrom": {
                "name": "LoquixActionButton",
                "module": "src/components/core/loquix-action-button.ts"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixActionFeedback",
          "declaration": {
            "name": "LoquixActionFeedback",
            "module": "src/components/core/loquix-action-feedback.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-attachment-chip.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixAttachmentChip",
          "cssProperties": [
            {
              "description": "Chip background",
              "name": "--loquix-attachment-chip-bg",
              "default": "rgba(0,0,0,0.04)"
            },
            {
              "description": "Chip border color",
              "name": "--loquix-attachment-chip-border-color",
              "default": "rgba(0,0,0,0.08)"
            },
            {
              "description": "Chip border radius",
              "name": "--loquix-attachment-chip-border-radius",
              "default": "8px"
            },
            {
              "description": "Chip text color",
              "name": "--loquix-attachment-chip-color",
              "default": "inherit"
            },
            {
              "description": "Chip padding",
              "name": "--loquix-attachment-chip-padding",
              "default": "6px 10px"
            },
            {
              "description": "Chip font size",
              "name": "--loquix-attachment-chip-font-size",
              "default": "0.8125rem"
            },
            {
              "description": "Upload progress bar color",
              "name": "--loquix-attachment-chip-progress-color"
            },
            {
              "description": "Sweep highlight gradient (set to `none` to disable)",
              "name": "--loquix-attachment-chip-progress-sweep-bg"
            },
            {
              "description": "Sweep animation shorthand (set to `none` to disable)",
              "name": "--loquix-attachment-chip-progress-sweep"
            },
            {
              "description": "Error state color",
              "name": "--loquix-attachment-chip-error-color"
            },
            {
              "description": "Max width for filename (CSS, overridden by max-filename-length)",
              "name": "--loquix-attachment-chip-filename-max-width"
            },
            {
              "description": "Preview thumbnail size",
              "name": "--loquix-attachment-chip-preview-size",
              "default": "28px"
            },
            {
              "description": "Preview thumbnail border radius",
              "name": "--loquix-attachment-chip-preview-radius",
              "default": "4px"
            }
          ],
          "cssParts": [
            {
              "description": "The chip container",
              "name": "chip"
            },
            {
              "description": "The icon/preview area",
              "name": "icon"
            },
            {
              "description": "The remove button",
              "name": "remove"
            },
            {
              "description": "The retry button",
              "name": "retry"
            },
            {
              "description": "The error tooltip popover",
              "name": "error-tooltip"
            }
          ],
          "slots": [
            {
              "description": "Custom icon/preview content. Overrides both `preview` URL and auto-detected emoji icon.",
              "name": "icon"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "filename",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Display filename",
              "attribute": "filename"
            },
            {
              "kind": "field",
              "name": "filetype",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "MIME type or extension shorthand (e.g. 'image/png', 'pdf', 'ts')",
              "attribute": "filetype"
            },
            {
              "kind": "field",
              "name": "size",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "File size in bytes",
              "attribute": "size"
            },
            {
              "kind": "field",
              "name": "purpose",
              "type": {
                "text": "AttachmentPurpose | undefined"
              },
              "description": "Semantic purpose of this attachment",
              "attribute": "purpose",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "removable",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether the chip can be removed",
              "attribute": "removable",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "status",
              "type": {
                "text": "AttachmentStatus"
              },
              "default": "'complete'",
              "description": "Upload/processing status",
              "attribute": "status",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "progress",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Upload progress 0-100",
              "attribute": "progress"
            },
            {
              "kind": "field",
              "name": "attachmentId",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Unique attachment id (used in events)",
              "attribute": "attachment-id"
            },
            {
              "kind": "field",
              "name": "error",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message (shown in tooltip when status is 'error')",
              "attribute": "error"
            },
            {
              "kind": "field",
              "name": "maxFilenameLength",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Max filename length before truncation (0 = no limit, uses CSS text-overflow)",
              "attribute": "max-filename-length"
            },
            {
              "kind": "field",
              "name": "noRetry",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Hides the retry button on error state",
              "attribute": "no-retry",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "preview",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "URL for a thumbnail preview image (shown instead of the auto emoji icon)",
              "attribute": "preview"
            },
            {
              "kind": "field",
              "name": "_tooltipEl",
              "type": {
                "text": "HTMLElement | null"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_safePreviewUrl",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "description": "Sanitised preview URL — allows blob:, https:, http: protocols.\nFor data: URLs, only `data:image/*` is permitted (excluding `data:image/svg+xml`\nwhich can contain executable scripts).",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "_prevWidth",
              "type": {
                "text": "number"
              },
              "privacy": "private",
              "default": "0",
              "description": "Captured chip width before a status change re-render"
            },
            {
              "kind": "field",
              "name": "_widthTimer",
              "type": {
                "text": "number"
              },
              "privacy": "private",
              "default": "0",
              "description": "Timer id for deferred cleanup after width transition"
            },
            {
              "kind": "field",
              "name": "_attachment",
              "type": {
                "text": "Attachment"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "_formatSize",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              },
              "parameters": [
                {
                  "name": "bytes",
                  "type": {
                    "text": "number"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_getFileIcon",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              }
            },
            {
              "kind": "method",
              "name": "_truncateFilename",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              },
              "parameters": [
                {
                  "name": "name",
                  "type": {
                    "text": "string"
                  }
                },
                {
                  "name": "max",
                  "type": {
                    "text": "number"
                  }
                }
              ],
              "description": "Truncate filename preserving extension: \"very-long-name.pdf\" → \"very-lo…me.pdf\""
            },
            {
              "kind": "method",
              "name": "_handleRemove",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleRetry",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_showErrorTooltip",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "MouseEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_hideErrorTooltip",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "_closeSvg",
              "privacy": "private",
              "default": "svg`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg>`"
            },
            {
              "kind": "field",
              "name": "_errorSvg",
              "privacy": "private",
              "default": "svg`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/></svg>`"
            },
            {
              "kind": "field",
              "name": "_retrySvg",
              "privacy": "private",
              "default": "svg`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 4 23 10 17 10\"/><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"/></svg>`"
            },
            {
              "kind": "method",
              "name": "_getStatusLabel",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              }
            }
          ],
          "events": [
            {
              "description": "Fired when the remove button is clicked. Detail: { attachment }",
              "name": "loquix-attachment-remove"
            },
            {
              "description": "Fired when the retry button is clicked on an errored chip. Detail: { attachment }",
              "name": "loquix-attachment-retry"
            }
          ],
          "attributes": [
            {
              "name": "filename",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Display filename",
              "fieldName": "filename"
            },
            {
              "name": "filetype",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "MIME type or extension shorthand (e.g. 'image/png', 'pdf', 'ts')",
              "fieldName": "filetype"
            },
            {
              "name": "size",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "File size in bytes",
              "fieldName": "size"
            },
            {
              "name": "purpose",
              "type": {
                "text": "AttachmentPurpose | undefined"
              },
              "description": "Semantic purpose of this attachment",
              "fieldName": "purpose"
            },
            {
              "name": "removable",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether the chip can be removed",
              "fieldName": "removable"
            },
            {
              "name": "status",
              "type": {
                "text": "AttachmentStatus"
              },
              "default": "'complete'",
              "description": "Upload/processing status",
              "fieldName": "status"
            },
            {
              "name": "progress",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Upload progress 0-100",
              "fieldName": "progress"
            },
            {
              "name": "attachment-id",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Unique attachment id (used in events)",
              "fieldName": "attachmentId"
            },
            {
              "name": "error",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message (shown in tooltip when status is 'error')",
              "fieldName": "error"
            },
            {
              "name": "max-filename-length",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Max filename length before truncation (0 = no limit, uses CSS text-overflow)",
              "fieldName": "maxFilenameLength"
            },
            {
              "name": "no-retry",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Hides the retry button on error state",
              "fieldName": "noRetry"
            },
            {
              "name": "preview",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "URL for a thumbnail preview image (shown instead of the auto emoji icon)",
              "fieldName": "preview"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-attachment-chip",
          "customElement": true,
          "summary": "Displays a single file attachment with icon, name, size, remove/retry actions, and error tooltip."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixAttachmentChip",
          "declaration": {
            "name": "LoquixAttachmentChip",
            "module": "src/components/core/loquix-attachment-chip.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-attachment-panel.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixAttachmentPanel",
          "cssParts": [
            {
              "description": "The panel container",
              "name": "panel"
            },
            {
              "description": "The chips grid",
              "name": "chips"
            },
            {
              "description": "The upload trigger button",
              "name": "trigger"
            }
          ],
          "slots": [
            {
              "description": "Custom upload trigger button",
              "name": "trigger"
            },
            {
              "description": "Custom icon for the default trigger button",
              "name": "trigger-icon"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "attachments",
              "type": {
                "text": "Attachment[]"
              },
              "default": "[]",
              "description": "Array of current attachments.",
              "attribute": "attachments"
            },
            {
              "kind": "field",
              "name": "acceptedTypes",
              "type": {
                "text": "string"
              },
              "default": "'*'",
              "description": "Accepted file types (MIME or extension).",
              "attribute": "accepted-types"
            },
            {
              "kind": "field",
              "name": "maxFiles",
              "type": {
                "text": "number"
              },
              "default": "10",
              "description": "Maximum number of files allowed.",
              "attribute": "max-files"
            },
            {
              "kind": "field",
              "name": "maxSize",
              "type": {
                "text": "number"
              },
              "default": "10485760",
              "description": "Maximum file size in bytes (default: 10 MB).",
              "attribute": "max-size"
            },
            {
              "kind": "field",
              "name": "multiple",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Allow multiple file selection.",
              "attribute": "multiple"
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the panel is disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "noTrigger",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Hide the default trigger button. Use when providing an external upload button.",
              "attribute": "no-trigger",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "triggerLabel",
              "type": {
                "text": "string | undefined"
              },
              "description": "Label text for the default trigger button.",
              "attribute": "trigger-label"
            },
            {
              "kind": "field",
              "name": "_fileInput",
              "type": {
                "text": "HTMLInputElement | undefined"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_previewUrls",
              "privacy": "private",
              "default": "new Map<string, string>()",
              "description": "Map of attachment id → blob URL for image previews."
            },
            {
              "kind": "field",
              "name": "_uploadSvg",
              "privacy": "private",
              "default": "svg`<svg class=\"trigger__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"17 8 12 3 7 8\"/><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"/></svg>`"
            },
            {
              "kind": "field",
              "name": "_isMaxReached",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "_isImageFile",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "parameters": [
                {
                  "name": "attachment",
                  "type": {
                    "text": "Attachment"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_getPreviewUrl",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string | undefined"
                }
              },
              "parameters": [
                {
                  "name": "attachment",
                  "type": {
                    "text": "Attachment"
                  }
                }
              ],
              "description": "Returns a blob URL preview for image attachments that have a File object.\nLazily creates and caches the URL to avoid re-creating on each render."
            },
            {
              "kind": "method",
              "name": "_cleanupPreviewUrls",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "description": "Revoke blob URLs for attachments no longer in the list."
            },
            {
              "kind": "method",
              "name": "_handleTriggerClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "openFilePicker",
              "privacy": "public",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "description": "Programmatically opens the native file picker dialog.\nRespects `disabled` and `maxFiles` constraints."
            },
            {
              "kind": "method",
              "name": "addFiles",
              "privacy": "public",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "files",
                  "type": {
                    "text": "File[]"
                  }
                }
              ],
              "description": "Programmatically add files (e.g. from paste or external drop).\nRespects `disabled`, `acceptedTypes`, `maxSize`, and `maxFiles` constraints."
            },
            {
              "kind": "method",
              "name": "_handleFileSelect",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_processFiles",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "File[]"
                }
              },
              "parameters": [
                {
                  "name": "files",
                  "type": {
                    "text": "FileList | File[]"
                  }
                }
              ],
              "description": "Centralized validation for files from both the file-input and drag-and-drop.\nFilters by acceptedTypes (MIME type and extension), maxSize, multiple flag,\nand maxFiles remaining capacity. Returns the validated subset of files."
            },
            {
              "kind": "method",
              "name": "_emitValidFiles",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "files",
                  "type": {
                    "text": "FileList | File[]"
                  }
                }
              ],
              "description": "Run validation then dispatch the attachment-add event."
            },
            {
              "kind": "method",
              "name": "_handleChipRemove",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                },
                {
                  "name": "attachment",
                  "type": {
                    "text": "Attachment"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "description": "Fired when files are added. Detail: { attachments }",
              "name": "loquix-attachment-add"
            },
            {
              "description": "Re-dispatched from child attachment-chip",
              "name": "loquix-attachment-remove"
            }
          ],
          "attributes": [
            {
              "name": "attachments",
              "type": {
                "text": "Attachment[]"
              },
              "default": "[]",
              "description": "Array of current attachments.",
              "fieldName": "attachments"
            },
            {
              "name": "accepted-types",
              "type": {
                "text": "string"
              },
              "default": "'*'",
              "description": "Accepted file types (MIME or extension).",
              "fieldName": "acceptedTypes"
            },
            {
              "name": "max-files",
              "type": {
                "text": "number"
              },
              "default": "10",
              "description": "Maximum number of files allowed.",
              "fieldName": "maxFiles"
            },
            {
              "name": "max-size",
              "type": {
                "text": "number"
              },
              "default": "10485760",
              "description": "Maximum file size in bytes (default: 10 MB).",
              "fieldName": "maxSize"
            },
            {
              "name": "multiple",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Allow multiple file selection.",
              "fieldName": "multiple"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the panel is disabled.",
              "fieldName": "disabled"
            },
            {
              "name": "no-trigger",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Hide the default trigger button. Use when providing an external upload button.",
              "fieldName": "noTrigger"
            },
            {
              "name": "trigger-label",
              "type": {
                "text": "string | undefined"
              },
              "description": "Label text for the default trigger button.",
              "fieldName": "triggerLabel"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-attachment-panel",
          "customElement": true,
          "summary": "Container for managing file attachments with file picker and attachment chips.\nDrag-and-drop is handled by the parent `loquix-chat-composer` via `loquix-drop-zone`."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixAttachmentPanel",
          "declaration": {
            "name": "LoquixAttachmentPanel",
            "module": "src/components/core/loquix-attachment-panel.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-caveat-notice.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixCaveatNotice",
          "cssProperties": [
            {
              "description": "Text colour.",
              "name": "--loquix-caveat-text-color"
            },
            {
              "description": "Background for inline / contextual variants.",
              "name": "--loquix-caveat-bg"
            },
            {
              "description": "Font size (default 0.6875rem).",
              "name": "--loquix-caveat-font-size"
            },
            {
              "description": "Inner padding.",
              "name": "--loquix-caveat-padding"
            }
          ],
          "cssParts": [
            {
              "description": "The notice container element.",
              "name": "notice"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "message",
              "type": {
                "text": "string | undefined"
              },
              "description": "Caveat message text.",
              "attribute": "message"
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "CaveatVariant"
              },
              "default": "'footer'",
              "description": "Display variant.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "method",
              "name": "_renderWarningIcon",
              "privacy": "private"
            }
          ],
          "attributes": [
            {
              "name": "message",
              "type": {
                "text": "string | undefined"
              },
              "description": "Caveat message text.",
              "fieldName": "message"
            },
            {
              "name": "variant",
              "type": {
                "text": "CaveatVariant"
              },
              "default": "'footer'",
              "description": "Display variant.",
              "fieldName": "variant"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-caveat-notice",
          "customElement": true,
          "summary": "Informational notice about AI limitations shown to the user."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixCaveatNotice",
          "declaration": {
            "name": "LoquixCaveatNotice",
            "module": "src/components/core/loquix-caveat-notice.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-chat-composer.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixChatComposer",
          "cssProperties": [
            {
              "description": "Background of the composer area.",
              "name": "--loquix-composer-bg"
            },
            {
              "description": "Top border colour.",
              "name": "--loquix-composer-border-color"
            },
            {
              "description": "Inner padding.",
              "name": "--loquix-composer-padding"
            },
            {
              "description": "Gap between sections.",
              "name": "--loquix-composer-gap"
            },
            {
              "description": "Container background (contained variant).",
              "name": "--loquix-composer-container-bg"
            },
            {
              "description": "Container border colour (contained variant).",
              "name": "--loquix-composer-container-border-color"
            },
            {
              "description": "Container border radius (contained variant).",
              "name": "--loquix-composer-container-border-radius"
            },
            {
              "description": "Send button background.",
              "name": "--loquix-send-button-bg"
            },
            {
              "description": "Send button icon colour.",
              "name": "--loquix-send-button-color"
            }
          ],
          "cssParts": [
            {
              "description": "Outer wrapper.",
              "name": "composer"
            },
            {
              "description": "The bordered container (contained variant only).",
              "name": "container"
            },
            {
              "description": "Toolbar areas (top and bottom).",
              "name": "toolbar"
            },
            {
              "description": "The bottom bar with actions and send button (contained variant).",
              "name": "actions-bar"
            },
            {
              "description": "The send / submit button.",
              "name": "send-button"
            }
          ],
          "slots": [
            {
              "description": "Content above the input area.",
              "name": "toolbar-top"
            },
            {
              "description": "Override the default prompt input.",
              "name": "input"
            },
            {
              "description": "Suggestion chips below the input.",
              "name": "suggestions"
            },
            {
              "description": "Content below the input area.",
              "name": "toolbar-bottom"
            },
            {
              "description": "Left side of actions bar (contained variant): file upload, model selector, etc.",
              "name": "actions-left"
            },
            {
              "description": "Right side of actions bar before send button (contained variant).",
              "name": "actions-right"
            },
            {
              "description": "Footer area at the bottom.",
              "name": "footer"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "ComposerVariant"
              },
              "default": "'contained'",
              "description": "Layout variant: 'contained' = Claude/ChatGPT style, 'default' = classic side-by-side.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "placeholder",
              "type": {
                "text": "string | undefined"
              },
              "description": "Placeholder text passed to the inner prompt input.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the composer is disabled (input + button).",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "submitDisabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether submission is disabled (button + Enter) while input remains active.",
              "attribute": "submit-disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "streaming",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether AI generation is currently streaming.",
              "attribute": "streaming",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "maxLength",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Maximum character length (0 = unlimited).",
              "attribute": "max-length"
            },
            {
              "kind": "field",
              "name": "_hasContent",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false",
              "description": "Internal tracking of whether the input has content."
            },
            {
              "kind": "field",
              "name": "_inputValue",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_boundHandlePasteFiles",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_handlePasteFiles",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "CustomEvent<LoquixPasteFilesDetail>"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleDrop",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "CustomEvent<LoquixDropDetail>"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleInputChange",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "CustomEvent<LoquixChangeDetail>"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleSubmitFromInput",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "CustomEvent<LoquixSubmitDetail>"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleSendClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleStopClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_renderSendButton",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderStopButton",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderDefaultLayout",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderContainedLayout",
              "privacy": "private"
            }
          ],
          "events": [
            {
              "description": "Bubbled from the inner prompt input or send button.",
              "name": "loquix-submit"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "ComposerVariant"
              },
              "default": "'contained'",
              "description": "Layout variant: 'contained' = Claude/ChatGPT style, 'default' = classic side-by-side.",
              "fieldName": "variant"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string | undefined"
              },
              "description": "Placeholder text passed to the inner prompt input.",
              "fieldName": "placeholder"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the composer is disabled (input + button).",
              "fieldName": "disabled"
            },
            {
              "name": "submit-disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether submission is disabled (button + Enter) while input remains active.",
              "fieldName": "submitDisabled"
            },
            {
              "name": "streaming",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether AI generation is currently streaming.",
              "fieldName": "streaming"
            },
            {
              "name": "max-length",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Maximum character length (0 = unlimited).",
              "fieldName": "maxLength"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-chat-composer",
          "customElement": true,
          "summary": "Composite input area with a prompt input, send button, and optional toolbars."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixChatComposer",
          "declaration": {
            "name": "LoquixChatComposer",
            "module": "src/components/core/loquix-chat-composer.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-chat-container.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixChatContainer",
          "cssProperties": [
            {
              "description": "Background colour.",
              "name": "--loquix-container-bg"
            },
            {
              "description": "Max width for the full layout.",
              "name": "--loquix-container-max-width"
            },
            {
              "description": "Border radius (floating layout).",
              "name": "--loquix-container-border-radius"
            },
            {
              "description": "Box shadow (floating layout).",
              "name": "--loquix-container-shadow"
            },
            {
              "description": "Width of the sidebar.",
              "name": "--loquix-sidebar-width"
            },
            {
              "description": "General border colour.",
              "name": "--loquix-border-color"
            }
          ],
          "cssParts": [
            {
              "description": "The outermost wrapper.",
              "name": "container"
            },
            {
              "description": "The main content area (header + messages + composer).",
              "name": "main"
            },
            {
              "description": "Optional sidebar region.",
              "name": "sidebar"
            }
          ],
          "slots": [
            {
              "description": "Chat header area.",
              "name": "header"
            },
            {
              "description": "Optional sidebar content.",
              "name": "sidebar"
            },
            {
              "description": "Message list area.",
              "name": "messages"
            },
            {
              "description": "Composer / input area.",
              "name": "composer"
            },
            {
              "description": "Footer area.",
              "name": "footer"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "layout",
              "type": {
                "text": "ChatLayout"
              },
              "default": "'full'",
              "description": "Layout mode. Reflected as a host attribute for CSS targeting.",
              "attribute": "layout",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "mode",
              "type": {
                "text": "ChatMode"
              },
              "default": "'chat'",
              "description": "Functional mode of the chat.",
              "attribute": "mode",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "model",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Current model identifier.",
              "attribute": "model"
            },
            {
              "kind": "field",
              "name": "memoryEnabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether memory / conversation history is enabled.",
              "attribute": "memory-enabled"
            },
            {
              "kind": "field",
              "name": "privateMode",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether private mode hides model information.",
              "attribute": "private-mode",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "streaming",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether AI is currently streaming.",
              "attribute": "streaming",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_keyboard",
              "privacy": "private",
              "default": "new KeyboardController(this)"
            }
          ],
          "attributes": [
            {
              "name": "layout",
              "type": {
                "text": "ChatLayout"
              },
              "default": "'full'",
              "description": "Layout mode. Reflected as a host attribute for CSS targeting.",
              "fieldName": "layout"
            },
            {
              "name": "mode",
              "type": {
                "text": "ChatMode"
              },
              "default": "'chat'",
              "description": "Functional mode of the chat.",
              "fieldName": "mode"
            },
            {
              "name": "model",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Current model identifier.",
              "fieldName": "model"
            },
            {
              "name": "memory-enabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether memory / conversation history is enabled.",
              "fieldName": "memoryEnabled"
            },
            {
              "name": "private-mode",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether private mode hides model information.",
              "fieldName": "privateMode"
            },
            {
              "name": "streaming",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether AI is currently streaming.",
              "fieldName": "streaming"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-chat-container",
          "customElement": true,
          "summary": "Root container that organises the chat UI layout."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixChatContainer",
          "declaration": {
            "name": "LoquixChatContainer",
            "module": "src/components/core/loquix-chat-container.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-chat-header.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixChatHeader",
          "cssProperties": [
            {
              "description": "Background colour of the header.",
              "name": "--loquix-header-bg"
            },
            {
              "description": "Text colour.",
              "name": "--loquix-header-color"
            },
            {
              "description": "Height of the header bar.",
              "name": "--loquix-header-height"
            },
            {
              "description": "Horizontal padding.",
              "name": "--loquix-header-padding"
            },
            {
              "description": "Bottom border colour.",
              "name": "--loquix-border-color"
            }
          ],
          "cssParts": [
            {
              "description": "Outer wrapper.",
              "name": "header"
            },
            {
              "description": "The title text element.",
              "name": "title"
            }
          ],
          "slots": [
            {
              "description": "Avatar or icon to the left of the title.",
              "name": "avatar"
            },
            {
              "description": "Override the agent name / title.",
              "name": "title"
            },
            {
              "description": "Right-side controls (model badge, settings, etc.).",
              "name": "controls"
            },
            {
              "description": "Mode-switching UI.",
              "name": "mode-switcher"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "agentName",
              "type": {
                "text": "string | undefined"
              },
              "description": "Display name of the AI agent.",
              "attribute": "agent-name"
            },
            {
              "kind": "field",
              "name": "showModelBadge",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show a model badge in the controls area.",
              "attribute": "show-model-badge"
            },
            {
              "kind": "field",
              "name": "privateMode",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether private mode is on (hides model info).",
              "attribute": "private-mode",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "agent-name",
              "type": {
                "text": "string | undefined"
              },
              "description": "Display name of the AI agent.",
              "fieldName": "agentName"
            },
            {
              "name": "show-model-badge",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show a model badge in the controls area.",
              "fieldName": "showModelBadge"
            },
            {
              "name": "private-mode",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether private mode is on (hides model info).",
              "fieldName": "privateMode"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-chat-header",
          "customElement": true,
          "summary": "Horizontal header bar at the top of a chat interface."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixChatHeader",
          "declaration": {
            "name": "LoquixChatHeader",
            "module": "src/components/core/loquix-chat-header.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-composer-toolbar.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixComposerToolbar",
          "cssProperties": [
            {
              "description": "Toolbar padding.",
              "name": "--loquix-composer-toolbar-padding"
            },
            {
              "description": "Gap between left and right sections.",
              "name": "--loquix-composer-toolbar-gap"
            },
            {
              "description": "Gap between items within a section.",
              "name": "--loquix-composer-toolbar-item-gap"
            },
            {
              "description": "Minimum toolbar height.",
              "name": "--loquix-composer-toolbar-min-height"
            },
            {
              "description": "Border colour when border attribute is set.",
              "name": "--loquix-composer-toolbar-border-color"
            }
          ],
          "cssParts": [
            {
              "description": "The outer toolbar wrapper.",
              "name": "toolbar"
            },
            {
              "description": "Left-aligned section.",
              "name": "left"
            },
            {
              "description": "Right-aligned section.",
              "name": "right"
            }
          ],
          "slots": [
            {
              "description": "Items aligned to the left (model selector, permissions, etc.).",
              "name": "actions-left"
            },
            {
              "description": "Items aligned to the right (branch selector, settings, etc.).",
              "name": "actions-right"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "border",
              "type": {
                "text": "'none' | 'top' | 'bottom'"
              },
              "default": "'none'",
              "description": "Which side to draw a 1px separator: 'none', 'top', or 'bottom'.",
              "attribute": "border",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "border",
              "type": {
                "text": "'none' | 'top' | 'bottom'"
              },
              "default": "'none'",
              "description": "Which side to draw a 1px separator: 'none', 'top', or 'bottom'.",
              "fieldName": "border"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-composer-toolbar",
          "customElement": true,
          "summary": "A simple toolbar bar with left/right slots, placed above or below the chat composer."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixComposerToolbar",
          "declaration": {
            "name": "LoquixComposerToolbar",
            "module": "src/components/core/loquix-composer-toolbar.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-confidence-indicator.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixConfidenceIndicator",
          "cssProperties": [
            {
              "description": "Low-confidence background.",
              "name": "--loquix-conf-low-bg"
            },
            {
              "description": "Low-confidence foreground.",
              "name": "--loquix-conf-low-color"
            },
            {
              "description": "Low-confidence solid fill (bar/dot).",
              "name": "--loquix-conf-low-fill"
            },
            {
              "description": "Medium-confidence background.",
              "name": "--loquix-conf-med-bg"
            },
            {
              "description": "Medium-confidence foreground.",
              "name": "--loquix-conf-med-color"
            },
            {
              "description": "Medium-confidence solid fill (bar/dot).",
              "name": "--loquix-conf-med-fill"
            },
            {
              "description": "High-confidence background.",
              "name": "--loquix-conf-high-bg"
            },
            {
              "description": "High-confidence foreground.",
              "name": "--loquix-conf-high-color"
            },
            {
              "description": "High-confidence solid fill (bar/dot).",
              "name": "--loquix-conf-high-fill"
            }
          ],
          "cssParts": [
            {
              "description": "The host element acts as the meter wrapper.",
              "name": "meter"
            },
            {
              "description": "The bar variant track.",
              "name": "track"
            },
            {
              "description": "The bar variant fill.",
              "name": "fill"
            },
            {
              "description": "A dot in the dots variant.",
              "name": "dot"
            },
            {
              "description": "The numeric value text.",
              "name": "value"
            },
            {
              "description": "The label text.",
              "name": "label"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "value",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Confidence score in [0, 1]. Values outside the range are clamped.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "ConfidenceVariant"
              },
              "default": "'bar'",
              "description": "Visual variant.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "level",
              "type": {
                "text": "ConfidenceLevel | undefined"
              },
              "description": "Optional override for the derived level. When set, beats the threshold-based derivation.",
              "attribute": "level",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "type": {
                "text": "string | undefined"
              },
              "description": "Optional textual label. Falls back to a localised default for `aria-label`.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "lowThreshold",
              "default": "0.4",
              "description": "Lower threshold — `value < lowThreshold` → `low`. Invalid values fall back to 0.4.",
              "attribute": "low-threshold",
              "type": {
                "text": "number"
              }
            },
            {
              "kind": "field",
              "name": "highThreshold",
              "default": "0.75",
              "description": "Upper threshold — `value >= highThreshold` → `high`. Invalid values fall back to 0.75.",
              "attribute": "high-threshold",
              "type": {
                "text": "number"
              }
            },
            {
              "kind": "field",
              "name": "showValue",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to render the numeric percentage alongside the visual.",
              "attribute": "show-value"
            },
            {
              "kind": "method",
              "name": "_deriveLevel",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "ConfidenceLevel"
                }
              }
            },
            {
              "kind": "field",
              "name": "effectiveLevel",
              "type": {
                "text": "ConfidenceLevel"
              },
              "description": "The currently effective confidence level, derived from `value`/thresholds\nunless `level` is explicitly set. Exposed for tests and consumers who need\nto read the derived value without recomputing it themselves.",
              "readonly": true
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Confidence score in [0, 1]. Values outside the range are clamped.",
              "fieldName": "value"
            },
            {
              "name": "variant",
              "type": {
                "text": "ConfidenceVariant"
              },
              "default": "'bar'",
              "description": "Visual variant.",
              "fieldName": "variant"
            },
            {
              "name": "level",
              "type": {
                "text": "ConfidenceLevel | undefined"
              },
              "description": "Optional override for the derived level. When set, beats the threshold-based derivation.",
              "fieldName": "level"
            },
            {
              "name": "label",
              "type": {
                "text": "string | undefined"
              },
              "description": "Optional textual label. Falls back to a localised default for `aria-label`.",
              "fieldName": "label"
            },
            {
              "name": "low-threshold",
              "default": "DEFAULT_LOW",
              "description": "Lower threshold — `value < lowThreshold` → `low`. Invalid values fall back to 0.4.",
              "fieldName": "lowThreshold"
            },
            {
              "name": "high-threshold",
              "default": "DEFAULT_HIGH",
              "description": "Upper threshold — `value >= highThreshold` → `high`. Invalid values fall back to 0.75.",
              "fieldName": "highThreshold"
            },
            {
              "name": "show-value",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to render the numeric percentage alongside the visual.",
              "fieldName": "showValue"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-confidence-indicator",
          "customElement": true,
          "summary": "Visualises an assistant confidence score (0..1) as a bar / dots / badge / numeric.\n\nAuto-derives `level` (`low` / `medium` / `high`) from `value` using `low-threshold`\nand `high-threshold`. If thresholds are invalid or inverted, both reset to defaults\n(0.4 / 0.75) so the derived level still tracks the value. Setting `level` explicitly\noverrides the derived value."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixConfidenceIndicator",
          "declaration": {
            "name": "LoquixConfidenceIndicator",
            "module": "src/components/core/loquix-confidence-indicator.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-correction-input.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixCorrectionInput",
          "cssParts": [
            {
              "description": "The outer wrapper.",
              "name": "container"
            },
            {
              "description": "The strikethrough block showing the original text.",
              "name": "original"
            },
            {
              "description": "One labelled field (correction or reason).",
              "name": "field"
            },
            {
              "description": "The correction textarea.",
              "name": "textarea"
            },
            {
              "description": "The reason input.",
              "name": "input"
            },
            {
              "description": "Submit button.",
              "name": "submit"
            },
            {
              "description": "Cancel button.",
              "name": "cancel"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "_uid",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "original",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The original assistant text that the user wants to correct.",
              "attribute": "original"
            },
            {
              "kind": "field",
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The current correction text. Two-way: updates internally on input.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "reason",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The reason text. Two-way: updates internally on input.",
              "attribute": "reason"
            },
            {
              "kind": "field",
              "name": "reasonRequired",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "When true, requires a non-empty reason before Submit is enabled.",
              "attribute": "reason-required",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_onValueInput",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_onReasonInput",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_isSubmitDisabled",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "boolean"
                }
              }
            },
            {
              "kind": "field",
              "name": "_onSubmit",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_onCancel",
              "privacy": "private"
            }
          ],
          "events": [
            {
              "description": "When Submit is clicked. Detail: `{ correction, reason?, original? }`.",
              "name": "loquix-correction-submit"
            },
            {
              "description": "When Cancel is clicked.",
              "name": "loquix-correction-cancel"
            }
          ],
          "attributes": [
            {
              "name": "original",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The original assistant text that the user wants to correct.",
              "fieldName": "original"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The current correction text. Two-way: updates internally on input.",
              "fieldName": "value"
            },
            {
              "name": "reason",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The reason text. Two-way: updates internally on input.",
              "fieldName": "reason"
            },
            {
              "name": "reason-required",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "When true, requires a non-empty reason before Submit is enabled.",
              "fieldName": "reasonRequired"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-correction-input",
          "customElement": true,
          "summary": "Inline form for proposing a correction to an assistant message.\n\nShows the original answer (strikethrough) when provided, plus a textarea for\nthe correction and an optional reason input. Submit is disabled until the\ncorrection is non-empty (and reason is non-empty when `reason-required`).\n\nAll values are rendered as text — no `unsafeHTML` — so user-supplied content\ncannot inject markup."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixCorrectionInput",
          "declaration": {
            "name": "LoquixCorrectionInput",
            "module": "src/components/core/loquix-correction-input.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-disagreement-marker.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixDisagreementMarker",
          "cssProperties": [
            {
              "description": "Background colour (shared with low-confidence palette).",
              "name": "--loquix-conf-low-bg"
            },
            {
              "description": "Foreground colour.",
              "name": "--loquix-conf-low-color"
            },
            {
              "description": "Border accent colour.",
              "name": "--loquix-conf-low-fill"
            }
          ],
          "cssParts": [
            {
              "description": "The wrapper element (pill for inline, container for banner).",
              "name": "marker"
            },
            {
              "description": "The leading icon.",
              "name": "icon"
            },
            {
              "description": "Banner body (title + reason + slotted content).",
              "name": "body"
            },
            {
              "description": "Banner title.",
              "name": "title"
            },
            {
              "description": "Banner reason text.",
              "name": "reason"
            },
            {
              "description": "The \"Mark resolved\" button (banner only).",
              "name": "resolve"
            }
          ],
          "slots": [
            {
              "description": "Banner-only: extra content under the title and reason.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "DisagreementVariant"
              },
              "default": "'inline'",
              "description": "Visual variant.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "reason",
              "type": {
                "text": "string | undefined"
              },
              "description": "Optional reason text shown beneath the title (banner) or after the label (inline).",
              "attribute": "reason"
            },
            {
              "kind": "field",
              "name": "resolvable",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Banner-only: whether to show the \"Mark resolved\" button.",
              "attribute": "resolvable",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_onResolve",
              "privacy": "private"
            }
          ],
          "events": [
            {
              "description": "When the resolve button is clicked.",
              "name": "loquix-disagreement-resolve"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "DisagreementVariant"
              },
              "default": "'inline'",
              "description": "Visual variant.",
              "fieldName": "variant"
            },
            {
              "name": "reason",
              "type": {
                "text": "string | undefined"
              },
              "description": "Optional reason text shown beneath the title (banner) or after the label (inline).",
              "fieldName": "reason"
            },
            {
              "name": "resolvable",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Banner-only: whether to show the \"Mark resolved\" button.",
              "fieldName": "resolvable"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-disagreement-marker",
          "customElement": true,
          "summary": "Marks an assistant message that the user has disagreed with.\n\nTwo variants: an inline pill (for trailing references in prose) and a banner\nattached to the disputed message. The banner can optionally show a \"Mark\nresolved\" button when `resolvable` is set."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixDisagreementMarker",
          "declaration": {
            "name": "LoquixDisagreementMarker",
            "module": "src/components/core/loquix-disagreement-marker.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-disclosure-badge.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixDisclosureBadge",
          "cssProperties": [
            {
              "description": "Background colour.",
              "name": "--loquix-disclosure-bg"
            },
            {
              "description": "Text colour.",
              "name": "--loquix-disclosure-text-color"
            },
            {
              "description": "Border radius (default pill).",
              "name": "--loquix-disclosure-border-radius"
            },
            {
              "description": "Font size.",
              "name": "--loquix-disclosure-font-size"
            },
            {
              "description": "Padding inside the badge.",
              "name": "--loquix-disclosure-padding"
            }
          ],
          "cssParts": [
            {
              "description": "The badge element.",
              "name": "badge"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "agentName",
              "type": {
                "text": "string"
              },
              "default": "'AI'",
              "description": "Name of the AI agent displayed after the action verb.",
              "attribute": "agent-name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "action",
              "type": {
                "text": "DisclosureAction"
              },
              "default": "'generated'",
              "description": "The action that the AI performed.",
              "attribute": "action",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "DisclosureVariant"
              },
              "default": "'label'",
              "description": "Visual variant of the badge.",
              "attribute": "variant",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "agent-name",
              "type": {
                "text": "string"
              },
              "default": "'AI'",
              "description": "Name of the AI agent displayed after the action verb.",
              "fieldName": "agentName"
            },
            {
              "name": "action",
              "type": {
                "text": "DisclosureAction"
              },
              "default": "'generated'",
              "description": "The action that the AI performed.",
              "fieldName": "action"
            },
            {
              "name": "variant",
              "type": {
                "text": "DisclosureVariant"
              },
              "default": "'label'",
              "description": "Visual variant of the badge.",
              "fieldName": "variant"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-disclosure-badge",
          "customElement": true,
          "summary": "Small badge indicating AI involvement, e.g. \"Generated by Claude\"."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixDisclosureBadge",
          "declaration": {
            "name": "LoquixDisclosureBadge",
            "module": "src/components/core/loquix-disclosure-badge.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-drop-zone.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixDropZone",
          "cssProperties": [
            {
              "description": "Overlay inset (CSS inset shorthand).",
              "name": "--loquix-drop-zone-overlay-inset",
              "default": "0"
            },
            {
              "description": "Overlay border radius.",
              "name": "--loquix-drop-zone-border-radius",
              "default": "16px"
            },
            {
              "description": "Overlay dashed border colour.",
              "name": "--loquix-drop-zone-border-color"
            },
            {
              "description": "Overlay background colour.",
              "name": "--loquix-drop-zone-bg"
            },
            {
              "description": "Overlay backdrop blur.",
              "name": "--loquix-drop-zone-overlay-blur",
              "default": "2px"
            },
            {
              "description": "Blur applied to slotted content during drag.",
              "name": "--loquix-drop-zone-content-blur",
              "default": "1.5px"
            },
            {
              "description": "Opacity of slotted content during drag.",
              "name": "--loquix-drop-zone-content-opacity",
              "default": "0.5"
            },
            {
              "description": "Overlay icon size.",
              "name": "--loquix-drop-zone-icon-size",
              "default": "40px"
            },
            {
              "description": "Overlay icon and label colour.",
              "name": "--loquix-drop-zone-color"
            }
          ],
          "cssParts": [
            {
              "description": "The drag overlay container.",
              "name": "overlay"
            },
            {
              "description": "The overlay icon.",
              "name": "icon"
            },
            {
              "description": "The overlay label text.",
              "name": "label"
            }
          ],
          "slots": [
            {
              "description": "Default slot for content to wrap.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether drag-and-drop is disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "type": {
                "text": "string | undefined"
              },
              "description": "Overlay label text.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "accept",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accepted file types (comma-separated MIME types, wildcards, or extensions). Use '*' or a wildcard MIME to allow all.",
              "attribute": "accept"
            },
            {
              "kind": "field",
              "name": "multiple",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether multiple files are allowed.",
              "attribute": "multiple"
            },
            {
              "kind": "field",
              "name": "overlayInset",
              "type": {
                "text": "string | undefined"
              },
              "description": "CSS inset value for the overlay. When set, overrides `--loquix-drop-zone-overlay-inset`.",
              "attribute": "overlay-inset"
            },
            {
              "kind": "field",
              "name": "_dragCounter",
              "type": {
                "text": "number"
              },
              "privacy": "private",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "_boundGlobalDragEnd",
              "privacy": "private",
              "description": "Bound global dragend handler for cleanup."
            },
            {
              "kind": "method",
              "name": "_hasFiles",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "DragEvent"
                  }
                }
              ],
              "description": "Check if the drag contains files (not text/urls)."
            },
            {
              "kind": "method",
              "name": "_handleDragEnter",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "DragEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleDragOver",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "DragEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleDragLeave",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "DragEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleDrop",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "DragEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleGlobalDragEnd",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "description": "[Fix #2] Global dragend resets stuck drag state (e.g., drag exits viewport)."
            },
            {
              "kind": "method",
              "name": "_filterFiles",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "File[]"
                }
              },
              "parameters": [
                {
                  "name": "fileList",
                  "type": {
                    "text": "FileList"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "_plusSvg",
              "privacy": "private",
              "default": "svg`<svg viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"> <circle cx=\"24\" cy=\"24\" r=\"20\"/> <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"34\"/> <line x1=\"14\" y1=\"24\" x2=\"34\" y2=\"24\"/> </svg>`"
            }
          ],
          "events": [
            {
              "description": "Fired when files are dropped. Detail: { files: File[] }",
              "name": "loquix-drop"
            }
          ],
          "attributes": [
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether drag-and-drop is disabled.",
              "fieldName": "disabled"
            },
            {
              "name": "label",
              "type": {
                "text": "string | undefined"
              },
              "description": "Overlay label text.",
              "fieldName": "label"
            },
            {
              "name": "accept",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accepted file types (comma-separated MIME types, wildcards, or extensions). Use '*' or a wildcard MIME to allow all.",
              "fieldName": "accept"
            },
            {
              "name": "multiple",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether multiple files are allowed.",
              "fieldName": "multiple"
            },
            {
              "name": "overlay-inset",
              "type": {
                "text": "string | undefined"
              },
              "description": "CSS inset value for the overlay. When set, overrides `--loquix-drop-zone-overlay-inset`.",
              "fieldName": "overlayInset"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-drop-zone",
          "customElement": true,
          "summary": "Generic drag-and-drop zone that wraps any content, shows an overlay on file drag, and emits dropped files."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixDropZone",
          "declaration": {
            "name": "LoquixDropZone",
            "module": "src/components/core/loquix-drop-zone.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-dropdown-select.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixDropdownSelect",
          "cssProperties": [
            {
              "description": "Trigger padding.",
              "name": "--loquix-dropdown-trigger-padding"
            },
            {
              "description": "Trigger border radius.",
              "name": "--loquix-dropdown-trigger-radius"
            },
            {
              "description": "Trigger background.",
              "name": "--loquix-dropdown-trigger-bg"
            },
            {
              "description": "Trigger text color.",
              "name": "--loquix-dropdown-trigger-color"
            },
            {
              "description": "Panel background.",
              "name": "--loquix-dropdown-panel-bg"
            },
            {
              "description": "Panel border radius.",
              "name": "--loquix-dropdown-panel-radius"
            },
            {
              "description": "Panel border color.",
              "name": "--loquix-dropdown-panel-border-color"
            },
            {
              "description": "Minimum panel width.",
              "name": "--loquix-dropdown-min-width"
            },
            {
              "description": "Max options list height.",
              "name": "--loquix-dropdown-max-height"
            },
            {
              "description": "Option text color.",
              "name": "--loquix-dropdown-option-color"
            },
            {
              "description": "Option label color.",
              "name": "--loquix-dropdown-option-label-color"
            },
            {
              "description": "Option description color.",
              "name": "--loquix-dropdown-option-desc-color"
            }
          ],
          "cssParts": [
            {
              "description": "The trigger button.",
              "name": "trigger"
            },
            {
              "description": "The dropdown panel.",
              "name": "panel"
            },
            {
              "description": "The search input wrapper.",
              "name": "search"
            },
            {
              "description": "An option item.",
              "name": "option"
            },
            {
              "description": "The footer slot area.",
              "name": "footer"
            }
          ],
          "slots": [
            {
              "description": "Custom content at the bottom of the dropdown (e.g. \"Create new branch\").",
              "name": "footer"
            },
            {
              "description": "Custom icon for the trigger button (replaces the selected option icon).",
              "name": "trigger-icon"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "options",
              "type": {
                "text": "SelectOption[]"
              },
              "default": "[]",
              "description": "Array of options to display.",
              "attribute": "options"
            },
            {
              "kind": "field",
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Currently selected value.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "placeholder",
              "type": {
                "text": "string | undefined"
              },
              "description": "Placeholder when no value selected.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "searchable",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show a search input.",
              "attribute": "searchable",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "searchPlaceholder",
              "type": {
                "text": "string | undefined"
              },
              "description": "Search placeholder text.",
              "attribute": "search-placeholder"
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the dropdown is disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "placement",
              "type": {
                "text": "'top' | 'bottom'"
              },
              "default": "'top'",
              "description": "Preferred panel placement. Floating UI will auto-flip if not enough space.",
              "attribute": "placement"
            },
            {
              "kind": "field",
              "name": "noChevron",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Hide the chevron arrow on the trigger button.",
              "attribute": "no-chevron",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the panel is open.",
              "attribute": "open",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_searchQuery",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_focusedIndex",
              "type": {
                "text": "number"
              },
              "privacy": "private",
              "default": "-1"
            },
            {
              "kind": "field",
              "name": "_hoveredHint",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_activeSubmenu",
              "type": {
                "text": "SelectOption | null"
              },
              "privacy": "private",
              "default": "null"
            },
            {
              "kind": "field",
              "name": "_submenuTimeout",
              "type": {
                "text": "ReturnType<typeof setTimeout> | null"
              },
              "privacy": "private",
              "default": "null"
            },
            {
              "kind": "field",
              "name": "_searchInput",
              "type": {
                "text": "HTMLInputElement | undefined"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_triggerEl",
              "type": {
                "text": "HTMLButtonElement | undefined"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_panelEl",
              "type": {
                "text": "HTMLElement | undefined"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_listenersAttached",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "method",
              "name": "_addDocumentListeners",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_removeDocumentListeners",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "_selectedOption",
              "type": {
                "text": "SelectOption | undefined"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "_findOption",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "SelectOption | undefined"
                }
              },
              "parameters": [
                {
                  "name": "options",
                  "type": {
                    "text": "SelectOption[]"
                  }
                },
                {
                  "name": "value",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Recursively find an option by value, searching through children."
            },
            {
              "kind": "field",
              "name": "_filteredOptions",
              "type": {
                "text": "SelectOption[]"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "_groupedOptions",
              "type": {
                "text": "Array<{ group: string; options: SelectOption[] }>"
              },
              "privacy": "private",
              "description": "Group options by their `group` property, preserving insertion order.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "_selectableOptions",
              "type": {
                "text": "SelectOption[]"
              },
              "privacy": "private",
              "description": "Flat list of selectable (non-separator, non-disabled) options for keyboard nav.",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "toggle",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "show",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "hide",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleOutsideClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "MouseEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleKeydown",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "KeyboardEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleSearchInput",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_selectOption",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "opt",
                  "type": {
                    "text": "SelectOption"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_selectSubmenuOption",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "opt",
                  "type": {
                    "text": "SelectOption"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleOptionHover",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "opt",
                  "type": {
                    "text": "SelectOption"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleOptionLeave",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleSubmenuEnter",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleSubmenuLeave",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_scheduleSubmenuClose",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_clearSubmenuTimeout",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_hasChildren",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "parameters": [
                {
                  "name": "opt",
                  "type": {
                    "text": "SelectOption"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_positionPanel",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "Promise<void>"
                }
              },
              "description": "Position the panel using Floating UI with flip + shift + offset."
            },
            {
              "kind": "method",
              "name": "_positionSubmenu",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "Promise<void>"
                }
              },
              "parameters": [
                {
                  "name": "opt",
                  "type": {
                    "text": "SelectOption"
                  }
                }
              ],
              "description": "Position a submenu panel relative to its parent option button."
            },
            {
              "kind": "method",
              "name": "_chevronSvg",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_checkSvg",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_searchSvg",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_externalSvg",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_arrowSvg",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderOption",
              "privacy": "private",
              "parameters": [
                {
                  "name": "opt",
                  "type": {
                    "text": "SelectOption"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "description": "When a value is selected.",
              "name": "loquix-select-change"
            }
          ],
          "attributes": [
            {
              "name": "options",
              "type": {
                "text": "SelectOption[]"
              },
              "default": "[]",
              "description": "Array of options to display.",
              "fieldName": "options"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Currently selected value.",
              "fieldName": "value"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string | undefined"
              },
              "description": "Placeholder when no value selected.",
              "fieldName": "placeholder"
            },
            {
              "name": "searchable",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show a search input.",
              "fieldName": "searchable"
            },
            {
              "name": "search-placeholder",
              "type": {
                "text": "string | undefined"
              },
              "description": "Search placeholder text.",
              "fieldName": "searchPlaceholder"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the dropdown is disabled.",
              "fieldName": "disabled"
            },
            {
              "name": "placement",
              "type": {
                "text": "'top' | 'bottom'"
              },
              "default": "'top'",
              "description": "Preferred panel placement. Floating UI will auto-flip if not enough space.",
              "fieldName": "placement"
            },
            {
              "name": "no-chevron",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Hide the chevron arrow on the trigger button.",
              "fieldName": "noChevron"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the panel is open.",
              "fieldName": "open"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-dropdown-select",
          "customElement": true,
          "summary": "A rich dropdown select with search, groups, descriptions, icons, and keyboard nav."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixDropdownSelect",
          "declaration": {
            "name": "LoquixDropdownSelect",
            "module": "src/components/core/loquix-dropdown-select.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-example-gallery.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixExampleGallery",
          "cssProperties": [
            {
              "description": "Gap between items.",
              "name": "--loquix-gallery-gap"
            },
            {
              "description": "Number of grid columns (grid variant).",
              "name": "--loquix-gallery-columns"
            },
            {
              "description": "Heading font size.",
              "name": "--loquix-gallery-heading-font-size"
            },
            {
              "description": "Item padding.",
              "name": "--loquix-gallery-item-padding"
            },
            {
              "description": "Item border color.",
              "name": "--loquix-gallery-item-border-color"
            },
            {
              "description": "Item border radius.",
              "name": "--loquix-gallery-item-border-radius"
            },
            {
              "description": "Item background.",
              "name": "--loquix-gallery-item-bg"
            }
          ],
          "cssParts": [
            {
              "description": "Individual gallery item button.",
              "name": "item"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "items",
              "type": {
                "text": "GalleryItem[]"
              },
              "default": "[]",
              "description": "Gallery items to display.",
              "attribute": "items"
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "GalleryVariant"
              },
              "default": "'grid'",
              "description": "Display variant.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "columns",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Number of grid columns (CSS custom property).",
              "attribute": "columns"
            },
            {
              "kind": "field",
              "name": "categories",
              "type": {
                "text": "string[]"
              },
              "default": "[]",
              "description": "Explicit category order. If omitted, derived from items.",
              "attribute": "categories"
            },
            {
              "kind": "field",
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional heading above the gallery.",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "_activeCategory",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "method",
              "name": "_getCategories",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string[]"
                }
              }
            },
            {
              "kind": "method",
              "name": "_getFilteredItems",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "GalleryItem[]"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleItemClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "item",
                  "type": {
                    "text": "GalleryItem"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleCategoryClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "cat",
                  "type": {
                    "text": "string"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent<LoquixGallerySelectDetail>"
              },
              "description": "When an item is clicked.",
              "name": "loquix-gallery-select"
            }
          ],
          "attributes": [
            {
              "name": "items",
              "type": {
                "text": "GalleryItem[]"
              },
              "default": "[]",
              "description": "Gallery items to display.",
              "fieldName": "items"
            },
            {
              "name": "variant",
              "type": {
                "text": "GalleryVariant"
              },
              "default": "'grid'",
              "description": "Display variant.",
              "fieldName": "variant"
            },
            {
              "name": "columns",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Number of grid columns (CSS custom property).",
              "fieldName": "columns"
            },
            {
              "name": "categories",
              "type": {
                "text": "string[]"
              },
              "default": "[]",
              "description": "Explicit category order. If omitted, derived from items.",
              "fieldName": "categories"
            },
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional heading above the gallery.",
              "fieldName": "heading"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-example-gallery",
          "customElement": true,
          "summary": "Categorized grid/list of example prompts."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixExampleGallery",
          "declaration": {
            "name": "LoquixExampleGallery",
            "module": "src/components/core/loquix-example-gallery.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-feedback-form.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixFeedbackForm",
          "cssProperties": [
            {
              "description": "Active chip background and primary button colour.",
              "name": "--loquix-ai-color"
            }
          ],
          "cssParts": [
            {
              "description": "The thumbs row.",
              "name": "buttons"
            },
            {
              "description": "The reasons + comment card shown after a sentiment is picked.",
              "name": "form"
            },
            {
              "description": "The radiogroup of reason chips.",
              "name": "reasons"
            },
            {
              "description": "A single reason chip.",
              "name": "chip"
            },
            {
              "description": "The comment textarea.",
              "name": "textarea"
            },
            {
              "description": "Submit button.",
              "name": "submit"
            },
            {
              "description": "Cancel button.",
              "name": "cancel"
            },
            {
              "description": "Thanks message shown after submit.",
              "name": "thanks"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "allowReason",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to open the reasons + comment card after a sentiment is picked.",
              "attribute": "allow-reason"
            },
            {
              "kind": "field",
              "name": "value",
              "type": {
                "text": "FeedbackSentiment | null"
              },
              "default": "null",
              "description": "Currently selected sentiment, or null if neither is picked.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "requireCommentOnDown",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "When true, requires a non-empty comment before Send is enabled on negative feedback.",
              "attribute": "require-comment-on-down"
            },
            {
              "kind": "field",
              "name": "_reason",
              "type": {
                "text": "FeedbackReason | null"
              },
              "privacy": "private",
              "default": "null"
            },
            {
              "kind": "field",
              "name": "_comment",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_submitted",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "method",
              "name": "_validValue",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "FeedbackSentiment | null"
                }
              },
              "description": "Returns the current value if it's a valid `FeedbackSentiment`, else `null`.\nGuards against `value` being set from an attribute or external mutation\nto something outside the type union."
            },
            {
              "kind": "field",
              "name": "_onChildFeedback",
              "privacy": "private",
              "description": "Intercepts the inner `loquix-feedback` and reads the post-toggle `.active`\nstate from the child to update parent state. Stops propagation so the\ninner event never escapes the form — only `loquix-feedback-submit` is the\npublic surface."
            },
            {
              "kind": "method",
              "name": "_onChipClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "reason",
                  "type": {
                    "text": "FeedbackReason"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "_onCommentInput",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_isSendDisabled",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "boolean"
                }
              }
            },
            {
              "kind": "field",
              "name": "_onSend",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_onCancel",
              "privacy": "private"
            }
          ],
          "events": [
            {
              "description": "When the user clicks Send. Detail: `{ sentiment, reason?, comment? }`.",
              "name": "loquix-feedback-submit"
            }
          ],
          "attributes": [
            {
              "name": "allow-reason",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to open the reasons + comment card after a sentiment is picked.",
              "fieldName": "allowReason"
            },
            {
              "name": "value",
              "type": {
                "text": "FeedbackSentiment | null"
              },
              "default": "null",
              "description": "Currently selected sentiment, or null if neither is picked.",
              "fieldName": "value"
            },
            {
              "name": "require-comment-on-down",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "When true, requires a non-empty comment before Send is enabled on negative feedback.",
              "fieldName": "requireCommentOnDown"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-feedback-form",
          "customElement": true,
          "summary": "Higher-order feedback flow: thumbs up/down + reason chips + optional comment.\n\nComposes two `loquix-action-feedback` buttons into a single flow, then opens a\nreasons + comment card once a sentiment is picked. The inner `loquix-feedback`\nevents are intercepted (stopPropagation) so consumers only ever see the\nhigher-level `loquix-feedback-submit`.\n\nThe reason payload carries a stable `FeedbackReason` ID, never the localised\nchip label."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixFeedbackForm",
          "declaration": {
            "name": "LoquixFeedbackForm",
            "module": "src/components/core/loquix-feedback-form.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-filter-bar.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixFilterBar",
          "cssParts": [
            {
              "description": "The filter buttons container",
              "name": "bar"
            },
            {
              "description": "A filter button",
              "name": "filter"
            },
            {
              "description": "The negative prompt section",
              "name": "negative-prompt"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "filters",
              "type": {
                "text": "FilterOption[]"
              },
              "default": "[]",
              "description": "Array of filter options.",
              "attribute": "filters"
            },
            {
              "kind": "field",
              "name": "values",
              "type": {
                "text": "string[]"
              },
              "default": "[]",
              "description": "Currently active filter ids.",
              "attribute": "values"
            },
            {
              "kind": "field",
              "name": "showNegativePrompt",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show negative prompt input.",
              "attribute": "show-negative-prompt"
            },
            {
              "kind": "field",
              "name": "negativePrompt",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Negative prompt text.",
              "attribute": "negative-prompt"
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether all controls are disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_debounceTimer",
              "type": {
                "text": "number"
              },
              "privacy": "private",
              "default": "0",
              "description": "Debounce timer for negative prompt input"
            },
            {
              "kind": "method",
              "name": "_isActive",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "parameters": [
                {
                  "name": "filterId",
                  "type": {
                    "text": "string"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_dispatchChange",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "newValues",
                  "type": {
                    "text": "string[]"
                  }
                },
                {
                  "name": "negativePrompt",
                  "optional": true,
                  "type": {
                    "text": "string"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleFilterToggle",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "filter",
                  "type": {
                    "text": "FilterOption"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleNegativePromptInput",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "_handleKeyDown",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_getGroupedFilters",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "Map<string, FilterOption[]>"
                }
              }
            },
            {
              "kind": "method",
              "name": "_renderFilterChip",
              "privacy": "private",
              "parameters": [
                {
                  "name": "filter",
                  "type": {
                    "text": "FilterOption"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "description": "Fired when filters or negative prompt change. Detail: { values, negativePrompt? }",
              "name": "loquix-filter-change"
            }
          ],
          "attributes": [
            {
              "name": "filters",
              "type": {
                "text": "FilterOption[]"
              },
              "default": "[]",
              "description": "Array of filter options.",
              "fieldName": "filters"
            },
            {
              "name": "values",
              "type": {
                "text": "string[]"
              },
              "default": "[]",
              "description": "Currently active filter ids.",
              "fieldName": "values"
            },
            {
              "name": "show-negative-prompt",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show negative prompt input.",
              "fieldName": "showNegativePrompt"
            },
            {
              "name": "negative-prompt",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Negative prompt text.",
              "fieldName": "negativePrompt"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether all controls are disabled.",
              "fieldName": "disabled"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-filter-bar",
          "customElement": true,
          "summary": "Horizontal bar of toggleable filter chips with optional negative prompt input."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixFilterBar",
          "declaration": {
            "name": "LoquixFilterBar",
            "module": "src/components/core/loquix-filter-bar.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-follow-up-suggestions.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixFollowUpSuggestions",
          "cssProperties": [
            {
              "description": "Gap between chips.",
              "name": "--loquix-followup-gap"
            },
            {
              "description": "Chip font size.",
              "name": "--loquix-followup-font-size"
            },
            {
              "description": "Top margin from parent message.",
              "name": "--loquix-followup-margin-top"
            },
            {
              "description": "Label font size.",
              "name": "--loquix-followup-label-font-size"
            },
            {
              "description": "Label color.",
              "name": "--loquix-followup-label-color"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "suggestions",
              "type": {
                "text": "Suggestion[]"
              },
              "default": "[]",
              "description": "Suggestion items.",
              "attribute": "suggestions"
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "FollowUpVariant"
              },
              "default": "'inline'",
              "description": "Layout variant.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "messageId",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Associated message ID.",
              "attribute": "message-id"
            },
            {
              "kind": "field",
              "name": "maxVisible",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Max visible chips before \"+N more\".",
              "attribute": "max-visible"
            },
            {
              "kind": "field",
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional label above chips.",
              "attribute": "label"
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent"
              },
              "description": "When a suggestion is clicked.",
              "name": "loquix-suggestion-select"
            }
          ],
          "attributes": [
            {
              "name": "suggestions",
              "type": {
                "text": "Suggestion[]"
              },
              "default": "[]",
              "description": "Suggestion items.",
              "fieldName": "suggestions"
            },
            {
              "name": "variant",
              "type": {
                "text": "FollowUpVariant"
              },
              "default": "'inline'",
              "description": "Layout variant.",
              "fieldName": "variant"
            },
            {
              "name": "message-id",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Associated message ID.",
              "fieldName": "messageId"
            },
            {
              "name": "max-visible",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Max visible chips before \"+N more\".",
              "fieldName": "maxVisible"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional label above chips.",
              "fieldName": "label"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-follow-up-suggestions",
          "customElement": true,
          "summary": "Follow-up suggestion chips shown below an assistant message."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixFollowUpSuggestions",
          "declaration": {
            "name": "LoquixFollowUpSuggestions",
            "module": "src/components/core/loquix-follow-up-suggestions.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-generation-controls.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixGenerationControls",
          "cssProperties": [
            {
              "description": "Gap between buttons.",
              "name": "--loquix-gen-controls-gap"
            },
            {
              "description": "Default button background.",
              "name": "--loquix-gen-button-bg"
            },
            {
              "description": "Default button text colour.",
              "name": "--loquix-gen-button-color"
            },
            {
              "description": "Stop button background.",
              "name": "--loquix-gen-stop-bg"
            },
            {
              "description": "Stop button text colour.",
              "name": "--loquix-gen-stop-color"
            }
          ],
          "cssParts": [
            {
              "description": "Outer wrapper.",
              "name": "controls"
            },
            {
              "description": "Each individual `<button>`.",
              "name": "button"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "state",
              "type": {
                "text": "GenerationState"
              },
              "default": "'idle'",
              "description": "Current generation state. Controls which buttons are visible.",
              "attribute": "state",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showPause",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show a Pause button alongside Stop when running.",
              "attribute": "show-pause",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showSkip",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show a Skip button when running (future use).",
              "attribute": "show-skip",
              "reflects": true
            },
            {
              "kind": "method",
              "name": "_emit",
              "privacy": "private",
              "parameters": [
                {
                  "name": "name",
                  "type": {
                    "text": "string"
                  }
                },
                {
                  "name": "detail",
                  "default": "{}",
                  "type": {
                    "text": "Record<string, unknown>"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_renderStop",
              "privacy": "private",
              "description": "Stop icon (filled square)"
            },
            {
              "kind": "method",
              "name": "_renderPause",
              "privacy": "private",
              "description": "Pause icon"
            },
            {
              "kind": "method",
              "name": "_renderResume",
              "privacy": "private",
              "description": "Resume / play icon"
            }
          ],
          "events": [
            {
              "description": "When the stop button is clicked.",
              "name": "loquix-stop"
            },
            {
              "description": "When the pause button is clicked.",
              "name": "loquix-pause"
            },
            {
              "description": "When the resume button is clicked.",
              "name": "loquix-resume"
            }
          ],
          "attributes": [
            {
              "name": "state",
              "type": {
                "text": "GenerationState"
              },
              "default": "'idle'",
              "description": "Current generation state. Controls which buttons are visible.",
              "fieldName": "state"
            },
            {
              "name": "show-pause",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show a Pause button alongside Stop when running.",
              "fieldName": "showPause"
            },
            {
              "name": "show-skip",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show a Skip button when running (future use).",
              "fieldName": "showSkip"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-generation-controls",
          "customElement": true,
          "summary": "Control buttons (stop, pause, resume) shown during AI generation."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixGenerationControls",
          "declaration": {
            "name": "LoquixGenerationControls",
            "module": "src/components/core/loquix-generation-controls.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-message-actions.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixMessageActions",
          "cssProperties": [
            {
              "description": "Gap between action buttons.",
              "name": "--loquix-actions-gap"
            }
          ],
          "cssParts": [
            {
              "description": "The action-bar wrapper.",
              "name": "toolbar"
            }
          ],
          "slots": [
            {
              "description": "Override the default action buttons with custom content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "direction",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "default": "'horizontal'",
              "description": "Layout direction of the toolbar.",
              "attribute": "direction",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "position",
              "type": {
                "text": "ActionsPosition"
              },
              "default": "'hover'",
              "description": "Visibility behaviour of the toolbar.",
              "attribute": "position",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "messageRole",
              "type": {
                "text": "MessageRole | undefined"
              },
              "description": "Role of the message this toolbar is attached to. Determines which default buttons are shown.",
              "attribute": "message-role",
              "reflects": true
            },
            {
              "kind": "method",
              "name": "_renderUserDefaults",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderAssistantDefaults",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderSystemDefaults",
              "privacy": "private"
            }
          ],
          "events": [
            {
              "description": "When the copy button is clicked (from child).",
              "name": "loquix-copy"
            },
            {
              "description": "When the regenerate button is clicked (from child).",
              "name": "loquix-regenerate"
            },
            {
              "description": "When a thumbs up/down button is clicked (from child).",
              "name": "loquix-feedback"
            },
            {
              "description": "When the edit button is clicked (from child).",
              "name": "loquix-edit"
            }
          ],
          "attributes": [
            {
              "name": "direction",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "default": "'horizontal'",
              "description": "Layout direction of the toolbar.",
              "fieldName": "direction"
            },
            {
              "name": "position",
              "type": {
                "text": "ActionsPosition"
              },
              "default": "'hover'",
              "description": "Visibility behaviour of the toolbar.",
              "fieldName": "position"
            },
            {
              "name": "message-role",
              "type": {
                "text": "MessageRole | undefined"
              },
              "description": "Role of the message this toolbar is attached to. Determines which default buttons are shown.",
              "fieldName": "messageRole"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-message-actions",
          "customElement": true,
          "summary": "Row of contextual action buttons for a chat message.\n\nRenders default action buttons based on `message-role`, but accepts any\nslotted content to allow full customisation of the toolbar."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixMessageActions",
          "declaration": {
            "name": "LoquixMessageActions",
            "module": "src/components/core/loquix-message-actions.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-message-attachments.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixMessageAttachments",
          "cssProperties": [
            {
              "description": "Gap between cards.",
              "name": "--loquix-message-attachments-gap",
              "default": "8px"
            },
            {
              "description": "Card background.",
              "name": "--loquix-message-attachments-card-bg",
              "default": "rgba(0,0,0,0.03)"
            },
            {
              "description": "Card border color.",
              "name": "--loquix-message-attachments-card-border-color",
              "default": "rgba(0,0,0,0.08)"
            },
            {
              "description": "Card border radius.",
              "name": "--loquix-message-attachments-card-border-radius",
              "default": "8px"
            },
            {
              "description": "Card hover shadow.",
              "name": "--loquix-message-attachments-card-hover-shadow",
              "default": "0 1px 4px rgba(0,0,0,0.1)"
            },
            {
              "description": "Card width at `sm` size.",
              "name": "--loquix-message-attachments-sm-size",
              "default": "48px"
            },
            {
              "description": "Card width at `md` size.",
              "name": "--loquix-message-attachments-md-size",
              "default": "80px"
            },
            {
              "description": "Card width at `lg` size.",
              "name": "--loquix-message-attachments-lg-size",
              "default": "120px"
            },
            {
              "description": "Thumbnail size at `xs` size.",
              "name": "--loquix-message-attachments-xs-size",
              "default": "28px"
            }
          ],
          "cssParts": [
            {
              "description": "Outer wrapper containing the list and overflow button.",
              "name": "grid"
            },
            {
              "description": "Individual attachment card wrapper.",
              "name": "card"
            },
            {
              "description": "Thumbnail area (image preview or file icon).",
              "name": "thumbnail"
            },
            {
              "description": "Filename text.",
              "name": "filename"
            },
            {
              "description": "File size text.",
              "name": "filesize"
            },
            {
              "description": "Remove button on each card.",
              "name": "remove"
            },
            {
              "description": "\"+N more\" expand button.",
              "name": "overflow"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "attachments",
              "type": {
                "text": "Attachment[]"
              },
              "default": "[]",
              "description": "Array of attachment objects to display."
            },
            {
              "kind": "field",
              "name": "size",
              "type": {
                "text": "Size"
              },
              "default": "'md'",
              "description": "Card size variant.",
              "attribute": "size",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "removable",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show remove buttons on each card.",
              "attribute": "removable",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "maxVisible",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Maximum number of visible cards. 0 means show all.",
              "attribute": "max-visible"
            },
            {
              "kind": "field",
              "name": "_expanded",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false",
              "description": "Whether the overflow is expanded (show all)."
            },
            {
              "kind": "method",
              "name": "_isImageType",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "parameters": [
                {
                  "name": "filetype",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Check if a filetype represents an image."
            },
            {
              "kind": "method",
              "name": "_getFileIcon",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              },
              "parameters": [
                {
                  "name": "filetype",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Return an emoji icon based on file type."
            },
            {
              "kind": "method",
              "name": "_formatSize",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              },
              "parameters": [
                {
                  "name": "bytes",
                  "type": {
                    "text": "number"
                  }
                }
              ],
              "description": "Format bytes into human-readable string."
            },
            {
              "kind": "method",
              "name": "_truncateFilename",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              },
              "parameters": [
                {
                  "name": "name",
                  "type": {
                    "text": "string"
                  }
                },
                {
                  "name": "max",
                  "type": {
                    "text": "number"
                  }
                }
              ],
              "description": "Truncate filename preserving extension."
            },
            {
              "kind": "method",
              "name": "_safeImageSrc",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              },
              "parameters": [
                {
                  "name": "url",
                  "type": {
                    "text": "string | undefined"
                  }
                }
              ],
              "description": "Sanitise URL for `<img src>`.\nAllows https, http, blob. For data: URLs, only `data:image/*` (case-insensitive)\nis permitted, excluding `data:image/svg+xml` (defense-in-depth: SVG can contain scripts)."
            },
            {
              "kind": "method",
              "name": "_onClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "attachment",
                  "type": {
                    "text": "Attachment"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_onRemove",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                },
                {
                  "name": "attachment",
                  "type": {
                    "text": "Attachment"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleExpand",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_cardTitle",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              },
              "parameters": [
                {
                  "name": "att",
                  "type": {
                    "text": "Attachment"
                  }
                }
              ],
              "description": "Build the card title tooltip string."
            },
            {
              "kind": "method",
              "name": "_cardAriaLabel",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              },
              "parameters": [
                {
                  "name": "att",
                  "type": {
                    "text": "Attachment"
                  }
                }
              ],
              "description": "Build the aria-label for a card."
            },
            {
              "kind": "method",
              "name": "_renderCard",
              "privacy": "private",
              "parameters": [
                {
                  "name": "att",
                  "type": {
                    "text": "Attachment"
                  }
                }
              ],
              "description": "Render a single attachment card."
            }
          ],
          "events": [
            {
              "description": "Fired when a card is clicked. Detail: { attachment }",
              "name": "loquix-attachment-click"
            },
            {
              "description": "Fired when the remove button is clicked. Detail: { attachment }",
              "name": "loquix-attachment-remove"
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "Size"
              },
              "default": "'md'",
              "description": "Card size variant.",
              "fieldName": "size"
            },
            {
              "name": "removable",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show remove buttons on each card.",
              "fieldName": "removable"
            },
            {
              "name": "max-visible",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Maximum number of visible cards. 0 means show all.",
              "fieldName": "maxVisible"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-message-attachments",
          "customElement": true,
          "summary": "Displays file attachments inside a message as a grid of visual cards\nwith image previews, file icons, and optional remove buttons."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixMessageAttachments",
          "declaration": {
            "name": "LoquixMessageAttachments",
            "module": "src/components/core/loquix-message-attachments.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-message-avatar.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixMessageAvatar",
          "cssProperties": [
            {
              "description": "Background colour of the avatar circle.",
              "name": "--loquix-avatar-bg"
            },
            {
              "description": "Foreground / icon colour.",
              "name": "--loquix-avatar-color"
            },
            {
              "description": "Colour of the pulsing ring animation.",
              "name": "--loquix-avatar-pulse-color"
            },
            {
              "description": "Size override for the `sm` preset (default 24px).",
              "name": "--loquix-avatar-size-sm"
            },
            {
              "description": "Size override for the `md` preset (default 32px).",
              "name": "--loquix-avatar-size-md"
            },
            {
              "description": "Size override for the `lg` preset (default 40px).",
              "name": "--loquix-avatar-size-lg"
            }
          ],
          "cssParts": [
            {
              "description": "Outer wrapper of the avatar.",
              "name": "container"
            },
            {
              "description": "The `<img>` element when `src` is provided.",
              "name": "image"
            },
            {
              "description": "The initials text element when `name` is provided without `src`.",
              "name": "initials"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "src",
              "type": {
                "text": "string | undefined"
              },
              "description": "Image source URL. When provided the avatar renders an `<img>`.",
              "attribute": "src",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "name",
              "type": {
                "text": "string | undefined"
              },
              "description": "Display name. Used to derive initials when no `src` is set.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "state",
              "type": {
                "text": "AvatarState"
              },
              "default": "'idle'",
              "description": "Activity state of the avatar. `thinking` and `streaming` trigger a pulse animation.",
              "attribute": "state",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "type": {
                "text": "Size"
              },
              "default": "'md'",
              "description": "Size preset.",
              "attribute": "size",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "AvatarVariant"
              },
              "default": "'icon'",
              "description": "Visual variant hint.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "method",
              "name": "_getInitials",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              }
            },
            {
              "kind": "method",
              "name": "_renderContent",
              "privacy": "private"
            }
          ],
          "attributes": [
            {
              "name": "src",
              "type": {
                "text": "string | undefined"
              },
              "description": "Image source URL. When provided the avatar renders an `<img>`.",
              "fieldName": "src"
            },
            {
              "name": "name",
              "type": {
                "text": "string | undefined"
              },
              "description": "Display name. Used to derive initials when no `src` is set.",
              "fieldName": "name"
            },
            {
              "name": "state",
              "type": {
                "text": "AvatarState"
              },
              "default": "'idle'",
              "description": "Activity state of the avatar. `thinking` and `streaming` trigger a pulse animation.",
              "fieldName": "state"
            },
            {
              "name": "size",
              "type": {
                "text": "Size"
              },
              "default": "'md'",
              "description": "Size preset.",
              "fieldName": "size"
            },
            {
              "name": "variant",
              "type": {
                "text": "AvatarVariant"
              },
              "default": "'icon'",
              "description": "Visual variant hint.",
              "fieldName": "variant"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-message-avatar",
          "customElement": true,
          "summary": "Displays an avatar for a chat message participant."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixMessageAvatar",
          "declaration": {
            "name": "LoquixMessageAvatar",
            "module": "src/components/core/loquix-message-avatar.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-message-content.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixMessageContent",
          "cssProperties": [
            {
              "name": "--loquix-message-font-size"
            },
            {
              "name": "--loquix-message-line-height"
            },
            {
              "name": "--loquix-code-font-family"
            },
            {
              "name": "--loquix-surface-secondary-bg"
            },
            {
              "description": "Cursor color (default: currentColor)",
              "name": "--loquix-cursor-color"
            }
          ],
          "cssParts": [
            {
              "description": "Wrapper around text content",
              "name": "content"
            },
            {
              "description": "The `<pre>` element for code content",
              "name": "code-block"
            },
            {
              "description": "The streaming cursor indicator",
              "name": "cursor"
            }
          ],
          "slots": [
            {
              "description": "Default slot for text content (type='text')",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "type",
              "type": {
                "text": "MessageContentType"
              },
              "default": "'text'",
              "description": "The content type to render.",
              "attribute": "type",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "streaming",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the message is currently being streamed.",
              "attribute": "streaming",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "streamingCursor",
              "type": {
                "text": "StreamingCursorVariant"
              },
              "default": "'none'",
              "description": "Streaming cursor style. Only visible when `streaming` is true.",
              "attribute": "streaming-cursor",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "allowInlineActions",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether inline action buttons are allowed inside this content block.",
              "attribute": "allow-inline-actions",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "code",
              "type": {
                "text": "string | undefined"
              },
              "description": "Raw code string rendered safely inside a code block when type is 'code'.",
              "attribute": "code"
            },
            {
              "kind": "method",
              "name": "_renderText",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderCode",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_validCursors",
              "privacy": "private",
              "static": true,
              "default": "new Set(['caret', 'block'])"
            },
            {
              "kind": "method",
              "name": "_renderCursor",
              "privacy": "private"
            }
          ],
          "attributes": [
            {
              "name": "type",
              "type": {
                "text": "MessageContentType"
              },
              "default": "'text'",
              "description": "The content type to render.",
              "fieldName": "type"
            },
            {
              "name": "streaming",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the message is currently being streamed.",
              "fieldName": "streaming"
            },
            {
              "name": "streaming-cursor",
              "type": {
                "text": "StreamingCursorVariant"
              },
              "default": "'none'",
              "description": "Streaming cursor style. Only visible when `streaming` is true.",
              "fieldName": "streamingCursor"
            },
            {
              "name": "allow-inline-actions",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether inline action buttons are allowed inside this content block.",
              "fieldName": "allowInlineActions"
            },
            {
              "name": "code",
              "type": {
                "text": "string | undefined"
              },
              "description": "Raw code string rendered safely inside a code block when type is 'code'.",
              "fieldName": "code"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-message-content",
          "customElement": true,
          "summary": "Renders message content as plain text or a code block with optional streaming cursor."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixMessageContent",
          "declaration": {
            "name": "LoquixMessageContent",
            "module": "src/components/core/loquix-message-content.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-message-item.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixMessageItem",
          "cssProperties": [
            {
              "description": "Background for user messages.",
              "name": "--loquix-message-user-bg"
            },
            {
              "description": "Background for assistant messages.",
              "name": "--loquix-message-assistant-bg"
            },
            {
              "description": "Border colour for error state.",
              "name": "--loquix-message-error-border-color"
            },
            {
              "description": "Gap between avatar and bubble.",
              "name": "--loquix-message-gap"
            },
            {
              "description": "Border radius of the bubble.",
              "name": "--loquix-message-bubble-radius"
            },
            {
              "description": "Inner padding of the bubble.",
              "name": "--loquix-message-bubble-padding"
            },
            {
              "description": "Maximum width of the bubble.",
              "name": "--loquix-message-max-width"
            }
          ],
          "cssParts": [
            {
              "description": "Outer wrapper of the message row.",
              "name": "container"
            },
            {
              "description": "Wrapper around above-bubble slot, bubble, and below-bubble slot.",
              "name": "bubble-column"
            },
            {
              "description": "The message bubble area.",
              "name": "bubble"
            },
            {
              "description": "Header area inside the bubble (model name, timestamp).",
              "name": "header"
            },
            {
              "description": "Actions toolbar area.",
              "name": "actions"
            }
          ],
          "slots": [
            {
              "description": "Override the default avatar.",
              "name": "avatar"
            },
            {
              "description": "Override the header content.",
              "name": "header"
            },
            {
              "description": "Content rendered above the bubble (e.g. attachments without bubble background).",
              "name": "above-bubble"
            },
            {
              "description": "Default slot for message content.",
              "name": ""
            },
            {
              "description": "Content rendered below the bubble (e.g. metadata, attachments).",
              "name": "below-bubble"
            },
            {
              "description": "Override the default actions toolbar.",
              "name": "actions"
            },
            {
              "description": "Footer area below the bubble.",
              "name": "footer"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "sender",
              "type": {
                "text": "MessageRole"
              },
              "default": "'assistant'",
              "description": "Role of the message sender.",
              "attribute": "sender",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "status",
              "type": {
                "text": "MessageStatus"
              },
              "default": "'complete'",
              "description": "Current status of the message.",
              "attribute": "status",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "model",
              "type": {
                "text": "string | undefined"
              },
              "description": "Model name to display in the header.",
              "attribute": "model"
            },
            {
              "kind": "field",
              "name": "timestamp",
              "type": {
                "text": "string | undefined"
              },
              "description": "Timestamp string to display in the header.",
              "attribute": "timestamp"
            },
            {
              "kind": "field",
              "name": "messageId",
              "type": {
                "text": "string | undefined"
              },
              "description": "Unique message identifier.",
              "attribute": "message-id"
            },
            {
              "kind": "field",
              "name": "privateMode",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether private mode is on (hides model info).",
              "attribute": "private-mode",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showAvatar",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show the avatar column. Hidden by default.",
              "attribute": "show-avatar",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "avatarSize",
              "type": {
                "text": "Size"
              },
              "default": "'sm'",
              "description": "Size of the built-in avatar when shown.",
              "attribute": "avatar-size"
            },
            {
              "kind": "field",
              "name": "actionsPosition",
              "type": {
                "text": "ActionsPlacement"
              },
              "default": "'bottom-start'",
              "description": "Placement of the actions toolbar relative to the bubble.",
              "attribute": "actions-position",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "collapseHeight",
              "type": {
                "text": "number"
              },
              "default": "120",
              "description": "Max height (px) for user message content before collapsing. 0 = no limit.",
              "attribute": "collapse-height"
            },
            {
              "kind": "field",
              "name": "_collapsed",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "true",
              "description": "Whether the user message is currently collapsed."
            },
            {
              "kind": "field",
              "name": "_overflows",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false",
              "description": "Whether the content overflows the collapse height."
            },
            {
              "kind": "field",
              "name": "_contentEl",
              "type": {
                "text": "HTMLDivElement"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_editing",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false",
              "description": "Whether inline editing is active."
            },
            {
              "kind": "field",
              "name": "_editContent",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''",
              "description": "Content snapshot for inline editing."
            },
            {
              "kind": "field",
              "name": "_editSubmitLabel",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''",
              "description": "Custom labels captured from the trigger element."
            },
            {
              "kind": "field",
              "name": "_editCancelLabel",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_editPlaceholder",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_resizeObserver",
              "type": {
                "text": "ResizeObserver | null"
              },
              "privacy": "private",
              "default": "null"
            },
            {
              "kind": "field",
              "name": "_dispatching",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "method",
              "name": "_observeContent",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_checkOverflow",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleToggleCollapse",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "_isCollapsed",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "description": "True only when the user message actually needs collapsing right now.",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "_renderShowMore",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderHeader",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderContent",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_getMessageText",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              },
              "description": "Extract text content from the default (unnamed) slot, excluding attachment components."
            },
            {
              "kind": "field",
              "name": "_onCopy",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_onRegenerate",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_onFeedback",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_onEditStart",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_onEditSubmit",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_onEditCancel",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_resetEditTriggers",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "description": "Reset editing state on any slotted action-edit triggers."
            },
            {
              "kind": "field",
              "name": "_isInline",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "_inlineOnAvatarSide",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "description": "Whether inline actions go on the same side as the avatar.",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "_renderActions",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderErrorRetry",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_handleRetry",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            }
          ],
          "events": [
            {
              "name": "loquix-regenerate",
              "type": {
                "text": "CustomEvent"
              }
            }
          ],
          "attributes": [
            {
              "name": "sender",
              "type": {
                "text": "MessageRole"
              },
              "default": "'assistant'",
              "description": "Role of the message sender.",
              "fieldName": "sender"
            },
            {
              "name": "status",
              "type": {
                "text": "MessageStatus"
              },
              "default": "'complete'",
              "description": "Current status of the message.",
              "fieldName": "status"
            },
            {
              "name": "model",
              "type": {
                "text": "string | undefined"
              },
              "description": "Model name to display in the header.",
              "fieldName": "model"
            },
            {
              "name": "timestamp",
              "type": {
                "text": "string | undefined"
              },
              "description": "Timestamp string to display in the header.",
              "fieldName": "timestamp"
            },
            {
              "name": "message-id",
              "type": {
                "text": "string | undefined"
              },
              "description": "Unique message identifier.",
              "fieldName": "messageId"
            },
            {
              "name": "private-mode",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether private mode is on (hides model info).",
              "fieldName": "privateMode"
            },
            {
              "name": "show-avatar",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show the avatar column. Hidden by default.",
              "fieldName": "showAvatar"
            },
            {
              "name": "avatar-size",
              "type": {
                "text": "Size"
              },
              "default": "'sm'",
              "description": "Size of the built-in avatar when shown.",
              "fieldName": "avatarSize"
            },
            {
              "name": "actions-position",
              "type": {
                "text": "ActionsPlacement"
              },
              "default": "'bottom-start'",
              "description": "Placement of the actions toolbar relative to the bubble.",
              "fieldName": "actionsPosition"
            },
            {
              "name": "collapse-height",
              "type": {
                "text": "number"
              },
              "default": "120",
              "description": "Max height (px) for user message content before collapsing. 0 = no limit.",
              "fieldName": "collapseHeight"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-message-item",
          "customElement": true,
          "summary": "Composite message bubble with optional avatar, content, and action toolbar."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixMessageItem",
          "declaration": {
            "name": "LoquixMessageItem",
            "module": "src/components/core/loquix-message-item.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-message-list.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixMessageList",
          "cssProperties": [
            {
              "description": "Gap between messages.",
              "name": "--loquix-message-gap"
            },
            {
              "description": "Background of the message list.",
              "name": "--loquix-message-list-bg"
            },
            {
              "description": "Padding inside the scroll container.",
              "name": "--loquix-message-list-padding"
            }
          ],
          "cssParts": [
            {
              "description": "Outer list wrapper.",
              "name": "list"
            },
            {
              "description": "The inner scrollable region.",
              "name": "scroll-container"
            },
            {
              "description": "The scroll-to-bottom anchor button.",
              "name": "scroll-anchor"
            }
          ],
          "slots": [
            {
              "description": "Default slot for loquix-message-item elements.",
              "name": ""
            },
            {
              "description": "Content shown when no messages are present.",
              "name": "empty-state"
            },
            {
              "description": "Loading indicator content.",
              "name": "loading"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "autoScroll",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to auto-scroll to the bottom on new content.",
              "attribute": "auto-scroll"
            },
            {
              "kind": "field",
              "name": "virtualize",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Enable virtual scrolling (no-op in Phase 1).",
              "attribute": "virtualize"
            },
            {
              "kind": "field",
              "name": "showTimestamps",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show timestamps on messages.",
              "attribute": "show-timestamps"
            },
            {
              "kind": "field",
              "name": "showScrollAnchor",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to show the scroll-to-bottom anchor button.",
              "attribute": "show-scroll-anchor"
            },
            {
              "kind": "field",
              "name": "scrollOnSend",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to auto-scroll to bottom when a loquix-submit event is detected.",
              "attribute": "scroll-on-send"
            },
            {
              "kind": "field",
              "name": "_scrollContainer",
              "type": {
                "text": "HTMLElement"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_hasMessages",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "field",
              "name": "_showAnchor",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "field",
              "name": "_submitRoot",
              "type": {
                "text": "EventTarget | null"
              },
              "privacy": "private",
              "default": "null"
            },
            {
              "kind": "field",
              "name": "_autoScrollController",
              "privacy": "private",
              "default": "new AutoScrollController(this, { onScrollStateChange: (isAtBottom: boolean) => { this._showAnchor = !isAtBottom; if (isAtBottom) { this.dispatchEvent(createLoquixEvent('loquix-scroll-bottom', {})); } else { this.dispatchEvent( createLoquixEvent('loquix-scroll-away', { scrollTop: this._scrollContainer?.scrollTop ?? 0, }), ); } }, })"
            },
            {
              "kind": "field",
              "name": "_attached",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "method",
              "name": "_attachIfNeeded",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_detach",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "scrollToBottom",
              "privacy": "public",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "behavior",
                  "default": "'smooth'",
                  "type": {
                    "text": "ScrollBehavior"
                  }
                }
              ],
              "description": "Programmatically scroll to the bottom."
            },
            {
              "kind": "method",
              "name": "scrollToMessage",
              "privacy": "public",
              "return": {
                "type": {
                  "text": ""
                }
              },
              "parameters": [
                {
                  "name": "messageId",
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "Scroll to a message element by its message-id attribute."
            },
            {
              "kind": "field",
              "name": "_handleSubmitForScroll",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_handleAnchorClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleSlotChange",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_observeSlottedElements",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_checkForMessages",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            }
          ],
          "events": [
            {
              "description": "When scroll reaches the bottom.",
              "name": "loquix-scroll-bottom"
            },
            {
              "description": "When scroll moves away from the bottom.",
              "name": "loquix-scroll-away"
            }
          ],
          "attributes": [
            {
              "name": "auto-scroll",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to auto-scroll to the bottom on new content.",
              "fieldName": "autoScroll"
            },
            {
              "name": "virtualize",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Enable virtual scrolling (no-op in Phase 1).",
              "fieldName": "virtualize"
            },
            {
              "name": "show-timestamps",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether to show timestamps on messages.",
              "fieldName": "showTimestamps"
            },
            {
              "name": "show-scroll-anchor",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to show the scroll-to-bottom anchor button.",
              "fieldName": "showScrollAnchor"
            },
            {
              "name": "scroll-on-send",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to auto-scroll to bottom when a loquix-submit event is detected.",
              "fieldName": "scrollOnSend"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-message-list",
          "customElement": true,
          "summary": "Scrollable container for chat messages with auto-scroll support."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixMessageList",
          "declaration": {
            "name": "LoquixMessageList",
            "module": "src/components/core/loquix-message-list.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-mode-selector.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixModeSelector",
          "cssParts": [
            {
              "description": "The tabs container (tabs/pills variant)",
              "name": "tabs"
            },
            {
              "description": "A tab/pill button",
              "name": "tab"
            },
            {
              "description": "The toggle container",
              "name": "toggle"
            },
            {
              "description": "A toggle option button",
              "name": "toggle-option"
            },
            {
              "description": "The dropdown trigger button",
              "name": "trigger"
            },
            {
              "description": "The dropdown panel",
              "name": "panel"
            },
            {
              "description": "A dropdown option",
              "name": "option"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "modes",
              "type": {
                "text": "ModeOption[]"
              },
              "default": "[]",
              "description": "Array of mode options.",
              "attribute": "modes"
            },
            {
              "kind": "field",
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Currently selected mode value.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "ModeSelectorVariant"
              },
              "default": "'tabs'",
              "description": "Rendering variant.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showDescription",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show mode descriptions (tabs/pills variants and dropdown options).",
              "attribute": "show-description"
            },
            {
              "kind": "field",
              "name": "stacked",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Stack description below label instead of inline (tabs/pills variants).",
              "attribute": "stacked",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the selector is disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the dropdown panel is open (dropdown variant only).",
              "attribute": "open",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_focusedIndex",
              "type": {
                "text": "number"
              },
              "privacy": "private",
              "default": "-1"
            },
            {
              "kind": "field",
              "name": "_outsideClickHandler",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_listenersAttached",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "method",
              "name": "_addDocumentListeners",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_removeDocumentListeners",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "_chevronSvg",
              "privacy": "private",
              "default": "svg`<svg class=\"trigger__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"/></svg>`"
            },
            {
              "kind": "field",
              "name": "_checkSvg",
              "privacy": "private",
              "default": "svg`<svg class=\"option__check\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"/></svg>`"
            },
            {
              "kind": "method",
              "name": "toggle",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "show",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "hide",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleSelect",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "mode",
                  "type": {
                    "text": "ModeOption"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "_selectedMode",
              "type": {
                "text": "ModeOption | undefined"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "_positionPanel",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "Promise<void>"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleOutsideClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "MouseEvent"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "_handleTabsKeydown",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_handleDropdownKeydown",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderTabs",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderToggle",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderDropdown",
              "privacy": "private"
            }
          ],
          "events": [
            {
              "description": "Fired when the selected mode changes. Detail: { from, to }",
              "name": "loquix-mode-change"
            }
          ],
          "attributes": [
            {
              "name": "modes",
              "type": {
                "text": "ModeOption[]"
              },
              "default": "[]",
              "description": "Array of mode options.",
              "fieldName": "modes"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Currently selected mode value.",
              "fieldName": "value"
            },
            {
              "name": "variant",
              "type": {
                "text": "ModeSelectorVariant"
              },
              "default": "'tabs'",
              "description": "Rendering variant.",
              "fieldName": "variant"
            },
            {
              "name": "show-description",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show mode descriptions (tabs/pills variants and dropdown options).",
              "fieldName": "showDescription"
            },
            {
              "name": "stacked",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Stack description below label instead of inline (tabs/pills variants).",
              "fieldName": "stacked"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the selector is disabled.",
              "fieldName": "disabled"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the dropdown panel is open (dropdown variant only).",
              "fieldName": "open"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-mode-selector",
          "customElement": true,
          "summary": "Switches between AI operating modes with four rendering variants."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixModeSelector",
          "declaration": {
            "name": "LoquixModeSelector",
            "module": "src/components/core/loquix-mode-selector.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-model-selector.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixModelSelector",
          "cssParts": [
            {
              "description": "The trigger button",
              "name": "trigger"
            },
            {
              "description": "The dropdown panel",
              "name": "panel"
            },
            {
              "description": "The search input wrapper",
              "name": "search"
            },
            {
              "description": "An option item",
              "name": "option"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "models",
              "type": {
                "text": "ModelOption[]"
              },
              "default": "[]",
              "description": "Array of model options.",
              "attribute": "models"
            },
            {
              "kind": "field",
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Currently selected model value.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "placeholder",
              "type": {
                "text": "string | undefined"
              },
              "description": "Placeholder text when no model is selected.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "showCost",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show cost indicator for each model.",
              "attribute": "show-cost"
            },
            {
              "kind": "field",
              "name": "showCapabilities",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show capability badges for each model.",
              "attribute": "show-capabilities"
            },
            {
              "kind": "field",
              "name": "grouped",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Group models by their group field.",
              "attribute": "grouped",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "searchable",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show search input in dropdown.",
              "attribute": "searchable",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the selector is disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "placement",
              "type": {
                "text": "'top' | 'bottom'"
              },
              "default": "'top'",
              "description": "Preferred panel placement.",
              "attribute": "placement"
            },
            {
              "kind": "field",
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the panel is open.",
              "attribute": "open",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_searchQuery",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_focusedIndex",
              "type": {
                "text": "number"
              },
              "privacy": "private",
              "default": "-1"
            },
            {
              "kind": "field",
              "name": "_searchInput",
              "type": {
                "text": "HTMLInputElement | undefined"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_chevronSvg",
              "privacy": "private",
              "default": "svg`<svg class=\"trigger__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"/></svg>`"
            },
            {
              "kind": "field",
              "name": "_checkSvg",
              "privacy": "private",
              "default": "svg`<svg class=\"option__check\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"/></svg>`"
            },
            {
              "kind": "field",
              "name": "_searchSvg",
              "privacy": "private",
              "default": "svg`<svg class=\"search__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/></svg>`"
            },
            {
              "kind": "field",
              "name": "_outsideClickHandler",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_keydownHandler",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_listenersAttached",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "method",
              "name": "_addDocumentListeners",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_removeDocumentListeners",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "toggle",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "show",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "hide",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "_selectedModel",
              "type": {
                "text": "ModelOption | undefined"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "_filteredModels",
              "type": {
                "text": "ModelOption[]"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "_selectableModels",
              "type": {
                "text": "ModelOption[]"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "_positionPanel",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "Promise<void>"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleOutsideClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "MouseEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleKeydown",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "KeyboardEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_selectModel",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "model",
                  "type": {
                    "text": "ModelOption"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleSearchInput",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_renderTierBadge",
              "privacy": "private",
              "parameters": [
                {
                  "name": "tier",
                  "optional": true,
                  "type": {
                    "text": "string"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_renderOption",
              "privacy": "private",
              "parameters": [
                {
                  "name": "model",
                  "type": {
                    "text": "ModelOption"
                  }
                },
                {
                  "name": "_globalIdx",
                  "type": {
                    "text": "number"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_renderGrouped",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_renderFlat",
              "privacy": "private"
            }
          ],
          "events": [
            {
              "description": "Fired when a model is selected. Detail: { from, to }",
              "name": "loquix-model-change"
            }
          ],
          "attributes": [
            {
              "name": "models",
              "type": {
                "text": "ModelOption[]"
              },
              "default": "[]",
              "description": "Array of model options.",
              "fieldName": "models"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Currently selected model value.",
              "fieldName": "value"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string | undefined"
              },
              "description": "Placeholder text when no model is selected.",
              "fieldName": "placeholder"
            },
            {
              "name": "show-cost",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show cost indicator for each model.",
              "fieldName": "showCost"
            },
            {
              "name": "show-capabilities",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show capability badges for each model.",
              "fieldName": "showCapabilities"
            },
            {
              "name": "grouped",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Group models by their group field.",
              "fieldName": "grouped"
            },
            {
              "name": "searchable",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show search input in dropdown.",
              "fieldName": "searchable"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the selector is disabled.",
              "fieldName": "disabled"
            },
            {
              "name": "placement",
              "type": {
                "text": "'top' | 'bottom'"
              },
              "default": "'top'",
              "description": "Preferred panel placement.",
              "fieldName": "placement"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the panel is open.",
              "fieldName": "open"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-model-selector",
          "customElement": true,
          "summary": "Dropdown selector for LLM models with tier badges, costs, and capability indicators."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixModelSelector",
          "declaration": {
            "name": "LoquixModelSelector",
            "module": "src/components/core/loquix-model-selector.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-nudge-banner.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixNudgeBanner",
          "cssProperties": [
            {
              "description": "Background color.",
              "name": "--loquix-nudge-bg"
            },
            {
              "description": "Text color.",
              "name": "--loquix-nudge-color"
            },
            {
              "description": "Border color.",
              "name": "--loquix-nudge-border-color"
            },
            {
              "description": "Border radius.",
              "name": "--loquix-nudge-border-radius"
            },
            {
              "description": "Padding.",
              "name": "--loquix-nudge-padding"
            },
            {
              "description": "Gap between elements.",
              "name": "--loquix-nudge-gap"
            },
            {
              "description": "Font size.",
              "name": "--loquix-nudge-font-size"
            }
          ],
          "cssParts": [
            {
              "description": "The banner container.",
              "name": "banner"
            },
            {
              "description": "The dismiss button.",
              "name": "dismiss"
            },
            {
              "description": "The action CTA button.",
              "name": "action-button"
            }
          ],
          "slots": [
            {
              "description": "Banner content text.",
              "name": ""
            },
            {
              "description": "Custom icon (overrides `icon` property).",
              "name": "icon"
            },
            {
              "description": "Custom action button (overrides `actionLabel` property).",
              "name": "action"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "nudgeId",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Unique ID for this nudge.",
              "attribute": "nudge-id"
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "NudgeVariant"
              },
              "default": "'tip'",
              "description": "Visual variant.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "dismissible",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether the banner can be dismissed.",
              "attribute": "dismissible"
            },
            {
              "kind": "field",
              "name": "actionLabel",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label for the action CTA button. Empty = no button.",
              "attribute": "action-label"
            },
            {
              "kind": "field",
              "name": "icon",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Emoji or text icon.",
              "attribute": "icon"
            },
            {
              "kind": "method",
              "name": "_handleDismiss",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleAction",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent<LoquixNudgeDismissDetail>"
              },
              "description": "When dismissed.",
              "name": "loquix-nudge-dismiss"
            },
            {
              "type": {
                "text": "CustomEvent<LoquixNudgeActionDetail>"
              },
              "description": "When action CTA is clicked.",
              "name": "loquix-nudge-action"
            }
          ],
          "attributes": [
            {
              "name": "nudge-id",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Unique ID for this nudge.",
              "fieldName": "nudgeId"
            },
            {
              "name": "variant",
              "type": {
                "text": "NudgeVariant"
              },
              "default": "'tip'",
              "description": "Visual variant.",
              "fieldName": "variant"
            },
            {
              "name": "dismissible",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether the banner can be dismissed.",
              "fieldName": "dismissible"
            },
            {
              "name": "action-label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label for the action CTA button. Empty = no button.",
              "fieldName": "actionLabel"
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Emoji or text icon.",
              "fieldName": "icon"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-nudge-banner",
          "customElement": true,
          "summary": "Contextual tip/info banner with optional dismiss and action buttons."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixNudgeBanner",
          "declaration": {
            "name": "LoquixNudgeBanner",
            "module": "src/components/core/loquix-nudge-banner.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-parameter-panel.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixParameterPanel",
          "cssParts": [
            {
              "description": "The panel container",
              "name": "panel"
            },
            {
              "description": "The presets row",
              "name": "presets"
            },
            {
              "description": "A preset button",
              "name": "preset"
            },
            {
              "description": "A parameter row",
              "name": "param"
            },
            {
              "description": "A range slider input",
              "name": "range"
            },
            {
              "description": "A toggle switch button",
              "name": "toggle-btn"
            },
            {
              "description": "A number input field",
              "name": "number-input"
            },
            {
              "description": "A select dropdown",
              "name": "select-input"
            },
            {
              "description": "The show/hide advanced toggle",
              "name": "advanced-toggle"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "parameters",
              "type": {
                "text": "ParameterDef[]"
              },
              "default": "[]",
              "description": "Array of parameter definitions.",
              "attribute": "parameters"
            },
            {
              "kind": "field",
              "name": "values",
              "type": {
                "text": "Record<string, unknown>"
              },
              "default": "{}",
              "description": "Current parameter values. Key = parameter id, value = current value.",
              "attribute": "values"
            },
            {
              "kind": "field",
              "name": "presets",
              "type": {
                "text": "ParameterPreset[]"
              },
              "default": "[]",
              "description": "Array of preset configurations.",
              "attribute": "presets"
            },
            {
              "kind": "field",
              "name": "activePreset",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Currently active preset id.",
              "attribute": "active-preset",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "compact",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Compact mode: hides descriptions and reduces spacing.",
              "attribute": "compact",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showAdvanced",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show advanced parameters.",
              "attribute": "show-advanced",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether all controls are disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_chevronSvg",
              "privacy": "private",
              "default": "svg`<svg class=\"advanced-toggle__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"/></svg>`"
            },
            {
              "kind": "field",
              "name": "_visibleParams",
              "type": {
                "text": "ParameterDef[]"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "_hasAdvancedParams",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "_getValue",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "unknown"
                }
              },
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleParamChange",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                },
                {
                  "name": "newValue",
                  "type": {
                    "text": "unknown"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handlePresetSelect",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "preset",
                  "type": {
                    "text": "ParameterPreset"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleRangeInput",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                },
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_dispatchCommit",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                },
                {
                  "name": "value",
                  "type": {
                    "text": "unknown"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleRangeCommit",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                },
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleNumberInput",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                },
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleToggleClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleSelectChange",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                },
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_toggleAdvanced",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "_getRangePct",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "number"
                }
              },
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_renderRange",
              "privacy": "private",
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_renderToggle",
              "privacy": "private",
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_renderNumber",
              "privacy": "private",
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_renderSelect",
              "privacy": "private",
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_renderParam",
              "privacy": "private",
              "parameters": [
                {
                  "name": "param",
                  "type": {
                    "text": "ParameterDef"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "description": "Fired on every input tick while dragging a slider. Detail: { id, value, values }",
              "name": "loquix-parameter-change"
            },
            {
              "description": "Fired once when user releases a slider or commits a value. Detail: { id, value, values }",
              "name": "loquix-parameter-commit"
            },
            {
              "description": "Fired when a preset is selected. Detail: { preset }",
              "name": "loquix-preset-change"
            }
          ],
          "attributes": [
            {
              "name": "parameters",
              "type": {
                "text": "ParameterDef[]"
              },
              "default": "[]",
              "description": "Array of parameter definitions.",
              "fieldName": "parameters"
            },
            {
              "name": "values",
              "type": {
                "text": "Record<string, unknown>"
              },
              "default": "{}",
              "description": "Current parameter values. Key = parameter id, value = current value.",
              "fieldName": "values"
            },
            {
              "name": "presets",
              "type": {
                "text": "ParameterPreset[]"
              },
              "default": "[]",
              "description": "Array of preset configurations.",
              "fieldName": "presets"
            },
            {
              "name": "active-preset",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Currently active preset id.",
              "fieldName": "activePreset"
            },
            {
              "name": "compact",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Compact mode: hides descriptions and reduces spacing.",
              "fieldName": "compact"
            },
            {
              "name": "show-advanced",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Show advanced parameters.",
              "fieldName": "showAdvanced"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether all controls are disabled.",
              "fieldName": "disabled"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-parameter-panel",
          "customElement": true,
          "summary": "Panel with sliders, toggles, selects, and number inputs for tuning AI parameters."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixParameterPanel",
          "declaration": {
            "name": "LoquixParameterPanel",
            "module": "src/components/core/loquix-parameter-panel.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-prompt-input.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixPromptInput",
          "cssProperties": [
            {
              "description": "Background colour of the textarea.",
              "name": "--loquix-input-bg"
            },
            {
              "description": "Text colour.",
              "name": "--loquix-input-color"
            },
            {
              "description": "Border colour.",
              "name": "--loquix-input-border-color"
            },
            {
              "description": "Border colour when focused.",
              "name": "--loquix-input-focus-border-color"
            },
            {
              "description": "Placeholder text colour.",
              "name": "--loquix-input-placeholder-color"
            },
            {
              "description": "Font family.",
              "name": "--loquix-input-font-family"
            },
            {
              "description": "Font size.",
              "name": "--loquix-input-font-size"
            },
            {
              "description": "Inner padding.",
              "name": "--loquix-input-padding"
            },
            {
              "description": "Border radius.",
              "name": "--loquix-input-border-radius"
            }
          ],
          "cssParts": [
            {
              "description": "Outer wrapper of the input.",
              "name": "container"
            },
            {
              "description": "The native `<textarea>` element.",
              "name": "input"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "PromptVariant"
              },
              "default": "'chat'",
              "description": "Visual variant of the input.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Current value of the textarea.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "rows",
              "type": {
                "text": "number"
              },
              "default": "1",
              "description": "Initial number of visible rows.",
              "attribute": "rows"
            },
            {
              "kind": "field",
              "name": "autoResize",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether the textarea auto-grows with content.",
              "attribute": "auto-resize"
            },
            {
              "kind": "field",
              "name": "submitOnEnter",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether pressing Enter submits (without Shift).",
              "attribute": "submit-on-enter"
            },
            {
              "kind": "field",
              "name": "placeholder",
              "type": {
                "text": "string | undefined"
              },
              "description": "Placeholder text.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the input is disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_textarea",
              "type": {
                "text": "HTMLTextAreaElement"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_keyboard",
              "privacy": "private",
              "default": "new KeyboardController(this)"
            },
            {
              "kind": "field",
              "name": "_resize",
              "privacy": "private",
              "default": "new ResizeController(this)"
            },
            {
              "kind": "method",
              "name": "_attachControllers",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "textarea",
                  "type": {
                    "text": "HTMLTextAreaElement"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleInput",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handlePaste",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "ClipboardEvent"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleSubmit",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            }
          ],
          "events": [
            {
              "description": "When the input value changes.",
              "name": "loquix-change"
            },
            {
              "description": "When the user submits (Enter key or programmatic).",
              "name": "loquix-submit"
            },
            {
              "description": "When files are pasted from the clipboard.",
              "name": "loquix-paste-files"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "PromptVariant"
              },
              "default": "'chat'",
              "description": "Visual variant of the input.",
              "fieldName": "variant"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Current value of the textarea.",
              "fieldName": "value"
            },
            {
              "name": "rows",
              "type": {
                "text": "number"
              },
              "default": "1",
              "description": "Initial number of visible rows.",
              "fieldName": "rows"
            },
            {
              "name": "auto-resize",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether the textarea auto-grows with content.",
              "fieldName": "autoResize"
            },
            {
              "name": "submit-on-enter",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether pressing Enter submits (without Shift).",
              "fieldName": "submitOnEnter"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string | undefined"
              },
              "description": "Placeholder text.",
              "fieldName": "placeholder"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the input is disabled.",
              "fieldName": "disabled"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-prompt-input",
          "customElement": true,
          "summary": "A textarea-based prompt input with keyboard shortcuts and auto-resize."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixPromptInput",
          "declaration": {
            "name": "LoquixPromptInput",
            "module": "src/components/core/loquix-prompt-input.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-scroll-anchor.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixScrollAnchor",
          "cssProperties": [
            {
              "description": "Custom icon as mask-image URL (e.g. `url('arrow.png')`). Monochrome — inherits button color.",
              "name": "--loquix-scroll-anchor-icon"
            },
            {
              "description": "Icon size.",
              "name": "--loquix-scroll-anchor-icon-size",
              "default": "18px"
            },
            {
              "description": "Button size.",
              "name": "--loquix-scroll-anchor-size",
              "default": "36px"
            },
            {
              "description": "Button background.",
              "name": "--loquix-scroll-anchor-bg"
            },
            {
              "description": "Icon colour.",
              "name": "--loquix-scroll-anchor-color"
            },
            {
              "description": "Button shadow.",
              "name": "--loquix-scroll-anchor-shadow"
            },
            {
              "description": "Button border radius.",
              "name": "--loquix-scroll-anchor-border-radius",
              "default": "50%"
            },
            {
              "description": "Distance from bottom.",
              "name": "--loquix-scroll-anchor-bottom",
              "default": "16px"
            },
            {
              "description": "Distance from right.",
              "name": "--loquix-scroll-anchor-right",
              "default": "16px"
            }
          ],
          "cssParts": [
            {
              "description": "The scroll-down button element.",
              "name": "button"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "visible",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the button is visible. Controlled by parent.",
              "attribute": "visible",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "type": {
                "text": "string | undefined"
              },
              "description": "Accessible label for the button.",
              "attribute": "label"
            },
            {
              "kind": "method",
              "name": "_handleClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            }
          ],
          "events": [
            {
              "name": "loquix-scroll-anchor-click",
              "type": {
                "text": "CustomEvent"
              }
            }
          ],
          "attributes": [
            {
              "name": "visible",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the button is visible. Controlled by parent.",
              "fieldName": "visible"
            },
            {
              "name": "label",
              "type": {
                "text": "string | undefined"
              },
              "description": "Accessible label for the button.",
              "fieldName": "label"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-scroll-anchor",
          "customElement": true,
          "summary": "Floating button that appears when user scrolls away from bottom.\nClicking scrolls back to the newest content."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixScrollAnchor",
          "declaration": {
            "name": "LoquixScrollAnchor",
            "module": "src/components/core/loquix-scroll-anchor.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-suggestion-chips.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixSuggestionChips",
          "cssProperties": [
            {
              "description": "Chip background.",
              "name": "--loquix-chip-bg"
            },
            {
              "description": "Chip text color.",
              "name": "--loquix-chip-color"
            },
            {
              "description": "Chip border color.",
              "name": "--loquix-chip-border-color"
            },
            {
              "description": "Chip border radius.",
              "name": "--loquix-chip-border-radius"
            },
            {
              "description": "Gap between chips.",
              "name": "--loquix-chip-gap"
            },
            {
              "description": "Chip padding.",
              "name": "--loquix-chip-padding"
            },
            {
              "description": "Chip font size.",
              "name": "--loquix-chip-font-size"
            },
            {
              "description": "Chip hover background.",
              "name": "--loquix-chip-hover-bg"
            }
          ],
          "cssParts": [
            {
              "description": "Individual chip button.",
              "name": "chip"
            },
            {
              "description": "The \"+N more\" overflow button.",
              "name": "more-button"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "suggestions",
              "type": {
                "text": "Suggestion[]"
              },
              "default": "[]",
              "description": "Array of suggestion items to render as chips.",
              "attribute": "suggestions"
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "SuggestionVariant"
              },
              "default": "'chip'",
              "description": "Visual variant of the chips.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "maxVisible",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Max number of chips to show before \"+N more\". 0 = show all.",
              "attribute": "max-visible"
            },
            {
              "kind": "field",
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables all chips.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "wrap",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether chips wrap to new lines (true) or scroll horizontally (false).",
              "attribute": "wrap"
            },
            {
              "kind": "field",
              "name": "_expanded",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false",
              "description": "Whether all chips are shown (when maxVisible is set)."
            },
            {
              "kind": "method",
              "name": "_handleChipClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "suggestion",
                  "type": {
                    "text": "Suggestion"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleMoreClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "_handleKeyDown",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_getChipElements",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "HTMLElement[]"
                }
              }
            },
            {
              "kind": "method",
              "name": "_getVisibleSuggestions",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "Suggestion[]"
                }
              }
            },
            {
              "kind": "method",
              "name": "_renderChip",
              "privacy": "private",
              "parameters": [
                {
                  "name": "suggestion",
                  "type": {
                    "text": "Suggestion"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent<LoquixSuggestionSelectDetail>"
              },
              "description": "When a chip is clicked.",
              "name": "loquix-suggestion-select"
            }
          ],
          "attributes": [
            {
              "name": "suggestions",
              "type": {
                "text": "Suggestion[]"
              },
              "default": "[]",
              "description": "Array of suggestion items to render as chips.",
              "fieldName": "suggestions"
            },
            {
              "name": "variant",
              "type": {
                "text": "SuggestionVariant"
              },
              "default": "'chip'",
              "description": "Visual variant of the chips.",
              "fieldName": "variant"
            },
            {
              "name": "max-visible",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Max number of chips to show before \"+N more\". 0 = show all.",
              "fieldName": "maxVisible"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables all chips.",
              "fieldName": "disabled"
            },
            {
              "name": "wrap",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether chips wrap to new lines (true) or scroll horizontally (false).",
              "fieldName": "wrap"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-suggestion-chips",
          "customElement": true,
          "summary": "Reusable suggestion chip strip for prompts and follow-ups."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixSuggestionChips",
          "declaration": {
            "name": "LoquixSuggestionChips",
            "module": "src/components/core/loquix-suggestion-chips.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-template-card.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixTemplateCard",
          "cssProperties": [
            {
              "description": "Card padding.",
              "name": "--loquix-template-card-padding"
            },
            {
              "description": "Border color.",
              "name": "--loquix-template-card-border-color"
            },
            {
              "description": "Border radius.",
              "name": "--loquix-template-card-border-radius"
            },
            {
              "description": "Background.",
              "name": "--loquix-template-card-bg"
            },
            {
              "description": "Hover border color.",
              "name": "--loquix-template-card-hover-border-color"
            },
            {
              "description": "Selected background.",
              "name": "--loquix-template-card-selected-bg"
            },
            {
              "description": "Title font size.",
              "name": "--loquix-template-card-title-font-size"
            },
            {
              "description": "Description font size.",
              "name": "--loquix-template-card-desc-font-size"
            },
            {
              "description": "Description color.",
              "name": "--loquix-template-card-desc-color"
            }
          ],
          "cssParts": [
            {
              "description": "The card container button.",
              "name": "card"
            }
          ],
          "slots": [
            {
              "description": "Custom icon for the card.",
              "name": "icon"
            },
            {
              "description": "Extra content below the description.",
              "name": "footer"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "template",
              "type": {
                "text": "Template"
              },
              "default": "{ id: '', title: '', prompt: '' }",
              "description": "Template data to display.",
              "attribute": "template"
            },
            {
              "kind": "field",
              "name": "selected",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether this card is selected.",
              "attribute": "selected",
              "reflects": true
            },
            {
              "kind": "method",
              "name": "_handleClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent<LoquixTemplateSelectDetail>"
              },
              "description": "When the card is clicked.",
              "name": "loquix-template-select"
            }
          ],
          "attributes": [
            {
              "name": "template",
              "type": {
                "text": "Template"
              },
              "default": "{ id: '', title: '', prompt: '' }",
              "description": "Template data to display.",
              "fieldName": "template"
            },
            {
              "name": "selected",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether this card is selected.",
              "fieldName": "selected"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-template-card",
          "customElement": true,
          "summary": "A single template preview card. Used standalone or inside template-picker."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixTemplateCard",
          "declaration": {
            "name": "LoquixTemplateCard",
            "module": "src/components/core/loquix-template-card.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-template-picker.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixTemplatePicker",
          "cssProperties": [
            {
              "description": "Dialog max width.",
              "name": "--loquix-picker-max-width"
            },
            {
              "description": "Dialog border color.",
              "name": "--loquix-picker-border-color"
            },
            {
              "description": "Dialog border radius.",
              "name": "--loquix-picker-border-radius"
            },
            {
              "description": "Dialog background.",
              "name": "--loquix-picker-bg"
            },
            {
              "description": "Backdrop overlay color.",
              "name": "--loquix-picker-backdrop"
            },
            {
              "description": "Grid gap.",
              "name": "--loquix-picker-gap"
            },
            {
              "description": "Minimum card width in the grid.",
              "name": "--loquix-picker-card-min-width"
            }
          ],
          "cssParts": [
            {
              "description": "The `<dialog>` element.",
              "name": "dialog"
            },
            {
              "description": "The search input.",
              "name": "search"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "templates",
              "type": {
                "text": "Template[]"
              },
              "default": "[]",
              "description": "Array of templates to display.",
              "attribute": "templates"
            },
            {
              "kind": "field",
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the picker dialog is open.",
              "attribute": "open",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "heading",
              "type": {
                "text": "string | undefined"
              },
              "description": "Dialog heading text.",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "searchable",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to show the search input.",
              "attribute": "searchable"
            },
            {
              "kind": "field",
              "name": "closeOnOutsideClick",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether clicking the backdrop closes the dialog.",
              "attribute": "close-on-outside-click"
            },
            {
              "kind": "field",
              "name": "categories",
              "type": {
                "text": "string[]"
              },
              "default": "[]",
              "description": "Explicit category order. If omitted, derived from templates.",
              "attribute": "categories"
            },
            {
              "kind": "field",
              "name": "_search",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_activeCategory",
              "type": {
                "text": "string"
              },
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_dialog",
              "type": {
                "text": "HTMLDialogElement"
              },
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "show",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "description": "Open the picker dialog."
            },
            {
              "kind": "method",
              "name": "hide",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "description": "Close the picker dialog."
            },
            {
              "kind": "method",
              "name": "_getCategories",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string[]"
                }
              }
            },
            {
              "kind": "method",
              "name": "_getFilteredTemplates",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "Template[]"
                }
              }
            },
            {
              "kind": "method",
              "name": "_handleSearch",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "_handleCategoryClick",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "cat",
                  "type": {
                    "text": "string"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "_handleTemplateSelect",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_handleDialogClick",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_handleDialogClose",
              "privacy": "private"
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent<LoquixTemplatePickerOpenDetail>"
              },
              "description": "When the dialog opens.",
              "name": "loquix-template-picker-open"
            },
            {
              "type": {
                "text": "CustomEvent<LoquixTemplatePickerCloseDetail>"
              },
              "description": "When the dialog closes.",
              "name": "loquix-template-picker-close"
            },
            {
              "type": {
                "text": "CustomEvent<LoquixTemplateSelectDetail>"
              },
              "description": "When a template is selected.",
              "name": "loquix-template-select"
            }
          ],
          "attributes": [
            {
              "name": "templates",
              "type": {
                "text": "Template[]"
              },
              "default": "[]",
              "description": "Array of templates to display.",
              "fieldName": "templates"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether the picker dialog is open.",
              "fieldName": "open"
            },
            {
              "name": "heading",
              "type": {
                "text": "string | undefined"
              },
              "description": "Dialog heading text.",
              "fieldName": "heading"
            },
            {
              "name": "searchable",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to show the search input.",
              "fieldName": "searchable"
            },
            {
              "name": "close-on-outside-click",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Whether clicking the backdrop closes the dialog.",
              "fieldName": "closeOnOutsideClick"
            },
            {
              "name": "categories",
              "type": {
                "text": "string[]"
              },
              "default": "[]",
              "description": "Explicit category order. If omitted, derived from templates.",
              "fieldName": "categories"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-template-picker",
          "customElement": true,
          "summary": "Modal dialog with a searchable, categorized grid of template cards.\n\nUses native `<dialog>` element — no Shoelace dependency."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixTemplatePicker",
          "declaration": {
            "name": "LoquixTemplatePicker",
            "module": "src/components/core/loquix-template-picker.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-typing-indicator.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixTypingIndicator",
          "cssProperties": [
            {
              "description": "Background of the indicator container.",
              "name": "--loquix-typing-bg"
            },
            {
              "description": "Text colour for text / steps variants.",
              "name": "--loquix-typing-text-color"
            },
            {
              "description": "Diameter of each dot (default 6px).",
              "name": "--loquix-typing-dot-size"
            },
            {
              "description": "Colour of the dots.",
              "name": "--loquix-typing-dot-color"
            }
          ],
          "cssParts": [
            {
              "description": "Outer wrapper.",
              "name": "container"
            },
            {
              "description": "Each individual bouncing dot (variant = \"dots\").",
              "name": "dot"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "TypingVariant"
              },
              "default": "'dots'",
              "description": "Visual variant of the indicator.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "message",
              "type": {
                "text": "string | undefined"
              },
              "description": "Optional text message displayed with the `text` and `steps` variants.",
              "attribute": "message"
            },
            {
              "kind": "method",
              "name": "_renderDots",
              "privacy": "private"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "TypingVariant"
              },
              "default": "'dots'",
              "description": "Visual variant of the indicator.",
              "fieldName": "variant"
            },
            {
              "name": "message",
              "type": {
                "text": "string | undefined"
              },
              "description": "Optional text message displayed with the `text` and `steps` variants.",
              "fieldName": "message"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-typing-indicator",
          "customElement": true,
          "summary": "Animated indicator shown while the AI is generating a response."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixTypingIndicator",
          "declaration": {
            "name": "LoquixTypingIndicator",
            "module": "src/components/core/loquix-typing-indicator.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-uncertainty-marker.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixUncertaintyMarker",
          "cssProperties": [
            {
              "description": "Foreground for `unsure` kind.",
              "name": "--loquix-uncert-unsure-color"
            },
            {
              "description": "Highlight background for `unsure` kind.",
              "name": "--loquix-uncert-unsure-bg"
            },
            {
              "description": "Foreground for `needs-verification` kind.",
              "name": "--loquix-uncert-verify-color"
            },
            {
              "description": "Highlight background for `needs-verification` kind.",
              "name": "--loquix-uncert-verify-bg"
            },
            {
              "description": "Foreground for `speculative` kind.",
              "name": "--loquix-uncert-spec-color"
            },
            {
              "description": "Highlight background for `speculative` kind.",
              "name": "--loquix-uncert-spec-bg"
            }
          ],
          "cssParts": [
            {
              "description": "The marker wrapper.",
              "name": "marker"
            },
            {
              "description": "The slotted-text container.",
              "name": "text"
            },
            {
              "description": "The trailing icon (icon variant only).",
              "name": "icon"
            },
            {
              "description": "The tooltip element.",
              "name": "tooltip"
            }
          ],
          "slots": [
            {
              "description": "The inline text to mark.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "kind",
              "type": {
                "text": "UncertaintyKind"
              },
              "default": "'unsure'",
              "description": "What kind of uncertainty applies to the wrapped phrase.",
              "attribute": "kind",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "variant",
              "type": {
                "text": "UncertaintyVariant"
              },
              "default": "'underline'",
              "description": "How the phrase is visually marked.",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "reason",
              "type": {
                "text": "string | undefined"
              },
              "description": "Optional explicit reason text. Overrides the localised default for the kind.",
              "attribute": "reason"
            },
            {
              "kind": "field",
              "name": "_open",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "method",
              "name": "_tipText",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "string"
                }
              }
            },
            {
              "kind": "field",
              "name": "_show",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_hide",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_activate",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "_onKeyDown",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "_onClick",
              "privacy": "private"
            }
          ],
          "events": [
            {
              "description": "When the marker is activated by click, Enter, or Space. Detail: `{ kind, reason? }`.",
              "name": "loquix-uncertainty-click"
            }
          ],
          "attributes": [
            {
              "name": "kind",
              "type": {
                "text": "UncertaintyKind"
              },
              "default": "'unsure'",
              "description": "What kind of uncertainty applies to the wrapped phrase.",
              "fieldName": "kind"
            },
            {
              "name": "variant",
              "type": {
                "text": "UncertaintyVariant"
              },
              "default": "'underline'",
              "description": "How the phrase is visually marked.",
              "fieldName": "variant"
            },
            {
              "name": "reason",
              "type": {
                "text": "string | undefined"
              },
              "description": "Optional explicit reason text. Overrides the localised default for the kind.",
              "fieldName": "reason"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-uncertainty-marker",
          "customElement": true,
          "summary": "Wraps an inline phrase to flag it as unsure, needing verification, or speculative.\n\nThe slotted text remains the control's accessible name; the kind/reason is exposed via\n`aria-describedby` so screen readers announce the uncertainty as a description rather\nthan overriding the phrase. Tooltip opens on hover or focus and closes on\nmouseleave/blur/Escape."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixUncertaintyMarker",
          "declaration": {
            "name": "LoquixUncertaintyMarker",
            "module": "src/components/core/loquix-uncertainty-marker.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/components/core/loquix-welcome-screen.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "LoquixWelcomeScreen",
          "cssProperties": [
            {
              "description": "Container padding.",
              "name": "--loquix-welcome-padding"
            },
            {
              "description": "Maximum width.",
              "name": "--loquix-welcome-max-width"
            },
            {
              "description": "Heading font size.",
              "name": "--loquix-welcome-heading-font-size"
            },
            {
              "description": "Heading font weight.",
              "name": "--loquix-welcome-heading-font-weight"
            },
            {
              "description": "Heading color.",
              "name": "--loquix-welcome-heading-color"
            },
            {
              "description": "Subheading font size.",
              "name": "--loquix-welcome-subheading-font-size"
            },
            {
              "description": "Subheading color.",
              "name": "--loquix-welcome-subheading-color"
            }
          ],
          "slots": [
            {
              "description": "Brand logo/icon above the heading.",
              "name": "logo"
            },
            {
              "description": "Custom heading markup (overrides `heading` property).",
              "name": "heading"
            },
            {
              "description": "Custom subheading markup (overrides `subheading` property).",
              "name": "subheading"
            },
            {
              "description": "Override the default suggestion chips.",
              "name": "suggestions"
            },
            {
              "description": "Additional content below suggestions.",
              "name": "footer"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "_localize",
              "privacy": "private",
              "default": "new LocalizeController(this)"
            },
            {
              "kind": "field",
              "name": "heading",
              "type": {
                "text": "string | undefined"
              },
              "description": "Main heading text.",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "subheading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Subheading text below the heading.",
              "attribute": "subheading"
            },
            {
              "kind": "field",
              "name": "layout",
              "type": {
                "text": "WelcomeScreenLayout"
              },
              "default": "'centered'",
              "description": "Layout mode.",
              "attribute": "layout",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "suggestions",
              "type": {
                "text": "Suggestion[]"
              },
              "default": "[]",
              "description": "Suggestion items to render as chips.",
              "attribute": "suggestions"
            },
            {
              "kind": "field",
              "name": "suggestionVariant",
              "type": {
                "text": "SuggestionVariant"
              },
              "default": "'chip'",
              "description": "Visual variant for suggestion chips.",
              "attribute": "suggestion-variant"
            }
          ],
          "attributes": [
            {
              "name": "heading",
              "type": {
                "text": "string | undefined"
              },
              "description": "Main heading text.",
              "fieldName": "heading"
            },
            {
              "name": "subheading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Subheading text below the heading.",
              "fieldName": "subheading"
            },
            {
              "name": "layout",
              "type": {
                "text": "WelcomeScreenLayout"
              },
              "default": "'centered'",
              "description": "Layout mode.",
              "fieldName": "layout"
            },
            {
              "name": "suggestions",
              "type": {
                "text": "Suggestion[]"
              },
              "default": "[]",
              "description": "Suggestion items to render as chips.",
              "fieldName": "suggestions"
            },
            {
              "name": "suggestion-variant",
              "type": {
                "text": "SuggestionVariant"
              },
              "default": "'chip'",
              "description": "Visual variant for suggestion chips.",
              "fieldName": "suggestionVariant"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "loquix-welcome-screen",
          "customElement": true,
          "summary": "Empty-state welcome screen with heading, suggestions, and branding.\n\nPlace inside `<loquix-message-list slot=\"empty-state\">` to show when no messages exist."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "LoquixWelcomeScreen",
          "declaration": {
            "name": "LoquixWelcomeScreen",
            "module": "src/components/core/loquix-welcome-screen.ts"
          }
        }
      ]
    }
  ]
}
