aeico-components 0.1.3 → 0.1.5
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 +6 -0
- package/dist/alert.cjs.map +1 -0
- package/dist/alert.js +6 -0
- package/dist/alert.js.map +1 -0
- package/dist/badge.cjs +6 -0
- package/dist/badge.cjs.map +1 -0
- package/dist/badge.js +6 -0
- package/dist/badge.js.map +1 -0
- package/dist/breadcrumb.cjs +7 -0
- package/dist/breadcrumb.cjs.map +1 -0
- package/dist/breadcrumb.js +7 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/button-group.cjs +6 -0
- package/dist/button-group.cjs.map +1 -0
- package/dist/button-group.js +6 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.cjs +6 -0
- package/dist/button.cjs.map +1 -0
- package/dist/button.js +6 -0
- package/dist/button.js.map +1 -0
- package/dist/card.cjs +6 -0
- package/dist/card.cjs.map +1 -0
- package/dist/card.js +6 -0
- package/dist/card.js.map +1 -0
- package/dist/checkbox.cjs +6 -0
- package/dist/checkbox.cjs.map +1 -0
- package/dist/checkbox.js +6 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chunks/aeico-component.cjs +17 -0
- package/dist/chunks/aeico-component.cjs.map +1 -0
- package/dist/chunks/aeico-component.js +18 -0
- package/dist/chunks/aeico-component.js.map +1 -0
- package/dist/chunks/aeico-field.cjs +179 -0
- package/dist/chunks/aeico-field.cjs.map +1 -0
- package/dist/chunks/aeico-field.js +180 -0
- package/dist/chunks/aeico-field.js.map +1 -0
- package/dist/chunks/alert.cjs +170 -0
- package/dist/chunks/alert.cjs.map +1 -0
- package/dist/chunks/alert.js +171 -0
- package/dist/chunks/alert.js.map +1 -0
- package/dist/chunks/badge.cjs +85 -0
- package/dist/chunks/badge.cjs.map +1 -0
- package/dist/chunks/badge.js +86 -0
- package/dist/chunks/badge.js.map +1 -0
- package/dist/chunks/breadcrumb-item.cjs +261 -0
- package/dist/chunks/breadcrumb-item.cjs.map +1 -0
- package/dist/chunks/breadcrumb-item.js +262 -0
- package/dist/chunks/breadcrumb-item.js.map +1 -0
- package/dist/chunks/button-group.cjs +79 -0
- package/dist/chunks/button-group.cjs.map +1 -0
- package/dist/chunks/button-group.js +80 -0
- package/dist/chunks/button-group.js.map +1 -0
- package/dist/chunks/button.cjs +348 -0
- package/dist/chunks/button.cjs.map +1 -0
- package/dist/chunks/button.js +349 -0
- package/dist/chunks/button.js.map +1 -0
- package/dist/chunks/card.cjs +93 -0
- package/dist/chunks/card.cjs.map +1 -0
- package/dist/chunks/card.js +94 -0
- package/dist/chunks/card.js.map +1 -0
- package/dist/chunks/checkbox.cjs +73 -0
- package/dist/chunks/checkbox.cjs.map +1 -0
- package/dist/chunks/checkbox.js +74 -0
- package/dist/chunks/checkbox.js.map +1 -0
- package/dist/chunks/color.cjs +4 -0
- package/dist/chunks/color.cjs.map +1 -0
- package/dist/chunks/color.js +5 -0
- package/dist/chunks/color.js.map +1 -0
- package/dist/chunks/detail.cjs +143 -0
- package/dist/chunks/detail.cjs.map +1 -0
- package/dist/chunks/detail.js +144 -0
- package/dist/chunks/detail.js.map +1 -0
- package/dist/chunks/dialog.cjs +117 -0
- package/dist/chunks/dialog.cjs.map +1 -0
- package/dist/chunks/dialog.js +118 -0
- package/dist/chunks/dialog.js.map +1 -0
- package/dist/chunks/divider.cjs +80 -0
- package/dist/chunks/divider.cjs.map +1 -0
- package/dist/chunks/divider.js +81 -0
- package/dist/chunks/divider.js.map +1 -0
- package/dist/chunks/dropdown-button.cjs +534 -0
- package/dist/chunks/dropdown-button.cjs.map +1 -0
- package/dist/chunks/dropdown-button.js +535 -0
- package/dist/chunks/dropdown-button.js.map +1 -0
- package/dist/chunks/icon-button.cjs +35 -0
- package/dist/chunks/icon-button.cjs.map +1 -0
- package/dist/chunks/icon-button.js +36 -0
- package/dist/chunks/icon-button.js.map +1 -0
- package/dist/chunks/icon.cjs +78 -0
- package/dist/chunks/icon.cjs.map +1 -0
- package/dist/chunks/icon.js +79 -0
- package/dist/chunks/icon.js.map +1 -0
- package/dist/chunks/navbar.cjs +142 -0
- package/dist/chunks/navbar.cjs.map +1 -0
- package/dist/chunks/navbar.js +143 -0
- package/dist/chunks/navbar.js.map +1 -0
- package/dist/chunks/radio.cjs +181 -0
- package/dist/chunks/radio.cjs.map +1 -0
- package/dist/chunks/radio.js +182 -0
- package/dist/chunks/radio.js.map +1 -0
- package/dist/chunks/select.cjs +350 -0
- package/dist/chunks/select.cjs.map +1 -0
- package/dist/chunks/select.js +351 -0
- package/dist/chunks/select.js.map +1 -0
- package/dist/chunks/size.cjs +4 -0
- package/dist/chunks/size.cjs.map +1 -0
- package/dist/chunks/size.js +5 -0
- package/dist/chunks/size.js.map +1 -0
- package/dist/chunks/slider.cjs +648 -0
- package/dist/chunks/slider.cjs.map +1 -0
- package/dist/chunks/slider.js +649 -0
- package/dist/chunks/slider.js.map +1 -0
- package/dist/chunks/switch.cjs +73 -0
- package/dist/chunks/switch.cjs.map +1 -0
- package/dist/chunks/switch.js +74 -0
- package/dist/chunks/switch.js.map +1 -0
- package/dist/chunks/tab-panel.cjs +165 -0
- package/dist/chunks/tab-panel.cjs.map +1 -0
- package/dist/chunks/tab-panel.js +166 -0
- package/dist/chunks/tab-panel.js.map +1 -0
- package/dist/chunks/tag.cjs +108 -0
- package/dist/chunks/tag.cjs.map +1 -0
- package/dist/chunks/tag.js +109 -0
- package/dist/chunks/tag.js.map +1 -0
- package/dist/chunks/text-input.cjs +59 -0
- package/dist/chunks/text-input.cjs.map +1 -0
- package/dist/chunks/text-input.js +60 -0
- package/dist/chunks/text-input.js.map +1 -0
- package/dist/chunks/variables.cjs +372 -0
- package/dist/chunks/variables.cjs.map +1 -0
- package/dist/chunks/variables.js +373 -0
- package/dist/chunks/variables.js.map +1 -0
- package/dist/detail.cjs +6 -0
- package/dist/detail.cjs.map +1 -0
- package/dist/detail.js +6 -0
- package/dist/detail.js.map +1 -0
- package/dist/dialog.cjs +6 -0
- package/dist/dialog.cjs.map +1 -0
- package/dist/dialog.js +6 -0
- package/dist/dialog.js.map +1 -0
- package/dist/divider.cjs +6 -0
- package/dist/divider.cjs.map +1 -0
- package/dist/divider.js +6 -0
- package/dist/divider.js.map +1 -0
- package/dist/dropdown.cjs +7 -0
- package/dist/dropdown.cjs.map +1 -0
- package/dist/dropdown.js +7 -0
- package/dist/dropdown.js.map +1 -0
- package/dist/icon-button.cjs +6 -0
- package/dist/icon-button.cjs.map +1 -0
- package/dist/icon-button.js +6 -0
- package/dist/icon-button.js.map +1 -0
- package/dist/icon.cjs +6 -0
- package/dist/icon.cjs.map +1 -0
- package/dist/icon.js +6 -0
- package/dist/icon.js.map +1 -0
- package/dist/index.cjs +93 -4168
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +92 -4167
- package/dist/index.js.map +1 -1
- package/dist/navbar.cjs +6 -0
- package/dist/navbar.cjs.map +1 -0
- package/dist/navbar.js +6 -0
- package/dist/navbar.js.map +1 -0
- package/dist/radio-group.cjs +7 -0
- package/dist/radio-group.cjs.map +1 -0
- package/dist/radio-group.js +7 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/select.cjs +99 -0
- package/dist/select.cjs.map +1 -0
- package/dist/select.js +99 -0
- package/dist/select.js.map +1 -0
- package/dist/slider.cjs +6 -0
- package/dist/slider.cjs.map +1 -0
- package/dist/slider.js +6 -0
- package/dist/slider.js.map +1 -0
- package/dist/switch.cjs +6 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.js +6 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.cjs +8 -0
- package/dist/tabs.cjs.map +1 -0
- package/dist/tabs.js +8 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tag.cjs +5 -0
- package/dist/tag.cjs.map +1 -0
- package/dist/tag.js +5 -0
- package/dist/tag.js.map +1 -0
- package/dist/text-input.cjs +6 -0
- package/dist/text-input.cjs.map +1 -0
- package/dist/text-input.js +6 -0
- package/dist/text-input.js.map +1 -0
- package/dist/types/aeico-field.d.ts +5 -5
- package/dist/types/button/button.d.ts +2 -1
- package/dist/types/checkbox/checkbox.d.ts +5 -5
- package/dist/types/index.d.ts +2 -0
- package/dist/types/progress-bar/defines.d.ts +1 -0
- package/dist/types/progress-bar/index.d.ts +3 -0
- package/dist/types/progress-bar/progress-bar.d.ts +37 -0
- package/dist/types/radio-group/radio-group.d.ts +1 -1
- package/dist/types/select/select.d.ts +1 -1
- package/dist/types/switch/switch.d.ts +5 -5
- package/package.json +16 -4
- package/src/aeico-field.ts +12 -8
- package/src/button/button.ts +11 -13
- package/src/checkbox/checkbox.ts +4 -4
- package/src/index.ts +2 -0
- package/src/navbar/navbar.ts +1 -3
- package/src/progress-bar/defines.ts +8 -0
- package/src/progress-bar/index.ts +3 -0
- package/src/progress-bar/progress-bar.ts +80 -0
- package/src/radio-group/radio-group.ts +1 -1
- package/src/select/select.ts +1 -1
- package/src/styles/components/progress-bar.css +44 -0
- package/src/switch/switch.ts +4 -4
- package/src/tabs/tab.ts +1 -1
- package/src/tabs/tabs.ts +1 -2
- package/src/utils.ts +1 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
const aeicoField = require("./aeico-field.cjs");
|
|
6
|
+
const aeico = require("aeico");
|
|
7
|
+
const variables = require("./variables.cjs");
|
|
8
|
+
const size = require("./size.cjs");
|
|
9
|
+
const color = require("./color.cjs");
|
|
10
|
+
const styles = ":host {\n display: block;\n font-size: var(--size-base);\n\n --switch-field-gap: 4px;\n\n --toggle-width: 2.667em;\n --toggle-height: 1.333em;\n --toggle-slider-size: 1em;\n --toggle-gap: calc((var(--toggle-height) - var(--toggle-slider-size)) / 2);\n --toggle-border-radius: calc(var(--toggle-height) / 2);\n --toggle-bg: var(--color-gray);\n --toggle-bg-checked: var(--color-solid);\n --toggle-slider-bg: white;\n --toggle-transition: 0.2s;\n\n /* Default color when no [color] attribute — overridden by color.css :host([color=...]) */\n --color-solid: var(--color-primary);\n}\n\n.switch-container {\n display: flex;\n align-items: center;\n gap: var(--switch-field-gap);\n}\n\n.switch-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: var(--toggle-width);\n height: var(--toggle-height);\n flex-shrink: 0;\n}\n\n.field-input {\n position: absolute;\n opacity: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n margin: 0;\n z-index: 1;\n border: none;\n border-radius: 0;\n background: none;\n accent-color: unset;\n}\n\n.field-input:disabled {\n cursor: not-allowed;\n}\n\n.toggle-slider {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--toggle-bg);\n border-radius: var(--toggle-border-radius);\n transition: var(--toggle-transition);\n pointer-events: none;\n}\n\n.toggle-slider::before {\n content: '';\n position: absolute;\n height: var(--toggle-slider-size);\n width: var(--toggle-slider-size);\n left: var(--toggle-gap);\n top: var(--toggle-gap);\n background: var(--toggle-slider-bg);\n border-radius: 50%;\n transition: var(--toggle-transition);\n}\n\n.field-input:checked + .toggle-slider {\n background: var(--toggle-bg-checked);\n}\n\n.field-input:checked + .toggle-slider::before {\n transform: translateX(calc(var(--toggle-width) - var(--toggle-height)));\n}\n\n.field-input:disabled + .toggle-slider {\n opacity: 0.5;\n pointer-events: auto;\n}\n\n/* action buttons */\n.reset-btn,\n.clear-btn {\n width: 1.333em;\n height: 1.333em;\n border: none;\n border-radius: var(--reset-btn-border-radius);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--reset-btn-bg);\n color: var(--reset-btn-color);\n transition: var(--reset-btn-transition);\n flex-shrink: 0;\n line-height: 1;\n}\n\n.reset-btn:hover {\n background: var(--reset-btn-bg-hover);\n color: var(--reset-btn-color-hover);\n}\n\n.clear-btn:hover {\n background: var(--clear-btn-bg-hover);\n color: var(--clear-btn-color-hover);\n}\n";
|
|
11
|
+
class Switch extends aeicoField.AeicoField {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
__publicField(this, "fieldElement", null);
|
|
15
|
+
}
|
|
16
|
+
getValue() {
|
|
17
|
+
var _a;
|
|
18
|
+
return ((_a = this.fieldElement) == null ? void 0 : _a.checked) ?? false;
|
|
19
|
+
}
|
|
20
|
+
writeValue(checked) {
|
|
21
|
+
if (this.fieldElement) {
|
|
22
|
+
this.fieldElement.checked = Boolean(checked);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
getEventPayload(checked, oldChecked, action) {
|
|
26
|
+
return { checked, oldChecked, action };
|
|
27
|
+
}
|
|
28
|
+
setValue(checked, options) {
|
|
29
|
+
const oldChecked = this.getValue();
|
|
30
|
+
this.checked = checked;
|
|
31
|
+
this.writeValue(checked);
|
|
32
|
+
if ((options == null ? void 0 : options.silent) === false) {
|
|
33
|
+
this.emit("change", {
|
|
34
|
+
detail: this.getEventPayload(checked, oldChecked, options.action || "change")
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
reset(checked, options) {
|
|
39
|
+
this.setValue(checked !== void 0 ? checked : this.defaultChecked ?? false, {
|
|
40
|
+
...options,
|
|
41
|
+
action: "reset"
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
clear(options) {
|
|
45
|
+
this.setValue(false, { ...options, action: "clear" });
|
|
46
|
+
}
|
|
47
|
+
render() {
|
|
48
|
+
return aeico.html(({ div, input, span }) => {
|
|
49
|
+
div({ className: "switch-container" }, () => {
|
|
50
|
+
div({ className: "switch-wrapper" }, () => {
|
|
51
|
+
this.fieldElement = input({
|
|
52
|
+
type: "checkbox",
|
|
53
|
+
className: "field-input",
|
|
54
|
+
checked: Boolean(this.checked),
|
|
55
|
+
disabled: Boolean(this.disabled),
|
|
56
|
+
"@change": this.boundOnChange
|
|
57
|
+
});
|
|
58
|
+
span({ className: "toggle-slider" });
|
|
59
|
+
});
|
|
60
|
+
this.renderActionButtons();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
__publicField(Switch, "tagName", "switch");
|
|
66
|
+
__publicField(Switch, "props", {
|
|
67
|
+
checked: { type: Boolean },
|
|
68
|
+
defaultChecked: { type: Boolean }
|
|
69
|
+
});
|
|
70
|
+
__publicField(Switch, "styles", [variables.styleVariables, size.sizeCSS, color.colorCSS, styles]);
|
|
71
|
+
Switch.register();
|
|
72
|
+
exports.Switch = Switch;
|
|
73
|
+
//# sourceMappingURL=switch.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.cjs","sources":["../../src/switch/switch.ts"],"sourcesContent":["import AeicoField, { type FieldAction } from '../aeico-field';\nimport type { InferProps, Props } from 'aeico';\nimport { html } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport sizeCSS from '../styles/size.css?inline';\nimport colorCSS from '../styles/color.css?inline';\nimport styles from '../styles/components/switch.css?inline';\n\nclass Switch extends AeicoField<boolean> {\n protected fieldElement: HTMLInputElement | null = null;\n\n static tagName = 'switch';\n\n static props: Props = {\n checked: { type: Boolean },\n defaultChecked: { type: Boolean },\n };\n\n declare checked?: boolean;\n declare defaultChecked?: boolean;\n\n protected static styles = [styleVariables, sizeCSS, colorCSS, styles];\n\n protected getValue(): boolean {\n return this.fieldElement?.checked ?? false;\n }\n\n protected writeValue(checked: boolean): void {\n if (this.fieldElement) {\n this.fieldElement.checked = Boolean(checked);\n }\n }\n\n protected getEventPayload(checked: boolean, oldChecked: boolean, action: FieldAction) {\n return { checked, oldChecked, action };\n }\n\n protected setValue(checked: boolean, options?: { silent?: boolean; action?: FieldAction }): void {\n const oldChecked = this.getValue();\n this.checked = checked;\n this.writeValue(checked);\n if (options?.silent === false) {\n this.emit('change', {\n detail: this.getEventPayload(checked, oldChecked, options.action || 'change'),\n });\n }\n }\n\n public reset(checked?: boolean, options?: { silent?: boolean }): void {\n this.setValue(checked !== undefined ? checked : (this.defaultChecked ?? false), {\n ...options,\n action: 'reset',\n });\n }\n\n public clear(options?: { silent?: boolean }): void {\n this.setValue(false, { ...options, action: 'clear' });\n }\n\n render() {\n return html(({ div, input, span }) => {\n div({ className: 'switch-container' }, () => {\n div({ className: 'switch-wrapper' }, () => {\n this.fieldElement = input({\n type: 'checkbox',\n className: 'field-input',\n checked: Boolean(this.checked),\n disabled: Boolean(this.disabled),\n '@change': this.boundOnChange,\n });\n span({ className: 'toggle-slider' });\n });\n this.renderActionButtons();\n });\n });\n }\n}\n\nSwitch.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-switch': Switch;\n }\n}\n\nexport default Switch;\nexport type SwitchProps = InferProps<typeof Switch>;\n"],"names":["AeicoField","html","styleVariables","sizeCSS","colorCSS"],"mappings":";;;;;;;;;;AAQA,MAAM,eAAeA,WAAAA,WAAoB;AAAA,EAAzC;AAAA;AACY,wCAAwC;AAAA;AAAA,EAcxC,WAAoB;;AAC5B,aAAO,UAAK,iBAAL,mBAAmB,YAAW;AAAA,EACvC;AAAA,EAEU,WAAW,SAAwB;AAC3C,QAAI,KAAK,cAAc;AACrB,WAAK,aAAa,UAAU,QAAQ,OAAO;AAAA,IAC7C;AAAA,EACF;AAAA,EAEU,gBAAgB,SAAkB,YAAqB,QAAqB;AACpF,WAAO,EAAE,SAAS,YAAY,OAAA;AAAA,EAChC;AAAA,EAEU,SAAS,SAAkB,SAA4D;AAC/F,UAAM,aAAa,KAAK,SAAA;AACxB,SAAK,UAAU;AACf,SAAK,WAAW,OAAO;AACvB,SAAI,mCAAS,YAAW,OAAO;AAC7B,WAAK,KAAK,UAAU;AAAA,QAClB,QAAQ,KAAK,gBAAgB,SAAS,YAAY,QAAQ,UAAU,QAAQ;AAAA,MAAA,CAC7E;AAAA,IACH;AAAA,EACF;AAAA,EAEO,MAAM,SAAmB,SAAsC;AACpE,SAAK,SAAS,YAAY,SAAY,UAAW,KAAK,kBAAkB,OAAQ;AAAA,MAC9E,GAAG;AAAA,MACH,QAAQ;AAAA,IAAA,CACT;AAAA,EACH;AAAA,EAEO,MAAM,SAAsC;AACjD,SAAK,SAAS,OAAO,EAAE,GAAG,SAAS,QAAQ,SAAS;AAAA,EACtD;AAAA,EAEA,SAAS;AACP,WAAOC,MAAAA,KAAK,CAAC,EAAE,KAAK,OAAO,WAAW;AACpC,UAAI,EAAE,WAAW,mBAAA,GAAsB,MAAM;AAC3C,YAAI,EAAE,WAAW,iBAAA,GAAoB,MAAM;AACzC,eAAK,eAAe,MAAM;AAAA,YACxB,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS,QAAQ,KAAK,OAAO;AAAA,YAC7B,UAAU,QAAQ,KAAK,QAAQ;AAAA,YAC/B,WAAW,KAAK;AAAA,UAAA,CACjB;AACD,eAAK,EAAE,WAAW,iBAAiB;AAAA,QACrC,CAAC;AACD,aAAK,oBAAA;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAjEE,cAHI,QAGG,WAAU;AAEjB,cALI,QAKG,SAAe;AAAA,EACpB,SAAS,EAAE,MAAM,QAAA;AAAA,EACjB,gBAAgB,EAAE,MAAM,QAAA;AAAQ;AAMlC,cAbI,QAaa,UAAS,CAACC,UAAAA,gBAAgBC,KAAAA,SAASC,MAAAA,UAAU,MAAM;AAyDtE,OAAO,SAAA;;"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
import { A as AeicoField } from "./aeico-field.js";
|
|
5
|
+
import { html } from "aeico";
|
|
6
|
+
import { s as styleVariables } from "./variables.js";
|
|
7
|
+
import { s as sizeCSS } from "./size.js";
|
|
8
|
+
import { c as colorCSS } from "./color.js";
|
|
9
|
+
const styles = ":host {\n display: block;\n font-size: var(--size-base);\n\n --switch-field-gap: 4px;\n\n --toggle-width: 2.667em;\n --toggle-height: 1.333em;\n --toggle-slider-size: 1em;\n --toggle-gap: calc((var(--toggle-height) - var(--toggle-slider-size)) / 2);\n --toggle-border-radius: calc(var(--toggle-height) / 2);\n --toggle-bg: var(--color-gray);\n --toggle-bg-checked: var(--color-solid);\n --toggle-slider-bg: white;\n --toggle-transition: 0.2s;\n\n /* Default color when no [color] attribute — overridden by color.css :host([color=...]) */\n --color-solid: var(--color-primary);\n}\n\n.switch-container {\n display: flex;\n align-items: center;\n gap: var(--switch-field-gap);\n}\n\n.switch-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: var(--toggle-width);\n height: var(--toggle-height);\n flex-shrink: 0;\n}\n\n.field-input {\n position: absolute;\n opacity: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n margin: 0;\n z-index: 1;\n border: none;\n border-radius: 0;\n background: none;\n accent-color: unset;\n}\n\n.field-input:disabled {\n cursor: not-allowed;\n}\n\n.toggle-slider {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--toggle-bg);\n border-radius: var(--toggle-border-radius);\n transition: var(--toggle-transition);\n pointer-events: none;\n}\n\n.toggle-slider::before {\n content: '';\n position: absolute;\n height: var(--toggle-slider-size);\n width: var(--toggle-slider-size);\n left: var(--toggle-gap);\n top: var(--toggle-gap);\n background: var(--toggle-slider-bg);\n border-radius: 50%;\n transition: var(--toggle-transition);\n}\n\n.field-input:checked + .toggle-slider {\n background: var(--toggle-bg-checked);\n}\n\n.field-input:checked + .toggle-slider::before {\n transform: translateX(calc(var(--toggle-width) - var(--toggle-height)));\n}\n\n.field-input:disabled + .toggle-slider {\n opacity: 0.5;\n pointer-events: auto;\n}\n\n/* action buttons */\n.reset-btn,\n.clear-btn {\n width: 1.333em;\n height: 1.333em;\n border: none;\n border-radius: var(--reset-btn-border-radius);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--reset-btn-bg);\n color: var(--reset-btn-color);\n transition: var(--reset-btn-transition);\n flex-shrink: 0;\n line-height: 1;\n}\n\n.reset-btn:hover {\n background: var(--reset-btn-bg-hover);\n color: var(--reset-btn-color-hover);\n}\n\n.clear-btn:hover {\n background: var(--clear-btn-bg-hover);\n color: var(--clear-btn-color-hover);\n}\n";
|
|
10
|
+
class Switch extends AeicoField {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
__publicField(this, "fieldElement", null);
|
|
14
|
+
}
|
|
15
|
+
getValue() {
|
|
16
|
+
var _a;
|
|
17
|
+
return ((_a = this.fieldElement) == null ? void 0 : _a.checked) ?? false;
|
|
18
|
+
}
|
|
19
|
+
writeValue(checked) {
|
|
20
|
+
if (this.fieldElement) {
|
|
21
|
+
this.fieldElement.checked = Boolean(checked);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
getEventPayload(checked, oldChecked, action) {
|
|
25
|
+
return { checked, oldChecked, action };
|
|
26
|
+
}
|
|
27
|
+
setValue(checked, options) {
|
|
28
|
+
const oldChecked = this.getValue();
|
|
29
|
+
this.checked = checked;
|
|
30
|
+
this.writeValue(checked);
|
|
31
|
+
if ((options == null ? void 0 : options.silent) === false) {
|
|
32
|
+
this.emit("change", {
|
|
33
|
+
detail: this.getEventPayload(checked, oldChecked, options.action || "change")
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
reset(checked, options) {
|
|
38
|
+
this.setValue(checked !== void 0 ? checked : this.defaultChecked ?? false, {
|
|
39
|
+
...options,
|
|
40
|
+
action: "reset"
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
clear(options) {
|
|
44
|
+
this.setValue(false, { ...options, action: "clear" });
|
|
45
|
+
}
|
|
46
|
+
render() {
|
|
47
|
+
return html(({ div, input, span }) => {
|
|
48
|
+
div({ className: "switch-container" }, () => {
|
|
49
|
+
div({ className: "switch-wrapper" }, () => {
|
|
50
|
+
this.fieldElement = input({
|
|
51
|
+
type: "checkbox",
|
|
52
|
+
className: "field-input",
|
|
53
|
+
checked: Boolean(this.checked),
|
|
54
|
+
disabled: Boolean(this.disabled),
|
|
55
|
+
"@change": this.boundOnChange
|
|
56
|
+
});
|
|
57
|
+
span({ className: "toggle-slider" });
|
|
58
|
+
});
|
|
59
|
+
this.renderActionButtons();
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
__publicField(Switch, "tagName", "switch");
|
|
65
|
+
__publicField(Switch, "props", {
|
|
66
|
+
checked: { type: Boolean },
|
|
67
|
+
defaultChecked: { type: Boolean }
|
|
68
|
+
});
|
|
69
|
+
__publicField(Switch, "styles", [styleVariables, sizeCSS, colorCSS, styles]);
|
|
70
|
+
Switch.register();
|
|
71
|
+
export {
|
|
72
|
+
Switch as S
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.js","sources":["../../src/switch/switch.ts"],"sourcesContent":["import AeicoField, { type FieldAction } from '../aeico-field';\nimport type { InferProps, Props } from 'aeico';\nimport { html } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport sizeCSS from '../styles/size.css?inline';\nimport colorCSS from '../styles/color.css?inline';\nimport styles from '../styles/components/switch.css?inline';\n\nclass Switch extends AeicoField<boolean> {\n protected fieldElement: HTMLInputElement | null = null;\n\n static tagName = 'switch';\n\n static props: Props = {\n checked: { type: Boolean },\n defaultChecked: { type: Boolean },\n };\n\n declare checked?: boolean;\n declare defaultChecked?: boolean;\n\n protected static styles = [styleVariables, sizeCSS, colorCSS, styles];\n\n protected getValue(): boolean {\n return this.fieldElement?.checked ?? false;\n }\n\n protected writeValue(checked: boolean): void {\n if (this.fieldElement) {\n this.fieldElement.checked = Boolean(checked);\n }\n }\n\n protected getEventPayload(checked: boolean, oldChecked: boolean, action: FieldAction) {\n return { checked, oldChecked, action };\n }\n\n protected setValue(checked: boolean, options?: { silent?: boolean; action?: FieldAction }): void {\n const oldChecked = this.getValue();\n this.checked = checked;\n this.writeValue(checked);\n if (options?.silent === false) {\n this.emit('change', {\n detail: this.getEventPayload(checked, oldChecked, options.action || 'change'),\n });\n }\n }\n\n public reset(checked?: boolean, options?: { silent?: boolean }): void {\n this.setValue(checked !== undefined ? checked : (this.defaultChecked ?? false), {\n ...options,\n action: 'reset',\n });\n }\n\n public clear(options?: { silent?: boolean }): void {\n this.setValue(false, { ...options, action: 'clear' });\n }\n\n render() {\n return html(({ div, input, span }) => {\n div({ className: 'switch-container' }, () => {\n div({ className: 'switch-wrapper' }, () => {\n this.fieldElement = input({\n type: 'checkbox',\n className: 'field-input',\n checked: Boolean(this.checked),\n disabled: Boolean(this.disabled),\n '@change': this.boundOnChange,\n });\n span({ className: 'toggle-slider' });\n });\n this.renderActionButtons();\n });\n });\n }\n}\n\nSwitch.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-switch': Switch;\n }\n}\n\nexport default Switch;\nexport type SwitchProps = InferProps<typeof Switch>;\n"],"names":[],"mappings":";;;;;;;;;AAQA,MAAM,eAAe,WAAoB;AAAA,EAAzC;AAAA;AACY,wCAAwC;AAAA;AAAA,EAcxC,WAAoB;;AAC5B,aAAO,UAAK,iBAAL,mBAAmB,YAAW;AAAA,EACvC;AAAA,EAEU,WAAW,SAAwB;AAC3C,QAAI,KAAK,cAAc;AACrB,WAAK,aAAa,UAAU,QAAQ,OAAO;AAAA,IAC7C;AAAA,EACF;AAAA,EAEU,gBAAgB,SAAkB,YAAqB,QAAqB;AACpF,WAAO,EAAE,SAAS,YAAY,OAAA;AAAA,EAChC;AAAA,EAEU,SAAS,SAAkB,SAA4D;AAC/F,UAAM,aAAa,KAAK,SAAA;AACxB,SAAK,UAAU;AACf,SAAK,WAAW,OAAO;AACvB,SAAI,mCAAS,YAAW,OAAO;AAC7B,WAAK,KAAK,UAAU;AAAA,QAClB,QAAQ,KAAK,gBAAgB,SAAS,YAAY,QAAQ,UAAU,QAAQ;AAAA,MAAA,CAC7E;AAAA,IACH;AAAA,EACF;AAAA,EAEO,MAAM,SAAmB,SAAsC;AACpE,SAAK,SAAS,YAAY,SAAY,UAAW,KAAK,kBAAkB,OAAQ;AAAA,MAC9E,GAAG;AAAA,MACH,QAAQ;AAAA,IAAA,CACT;AAAA,EACH;AAAA,EAEO,MAAM,SAAsC;AACjD,SAAK,SAAS,OAAO,EAAE,GAAG,SAAS,QAAQ,SAAS;AAAA,EACtD;AAAA,EAEA,SAAS;AACP,WAAO,KAAK,CAAC,EAAE,KAAK,OAAO,WAAW;AACpC,UAAI,EAAE,WAAW,mBAAA,GAAsB,MAAM;AAC3C,YAAI,EAAE,WAAW,iBAAA,GAAoB,MAAM;AACzC,eAAK,eAAe,MAAM;AAAA,YACxB,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS,QAAQ,KAAK,OAAO;AAAA,YAC7B,UAAU,QAAQ,KAAK,QAAQ;AAAA,YAC/B,WAAW,KAAK;AAAA,UAAA,CACjB;AACD,eAAK,EAAE,WAAW,iBAAiB;AAAA,QACrC,CAAC;AACD,aAAK,oBAAA;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAjEE,cAHI,QAGG,WAAU;AAEjB,cALI,QAKG,SAAe;AAAA,EACpB,SAAS,EAAE,MAAM,QAAA;AAAA,EACjB,gBAAgB,EAAE,MAAM,QAAA;AAAQ;AAMlC,cAbI,QAaa,UAAS,CAAC,gBAAgB,SAAS,UAAU,MAAM;AAyDtE,OAAO,SAAA;"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
const variables = require("./variables.cjs");
|
|
6
|
+
const aeicoComponent = require("./aeico-component.cjs");
|
|
7
|
+
const aeico = require("aeico");
|
|
8
|
+
const tabsStyle = ':host {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n[part="tab-nav"] {\n display: flex;\n flex-shrink: 0;\n border-bottom: 1px solid var(--ae-tabs-border-color, var(--border-default));\n}\n\n[part="panels"] {\n flex: 1;\n overflow: auto;\n}\n';
|
|
9
|
+
class Tabs extends aeicoComponent.AeicoComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
__publicField(this, "_observer", null);
|
|
13
|
+
__publicField(this, "_handleTabClick", (e) => {
|
|
14
|
+
const pairs = this._getPairs();
|
|
15
|
+
const target = e.target;
|
|
16
|
+
const index = pairs.findIndex(([tab]) => tab === target);
|
|
17
|
+
if (index !== -1) this.selectTab(index);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
get _tabs() {
|
|
21
|
+
return [...this.children].filter(
|
|
22
|
+
(el) => el.tagName.toLowerCase() === "ae-tab"
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
get _panels() {
|
|
26
|
+
return [...this.children].filter(
|
|
27
|
+
(el) => el.tagName.toLowerCase() === "ae-tab-panel"
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
_getPairs() {
|
|
31
|
+
const tabs = this._tabs;
|
|
32
|
+
const panels = this._panels;
|
|
33
|
+
const idMap = /* @__PURE__ */ new Map();
|
|
34
|
+
for (const panel of panels) {
|
|
35
|
+
const id = panel.id;
|
|
36
|
+
if (id) idMap.set(id, panel);
|
|
37
|
+
}
|
|
38
|
+
const usedPanels = /* @__PURE__ */ new Set();
|
|
39
|
+
const pairs = [];
|
|
40
|
+
for (const tab of tabs) {
|
|
41
|
+
const panelId = tab.panel;
|
|
42
|
+
if (panelId) {
|
|
43
|
+
const panel = idMap.get(panelId) ?? null;
|
|
44
|
+
if (panel) usedPanels.add(panel);
|
|
45
|
+
pairs.push([tab, panel]);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const unmatchedPanels = panels.filter((p) => !usedPanels.has(p));
|
|
49
|
+
let posIndex = 0;
|
|
50
|
+
for (const tab of tabs) {
|
|
51
|
+
if (!tab.panel) {
|
|
52
|
+
pairs.push([tab, unmatchedPanels[posIndex] ?? null]);
|
|
53
|
+
posIndex++;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return pairs;
|
|
57
|
+
}
|
|
58
|
+
connectedCallback() {
|
|
59
|
+
super.connectedCallback();
|
|
60
|
+
this._observer = new MutationObserver(() => this.update());
|
|
61
|
+
this._observer.observe(this, { childList: true });
|
|
62
|
+
}
|
|
63
|
+
disconnectedCallback() {
|
|
64
|
+
var _a;
|
|
65
|
+
super.disconnectedCallback();
|
|
66
|
+
(_a = this._observer) == null ? void 0 : _a.disconnect();
|
|
67
|
+
this._observer = null;
|
|
68
|
+
}
|
|
69
|
+
onUpdated() {
|
|
70
|
+
this._syncActive();
|
|
71
|
+
}
|
|
72
|
+
_syncActive() {
|
|
73
|
+
const activeIndex = this.activeIndex ?? 0;
|
|
74
|
+
const pairs = this._getPairs();
|
|
75
|
+
pairs.forEach(([tab, panel], i) => {
|
|
76
|
+
const isActive = i === activeIndex;
|
|
77
|
+
if (isActive) {
|
|
78
|
+
tab.setAttribute("active", "");
|
|
79
|
+
panel == null ? void 0 : panel.setAttribute("active", "");
|
|
80
|
+
} else {
|
|
81
|
+
tab.removeAttribute("active");
|
|
82
|
+
panel == null ? void 0 : panel.removeAttribute("active");
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
selectTab(index) {
|
|
87
|
+
const pairs = this._getPairs();
|
|
88
|
+
if (index === (this.activeIndex ?? 0) || index >= pairs.length) return;
|
|
89
|
+
this.activeIndex = index;
|
|
90
|
+
this.emit("change", { detail: { index } });
|
|
91
|
+
}
|
|
92
|
+
render() {
|
|
93
|
+
return aeico.html(({ nav, div, slot }) => {
|
|
94
|
+
nav({ part: "tab-nav", role: "tablist", "@_tab-click": this._handleTabClick }, () => {
|
|
95
|
+
slot({ name: "tab" });
|
|
96
|
+
});
|
|
97
|
+
div({ part: "panels" }, () => {
|
|
98
|
+
slot();
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
__publicField(Tabs, "props", {
|
|
104
|
+
activeIndex: { type: Number }
|
|
105
|
+
});
|
|
106
|
+
__publicField(Tabs, "styles", [variables.styleVariables, tabsStyle]);
|
|
107
|
+
Tabs.register();
|
|
108
|
+
const tabStyle = ":host {\n display: inline-flex;\n cursor: pointer;\n margin-bottom: -1px;\n}\n\nbutton {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n font-size: inherit;\n font-family: inherit;\n color: var(--ae-tab-color, #909090);\n font-size: var(--ae-tab-font-size, inherit);\n transition: color 0.15s, border-color 0.15s;\n outline: none;\n white-space: nowrap;\n user-select: none;\n}\n\nbutton:hover {\n color: var(--ae-tab-hover-color, var(--color-primary));\n}\n\nbutton:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: -2px;\n}\n\n:host([active]) button {\n color: var(--ae-tab-active-color, var(--color-primary));\n border-bottom-color: var(--ae-tab-active-color, var(--color-primary));\n}\n\n:host([disabled]) button {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n";
|
|
109
|
+
class Tab extends aeicoComponent.AeicoComponent {
|
|
110
|
+
constructor() {
|
|
111
|
+
super(...arguments);
|
|
112
|
+
__publicField(this, "_handleClick", () => {
|
|
113
|
+
if (this.disabled) return;
|
|
114
|
+
this.dispatchEvent(
|
|
115
|
+
new CustomEvent("_tab-click", {
|
|
116
|
+
bubbles: true,
|
|
117
|
+
composed: true
|
|
118
|
+
})
|
|
119
|
+
);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
connectedCallback() {
|
|
123
|
+
this.setAttribute("slot", "tab");
|
|
124
|
+
super.connectedCallback();
|
|
125
|
+
}
|
|
126
|
+
render() {
|
|
127
|
+
return aeico.html(({ button, slot }) => {
|
|
128
|
+
button(
|
|
129
|
+
{
|
|
130
|
+
part: "tab",
|
|
131
|
+
type: "button",
|
|
132
|
+
role: "tab",
|
|
133
|
+
"aria-selected": this.active,
|
|
134
|
+
"aria-disabled": this.disabled,
|
|
135
|
+
disabled: this.disabled,
|
|
136
|
+
"@click": this._handleClick
|
|
137
|
+
},
|
|
138
|
+
() => {
|
|
139
|
+
slot();
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
__publicField(Tab, "props", {
|
|
146
|
+
active: { type: Boolean },
|
|
147
|
+
disabled: { type: Boolean },
|
|
148
|
+
panel: { type: String }
|
|
149
|
+
});
|
|
150
|
+
__publicField(Tab, "styles", [tabStyle]);
|
|
151
|
+
Tab.register();
|
|
152
|
+
const tabPanelStyle = ":host {\n display: none;\n padding: 16px 0;\n}\n\n:host([active]) {\n display: block;\n}\n";
|
|
153
|
+
class TabPanel extends aeicoComponent.AeicoComponent {
|
|
154
|
+
render() {
|
|
155
|
+
return aeico.html(({ slot }) => {
|
|
156
|
+
slot();
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
__publicField(TabPanel, "styles", [tabPanelStyle]);
|
|
161
|
+
TabPanel.register();
|
|
162
|
+
exports.Tab = Tab;
|
|
163
|
+
exports.TabPanel = TabPanel;
|
|
164
|
+
exports.Tabs = Tabs;
|
|
165
|
+
//# sourceMappingURL=tab-panel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-panel.cjs","sources":["../../src/tabs/tabs.ts","../../src/tabs/tab.ts","../../src/tabs/tab-panel.ts"],"sourcesContent":["import type { Props } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport tabsStyle from '../styles/components/tabs.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport type Tab from './tab';\n\nclass Tabs extends AeicoComponent {\n static props: Props = {\n activeIndex: { type: Number },\n };\n\n declare activeIndex?: number;\n\n protected static styles = [styleVariables, tabsStyle];\n\n private _observer: MutationObserver | null = null;\n\n private get _tabs(): Tab[] {\n return [...this.children].filter(\n (el) => el.tagName.toLowerCase() === 'ae-tab',\n ) as unknown as Tab[];\n }\n\n private get _panels(): HTMLElement[] {\n return [...this.children].filter(\n (el) => el.tagName.toLowerCase() === 'ae-tab-panel',\n ) as HTMLElement[];\n }\n\n private _getPairs(): [Tab, HTMLElement | null][] {\n const tabs = this._tabs;\n const panels = this._panels;\n\n const idMap = new Map<string, HTMLElement>();\n for (const panel of panels) {\n const id = panel.id;\n if (id) idMap.set(id, panel);\n }\n\n const usedPanels = new Set<HTMLElement>();\n const pairs: [Tab, HTMLElement | null][] = [];\n\n // First pass: ID-matched tabs\n for (const tab of tabs) {\n const panelId = tab.panel;\n if (panelId) {\n const panel = idMap.get(panelId) ?? null;\n if (panel) usedPanels.add(panel);\n pairs.push([tab, panel]);\n }\n }\n\n // Second pass: position-matched tabs (no panel attr)\n const unmatchedPanels = panels.filter((p) => !usedPanels.has(p));\n let posIndex = 0;\n for (const tab of tabs) {\n if (!tab.panel) {\n pairs.push([tab, unmatchedPanels[posIndex] ?? null]);\n posIndex++;\n }\n }\n\n return pairs;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._observer = new MutationObserver(() => this.update());\n this._observer.observe(this, { childList: true });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._observer?.disconnect();\n this._observer = null;\n }\n\n protected onUpdated() {\n this._syncActive();\n }\n\n private _handleTabClick = (e: Event) => {\n const pairs = this._getPairs();\n const target = e.target as Element;\n const index = pairs.findIndex(([tab]) => tab === target);\n if (index !== -1) this.selectTab(index);\n };\n\n private _syncActive() {\n const activeIndex = this.activeIndex ?? 0;\n const pairs = this._getPairs();\n\n pairs.forEach(([tab, panel], i) => {\n const isActive = i === activeIndex;\n if (isActive) {\n tab.setAttribute('active', '');\n panel?.setAttribute('active', '');\n } else {\n tab.removeAttribute('active');\n panel?.removeAttribute('active');\n }\n });\n }\n\n selectTab(index: number): void {\n const pairs = this._getPairs();\n if (index === (this.activeIndex ?? 0) || index >= pairs.length) return;\n this.activeIndex = index;\n this.emit('change', { detail: { index } });\n }\n\n protected render() {\n return html(({ nav, div, slot }) => {\n nav({ part: 'tab-nav', role: 'tablist', '@_tab-click': this._handleTabClick }, () => {\n slot({ name: 'tab' });\n });\n div({ part: 'panels' }, () => {\n slot();\n });\n });\n }\n}\n\nTabs.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-tabs': Tabs;\n }\n}\n\nexport default Tabs;\n","import type { Props } from 'aeico';\nimport tabStyle from '../styles/components/tab.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\n\nclass Tab extends AeicoComponent {\n static props: Props = {\n active: { type: Boolean },\n disabled: { type: Boolean },\n panel: { type: String },\n };\n\n declare active?: boolean;\n declare disabled?: boolean;\n declare panel?: string;\n\n protected static styles = [tabStyle];\n\n connectedCallback() {\n this.setAttribute('slot', 'tab');\n super.connectedCallback();\n }\n\n private _handleClick = () => {\n if (this.disabled) return;\n this.dispatchEvent(\n new CustomEvent('_tab-click', {\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n protected render() {\n return html(({ button, slot }) => {\n button(\n {\n part: 'tab',\n type: 'button',\n role: 'tab',\n 'aria-selected': this.active,\n 'aria-disabled': this.disabled,\n disabled: this.disabled,\n '@click': this._handleClick,\n },\n () => {\n slot();\n },\n );\n });\n }\n}\n\nTab.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-tab': Tab;\n }\n}\n\nexport default Tab;\n","import tabPanelStyle from '../styles/components/tab-panel.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\n\nclass TabPanel extends AeicoComponent {\n protected static styles = [tabPanelStyle];\n\n protected render() {\n return html(({ slot }) => {\n slot();\n });\n }\n}\n\nTabPanel.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-tab-panel': TabPanel;\n }\n}\n\nexport default TabPanel;\n"],"names":["AeicoComponent","html","styleVariables"],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
import { s as styleVariables } from "./variables.js";
|
|
5
|
+
import { A as AeicoComponent } from "./aeico-component.js";
|
|
6
|
+
import { html } from "aeico";
|
|
7
|
+
const tabsStyle = ':host {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n[part="tab-nav"] {\n display: flex;\n flex-shrink: 0;\n border-bottom: 1px solid var(--ae-tabs-border-color, var(--border-default));\n}\n\n[part="panels"] {\n flex: 1;\n overflow: auto;\n}\n';
|
|
8
|
+
class Tabs extends AeicoComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
__publicField(this, "_observer", null);
|
|
12
|
+
__publicField(this, "_handleTabClick", (e) => {
|
|
13
|
+
const pairs = this._getPairs();
|
|
14
|
+
const target = e.target;
|
|
15
|
+
const index = pairs.findIndex(([tab]) => tab === target);
|
|
16
|
+
if (index !== -1) this.selectTab(index);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
get _tabs() {
|
|
20
|
+
return [...this.children].filter(
|
|
21
|
+
(el) => el.tagName.toLowerCase() === "ae-tab"
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
get _panels() {
|
|
25
|
+
return [...this.children].filter(
|
|
26
|
+
(el) => el.tagName.toLowerCase() === "ae-tab-panel"
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
_getPairs() {
|
|
30
|
+
const tabs = this._tabs;
|
|
31
|
+
const panels = this._panels;
|
|
32
|
+
const idMap = /* @__PURE__ */ new Map();
|
|
33
|
+
for (const panel of panels) {
|
|
34
|
+
const id = panel.id;
|
|
35
|
+
if (id) idMap.set(id, panel);
|
|
36
|
+
}
|
|
37
|
+
const usedPanels = /* @__PURE__ */ new Set();
|
|
38
|
+
const pairs = [];
|
|
39
|
+
for (const tab of tabs) {
|
|
40
|
+
const panelId = tab.panel;
|
|
41
|
+
if (panelId) {
|
|
42
|
+
const panel = idMap.get(panelId) ?? null;
|
|
43
|
+
if (panel) usedPanels.add(panel);
|
|
44
|
+
pairs.push([tab, panel]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const unmatchedPanels = panels.filter((p) => !usedPanels.has(p));
|
|
48
|
+
let posIndex = 0;
|
|
49
|
+
for (const tab of tabs) {
|
|
50
|
+
if (!tab.panel) {
|
|
51
|
+
pairs.push([tab, unmatchedPanels[posIndex] ?? null]);
|
|
52
|
+
posIndex++;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return pairs;
|
|
56
|
+
}
|
|
57
|
+
connectedCallback() {
|
|
58
|
+
super.connectedCallback();
|
|
59
|
+
this._observer = new MutationObserver(() => this.update());
|
|
60
|
+
this._observer.observe(this, { childList: true });
|
|
61
|
+
}
|
|
62
|
+
disconnectedCallback() {
|
|
63
|
+
var _a;
|
|
64
|
+
super.disconnectedCallback();
|
|
65
|
+
(_a = this._observer) == null ? void 0 : _a.disconnect();
|
|
66
|
+
this._observer = null;
|
|
67
|
+
}
|
|
68
|
+
onUpdated() {
|
|
69
|
+
this._syncActive();
|
|
70
|
+
}
|
|
71
|
+
_syncActive() {
|
|
72
|
+
const activeIndex = this.activeIndex ?? 0;
|
|
73
|
+
const pairs = this._getPairs();
|
|
74
|
+
pairs.forEach(([tab, panel], i) => {
|
|
75
|
+
const isActive = i === activeIndex;
|
|
76
|
+
if (isActive) {
|
|
77
|
+
tab.setAttribute("active", "");
|
|
78
|
+
panel == null ? void 0 : panel.setAttribute("active", "");
|
|
79
|
+
} else {
|
|
80
|
+
tab.removeAttribute("active");
|
|
81
|
+
panel == null ? void 0 : panel.removeAttribute("active");
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
selectTab(index) {
|
|
86
|
+
const pairs = this._getPairs();
|
|
87
|
+
if (index === (this.activeIndex ?? 0) || index >= pairs.length) return;
|
|
88
|
+
this.activeIndex = index;
|
|
89
|
+
this.emit("change", { detail: { index } });
|
|
90
|
+
}
|
|
91
|
+
render() {
|
|
92
|
+
return html(({ nav, div, slot }) => {
|
|
93
|
+
nav({ part: "tab-nav", role: "tablist", "@_tab-click": this._handleTabClick }, () => {
|
|
94
|
+
slot({ name: "tab" });
|
|
95
|
+
});
|
|
96
|
+
div({ part: "panels" }, () => {
|
|
97
|
+
slot();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
__publicField(Tabs, "props", {
|
|
103
|
+
activeIndex: { type: Number }
|
|
104
|
+
});
|
|
105
|
+
__publicField(Tabs, "styles", [styleVariables, tabsStyle]);
|
|
106
|
+
Tabs.register();
|
|
107
|
+
const tabStyle = ":host {\n display: inline-flex;\n cursor: pointer;\n margin-bottom: -1px;\n}\n\nbutton {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n font-size: inherit;\n font-family: inherit;\n color: var(--ae-tab-color, #909090);\n font-size: var(--ae-tab-font-size, inherit);\n transition: color 0.15s, border-color 0.15s;\n outline: none;\n white-space: nowrap;\n user-select: none;\n}\n\nbutton:hover {\n color: var(--ae-tab-hover-color, var(--color-primary));\n}\n\nbutton:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: -2px;\n}\n\n:host([active]) button {\n color: var(--ae-tab-active-color, var(--color-primary));\n border-bottom-color: var(--ae-tab-active-color, var(--color-primary));\n}\n\n:host([disabled]) button {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n";
|
|
108
|
+
class Tab extends AeicoComponent {
|
|
109
|
+
constructor() {
|
|
110
|
+
super(...arguments);
|
|
111
|
+
__publicField(this, "_handleClick", () => {
|
|
112
|
+
if (this.disabled) return;
|
|
113
|
+
this.dispatchEvent(
|
|
114
|
+
new CustomEvent("_tab-click", {
|
|
115
|
+
bubbles: true,
|
|
116
|
+
composed: true
|
|
117
|
+
})
|
|
118
|
+
);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
connectedCallback() {
|
|
122
|
+
this.setAttribute("slot", "tab");
|
|
123
|
+
super.connectedCallback();
|
|
124
|
+
}
|
|
125
|
+
render() {
|
|
126
|
+
return html(({ button, slot }) => {
|
|
127
|
+
button(
|
|
128
|
+
{
|
|
129
|
+
part: "tab",
|
|
130
|
+
type: "button",
|
|
131
|
+
role: "tab",
|
|
132
|
+
"aria-selected": this.active,
|
|
133
|
+
"aria-disabled": this.disabled,
|
|
134
|
+
disabled: this.disabled,
|
|
135
|
+
"@click": this._handleClick
|
|
136
|
+
},
|
|
137
|
+
() => {
|
|
138
|
+
slot();
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
__publicField(Tab, "props", {
|
|
145
|
+
active: { type: Boolean },
|
|
146
|
+
disabled: { type: Boolean },
|
|
147
|
+
panel: { type: String }
|
|
148
|
+
});
|
|
149
|
+
__publicField(Tab, "styles", [tabStyle]);
|
|
150
|
+
Tab.register();
|
|
151
|
+
const tabPanelStyle = ":host {\n display: none;\n padding: 16px 0;\n}\n\n:host([active]) {\n display: block;\n}\n";
|
|
152
|
+
class TabPanel extends AeicoComponent {
|
|
153
|
+
render() {
|
|
154
|
+
return html(({ slot }) => {
|
|
155
|
+
slot();
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
__publicField(TabPanel, "styles", [tabPanelStyle]);
|
|
160
|
+
TabPanel.register();
|
|
161
|
+
export {
|
|
162
|
+
Tab as T,
|
|
163
|
+
TabPanel as a,
|
|
164
|
+
Tabs as b
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=tab-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-panel.js","sources":["../../src/tabs/tabs.ts","../../src/tabs/tab.ts","../../src/tabs/tab-panel.ts"],"sourcesContent":["import type { Props } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport tabsStyle from '../styles/components/tabs.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport type Tab from './tab';\n\nclass Tabs extends AeicoComponent {\n static props: Props = {\n activeIndex: { type: Number },\n };\n\n declare activeIndex?: number;\n\n protected static styles = [styleVariables, tabsStyle];\n\n private _observer: MutationObserver | null = null;\n\n private get _tabs(): Tab[] {\n return [...this.children].filter(\n (el) => el.tagName.toLowerCase() === 'ae-tab',\n ) as unknown as Tab[];\n }\n\n private get _panels(): HTMLElement[] {\n return [...this.children].filter(\n (el) => el.tagName.toLowerCase() === 'ae-tab-panel',\n ) as HTMLElement[];\n }\n\n private _getPairs(): [Tab, HTMLElement | null][] {\n const tabs = this._tabs;\n const panels = this._panels;\n\n const idMap = new Map<string, HTMLElement>();\n for (const panel of panels) {\n const id = panel.id;\n if (id) idMap.set(id, panel);\n }\n\n const usedPanels = new Set<HTMLElement>();\n const pairs: [Tab, HTMLElement | null][] = [];\n\n // First pass: ID-matched tabs\n for (const tab of tabs) {\n const panelId = tab.panel;\n if (panelId) {\n const panel = idMap.get(panelId) ?? null;\n if (panel) usedPanels.add(panel);\n pairs.push([tab, panel]);\n }\n }\n\n // Second pass: position-matched tabs (no panel attr)\n const unmatchedPanels = panels.filter((p) => !usedPanels.has(p));\n let posIndex = 0;\n for (const tab of tabs) {\n if (!tab.panel) {\n pairs.push([tab, unmatchedPanels[posIndex] ?? null]);\n posIndex++;\n }\n }\n\n return pairs;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._observer = new MutationObserver(() => this.update());\n this._observer.observe(this, { childList: true });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._observer?.disconnect();\n this._observer = null;\n }\n\n protected onUpdated() {\n this._syncActive();\n }\n\n private _handleTabClick = (e: Event) => {\n const pairs = this._getPairs();\n const target = e.target as Element;\n const index = pairs.findIndex(([tab]) => tab === target);\n if (index !== -1) this.selectTab(index);\n };\n\n private _syncActive() {\n const activeIndex = this.activeIndex ?? 0;\n const pairs = this._getPairs();\n\n pairs.forEach(([tab, panel], i) => {\n const isActive = i === activeIndex;\n if (isActive) {\n tab.setAttribute('active', '');\n panel?.setAttribute('active', '');\n } else {\n tab.removeAttribute('active');\n panel?.removeAttribute('active');\n }\n });\n }\n\n selectTab(index: number): void {\n const pairs = this._getPairs();\n if (index === (this.activeIndex ?? 0) || index >= pairs.length) return;\n this.activeIndex = index;\n this.emit('change', { detail: { index } });\n }\n\n protected render() {\n return html(({ nav, div, slot }) => {\n nav({ part: 'tab-nav', role: 'tablist', '@_tab-click': this._handleTabClick }, () => {\n slot({ name: 'tab' });\n });\n div({ part: 'panels' }, () => {\n slot();\n });\n });\n }\n}\n\nTabs.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-tabs': Tabs;\n }\n}\n\nexport default Tabs;\n","import type { Props } from 'aeico';\nimport tabStyle from '../styles/components/tab.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\n\nclass Tab extends AeicoComponent {\n static props: Props = {\n active: { type: Boolean },\n disabled: { type: Boolean },\n panel: { type: String },\n };\n\n declare active?: boolean;\n declare disabled?: boolean;\n declare panel?: string;\n\n protected static styles = [tabStyle];\n\n connectedCallback() {\n this.setAttribute('slot', 'tab');\n super.connectedCallback();\n }\n\n private _handleClick = () => {\n if (this.disabled) return;\n this.dispatchEvent(\n new CustomEvent('_tab-click', {\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n protected render() {\n return html(({ button, slot }) => {\n button(\n {\n part: 'tab',\n type: 'button',\n role: 'tab',\n 'aria-selected': this.active,\n 'aria-disabled': this.disabled,\n disabled: this.disabled,\n '@click': this._handleClick,\n },\n () => {\n slot();\n },\n );\n });\n }\n}\n\nTab.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-tab': Tab;\n }\n}\n\nexport default Tab;\n","import tabPanelStyle from '../styles/components/tab-panel.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\n\nclass TabPanel extends AeicoComponent {\n protected static styles = [tabPanelStyle];\n\n protected render() {\n return html(({ slot }) => {\n slot();\n });\n }\n}\n\nTabPanel.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-tab-panel': TabPanel;\n }\n}\n\nexport default TabPanel;\n"],"names":[],"mappings":";;;;;;;AAOA,MAAM,aAAa,eAAe;AAAA,EAAlC;AAAA;AASU,qCAAqC;AAkErC,2CAAkB,CAAC,MAAa;AACtC,YAAM,QAAQ,KAAK,UAAA;AACnB,YAAM,SAAS,EAAE;AACjB,YAAM,QAAQ,MAAM,UAAU,CAAC,CAAC,GAAG,MAAM,QAAQ,MAAM;AACvD,UAAI,UAAU,GAAI,MAAK,UAAU,KAAK;AAAA,IACxC;AAAA;AAAA,EArEA,IAAY,QAAe;AACzB,WAAO,CAAC,GAAG,KAAK,QAAQ,EAAE;AAAA,MACxB,CAAC,OAAO,GAAG,QAAQ,kBAAkB;AAAA,IAAA;AAAA,EAEzC;AAAA,EAEA,IAAY,UAAyB;AACnC,WAAO,CAAC,GAAG,KAAK,QAAQ,EAAE;AAAA,MACxB,CAAC,OAAO,GAAG,QAAQ,kBAAkB;AAAA,IAAA;AAAA,EAEzC;AAAA,EAEQ,YAAyC;AAC/C,UAAM,OAAO,KAAK;AAClB,UAAM,SAAS,KAAK;AAEpB,UAAM,4BAAY,IAAA;AAClB,eAAW,SAAS,QAAQ;AAC1B,YAAM,KAAK,MAAM;AACjB,UAAI,GAAI,OAAM,IAAI,IAAI,KAAK;AAAA,IAC7B;AAEA,UAAM,iCAAiB,IAAA;AACvB,UAAM,QAAqC,CAAA;AAG3C,eAAW,OAAO,MAAM;AACtB,YAAM,UAAU,IAAI;AACpB,UAAI,SAAS;AACX,cAAM,QAAQ,MAAM,IAAI,OAAO,KAAK;AACpC,YAAI,MAAO,YAAW,IAAI,KAAK;AAC/B,cAAM,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,MACzB;AAAA,IACF;AAGA,UAAM,kBAAkB,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;AAC/D,QAAI,WAAW;AACf,eAAW,OAAO,MAAM;AACtB,UAAI,CAAC,IAAI,OAAO;AACd,cAAM,KAAK,CAAC,KAAK,gBAAgB,QAAQ,KAAK,IAAI,CAAC;AACnD;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB;AAClB,UAAM,kBAAA;AACN,SAAK,YAAY,IAAI,iBAAiB,MAAM,KAAK,QAAQ;AACzD,SAAK,UAAU,QAAQ,MAAM,EAAE,WAAW,MAAM;AAAA,EAClD;AAAA,EAEA,uBAAuB;;AACrB,UAAM,qBAAA;AACN,eAAK,cAAL,mBAAgB;AAChB,SAAK,YAAY;AAAA,EACnB;AAAA,EAEU,YAAY;AACpB,SAAK,YAAA;AAAA,EACP;AAAA,EASQ,cAAc;AACpB,UAAM,cAAc,KAAK,eAAe;AACxC,UAAM,QAAQ,KAAK,UAAA;AAEnB,UAAM,QAAQ,CAAC,CAAC,KAAK,KAAK,GAAG,MAAM;AACjC,YAAM,WAAW,MAAM;AACvB,UAAI,UAAU;AACZ,YAAI,aAAa,UAAU,EAAE;AAC7B,uCAAO,aAAa,UAAU;AAAA,MAChC,OAAO;AACL,YAAI,gBAAgB,QAAQ;AAC5B,uCAAO,gBAAgB;AAAA,MACzB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,OAAqB;AAC7B,UAAM,QAAQ,KAAK,UAAA;AACnB,QAAI,WAAW,KAAK,eAAe,MAAM,SAAS,MAAM,OAAQ;AAChE,SAAK,cAAc;AACnB,SAAK,KAAK,UAAU,EAAE,QAAQ,EAAE,MAAA,GAAS;AAAA,EAC3C;AAAA,EAEU,SAAS;AACjB,WAAO,KAAK,CAAC,EAAE,KAAK,KAAK,WAAW;AAClC,UAAI,EAAE,MAAM,WAAW,MAAM,WAAW,eAAe,KAAK,gBAAA,GAAmB,MAAM;AACnF,aAAK,EAAE,MAAM,OAAO;AAAA,MACtB,CAAC;AACD,UAAI,EAAE,MAAM,SAAA,GAAY,MAAM;AAC5B,aAAA;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAlHE,cADI,MACG,SAAe;AAAA,EACpB,aAAa,EAAE,MAAM,OAAA;AAAO;AAK9B,cAPI,MAOa,UAAS,CAAC,gBAAgB,SAAS;AA8GtD,KAAK,SAAA;;ACvHL,MAAM,YAAY,eAAe;AAAA,EAAjC;AAAA;AAkBU,wCAAe,MAAM;AAC3B,UAAI,KAAK,SAAU;AACnB,WAAK;AAAA,QACH,IAAI,YAAY,cAAc;AAAA,UAC5B,SAAS;AAAA,UACT,UAAU;AAAA,QAAA,CACX;AAAA,MAAA;AAAA,IAEL;AAAA;AAAA,EAbA,oBAAoB;AAClB,SAAK,aAAa,QAAQ,KAAK;AAC/B,UAAM,kBAAA;AAAA,EACR;AAAA,EAYU,SAAS;AACjB,WAAO,KAAK,CAAC,EAAE,QAAQ,WAAW;AAChC;AAAA,QACE;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,iBAAiB,KAAK;AAAA,UACtB,iBAAiB,KAAK;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU,KAAK;AAAA,QAAA;AAAA,QAEjB,MAAM;AACJ,eAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EACH;AACF;AA7CE,cADI,KACG,SAAe;AAAA,EACpB,QAAQ,EAAE,MAAM,QAAA;AAAA,EAChB,UAAU,EAAE,MAAM,QAAA;AAAA,EAClB,OAAO,EAAE,MAAM,OAAA;AAAO;AAOxB,cAXI,KAWa,UAAS,CAAC,QAAQ;AAqCrC,IAAI,SAAA;;ACjDJ,MAAM,iBAAiB,eAAe;AAAA,EAG1B,SAAS;AACjB,WAAO,KAAK,CAAC,EAAE,WAAW;AACxB,WAAA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAPE,cADI,UACa,UAAS,CAAC,aAAa;AAS1C,SAAS,SAAA;"}
|