aeico-components 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/dist/alert.cjs +20 -29
  2. package/dist/alert.cjs.map +3 -3
  3. package/dist/alert.js +20 -29
  4. package/dist/alert.js.map +3 -3
  5. package/dist/badge.cjs +19 -28
  6. package/dist/badge.cjs.map +3 -3
  7. package/dist/badge.js +19 -28
  8. package/dist/badge.js.map +3 -3
  9. package/dist/breadcrumb.cjs +22 -33
  10. package/dist/breadcrumb.cjs.map +3 -3
  11. package/dist/breadcrumb.js +22 -33
  12. package/dist/breadcrumb.js.map +3 -3
  13. package/dist/button-group.cjs +19 -28
  14. package/dist/button-group.cjs.map +3 -3
  15. package/dist/button-group.js +19 -28
  16. package/dist/button-group.js.map +3 -3
  17. package/dist/button.cjs +19 -29
  18. package/dist/button.cjs.map +3 -3
  19. package/dist/button.js +19 -29
  20. package/dist/button.js.map +3 -3
  21. package/dist/card.cjs +19 -29
  22. package/dist/card.cjs.map +3 -3
  23. package/dist/card.js +19 -29
  24. package/dist/card.js.map +3 -3
  25. package/dist/checkbox.cjs +21 -31
  26. package/dist/checkbox.cjs.map +3 -3
  27. package/dist/checkbox.js +21 -31
  28. package/dist/checkbox.js.map +3 -3
  29. package/dist/copy-button.cjs +25 -33
  30. package/dist/copy-button.cjs.map +2 -2
  31. package/dist/copy-button.js +25 -33
  32. package/dist/copy-button.js.map +3 -3
  33. package/dist/detail-group.cjs +19 -29
  34. package/dist/detail-group.cjs.map +3 -3
  35. package/dist/detail-group.js +19 -29
  36. package/dist/detail-group.js.map +3 -3
  37. package/dist/detail.cjs +19 -29
  38. package/dist/detail.cjs.map +3 -3
  39. package/dist/detail.js +19 -29
  40. package/dist/detail.js.map +3 -3
  41. package/dist/dialog.cjs +24 -32
  42. package/dist/dialog.cjs.map +2 -2
  43. package/dist/dialog.js +24 -32
  44. package/dist/dialog.js.map +3 -3
  45. package/dist/divider.cjs +20 -30
  46. package/dist/divider.cjs.map +3 -3
  47. package/dist/divider.js +20 -30
  48. package/dist/divider.js.map +3 -3
  49. package/dist/drawer.cjs +24 -32
  50. package/dist/drawer.cjs.map +2 -2
  51. package/dist/drawer.js +24 -32
  52. package/dist/drawer.js.map +3 -3
  53. package/dist/dropdown.cjs +31 -43
  54. package/dist/dropdown.cjs.map +3 -3
  55. package/dist/dropdown.js +31 -43
  56. package/dist/dropdown.js.map +3 -3
  57. package/dist/icon-button.cjs +25 -35
  58. package/dist/icon-button.cjs.map +3 -3
  59. package/dist/icon-button.js +25 -35
  60. package/dist/icon-button.js.map +3 -3
  61. package/dist/icon.cjs +20 -26
  62. package/dist/icon.cjs.map +2 -2
  63. package/dist/icon.js +20 -26
  64. package/dist/icon.js.map +2 -2
  65. package/dist/index.cjs +75 -113
  66. package/dist/index.cjs.map +3 -3
  67. package/dist/index.js +75 -113
  68. package/dist/index.js.map +3 -3
  69. package/dist/menu.cjs +20 -31
  70. package/dist/menu.cjs.map +3 -3
  71. package/dist/menu.js +20 -31
  72. package/dist/menu.js.map +3 -3
  73. package/dist/navbar.cjs +19 -29
  74. package/dist/navbar.cjs.map +3 -3
  75. package/dist/navbar.js +19 -29
  76. package/dist/navbar.js.map +3 -3
  77. package/dist/number-input.cjs +21 -31
  78. package/dist/number-input.cjs.map +3 -3
  79. package/dist/number-input.js +21 -31
  80. package/dist/number-input.js.map +3 -3
  81. package/dist/pagination.cjs +24 -33
  82. package/dist/pagination.cjs.map +2 -2
  83. package/dist/pagination.js +24 -33
  84. package/dist/pagination.js.map +3 -3
  85. package/dist/progress-bar.cjs +19 -29
  86. package/dist/progress-bar.cjs.map +3 -3
  87. package/dist/progress-bar.js +19 -29
  88. package/dist/progress-bar.js.map +3 -3
  89. package/dist/radio-group.cjs +24 -35
  90. package/dist/radio-group.cjs.map +3 -3
  91. package/dist/radio-group.js +24 -35
  92. package/dist/radio-group.js.map +3 -3
  93. package/dist/select.cjs +23 -34
  94. package/dist/select.cjs.map +3 -3
  95. package/dist/select.js +23 -34
  96. package/dist/select.js.map +3 -3
  97. package/dist/slider.cjs +21 -32
  98. package/dist/slider.cjs.map +3 -3
  99. package/dist/slider.js +21 -32
  100. package/dist/slider.js.map +3 -3
  101. package/dist/spinner.cjs +19 -29
  102. package/dist/spinner.cjs.map +3 -3
  103. package/dist/spinner.js +19 -29
  104. package/dist/spinner.js.map +3 -3
  105. package/dist/styles/layout.cjs +1 -1
  106. package/dist/styles/layout.js +1 -1
  107. package/dist/styles/radius.cjs +1 -1
  108. package/dist/styles/radius.js +1 -1
  109. package/dist/styles/variables.cjs +1 -1
  110. package/dist/styles/variables.js +1 -1
  111. package/dist/switch.cjs +26 -35
  112. package/dist/switch.cjs.map +3 -3
  113. package/dist/switch.js +26 -35
  114. package/dist/switch.js.map +3 -3
  115. package/dist/tabs.cjs +21 -30
  116. package/dist/tabs.cjs.map +3 -3
  117. package/dist/tabs.js +21 -30
  118. package/dist/tabs.js.map +3 -3
  119. package/dist/tag.cjs +19 -28
  120. package/dist/tag.cjs.map +3 -3
  121. package/dist/tag.js +19 -28
  122. package/dist/tag.js.map +3 -3
  123. package/dist/text-input.cjs +21 -31
  124. package/dist/text-input.cjs.map +3 -3
  125. package/dist/text-input.js +21 -31
  126. package/dist/text-input.js.map +3 -3
  127. package/dist/textarea.cjs +21 -31
  128. package/dist/textarea.cjs.map +3 -3
  129. package/dist/textarea.js +21 -31
  130. package/dist/textarea.js.map +3 -3
  131. package/dist/tooltip.cjs +19 -28
  132. package/dist/tooltip.cjs.map +3 -3
  133. package/dist/tooltip.js +19 -28
  134. package/dist/tooltip.js.map +3 -3
  135. package/dist/tree.cjs +25 -35
  136. package/dist/tree.cjs.map +3 -3
  137. package/dist/tree.js +25 -35
  138. package/dist/tree.js.map +3 -3
  139. package/dist/types/aeico-component.d.ts +1 -1
  140. package/dist/types/aeico-field.d.ts +1 -1
  141. package/dist/types/breadcrumb/breadcrumb-item.d.ts +0 -1
  142. package/dist/types/breadcrumb/breadcrumb.d.ts +2 -3
  143. package/dist/types/button-group/button-group.d.ts +1 -1
  144. package/dist/types/card/card.d.ts +0 -1
  145. package/dist/types/checkbox/checkbox.d.ts +0 -1
  146. package/dist/types/detail/detail.d.ts +0 -1
  147. package/dist/types/detail-group/detail-group.d.ts +1 -2
  148. package/dist/types/divider/divider.d.ts +0 -1
  149. package/dist/types/dropdown/dropdown-button.d.ts +4 -5
  150. package/dist/types/dropdown/dropdown-item.d.ts +3 -4
  151. package/dist/types/dropdown/dropdown.d.ts +4 -5
  152. package/dist/types/icon/icon.d.ts +0 -1
  153. package/dist/types/icon/registry.d.ts +1 -1
  154. package/dist/types/icon-button/icon-button.d.ts +0 -1
  155. package/dist/types/index.d.ts +4 -4
  156. package/dist/types/menu/menu-item.d.ts +3 -4
  157. package/dist/types/menu/menu.d.ts +3 -4
  158. package/dist/types/navbar/navbar.d.ts +5 -6
  159. package/dist/types/number-input/number-input.d.ts +0 -1
  160. package/dist/types/pagination/pagination.d.ts +0 -1
  161. package/dist/types/progress-bar/progress-bar.d.ts +0 -1
  162. package/dist/types/radio-group/radio-group.d.ts +0 -1
  163. package/dist/types/radio-group/radio.d.ts +6 -7
  164. package/dist/types/select/select-option.d.ts +0 -1
  165. package/dist/types/select/select.d.ts +0 -1
  166. package/dist/types/slider/defines.d.ts +5 -5
  167. package/dist/types/slider/slider.d.ts +0 -1
  168. package/dist/types/spinner/spinner.d.ts +1 -2
  169. package/dist/types/switch/switch.d.ts +0 -1
  170. package/dist/types/text-input/text-input.d.ts +0 -1
  171. package/dist/types/textarea/textarea.d.ts +0 -1
  172. package/dist/types/tree/tree-item.d.ts +1 -2
  173. package/dist/types/tree/tree.d.ts +0 -1
  174. package/package.json +5 -3
  175. package/src/aeico-component.ts +6 -5
  176. package/src/aeico-field.ts +2 -2
  177. package/src/alert/alert.ts +2 -2
  178. package/src/badge/badge.ts +2 -2
  179. package/src/breadcrumb/breadcrumb-item.ts +2 -4
  180. package/src/breadcrumb/breadcrumb.ts +4 -6
  181. package/src/button/button.ts +2 -2
  182. package/src/button-group/button-group.ts +3 -3
  183. package/src/card/card.ts +2 -4
  184. package/src/card/defines.ts +1 -1
  185. package/src/card/index.ts +1 -1
  186. package/src/checkbox/checkbox.ts +2 -4
  187. package/src/copy-button/copy-button.ts +1 -1
  188. package/src/detail/detail.ts +2 -4
  189. package/src/detail-group/detail-group.ts +2 -4
  190. package/src/dialog/dialog.ts +2 -2
  191. package/src/divider/divider.ts +2 -4
  192. package/src/drawer/drawer.ts +2 -2
  193. package/src/dropdown/dropdown-button.ts +6 -8
  194. package/src/dropdown/dropdown-item.ts +5 -7
  195. package/src/dropdown/dropdown.ts +7 -9
  196. package/src/icon/icon.ts +2 -4
  197. package/src/icon/registry.ts +1 -1
  198. package/src/icon-button/icon-button.ts +2 -4
  199. package/src/index.ts +4 -4
  200. package/src/menu/menu-item.ts +5 -7
  201. package/src/menu/menu.ts +4 -6
  202. package/src/navbar/navbar.ts +7 -9
  203. package/src/number-input/number-input.ts +1 -3
  204. package/src/pagination/pagination.ts +1 -3
  205. package/src/progress-bar/progress-bar.ts +1 -2
  206. package/src/radio-group/radio-group.ts +5 -7
  207. package/src/radio-group/radio.ts +8 -10
  208. package/src/select/select-option.ts +2 -4
  209. package/src/select/select.ts +4 -6
  210. package/src/slider/defines.ts +5 -5
  211. package/src/slider/slider.ts +5 -8
  212. package/src/spinner/spinner.ts +2 -4
  213. package/src/styles/components/action-button.css +1 -1
  214. package/src/styles/components/alert.css +1 -1
  215. package/src/styles/components/breadcrumb-item.css +2 -2
  216. package/src/styles/components/button.css +0 -1
  217. package/src/styles/components/divider.css +1 -1
  218. package/src/styles/components/dropdown-item.css +2 -2
  219. package/src/styles/components/dropdown.css +1 -1
  220. package/src/styles/layout.css +14 -14
  221. package/src/styles/radius.css +1 -1
  222. package/src/styles/variables.css +14 -16
  223. package/src/switch/switch.ts +2 -4
  224. package/src/tabs/tab-panel.ts +2 -2
  225. package/src/tabs/tab.ts +2 -2
  226. package/src/tabs/tabs.ts +2 -2
  227. package/src/tag/tag.ts +2 -2
  228. package/src/text-input/text-input.ts +2 -4
  229. package/src/textarea/textarea.ts +1 -3
  230. package/src/tooltip/tooltip.ts +1 -1
  231. package/src/tree/tree-item.ts +3 -5
  232. package/src/tree/tree.ts +2 -4
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/aeico-component.ts", "../src/utils.ts", "../src/dropdown/dropdown.ts", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/dropdown.css", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/variables.css", "../src/dropdown/dropdown-item.ts", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/dropdown-item.css", "../src/icon/icon.ts", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/size.css", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/color.css", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/icon.css", "../src/icon/defines.ts", "../src/icon/registry.ts", "../src/icon/built-in-icons.ts", "../src/dropdown/dropdown-button.ts", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/button.css", "../src/button/button.ts"],
4
- "sourcesContent": ["\uFEFFimport { AeicoElement } from 'aeico';\nimport { toKebab } from './utils';\n\nconst TAG_NAME_PREFIX = 'ae';\n\n/**\n * AeicoComponent is the base class for all built-in Aeico components.\n */\nclass AeicoComponent extends AeicoElement {\n static register(name?: string) {\n const tagName = name || `${TAG_NAME_PREFIX}-${this.tagName || toKebab(this.name)}`;\n\n super.register(tagName);\n }\n}\n\nexport default AeicoComponent;\n", "export const SVG_NS = 'http://www.w3.org/2000/svg';\n\nexport function toKebab(str: string): string {\n const cleaned = str.replace(/^[_\\d]+/, '');\n\n return cleaned.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n", "\uFEFFimport AeicoComponent from '../aeico-component';\nimport type { InferProps } from 'aeico';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\nimport style from '../styles/components/dropdown.css';\nimport variables from '../styles/variables.css';\nimport type { DropdownPlacement } from './defines';\n// Ensure ae-dropdown-item is registered when this module is used\nimport './dropdown-item';\n\n/**\n * Dropdown component \u2014 renders a floating menu panel anchored to a trigger slot.\n *\n * The trigger is provided via `slot=\"trigger\"` (typically an `<ae-button>`).\n * Menu items are provided as `<ae-dropdown-item>` default-slot children.\n *\n * Emits:\n * - `open` \u2014 when the panel opens\n * - `close` \u2014 when the panel closes\n * - `select` \u2014 `{ detail: { value, label } }` when a menu item is clicked\n *\n * @example\n * ```html\n * <ae-dropdown>\n * <ae-button slot=\"trigger\">Actions</ae-button>\n * <ae-dropdown-item value=\"edit\" icon=\"edit\">Edit</ae-dropdown-item>\n * <ae-dropdown-item value=\"delete\" danger icon=\"trash\">Delete</ae-dropdown-item>\n * </ae-dropdown>\n * ```\n *\n * @example\n * ```html\n * <!-- Inside ae-navbar -->\n * <ae-navbar>\n * <a slot=\"brand\" href=\"/\">MyApp</a>\n * <ae-dropdown slot=\"end\">\n * <ae-button slot=\"trigger\" variant=\"outlined\" size=\"sm\">User</ae-button>\n * <ae-dropdown-item href=\"/profile\" icon=\"user\">Profile</ae-dropdown-item>\n * <ae-dropdown-item value=\"logout\" danger>Sign out</ae-dropdown-item>\n * </ae-dropdown>\n * </ae-navbar>\n * ```\n */\nclass Dropdown extends AeicoComponent {\n static tagName = 'dropdown';\n\n protected static styles = [variables, style];\n\n /**\n * Position of the panel relative to the trigger.\n * Defaults to `'bottom-start'` (left-aligned, below trigger).\n */\n @prop({ type: String })\n accessor placement: DropdownPlacement = 'bottom-start';\n\n /**\n * Whether the dropdown panel is visible. Reflects as the `open` attribute.\n * Can be used for controlled open/close state.\n */\n @prop({ type: Boolean })\n accessor open: boolean = false;\n\n /**\n * When `true` (default), clicking a menu item automatically closes the panel.\n */\n @prop({ type: Boolean })\n accessor closeOnSelect: boolean = true;\n\n /** Disables the trigger and prevents opening. */\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n /**\n * Optional label text. When set, `ae-dropdown` renders its own trigger button\n * in the shadow DOM (no `slot=\"trigger\"` needed). Inherits `--ae-navbar-link-*`\n * CSS variables so it automatically matches navbar link styles.\n */\n @prop({ type: String })\n accessor label: string = '';\n\n private _outsideClickHandler: ((e: MouseEvent) => void) | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n\n this.listen('_item-select', this._handleItemSelect as EventListener);\n this.listen('keydown', this._handleKeydown as EventListener);\n\n this._outsideClickHandler = (e: MouseEvent) => {\n if (!this.open) return;\n const path = e.composedPath();\n if (!path.includes(this)) {\n this._closePanel();\n }\n };\n document.addEventListener('click', this._outsideClickHandler);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._outsideClickHandler) {\n document.removeEventListener('click', this._outsideClickHandler);\n this._outsideClickHandler = null;\n }\n }\n\n /** Opens the dropdown panel. */\n show(): void {\n if (this.disabled || this.open) return;\n this.open = true;\n this.emit('open');\n }\n\n /** Closes the dropdown panel. */\n hide(): void {\n if (!this.open) return;\n this.open = false;\n this.emit('close');\n }\n\n /** Toggles the dropdown panel open/closed. */\n toggle(): void {\n if (this.open) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n private _closePanel(): void {\n if (this.open) this.hide();\n }\n\n // Called via declarative @click on the trigger-wrapper div inside the shadow DOM.\n // Events from slotted trigger content bubble through the shadow DOM slot path,\n // so this fires for trigger clicks only \u2014 not for panel item clicks.\n private _handleTriggerClick = (): void => {\n this.toggle();\n };\n\n private _handleItemSelect = (e: CustomEvent): void => {\n this.emit('select', { detail: e.detail });\n if (this.closeOnSelect) {\n this._closePanel();\n }\n };\n\n private _handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n e.stopPropagation();\n this._closePanel();\n }\n };\n\n protected render() {\n const placementClass = `placement-${this.placement}`;\n const hasLabel = !!this.label;\n const dir = this.placement.split('-')[0];\n return html(({ div, slot, button, span }) => {\n div(\n {\n className: 'trigger-wrapper',\n 'aria-haspopup': 'menu',\n 'aria-expanded': String(this.open),\n '@click': this.disabled ? undefined : this._handleTriggerClick,\n },\n () => {\n if (hasLabel) {\n button(\n {\n className: 'trigger-label',\n type: 'button',\n disabled: this.disabled || undefined,\n },\n () => {\n span({ text: this.label });\n span({\n className: `ae-dropdown-arrow ae-dropdown-arrow--${dir}`,\n 'aria-hidden': 'true',\n });\n },\n );\n } else {\n slot({ name: 'trigger' });\n }\n },\n );\n div(\n {\n part: 'panel',\n className: { panel: true, open: this.open, [placementClass]: true },\n role: 'menu',\n },\n () => {\n slot();\n },\n );\n });\n }\n}\n\nDropdown.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-dropdown': Dropdown;\n }\n}\n\nexport default Dropdown;\nexport type DropdownProps = InferProps<typeof Dropdown>;\n", "export default \":host {\\n display: inline-block;\\n position: relative;\\n\\n --dropdown-z-index: 1000;\\n --dropdown-bg: var(--ae-surface-overlay, #fff);\\n --dropdown-border: 1px solid var(--ae-color-border, rgba(0, 0, 0, 0.12));\\n --dropdown-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\\n --dropdown-min-width: 10rem;\\n --dropdown-padding: 0.25rem 0;\\n}\\n\\n.trigger-wrapper {\\n display: flex;\\n align-items: stretch;\\n height: 100%;\\n}\\n\\n/* Internal trigger rendered when `label` prop is set.\\n Uses --dropdown-trigger-* variables. Context components (e.g. ae-navbar)\\n map their own tokens to these variables via ::slotted(ae-dropdown). */\\n.trigger-label {\\n display: inline-flex;\\n align-items: center;\\n height: var(--dropdown-trigger-height, auto);\\n padding: 0 var(--dropdown-trigger-padding-x, 0.75rem);\\n color: var(--dropdown-trigger-color, inherit);\\n background: var(--dropdown-trigger-bg, none);\\n border: none;\\n border-radius: var(--dropdown-trigger-radius, 0);\\n -webkit-appearance: none;\\n appearance: none;\\n cursor: pointer;\\n font: inherit;\\n font-size: var(--dropdown-trigger-font-size, inherit);\\n white-space: nowrap;\\n transition: color 0.15s ease, background-color 0.15s ease;\\n outline-offset: 2px;\\n}\\n\\n.trigger-label:hover {\\n color: var(--dropdown-trigger-hover-color, inherit);\\n background-color: var(--dropdown-trigger-hover-bg, transparent);\\n}\\n\\n:host([disabled]) .trigger-label {\\n opacity: 0.5;\\n cursor: not-allowed;\\n pointer-events: none;\\n}\\n\\n/* Bootstrap-style CSS border caret \u2014 shadow DOM only, no global injection needed */\\n.ae-dropdown-arrow {\\n display: inline-block;\\n width: 0;\\n height: 0;\\n margin-left: 0.3em;\\n vertical-align: 0.2em;\\n flex-shrink: 0;\\n}\\n.ae-dropdown-arrow--bottom {\\n border-top: 0.35em solid;\\n border-right: 0.35em solid transparent;\\n border-left: 0.35em solid transparent;\\n}\\n.ae-dropdown-arrow--top {\\n border-bottom: 0.35em solid;\\n border-right: 0.35em solid transparent;\\n border-left: 0.35em solid transparent;\\n}\\n.ae-dropdown-arrow--right {\\n border-left: 0.35em solid;\\n border-top: 0.35em solid transparent;\\n border-bottom: 0.35em solid transparent;\\n}\\n.ae-dropdown-arrow--left {\\n border-right: 0.35em solid;\\n border-top: 0.35em solid transparent;\\n border-bottom: 0.35em solid transparent;\\n}\\n\\n.panel {\\n display: none;\\n position: absolute;\\n z-index: var(--dropdown-z-index);\\n background: var(--dropdown-bg);\\n border: var(--dropdown-border);\\n border-radius: var(--ae-border-radius, var(--ae-radius-md));\\n box-shadow: var(--dropdown-shadow);\\n min-width: var(--dropdown-min-width);\\n padding: var(--dropdown-padding);\\n box-sizing: border-box;\\n /* Prevent panel from being wider than viewport */\\n max-width: calc(100vw - 16px);\\n}\\n\\n.panel.open {\\n display: block;\\n}\\n\\n/* placement variants */\\n.panel.placement-bottom-start {\\n top: 100%;\\n left: 0;\\n margin-top: 4px;\\n}\\n\\n.panel.placement-bottom-end {\\n top: 100%;\\n right: 0;\\n margin-top: 4px;\\n}\\n\\n.panel.placement-bottom {\\n top: 100%;\\n left: 50%;\\n transform: translateX(-50%);\\n margin-top: 4px;\\n}\\n\\n.panel.placement-top-start {\\n bottom: 100%;\\n left: 0;\\n margin-bottom: 4px;\\n}\\n\\n.panel.placement-top-end {\\n bottom: 100%;\\n right: 0;\\n margin-bottom: 4px;\\n}\\n\\n.panel.placement-top {\\n bottom: 100%;\\n left: 50%;\\n transform: translateX(-50%);\\n margin-bottom: 4px;\\n}\\n\\n/* right placements */\\n.panel.placement-right-start {\\n top: 0;\\n left: 100%;\\n margin-left: 4px;\\n}\\n\\n.panel.placement-right-end {\\n bottom: 0;\\n left: 100%;\\n margin-left: 4px;\\n}\\n\\n.panel.placement-right {\\n top: 50%;\\n left: 100%;\\n transform: translateY(-50%);\\n margin-left: 4px;\\n}\\n\\n/* left placements */\\n.panel.placement-left-start {\\n top: 0;\\n right: 100%;\\n margin-right: 4px;\\n}\\n\\n.panel.placement-left-end {\\n bottom: 0;\\n right: 100%;\\n margin-right: 4px;\\n}\\n\\n.panel.placement-left {\\n top: 50%;\\n right: 100%;\\n transform: translateY(-50%);\\n margin-right: 4px;\\n}\\n\"", "export default \":root,\\n:host {\\n --ae-font-sans-serif: system-ui, -apple-system, \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\",\\n \\\"Noto Sans\\\", \\\"Liberation Sans\\\", Arial, sans-serif,\\n \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\";\\n --ae-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas,\\n \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace;\\n font-family: var(--ae-font-sans-serif);\\n --ae-blue: #0e639c;\\n --ae-green: #28a745;\\n --ae-red: #dc3545;\\n --ae-yellow: #ffc107;\\n --ae-cyan: #17a2b8;\\n --ae-gray: #6e6e6e;\\n --ae-slate: #64748b;\\n --ae-dark: #343a40;\\n --ae-light: #f8f9fa;\\n}\\n\\n:root,\\n:host {\\n /* Blue */\\n --ae-blue-100: color-mix(in srgb, var(--ae-blue) 20%, white);\\n --ae-blue-200: color-mix(in srgb, var(--ae-blue) 40%, white);\\n --ae-blue-300: color-mix(in srgb, var(--ae-blue) 60%, white);\\n --ae-blue-400: color-mix(in srgb, var(--ae-blue) 80%, white);\\n --ae-blue-500: var(--ae-blue);\\n --ae-blue-600: color-mix(in srgb, var(--ae-blue) 80%, black);\\n --ae-blue-700: color-mix(in srgb, var(--ae-blue) 60%, black);\\n --ae-blue-800: color-mix(in srgb, var(--ae-blue) 40%, black);\\n --ae-blue-900: color-mix(in srgb, var(--ae-blue) 20%, black);\\n\\n /* Green */\\n --ae-green-100: color-mix(in srgb, var(--ae-green) 20%, white);\\n --ae-green-200: color-mix(in srgb, var(--ae-green) 40%, white);\\n --ae-green-300: color-mix(in srgb, var(--ae-green) 60%, white);\\n --ae-green-400: color-mix(in srgb, var(--ae-green) 80%, white);\\n --ae-green-500: var(--ae-green);\\n --ae-green-600: color-mix(in srgb, var(--ae-green) 80%, black);\\n --ae-green-700: color-mix(in srgb, var(--ae-green) 60%, black);\\n --ae-green-800: color-mix(in srgb, var(--ae-green) 40%, black);\\n --ae-green-900: color-mix(in srgb, var(--ae-green) 20%, black);\\n\\n /* Red */\\n --ae-red-100: color-mix(in srgb, var(--ae-red) 20%, white);\\n --ae-red-200: color-mix(in srgb, var(--ae-red) 40%, white);\\n --ae-red-300: color-mix(in srgb, var(--ae-red) 60%, white);\\n --ae-red-400: color-mix(in srgb, var(--ae-red) 80%, white);\\n --ae-red-500: var(--ae-red);\\n --ae-red-600: color-mix(in srgb, var(--ae-red) 80%, black);\\n --ae-red-700: color-mix(in srgb, var(--ae-red) 60%, black);\\n --ae-red-800: color-mix(in srgb, var(--ae-red) 40%, black);\\n --ae-red-900: color-mix(in srgb, var(--ae-red) 20%, black);\\n\\n /* Yellow */\\n --ae-yellow-100: color-mix(in srgb, var(--ae-yellow) 20%, white);\\n --ae-yellow-200: color-mix(in srgb, var(--ae-yellow) 40%, white);\\n --ae-yellow-300: color-mix(in srgb, var(--ae-yellow) 60%, white);\\n --ae-yellow-400: color-mix(in srgb, var(--ae-yellow) 80%, white);\\n --ae-yellow-500: var(--ae-yellow);\\n --ae-yellow-600: color-mix(in srgb, var(--ae-yellow) 80%, black);\\n --ae-yellow-700: color-mix(in srgb, var(--ae-yellow) 60%, black);\\n --ae-yellow-800: color-mix(in srgb, var(--ae-yellow) 40%, black);\\n --ae-yellow-900: color-mix(in srgb, var(--ae-yellow) 20%, black);\\n\\n /* Cyan */\\n --ae-cyan-100: color-mix(in srgb, var(--ae-cyan) 20%, white);\\n --ae-cyan-200: color-mix(in srgb, var(--ae-cyan) 40%, white);\\n --ae-cyan-300: color-mix(in srgb, var(--ae-cyan) 60%, white);\\n --ae-cyan-400: color-mix(in srgb, var(--ae-cyan) 80%, white);\\n --ae-cyan-500: var(--ae-cyan);\\n --ae-cyan-600: color-mix(in srgb, var(--ae-cyan) 80%, black);\\n --ae-cyan-700: color-mix(in srgb, var(--ae-cyan) 60%, black);\\n --ae-cyan-800: color-mix(in srgb, var(--ae-cyan) 40%, black);\\n --ae-cyan-900: color-mix(in srgb, var(--ae-cyan) 20%, black);\\n\\n /* Gray (neutral \u2014 base #6e6e6e) */\\n --ae-gray-100: color-mix(in srgb, var(--ae-gray) 20%, white);\\n --ae-gray-200: color-mix(in srgb, var(--ae-gray) 40%, white);\\n --ae-gray-300: color-mix(in srgb, var(--ae-gray) 60%, white);\\n --ae-gray-400: color-mix(in srgb, var(--ae-gray) 80%, white);\\n --ae-gray-500: var(--ae-gray);\\n --ae-gray-600: color-mix(in srgb, var(--ae-gray) 80%, black);\\n --ae-gray-700: color-mix(in srgb, var(--ae-gray) 60%, black);\\n --ae-gray-800: color-mix(in srgb, var(--ae-gray) 40%, black);\\n --ae-gray-900: color-mix(in srgb, var(--ae-gray) 20%, black);\\n\\n /* Slate (blue-gray \u2014 base #64748b, used for 'secondary') */\\n --ae-slate-100: color-mix(in srgb, var(--ae-slate) 20%, white);\\n --ae-slate-200: color-mix(in srgb, var(--ae-slate) 40%, white);\\n --ae-slate-300: color-mix(in srgb, var(--ae-slate) 60%, white);\\n --ae-slate-400: color-mix(in srgb, var(--ae-slate) 80%, white);\\n --ae-slate-500: var(--ae-slate);\\n --ae-slate-600: color-mix(in srgb, var(--ae-slate) 80%, black);\\n --ae-slate-700: color-mix(in srgb, var(--ae-slate) 60%, black);\\n --ae-slate-800: color-mix(in srgb, var(--ae-slate) 40%, black);\\n --ae-slate-900: color-mix(in srgb, var(--ae-slate) 20%, black);\\n\\n /* Dark (base #343a40) */\\n --ae-dark-100: color-mix(in srgb, var(--ae-dark) 20%, white);\\n --ae-dark-200: color-mix(in srgb, var(--ae-dark) 40%, white);\\n --ae-dark-300: color-mix(in srgb, var(--ae-dark) 60%, white);\\n --ae-dark-400: color-mix(in srgb, var(--ae-dark) 80%, white);\\n --ae-dark-500: var(--ae-dark);\\n --ae-dark-600: color-mix(in srgb, var(--ae-dark) 80%, black);\\n --ae-dark-700: color-mix(in srgb, var(--ae-dark) 60%, black);\\n --ae-dark-800: color-mix(in srgb, var(--ae-dark) 40%, black);\\n --ae-dark-900: color-mix(in srgb, var(--ae-dark) 20%, black);\\n\\n /* Light (base #f8f9fa) */\\n --ae-light-100: color-mix(in srgb, var(--ae-light) 20%, white);\\n --ae-light-200: color-mix(in srgb, var(--ae-light) 40%, white);\\n --ae-light-300: color-mix(in srgb, var(--ae-light) 60%, white);\\n --ae-light-400: color-mix(in srgb, var(--ae-light) 80%, white);\\n --ae-light-500: var(--ae-light);\\n --ae-light-600: color-mix(in srgb, var(--ae-light) 80%, black);\\n --ae-light-700: color-mix(in srgb, var(--ae-light) 60%, black);\\n --ae-light-800: color-mix(in srgb, var(--ae-light) 40%, black);\\n --ae-light-900: color-mix(in srgb, var(--ae-light) 20%, black);\\n}\\n\\n:root,\\n:host {\\n /* Hover / active mix (light default \u2014 overridden in \u00A7 6 dark) */\\n --ae-color-mix-hover: black 10%;\\n --ae-color-mix-active: black 20%;\\n\\n /* Primary (Blue) */\\n --ae-color-primary: var(--ae-blue-500);\\n --ae-color-primary-hover: color-mix(in srgb, var(--ae-color-primary), var(--ae-color-mix-hover));\\n --ae-color-primary-active: color-mix(in srgb, var(--ae-color-primary), var(--ae-color-mix-active));\\n --ae-color-primary-disabled: color-mix(in srgb, var(--ae-blue) 50%, var(--ae-gray-500));\\n\\n /* Success (Green) */\\n --ae-color-success: var(--ae-green-500);\\n --ae-color-success-hover: color-mix(in srgb, var(--ae-color-success), var(--ae-color-mix-hover));\\n --ae-color-success-active: color-mix(in srgb, var(--ae-color-success), var(--ae-color-mix-active));\\n --ae-color-success-disabled: color-mix(in srgb, var(--ae-green) 50%, var(--ae-gray-500));\\n\\n /* Danger (Red) */\\n --ae-color-danger: var(--ae-red-500);\\n --ae-color-danger-hover: color-mix(in srgb, var(--ae-color-danger), var(--ae-color-mix-hover));\\n --ae-color-danger-active: color-mix(in srgb, var(--ae-color-danger), var(--ae-color-mix-active));\\n --ae-color-danger-disabled: color-mix(in srgb, var(--ae-red) 50%, var(--ae-gray-500));\\n\\n /* Warning (Yellow) */\\n --ae-color-warning: var(--ae-yellow-500);\\n --ae-color-warning-hover: color-mix(in srgb, var(--ae-color-warning), var(--ae-color-mix-hover));\\n --ae-color-warning-active: color-mix(in srgb, var(--ae-color-warning), var(--ae-color-mix-active));\\n --ae-color-warning-disabled: color-mix(in srgb, var(--ae-yellow) 50%, var(--ae-gray-500));\\n\\n /* Info (Cyan) */\\n --ae-color-info: var(--ae-cyan-500);\\n --ae-color-info-hover: color-mix(in srgb, var(--ae-color-info), var(--ae-color-mix-hover));\\n --ae-color-info-active: color-mix(in srgb, var(--ae-color-info), var(--ae-color-mix-active));\\n --ae-color-info-disabled: color-mix(in srgb, var(--ae-cyan) 50%, var(--ae-gray-500));\\n\\n /* Secondary (Slate) \u2014 base differs per theme, overridden in \u00A7 6 dark */\\n --ae-color-secondary: var(--ae-slate-500);\\n --ae-color-secondary-hover: color-mix(in srgb, var(--ae-color-secondary), var(--ae-color-mix-hover));\\n --ae-color-secondary-active: color-mix(in srgb, var(--ae-color-secondary), var(--ae-color-mix-active));\\n --ae-color-secondary-text: var(--ae-slate-700);\\n}\\n\\n\\n.theme-light,\\n:root[theme=\\\"light\\\"],\\n:host([theme=\\\"light\\\"]),\\n:host-context([theme=\\\"light\\\"]),\\n:where(:root),\\n:host {\\n color-scheme: light;\\n\\n /* Gray UI aliases \u2014 lighter palette steps for elements on white background */\\n --ae-color-gray-dark: var(--ae-gray-400);\\n --ae-color-gray: var(--ae-gray-300);\\n --ae-color-gray-light: var(--ae-gray-200);\\n --ae-color-gray-lighter: var(--ae-gray-100);\\n --ae-color-gray-lightest: color-mix(in srgb, var(--ae-gray) 10%, white);\\n\\n /* Text */\\n --ae-color-text-main: var(--ae-dark-700);\\n --ae-color-text-muted: var(--ae-gray-600);\\n --ae-color-text-disabled: var(--ae-gray-300);\\n --ae-color-text-link: var(--ae-blue-500);\\n --ae-color-text-link-hover: var(--ae-blue-700);\\n\\n /* Surfaces */\\n --ae-surface-sunken: var(--ae-light-500);\\n --ae-surface-base: white;\\n --ae-surface-raised: var(--ae-light-500);\\n --ae-surface-overlay: white;\\n --ae-color-overlay: rgba(0, 0, 0, 0.4);\\n\\n /* Borders */\\n --ae-border-subtle: rgba(0, 0, 0, 0.08);\\n --ae-border-default: rgba(0, 0, 0, 0.15);\\n --ae-border-hover: rgba(0, 0, 0, 0.25);\\n --ae-border-focus: var(--ae-color-primary);\\n --ae-border-disabled: rgba(0, 0, 0, 0.06);\\n\\n /* Focus ring */\\n --ae-focus-ring: rgb(from var(--ae-blue) r g b / 0.30);\\n --ae-focus-ring-sm: rgb(from var(--ae-blue) r g b / 0.15);\\n\\n /* Subtle intent tokens \u2014 light context */\\n --ae-color-primary-bg-subtle: rgb(from var(--ae-blue) r g b / 0.08);\\n --ae-color-primary-border-subtle: rgb(from var(--ae-blue) r g b / 0.40);\\n --ae-color-primary-text-emphasis: var(--ae-blue-700);\\n\\n --ae-color-success-bg-subtle: rgb(from var(--ae-green) r g b / 0.08);\\n --ae-color-success-border-subtle: rgb(from var(--ae-green) r g b / 0.40);\\n --ae-color-success-text-emphasis: var(--ae-green-700);\\n\\n --ae-color-danger-bg-subtle: rgb(from var(--ae-red) r g b / 0.08);\\n --ae-color-danger-border-subtle: rgb(from var(--ae-red) r g b / 0.40);\\n --ae-color-danger-text-emphasis: var(--ae-red-700);\\n\\n --ae-color-warning-bg-subtle: rgb(from var(--ae-yellow) r g b / 0.08);\\n --ae-color-warning-border-subtle: rgb(from var(--ae-yellow) r g b / 0.40);\\n --ae-color-warning-text-emphasis: var(--ae-yellow-700);\\n\\n --ae-color-info-bg-subtle: rgb(from var(--ae-cyan) r g b / 0.08);\\n --ae-color-info-border-subtle: rgb(from var(--ae-cyan) r g b / 0.40);\\n --ae-color-info-text-emphasis: var(--ae-cyan-700);\\n\\n --ae-color-secondary-bg-subtle: rgb(from var(--ae-slate) r g b / 0.08);\\n --ae-color-secondary-border-subtle: rgb(from var(--ae-slate) r g b / 0.40);\\n --ae-color-secondary-text-emphasis: var(--ae-slate-700);\\n\\n --ae-color-light-bg-subtle: var(--ae-gray-100); /* opaque on white: ~#e2e2e2 */\\n --ae-color-light-border-subtle: var(--ae-gray-200); /* opaque on white: ~#c4c4c4 */\\n\\n --ae-color-dark-bg-subtle: var(--ae-dark-100); /* opaque on white: ~#d6d8d9 */\\n --ae-color-dark-border-subtle: var(--ae-dark-300); /* opaque on white: ~#85898c */\\n\\n /* Component tokens \u2014 light defaults */\\n --ae-action-btn-bg: var(--ae-gray-200);\\n --ae-action-btn-bg-hover: var(--ae-color-primary);\\n --ae-action-btn-color: var(--ae-gray-600);\\n --ae-action-btn-color-hover: white;\\n\\n --ae-clear-btn-bg-hover: var(--ae-color-danger);\\n --ae-clear-btn-color-hover: white;\\n\\n --ae-reset-btn-border-radius: var(--ae-radius-xs);\\n --ae-reset-btn-bg: var(--ae-action-btn-bg);\\n --ae-reset-btn-bg-hover: var(--ae-action-btn-bg-hover);\\n --ae-reset-btn-color: var(--ae-action-btn-color);\\n --ae-reset-btn-color-hover: var(--ae-action-btn-color-hover);\\n --ae-reset-btn-transition: all 0.12s;\\n\\n --ae-clear-btn-border-radius: var(--ae-radius-xs);\\n --ae-clear-btn-bg: var(--ae-action-btn-bg);\\n --ae-clear-btn-color: var(--ae-action-btn-color);\\n --ae-clear-btn-transition: all 0.12s;\\n}\\n\\n:root,\\n:host {\\n --ae-size-scale: 1;\\n --ae-size-base: calc(1rem * var(--ae-size-scale)); /* 16px */\\n --ae-size-xl: round(calc(var(--ae-size-l) * 1.125), 1px); /* 23px */\\n --ae-size-l: round(calc(var(--ae-size-m) * 1.125 * 1.125), 1px); /* 20px */\\n --ae-size-m: var(--ae-size-base); /* 16px */\\n --ae-size-s: round(calc(var(--ae-size-m) / 1.125), 1px); /* 14px */\\n --ae-size-xs: round(calc(var(--ae-size-s) / 1.125), 1px); /* 12px */\\n --ae-size-2xs: round(calc(var(--ae-size-xs) / 1.125), 1px); /* 11px */\\n --ae-size-3xs: round(calc(var(--ae-size-2xs) / 1.125), 1px); /* 10px */\\n}\\n\\n/* Border-radius tokens \u2014 shared across all components */\\n:root,\\n:host {\\n /**\\n * Unified border-radius hook for all components.\\n *\\n * Not set by default \u2014 each component falls back to its own --ae-radius-*\\n * token (e.g. button \u2192 sm, card \u2192 lg, input \u2192 xs).\\n *\\n * Usage:\\n * :root { --ae-border-radius: 0; } // global: all components square\\n * :root { --ae-border-radius: 999px; } // global: all components pill\\n * ae-button { --ae-border-radius: 50%; } // scoped: only buttons circular\\n * .sidebar { --ae-border-radius: 8px; } // scoped: everything inside .sidebar\\n *\\n * To restore a component to its own default:\\n * ae-card { --ae-border-radius: initial; }\\n */\\n\\n --ae-radius-square: 0;\\n --ae-radius-xs: 2px;\\n --ae-radius-sm: 4px;\\n --ae-radius-md: 6px;\\n --ae-radius-lg: 8px;\\n --ae-radius-xl: 12px;\\n --ae-radius-pill: 999px;\\n --ae-radius-circle: 50%;\\n}\\n\\n/* Layout tokens \u2014 defined on :root so all light DOM elements can use them */\\n:root,\\n:host {\\n --container-max-width: 1280px;\\n --container-padding-x: 1.5rem;\\n}\\n\\n.theme-dark,\\n:root[theme=\\\"dark\\\"],\\n:host([theme=\\\"dark\\\"]),\\n:host-context([theme=\\\"dark\\\"]) {\\n color-scheme: dark;\\n\\n /* Hover / active \u2014 slightly gentler on dark backgrounds */\\n --ae-color-mix-hover: black 8%;\\n --ae-color-mix-active: black 16%;\\n\\n /* Gray UI aliases \u2014 darker palette steps for elements on dark background */\\n --ae-color-gray-dark: var(--ae-gray-800);\\n --ae-color-gray: var(--ae-gray-700);\\n --ae-color-gray-light: var(--ae-gray-600);\\n --ae-color-gray-lighter: var(--ae-gray-500);\\n --ae-color-gray-lightest: var(--ae-gray-400);\\n\\n /* Secondary \u2014 deeper base on dark background */\\n --ae-color-secondary: var(--ae-slate-700);\\n --ae-color-secondary-text: var(--ae-slate-300);\\n\\n /* Text */\\n --ae-color-text-main: white;\\n --ae-color-text-muted: var(--ae-gray-200);\\n --ae-color-text-disabled: var(--ae-gray-500);\\n --ae-color-text-link: var(--ae-blue-300);\\n --ae-color-text-link-hover: var(--ae-blue-200);\\n\\n /* Surfaces */\\n --ae-surface-sunken: var(--ae-gray-900);\\n --ae-surface-base: color-mix(in srgb, var(--ae-gray) 27%, black);\\n --ae-surface-raised: color-mix(in srgb, var(--ae-gray) 34%, black);\\n --ae-surface-overlay: color-mix(in srgb, var(--ae-gray) 38%, black);\\n --ae-color-overlay: rgba(0, 0, 0, 0.6);\\n\\n /* Borders */\\n --ae-border-subtle: rgba(255, 255, 255, 0.08);\\n --ae-border-default: rgba(255, 255, 255, 0.12);\\n --ae-border-hover: rgba(255, 255, 255, 0.20);\\n --ae-border-focus: var(--ae-color-primary);\\n --ae-border-disabled: rgba(255, 255, 255, 0.06);\\n\\n /* Focus ring */\\n --ae-focus-ring: rgb(from var(--ae-blue) r g b / 0.25);\\n --ae-focus-ring-sm: rgb(from var(--ae-blue) r g b / 0.10);\\n\\n /* Subtle intent tokens \u2014 dark context (more alpha, lighter text-emphasis) */\\n --ae-color-primary-bg-subtle: rgb(from var(--ae-blue) r g b / 0.10);\\n --ae-color-primary-border-subtle: rgb(from var(--ae-blue) r g b / 0.30);\\n --ae-color-primary-text-emphasis: var(--ae-blue-300);\\n\\n --ae-color-success-bg-subtle: rgb(from var(--ae-green) r g b / 0.10);\\n --ae-color-success-border-subtle: rgb(from var(--ae-green) r g b / 0.30);\\n --ae-color-success-text-emphasis: var(--ae-green-300);\\n\\n --ae-color-danger-bg-subtle: rgb(from var(--ae-red) r g b / 0.10);\\n --ae-color-danger-border-subtle: rgb(from var(--ae-red) r g b / 0.30);\\n --ae-color-danger-text-emphasis: var(--ae-red-300);\\n\\n --ae-color-warning-bg-subtle: rgb(from var(--ae-yellow) r g b / 0.10);\\n --ae-color-warning-border-subtle: rgb(from var(--ae-yellow) r g b / 0.30);\\n --ae-color-warning-text-emphasis: var(--ae-yellow-300);\\n\\n --ae-color-info-bg-subtle: rgb(from var(--ae-cyan) r g b / 0.10);\\n --ae-color-info-border-subtle: rgb(from var(--ae-cyan) r g b / 0.30);\\n --ae-color-info-text-emphasis: var(--ae-cyan-300);\\n\\n --ae-color-secondary-bg-subtle: rgb(from var(--ae-slate) r g b / 0.10);\\n --ae-color-secondary-border-subtle: rgb(from var(--ae-slate) r g b / 0.30);\\n --ae-color-secondary-text-emphasis: var(--ae-slate-300);\\n\\n --ae-color-light-bg-subtle: rgb(from var(--ae-light) r g b / 0.20);\\n --ae-color-light-border-subtle: rgb(from var(--ae-light) r g b / 0.25);\\n\\n --ae-color-dark-bg-subtle: rgb(from var(--ae-dark) r g b / 0.30);\\n --ae-color-dark-border-subtle: rgb(from var(--ae-dark) r g b / 0.50);\\n\\n /* Component tokens \u2014 dark overrides */\\n --ae-action-btn-bg: var(--ae-color-gray);\\n --ae-action-btn-bg-hover: color-mix(in srgb, var(--ae-blue) 25%, var(--ae-gray-800));\\n --ae-action-btn-color: var(--ae-gray-400);\\n --ae-action-btn-color-hover: var(--ae-cyan-300);\\n --ae-clear-btn-bg-hover: color-mix(in srgb, var(--ae-red) 25%, var(--ae-gray-800));\\n --ae-clear-btn-color-hover: var(--ae-red-300);\\n}\\n\"", "\uFEFFimport AeicoComponent from '../aeico-component';\nimport type { InferProps } from 'aeico';\nimport { html } from 'aeico';\nimport style from '../styles/components/dropdown-item.css';\nimport variables from '../styles/variables.css';\nimport { prop } from 'aeico';\n// Ensure ae-icon is registered when icons are used\nimport '../icon/icon';\n\n/**\n * Dropdown menu item \u2014 used as a direct child of `<ae-dropdown>`.\n *\n * Renders as a `<button>` by default, or as an `<a>` anchor when `href` is set.\n * Use `<ae-icon>` inside to add icons, and CSS `color` / `--dropdown-item-color`\n * to apply danger or custom colours.\n *\n * @example\n * ```html\n * <ae-dropdown-item value=\"edit\"><ae-icon name=\"edit\"></ae-icon>Edit</ae-dropdown-item>\n * <ae-dropdown-item value=\"delete\" style=\"--dropdown-item-color:var(--color-danger)\">Delete</ae-dropdown-item>\n * <ae-dropdown-item href=\"/profile\">Profile</ae-dropdown-item>\n * ```\n */\nclass DropdownItem extends AeicoComponent {\n static tagName = 'dropdown-item';\n\n /** Value emitted in the `select` event detail on the parent dropdown. */\n @prop({ type: String })\n accessor value: string | undefined;\n\n /** Disables the item \u2014 it becomes non-interactive and visually dimmed. */\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n /**\n * When set, the item renders as an `<a>` anchor element instead of a\n * `<button>`. Useful for navigation items.\n */\n @prop({ type: String })\n accessor href: string | undefined;\n\n /**\n * When `type=\"checkbox\"`, the item behaves as a toggle: each click flips\n * `checked` and includes the new state in the `select` event detail.\n */\n @prop({ type: String })\n accessor type: 'checkbox' | undefined;\n\n /**\n * Whether the item is checked. Only meaningful when `type=\"checkbox\"`.\n * Reflects as the `checked` attribute.\n */\n @prop({ type: Boolean })\n accessor checked: boolean = false;\n\n /**\n * Marks the item as the currently active/selected option (e.g. current route,\n * current sort order). Purely visual \u2014 applies a highlighted background and\n * accent colour.\n */\n @prop({ type: Boolean })\n accessor active: boolean = false;\n\n protected static styles = [variables, style];\n\n connectedCallback() {\n super.connectedCallback();\n this.listen('click', this._handleClick);\n this.setAttribute('role', 'menuitem');\n }\n\n private _handleClick = (e: Event): void => {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n\n return;\n }\n if (this.type === 'checkbox') {\n this.checked = !this.checked;\n }\n const label = this.textContent?.trim() ?? '';\n this.dispatchEvent(\n new CustomEvent('_item-select', {\n bubbles: true,\n composed: true,\n detail: { value: this.value ?? '', label, checked: this.checked },\n }),\n );\n };\n\n protected render() {\n const isCheckbox = this.type === 'checkbox';\n const sharedProps = {\n part: 'item',\n className: 'item',\n 'aria-checked': isCheckbox ? String(this.checked) : undefined,\n };\n return html(({ button, a, span, slot }) => {\n const children = () => {\n if (isCheckbox) span({ className: 'check-indicator', 'aria-hidden': 'true' });\n slot();\n };\n if (this.href) {\n a(\n {\n ...sharedProps,\n href: this.disabled ? undefined : this.href,\n 'aria-disabled': this.disabled || undefined,\n },\n children,\n );\n } else {\n button(\n {\n ...sharedProps,\n type: 'button',\n disabled: this.disabled,\n },\n children,\n );\n }\n });\n }\n}\n\nDropdownItem.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-dropdown-item': DropdownItem;\n }\n}\n\nexport default DropdownItem;\nexport type DropdownItemProps = InferProps<typeof DropdownItem>;\n", "export default \":host {\\n display: block;\\n\\n --dropdown-item-padding: 0.5rem 0.875rem;\\n --dropdown-item-bg: transparent;\\n --dropdown-item-bg-hover: var(--ae-surface-raised, rgba(0, 0, 0, 0.05));\\n --dropdown-item-bg-active: var(--ae-surface-raised-active, rgba(0, 0, 0, 0.1));\\n --dropdown-item-color: var(--ae-color-text-main, inherit);\\n --dropdown-item-color-disabled: var(--ae-color-text-disabled, rgba(0, 0, 0, 0.35));\\n --dropdown-item-font-size: 0.9375rem;\\n --dropdown-item-gap: 0.5rem;\\n --dropdown-item-transition: background 0.1s;\\n}\\n\\n.item {\\n display: flex;\\n align-items: center;\\n gap: var(--dropdown-item-gap);\\n width: 100%;\\n padding: var(--dropdown-item-padding);\\n font-size: var(--dropdown-item-font-size);\\n font-family: inherit;\\n color: var(--dropdown-item-color);\\n background: var(--dropdown-item-bg);\\n border: none;\\n border-radius: var(--ae-border-radius, var(--ae-radius-sm));\\n text-align: left;\\n text-decoration: none;\\n cursor: pointer;\\n user-select: none;\\n white-space: nowrap;\\n box-sizing: border-box;\\n transition: var(--dropdown-item-transition);\\n outline: none;\\n}\\n\\n.item:hover:not(:disabled):not([aria-disabled=\\\"true\\\"]) {\\n background: var(--dropdown-item-bg-hover);\\n}\\n\\n.item:active:not(:disabled):not([aria-disabled=\\\"true\\\"]) {\\n background: var(--dropdown-item-bg-active);\\n}\\n\\n.item:focus-visible {\\n background: var(--dropdown-item-bg-hover);\\n outline: 2px solid var(--ae-color-primary, #0e639c);\\n outline-offset: -2px;\\n}\\n\\n/* disabled */\\n:host([disabled]) .item,\\n.item:disabled {\\n color: var(--dropdown-item-color-disabled);\\n cursor: default;\\n pointer-events: none;\\n}\\n\\n/* Active item \u2014 current selection, current route, etc. */\\n:host([active]) .item {\\n background: var(--dropdown-item-bg-selected, rgba(0, 0, 0, 0.06));\\n color: var(--dropdown-item-color-active, var(--ae-color-primary, #0e639c));\\n font-weight: 500;\\n}\\n\\n/* Checkbox mode \u2014 fixed-width indicator column */\\n.check-indicator {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n flex-shrink: 0;\\n}\\n\\n/* CSS-drawn checkmark (border trick) */\\n.check-indicator::after {\\n content: '';\\n display: block;\\n width: 0.3em;\\n height: 0.55em;\\n border-right: 0.125em solid currentColor;\\n border-bottom: 0.125em solid currentColor;\\n transform: rotate(45deg) translateY(-0.1em);\\n opacity: 0;\\n transition: opacity 0.1s;\\n}\\n\\n:host([checked]) .check-indicator::after {\\n opacity: 1;\\n}\\n\"", "\uFEFFimport type { InferProps, Props } from 'aeico';\nimport { SVG_NS } from '../utils';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport styleVariables from '../styles/variables.css';\nimport sizeCSS from '../styles/size.css';\nimport colorCSS from '../styles/color.css';\nimport style from '../styles/components/icon.css';\nimport type { IconSize, IconColor } from './defines';\nimport { defaultViewBox } from './defines';\nimport IconRegistry from './registry';\nimport './built-in-icons';\n\nclass Icon extends AeicoComponent {\n static tagName = 'icon';\n\n static props: Props = {\n name: { type: String },\n size: { type: String },\n color: { type: String },\n stroke: { type: Boolean },\n strokeWidth: { type: Number },\n };\n\n declare name?: string;\n declare size?: IconSize;\n declare color?: IconColor;\n declare stroke?: boolean;\n declare strokeWidth?: number;\n\n protected static styles = [styleVariables, sizeCSS, colorCSS, style];\n\n protected render() {\n const def = this.name ? IconRegistry.get(this.name) : undefined;\n\n // Numeric size: set font-size directly (string sizes are handled by size.css)\n const numericSize = Number(this.size);\n if (this.size !== undefined && !isNaN(numericSize) && numericSize > 0) {\n this.style.setProperty('font-size', `${numericSize}px`);\n } else {\n this.style.removeProperty('font-size');\n }\n\n if (!def) return;\n\n const { paths } = def;\n const isMultiPath = Array.isArray(paths);\n\n // Stroke CSS variables only apply in single-path mode (component props)\n if (!isMultiPath) {\n const useStroke =\n this.stroke ?? (this.strokeWidth !== undefined ? true : (def.stroke ?? false));\n const useStrokeWidth = this.strokeWidth ?? def.strokeWidth ?? 2;\n\n if (useStroke) {\n this.style.setProperty('--icon-fill', 'none');\n this.style.setProperty('--icon-stroke', 'currentColor');\n this.style.setProperty('--icon-stroke-width', String(useStrokeWidth));\n } else {\n this.style.removeProperty('--icon-fill');\n this.style.removeProperty('--icon-stroke');\n this.style.removeProperty('--icon-stroke-width');\n }\n } else {\n this.style.removeProperty('--icon-fill');\n this.style.removeProperty('--icon-stroke');\n this.style.removeProperty('--icon-stroke-width');\n }\n\n return html(({ svg, path }) => {\n svg(\n {\n className: 'icon-svg',\n viewBox: def.viewBox ?? defaultViewBox,\n 'aria-hidden': 'true',\n xmlns: SVG_NS,\n },\n () => {\n if (typeof paths === 'string') {\n path({ d: paths });\n } else {\n for (const p of paths) {\n const attrs: Record<string, unknown> = { d: p.d };\n if (p.fill) attrs.style = { fill: p.fill };\n path(attrs);\n }\n }\n },\n );\n });\n }\n}\n\nIcon.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-icon': Icon;\n }\n}\n\nexport default Icon;\nexport type IconProps = InferProps<typeof Icon>;\n", "export default \":host([size=\\\"xs\\\"]) { font-size: var(--ae-size-xs); }\\n:host([size=\\\"sm\\\"]) { font-size: var(--ae-size-s); }\\n:host([size=\\\"md\\\"]) { font-size: var(--ae-size-m); }\\n:host([size=\\\"lg\\\"]) { font-size: var(--ae-size-l); }\\n:host([size=\\\"xl\\\"]) { font-size: var(--ae-size-xl); }\\n:host([size=\\\"3xs\\\"]) { font-size: var(--ae-size-3xs); }\\n:host([size=\\\"2xs\\\"]) { font-size: var(--ae-size-2xs); }\\n\"", "export default \":host {\\n --ae-color-solid: var(--ae-color-gray);\\n --ae-color-solid-hover: color-mix(in srgb, var(--ae-color-solid), var(--ae-color-mix-hover));\\n --ae-color-solid-active: color-mix(in srgb, var(--ae-color-solid), var(--ae-color-mix-active));\\n --ae-color-on-solid: var(--ae-color-text-main);\\n --ae-color-border: var(--ae-color-gray);\\n --ae-color-border-hover: color-mix(in srgb, var(--ae-color-border), var(--ae-color-mix-hover));\\n --ae-color-accent: var(--ae-color-text-muted);\\n --ae-color-accent-hover: var(--ae-color-text-main);\\n --ae-color-subtle: var(--ae-border-subtle);\\n --ae-color-subtle-hover: var(--ae-border-default);\\n --ae-color-bg-subtle: var(--ae-border-subtle);\\n --ae-color-text-subtle: var(--ae-color-text-muted);\\n --ae-color-border-subtle: var(--ae-border-default);\\n}\\n\\n:host([color=\\\"primary\\\"]) {\\n --ae-color-solid: var(--ae-color-primary);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-color-primary);\\n --ae-color-accent: var(--ae-color-text-link);\\n --ae-color-accent-hover: var(--ae-color-text-link-hover);\\n --ae-color-subtle: var(--ae-color-primary-bg-subtle);\\n --ae-color-subtle-hover: rgb(from var(--ae-blue) r g b / 0.15);\\n --ae-color-bg-subtle: var(--ae-color-primary-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-primary-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-primary-border-subtle);\\n}\\n\\n:host([color=\\\"secondary\\\"]) {\\n --ae-color-solid: var(--ae-color-secondary);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-color-secondary-hover);\\n --ae-color-accent: var(--ae-color-secondary-text-emphasis);\\n --ae-color-accent-hover: var(--ae-color-text-main);\\n --ae-color-subtle: rgb(from var(--ae-slate) r g b / 0.06);\\n --ae-color-subtle-hover: rgb(from var(--ae-slate) r g b / 0.12);\\n --ae-color-bg-subtle: var(--ae-color-secondary-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-secondary-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-secondary-border-subtle);\\n}\\n\\n:host([color=\\\"success\\\"]) {\\n --ae-color-solid: var(--ae-color-success);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-color-success);\\n --ae-color-accent: var(--ae-color-success-text-emphasis);\\n --ae-color-accent-hover: var(--ae-color-success-hover);\\n --ae-color-subtle: var(--ae-color-success-bg-subtle);\\n --ae-color-subtle-hover: rgb(from var(--ae-green) r g b / 0.15);\\n --ae-color-bg-subtle: var(--ae-color-success-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-success-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-success-border-subtle);\\n}\\n\\n:host([color=\\\"danger\\\"]) {\\n --ae-color-solid: var(--ae-color-danger);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-color-danger);\\n --ae-color-accent: var(--ae-color-danger-text-emphasis);\\n --ae-color-accent-hover: var(--ae-color-danger-hover);\\n --ae-color-subtle: var(--ae-color-danger-bg-subtle);\\n --ae-color-subtle-hover: rgb(from var(--ae-red) r g b / 0.15);\\n --ae-color-bg-subtle: var(--ae-color-danger-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-danger-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-danger-border-subtle);\\n}\\n\\n:host([color=\\\"warning\\\"]) {\\n --ae-color-solid: var(--ae-color-warning);\\n --ae-color-on-solid: var(--ae-gray-900);\\n --ae-color-border: var(--ae-color-warning);\\n --ae-color-accent: var(--ae-color-warning-text-emphasis);\\n --ae-color-accent-hover: var(--ae-color-warning-hover);\\n --ae-color-subtle: var(--ae-color-warning-bg-subtle);\\n --ae-color-subtle-hover: rgb(from var(--ae-yellow) r g b / 0.15);\\n --ae-color-bg-subtle: var(--ae-color-warning-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-warning-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-warning-border-subtle);\\n}\\n\\n:host([color=\\\"info\\\"]) {\\n --ae-color-solid: var(--ae-color-info);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-color-info);\\n --ae-color-accent: var(--ae-color-info-text-emphasis);\\n --ae-color-accent-hover: var(--ae-color-info-hover);\\n --ae-color-subtle: var(--ae-color-info-bg-subtle);\\n --ae-color-subtle-hover: rgb(from var(--ae-cyan) r g b / 0.15);\\n --ae-color-bg-subtle: var(--ae-color-info-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-info-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-info-border-subtle);\\n}\\n\\n:host([color=\\\"light\\\"]) {\\n --ae-color-solid: var(--ae-light);\\n --ae-color-on-solid: var(--ae-gray-900);\\n --ae-color-border: var(--ae-border-hover);\\n --ae-color-subtle: var(--ae-color-light-bg-subtle);\\n --ae-color-subtle-hover: var(--ae-color-light-border-subtle);\\n --ae-color-bg-subtle: var(--ae-color-light-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-text-muted);\\n --ae-color-border-subtle: var(--ae-color-light-border-subtle);\\n}\\n\\n:host([color=\\\"dark\\\"]) {\\n --ae-color-solid: var(--ae-dark-500);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-dark-500);\\n --ae-color-accent: var(--ae-color-text-main);\\n --ae-color-accent-hover: var(--ae-color-text-main);\\n --ae-color-subtle: var(--ae-color-dark-bg-subtle);\\n --ae-color-subtle-hover: var(--ae-color-dark-border-subtle);\\n --ae-color-bg-subtle: var(--ae-color-dark-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-text-main);\\n --ae-color-border-subtle: var(--ae-color-dark-border-subtle);\\n}\\n\"", "export default \":host {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 20px;\\n width: 1em;\\n height: 1em;\\n color: inherit;\\n flex-shrink: 0;\\n line-height: 0;\\n vertical-align: middle;\\n}\\n\\n:host([color]) {\\n color: var(--ae-color-solid);\\n}\\n\\n.icon-svg {\\n display: block;\\n width: 100%;\\n height: 100%;\\n fill: var(--icon-fill, currentColor);\\n stroke: var(--icon-stroke, none);\\n stroke-width: var(--icon-stroke-width, 2);\\n stroke-linecap: var(--icon-stroke-linecap, round);\\n stroke-linejoin: var(--icon-stroke-linejoin, round);\\n pointer-events: none;\\n overflow: visible;\\n}\\n\"", "export type IconSize = '3xs' | '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number;\n\nexport type IconColor =\n | 'default'\n | 'primary'\n | 'secondary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info';\n\nexport interface IconPathDef {\n d: string;\n fill?: string;\n stroke?: boolean;\n strokeWidth?: number;\n}\n\nexport interface IconDefinition {\n paths: string | IconPathDef[];\n viewBox?: string;\n stroke?: boolean;\n strokeWidth?: number;\n}\n\nexport const defaultViewBox = '0 0 24 24';\n\nexport type IconRegistryData = Record<string, string | IconDefinition>;\n", "import { IconDefinition, IconRegistryData, defaultViewBox } from './defines';\n\nclass IconRegistry {\n private static _icons: Map<string, IconDefinition> = new Map();\n /** Names registered via addBuiltIn \u2014 can be overridden by user add() calls */\n private static _builtInKeys: Set<string> = new Set();\n\n /** Register user icons. Always takes priority over built-in icons. */\n static add(icons: IconRegistryData) {\n for (const [name, data] of Object.entries(icons)) {\n if (typeof data === 'string') {\n this._icons.set(name, { paths: data, viewBox: defaultViewBox });\n } else {\n this._icons.set(name, data);\n }\n // Mark as user-defined (removes built-in status)\n this._builtInKeys.delete(name);\n }\n }\n\n /**\n * Register built-in icons provided by the library.\n * A built-in icon will NOT overwrite an icon already registered by the user.\n */\n static addBuiltIn(icons: IconRegistryData) {\n for (const [name, data] of Object.entries(icons)) {\n // Skip if the user has already registered this icon\n if (this._icons.has(name) && !this._builtInKeys.has(name)) continue;\n if (typeof data === 'string') {\n this._icons.set(name, { paths: data, viewBox: defaultViewBox });\n } else {\n this._icons.set(name, data);\n }\n this._builtInKeys.add(name);\n }\n }\n\n static get(name: string): IconDefinition | undefined {\n return this._icons.get(name);\n }\n\n static has(name: string): boolean {\n return this._icons.has(name);\n }\n}\n\nexport default IconRegistry;\n", "/**\n * Built-in system icons used internally by aeico components.\n * These are pre-registered so components work out of the box.\n * Users can override any of them by calling IconRegistry.add({ 'name': '...' }).\n *\n * All paths use the Material Design 24\u00D724 viewBox.\n */\nimport IconRegistry from './registry';\n\nIconRegistry.addBuiltIn({\n copy: 'M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z',\n check: 'M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z',\n 'chevron-left': 'M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z',\n 'chevron-right': 'M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z',\n 'chevron-up': 'M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z',\n 'chevron-down': 'M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z',\n 'chevrons-left': 'M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z',\n 'chevrons-right': 'M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z',\n close:\n 'M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z',\n});\n", "\uFEFFimport AeicoComponent from '../aeico-component';\nimport type { InferProps } from 'aeico';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\nimport type { ButtonColor, ButtonSize, ButtonVariant } from '../button/defines';\nimport type { DropdownPlacement } from './defines';\nimport type Dropdown from './dropdown';\nimport './dropdown';\nimport '../button/button';\n\n/**\n * DropdownButton \u2014 a pre-composed trigger + dropdown panel.\n *\n * Renders an `ae-button`-styled trigger with a built-in chevron,\n * and a floating panel for `<ae-dropdown-item>` children.\n * Accepts the same `variant`, `color`, `size`, and `disabled` props\n * as `ae-button`, making it a drop-in inside `ae-button-group`.\n *\n * @example\n * ```html\n * <ae-dropdown-button variant=\"outlined\" color=\"primary\">\n * Actions\n * <ae-dropdown-item value=\"edit\">Edit</ae-dropdown-item>\n * <ae-dropdown-item value=\"delete\">Delete</ae-dropdown-item>\n * </ae-dropdown-button>\n *\n * <!-- Inside ae-button-group -->\n * <ae-button-group compact color=\"primary\">\n * <ae-button>Save</ae-button>\n * <ae-dropdown-button placement=\"bottom-end\">\n * <ae-dropdown-item value=\"draft\">Save as draft</ae-dropdown-item>\n * <ae-dropdown-item value=\"template\">Save as template</ae-dropdown-item>\n * </ae-dropdown-button>\n * </ae-button-group>\n * ```\n *\n * Emits:\n * - `open` \u2014 when the panel opens\n * - `close` \u2014 when the panel closes\n * - `select` \u2014 `{ detail: { value, label } }` when a menu item is selected\n */\nclass DropdownButton extends AeicoComponent {\n static tagName = 'dropdown-button';\n\n // ae-button and ae-dropdown each carry their own shadow DOM styles.\n // Only the host display is set here so button-group compact layout works.\n protected static styles = [\n ':host { display: inline-block; }',\n '.caret { display: inline-block; width: 0; height: 0; margin-left: 0.3em; vertical-align: 0.2em; flex-shrink: 0; }',\n '.caret--bottom { border-top: 0.35em solid; border-right: 0.35em solid transparent; border-left: 0.35em solid transparent; }',\n '.caret--top { border-bottom: 0.35em solid; border-right: 0.35em solid transparent; border-left: 0.35em solid transparent; }',\n '.caret--right { border-left: 0.35em solid; border-top: 0.35em solid transparent; border-bottom: 0.35em solid transparent; }',\n '.caret--left { border-right: 0.35em solid; border-top: 0.35em solid transparent; border-bottom: 0.35em solid transparent; }',\n ];\n\n @prop({ type: String })\n accessor variant: ButtonVariant = 'filled';\n\n @prop({ type: String })\n accessor color: ButtonColor = 'default';\n\n @prop({ type: String })\n accessor size: ButtonSize = 'md';\n\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n @prop({ type: String })\n accessor placement: DropdownPlacement = 'bottom-start';\n\n @prop({ type: Boolean })\n accessor closeOnSelect: boolean = true;\n\n private _dropdownEl: Dropdown | null = null;\n\n show(): void {\n if (this.disabled) return;\n this._dropdownEl?.show();\n }\n hide(): void {\n this._dropdownEl?.hide();\n }\n toggle(): void {\n if (this.disabled) return;\n this._dropdownEl?.toggle();\n }\n\n get open(): boolean {\n return this._dropdownEl?.open ?? false;\n }\n\n protected render() {\n const dir = this.placement.split('-')[0];\n return html(({ aeDropdown, aeButton, slot, span }) => {\n this._dropdownEl = aeDropdown(\n {\n placement: this.placement,\n 'close-on-select': this.closeOnSelect,\n },\n () => {\n aeButton(\n {\n slot: 'trigger',\n variant: this.variant,\n color: this.color,\n size: this.size,\n disabled: this.disabled || undefined,\n },\n () => {\n slot({ name: 'label' });\n span({ className: `caret caret--${dir}`, 'aria-hidden': 'true' });\n },\n );\n slot();\n },\n );\n });\n }\n}\n\nDropdownButton.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-dropdown-button': DropdownButton;\n }\n}\n\nexport default DropdownButton;\nexport type DropdownButtonProps = InferProps<typeof DropdownButton>;\n", "export default \":host {\\n display: inline-block;\\n}\\n\\nbutton {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 6px;\\n font-family: inherit;\\n font-weight: 400;\\n text-align: center;\\n white-space: nowrap;\\n vertical-align: middle;\\n user-select: none;\\n cursor: pointer;\\n transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\\n outline: none;\\n position: relative;\\n padding: 0.429em 1.071em;\\n font-size: 1em;\\n line-height: 1.5;\\n border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-sm)) var(--_btn-r-tr, var(--ae-radius-sm)) var(--_btn-r-br, var(--ae-radius-sm)) var(--_btn-r-bl, var(--ae-radius-sm)));\\n min-width: 4.571em;\\n height: 2.286em;\\n width: 100%;\\n\\n background: var(--ae-color-solid);\\n border: 1px solid var(--ae-color-solid);\\n color: var(--ae-color-on-solid);\\n}\\n\\nbutton:focus { outline: none; }\\nbutton:active { transform: translateY(1px); }\\n\\nbutton:hover:not(:disabled) {\\n background: var(--ae-color-solid-hover);\\n border-color: var(--ae-color-border-hover);\\n color: var(--ae-color-on-solid-hover, var(--ae-color-on-solid));\\n}\\n\\nbutton:active:not(:disabled) { background: var(--ae-color-solid-active); }\\n\\nbutton:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n\\n:host([size=\\\"xs\\\"]) button { border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-xs)) var(--_btn-r-tr, var(--ae-radius-xs)) var(--_btn-r-br, var(--ae-radius-xs)) var(--_btn-r-bl, var(--ae-radius-xs))); }\\n:host([size=\\\"sm\\\"]) button { border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-xs)) var(--_btn-r-tr, var(--ae-radius-xs)) var(--_btn-r-br, var(--ae-radius-xs)) var(--_btn-r-bl, var(--ae-radius-xs))); }\\n\\n/* --- Variants --- */\\n\\n:host([variant=\\\"outlined\\\"]) button {\\n background: transparent;\\n border-color: var(--ae-color-border);\\n color: var(--ae-color-accent);\\n}\\n\\n:host([variant=\\\"outlined\\\"]) button:hover:not(:disabled) {\\n background: var(--ae-color-subtle);\\n border-color: var(--ae-color-border-hover);\\n color: var(--ae-color-accent-hover);\\n}\\n\\n:host([variant=\\\"outlined\\\"]) button:active:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n}\\n\\n:host([variant=\\\"subtle\\\"]) button {\\n background: var(--ae-color-subtle);\\n border-color: transparent;\\n color: var(--ae-color-accent);\\n}\\n\\n:host([variant=\\\"subtle\\\"]) button:hover:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n color: var(--ae-color-accent-hover);\\n}\\n\\n:host([variant=\\\"subtle\\\"]) button:active:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n}\\n\\n:host([variant=\\\"faint\\\"]) button {\\n background: var(--ae-color-subtle);\\n border-color: var(--ae-color-border);\\n color: var(--ae-color-accent);\\n}\\n\\n:host([variant=\\\"faint\\\"]) button:hover:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n border-color: var(--ae-color-border-hover);\\n color: var(--ae-color-accent-hover);\\n}\\n\\n:host([variant=\\\"faint\\\"]) button:active:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n}\\n\\n:host([variant=\\\"text\\\"]) button {\\n background: transparent;\\n border-color: transparent;\\n color: var(--ae-color-accent);\\n min-width: auto;\\n padding-left: 4px;\\n padding-right: 4px;\\n}\\n\\n:host([variant=\\\"text\\\"]) button:hover:not(:disabled) {\\n background: var(--ae-color-subtle);\\n color: var(--ae-color-accent-hover);\\n}\\n\\n:host([variant=\\\"text\\\"]) button:active:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n}\\n\\n/* Icon-only: single ae-icon child \u2192 square compact layout */\\n:host([icon-only]) {\\n display: inline-flex;\\n}\\n\\n:host([icon-only]:not([size])) {\\n font-size: var(--ae-size-m);\\n}\\n\\n:host([icon-only]) button {\\n padding: 0;\\n min-width: auto;\\n width: 2.286em;\\n height: 2.286em;\\n line-height: 1;\\n}\\n\\n:host([icon-only]) ::slotted(ae-icon) {\\n font-size: 1.5em;\\n}\\n\\n:host([active]) button {\\n background: var(--ae-color-solid-active);\\n border-color: var(--ae-color-border-hover);\\n color: var(--ae-color-on-solid-hover, var(--ae-color-on-solid));\\n}\\n\\n.btn-icon {\\n padding: 0;\\n min-width: auto;\\n width: 2.286em;\\n height: 2.286em;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--ae-radius-sm);\\n}\\n\\n.btn-icon.btn-lg {\\n width: 2.857em;\\n height: 2.857em;\\n}\\n\\n.btn-circle {\\n border-radius: var(--ae-radius-circle);\\n}\\n\\n:host([block]) {\\n display: block;\\n}\\n\\nbutton.btn-loading {\\n position: relative;\\n pointer-events: none;\\n color: transparent;\\n}\\n\\nbutton.btn-loading::before {\\n content: '';\\n position: absolute;\\n width: 1em;\\n height: 1em;\\n border: 2px solid currentColor;\\n border-top-color: transparent;\\n border-radius: var(--ae-radius-circle);\\n animation: btn-spin 0.6s linear infinite;\\n color: currentColor;\\n opacity: 0.8;\\n}\\n\\n@keyframes btn-spin {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n\\n.btn-icon-left {\\n margin-right: -2px;\\n}\\n\\n.btn-icon-right {\\n margin-left: -2px;\\n}\\n\\n\"", "\uFEFFimport type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css';\nimport sizeCSS from '../styles/size.css';\nimport colorCSS from '../styles/color.css';\nimport buttonStyle from '../styles/components/button.css';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { ButtonColor, ButtonSize, ButtonVariant } from './defines';\nimport { prop } from 'aeico';\n\n/**\n * Button Component\n *\n * A customizable button component with multiple variants and sizes.\n * Supports theme and internationalization through mixins.\n *\n * @example\n * ```typescript\n * // Using the static create method\n * const button = Button.create({\n * variant: 'primary',\n * size: 'md'\n * })\n * ```\n *\n * @example\n * ```html\n * <!-- Using as Web Component -->\n * <ae-button variant=\"primary\" size=\"md\">Save</ae-button>\n * <ae-button variant=\"danger\" size=\"sm\">Delete</ae-button>\n * <ae-button variant=\"subtle\">Cancel</ae-button>\n * ```\n */\nclass Button extends AeicoComponent {\n protected static styles = [styleVariables, sizeCSS, colorCSS, buttonStyle];\n\n @prop({ type: String })\n color?: ButtonColor;\n\n @prop({ type: String })\n variant?: ButtonVariant;\n\n @prop({ type: String })\n size?: ButtonSize;\n\n @prop({ type: Boolean })\n disabled?: boolean;\n\n @prop({ type: String })\n type?: 'button' | 'submit' | 'reset';\n\n @prop({ type: Boolean })\n active?: boolean;\n\n @prop({ type: Boolean })\n block?: boolean;\n\n private _buttonElement: HTMLButtonElement | null = null;\n private _slotElement: HTMLSlotElement | null = null;\n private _autoAriaLabel = false;\n\n protected onMounted() {\n this._handleSlotChange();\n }\n\n private _handleSlotChange = () => {\n const nodes = this._slotElement?.assignedNodes() ?? [];\n // Icon-only: exactly one element (ae-icon) and no meaningful text nodes\n const elements = nodes.filter((n): n is Element => n.nodeType === Node.ELEMENT_NODE);\n const hasText = nodes.some(\n (n) => n.nodeType === Node.TEXT_NODE && n.textContent!.trim() !== '',\n );\n const isIconOnly =\n !hasText && elements.length === 1 && elements[0].tagName.toLowerCase() === 'ae-icon';\n\n if (isIconOnly) {\n this.setAttribute('icon-only', '');\n if (!this.hasAttribute('aria-label') || this._autoAriaLabel) {\n this.setAttribute('aria-label', elements[0].getAttribute('name') ?? '');\n this._autoAriaLabel = true;\n }\n } else {\n this.removeAttribute('icon-only');\n if (this._autoAriaLabel) {\n this.removeAttribute('aria-label');\n this._autoAriaLabel = false;\n }\n }\n };\n\n protected render() {\n return html(({ button, slot }) => {\n this._buttonElement = button(\n {\n type: this.type || 'button',\n disabled: this.disabled,\n part: 'button',\n 'aria-pressed': this.active,\n 'aria-disabled': this.disabled,\n },\n () => {\n this._slotElement = slot({ '@slotchange': this._handleSlotChange });\n },\n );\n });\n }\n\n /**\n * Programmatically click the button\n */\n click() {\n if (!this.disabled && this._buttonElement) {\n this._buttonElement.click();\n }\n }\n\n /**\n * Focus the button\n */\n focus() {\n if (this._buttonElement) {\n this._buttonElement.focus();\n }\n }\n\n /**\n * Blur the button\n */\n blur() {\n if (this._buttonElement) {\n this._buttonElement.blur();\n }\n }\n}\n\nButton.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-button': Button;\n }\n}\n\nexport default Button;\nexport type ButtonProps = InferProps<typeof Button>;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAC,SAAS,oBAAoB;;;ACAvB,IAAM,SAAS;AAEf,SAAS,QAAQ,KAAqB;AAC3C,QAAM,UAAU,IAAI,QAAQ,WAAW,EAAE;AAEzC,SAAO,QAAQ,QAAQ,mBAAmB,OAAO,EAAE,YAAY;AACjE;;;ADHA,IAAM,kBAAkB;AAKxB,IAAM,iBAAN,cAA6B,aAAa;AAAA,EACxC,OAAO,SAAS,MAAe;AAC7B,UAAM,UAAU,QAAQ,GAAG,eAAe,IAAI,KAAK,WAAW,QAAQ,KAAK,IAAI,CAAC;AAEhF,UAAM,SAAS,OAAO;AAAA,EACxB;AACF;AAEA,IAAO,0BAAQ;;;AEdf,SAAS,QAAAA,aAAY;AACrB,SAAS,QAAAC,aAAY;;;ACHrB,IAAO,mBAAQ;;;ACAf,IAAO,oBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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",
3
+ "sources": ["../src/aeico-component.ts", "../src/dropdown/dropdown.ts", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/dropdown.css", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/variables.css", "../src/dropdown/dropdown-item.ts", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/dropdown-item.css", "../src/utils.ts", "../src/icon/icon.ts", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/size.css", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/color.css", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/icon.css", "../src/icon/defines.ts", "../src/icon/registry.ts", "../src/icon/built-in-icons.ts", "../src/dropdown/dropdown-button.ts", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/button.css", "../src/button/button.ts"],
4
+ "sourcesContent": ["import { AeicoElement } from 'aeico';\n\nconst TAG_NAME_PREFIX = 'ae';\n\n/**\n * AeicoComponent is the base class for all built-in Aeico components.\n */\nclass AeicoComponent extends AeicoElement {\n static define(name: string) {\n const prefix = `${TAG_NAME_PREFIX}-`;\n\n const tagName = name.startsWith(prefix) ? name : `${prefix}${name}`;\n\n super.define(tagName);\n }\n}\n\nexport default AeicoComponent;\n", "import AeicoComponent from '../aeico-component';\nimport type { InferProps } from 'aeico';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\nimport style from '../styles/components/dropdown.css';\nimport variables from '../styles/variables.css';\nimport type { DropdownPlacement } from './defines';\n// Ensure ae-dropdown-item is registered when this module is used\nimport './dropdown-item';\n\n/**\n * Dropdown component - renders a floating menu panel anchored to a trigger slot.\n *\n * The trigger is provided via `slot=\"trigger\"` (typically an `<ae-button>`).\n * Menu items are provided as `<ae-dropdown-item>` default-slot children.\n *\n * Emits:\n * - `open` - when the panel opens\n * - `close` - when the panel closes\n * - `select` - `{ detail: { value, label } }` when a menu item is clicked\n *\n * @example\n * ```html\n * <ae-dropdown>\n * <ae-button slot=\"trigger\">Actions</ae-button>\n * <ae-dropdown-item value=\"edit\" icon=\"edit\">Edit</ae-dropdown-item>\n * <ae-dropdown-item value=\"delete\" danger icon=\"trash\">Delete</ae-dropdown-item>\n * </ae-dropdown>\n * ```\n *\n * @example\n * ```html\n * <!-- Inside ae-navbar -->\n * <ae-navbar>\n * <a slot=\"brand\" href=\"/\">MyApp</a>\n * <ae-dropdown slot=\"end\">\n * <ae-button slot=\"trigger\" variant=\"outlined\" size=\"sm\">User</ae-button>\n * <ae-dropdown-item href=\"/profile\" icon=\"user\">Profile</ae-dropdown-item>\n * <ae-dropdown-item value=\"logout\" danger>Sign out</ae-dropdown-item>\n * </ae-dropdown>\n * </ae-navbar>\n * ```\n */\nclass Dropdown extends AeicoComponent {\n protected static styles = [variables, style];\n\n /**\n * Position of the panel relative to the trigger.\n * Defaults to `'bottom-start'` (left-aligned, below trigger).\n */\n @prop({ type: String })\n accessor placement: DropdownPlacement = 'bottom-start';\n\n /**\n * Whether the dropdown panel is visible. Reflects as the `open` attribute.\n * Can be used for controlled open/close state.\n */\n @prop({ type: Boolean })\n accessor open: boolean = false;\n\n /**\n * When `true` (default), clicking a menu item automatically closes the panel.\n */\n @prop({ type: Boolean })\n accessor closeOnSelect: boolean = true;\n\n /** Disables the trigger and prevents opening. */\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n /**\n * Optional label text. When set, `ae-dropdown` renders its own trigger button\n * in the shadow DOM (no `slot=\"trigger\"` needed). Inherits `--ae-navbar-link-*`\n * CSS variables so it automatically matches navbar link styles.\n */\n @prop({ type: String })\n accessor label: string = '';\n\n private _outsideClickHandler: ((e: MouseEvent) => void) | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n\n this.listen('_item-select', this._handleItemSelect as EventListener);\n this.listen('keydown', this._handleKeydown as EventListener);\n\n this._outsideClickHandler = (e: MouseEvent) => {\n if (!this.open) return;\n const path = e.composedPath();\n if (!path.includes(this)) {\n this._closePanel();\n }\n };\n document.addEventListener('click', this._outsideClickHandler);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._outsideClickHandler) {\n document.removeEventListener('click', this._outsideClickHandler);\n this._outsideClickHandler = null;\n }\n }\n\n /** Opens the dropdown panel. */\n show(): void {\n if (this.disabled || this.open) return;\n this.open = true;\n this.emit('open');\n }\n\n /** Closes the dropdown panel. */\n hide(): void {\n if (!this.open) return;\n this.open = false;\n this.emit('close');\n }\n\n /** Toggles the dropdown panel open/closed. */\n toggle(): void {\n if (this.open) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n private _closePanel(): void {\n if (this.open) this.hide();\n }\n\n // Called via declarative @click on the trigger-wrapper div inside the shadow DOM.\n // Events from slotted trigger content bubble through the shadow DOM slot path,\n // so this fires for trigger clicks only - not for panel item clicks.\n private _handleTriggerClick = (): void => {\n this.toggle();\n };\n\n private _handleItemSelect = (e: CustomEvent): void => {\n this.emit('select', { detail: e.detail });\n if (this.closeOnSelect) {\n this._closePanel();\n }\n };\n\n private _handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n e.stopPropagation();\n this._closePanel();\n }\n };\n\n protected render() {\n const placementClass = `placement-${this.placement}`;\n const hasLabel = !!this.label;\n const dir = this.placement.split('-')[0];\n return html(({ div, slot, button, span }) => {\n div(\n {\n className: 'trigger-wrapper',\n 'aria-haspopup': 'menu',\n 'aria-expanded': String(this.open),\n '@click': this.disabled ? undefined : this._handleTriggerClick,\n },\n () => {\n if (hasLabel) {\n button(\n {\n className: 'trigger-label',\n type: 'button',\n disabled: this.disabled || undefined,\n },\n () => {\n span({ text: this.label });\n span({\n className: `ae-dropdown-arrow ae-dropdown-arrow--${dir}`,\n 'aria-hidden': 'true',\n });\n },\n );\n } else {\n slot({ name: 'trigger' });\n }\n },\n );\n div(\n {\n part: 'panel',\n className: { panel: true, open: this.open, [placementClass]: true },\n role: 'menu',\n },\n () => {\n slot();\n },\n );\n });\n }\n}\n\nDropdown.define('dropdown');\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-dropdown': Dropdown;\n }\n}\n\nexport default Dropdown;\nexport type DropdownProps = InferProps<typeof Dropdown>;\n", "export default \":host {\\n display: inline-block;\\n position: relative;\\n\\n --dropdown-z-index: 1000;\\n --dropdown-bg: var(--ae-surface-overlay, #fff);\\n --dropdown-border: 1px solid var(--ae-color-border, rgba(0, 0, 0, 0.12));\\n --dropdown-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\\n --dropdown-min-width: 10rem;\\n --dropdown-padding: 0.25rem 0;\\n}\\n\\n.trigger-wrapper {\\n display: flex;\\n align-items: stretch;\\n height: 100%;\\n}\\n\\n/* Internal trigger rendered when `label` prop is set.\\n Uses --dropdown-trigger-* variables. Context components (e.g. ae-navbar)\\n map their own tokens to these variables via ::slotted(ae-dropdown). */\\n.trigger-label {\\n display: inline-flex;\\n align-items: center;\\n height: var(--dropdown-trigger-height, auto);\\n padding: 0 var(--dropdown-trigger-padding-x, 0.75rem);\\n color: var(--dropdown-trigger-color, inherit);\\n background: var(--dropdown-trigger-bg, none);\\n border: none;\\n border-radius: var(--dropdown-trigger-radius, 0);\\n -webkit-appearance: none;\\n appearance: none;\\n cursor: pointer;\\n font: inherit;\\n font-size: var(--dropdown-trigger-font-size, inherit);\\n white-space: nowrap;\\n transition: color 0.15s ease, background-color 0.15s ease;\\n outline-offset: 2px;\\n}\\n\\n.trigger-label:hover {\\n color: var(--dropdown-trigger-hover-color, inherit);\\n background-color: var(--dropdown-trigger-hover-bg, transparent);\\n}\\n\\n:host([disabled]) .trigger-label {\\n opacity: 0.5;\\n cursor: not-allowed;\\n pointer-events: none;\\n}\\n\\n/* Bootstrap-style CSS border caret - shadow DOM only, no global injection needed */\\n.ae-dropdown-arrow {\\n display: inline-block;\\n width: 0;\\n height: 0;\\n margin-left: 0.3em;\\n vertical-align: 0.2em;\\n flex-shrink: 0;\\n}\\n.ae-dropdown-arrow--bottom {\\n border-top: 0.35em solid;\\n border-right: 0.35em solid transparent;\\n border-left: 0.35em solid transparent;\\n}\\n.ae-dropdown-arrow--top {\\n border-bottom: 0.35em solid;\\n border-right: 0.35em solid transparent;\\n border-left: 0.35em solid transparent;\\n}\\n.ae-dropdown-arrow--right {\\n border-left: 0.35em solid;\\n border-top: 0.35em solid transparent;\\n border-bottom: 0.35em solid transparent;\\n}\\n.ae-dropdown-arrow--left {\\n border-right: 0.35em solid;\\n border-top: 0.35em solid transparent;\\n border-bottom: 0.35em solid transparent;\\n}\\n\\n.panel {\\n display: none;\\n position: absolute;\\n z-index: var(--dropdown-z-index);\\n background: var(--dropdown-bg);\\n border: var(--dropdown-border);\\n border-radius: var(--ae-border-radius, var(--ae-radius-md));\\n box-shadow: var(--dropdown-shadow);\\n min-width: var(--dropdown-min-width);\\n padding: var(--dropdown-padding);\\n box-sizing: border-box;\\n /* Prevent panel from being wider than viewport */\\n max-width: calc(100vw - 16px);\\n}\\n\\n.panel.open {\\n display: block;\\n}\\n\\n/* placement variants */\\n.panel.placement-bottom-start {\\n top: 100%;\\n left: 0;\\n margin-top: 4px;\\n}\\n\\n.panel.placement-bottom-end {\\n top: 100%;\\n right: 0;\\n margin-top: 4px;\\n}\\n\\n.panel.placement-bottom {\\n top: 100%;\\n left: 50%;\\n transform: translateX(-50%);\\n margin-top: 4px;\\n}\\n\\n.panel.placement-top-start {\\n bottom: 100%;\\n left: 0;\\n margin-bottom: 4px;\\n}\\n\\n.panel.placement-top-end {\\n bottom: 100%;\\n right: 0;\\n margin-bottom: 4px;\\n}\\n\\n.panel.placement-top {\\n bottom: 100%;\\n left: 50%;\\n transform: translateX(-50%);\\n margin-bottom: 4px;\\n}\\n\\n/* right placements */\\n.panel.placement-right-start {\\n top: 0;\\n left: 100%;\\n margin-left: 4px;\\n}\\n\\n.panel.placement-right-end {\\n bottom: 0;\\n left: 100%;\\n margin-left: 4px;\\n}\\n\\n.panel.placement-right {\\n top: 50%;\\n left: 100%;\\n transform: translateY(-50%);\\n margin-left: 4px;\\n}\\n\\n/* left placements */\\n.panel.placement-left-start {\\n top: 0;\\n right: 100%;\\n margin-right: 4px;\\n}\\n\\n.panel.placement-left-end {\\n bottom: 0;\\n right: 100%;\\n margin-right: 4px;\\n}\\n\\n.panel.placement-left {\\n top: 50%;\\n right: 100%;\\n transform: translateY(-50%);\\n margin-right: 4px;\\n}\\n\"", "export default \":root,\\n:host {\\n --ae-font-sans-serif: system-ui, -apple-system, \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\",\\n \\\"Noto Sans\\\", \\\"Liberation Sans\\\", Arial, sans-serif,\\n \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\";\\n --ae-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas,\\n \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace;\\n font-family: var(--ae-font-sans-serif);\\n --ae-blue: #0e639c;\\n --ae-green: #28a745;\\n --ae-red: #dc3545;\\n --ae-yellow: #ffc107;\\n --ae-cyan: #17a2b8;\\n --ae-gray: #6e6e6e;\\n --ae-slate: #64748b;\\n --ae-dark: #343a40;\\n --ae-light: #f8f9fa;\\n}\\n\\n:root,\\n:host {\\n /* Blue */\\n --ae-blue-100: color-mix(in srgb, var(--ae-blue) 20%, white);\\n --ae-blue-200: color-mix(in srgb, var(--ae-blue) 40%, white);\\n --ae-blue-300: color-mix(in srgb, var(--ae-blue) 60%, white);\\n --ae-blue-400: color-mix(in srgb, var(--ae-blue) 80%, white);\\n --ae-blue-500: var(--ae-blue);\\n --ae-blue-600: color-mix(in srgb, var(--ae-blue) 80%, black);\\n --ae-blue-700: color-mix(in srgb, var(--ae-blue) 60%, black);\\n --ae-blue-800: color-mix(in srgb, var(--ae-blue) 40%, black);\\n --ae-blue-900: color-mix(in srgb, var(--ae-blue) 20%, black);\\n\\n /* Green */\\n --ae-green-100: color-mix(in srgb, var(--ae-green) 20%, white);\\n --ae-green-200: color-mix(in srgb, var(--ae-green) 40%, white);\\n --ae-green-300: color-mix(in srgb, var(--ae-green) 60%, white);\\n --ae-green-400: color-mix(in srgb, var(--ae-green) 80%, white);\\n --ae-green-500: var(--ae-green);\\n --ae-green-600: color-mix(in srgb, var(--ae-green) 80%, black);\\n --ae-green-700: color-mix(in srgb, var(--ae-green) 60%, black);\\n --ae-green-800: color-mix(in srgb, var(--ae-green) 40%, black);\\n --ae-green-900: color-mix(in srgb, var(--ae-green) 20%, black);\\n\\n /* Red */\\n --ae-red-100: color-mix(in srgb, var(--ae-red) 20%, white);\\n --ae-red-200: color-mix(in srgb, var(--ae-red) 40%, white);\\n --ae-red-300: color-mix(in srgb, var(--ae-red) 60%, white);\\n --ae-red-400: color-mix(in srgb, var(--ae-red) 80%, white);\\n --ae-red-500: var(--ae-red);\\n --ae-red-600: color-mix(in srgb, var(--ae-red) 80%, black);\\n --ae-red-700: color-mix(in srgb, var(--ae-red) 60%, black);\\n --ae-red-800: color-mix(in srgb, var(--ae-red) 40%, black);\\n --ae-red-900: color-mix(in srgb, var(--ae-red) 20%, black);\\n\\n /* Yellow */\\n --ae-yellow-100: color-mix(in srgb, var(--ae-yellow) 20%, white);\\n --ae-yellow-200: color-mix(in srgb, var(--ae-yellow) 40%, white);\\n --ae-yellow-300: color-mix(in srgb, var(--ae-yellow) 60%, white);\\n --ae-yellow-400: color-mix(in srgb, var(--ae-yellow) 80%, white);\\n --ae-yellow-500: var(--ae-yellow);\\n --ae-yellow-600: color-mix(in srgb, var(--ae-yellow) 80%, black);\\n --ae-yellow-700: color-mix(in srgb, var(--ae-yellow) 60%, black);\\n --ae-yellow-800: color-mix(in srgb, var(--ae-yellow) 40%, black);\\n --ae-yellow-900: color-mix(in srgb, var(--ae-yellow) 20%, black);\\n\\n /* Cyan */\\n --ae-cyan-100: color-mix(in srgb, var(--ae-cyan) 20%, white);\\n --ae-cyan-200: color-mix(in srgb, var(--ae-cyan) 40%, white);\\n --ae-cyan-300: color-mix(in srgb, var(--ae-cyan) 60%, white);\\n --ae-cyan-400: color-mix(in srgb, var(--ae-cyan) 80%, white);\\n --ae-cyan-500: var(--ae-cyan);\\n --ae-cyan-600: color-mix(in srgb, var(--ae-cyan) 80%, black);\\n --ae-cyan-700: color-mix(in srgb, var(--ae-cyan) 60%, black);\\n --ae-cyan-800: color-mix(in srgb, var(--ae-cyan) 40%, black);\\n --ae-cyan-900: color-mix(in srgb, var(--ae-cyan) 20%, black);\\n\\n /* Gray (neutral - base #6e6e6e) */\\n --ae-gray-100: color-mix(in srgb, var(--ae-gray) 20%, white);\\n --ae-gray-200: color-mix(in srgb, var(--ae-gray) 40%, white);\\n --ae-gray-300: color-mix(in srgb, var(--ae-gray) 60%, white);\\n --ae-gray-400: color-mix(in srgb, var(--ae-gray) 80%, white);\\n --ae-gray-500: var(--ae-gray);\\n --ae-gray-600: color-mix(in srgb, var(--ae-gray) 80%, black);\\n --ae-gray-700: color-mix(in srgb, var(--ae-gray) 60%, black);\\n --ae-gray-800: color-mix(in srgb, var(--ae-gray) 40%, black);\\n --ae-gray-900: color-mix(in srgb, var(--ae-gray) 20%, black);\\n\\n /* Slate (blue-gray - base #64748b, used for 'secondary') */\\n --ae-slate-100: color-mix(in srgb, var(--ae-slate) 20%, white);\\n --ae-slate-200: color-mix(in srgb, var(--ae-slate) 40%, white);\\n --ae-slate-300: color-mix(in srgb, var(--ae-slate) 60%, white);\\n --ae-slate-400: color-mix(in srgb, var(--ae-slate) 80%, white);\\n --ae-slate-500: var(--ae-slate);\\n --ae-slate-600: color-mix(in srgb, var(--ae-slate) 80%, black);\\n --ae-slate-700: color-mix(in srgb, var(--ae-slate) 60%, black);\\n --ae-slate-800: color-mix(in srgb, var(--ae-slate) 40%, black);\\n --ae-slate-900: color-mix(in srgb, var(--ae-slate) 20%, black);\\n\\n /* Dark (base #343a40) */\\n --ae-dark-100: color-mix(in srgb, var(--ae-dark) 20%, white);\\n --ae-dark-200: color-mix(in srgb, var(--ae-dark) 40%, white);\\n --ae-dark-300: color-mix(in srgb, var(--ae-dark) 60%, white);\\n --ae-dark-400: color-mix(in srgb, var(--ae-dark) 80%, white);\\n --ae-dark-500: var(--ae-dark);\\n --ae-dark-600: color-mix(in srgb, var(--ae-dark) 80%, black);\\n --ae-dark-700: color-mix(in srgb, var(--ae-dark) 60%, black);\\n --ae-dark-800: color-mix(in srgb, var(--ae-dark) 40%, black);\\n --ae-dark-900: color-mix(in srgb, var(--ae-dark) 20%, black);\\n\\n /* Light (base #f8f9fa) */\\n --ae-light-100: color-mix(in srgb, var(--ae-light) 20%, white);\\n --ae-light-200: color-mix(in srgb, var(--ae-light) 40%, white);\\n --ae-light-300: color-mix(in srgb, var(--ae-light) 60%, white);\\n --ae-light-400: color-mix(in srgb, var(--ae-light) 80%, white);\\n --ae-light-500: var(--ae-light);\\n --ae-light-600: color-mix(in srgb, var(--ae-light) 80%, black);\\n --ae-light-700: color-mix(in srgb, var(--ae-light) 60%, black);\\n --ae-light-800: color-mix(in srgb, var(--ae-light) 40%, black);\\n --ae-light-900: color-mix(in srgb, var(--ae-light) 20%, black);\\n}\\n\\n:root,\\n:host {\\n /* Hover / active mix (light default - overridden in \u00A7 6 dark) */\\n --ae-color-mix-hover: black 10%;\\n --ae-color-mix-active: black 20%;\\n\\n /* Primary (Blue) */\\n --ae-color-primary: var(--ae-blue-500);\\n --ae-color-primary-hover: color-mix(in srgb, var(--ae-color-primary), var(--ae-color-mix-hover));\\n --ae-color-primary-active: color-mix(in srgb, var(--ae-color-primary), var(--ae-color-mix-active));\\n --ae-color-primary-disabled: color-mix(in srgb, var(--ae-blue) 50%, var(--ae-gray-500));\\n\\n /* Success (Green) */\\n --ae-color-success: var(--ae-green-500);\\n --ae-color-success-hover: color-mix(in srgb, var(--ae-color-success), var(--ae-color-mix-hover));\\n --ae-color-success-active: color-mix(in srgb, var(--ae-color-success), var(--ae-color-mix-active));\\n --ae-color-success-disabled: color-mix(in srgb, var(--ae-green) 50%, var(--ae-gray-500));\\n\\n /* Danger (Red) */\\n --ae-color-danger: var(--ae-red-500);\\n --ae-color-danger-hover: color-mix(in srgb, var(--ae-color-danger), var(--ae-color-mix-hover));\\n --ae-color-danger-active: color-mix(in srgb, var(--ae-color-danger), var(--ae-color-mix-active));\\n --ae-color-danger-disabled: color-mix(in srgb, var(--ae-red) 50%, var(--ae-gray-500));\\n\\n /* Warning (Yellow) */\\n --ae-color-warning: var(--ae-yellow-500);\\n --ae-color-warning-hover: color-mix(in srgb, var(--ae-color-warning), var(--ae-color-mix-hover));\\n --ae-color-warning-active: color-mix(in srgb, var(--ae-color-warning), var(--ae-color-mix-active));\\n --ae-color-warning-disabled: color-mix(in srgb, var(--ae-yellow) 50%, var(--ae-gray-500));\\n\\n /* Info (Cyan) */\\n --ae-color-info: var(--ae-cyan-500);\\n --ae-color-info-hover: color-mix(in srgb, var(--ae-color-info), var(--ae-color-mix-hover));\\n --ae-color-info-active: color-mix(in srgb, var(--ae-color-info), var(--ae-color-mix-active));\\n --ae-color-info-disabled: color-mix(in srgb, var(--ae-cyan) 50%, var(--ae-gray-500));\\n\\n /* Secondary (Slate) - base differs per theme, overridden in \u00A7 6 dark */\\n --ae-color-secondary: var(--ae-slate-500);\\n --ae-color-secondary-hover: color-mix(in srgb, var(--ae-color-secondary), var(--ae-color-mix-hover));\\n --ae-color-secondary-active: color-mix(in srgb, var(--ae-color-secondary), var(--ae-color-mix-active));\\n --ae-color-secondary-text: var(--ae-slate-700);\\n}\\n\\n\\n.theme-light,\\n:root[theme=\\\"light\\\"],\\n:host([theme=\\\"light\\\"]),\\n:host-context([theme=\\\"light\\\"]),\\n:where(:root),\\n:host {\\n color-scheme: light;\\n\\n /* Gray UI aliases - lighter palette steps for elements on white background */\\n --ae-color-gray-dark: var(--ae-gray-400);\\n --ae-color-gray: var(--ae-gray-300);\\n --ae-color-gray-light: var(--ae-gray-200);\\n --ae-color-gray-lighter: var(--ae-gray-100);\\n --ae-color-gray-lightest: color-mix(in srgb, var(--ae-gray) 10%, white);\\n\\n /* Text */\\n --ae-color-text-main: var(--ae-dark-700);\\n --ae-color-text-muted: var(--ae-gray-600);\\n --ae-color-text-disabled: var(--ae-gray-300);\\n --ae-color-text-link: var(--ae-blue-500);\\n --ae-color-text-link-hover: var(--ae-blue-700);\\n\\n /* Surfaces */\\n --ae-surface-sunken: var(--ae-light-500);\\n --ae-surface-base: white;\\n --ae-surface-raised: var(--ae-light-500);\\n --ae-surface-overlay: white;\\n --ae-color-overlay: rgba(0, 0, 0, 0.4);\\n\\n /* Borders */\\n --ae-border-subtle: rgba(0, 0, 0, 0.08);\\n --ae-border-default: rgba(0, 0, 0, 0.15);\\n --ae-border-hover: rgba(0, 0, 0, 0.25);\\n --ae-border-focus: var(--ae-color-primary);\\n --ae-border-disabled: rgba(0, 0, 0, 0.06);\\n\\n /* Focus ring */\\n --ae-focus-ring: rgb(from var(--ae-blue) r g b / 0.30);\\n --ae-focus-ring-sm: rgb(from var(--ae-blue) r g b / 0.15);\\n\\n /* Subtle intent tokens - light context */\\n --ae-color-primary-bg-subtle: rgb(from var(--ae-blue) r g b / 0.08);\\n --ae-color-primary-border-subtle: rgb(from var(--ae-blue) r g b / 0.40);\\n --ae-color-primary-text-emphasis: var(--ae-blue-700);\\n\\n --ae-color-success-bg-subtle: rgb(from var(--ae-green) r g b / 0.08);\\n --ae-color-success-border-subtle: rgb(from var(--ae-green) r g b / 0.40);\\n --ae-color-success-text-emphasis: var(--ae-green-700);\\n\\n --ae-color-danger-bg-subtle: rgb(from var(--ae-red) r g b / 0.08);\\n --ae-color-danger-border-subtle: rgb(from var(--ae-red) r g b / 0.40);\\n --ae-color-danger-text-emphasis: var(--ae-red-700);\\n\\n --ae-color-warning-bg-subtle: rgb(from var(--ae-yellow) r g b / 0.08);\\n --ae-color-warning-border-subtle: rgb(from var(--ae-yellow) r g b / 0.40);\\n --ae-color-warning-text-emphasis: var(--ae-yellow-700);\\n\\n --ae-color-info-bg-subtle: rgb(from var(--ae-cyan) r g b / 0.08);\\n --ae-color-info-border-subtle: rgb(from var(--ae-cyan) r g b / 0.40);\\n --ae-color-info-text-emphasis: var(--ae-cyan-700);\\n\\n --ae-color-secondary-bg-subtle: rgb(from var(--ae-slate) r g b / 0.08);\\n --ae-color-secondary-border-subtle: rgb(from var(--ae-slate) r g b / 0.40);\\n --ae-color-secondary-text-emphasis: var(--ae-slate-700);\\n\\n --ae-color-light-bg-subtle: var(--ae-gray-100); /* opaque on white: ~#e2e2e2 */\\n --ae-color-light-border-subtle: var(--ae-gray-200); /* opaque on white: ~#c4c4c4 */\\n\\n --ae-color-dark-bg-subtle: var(--ae-dark-100); /* opaque on white: ~#d6d8d9 */\\n --ae-color-dark-border-subtle: var(--ae-dark-300); /* opaque on white: ~#85898c */\\n\\n /* Component tokens - light defaults */\\n --ae-action-btn-bg: var(--ae-gray-200);\\n --ae-action-btn-bg-hover: var(--ae-color-primary);\\n --ae-action-btn-color: var(--ae-gray-600);\\n --ae-action-btn-color-hover: white;\\n\\n --ae-clear-btn-bg-hover: var(--ae-color-danger);\\n --ae-clear-btn-color-hover: white;\\n\\n --ae-reset-btn-border-radius: var(--ae-radius-xs);\\n --ae-reset-btn-bg: var(--ae-action-btn-bg);\\n --ae-reset-btn-bg-hover: var(--ae-action-btn-bg-hover);\\n --ae-reset-btn-color: var(--ae-action-btn-color);\\n --ae-reset-btn-color-hover: var(--ae-action-btn-color-hover);\\n --ae-reset-btn-transition: all 0.12s;\\n\\n --ae-clear-btn-border-radius: var(--ae-radius-xs);\\n --ae-clear-btn-bg: var(--ae-action-btn-bg);\\n --ae-clear-btn-color: var(--ae-action-btn-color);\\n --ae-clear-btn-transition: all 0.12s;\\n}\\n\\n:root,\\n:host {\\n --ae-size-scale: 1;\\n --ae-size-base: calc(1rem * var(--ae-size-scale)); /* 16px */\\n --ae-size-xl: round(calc(var(--ae-size-l) * 1.125), 1px); /* 23px */\\n --ae-size-l: round(calc(var(--ae-size-m) * 1.125 * 1.125), 1px); /* 20px */\\n --ae-size-m: var(--ae-size-base); /* 16px */\\n --ae-size-s: round(calc(var(--ae-size-m) / 1.125), 1px); /* 14px */\\n --ae-size-xs: round(calc(var(--ae-size-s) / 1.125), 1px); /* 12px */\\n --ae-size-2xs: round(calc(var(--ae-size-xs) / 1.125), 1px); /* 11px */\\n --ae-size-3xs: round(calc(var(--ae-size-2xs) / 1.125), 1px); /* 10px */\\n}\\n\\n/* Border-radius tokens - shared across all components */\\n:root,\\n:host {\\n /**\\n * Unified border-radius hook for all components.\\n *\\n *\\n * Usage:\\n * :root { --ae-border-radius: 0; } // global: all components square\\n * :root { --ae-border-radius: 999px; } // global: all components pill\\n * ae-button { --ae-border-radius: 50%; } // scoped: only buttons circular\\n * .sidebar { --ae-border-radius: 8px; } // scoped: everything inside .sidebar\\n *\\n * To restore a component to its own default:\\n * ae-card { --ae-border-radius: initial; }\\n */\\n\\n --ae-radius-square: 0;\\n --ae-radius-xs: 2px;\\n --ae-radius-sm: 4px;\\n --ae-radius-md: 6px;\\n --ae-radius-lg: 8px;\\n --ae-radius-xl: 12px;\\n --ae-radius-pill: 999px;\\n --ae-radius-circle: 50%;\\n}\\n\\n/* Layout tokens - defined on :root so all light DOM elements can use them */\\n:root,\\n:host {\\n --container-max-width: 1280px;\\n --container-padding-x: 1.5rem;\\n}\\n\\n.theme-dark,\\n:root[theme=\\\"dark\\\"],\\n:host([theme=\\\"dark\\\"]),\\n:host-context([theme=\\\"dark\\\"]) {\\n color-scheme: dark;\\n\\n /* Hover / active - slightly gentler on dark backgrounds */\\n --ae-color-mix-hover: black 8%;\\n --ae-color-mix-active: black 16%;\\n\\n /* Gray UI aliases - darker palette steps for elements on dark background */\\n --ae-color-gray-dark: var(--ae-gray-800);\\n --ae-color-gray: var(--ae-gray-700);\\n --ae-color-gray-light: var(--ae-gray-600);\\n --ae-color-gray-lighter: var(--ae-gray-500);\\n --ae-color-gray-lightest: var(--ae-gray-400);\\n\\n /* Secondary - deeper base on dark background */\\n --ae-color-secondary: var(--ae-slate-700);\\n --ae-color-secondary-text: var(--ae-slate-300);\\n\\n /* Text */\\n --ae-color-text-main: white;\\n --ae-color-text-muted: var(--ae-gray-200);\\n --ae-color-text-disabled: var(--ae-gray-500);\\n --ae-color-text-link: var(--ae-blue-300);\\n --ae-color-text-link-hover: var(--ae-blue-200);\\n\\n /* Surfaces */\\n --ae-surface-sunken: var(--ae-gray-900);\\n --ae-surface-base: color-mix(in srgb, var(--ae-gray) 27%, black);\\n --ae-surface-raised: color-mix(in srgb, var(--ae-gray) 34%, black);\\n --ae-surface-overlay: color-mix(in srgb, var(--ae-gray) 38%, black);\\n --ae-color-overlay: rgba(0, 0, 0, 0.6);\\n\\n /* Borders */\\n --ae-border-subtle: rgba(255, 255, 255, 0.08);\\n --ae-border-default: rgba(255, 255, 255, 0.12);\\n --ae-border-hover: rgba(255, 255, 255, 0.20);\\n --ae-border-focus: var(--ae-color-primary);\\n --ae-border-disabled: rgba(255, 255, 255, 0.06);\\n\\n /* Focus ring */\\n --ae-focus-ring: rgb(from var(--ae-blue) r g b / 0.25);\\n --ae-focus-ring-sm: rgb(from var(--ae-blue) r g b / 0.10);\\n\\n /* Subtle intent tokens - dark context (more alpha, lighter text-emphasis) */\\n --ae-color-primary-bg-subtle: rgb(from var(--ae-blue) r g b / 0.10);\\n --ae-color-primary-border-subtle: rgb(from var(--ae-blue) r g b / 0.30);\\n --ae-color-primary-text-emphasis: var(--ae-blue-300);\\n\\n --ae-color-success-bg-subtle: rgb(from var(--ae-green) r g b / 0.10);\\n --ae-color-success-border-subtle: rgb(from var(--ae-green) r g b / 0.30);\\n --ae-color-success-text-emphasis: var(--ae-green-300);\\n\\n --ae-color-danger-bg-subtle: rgb(from var(--ae-red) r g b / 0.10);\\n --ae-color-danger-border-subtle: rgb(from var(--ae-red) r g b / 0.30);\\n --ae-color-danger-text-emphasis: var(--ae-red-300);\\n\\n --ae-color-warning-bg-subtle: rgb(from var(--ae-yellow) r g b / 0.10);\\n --ae-color-warning-border-subtle: rgb(from var(--ae-yellow) r g b / 0.30);\\n --ae-color-warning-text-emphasis: var(--ae-yellow-300);\\n\\n --ae-color-info-bg-subtle: rgb(from var(--ae-cyan) r g b / 0.10);\\n --ae-color-info-border-subtle: rgb(from var(--ae-cyan) r g b / 0.30);\\n --ae-color-info-text-emphasis: var(--ae-cyan-300);\\n\\n --ae-color-secondary-bg-subtle: rgb(from var(--ae-slate) r g b / 0.10);\\n --ae-color-secondary-border-subtle: rgb(from var(--ae-slate) r g b / 0.30);\\n --ae-color-secondary-text-emphasis: var(--ae-slate-300);\\n\\n --ae-color-light-bg-subtle: rgb(from var(--ae-light) r g b / 0.20);\\n --ae-color-light-border-subtle: rgb(from var(--ae-light) r g b / 0.25);\\n\\n --ae-color-dark-bg-subtle: rgb(from var(--ae-dark) r g b / 0.30);\\n --ae-color-dark-border-subtle: rgb(from var(--ae-dark) r g b / 0.50);\\n\\n /* Component tokens - dark overrides */\\n --ae-action-btn-bg: var(--ae-color-gray);\\n --ae-action-btn-bg-hover: color-mix(in srgb, var(--ae-blue) 25%, var(--ae-gray-800));\\n --ae-action-btn-color: var(--ae-gray-400);\\n --ae-action-btn-color-hover: var(--ae-cyan-300);\\n --ae-clear-btn-bg-hover: color-mix(in srgb, var(--ae-red) 25%, var(--ae-gray-800));\\n --ae-clear-btn-color-hover: var(--ae-red-300);\\n}\\n\"", "import AeicoComponent from '../aeico-component';\nimport type { InferProps } from 'aeico';\nimport { html } from 'aeico';\nimport style from '../styles/components/dropdown-item.css';\nimport variables from '../styles/variables.css';\nimport { prop } from 'aeico';\n// Ensure ae-icon is registered when icons are used\nimport '../icon/icon';\n\n/**\n * Dropdown menu item - used as a direct child of `<ae-dropdown>`.\n *\n * Renders as a `<button>` by default, or as an `<a>` anchor when `href` is set.\n * Use `<ae-icon>` inside to add icons, and CSS `color` / `--dropdown-item-color`\n * to apply danger or custom colours.\n *\n * @example\n * ```html\n * <ae-dropdown-item value=\"edit\"><ae-icon name=\"edit\"></ae-icon>Edit</ae-dropdown-item>\n * <ae-dropdown-item value=\"delete\" style=\"--dropdown-item-color:var(--color-danger)\">Delete</ae-dropdown-item>\n * <ae-dropdown-item href=\"/profile\">Profile</ae-dropdown-item>\n * ```\n */\nclass DropdownItem extends AeicoComponent {\n /** Value emitted in the `select` event detail on the parent dropdown. */\n @prop({ type: String })\n accessor value: string | undefined;\n\n /** Disables the item - it becomes non-interactive and visually dimmed. */\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n /**\n * When set, the item renders as an `<a>` anchor element instead of a\n * `<button>`. Useful for navigation items.\n */\n @prop({ type: String })\n accessor href: string | undefined;\n\n /**\n * When `type=\"checkbox\"`, the item behaves as a toggle: each click flips\n * `checked` and includes the new state in the `select` event detail.\n */\n @prop({ type: String })\n accessor type: 'checkbox' | undefined;\n\n /**\n * Whether the item is checked. Only meaningful when `type=\"checkbox\"`.\n * Reflects as the `checked` attribute.\n */\n @prop({ type: Boolean })\n accessor checked: boolean = false;\n\n /**\n * Marks the item as the currently active/selected option (e.g. current route,\n * current sort order). Purely visual - applies a highlighted background and\n * accent colour.\n */\n @prop({ type: Boolean })\n accessor active: boolean = false;\n\n protected static styles = [variables, style];\n\n connectedCallback() {\n super.connectedCallback();\n this.listen('click', this._handleClick);\n this.setAttribute('role', 'menuitem');\n }\n\n private _handleClick = (e: Event): void => {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n\n return;\n }\n if (this.type === 'checkbox') {\n this.checked = !this.checked;\n }\n const label = this.textContent?.trim() ?? '';\n this.dispatchEvent(\n new CustomEvent('_item-select', {\n bubbles: true,\n composed: true,\n detail: { value: this.value ?? '', label, checked: this.checked },\n }),\n );\n };\n\n protected render() {\n const isCheckbox = this.type === 'checkbox';\n const sharedProps = {\n part: 'item',\n className: 'item',\n 'aria-checked': isCheckbox ? String(this.checked) : undefined,\n };\n return html(({ button, a, span, slot }) => {\n const children = () => {\n if (isCheckbox) span({ className: 'check-indicator', 'aria-hidden': 'true' });\n slot();\n };\n if (this.href) {\n a(\n {\n ...sharedProps,\n href: this.disabled ? undefined : this.href,\n 'aria-disabled': this.disabled || undefined,\n },\n children,\n );\n } else {\n button(\n {\n ...sharedProps,\n type: 'button',\n disabled: this.disabled,\n },\n children,\n );\n }\n });\n }\n}\n\nDropdownItem.define('dropdown-item');\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-dropdown-item': DropdownItem;\n }\n}\n\nexport default DropdownItem;\nexport type DropdownItemProps = InferProps<typeof DropdownItem>;\n", "export default \":host {\\n display: block;\\n\\n --dropdown-item-padding: 0.5rem 0.875rem;\\n --dropdown-item-bg: transparent;\\n --dropdown-item-bg-hover: var(--ae-surface-raised, rgba(0, 0, 0, 0.05));\\n --dropdown-item-bg-active: var(--ae-surface-raised-active, rgba(0, 0, 0, 0.1));\\n --dropdown-item-color: var(--ae-color-text-main, inherit);\\n --dropdown-item-color-disabled: var(--ae-color-text-disabled, rgba(0, 0, 0, 0.35));\\n --dropdown-item-font-size: 0.9375rem;\\n --dropdown-item-gap: 0.5rem;\\n --dropdown-item-transition: background 0.1s;\\n}\\n\\n.item {\\n display: flex;\\n align-items: center;\\n gap: var(--dropdown-item-gap);\\n width: 100%;\\n padding: var(--dropdown-item-padding);\\n font-size: var(--dropdown-item-font-size);\\n font-family: inherit;\\n color: var(--dropdown-item-color);\\n background: var(--dropdown-item-bg);\\n border: none;\\n border-radius: var(--ae-border-radius, var(--ae-radius-sm));\\n text-align: left;\\n text-decoration: none;\\n cursor: pointer;\\n user-select: none;\\n white-space: nowrap;\\n box-sizing: border-box;\\n transition: var(--dropdown-item-transition);\\n outline: none;\\n}\\n\\n.item:hover:not(:disabled):not([aria-disabled=\\\"true\\\"]) {\\n background: var(--dropdown-item-bg-hover);\\n}\\n\\n.item:active:not(:disabled):not([aria-disabled=\\\"true\\\"]) {\\n background: var(--dropdown-item-bg-active);\\n}\\n\\n.item:focus-visible {\\n background: var(--dropdown-item-bg-hover);\\n outline: 2px solid var(--ae-color-primary, #0e639c);\\n outline-offset: -2px;\\n}\\n\\n/* disabled */\\n:host([disabled]) .item,\\n.item:disabled {\\n color: var(--dropdown-item-color-disabled);\\n cursor: default;\\n pointer-events: none;\\n}\\n\\n/* Active item - current selection, current route, etc. */\\n:host([active]) .item {\\n background: var(--dropdown-item-bg-selected, rgba(0, 0, 0, 0.06));\\n color: var(--dropdown-item-color-active, var(--ae-color-primary, #0e639c));\\n font-weight: 500;\\n}\\n\\n/* Checkbox mode - fixed-width indicator column */\\n.check-indicator {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n flex-shrink: 0;\\n}\\n\\n/* CSS-drawn checkmark (border trick) */\\n.check-indicator::after {\\n content: '';\\n display: block;\\n width: 0.3em;\\n height: 0.55em;\\n border-right: 0.125em solid currentColor;\\n border-bottom: 0.125em solid currentColor;\\n transform: rotate(45deg) translateY(-0.1em);\\n opacity: 0;\\n transition: opacity 0.1s;\\n}\\n\\n:host([checked]) .check-indicator::after {\\n opacity: 1;\\n}\\n\"", "export const SVG_NS = 'http://www.w3.org/2000/svg';\n\nexport function toKebab(str: string): string {\n const cleaned = str.replace(/^[_\\d]+/, '');\n\n return cleaned.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n", "import type { InferProps, Props } from 'aeico';\nimport { SVG_NS } from '../utils';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport styleVariables from '../styles/variables.css';\nimport sizeCSS from '../styles/size.css';\nimport colorCSS from '../styles/color.css';\nimport style from '../styles/components/icon.css';\nimport type { IconSize, IconColor } from './defines';\nimport { defaultViewBox } from './defines';\nimport IconRegistry from './registry';\nimport './built-in-icons';\n\nclass Icon extends AeicoComponent {\n static props: Props = {\n name: { type: String },\n size: { type: String },\n color: { type: String },\n stroke: { type: Boolean },\n strokeWidth: { type: Number },\n };\n\n declare name?: string;\n declare size?: IconSize;\n declare color?: IconColor;\n declare stroke?: boolean;\n declare strokeWidth?: number;\n\n protected static styles = [styleVariables, sizeCSS, colorCSS, style];\n\n protected render() {\n const def = this.name ? IconRegistry.get(this.name) : undefined;\n\n // Numeric size: set font-size directly (string sizes are handled by size.css)\n const numericSize = Number(this.size);\n if (this.size !== undefined && !isNaN(numericSize) && numericSize > 0) {\n this.style.setProperty('font-size', `${numericSize}px`);\n } else {\n this.style.removeProperty('font-size');\n }\n\n if (!def) return;\n\n const { paths } = def;\n const isMultiPath = Array.isArray(paths);\n\n // Stroke CSS variables only apply in single-path mode (component props)\n if (!isMultiPath) {\n const useStroke =\n this.stroke ?? (this.strokeWidth !== undefined ? true : (def.stroke ?? false));\n const useStrokeWidth = this.strokeWidth ?? def.strokeWidth ?? 2;\n\n if (useStroke) {\n this.style.setProperty('--icon-fill', 'none');\n this.style.setProperty('--icon-stroke', 'currentColor');\n this.style.setProperty('--icon-stroke-width', String(useStrokeWidth));\n } else {\n this.style.removeProperty('--icon-fill');\n this.style.removeProperty('--icon-stroke');\n this.style.removeProperty('--icon-stroke-width');\n }\n } else {\n this.style.removeProperty('--icon-fill');\n this.style.removeProperty('--icon-stroke');\n this.style.removeProperty('--icon-stroke-width');\n }\n\n return html(({ svg, path }) => {\n svg(\n {\n className: 'icon-svg',\n viewBox: def.viewBox ?? defaultViewBox,\n 'aria-hidden': 'true',\n xmlns: SVG_NS,\n },\n () => {\n if (typeof paths === 'string') {\n path({ d: paths });\n } else {\n for (const p of paths) {\n const attrs: Record<string, unknown> = { d: p.d };\n if (p.fill) attrs.style = { fill: p.fill };\n path(attrs);\n }\n }\n },\n );\n });\n }\n}\n\nIcon.define('icon');\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-icon': Icon;\n }\n}\n\nexport default Icon;\nexport type IconProps = InferProps<typeof Icon>;\n", "export default \":host([size=\\\"xs\\\"]) { font-size: var(--ae-size-xs); }\\n:host([size=\\\"sm\\\"]) { font-size: var(--ae-size-s); }\\n:host([size=\\\"md\\\"]) { font-size: var(--ae-size-m); }\\n:host([size=\\\"lg\\\"]) { font-size: var(--ae-size-l); }\\n:host([size=\\\"xl\\\"]) { font-size: var(--ae-size-xl); }\\n:host([size=\\\"3xs\\\"]) { font-size: var(--ae-size-3xs); }\\n:host([size=\\\"2xs\\\"]) { font-size: var(--ae-size-2xs); }\\n\"", "export default \":host {\\n --ae-color-solid: var(--ae-color-gray);\\n --ae-color-solid-hover: color-mix(in srgb, var(--ae-color-solid), var(--ae-color-mix-hover));\\n --ae-color-solid-active: color-mix(in srgb, var(--ae-color-solid), var(--ae-color-mix-active));\\n --ae-color-on-solid: var(--ae-color-text-main);\\n --ae-color-border: var(--ae-color-gray);\\n --ae-color-border-hover: color-mix(in srgb, var(--ae-color-border), var(--ae-color-mix-hover));\\n --ae-color-accent: var(--ae-color-text-muted);\\n --ae-color-accent-hover: var(--ae-color-text-main);\\n --ae-color-subtle: var(--ae-border-subtle);\\n --ae-color-subtle-hover: var(--ae-border-default);\\n --ae-color-bg-subtle: var(--ae-border-subtle);\\n --ae-color-text-subtle: var(--ae-color-text-muted);\\n --ae-color-border-subtle: var(--ae-border-default);\\n}\\n\\n:host([color=\\\"primary\\\"]) {\\n --ae-color-solid: var(--ae-color-primary);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-color-primary);\\n --ae-color-accent: var(--ae-color-text-link);\\n --ae-color-accent-hover: var(--ae-color-text-link-hover);\\n --ae-color-subtle: var(--ae-color-primary-bg-subtle);\\n --ae-color-subtle-hover: rgb(from var(--ae-blue) r g b / 0.15);\\n --ae-color-bg-subtle: var(--ae-color-primary-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-primary-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-primary-border-subtle);\\n}\\n\\n:host([color=\\\"secondary\\\"]) {\\n --ae-color-solid: var(--ae-color-secondary);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-color-secondary-hover);\\n --ae-color-accent: var(--ae-color-secondary-text-emphasis);\\n --ae-color-accent-hover: var(--ae-color-text-main);\\n --ae-color-subtle: rgb(from var(--ae-slate) r g b / 0.06);\\n --ae-color-subtle-hover: rgb(from var(--ae-slate) r g b / 0.12);\\n --ae-color-bg-subtle: var(--ae-color-secondary-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-secondary-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-secondary-border-subtle);\\n}\\n\\n:host([color=\\\"success\\\"]) {\\n --ae-color-solid: var(--ae-color-success);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-color-success);\\n --ae-color-accent: var(--ae-color-success-text-emphasis);\\n --ae-color-accent-hover: var(--ae-color-success-hover);\\n --ae-color-subtle: var(--ae-color-success-bg-subtle);\\n --ae-color-subtle-hover: rgb(from var(--ae-green) r g b / 0.15);\\n --ae-color-bg-subtle: var(--ae-color-success-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-success-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-success-border-subtle);\\n}\\n\\n:host([color=\\\"danger\\\"]) {\\n --ae-color-solid: var(--ae-color-danger);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-color-danger);\\n --ae-color-accent: var(--ae-color-danger-text-emphasis);\\n --ae-color-accent-hover: var(--ae-color-danger-hover);\\n --ae-color-subtle: var(--ae-color-danger-bg-subtle);\\n --ae-color-subtle-hover: rgb(from var(--ae-red) r g b / 0.15);\\n --ae-color-bg-subtle: var(--ae-color-danger-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-danger-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-danger-border-subtle);\\n}\\n\\n:host([color=\\\"warning\\\"]) {\\n --ae-color-solid: var(--ae-color-warning);\\n --ae-color-on-solid: var(--ae-gray-900);\\n --ae-color-border: var(--ae-color-warning);\\n --ae-color-accent: var(--ae-color-warning-text-emphasis);\\n --ae-color-accent-hover: var(--ae-color-warning-hover);\\n --ae-color-subtle: var(--ae-color-warning-bg-subtle);\\n --ae-color-subtle-hover: rgb(from var(--ae-yellow) r g b / 0.15);\\n --ae-color-bg-subtle: var(--ae-color-warning-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-warning-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-warning-border-subtle);\\n}\\n\\n:host([color=\\\"info\\\"]) {\\n --ae-color-solid: var(--ae-color-info);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-color-info);\\n --ae-color-accent: var(--ae-color-info-text-emphasis);\\n --ae-color-accent-hover: var(--ae-color-info-hover);\\n --ae-color-subtle: var(--ae-color-info-bg-subtle);\\n --ae-color-subtle-hover: rgb(from var(--ae-cyan) r g b / 0.15);\\n --ae-color-bg-subtle: var(--ae-color-info-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-info-text-emphasis);\\n --ae-color-border-subtle: var(--ae-color-info-border-subtle);\\n}\\n\\n:host([color=\\\"light\\\"]) {\\n --ae-color-solid: var(--ae-light);\\n --ae-color-on-solid: var(--ae-gray-900);\\n --ae-color-border: var(--ae-border-hover);\\n --ae-color-subtle: var(--ae-color-light-bg-subtle);\\n --ae-color-subtle-hover: var(--ae-color-light-border-subtle);\\n --ae-color-bg-subtle: var(--ae-color-light-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-text-muted);\\n --ae-color-border-subtle: var(--ae-color-light-border-subtle);\\n}\\n\\n:host([color=\\\"dark\\\"]) {\\n --ae-color-solid: var(--ae-dark-500);\\n --ae-color-on-solid: white;\\n --ae-color-border: var(--ae-dark-500);\\n --ae-color-accent: var(--ae-color-text-main);\\n --ae-color-accent-hover: var(--ae-color-text-main);\\n --ae-color-subtle: var(--ae-color-dark-bg-subtle);\\n --ae-color-subtle-hover: var(--ae-color-dark-border-subtle);\\n --ae-color-bg-subtle: var(--ae-color-dark-bg-subtle);\\n --ae-color-text-subtle: var(--ae-color-text-main);\\n --ae-color-border-subtle: var(--ae-color-dark-border-subtle);\\n}\\n\"", "export default \":host {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 20px;\\n width: 1em;\\n height: 1em;\\n color: inherit;\\n flex-shrink: 0;\\n line-height: 0;\\n vertical-align: middle;\\n}\\n\\n:host([color]) {\\n color: var(--ae-color-solid);\\n}\\n\\n.icon-svg {\\n display: block;\\n width: 100%;\\n height: 100%;\\n fill: var(--icon-fill, currentColor);\\n stroke: var(--icon-stroke, none);\\n stroke-width: var(--icon-stroke-width, 2);\\n stroke-linecap: var(--icon-stroke-linecap, round);\\n stroke-linejoin: var(--icon-stroke-linejoin, round);\\n pointer-events: none;\\n overflow: visible;\\n}\\n\"", "export type IconSize = '3xs' | '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number;\n\nexport type IconColor =\n | 'default'\n | 'primary'\n | 'secondary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info';\n\nexport interface IconPathDef {\n d: string;\n fill?: string;\n stroke?: boolean;\n strokeWidth?: number;\n}\n\nexport interface IconDefinition {\n paths: string | IconPathDef[];\n viewBox?: string;\n stroke?: boolean;\n strokeWidth?: number;\n}\n\nexport const defaultViewBox = '0 0 24 24';\n\nexport type IconRegistryData = Record<string, string | IconDefinition>;\n", "import { IconDefinition, IconRegistryData, defaultViewBox } from './defines';\n\nclass IconRegistry {\n private static _icons: Map<string, IconDefinition> = new Map();\n /** Names registered via addBuiltIn - can be overridden by user add() calls */\n private static _builtInKeys: Set<string> = new Set();\n\n /** Register user icons. Always takes priority over built-in icons. */\n static add(icons: IconRegistryData) {\n for (const [name, data] of Object.entries(icons)) {\n if (typeof data === 'string') {\n this._icons.set(name, { paths: data, viewBox: defaultViewBox });\n } else {\n this._icons.set(name, data);\n }\n // Mark as user-defined (removes built-in status)\n this._builtInKeys.delete(name);\n }\n }\n\n /**\n * Register built-in icons provided by the library.\n * A built-in icon will NOT overwrite an icon already registered by the user.\n */\n static addBuiltIn(icons: IconRegistryData) {\n for (const [name, data] of Object.entries(icons)) {\n // Skip if the user has already registered this icon\n if (this._icons.has(name) && !this._builtInKeys.has(name)) continue;\n if (typeof data === 'string') {\n this._icons.set(name, { paths: data, viewBox: defaultViewBox });\n } else {\n this._icons.set(name, data);\n }\n this._builtInKeys.add(name);\n }\n }\n\n static get(name: string): IconDefinition | undefined {\n return this._icons.get(name);\n }\n\n static has(name: string): boolean {\n return this._icons.has(name);\n }\n}\n\nexport default IconRegistry;\n", "/**\n * Built-in system icons used internally by aeico components.\n * These are pre-registered so components work out of the box.\n * Users can override any of them by calling IconRegistry.add({ 'name': '...' }).\n *\n * All paths use the Material Design 24\u00D724 viewBox.\n */\nimport IconRegistry from './registry';\n\nIconRegistry.addBuiltIn({\n copy: 'M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z',\n check: 'M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z',\n 'chevron-left': 'M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z',\n 'chevron-right': 'M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z',\n 'chevron-up': 'M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z',\n 'chevron-down': 'M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z',\n 'chevrons-left': 'M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z',\n 'chevrons-right': 'M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z',\n close:\n 'M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z',\n});\n", "import AeicoComponent from '../aeico-component';\nimport type { InferProps } from 'aeico';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\nimport type { ButtonColor, ButtonSize, ButtonVariant } from '../button/defines';\nimport type { DropdownPlacement } from './defines';\nimport type Dropdown from './dropdown';\nimport './dropdown';\nimport '../button/button';\n\n/**\n * DropdownButton - a pre-composed trigger + dropdown panel.\n *\n * Renders an `ae-button`-styled trigger with a built-in chevron,\n * and a floating panel for `<ae-dropdown-item>` children.\n * Accepts the same `variant`, `color`, `size`, and `disabled` props\n * as `ae-button`, making it a drop-in inside `ae-button-group`.\n *\n * @example\n * ```html\n * <ae-dropdown-button variant=\"outlined\" color=\"primary\">\n * Actions\n * <ae-dropdown-item value=\"edit\">Edit</ae-dropdown-item>\n * <ae-dropdown-item value=\"delete\">Delete</ae-dropdown-item>\n * </ae-dropdown-button>\n *\n * <!-- Inside ae-button-group -->\n * <ae-button-group compact color=\"primary\">\n * <ae-button>Save</ae-button>\n * <ae-dropdown-button placement=\"bottom-end\">\n * <ae-dropdown-item value=\"draft\">Save as draft</ae-dropdown-item>\n * <ae-dropdown-item value=\"template\">Save as template</ae-dropdown-item>\n * </ae-dropdown-button>\n * </ae-button-group>\n * ```\n *\n * Emits:\n * - `open` - when the panel opens\n * - `close` - when the panel closes\n * - `select` - `{ detail: { value, label } }` when a menu item is selected\n */\nclass DropdownButton extends AeicoComponent {\n // ae-button and ae-dropdown each carry their own shadow DOM styles.\n // Only the host display is set here so button-group compact layout works.\n protected static styles = [\n ':host { display: inline-block; }',\n '.caret { display: inline-block; width: 0; height: 0; margin-left: 0.3em; vertical-align: 0.2em; flex-shrink: 0; }',\n '.caret--bottom { border-top: 0.35em solid; border-right: 0.35em solid transparent; border-left: 0.35em solid transparent; }',\n '.caret--top { border-bottom: 0.35em solid; border-right: 0.35em solid transparent; border-left: 0.35em solid transparent; }',\n '.caret--right { border-left: 0.35em solid; border-top: 0.35em solid transparent; border-bottom: 0.35em solid transparent; }',\n '.caret--left { border-right: 0.35em solid; border-top: 0.35em solid transparent; border-bottom: 0.35em solid transparent; }',\n ];\n\n @prop({ type: String })\n accessor variant: ButtonVariant = 'filled';\n\n @prop({ type: String })\n accessor color: ButtonColor = 'default';\n\n @prop({ type: String })\n accessor size: ButtonSize = 'md';\n\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n @prop({ type: String })\n accessor placement: DropdownPlacement = 'bottom-start';\n\n @prop({ type: Boolean })\n accessor closeOnSelect: boolean = true;\n\n private _dropdownEl: Dropdown | null = null;\n\n show(): void {\n if (this.disabled) return;\n this._dropdownEl?.show();\n }\n hide(): void {\n this._dropdownEl?.hide();\n }\n toggle(): void {\n if (this.disabled) return;\n this._dropdownEl?.toggle();\n }\n\n get open(): boolean {\n return this._dropdownEl?.open ?? false;\n }\n\n protected render() {\n const dir = this.placement.split('-')[0];\n return html(({ aeDropdown, aeButton, slot, span }) => {\n this._dropdownEl = aeDropdown(\n {\n placement: this.placement,\n 'close-on-select': this.closeOnSelect,\n },\n () => {\n aeButton(\n {\n slot: 'trigger',\n variant: this.variant,\n color: this.color,\n size: this.size,\n disabled: this.disabled || undefined,\n },\n () => {\n slot({ name: 'label' });\n span({ className: `caret caret--${dir}`, 'aria-hidden': 'true' });\n },\n );\n slot();\n },\n );\n });\n }\n}\n\nDropdownButton.define('dropdown-button');\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-dropdown-button': DropdownButton;\n }\n}\n\nexport default DropdownButton;\nexport type DropdownButtonProps = InferProps<typeof DropdownButton>;\n", "export default \":host {\\n display: inline-block;\\n}\\n\\nbutton {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 6px;\\n font-family: inherit;\\n font-weight: 400;\\n text-align: center;\\n white-space: nowrap;\\n vertical-align: middle;\\n user-select: none;\\n cursor: pointer;\\n transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\\n outline: none;\\n position: relative;\\n padding: 0.429em 1.071em;\\n font-size: 1em;\\n line-height: 1.5;\\n border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-sm)) var(--_btn-r-tr, var(--ae-radius-sm)) var(--_btn-r-br, var(--ae-radius-sm)) var(--_btn-r-bl, var(--ae-radius-sm)));\\n min-width: 4.571em;\\n height: 2.286em;\\n width: 100%;\\n\\n background: var(--ae-color-solid);\\n border: 1px solid var(--ae-color-solid);\\n color: var(--ae-color-on-solid);\\n}\\n\\nbutton:focus { outline: none; }\\nbutton:active { transform: translateY(1px); }\\n\\nbutton:hover:not(:disabled) {\\n background: var(--ae-color-solid-hover);\\n border-color: var(--ae-color-border-hover);\\n color: var(--ae-color-on-solid-hover, var(--ae-color-on-solid));\\n}\\n\\nbutton:active:not(:disabled) { background: var(--ae-color-solid-active); }\\n\\nbutton:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n\\n:host([size=\\\"xs\\\"]) button { border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-xs)) var(--_btn-r-tr, var(--ae-radius-xs)) var(--_btn-r-br, var(--ae-radius-xs)) var(--_btn-r-bl, var(--ae-radius-xs))); }\\n:host([size=\\\"sm\\\"]) button { border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-xs)) var(--_btn-r-tr, var(--ae-radius-xs)) var(--_btn-r-br, var(--ae-radius-xs)) var(--_btn-r-bl, var(--ae-radius-xs))); }\\n\\n/* --- Variants --- */\\n\\n:host([variant=\\\"outlined\\\"]) button {\\n background: transparent;\\n border-color: var(--ae-color-border);\\n color: var(--ae-color-accent);\\n}\\n\\n:host([variant=\\\"outlined\\\"]) button:hover:not(:disabled) {\\n background: var(--ae-color-subtle);\\n border-color: var(--ae-color-border-hover);\\n color: var(--ae-color-accent-hover);\\n}\\n\\n:host([variant=\\\"outlined\\\"]) button:active:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n}\\n\\n:host([variant=\\\"subtle\\\"]) button {\\n background: var(--ae-color-subtle);\\n border-color: transparent;\\n color: var(--ae-color-accent);\\n}\\n\\n:host([variant=\\\"subtle\\\"]) button:hover:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n color: var(--ae-color-accent-hover);\\n}\\n\\n:host([variant=\\\"subtle\\\"]) button:active:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n}\\n\\n:host([variant=\\\"faint\\\"]) button {\\n background: var(--ae-color-subtle);\\n border-color: var(--ae-color-border);\\n color: var(--ae-color-accent);\\n}\\n\\n:host([variant=\\\"faint\\\"]) button:hover:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n border-color: var(--ae-color-border-hover);\\n color: var(--ae-color-accent-hover);\\n}\\n\\n:host([variant=\\\"faint\\\"]) button:active:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n}\\n\\n:host([variant=\\\"text\\\"]) button {\\n background: transparent;\\n border-color: transparent;\\n color: var(--ae-color-accent);\\n min-width: auto;\\n padding-left: 4px;\\n padding-right: 4px;\\n}\\n\\n:host([variant=\\\"text\\\"]) button:hover:not(:disabled) {\\n background: var(--ae-color-subtle);\\n color: var(--ae-color-accent-hover);\\n}\\n\\n:host([variant=\\\"text\\\"]) button:active:not(:disabled) {\\n background: var(--ae-color-subtle-hover);\\n}\\n\\n:host([icon-only]) {\\n display: inline-flex;\\n}\\n\\n:host([icon-only]:not([size])) {\\n font-size: var(--ae-size-m);\\n}\\n\\n:host([icon-only]) button {\\n padding: 0;\\n min-width: auto;\\n width: 2.286em;\\n height: 2.286em;\\n line-height: 1;\\n}\\n\\n:host([icon-only]) ::slotted(ae-icon) {\\n font-size: 1.5em;\\n}\\n\\n:host([active]) button {\\n background: var(--ae-color-solid-active);\\n border-color: var(--ae-color-border-hover);\\n color: var(--ae-color-on-solid-hover, var(--ae-color-on-solid));\\n}\\n\\n.btn-icon {\\n padding: 0;\\n min-width: auto;\\n width: 2.286em;\\n height: 2.286em;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--ae-radius-sm);\\n}\\n\\n.btn-icon.btn-lg {\\n width: 2.857em;\\n height: 2.857em;\\n}\\n\\n.btn-circle {\\n border-radius: var(--ae-radius-circle);\\n}\\n\\n:host([block]) {\\n display: block;\\n}\\n\\nbutton.btn-loading {\\n position: relative;\\n pointer-events: none;\\n color: transparent;\\n}\\n\\nbutton.btn-loading::before {\\n content: '';\\n position: absolute;\\n width: 1em;\\n height: 1em;\\n border: 2px solid currentColor;\\n border-top-color: transparent;\\n border-radius: var(--ae-radius-circle);\\n animation: btn-spin 0.6s linear infinite;\\n color: currentColor;\\n opacity: 0.8;\\n}\\n\\n@keyframes btn-spin {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n\\n.btn-icon-left {\\n margin-right: -2px;\\n}\\n\\n.btn-icon-right {\\n margin-left: -2px;\\n}\\n\\n\"", "import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css';\nimport sizeCSS from '../styles/size.css';\nimport colorCSS from '../styles/color.css';\nimport buttonStyle from '../styles/components/button.css';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { ButtonColor, ButtonSize, ButtonVariant } from './defines';\nimport { prop } from 'aeico';\n\n/**\n * Button Component\n *\n * A customizable button component with multiple variants and sizes.\n * Supports theme and internationalization through mixins.\n *\n * @example\n * ```typescript\n * // Using the static create method\n * const button = Button.create({\n * variant: 'primary',\n * size: 'md'\n * })\n * ```\n *\n * @example\n * ```html\n * <!-- Using as Web Component -->\n * <ae-button variant=\"primary\" size=\"md\">Save</ae-button>\n * <ae-button variant=\"danger\" size=\"sm\">Delete</ae-button>\n * <ae-button variant=\"subtle\">Cancel</ae-button>\n * ```\n */\nclass Button extends AeicoComponent {\n protected static styles = [styleVariables, sizeCSS, colorCSS, buttonStyle];\n\n @prop({ type: String })\n color?: ButtonColor;\n\n @prop({ type: String })\n variant?: ButtonVariant;\n\n @prop({ type: String })\n size?: ButtonSize;\n\n @prop({ type: Boolean })\n disabled?: boolean;\n\n @prop({ type: String })\n type?: 'button' | 'submit' | 'reset';\n\n @prop({ type: Boolean })\n active?: boolean;\n\n @prop({ type: Boolean })\n block?: boolean;\n\n private _buttonElement: HTMLButtonElement | null = null;\n private _slotElement: HTMLSlotElement | null = null;\n private _autoAriaLabel = false;\n\n protected onMounted() {\n this._handleSlotChange();\n }\n\n private _handleSlotChange = () => {\n const nodes = this._slotElement?.assignedNodes() ?? [];\n // Icon-only: exactly one element (ae-icon) and no meaningful text nodes\n const elements = nodes.filter((n): n is Element => n.nodeType === Node.ELEMENT_NODE);\n const hasText = nodes.some(\n (n) => n.nodeType === Node.TEXT_NODE && n.textContent!.trim() !== '',\n );\n const isIconOnly =\n !hasText && elements.length === 1 && elements[0].tagName.toLowerCase() === 'ae-icon';\n\n if (isIconOnly) {\n this.setAttribute('icon-only', '');\n if (!this.hasAttribute('aria-label') || this._autoAriaLabel) {\n this.setAttribute('aria-label', elements[0].getAttribute('name') ?? '');\n this._autoAriaLabel = true;\n }\n } else {\n this.removeAttribute('icon-only');\n if (this._autoAriaLabel) {\n this.removeAttribute('aria-label');\n this._autoAriaLabel = false;\n }\n }\n };\n\n protected render() {\n return html(({ button, slot }) => {\n this._buttonElement = button(\n {\n type: this.type || 'button',\n disabled: this.disabled,\n part: 'button',\n 'aria-pressed': this.active,\n 'aria-disabled': this.disabled,\n },\n () => {\n this._slotElement = slot({ '@slotchange': this._handleSlotChange });\n },\n );\n });\n }\n\n /**\n * Programmatically click the button\n */\n click() {\n if (!this.disabled && this._buttonElement) {\n this._buttonElement.click();\n }\n }\n\n /**\n * Focus the button\n */\n focus() {\n if (this._buttonElement) {\n this._buttonElement.focus();\n }\n }\n\n /**\n * Blur the button\n */\n blur() {\n if (this._buttonElement) {\n this._buttonElement.blur();\n }\n }\n}\n\nButton.define('button');\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-button': Button;\n }\n}\n\nexport default Button;\nexport type ButtonProps = InferProps<typeof Button>;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,oBAAoB;AAE7B,IAAM,kBAAkB;AAKxB,IAAM,iBAAN,cAA6B,aAAa;AAAA,EACxC,OAAO,OAAO,MAAc;AAC1B,UAAM,SAAS,GAAG,eAAe;AAEjC,UAAM,UAAU,KAAK,WAAW,MAAM,IAAI,OAAO,GAAG,MAAM,GAAG,IAAI;AAEjE,UAAM,OAAO,OAAO;AAAA,EACtB;AACF;AAEA,IAAO,0BAAQ;;;ACff,SAAS,QAAAA,aAAY;AACrB,SAAS,QAAAC,aAAY;;;ACHrB,IAAO,mBAAQ;;;ACAf,IAAO,oBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEf,SAAS,QAAAC,aAAY;;;ACFrB,IAAO,wBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
6
6
  "names": ["html", "prop", "html", "html", "dropdown_item_default", "_disabled_dec", "_a", "_init", "_disabled", "prop", "html", "dropdown_default", "html", "prop", "html", "prop", "_active_dec", "_type_dec", "_disabled_dec", "_a", "_init", "prop", "html", "_closeOnSelect_dec", "_placement_dec", "_disabled_dec", "_size_dec", "_color_dec", "_variant_dec", "_a", "_init", "_disabled", "_placement", "_closeOnSelect", "prop", "html"]
7
7
  }
@@ -158,7 +158,7 @@ var require_variables = __commonJS({
158
158
  --ae-cyan-800: color-mix(in srgb, var(--ae-cyan) 40%, black);
159
159
  --ae-cyan-900: color-mix(in srgb, var(--ae-cyan) 20%, black);
160
160
 
161
- /* Gray (neutral \u2014 base #6e6e6e) */
161
+ /* Gray (neutral - base #6e6e6e) */
162
162
  --ae-gray-100: color-mix(in srgb, var(--ae-gray) 20%, white);
163
163
  --ae-gray-200: color-mix(in srgb, var(--ae-gray) 40%, white);
164
164
  --ae-gray-300: color-mix(in srgb, var(--ae-gray) 60%, white);
@@ -169,7 +169,7 @@ var require_variables = __commonJS({
169
169
  --ae-gray-800: color-mix(in srgb, var(--ae-gray) 40%, black);
170
170
  --ae-gray-900: color-mix(in srgb, var(--ae-gray) 20%, black);
171
171
 
172
- /* Slate (blue-gray \u2014 base #64748b, used for 'secondary') */
172
+ /* Slate (blue-gray - base #64748b, used for 'secondary') */
173
173
  --ae-slate-100: color-mix(in srgb, var(--ae-slate) 20%, white);
174
174
  --ae-slate-200: color-mix(in srgb, var(--ae-slate) 40%, white);
175
175
  --ae-slate-300: color-mix(in srgb, var(--ae-slate) 60%, white);
@@ -205,7 +205,7 @@ var require_variables = __commonJS({
205
205
 
206
206
  :root,
207
207
  :host {
208
- /* Hover / active mix (light default \u2014 overridden in \xA7 6 dark) */
208
+ /* Hover / active mix (light default - overridden in \xA7 6 dark) */
209
209
  --ae-color-mix-hover: black 10%;
210
210
  --ae-color-mix-active: black 20%;
211
211
 
@@ -239,7 +239,7 @@ var require_variables = __commonJS({
239
239
  --ae-color-info-active: color-mix(in srgb, var(--ae-color-info), var(--ae-color-mix-active));
240
240
  --ae-color-info-disabled: color-mix(in srgb, var(--ae-cyan) 50%, var(--ae-gray-500));
241
241
 
242
- /* Secondary (Slate) \u2014 base differs per theme, overridden in \xA7 6 dark */
242
+ /* Secondary (Slate) - base differs per theme, overridden in \xA7 6 dark */
243
243
  --ae-color-secondary: var(--ae-slate-500);
244
244
  --ae-color-secondary-hover: color-mix(in srgb, var(--ae-color-secondary), var(--ae-color-mix-hover));
245
245
  --ae-color-secondary-active: color-mix(in srgb, var(--ae-color-secondary), var(--ae-color-mix-active));
@@ -255,7 +255,7 @@ var require_variables = __commonJS({
255
255
  :host {
256
256
  color-scheme: light;
257
257
 
258
- /* Gray UI aliases \u2014 lighter palette steps for elements on white background */
258
+ /* Gray UI aliases - lighter palette steps for elements on white background */
259
259
  --ae-color-gray-dark: var(--ae-gray-400);
260
260
  --ae-color-gray: var(--ae-gray-300);
261
261
  --ae-color-gray-light: var(--ae-gray-200);
@@ -287,7 +287,7 @@ var require_variables = __commonJS({
287
287
  --ae-focus-ring: rgb(from var(--ae-blue) r g b / 0.30);
288
288
  --ae-focus-ring-sm: rgb(from var(--ae-blue) r g b / 0.15);
289
289
 
290
- /* Subtle intent tokens \u2014 light context */
290
+ /* Subtle intent tokens - light context */
291
291
  --ae-color-primary-bg-subtle: rgb(from var(--ae-blue) r g b / 0.08);
292
292
  --ae-color-primary-border-subtle: rgb(from var(--ae-blue) r g b / 0.40);
293
293
  --ae-color-primary-text-emphasis: var(--ae-blue-700);
@@ -318,7 +318,7 @@ var require_variables = __commonJS({
318
318
  --ae-color-dark-bg-subtle: var(--ae-dark-100); /* opaque on white: ~#d6d8d9 */
319
319
  --ae-color-dark-border-subtle: var(--ae-dark-300); /* opaque on white: ~#85898c */
320
320
 
321
- /* Component tokens \u2014 light defaults */
321
+ /* Component tokens - light defaults */
322
322
  --ae-action-btn-bg: var(--ae-gray-200);
323
323
  --ae-action-btn-bg-hover: var(--ae-color-primary);
324
324
  --ae-action-btn-color: var(--ae-gray-600);
@@ -353,14 +353,12 @@ var require_variables = __commonJS({
353
353
  --ae-size-3xs: round(calc(var(--ae-size-2xs) / 1.125), 1px); /* 10px */
354
354
  }
355
355
 
356
- /* Border-radius tokens \u2014 shared across all components */
356
+ /* Border-radius tokens - shared across all components */
357
357
  :root,
358
358
  :host {
359
359
  /**
360
360
  * Unified border-radius hook for all components.
361
361
  *
362
- * Not set by default \u2014 each component falls back to its own --ae-radius-*
363
- * token (e.g. button \u2192 sm, card \u2192 lg, input \u2192 xs).
364
362
  *
365
363
  * Usage:
366
364
  * :root { --ae-border-radius: 0; } // global: all components square
@@ -382,7 +380,7 @@ var require_variables = __commonJS({
382
380
  --ae-radius-circle: 50%;
383
381
  }
384
382
 
385
- /* Layout tokens \u2014 defined on :root so all light DOM elements can use them */
383
+ /* Layout tokens - defined on :root so all light DOM elements can use them */
386
384
  :root,
387
385
  :host {
388
386
  --container-max-width: 1280px;
@@ -395,18 +393,18 @@ var require_variables = __commonJS({
395
393
  :host-context([theme="dark"]) {
396
394
  color-scheme: dark;
397
395
 
398
- /* Hover / active \u2014 slightly gentler on dark backgrounds */
396
+ /* Hover / active - slightly gentler on dark backgrounds */
399
397
  --ae-color-mix-hover: black 8%;
400
398
  --ae-color-mix-active: black 16%;
401
399
 
402
- /* Gray UI aliases \u2014 darker palette steps for elements on dark background */
400
+ /* Gray UI aliases - darker palette steps for elements on dark background */
403
401
  --ae-color-gray-dark: var(--ae-gray-800);
404
402
  --ae-color-gray: var(--ae-gray-700);
405
403
  --ae-color-gray-light: var(--ae-gray-600);
406
404
  --ae-color-gray-lighter: var(--ae-gray-500);
407
405
  --ae-color-gray-lightest: var(--ae-gray-400);
408
406
 
409
- /* Secondary \u2014 deeper base on dark background */
407
+ /* Secondary - deeper base on dark background */
410
408
  --ae-color-secondary: var(--ae-slate-700);
411
409
  --ae-color-secondary-text: var(--ae-slate-300);
412
410
 
@@ -435,7 +433,7 @@ var require_variables = __commonJS({
435
433
  --ae-focus-ring: rgb(from var(--ae-blue) r g b / 0.25);
436
434
  --ae-focus-ring-sm: rgb(from var(--ae-blue) r g b / 0.10);
437
435
 
438
- /* Subtle intent tokens \u2014 dark context (more alpha, lighter text-emphasis) */
436
+ /* Subtle intent tokens - dark context (more alpha, lighter text-emphasis) */
439
437
  --ae-color-primary-bg-subtle: rgb(from var(--ae-blue) r g b / 0.10);
440
438
  --ae-color-primary-border-subtle: rgb(from var(--ae-blue) r g b / 0.30);
441
439
  --ae-color-primary-text-emphasis: var(--ae-blue-300);
@@ -466,7 +464,7 @@ var require_variables = __commonJS({
466
464
  --ae-color-dark-bg-subtle: rgb(from var(--ae-dark) r g b / 0.30);
467
465
  --ae-color-dark-border-subtle: rgb(from var(--ae-dark) r g b / 0.50);
468
466
 
469
- /* Component tokens \u2014 dark overrides */
467
+ /* Component tokens - dark overrides */
470
468
  --ae-action-btn-bg: var(--ae-color-gray);
471
469
  --ae-action-btn-bg-hover: color-mix(in srgb, var(--ae-blue) 25%, var(--ae-gray-800));
472
470
  --ae-action-btn-color: var(--ae-gray-400);
@@ -613,7 +611,6 @@ button:disabled {
613
611
  background: var(--ae-color-subtle-hover);
614
612
  }
615
613
 
616
- /* Icon-only: single ae-icon child \u2192 square compact layout */
617
614
  :host([icon-only]) {
618
615
  display: inline-flex;
619
616
  }
@@ -718,20 +715,12 @@ module.exports = __toCommonJS(icon_button_exports);
718
715
 
719
716
  // src/aeico-component.ts
720
717
  var import_aeico = require("aeico");
721
-
722
- // src/utils.ts
723
- var SVG_NS = "http://www.w3.org/2000/svg";
724
- function toKebab(str) {
725
- const cleaned = str.replace(/^[_\d]+/, "");
726
- return cleaned.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
727
- }
728
-
729
- // src/aeico-component.ts
730
718
  var TAG_NAME_PREFIX = "ae";
731
719
  var AeicoComponent = class extends import_aeico.AeicoElement {
732
- static register(name) {
733
- const tagName = name || `${TAG_NAME_PREFIX}-${this.tagName || toKebab(this.name)}`;
734
- super.register(tagName);
720
+ static define(name) {
721
+ const prefix = `${TAG_NAME_PREFIX}-`;
722
+ const tagName = name.startsWith(prefix) ? name : `${prefix}${name}`;
723
+ super.define(tagName);
735
724
  }
736
725
  };
737
726
  var aeico_component_default = AeicoComponent;
@@ -836,7 +825,10 @@ __decorateElement(_init, 5, "active", _active_dec, Button);
836
825
  __decorateElement(_init, 5, "block", _block_dec, Button);
837
826
  __decoratorMetadata(_init, Button);
838
827
  __publicField(Button, "styles", [import_variables.default, import_size.default, import_color.default, import_button.default]);
839
- Button.register();
828
+ Button.define("button");
829
+
830
+ // src/utils.ts
831
+ var SVG_NS = "http://www.w3.org/2000/svg";
840
832
 
841
833
  // src/icon/icon.ts
842
834
  var import_aeico4 = require("aeico");
@@ -851,7 +843,7 @@ var defaultViewBox = "0 0 24 24";
851
843
  // src/icon/registry.ts
852
844
  var IconRegistry = class {
853
845
  static _icons = /* @__PURE__ */ new Map();
854
- /** Names registered via addBuiltIn can be overridden by user add() calls */
846
+ /** Names registered via addBuiltIn - can be overridden by user add() calls */
855
847
  static _builtInKeys = /* @__PURE__ */ new Set();
856
848
  /** Register user icons. Always takes priority over built-in icons. */
857
849
  static add(icons) {
@@ -903,7 +895,6 @@ registry_default.addBuiltIn({
903
895
 
904
896
  // src/icon/icon.ts
905
897
  var Icon = class extends aeico_component_default {
906
- static tagName = "icon";
907
898
  static props = {
908
899
  name: { type: String },
909
900
  size: { type: String },
@@ -963,11 +954,10 @@ var Icon = class extends aeico_component_default {
963
954
  });
964
955
  }
965
956
  };
966
- Icon.register();
957
+ Icon.define("icon");
967
958
 
968
959
  // src/icon-button/icon-button.ts
969
960
  var IconButton = class extends aeico_component_default {
970
- static tagName = "icon-button";
971
961
  static props = {
972
962
  icon: { type: String },
973
963
  size: { type: String },
@@ -992,7 +982,7 @@ var IconButton = class extends aeico_component_default {
992
982
  });
993
983
  }
994
984
  };
995
- IconButton.register();
985
+ IconButton.define("icon-button");
996
986
  var icon_button_default = IconButton;
997
987
  // Annotate the CommonJS export names for ESM import in node:
998
988
  0 && (module.exports = {