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.
- package/dist/alert.cjs +20 -29
- package/dist/alert.cjs.map +3 -3
- package/dist/alert.js +20 -29
- package/dist/alert.js.map +3 -3
- package/dist/badge.cjs +19 -28
- package/dist/badge.cjs.map +3 -3
- package/dist/badge.js +19 -28
- package/dist/badge.js.map +3 -3
- package/dist/breadcrumb.cjs +22 -33
- package/dist/breadcrumb.cjs.map +3 -3
- package/dist/breadcrumb.js +22 -33
- package/dist/breadcrumb.js.map +3 -3
- package/dist/button-group.cjs +19 -28
- package/dist/button-group.cjs.map +3 -3
- package/dist/button-group.js +19 -28
- package/dist/button-group.js.map +3 -3
- package/dist/button.cjs +19 -29
- package/dist/button.cjs.map +3 -3
- package/dist/button.js +19 -29
- package/dist/button.js.map +3 -3
- package/dist/card.cjs +19 -29
- package/dist/card.cjs.map +3 -3
- package/dist/card.js +19 -29
- package/dist/card.js.map +3 -3
- package/dist/checkbox.cjs +21 -31
- package/dist/checkbox.cjs.map +3 -3
- package/dist/checkbox.js +21 -31
- package/dist/checkbox.js.map +3 -3
- package/dist/copy-button.cjs +25 -33
- package/dist/copy-button.cjs.map +2 -2
- package/dist/copy-button.js +25 -33
- package/dist/copy-button.js.map +3 -3
- package/dist/detail-group.cjs +19 -29
- package/dist/detail-group.cjs.map +3 -3
- package/dist/detail-group.js +19 -29
- package/dist/detail-group.js.map +3 -3
- package/dist/detail.cjs +19 -29
- package/dist/detail.cjs.map +3 -3
- package/dist/detail.js +19 -29
- package/dist/detail.js.map +3 -3
- package/dist/dialog.cjs +24 -32
- package/dist/dialog.cjs.map +2 -2
- package/dist/dialog.js +24 -32
- package/dist/dialog.js.map +3 -3
- package/dist/divider.cjs +20 -30
- package/dist/divider.cjs.map +3 -3
- package/dist/divider.js +20 -30
- package/dist/divider.js.map +3 -3
- package/dist/drawer.cjs +24 -32
- package/dist/drawer.cjs.map +2 -2
- package/dist/drawer.js +24 -32
- package/dist/drawer.js.map +3 -3
- package/dist/dropdown.cjs +31 -43
- package/dist/dropdown.cjs.map +3 -3
- package/dist/dropdown.js +31 -43
- package/dist/dropdown.js.map +3 -3
- package/dist/icon-button.cjs +25 -35
- package/dist/icon-button.cjs.map +3 -3
- package/dist/icon-button.js +25 -35
- package/dist/icon-button.js.map +3 -3
- package/dist/icon.cjs +20 -26
- package/dist/icon.cjs.map +2 -2
- package/dist/icon.js +20 -26
- package/dist/icon.js.map +2 -2
- package/dist/index.cjs +75 -113
- package/dist/index.cjs.map +3 -3
- package/dist/index.js +75 -113
- package/dist/index.js.map +3 -3
- package/dist/menu.cjs +20 -31
- package/dist/menu.cjs.map +3 -3
- package/dist/menu.js +20 -31
- package/dist/menu.js.map +3 -3
- package/dist/navbar.cjs +19 -29
- package/dist/navbar.cjs.map +3 -3
- package/dist/navbar.js +19 -29
- package/dist/navbar.js.map +3 -3
- package/dist/number-input.cjs +21 -31
- package/dist/number-input.cjs.map +3 -3
- package/dist/number-input.js +21 -31
- package/dist/number-input.js.map +3 -3
- package/dist/pagination.cjs +24 -33
- package/dist/pagination.cjs.map +2 -2
- package/dist/pagination.js +24 -33
- package/dist/pagination.js.map +3 -3
- package/dist/progress-bar.cjs +19 -29
- package/dist/progress-bar.cjs.map +3 -3
- package/dist/progress-bar.js +19 -29
- package/dist/progress-bar.js.map +3 -3
- package/dist/radio-group.cjs +24 -35
- package/dist/radio-group.cjs.map +3 -3
- package/dist/radio-group.js +24 -35
- package/dist/radio-group.js.map +3 -3
- package/dist/select.cjs +23 -34
- package/dist/select.cjs.map +3 -3
- package/dist/select.js +23 -34
- package/dist/select.js.map +3 -3
- package/dist/slider.cjs +21 -32
- package/dist/slider.cjs.map +3 -3
- package/dist/slider.js +21 -32
- package/dist/slider.js.map +3 -3
- package/dist/spinner.cjs +19 -29
- package/dist/spinner.cjs.map +3 -3
- package/dist/spinner.js +19 -29
- package/dist/spinner.js.map +3 -3
- package/dist/styles/layout.cjs +1 -1
- package/dist/styles/layout.js +1 -1
- package/dist/styles/radius.cjs +1 -1
- package/dist/styles/radius.js +1 -1
- package/dist/styles/variables.cjs +1 -1
- package/dist/styles/variables.js +1 -1
- package/dist/switch.cjs +26 -35
- package/dist/switch.cjs.map +3 -3
- package/dist/switch.js +26 -35
- package/dist/switch.js.map +3 -3
- package/dist/tabs.cjs +21 -30
- package/dist/tabs.cjs.map +3 -3
- package/dist/tabs.js +21 -30
- package/dist/tabs.js.map +3 -3
- package/dist/tag.cjs +19 -28
- package/dist/tag.cjs.map +3 -3
- package/dist/tag.js +19 -28
- package/dist/tag.js.map +3 -3
- package/dist/text-input.cjs +21 -31
- package/dist/text-input.cjs.map +3 -3
- package/dist/text-input.js +21 -31
- package/dist/text-input.js.map +3 -3
- package/dist/textarea.cjs +21 -31
- package/dist/textarea.cjs.map +3 -3
- package/dist/textarea.js +21 -31
- package/dist/textarea.js.map +3 -3
- package/dist/tooltip.cjs +19 -28
- package/dist/tooltip.cjs.map +3 -3
- package/dist/tooltip.js +19 -28
- package/dist/tooltip.js.map +3 -3
- package/dist/tree.cjs +25 -35
- package/dist/tree.cjs.map +3 -3
- package/dist/tree.js +25 -35
- package/dist/tree.js.map +3 -3
- package/dist/types/aeico-component.d.ts +1 -1
- package/dist/types/aeico-field.d.ts +1 -1
- package/dist/types/breadcrumb/breadcrumb-item.d.ts +0 -1
- package/dist/types/breadcrumb/breadcrumb.d.ts +2 -3
- package/dist/types/button-group/button-group.d.ts +1 -1
- package/dist/types/card/card.d.ts +0 -1
- package/dist/types/checkbox/checkbox.d.ts +0 -1
- package/dist/types/detail/detail.d.ts +0 -1
- package/dist/types/detail-group/detail-group.d.ts +1 -2
- package/dist/types/divider/divider.d.ts +0 -1
- package/dist/types/dropdown/dropdown-button.d.ts +4 -5
- package/dist/types/dropdown/dropdown-item.d.ts +3 -4
- package/dist/types/dropdown/dropdown.d.ts +4 -5
- package/dist/types/icon/icon.d.ts +0 -1
- package/dist/types/icon/registry.d.ts +1 -1
- package/dist/types/icon-button/icon-button.d.ts +0 -1
- package/dist/types/index.d.ts +4 -4
- package/dist/types/menu/menu-item.d.ts +3 -4
- package/dist/types/menu/menu.d.ts +3 -4
- package/dist/types/navbar/navbar.d.ts +5 -6
- package/dist/types/number-input/number-input.d.ts +0 -1
- package/dist/types/pagination/pagination.d.ts +0 -1
- package/dist/types/progress-bar/progress-bar.d.ts +0 -1
- package/dist/types/radio-group/radio-group.d.ts +0 -1
- package/dist/types/radio-group/radio.d.ts +6 -7
- package/dist/types/select/select-option.d.ts +0 -1
- package/dist/types/select/select.d.ts +0 -1
- package/dist/types/slider/defines.d.ts +5 -5
- package/dist/types/slider/slider.d.ts +0 -1
- package/dist/types/spinner/spinner.d.ts +1 -2
- package/dist/types/switch/switch.d.ts +0 -1
- package/dist/types/text-input/text-input.d.ts +0 -1
- package/dist/types/textarea/textarea.d.ts +0 -1
- package/dist/types/tree/tree-item.d.ts +1 -2
- package/dist/types/tree/tree.d.ts +0 -1
- package/package.json +5 -3
- package/src/aeico-component.ts +6 -5
- package/src/aeico-field.ts +2 -2
- package/src/alert/alert.ts +2 -2
- package/src/badge/badge.ts +2 -2
- package/src/breadcrumb/breadcrumb-item.ts +2 -4
- package/src/breadcrumb/breadcrumb.ts +4 -6
- package/src/button/button.ts +2 -2
- package/src/button-group/button-group.ts +3 -3
- package/src/card/card.ts +2 -4
- package/src/card/defines.ts +1 -1
- package/src/card/index.ts +1 -1
- package/src/checkbox/checkbox.ts +2 -4
- package/src/copy-button/copy-button.ts +1 -1
- package/src/detail/detail.ts +2 -4
- package/src/detail-group/detail-group.ts +2 -4
- package/src/dialog/dialog.ts +2 -2
- package/src/divider/divider.ts +2 -4
- package/src/drawer/drawer.ts +2 -2
- package/src/dropdown/dropdown-button.ts +6 -8
- package/src/dropdown/dropdown-item.ts +5 -7
- package/src/dropdown/dropdown.ts +7 -9
- package/src/icon/icon.ts +2 -4
- package/src/icon/registry.ts +1 -1
- package/src/icon-button/icon-button.ts +2 -4
- package/src/index.ts +4 -4
- package/src/menu/menu-item.ts +5 -7
- package/src/menu/menu.ts +4 -6
- package/src/navbar/navbar.ts +7 -9
- package/src/number-input/number-input.ts +1 -3
- package/src/pagination/pagination.ts +1 -3
- package/src/progress-bar/progress-bar.ts +1 -2
- package/src/radio-group/radio-group.ts +5 -7
- package/src/radio-group/radio.ts +8 -10
- package/src/select/select-option.ts +2 -4
- package/src/select/select.ts +4 -6
- package/src/slider/defines.ts +5 -5
- package/src/slider/slider.ts +5 -8
- package/src/spinner/spinner.ts +2 -4
- package/src/styles/components/action-button.css +1 -1
- package/src/styles/components/alert.css +1 -1
- package/src/styles/components/breadcrumb-item.css +2 -2
- package/src/styles/components/button.css +0 -1
- package/src/styles/components/divider.css +1 -1
- package/src/styles/components/dropdown-item.css +2 -2
- package/src/styles/components/dropdown.css +1 -1
- package/src/styles/layout.css +14 -14
- package/src/styles/radius.css +1 -1
- package/src/styles/variables.css +14 -16
- package/src/switch/switch.ts +2 -4
- package/src/tabs/tab-panel.ts +2 -2
- package/src/tabs/tab.ts +2 -2
- package/src/tabs/tabs.ts +2 -2
- package/src/tag/tag.ts +2 -2
- package/src/text-input/text-input.ts +2 -4
- package/src/textarea/textarea.ts +1 -3
- package/src/tooltip/tooltip.ts +1 -1
- package/src/tree/tree-item.ts +3 -5
- package/src/tree/tree.ts +2 -4
package/dist/menu.cjs
CHANGED
|
@@ -166,7 +166,7 @@ var require_variables = __commonJS({
|
|
|
166
166
|
--ae-cyan-800: color-mix(in srgb, var(--ae-cyan) 40%, black);
|
|
167
167
|
--ae-cyan-900: color-mix(in srgb, var(--ae-cyan) 20%, black);
|
|
168
168
|
|
|
169
|
-
/* Gray (neutral
|
|
169
|
+
/* Gray (neutral - base #6e6e6e) */
|
|
170
170
|
--ae-gray-100: color-mix(in srgb, var(--ae-gray) 20%, white);
|
|
171
171
|
--ae-gray-200: color-mix(in srgb, var(--ae-gray) 40%, white);
|
|
172
172
|
--ae-gray-300: color-mix(in srgb, var(--ae-gray) 60%, white);
|
|
@@ -177,7 +177,7 @@ var require_variables = __commonJS({
|
|
|
177
177
|
--ae-gray-800: color-mix(in srgb, var(--ae-gray) 40%, black);
|
|
178
178
|
--ae-gray-900: color-mix(in srgb, var(--ae-gray) 20%, black);
|
|
179
179
|
|
|
180
|
-
/* Slate (blue-gray
|
|
180
|
+
/* Slate (blue-gray - base #64748b, used for 'secondary') */
|
|
181
181
|
--ae-slate-100: color-mix(in srgb, var(--ae-slate) 20%, white);
|
|
182
182
|
--ae-slate-200: color-mix(in srgb, var(--ae-slate) 40%, white);
|
|
183
183
|
--ae-slate-300: color-mix(in srgb, var(--ae-slate) 60%, white);
|
|
@@ -213,7 +213,7 @@ var require_variables = __commonJS({
|
|
|
213
213
|
|
|
214
214
|
:root,
|
|
215
215
|
:host {
|
|
216
|
-
/* Hover / active mix (light default
|
|
216
|
+
/* Hover / active mix (light default - overridden in \xA7 6 dark) */
|
|
217
217
|
--ae-color-mix-hover: black 10%;
|
|
218
218
|
--ae-color-mix-active: black 20%;
|
|
219
219
|
|
|
@@ -247,7 +247,7 @@ var require_variables = __commonJS({
|
|
|
247
247
|
--ae-color-info-active: color-mix(in srgb, var(--ae-color-info), var(--ae-color-mix-active));
|
|
248
248
|
--ae-color-info-disabled: color-mix(in srgb, var(--ae-cyan) 50%, var(--ae-gray-500));
|
|
249
249
|
|
|
250
|
-
/* Secondary (Slate)
|
|
250
|
+
/* Secondary (Slate) - base differs per theme, overridden in \xA7 6 dark */
|
|
251
251
|
--ae-color-secondary: var(--ae-slate-500);
|
|
252
252
|
--ae-color-secondary-hover: color-mix(in srgb, var(--ae-color-secondary), var(--ae-color-mix-hover));
|
|
253
253
|
--ae-color-secondary-active: color-mix(in srgb, var(--ae-color-secondary), var(--ae-color-mix-active));
|
|
@@ -263,7 +263,7 @@ var require_variables = __commonJS({
|
|
|
263
263
|
:host {
|
|
264
264
|
color-scheme: light;
|
|
265
265
|
|
|
266
|
-
/* Gray UI aliases
|
|
266
|
+
/* Gray UI aliases - lighter palette steps for elements on white background */
|
|
267
267
|
--ae-color-gray-dark: var(--ae-gray-400);
|
|
268
268
|
--ae-color-gray: var(--ae-gray-300);
|
|
269
269
|
--ae-color-gray-light: var(--ae-gray-200);
|
|
@@ -295,7 +295,7 @@ var require_variables = __commonJS({
|
|
|
295
295
|
--ae-focus-ring: rgb(from var(--ae-blue) r g b / 0.30);
|
|
296
296
|
--ae-focus-ring-sm: rgb(from var(--ae-blue) r g b / 0.15);
|
|
297
297
|
|
|
298
|
-
/* Subtle intent tokens
|
|
298
|
+
/* Subtle intent tokens - light context */
|
|
299
299
|
--ae-color-primary-bg-subtle: rgb(from var(--ae-blue) r g b / 0.08);
|
|
300
300
|
--ae-color-primary-border-subtle: rgb(from var(--ae-blue) r g b / 0.40);
|
|
301
301
|
--ae-color-primary-text-emphasis: var(--ae-blue-700);
|
|
@@ -326,7 +326,7 @@ var require_variables = __commonJS({
|
|
|
326
326
|
--ae-color-dark-bg-subtle: var(--ae-dark-100); /* opaque on white: ~#d6d8d9 */
|
|
327
327
|
--ae-color-dark-border-subtle: var(--ae-dark-300); /* opaque on white: ~#85898c */
|
|
328
328
|
|
|
329
|
-
/* Component tokens
|
|
329
|
+
/* Component tokens - light defaults */
|
|
330
330
|
--ae-action-btn-bg: var(--ae-gray-200);
|
|
331
331
|
--ae-action-btn-bg-hover: var(--ae-color-primary);
|
|
332
332
|
--ae-action-btn-color: var(--ae-gray-600);
|
|
@@ -361,14 +361,12 @@ var require_variables = __commonJS({
|
|
|
361
361
|
--ae-size-3xs: round(calc(var(--ae-size-2xs) / 1.125), 1px); /* 10px */
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
-
/* Border-radius tokens
|
|
364
|
+
/* Border-radius tokens - shared across all components */
|
|
365
365
|
:root,
|
|
366
366
|
:host {
|
|
367
367
|
/**
|
|
368
368
|
* Unified border-radius hook for all components.
|
|
369
369
|
*
|
|
370
|
-
* Not set by default \u2014 each component falls back to its own --ae-radius-*
|
|
371
|
-
* token (e.g. button \u2192 sm, card \u2192 lg, input \u2192 xs).
|
|
372
370
|
*
|
|
373
371
|
* Usage:
|
|
374
372
|
* :root { --ae-border-radius: 0; } // global: all components square
|
|
@@ -390,7 +388,7 @@ var require_variables = __commonJS({
|
|
|
390
388
|
--ae-radius-circle: 50%;
|
|
391
389
|
}
|
|
392
390
|
|
|
393
|
-
/* Layout tokens
|
|
391
|
+
/* Layout tokens - defined on :root so all light DOM elements can use them */
|
|
394
392
|
:root,
|
|
395
393
|
:host {
|
|
396
394
|
--container-max-width: 1280px;
|
|
@@ -403,18 +401,18 @@ var require_variables = __commonJS({
|
|
|
403
401
|
:host-context([theme="dark"]) {
|
|
404
402
|
color-scheme: dark;
|
|
405
403
|
|
|
406
|
-
/* Hover / active
|
|
404
|
+
/* Hover / active - slightly gentler on dark backgrounds */
|
|
407
405
|
--ae-color-mix-hover: black 8%;
|
|
408
406
|
--ae-color-mix-active: black 16%;
|
|
409
407
|
|
|
410
|
-
/* Gray UI aliases
|
|
408
|
+
/* Gray UI aliases - darker palette steps for elements on dark background */
|
|
411
409
|
--ae-color-gray-dark: var(--ae-gray-800);
|
|
412
410
|
--ae-color-gray: var(--ae-gray-700);
|
|
413
411
|
--ae-color-gray-light: var(--ae-gray-600);
|
|
414
412
|
--ae-color-gray-lighter: var(--ae-gray-500);
|
|
415
413
|
--ae-color-gray-lightest: var(--ae-gray-400);
|
|
416
414
|
|
|
417
|
-
/* Secondary
|
|
415
|
+
/* Secondary - deeper base on dark background */
|
|
418
416
|
--ae-color-secondary: var(--ae-slate-700);
|
|
419
417
|
--ae-color-secondary-text: var(--ae-slate-300);
|
|
420
418
|
|
|
@@ -443,7 +441,7 @@ var require_variables = __commonJS({
|
|
|
443
441
|
--ae-focus-ring: rgb(from var(--ae-blue) r g b / 0.25);
|
|
444
442
|
--ae-focus-ring-sm: rgb(from var(--ae-blue) r g b / 0.10);
|
|
445
443
|
|
|
446
|
-
/* Subtle intent tokens
|
|
444
|
+
/* Subtle intent tokens - dark context (more alpha, lighter text-emphasis) */
|
|
447
445
|
--ae-color-primary-bg-subtle: rgb(from var(--ae-blue) r g b / 0.10);
|
|
448
446
|
--ae-color-primary-border-subtle: rgb(from var(--ae-blue) r g b / 0.30);
|
|
449
447
|
--ae-color-primary-text-emphasis: var(--ae-blue-300);
|
|
@@ -474,7 +472,7 @@ var require_variables = __commonJS({
|
|
|
474
472
|
--ae-color-dark-bg-subtle: rgb(from var(--ae-dark) r g b / 0.30);
|
|
475
473
|
--ae-color-dark-border-subtle: rgb(from var(--ae-dark) r g b / 0.50);
|
|
476
474
|
|
|
477
|
-
/* Component tokens
|
|
475
|
+
/* Component tokens - dark overrides */
|
|
478
476
|
--ae-action-btn-bg: var(--ae-color-gray);
|
|
479
477
|
--ae-action-btn-bg-hover: color-mix(in srgb, var(--ae-blue) 25%, var(--ae-gray-800));
|
|
480
478
|
--ae-action-btn-color: var(--ae-gray-400);
|
|
@@ -503,19 +501,12 @@ module.exports = __toCommonJS(menu_exports);
|
|
|
503
501
|
|
|
504
502
|
// src/aeico-component.ts
|
|
505
503
|
var import_aeico = require("aeico");
|
|
506
|
-
|
|
507
|
-
// src/utils.ts
|
|
508
|
-
function toKebab(str) {
|
|
509
|
-
const cleaned = str.replace(/^[_\d]+/, "");
|
|
510
|
-
return cleaned.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
// src/aeico-component.ts
|
|
514
504
|
var TAG_NAME_PREFIX = "ae";
|
|
515
505
|
var AeicoComponent = class extends import_aeico.AeicoElement {
|
|
516
|
-
static
|
|
517
|
-
const
|
|
518
|
-
|
|
506
|
+
static define(name) {
|
|
507
|
+
const prefix = `${TAG_NAME_PREFIX}-`;
|
|
508
|
+
const tagName = name.startsWith(prefix) ? name : `${prefix}${name}`;
|
|
509
|
+
super.define(tagName);
|
|
519
510
|
}
|
|
520
511
|
};
|
|
521
512
|
var aeico_component_default = AeicoComponent;
|
|
@@ -774,9 +765,8 @@ __decorateElement(_init, 4, "selected", _selected_dec, MenuItem, _selected);
|
|
|
774
765
|
__decorateElement(_init, 4, "open", _open_dec, MenuItem, _open);
|
|
775
766
|
__decorateElement(_init, 4, "iconPlacement", _iconPlacement_dec, MenuItem, _iconPlacement);
|
|
776
767
|
__decoratorMetadata(_init, MenuItem);
|
|
777
|
-
__publicField(MenuItem, "tagName", "menu-item");
|
|
778
768
|
__publicField(MenuItem, "styles", [import_variables.default, import_menu_item.default]);
|
|
779
|
-
MenuItem.
|
|
769
|
+
MenuItem.define("menu-item");
|
|
780
770
|
var menu_item_default = MenuItem;
|
|
781
771
|
|
|
782
772
|
// src/menu/menu.ts
|
|
@@ -831,9 +821,8 @@ __decorateElement(_init2, 4, "trigger", _trigger_dec, Menu, _trigger);
|
|
|
831
821
|
__decorateElement(_init2, 4, "selectedKey", _selectedKey_dec, Menu, _selectedKey);
|
|
832
822
|
__decorateElement(_init2, 4, "wrapText", _wrapText_dec, Menu, _wrapText);
|
|
833
823
|
__decoratorMetadata(_init2, Menu);
|
|
834
|
-
__publicField(Menu, "tagName", "menu");
|
|
835
824
|
__publicField(Menu, "styles", [import_variables2.default, import_menu.default]);
|
|
836
|
-
Menu.
|
|
825
|
+
Menu.define("menu");
|
|
837
826
|
var menu_default = Menu;
|
|
838
827
|
// Annotate the CommonJS export names for ESM import in node:
|
|
839
828
|
0 && (module.exports = {
|
package/dist/menu.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/menu.css", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/variables.css", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/menu-item.css", "../src/menu/index.ts", "../src/aeico-component.ts", "../src/
|
|
4
|
-
"sourcesContent": ["module.exports = \":host {\\n display: block;\\n}\\n\\n.menu-list {\\n display: flex;\\n flex-direction: column;\\n margin: 0;\\n padding: 0;\\n list-style: none;\\n gap: 0;\\n}\\n\\n.menu-list--horizontal {\\n flex-direction: row;\\n align-items: stretch;\\n}\\n\"", "module.exports = \":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\"", "module.exports = \":host {\\n display: block;\\n position: relative;\\n\\n --menu-item-height: 2.5rem;\\n --menu-item-padding-x: 0.875rem;\\n --menu-item-font-size: 0.9375rem;\\n --menu-item-color: inherit;\\n --menu-item-color-disabled: var(--ae-color-text-disabled);\\n --menu-item-bg: transparent;\\n --menu-item-bg-hover: var(--ae-surface-raised, rgba(0, 0, 0, 0.05));\\n --menu-item-active-color: var(--ae-color-primary, var(--ae-blue-500));\\n --menu-item-active-border-color: var(--ae-color-primary, var(--ae-blue-500));\\n\\n --submenu-z-index: 1001;\\n --submenu-bg: var(--ae-surface-overlay, #fff);\\n --submenu-border: 1px solid var(--ae-border-default);\\n --submenu-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\\n --submenu-min-width: 10rem;\\n --submenu-padding: 0.25rem 0;\\n}\\n\\n.item {\\n display: inline-flex;\\n align-items: center;\\n gap: 0.4rem;\\n width: 100%;\\n height: var(--menu-item-height);\\n padding: 0 var(--menu-item-padding-x);\\n font-size: var(--menu-item-font-size);\\n font-family: inherit;\\n color: var(--menu-item-color);\\n background: var(--menu-item-bg);\\n border: none;\\n border-bottom: 2px solid transparent;\\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 outline: none;\\n transition: background 0.1s, color 0.1s, border-color 0.1s;\\n -webkit-appearance: none;\\n appearance: none;\\n}\\n\\n.item--leaf-in-panel {\\n height: auto;\\n padding: 0.5rem var(--menu-item-padding-x);\\n border-bottom: none;\\n}\\n\\n.item--wrap {\\n white-space: normal;\\n height: auto;\\n min-height: var(--menu-item-height);\\n}\\n\\n.item:hover:not(:disabled) {\\n background: var(--menu-item-bg-hover);\\n}\\n\\n.item:focus-visible {\\n background: var(--menu-item-bg-hover);\\n outline: 2px solid var(--menu-item-active-color);\\n outline-offset: -2px;\\n}\\n\\n:host([disabled]) .item,\\n.item:disabled {\\n color: var(--menu-item-color-disabled);\\n cursor: not-allowed;\\n pointer-events: none;\\n}\\n\\n:host([selected]) .item {\\n color: var(--menu-item-active-color);\\n border-bottom-color: var(--menu-item-active-border-color);\\n}\\n\\n.item-arrow {\\n display: inline-block;\\n width: 0;\\n height: 0;\\n flex-shrink: 0;\\n}\\n\\n.item-arrow--right {\\n border-top: 0.3em solid transparent;\\n border-bottom: 0.3em solid transparent;\\n border-left: 0.3em solid;\\n}\\n\\n.item-arrow--bottom {\\n border-left: 0.3em solid transparent;\\n border-right: 0.3em solid transparent;\\n border-top: 0.3em solid;\\n}\\n\\n.item--open .item-arrow--right {\\n transform: rotate(90deg);\\n}\\n\\nslot[name=\\\"expand\\\"],\\nslot[name=\\\"collapse\\\"] {\\n display: inline-flex;\\n align-items: center;\\n margin-inline-start: auto;\\n flex-shrink: 0;\\n}\\n\\nslot[name=\\\"collapse\\\"] {\\n display: none;\\n}\\n\\n.item--open slot[name=\\\"expand\\\"] {\\n display: none;\\n}\\n\\n.item--open slot[name=\\\"collapse\\\"] {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\nslot[name=\\\"collapse\\\"] .item-arrow--right {\\n transform: rotate(90deg);\\n}\\n\\n:host([icon-placement=\\\"start\\\"]) slot[name=\\\"expand\\\"],\\n:host([icon-placement=\\\"start\\\"]) slot[name=\\\"collapse\\\"] {\\n order: -1;\\n margin-inline-start: 0;\\n}\\n\\n.submenu-panel {\\n display: none;\\n position: absolute;\\n z-index: var(--submenu-z-index);\\n background: var(--submenu-bg);\\n border: var(--submenu-border);\\n border-radius: var(--ae-border-radius, var(--ae-radius-md));\\n box-shadow: var(--submenu-shadow);\\n min-width: var(--submenu-min-width);\\n padding: var(--submenu-padding);\\n box-sizing: border-box;\\n max-width: calc(100vw - 16px);\\n}\\n\\n.submenu-panel.open {\\n display: block;\\n}\\n\\n.submenu-panel.placement-bottom {\\n top: 100%;\\n left: 0;\\n margin-top: 2px;\\n}\\n\\n.submenu-panel.placement-right {\\n top: 0;\\n left: 100%;\\n margin-left: 2px;\\n}\\n\\n.submenu-inline {\\n display: none;\\n padding-left: 1rem;\\n}\\n\\n.submenu-inline.open {\\n display: block;\\n}\\n\"", "export { default as Menu } from './menu';\nexport { default as MenuItem } from './menu-item';\nexport type { MenuProps } from './menu';\nexport type { MenuItemProps } from './menu-item';\nexport type { MenuMode, MenuOrientation, MenuTrigger, MenuSelectDetail } from './defines';\n", "\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", "import AeicoComponent from '../aeico-component';\nimport type { InferProps } from 'aeico';\nimport { html, prop } from 'aeico';\nimport style from '../styles/components/menu.css';\nimport variables from '../styles/variables.css';\nimport type { MenuMode, MenuOrientation, MenuSelectDetail, MenuTrigger } from './defines';\n// Ensure ae-menu-item is registered when this module is used\nimport './menu-item';\n\n/**\n * Menu navigation component. Renders a horizontal or vertical menu with\n * optional two-level flyout or inline (accordion) submenus.\n *\n * Two modes:\n * - `flyout` (default) \u2014 submenus open as floating panels (like a nav bar or\n * context menu).\n * - `inline` \u2014 submenus expand in-place (accordion-style sidebar).\n *\n * Emits:\n * - `select` \u2014 `{ detail: { key, label, keyPath } }` when a leaf item is clicked.\n */\nclass Menu extends AeicoComponent {\n static tagName = 'menu';\n\n protected static styles = [variables, style];\n\n @prop({ type: String })\n accessor mode: MenuMode = 'flyout';\n\n @prop({ type: String })\n accessor orientation: MenuOrientation = 'horizontal';\n\n @prop({ type: String })\n accessor trigger: MenuTrigger = 'click';\n\n @prop({ type: String })\n accessor selectedKey: string | undefined;\n\n @prop({ type: Boolean })\n accessor wrapText: boolean = false;\n\n connectedCallback() {\n super.connectedCallback();\n this.listen('_menu-item-select', this._handleItemSelect as EventListener);\n }\n\n private _handleItemSelect = (e: CustomEvent<MenuSelectDetail>): void => {\n const { key, label, keyPath } = e.detail;\n // Update visual selection on all leaf items\n this.querySelectorAll('ae-menu-item').forEach((el) => {\n const item = el;\n item.selected = item.key === key && !item.label; // only leaf items\n });\n this.selectedKey = key;\n this.emit('select', { detail: { key, label, keyPath } });\n };\n\n protected render() {\n const isHorizontal = this.orientation === 'horizontal';\n return html(({ div, slot }) => {\n div(\n {\n className: { 'menu-list': true, 'menu-list--horizontal': isHorizontal },\n role: isHorizontal ? 'menubar' : 'menu',\n 'aria-orientation': this.orientation,\n },\n () => {\n slot();\n },\n );\n });\n }\n}\n\nMenu.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-menu': Menu;\n }\n}\n\nexport default Menu;\nexport type MenuProps = InferProps<typeof Menu>;\n", "import AeicoComponent from '../aeico-component';\nimport type { InferProps } from 'aeico';\nimport { html, prop } from 'aeico';\nimport style from '../styles/components/menu-item.css';\nimport variables from '../styles/variables.css';\nimport type {\n MenuMode,\n MenuOrientation,\n MenuTrigger,\n ParentMenuLike,\n MenuIconPlacement,\n} from './defines';\n\n/**\n * Menu item \u2014 used as a direct child of `<ae-menu>` or nested inside another\n * `<ae-menu-item>` to create a two-level submenu.\n *\n * - **Leaf item**: omit `label`; slot contains the item text.\n * - **Parent item**: set `label` to the trigger text; slot children are\n * `<ae-menu-item>` elements that appear in the submenu panel/section.\n *\n * **Slots (parent items only)**\n * - `expand` \u2014 icon shown when the submenu is closed (default: CSS triangle).\n * - `collapse` \u2014 icon shown when the submenu is open (default: rotated CSS triangle).\n *\n * @example\n * ```html\n * <ae-menu-item label=\"Settings\" icon-placement=\"start\">\n * <ae-icon name=\"chevron-right\" slot=\"expand\"></ae-icon>\n * <ae-icon name=\"chevron-down\" slot=\"collapse\"></ae-icon>\n * <ae-menu-item key=\"profile\">Profile</ae-menu-item>\n * </ae-menu-item>\n * ```\n */\nclass MenuItem extends AeicoComponent {\n static tagName = 'menu-item';\n\n protected static styles = [variables, style];\n\n @prop({ type: String })\n accessor key: string | undefined;\n\n @prop({ type: String })\n accessor label: string | undefined;\n\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n @prop({ type: String })\n accessor href: string | undefined;\n\n @prop({ type: Boolean })\n accessor selected: boolean = false;\n\n @prop({ type: Boolean })\n accessor open: boolean = false;\n\n @prop({ type: String })\n accessor iconPlacement: MenuIconPlacement = 'end';\n\n private _outsideClickHandler: ((e: MouseEvent) => void) | null = null;\n private _closeTimer: ReturnType<typeof setTimeout> | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n\n // data-depth lets CSS apply depth-specific styles without JS\n const depth = this.parentElement?.closest('ae-menu-item') ? 1 : 0;\n this.dataset.depth = String(depth);\n\n // Hover listeners \u2014 check mode/trigger at runtime\n this.listen('mouseenter', this._handleMouseEnter);\n this.listen('mouseleave', this._handleMouseLeave);\n\n // Outside-click to close flyout panel (not applicable in inline mode)\n this._outsideClickHandler = (e: MouseEvent) => {\n if (!this.open) return;\n if (this._mode === 'inline') return;\n if (!e.composedPath().includes(this)) this.open = false;\n };\n\n document.addEventListener('click', this._outsideClickHandler);\n\n // Close own submenu when a leaf inside it is selected (flyout)\n this.listen('_menu-item-select', this._handleChildSelect as EventListener);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._outsideClickHandler) {\n document.removeEventListener('click', this._outsideClickHandler);\n this._outsideClickHandler = null;\n }\n if (this._closeTimer !== null) {\n clearTimeout(this._closeTimer);\n this._closeTimer = null;\n }\n }\n\n private get _parentMenu(): ParentMenuLike | null {\n return this.closest<ParentMenuLike>('ae-menu');\n }\n\n private get _mode(): MenuMode {\n return this._parentMenu?.mode ?? 'flyout';\n }\n\n private get _orientation(): MenuOrientation {\n return this._parentMenu?.orientation ?? 'horizontal';\n }\n\n private get _trigger(): MenuTrigger {\n return this._parentMenu?.trigger ?? 'click';\n }\n\n private get _wrapText(): boolean {\n return this._parentMenu?.wrapText ?? false;\n }\n\n private get _isParent(): boolean {\n return this.label != null && this.label !== '';\n }\n\n /** Compute flyout panel placement based on depth and parent orientation. */\n private get _panelPlacement(): 'bottom' | 'right' {\n const isNested = !!this.parentElement?.closest('ae-menu-item');\n if (!isNested && this._orientation === 'horizontal') return 'bottom';\n return 'right';\n }\n\n private _isHoverTrigger(): boolean {\n return this._isParent && this._mode === 'flyout' && this._trigger === 'hover';\n }\n\n private _handleMouseEnter = (): void => {\n if (!this._isHoverTrigger()) return;\n if (this._closeTimer !== null) {\n clearTimeout(this._closeTimer);\n this._closeTimer = null;\n }\n this.open = true;\n };\n\n private _handleMouseLeave = (): void => {\n if (!this._isHoverTrigger()) return;\n this._closeTimer = setTimeout(() => {\n this.open = false;\n this._closeTimer = null;\n }, 150);\n };\n\n private _handleParentClick = (): void => {\n if (this.disabled) return;\n const mode = this._mode;\n const trigger = this._trigger;\n // In hover mode, click should still toggle (accessibility)\n if (mode === 'flyout' && trigger === 'hover') {\n this.open = !this.open;\n return;\n }\n this.open = !this.open;\n };\n\n private _handleLeafClick = (e: Event): void => {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n const path = this._buildKeyPath();\n const label = this.textContent?.trim() ?? '';\n this.dispatchEvent(\n new CustomEvent('_menu-item-select', {\n bubbles: true,\n composed: true,\n detail: { key: this.key ?? '', label, keyPath: path },\n }),\n );\n };\n\n private _handleChildSelect = (): void => {\n // Close flyout panel after a child leaf is selected\n if (this._mode === 'flyout') {\n this.open = false;\n }\n };\n\n private _handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n e.stopPropagation();\n this.open = false;\n }\n };\n\n private _buildKeyPath(): string[] {\n const path: string[] = [];\n if (this.key) path.unshift(this.key);\n let el: Element | null = this.parentElement;\n while (el) {\n const tag = el.tagName.toLowerCase();\n if (tag === 'ae-menu-item') {\n const k = (el as MenuItem).key;\n if (k) path.unshift(k);\n } else if (tag === 'ae-menu') {\n break;\n }\n el = el.parentElement;\n }\n return path;\n }\n\n protected render() {\n const mode = this._mode;\n const panelPlacement = this._panelPlacement;\n const isParent = this._isParent;\n const isInline = mode === 'inline';\n // Arrow direction: inline always shows \u25BA (rotates to \u25BC on open)\n // flyout-bottom shows \u25BC; flyout-right shows \u25BA\n const arrowDir = !isInline && panelPlacement === 'bottom' ? 'bottom' : 'right';\n const wrapText = this._wrapText;\n // Leaf items inside a submenu panel (depth > 0) need different padding\n const isNested = !!this.parentElement?.closest('ae-menu-item');\n\n return html(({ div, button, a, span, slot }) => {\n if (isParent) {\n div({ className: 'item-wrapper' }, () => {\n button(\n {\n type: 'button',\n className: {\n item: true,\n 'item--parent': true,\n 'item--open': this.open,\n 'item--wrap': wrapText,\n },\n disabled: this.disabled,\n 'aria-haspopup': 'menu',\n 'aria-expanded': String(this.open),\n '@click': this._handleParentClick,\n '@keydown': this._handleKeydown,\n },\n () => {\n span({ text: this.label });\n slot({ name: 'expand' }, () => {\n span({ className: `item-arrow item-arrow--${arrowDir}`, 'aria-hidden': 'true' });\n });\n slot({ name: 'collapse' }, () => {\n span({ className: `item-arrow item-arrow--${arrowDir}`, 'aria-hidden': 'true' });\n });\n },\n );\n\n if (isInline) {\n div(\n {\n className: { 'submenu-inline': true, open: this.open },\n role: 'menu',\n },\n () => {\n slot();\n },\n );\n } else {\n div(\n {\n className: {\n 'submenu-panel': true,\n [`placement-${panelPlacement}`]: true,\n open: this.open,\n },\n role: 'menu',\n },\n () => {\n slot();\n },\n );\n }\n });\n } else {\n // Leaf item\n const sharedProps = {\n className: { item: true, 'item--leaf-in-panel': isNested, 'item--wrap': wrapText },\n role: 'menuitem',\n '@click': this._handleLeafClick,\n '@keydown': this._handleKeydown,\n };\n\n if (this.href) {\n a(\n {\n ...sharedProps,\n href: this.disabled ? undefined : this.href,\n 'aria-disabled': this.disabled ? 'true' : undefined,\n },\n () => {\n slot();\n },\n );\n } else {\n button(\n {\n ...sharedProps,\n type: 'button',\n disabled: this.disabled,\n },\n () => {\n slot();\n },\n );\n }\n }\n });\n }\n}\n\nMenuItem.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-menu-item': MenuItem;\n }\n}\n\nexport default MenuItem;\nexport type MenuItemProps = InferProps<typeof MenuItem>;\nexport type { MenuIconPlacement };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,kGAAAA,UAAAC,SAAA;AAAA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACAjB;AAAA,4FAAAC,UAAAC,SAAA;AAAA,IAAAA,QAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA
|
|
3
|
+
"sources": ["css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/menu.css", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/variables.css", "css-inline:/home/runner/work/aeico-components/aeico-components/src/styles/components/menu-item.css", "../src/menu/index.ts", "../src/aeico-component.ts", "../src/menu/menu.ts", "../src/menu/menu-item.ts"],
|
|
4
|
+
"sourcesContent": ["module.exports = \":host {\\n display: block;\\n}\\n\\n.menu-list {\\n display: flex;\\n flex-direction: column;\\n margin: 0;\\n padding: 0;\\n list-style: none;\\n gap: 0;\\n}\\n\\n.menu-list--horizontal {\\n flex-direction: row;\\n align-items: stretch;\\n}\\n\"", "module.exports = \":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\"", "module.exports = \":host {\\n display: block;\\n position: relative;\\n\\n --menu-item-height: 2.5rem;\\n --menu-item-padding-x: 0.875rem;\\n --menu-item-font-size: 0.9375rem;\\n --menu-item-color: inherit;\\n --menu-item-color-disabled: var(--ae-color-text-disabled);\\n --menu-item-bg: transparent;\\n --menu-item-bg-hover: var(--ae-surface-raised, rgba(0, 0, 0, 0.05));\\n --menu-item-active-color: var(--ae-color-primary, var(--ae-blue-500));\\n --menu-item-active-border-color: var(--ae-color-primary, var(--ae-blue-500));\\n\\n --submenu-z-index: 1001;\\n --submenu-bg: var(--ae-surface-overlay, #fff);\\n --submenu-border: 1px solid var(--ae-border-default);\\n --submenu-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\\n --submenu-min-width: 10rem;\\n --submenu-padding: 0.25rem 0;\\n}\\n\\n.item {\\n display: inline-flex;\\n align-items: center;\\n gap: 0.4rem;\\n width: 100%;\\n height: var(--menu-item-height);\\n padding: 0 var(--menu-item-padding-x);\\n font-size: var(--menu-item-font-size);\\n font-family: inherit;\\n color: var(--menu-item-color);\\n background: var(--menu-item-bg);\\n border: none;\\n border-bottom: 2px solid transparent;\\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 outline: none;\\n transition: background 0.1s, color 0.1s, border-color 0.1s;\\n -webkit-appearance: none;\\n appearance: none;\\n}\\n\\n.item--leaf-in-panel {\\n height: auto;\\n padding: 0.5rem var(--menu-item-padding-x);\\n border-bottom: none;\\n}\\n\\n.item--wrap {\\n white-space: normal;\\n height: auto;\\n min-height: var(--menu-item-height);\\n}\\n\\n.item:hover:not(:disabled) {\\n background: var(--menu-item-bg-hover);\\n}\\n\\n.item:focus-visible {\\n background: var(--menu-item-bg-hover);\\n outline: 2px solid var(--menu-item-active-color);\\n outline-offset: -2px;\\n}\\n\\n:host([disabled]) .item,\\n.item:disabled {\\n color: var(--menu-item-color-disabled);\\n cursor: not-allowed;\\n pointer-events: none;\\n}\\n\\n:host([selected]) .item {\\n color: var(--menu-item-active-color);\\n border-bottom-color: var(--menu-item-active-border-color);\\n}\\n\\n.item-arrow {\\n display: inline-block;\\n width: 0;\\n height: 0;\\n flex-shrink: 0;\\n}\\n\\n.item-arrow--right {\\n border-top: 0.3em solid transparent;\\n border-bottom: 0.3em solid transparent;\\n border-left: 0.3em solid;\\n}\\n\\n.item-arrow--bottom {\\n border-left: 0.3em solid transparent;\\n border-right: 0.3em solid transparent;\\n border-top: 0.3em solid;\\n}\\n\\n.item--open .item-arrow--right {\\n transform: rotate(90deg);\\n}\\n\\nslot[name=\\\"expand\\\"],\\nslot[name=\\\"collapse\\\"] {\\n display: inline-flex;\\n align-items: center;\\n margin-inline-start: auto;\\n flex-shrink: 0;\\n}\\n\\nslot[name=\\\"collapse\\\"] {\\n display: none;\\n}\\n\\n.item--open slot[name=\\\"expand\\\"] {\\n display: none;\\n}\\n\\n.item--open slot[name=\\\"collapse\\\"] {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\nslot[name=\\\"collapse\\\"] .item-arrow--right {\\n transform: rotate(90deg);\\n}\\n\\n:host([icon-placement=\\\"start\\\"]) slot[name=\\\"expand\\\"],\\n:host([icon-placement=\\\"start\\\"]) slot[name=\\\"collapse\\\"] {\\n order: -1;\\n margin-inline-start: 0;\\n}\\n\\n.submenu-panel {\\n display: none;\\n position: absolute;\\n z-index: var(--submenu-z-index);\\n background: var(--submenu-bg);\\n border: var(--submenu-border);\\n border-radius: var(--ae-border-radius, var(--ae-radius-md));\\n box-shadow: var(--submenu-shadow);\\n min-width: var(--submenu-min-width);\\n padding: var(--submenu-padding);\\n box-sizing: border-box;\\n max-width: calc(100vw - 16px);\\n}\\n\\n.submenu-panel.open {\\n display: block;\\n}\\n\\n.submenu-panel.placement-bottom {\\n top: 100%;\\n left: 0;\\n margin-top: 2px;\\n}\\n\\n.submenu-panel.placement-right {\\n top: 0;\\n left: 100%;\\n margin-left: 2px;\\n}\\n\\n.submenu-inline {\\n display: none;\\n padding-left: 1rem;\\n}\\n\\n.submenu-inline.open {\\n display: block;\\n}\\n\"", "export { default as Menu } from './menu';\nexport { default as MenuItem } from './menu-item';\nexport type { MenuProps } from './menu';\nexport type { MenuItemProps } from './menu-item';\nexport type { MenuMode, MenuOrientation, MenuTrigger, MenuSelectDetail } from './defines';\n", "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, prop } from 'aeico';\nimport style from '../styles/components/menu.css';\nimport variables from '../styles/variables.css';\nimport type { MenuMode, MenuOrientation, MenuSelectDetail, MenuTrigger } from './defines';\n// Ensure ae-menu-item is registered when this module is used\nimport './menu-item';\n\n/**\n * Menu navigation component. Renders a horizontal or vertical menu with\n * optional two-level flyout or inline (accordion) submenus.\n *\n * Two modes:\n * - `flyout` (default) - submenus open as floating panels (like a nav bar or\n * context menu).\n * - `inline` - submenus expand in-place (accordion-style sidebar).\n *\n * Emits:\n * - `select` - `{ detail: { key, label, keyPath } }` when a leaf item is clicked.\n */\nclass Menu extends AeicoComponent {\n protected static styles = [variables, style];\n\n @prop({ type: String })\n accessor mode: MenuMode = 'flyout';\n\n @prop({ type: String })\n accessor orientation: MenuOrientation = 'horizontal';\n\n @prop({ type: String })\n accessor trigger: MenuTrigger = 'click';\n\n @prop({ type: String })\n accessor selectedKey: string | undefined;\n\n @prop({ type: Boolean })\n accessor wrapText: boolean = false;\n\n connectedCallback() {\n super.connectedCallback();\n this.listen('_menu-item-select', this._handleItemSelect as EventListener);\n }\n\n private _handleItemSelect = (e: CustomEvent<MenuSelectDetail>): void => {\n const { key, label, keyPath } = e.detail;\n // Update visual selection on all leaf items\n this.querySelectorAll('ae-menu-item').forEach((el) => {\n const item = el;\n item.selected = item.key === key && !item.label; // only leaf items\n });\n this.selectedKey = key;\n this.emit('select', { detail: { key, label, keyPath } });\n };\n\n protected render() {\n const isHorizontal = this.orientation === 'horizontal';\n return html(({ div, slot }) => {\n div(\n {\n className: { 'menu-list': true, 'menu-list--horizontal': isHorizontal },\n role: isHorizontal ? 'menubar' : 'menu',\n 'aria-orientation': this.orientation,\n },\n () => {\n slot();\n },\n );\n });\n }\n}\n\nMenu.define('menu');\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-menu': Menu;\n }\n}\n\nexport default Menu;\nexport type MenuProps = InferProps<typeof Menu>;\n", "import AeicoComponent from '../aeico-component';\nimport type { InferProps } from 'aeico';\nimport { html, prop } from 'aeico';\nimport style from '../styles/components/menu-item.css';\nimport variables from '../styles/variables.css';\nimport type {\n MenuMode,\n MenuOrientation,\n MenuTrigger,\n ParentMenuLike,\n MenuIconPlacement,\n} from './defines';\n\n/**\n * Menu item - used as a direct child of `<ae-menu>` or nested inside another\n * `<ae-menu-item>` to create a two-level submenu.\n *\n * - **Leaf item**: omit `label`; slot contains the item text.\n * - **Parent item**: set `label` to the trigger text; slot children are\n * `<ae-menu-item>` elements that appear in the submenu panel/section.\n *\n * **Slots (parent items only)**\n * - `expand` - icon shown when the submenu is closed (default: CSS triangle).\n * - `collapse` - icon shown when the submenu is open (default: rotated CSS triangle).\n *\n * @example\n * ```html\n * <ae-menu-item label=\"Settings\" icon-placement=\"start\">\n * <ae-icon name=\"chevron-right\" slot=\"expand\"></ae-icon>\n * <ae-icon name=\"chevron-down\" slot=\"collapse\"></ae-icon>\n * <ae-menu-item key=\"profile\">Profile</ae-menu-item>\n * </ae-menu-item>\n * ```\n */\nclass MenuItem extends AeicoComponent {\n protected static styles = [variables, style];\n\n @prop({ type: String })\n accessor key: string | undefined;\n\n @prop({ type: String })\n accessor label: string | undefined;\n\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n @prop({ type: String })\n accessor href: string | undefined;\n\n @prop({ type: Boolean })\n accessor selected: boolean = false;\n\n @prop({ type: Boolean })\n accessor open: boolean = false;\n\n @prop({ type: String })\n accessor iconPlacement: MenuIconPlacement = 'end';\n\n private _outsideClickHandler: ((e: MouseEvent) => void) | null = null;\n private _closeTimer: ReturnType<typeof setTimeout> | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n\n // data-depth lets CSS apply depth-specific styles without JS\n const depth = this.parentElement?.closest('ae-menu-item') ? 1 : 0;\n this.dataset.depth = String(depth);\n\n // Hover listeners - check mode/trigger at runtime\n this.listen('mouseenter', this._handleMouseEnter);\n this.listen('mouseleave', this._handleMouseLeave);\n\n // Outside-click to close flyout panel (not applicable in inline mode)\n this._outsideClickHandler = (e: MouseEvent) => {\n if (!this.open) return;\n if (this._mode === 'inline') return;\n if (!e.composedPath().includes(this)) this.open = false;\n };\n\n document.addEventListener('click', this._outsideClickHandler);\n\n // Close own submenu when a leaf inside it is selected (flyout)\n this.listen('_menu-item-select', this._handleChildSelect as EventListener);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._outsideClickHandler) {\n document.removeEventListener('click', this._outsideClickHandler);\n this._outsideClickHandler = null;\n }\n if (this._closeTimer !== null) {\n clearTimeout(this._closeTimer);\n this._closeTimer = null;\n }\n }\n\n private get _parentMenu(): ParentMenuLike | null {\n return this.closest<ParentMenuLike>('ae-menu');\n }\n\n private get _mode(): MenuMode {\n return this._parentMenu?.mode ?? 'flyout';\n }\n\n private get _orientation(): MenuOrientation {\n return this._parentMenu?.orientation ?? 'horizontal';\n }\n\n private get _trigger(): MenuTrigger {\n return this._parentMenu?.trigger ?? 'click';\n }\n\n private get _wrapText(): boolean {\n return this._parentMenu?.wrapText ?? false;\n }\n\n private get _isParent(): boolean {\n return this.label != null && this.label !== '';\n }\n\n /** Compute flyout panel placement based on depth and parent orientation. */\n private get _panelPlacement(): 'bottom' | 'right' {\n const isNested = !!this.parentElement?.closest('ae-menu-item');\n if (!isNested && this._orientation === 'horizontal') return 'bottom';\n return 'right';\n }\n\n private _isHoverTrigger(): boolean {\n return this._isParent && this._mode === 'flyout' && this._trigger === 'hover';\n }\n\n private _handleMouseEnter = (): void => {\n if (!this._isHoverTrigger()) return;\n if (this._closeTimer !== null) {\n clearTimeout(this._closeTimer);\n this._closeTimer = null;\n }\n this.open = true;\n };\n\n private _handleMouseLeave = (): void => {\n if (!this._isHoverTrigger()) return;\n this._closeTimer = setTimeout(() => {\n this.open = false;\n this._closeTimer = null;\n }, 150);\n };\n\n private _handleParentClick = (): void => {\n if (this.disabled) return;\n const mode = this._mode;\n const trigger = this._trigger;\n // In hover mode, click should still toggle (accessibility)\n if (mode === 'flyout' && trigger === 'hover') {\n this.open = !this.open;\n return;\n }\n this.open = !this.open;\n };\n\n private _handleLeafClick = (e: Event): void => {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n const path = this._buildKeyPath();\n const label = this.textContent?.trim() ?? '';\n this.dispatchEvent(\n new CustomEvent('_menu-item-select', {\n bubbles: true,\n composed: true,\n detail: { key: this.key ?? '', label, keyPath: path },\n }),\n );\n };\n\n private _handleChildSelect = (): void => {\n // Close flyout panel after a child leaf is selected\n if (this._mode === 'flyout') {\n this.open = false;\n }\n };\n\n private _handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n e.stopPropagation();\n this.open = false;\n }\n };\n\n private _buildKeyPath(): string[] {\n const path: string[] = [];\n if (this.key) path.unshift(this.key);\n let el: Element | null = this.parentElement;\n while (el) {\n const tag = el.tagName.toLowerCase();\n if (tag === 'ae-menu-item') {\n const k = (el as MenuItem).key;\n if (k) path.unshift(k);\n } else if (tag === 'ae-menu') {\n break;\n }\n el = el.parentElement;\n }\n return path;\n }\n\n protected render() {\n const mode = this._mode;\n const panelPlacement = this._panelPlacement;\n const isParent = this._isParent;\n const isInline = mode === 'inline';\n // Arrow direction: inline always shows \u25BA (rotates to \u25BC on open)\n // flyout-bottom shows \u25BC; flyout-right shows \u25BA\n const arrowDir = !isInline && panelPlacement === 'bottom' ? 'bottom' : 'right';\n const wrapText = this._wrapText;\n // Leaf items inside a submenu panel (depth > 0) need different padding\n const isNested = !!this.parentElement?.closest('ae-menu-item');\n\n return html(({ div, button, a, span, slot }) => {\n if (isParent) {\n div({ className: 'item-wrapper' }, () => {\n button(\n {\n type: 'button',\n className: {\n item: true,\n 'item--parent': true,\n 'item--open': this.open,\n 'item--wrap': wrapText,\n },\n disabled: this.disabled,\n 'aria-haspopup': 'menu',\n 'aria-expanded': String(this.open),\n '@click': this._handleParentClick,\n '@keydown': this._handleKeydown,\n },\n () => {\n span({ text: this.label });\n slot({ name: 'expand' }, () => {\n span({ className: `item-arrow item-arrow--${arrowDir}`, 'aria-hidden': 'true' });\n });\n slot({ name: 'collapse' }, () => {\n span({ className: `item-arrow item-arrow--${arrowDir}`, 'aria-hidden': 'true' });\n });\n },\n );\n\n if (isInline) {\n div(\n {\n className: { 'submenu-inline': true, open: this.open },\n role: 'menu',\n },\n () => {\n slot();\n },\n );\n } else {\n div(\n {\n className: {\n 'submenu-panel': true,\n [`placement-${panelPlacement}`]: true,\n open: this.open,\n },\n role: 'menu',\n },\n () => {\n slot();\n },\n );\n }\n });\n } else {\n // Leaf item\n const sharedProps = {\n className: { item: true, 'item--leaf-in-panel': isNested, 'item--wrap': wrapText },\n role: 'menuitem',\n '@click': this._handleLeafClick,\n '@keydown': this._handleKeydown,\n };\n\n if (this.href) {\n a(\n {\n ...sharedProps,\n href: this.disabled ? undefined : this.href,\n 'aria-disabled': this.disabled ? 'true' : undefined,\n },\n () => {\n slot();\n },\n );\n } else {\n button(\n {\n ...sharedProps,\n type: 'button',\n disabled: this.disabled,\n },\n () => {\n slot();\n },\n );\n }\n }\n });\n }\n}\n\nMenuItem.define('menu-item');\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-menu-item': MenuItem;\n }\n}\n\nexport default MenuItem;\nexport type MenuItemProps = InferProps<typeof MenuItem>;\nexport type { MenuIconPlacement };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,kGAAAA,UAAAC,SAAA;AAAA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACAjB;AAAA,4FAAAC,UAAAC,SAAA;AAAA,IAAAA,QAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
|
|
6
6
|
"names": ["exports", "module", "exports", "module", "exports", "module", "import_aeico", "import_variables", "import_aeico", "variables", "style", "_a", "_init", "variables", "style"]
|
|
7
7
|
}
|
package/dist/menu.js
CHANGED
|
@@ -50,19 +50,12 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
|
|
|
50
50
|
|
|
51
51
|
// src/aeico-component.ts
|
|
52
52
|
import { AeicoElement } from "aeico";
|
|
53
|
-
|
|
54
|
-
// src/utils.ts
|
|
55
|
-
function toKebab(str) {
|
|
56
|
-
const cleaned = str.replace(/^[_\d]+/, "");
|
|
57
|
-
return cleaned.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// src/aeico-component.ts
|
|
61
53
|
var TAG_NAME_PREFIX = "ae";
|
|
62
54
|
var AeicoComponent = class extends AeicoElement {
|
|
63
|
-
static
|
|
64
|
-
const
|
|
65
|
-
|
|
55
|
+
static define(name) {
|
|
56
|
+
const prefix = `${TAG_NAME_PREFIX}-`;
|
|
57
|
+
const tagName = name.startsWith(prefix) ? name : `${prefix}${name}`;
|
|
58
|
+
super.define(tagName);
|
|
66
59
|
}
|
|
67
60
|
};
|
|
68
61
|
var aeico_component_default = AeicoComponent;
|
|
@@ -150,7 +143,7 @@ var variables_default = `:root,
|
|
|
150
143
|
--ae-cyan-800: color-mix(in srgb, var(--ae-cyan) 40%, black);
|
|
151
144
|
--ae-cyan-900: color-mix(in srgb, var(--ae-cyan) 20%, black);
|
|
152
145
|
|
|
153
|
-
/* Gray (neutral
|
|
146
|
+
/* Gray (neutral - base #6e6e6e) */
|
|
154
147
|
--ae-gray-100: color-mix(in srgb, var(--ae-gray) 20%, white);
|
|
155
148
|
--ae-gray-200: color-mix(in srgb, var(--ae-gray) 40%, white);
|
|
156
149
|
--ae-gray-300: color-mix(in srgb, var(--ae-gray) 60%, white);
|
|
@@ -161,7 +154,7 @@ var variables_default = `:root,
|
|
|
161
154
|
--ae-gray-800: color-mix(in srgb, var(--ae-gray) 40%, black);
|
|
162
155
|
--ae-gray-900: color-mix(in srgb, var(--ae-gray) 20%, black);
|
|
163
156
|
|
|
164
|
-
/* Slate (blue-gray
|
|
157
|
+
/* Slate (blue-gray - base #64748b, used for 'secondary') */
|
|
165
158
|
--ae-slate-100: color-mix(in srgb, var(--ae-slate) 20%, white);
|
|
166
159
|
--ae-slate-200: color-mix(in srgb, var(--ae-slate) 40%, white);
|
|
167
160
|
--ae-slate-300: color-mix(in srgb, var(--ae-slate) 60%, white);
|
|
@@ -197,7 +190,7 @@ var variables_default = `:root,
|
|
|
197
190
|
|
|
198
191
|
:root,
|
|
199
192
|
:host {
|
|
200
|
-
/* Hover / active mix (light default
|
|
193
|
+
/* Hover / active mix (light default - overridden in \xA7 6 dark) */
|
|
201
194
|
--ae-color-mix-hover: black 10%;
|
|
202
195
|
--ae-color-mix-active: black 20%;
|
|
203
196
|
|
|
@@ -231,7 +224,7 @@ var variables_default = `:root,
|
|
|
231
224
|
--ae-color-info-active: color-mix(in srgb, var(--ae-color-info), var(--ae-color-mix-active));
|
|
232
225
|
--ae-color-info-disabled: color-mix(in srgb, var(--ae-cyan) 50%, var(--ae-gray-500));
|
|
233
226
|
|
|
234
|
-
/* Secondary (Slate)
|
|
227
|
+
/* Secondary (Slate) - base differs per theme, overridden in \xA7 6 dark */
|
|
235
228
|
--ae-color-secondary: var(--ae-slate-500);
|
|
236
229
|
--ae-color-secondary-hover: color-mix(in srgb, var(--ae-color-secondary), var(--ae-color-mix-hover));
|
|
237
230
|
--ae-color-secondary-active: color-mix(in srgb, var(--ae-color-secondary), var(--ae-color-mix-active));
|
|
@@ -247,7 +240,7 @@ var variables_default = `:root,
|
|
|
247
240
|
:host {
|
|
248
241
|
color-scheme: light;
|
|
249
242
|
|
|
250
|
-
/* Gray UI aliases
|
|
243
|
+
/* Gray UI aliases - lighter palette steps for elements on white background */
|
|
251
244
|
--ae-color-gray-dark: var(--ae-gray-400);
|
|
252
245
|
--ae-color-gray: var(--ae-gray-300);
|
|
253
246
|
--ae-color-gray-light: var(--ae-gray-200);
|
|
@@ -279,7 +272,7 @@ var variables_default = `:root,
|
|
|
279
272
|
--ae-focus-ring: rgb(from var(--ae-blue) r g b / 0.30);
|
|
280
273
|
--ae-focus-ring-sm: rgb(from var(--ae-blue) r g b / 0.15);
|
|
281
274
|
|
|
282
|
-
/* Subtle intent tokens
|
|
275
|
+
/* Subtle intent tokens - light context */
|
|
283
276
|
--ae-color-primary-bg-subtle: rgb(from var(--ae-blue) r g b / 0.08);
|
|
284
277
|
--ae-color-primary-border-subtle: rgb(from var(--ae-blue) r g b / 0.40);
|
|
285
278
|
--ae-color-primary-text-emphasis: var(--ae-blue-700);
|
|
@@ -310,7 +303,7 @@ var variables_default = `:root,
|
|
|
310
303
|
--ae-color-dark-bg-subtle: var(--ae-dark-100); /* opaque on white: ~#d6d8d9 */
|
|
311
304
|
--ae-color-dark-border-subtle: var(--ae-dark-300); /* opaque on white: ~#85898c */
|
|
312
305
|
|
|
313
|
-
/* Component tokens
|
|
306
|
+
/* Component tokens - light defaults */
|
|
314
307
|
--ae-action-btn-bg: var(--ae-gray-200);
|
|
315
308
|
--ae-action-btn-bg-hover: var(--ae-color-primary);
|
|
316
309
|
--ae-action-btn-color: var(--ae-gray-600);
|
|
@@ -345,14 +338,12 @@ var variables_default = `:root,
|
|
|
345
338
|
--ae-size-3xs: round(calc(var(--ae-size-2xs) / 1.125), 1px); /* 10px */
|
|
346
339
|
}
|
|
347
340
|
|
|
348
|
-
/* Border-radius tokens
|
|
341
|
+
/* Border-radius tokens - shared across all components */
|
|
349
342
|
:root,
|
|
350
343
|
:host {
|
|
351
344
|
/**
|
|
352
345
|
* Unified border-radius hook for all components.
|
|
353
346
|
*
|
|
354
|
-
* Not set by default \u2014 each component falls back to its own --ae-radius-*
|
|
355
|
-
* token (e.g. button \u2192 sm, card \u2192 lg, input \u2192 xs).
|
|
356
347
|
*
|
|
357
348
|
* Usage:
|
|
358
349
|
* :root { --ae-border-radius: 0; } // global: all components square
|
|
@@ -374,7 +365,7 @@ var variables_default = `:root,
|
|
|
374
365
|
--ae-radius-circle: 50%;
|
|
375
366
|
}
|
|
376
367
|
|
|
377
|
-
/* Layout tokens
|
|
368
|
+
/* Layout tokens - defined on :root so all light DOM elements can use them */
|
|
378
369
|
:root,
|
|
379
370
|
:host {
|
|
380
371
|
--container-max-width: 1280px;
|
|
@@ -387,18 +378,18 @@ var variables_default = `:root,
|
|
|
387
378
|
:host-context([theme="dark"]) {
|
|
388
379
|
color-scheme: dark;
|
|
389
380
|
|
|
390
|
-
/* Hover / active
|
|
381
|
+
/* Hover / active - slightly gentler on dark backgrounds */
|
|
391
382
|
--ae-color-mix-hover: black 8%;
|
|
392
383
|
--ae-color-mix-active: black 16%;
|
|
393
384
|
|
|
394
|
-
/* Gray UI aliases
|
|
385
|
+
/* Gray UI aliases - darker palette steps for elements on dark background */
|
|
395
386
|
--ae-color-gray-dark: var(--ae-gray-800);
|
|
396
387
|
--ae-color-gray: var(--ae-gray-700);
|
|
397
388
|
--ae-color-gray-light: var(--ae-gray-600);
|
|
398
389
|
--ae-color-gray-lighter: var(--ae-gray-500);
|
|
399
390
|
--ae-color-gray-lightest: var(--ae-gray-400);
|
|
400
391
|
|
|
401
|
-
/* Secondary
|
|
392
|
+
/* Secondary - deeper base on dark background */
|
|
402
393
|
--ae-color-secondary: var(--ae-slate-700);
|
|
403
394
|
--ae-color-secondary-text: var(--ae-slate-300);
|
|
404
395
|
|
|
@@ -427,7 +418,7 @@ var variables_default = `:root,
|
|
|
427
418
|
--ae-focus-ring: rgb(from var(--ae-blue) r g b / 0.25);
|
|
428
419
|
--ae-focus-ring-sm: rgb(from var(--ae-blue) r g b / 0.10);
|
|
429
420
|
|
|
430
|
-
/* Subtle intent tokens
|
|
421
|
+
/* Subtle intent tokens - dark context (more alpha, lighter text-emphasis) */
|
|
431
422
|
--ae-color-primary-bg-subtle: rgb(from var(--ae-blue) r g b / 0.10);
|
|
432
423
|
--ae-color-primary-border-subtle: rgb(from var(--ae-blue) r g b / 0.30);
|
|
433
424
|
--ae-color-primary-text-emphasis: var(--ae-blue-300);
|
|
@@ -458,7 +449,7 @@ var variables_default = `:root,
|
|
|
458
449
|
--ae-color-dark-bg-subtle: rgb(from var(--ae-dark) r g b / 0.30);
|
|
459
450
|
--ae-color-dark-border-subtle: rgb(from var(--ae-dark) r g b / 0.50);
|
|
460
451
|
|
|
461
|
-
/* Component tokens
|
|
452
|
+
/* Component tokens - dark overrides */
|
|
462
453
|
--ae-action-btn-bg: var(--ae-color-gray);
|
|
463
454
|
--ae-action-btn-bg-hover: color-mix(in srgb, var(--ae-blue) 25%, var(--ae-gray-800));
|
|
464
455
|
--ae-action-btn-color: var(--ae-gray-400);
|
|
@@ -720,9 +711,8 @@ __decorateElement(_init, 4, "selected", _selected_dec, MenuItem, _selected);
|
|
|
720
711
|
__decorateElement(_init, 4, "open", _open_dec, MenuItem, _open);
|
|
721
712
|
__decorateElement(_init, 4, "iconPlacement", _iconPlacement_dec, MenuItem, _iconPlacement);
|
|
722
713
|
__decoratorMetadata(_init, MenuItem);
|
|
723
|
-
__publicField(MenuItem, "tagName", "menu-item");
|
|
724
714
|
__publicField(MenuItem, "styles", [variables_default, menu_item_default]);
|
|
725
|
-
MenuItem.
|
|
715
|
+
MenuItem.define("menu-item");
|
|
726
716
|
var menu_item_default2 = MenuItem;
|
|
727
717
|
|
|
728
718
|
// src/menu/menu.ts
|
|
@@ -777,9 +767,8 @@ __decorateElement(_init2, 4, "trigger", _trigger_dec, Menu, _trigger);
|
|
|
777
767
|
__decorateElement(_init2, 4, "selectedKey", _selectedKey_dec, Menu, _selectedKey);
|
|
778
768
|
__decorateElement(_init2, 4, "wrapText", _wrapText_dec, Menu, _wrapText);
|
|
779
769
|
__decoratorMetadata(_init2, Menu);
|
|
780
|
-
__publicField(Menu, "tagName", "menu");
|
|
781
770
|
__publicField(Menu, "styles", [variables_default, menu_default]);
|
|
782
|
-
Menu.
|
|
771
|
+
Menu.define("menu");
|
|
783
772
|
var menu_default2 = Menu;
|
|
784
773
|
export {
|
|
785
774
|
menu_default2 as Menu,
|