aeico-components 0.1.5 → 0.1.7
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/LICENSE +21 -0
- package/README.md +0 -0
- package/dist/chunks/action-button.cjs +296 -0
- package/dist/chunks/action-button.cjs.map +1 -0
- package/dist/chunks/action-button.js +297 -0
- package/dist/chunks/action-button.js.map +1 -0
- package/dist/chunks/alert.cjs +26 -32
- package/dist/chunks/alert.cjs.map +1 -1
- package/dist/chunks/alert.js +27 -33
- package/dist/chunks/alert.js.map +1 -1
- package/dist/chunks/badge.cjs +2 -2
- package/dist/chunks/badge.cjs.map +1 -1
- package/dist/chunks/badge.js +3 -3
- package/dist/chunks/badge.js.map +1 -1
- package/dist/chunks/breadcrumb-item.cjs +9 -9
- package/dist/chunks/breadcrumb-item.cjs.map +1 -1
- package/dist/chunks/breadcrumb-item.js +10 -10
- package/dist/chunks/breadcrumb-item.js.map +1 -1
- package/dist/chunks/button-group.cjs +1 -1
- package/dist/chunks/button-group.cjs.map +1 -1
- package/dist/chunks/button-group.js +2 -2
- package/dist/chunks/button-group.js.map +1 -1
- package/dist/chunks/button.cjs +40 -51
- package/dist/chunks/button.cjs.map +1 -1
- package/dist/chunks/button.js +41 -52
- package/dist/chunks/button.js.map +1 -1
- package/dist/chunks/card.cjs +2 -2
- package/dist/chunks/card.cjs.map +1 -1
- package/dist/chunks/card.js +3 -3
- package/dist/chunks/card.js.map +1 -1
- package/dist/chunks/checkbox.cjs +18 -5
- package/dist/chunks/checkbox.cjs.map +1 -1
- package/dist/chunks/checkbox.js +18 -5
- package/dist/chunks/checkbox.js.map +1 -1
- package/dist/chunks/color.cjs +1 -1
- package/dist/chunks/color.js +1 -1
- package/dist/chunks/copy-button.cjs +171 -0
- package/dist/chunks/copy-button.cjs.map +1 -0
- package/dist/chunks/copy-button.js +172 -0
- package/dist/chunks/copy-button.js.map +1 -0
- package/dist/chunks/detail-group.cjs +65 -0
- package/dist/chunks/detail-group.cjs.map +1 -0
- package/dist/chunks/detail-group.js +66 -0
- package/dist/chunks/detail-group.js.map +1 -0
- package/dist/chunks/detail.cjs +7 -4
- package/dist/chunks/detail.cjs.map +1 -1
- package/dist/chunks/detail.js +8 -5
- package/dist/chunks/detail.js.map +1 -1
- package/dist/chunks/dialog.cjs +2 -2
- package/dist/chunks/dialog.cjs.map +1 -1
- package/dist/chunks/dialog.js +3 -3
- package/dist/chunks/dialog.js.map +1 -1
- package/dist/chunks/divider.cjs +2 -2
- package/dist/chunks/divider.cjs.map +1 -1
- package/dist/chunks/divider.js +3 -3
- package/dist/chunks/divider.js.map +1 -1
- package/dist/chunks/drawer.cjs +180 -0
- package/dist/chunks/drawer.cjs.map +1 -0
- package/dist/chunks/drawer.js +181 -0
- package/dist/chunks/drawer.js.map +1 -0
- package/dist/chunks/dropdown-button.cjs +10 -11
- package/dist/chunks/dropdown-button.cjs.map +1 -1
- package/dist/chunks/dropdown-button.js +14 -15
- package/dist/chunks/dropdown-button.js.map +1 -1
- package/dist/chunks/icon.cjs +57 -11
- package/dist/chunks/icon.cjs.map +1 -1
- package/dist/chunks/icon.js +58 -12
- package/dist/chunks/icon.js.map +1 -1
- package/dist/chunks/menu.cjs +396 -0
- package/dist/chunks/menu.cjs.map +1 -0
- package/dist/chunks/menu.js +397 -0
- package/dist/chunks/menu.js.map +1 -0
- package/dist/chunks/navbar.cjs +2 -2
- package/dist/chunks/navbar.cjs.map +1 -1
- package/dist/chunks/navbar.js +3 -3
- package/dist/chunks/navbar.js.map +1 -1
- package/dist/chunks/number-input.cjs +110 -0
- package/dist/chunks/number-input.cjs.map +1 -0
- package/dist/chunks/number-input.js +111 -0
- package/dist/chunks/number-input.js.map +1 -0
- package/dist/chunks/pagination.cjs +475 -0
- package/dist/chunks/pagination.cjs.map +1 -0
- package/dist/chunks/pagination.js +476 -0
- package/dist/chunks/pagination.js.map +1 -0
- package/dist/chunks/progress-bar.cjs +101 -0
- package/dist/chunks/progress-bar.cjs.map +1 -0
- package/dist/chunks/progress-bar.js +102 -0
- package/dist/chunks/progress-bar.js.map +1 -0
- package/dist/chunks/radio.cjs +11 -7
- package/dist/chunks/radio.cjs.map +1 -1
- package/dist/chunks/radio.js +11 -7
- package/dist/chunks/radio.js.map +1 -1
- package/dist/chunks/select.cjs +97 -66
- package/dist/chunks/select.cjs.map +1 -1
- package/dist/chunks/select.js +97 -66
- package/dist/chunks/select.js.map +1 -1
- package/dist/chunks/size.cjs +1 -1
- package/dist/chunks/size.js +1 -1
- package/dist/chunks/slider.cjs +35 -75
- package/dist/chunks/slider.cjs.map +1 -1
- package/dist/chunks/slider.js +35 -75
- package/dist/chunks/slider.js.map +1 -1
- package/dist/chunks/spinner.cjs +102 -0
- package/dist/chunks/spinner.cjs.map +1 -0
- package/dist/chunks/spinner.js +103 -0
- package/dist/chunks/spinner.js.map +1 -0
- package/dist/chunks/switch.cjs +110 -16
- package/dist/chunks/switch.cjs.map +1 -1
- package/dist/chunks/switch.js +111 -17
- package/dist/chunks/switch.js.map +1 -1
- package/dist/chunks/tab-panel.cjs +14 -5
- package/dist/chunks/tab-panel.cjs.map +1 -1
- package/dist/chunks/tab-panel.js +15 -6
- package/dist/chunks/tab-panel.js.map +1 -1
- package/dist/chunks/tag.cjs +2 -2
- package/dist/chunks/tag.cjs.map +1 -1
- package/dist/chunks/tag.js +3 -3
- package/dist/chunks/tag.js.map +1 -1
- package/dist/chunks/text-input.cjs +11 -16
- package/dist/chunks/text-input.cjs.map +1 -1
- package/dist/chunks/text-input.js +11 -16
- package/dist/chunks/text-input.js.map +1 -1
- package/dist/chunks/textarea.cjs +137 -0
- package/dist/chunks/textarea.cjs.map +1 -0
- package/dist/chunks/textarea.js +138 -0
- package/dist/chunks/textarea.js.map +1 -0
- package/dist/chunks/tooltip.cjs +292 -0
- package/dist/chunks/tooltip.cjs.map +1 -0
- package/dist/chunks/tooltip.js +293 -0
- package/dist/chunks/tooltip.js.map +1 -0
- package/dist/chunks/tree.cjs +468 -0
- package/dist/chunks/tree.cjs.map +1 -0
- package/dist/chunks/tree.js +469 -0
- package/dist/chunks/tree.js.map +1 -0
- package/dist/chunks/variables.cjs +273 -249
- package/dist/chunks/variables.cjs.map +1 -1
- package/dist/chunks/variables.js +273 -249
- package/dist/chunks/variables.js.map +1 -1
- package/dist/copy-button.cjs +6 -0
- package/dist/copy-button.cjs.map +1 -0
- package/dist/copy-button.js +6 -0
- package/dist/copy-button.js.map +1 -0
- package/dist/detail-group.cjs +6 -0
- package/dist/detail-group.cjs.map +1 -0
- package/dist/detail-group.js +6 -0
- package/dist/detail-group.js.map +1 -0
- package/dist/drawer.cjs +6 -0
- package/dist/drawer.cjs.map +1 -0
- package/dist/drawer.js +6 -0
- package/dist/drawer.js.map +1 -0
- package/dist/dropdown.js +4 -4
- package/dist/index.cjs +24 -99
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +41 -116
- package/dist/index.js.map +1 -1
- package/dist/menu.cjs +6 -0
- package/dist/menu.cjs.map +1 -0
- package/dist/menu.js +6 -0
- package/dist/menu.js.map +1 -0
- package/dist/number-input.cjs +6 -0
- package/dist/number-input.cjs.map +1 -0
- package/dist/number-input.js +6 -0
- package/dist/number-input.js.map +1 -0
- package/dist/pagination.cjs +6 -0
- package/dist/pagination.cjs.map +1 -0
- package/dist/pagination.js +6 -0
- package/dist/pagination.js.map +1 -0
- package/dist/progress-bar.cjs +6 -0
- package/dist/progress-bar.cjs.map +1 -0
- package/dist/progress-bar.js +6 -0
- package/dist/progress-bar.js.map +1 -0
- package/dist/select.cjs +2 -2
- package/dist/select.cjs.map +1 -1
- package/dist/select.js +3 -3
- package/dist/select.js.map +1 -1
- package/dist/spinner.cjs +6 -0
- package/dist/spinner.cjs.map +1 -0
- package/dist/spinner.js +6 -0
- package/dist/spinner.js.map +1 -0
- package/dist/textarea.cjs +5 -0
- package/dist/textarea.cjs.map +1 -0
- package/dist/textarea.js +5 -0
- package/dist/textarea.js.map +1 -0
- package/dist/tooltip.cjs +6 -0
- package/dist/tooltip.cjs.map +1 -0
- package/dist/tooltip.js +6 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/tree.cjs +6 -0
- package/dist/tree.cjs.map +1 -0
- package/dist/tree.js +6 -0
- package/dist/tree.js.map +1 -0
- package/dist/types/aeico-field.d.ts +52 -0
- package/dist/types/alert/alert.d.ts +1 -0
- package/dist/types/card/defines.d.ts +1 -1
- package/dist/types/copy-button/copy-button.d.ts +32 -0
- package/dist/types/copy-button/defines.d.ts +1 -0
- package/dist/types/copy-button/index.d.ts +3 -0
- package/dist/types/detail/defines.d.ts +2 -1
- package/dist/types/detail/detail.d.ts +3 -1
- package/dist/types/detail/index.d.ts +1 -1
- package/dist/types/detail-group/detail-group.d.ts +39 -0
- package/dist/types/detail-group/index.d.ts +2 -0
- package/dist/types/drawer/defines.d.ts +1 -0
- package/dist/types/drawer/drawer.d.ts +31 -0
- package/dist/types/drawer/index.d.ts +3 -0
- package/dist/types/icon/built-in-icons.d.ts +1 -0
- package/dist/types/icon/defines.d.ts +5 -1
- package/dist/types/icon/icon.d.ts +1 -0
- package/dist/types/icon/index.d.ts +1 -1
- package/dist/types/icon/registry.d.ts +8 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/menu/defines.d.ts +15 -0
- package/dist/types/menu/index.d.ts +5 -0
- package/dist/types/menu/menu-item.d.ts +63 -0
- package/dist/types/menu/menu.d.ts +34 -0
- package/dist/types/number-input/index.d.ts +2 -0
- package/dist/types/number-input/number-input.d.ts +35 -0
- package/dist/types/pagination/defines.d.ts +2 -0
- package/dist/types/pagination/index.d.ts +3 -0
- package/dist/types/pagination/pagination.d.ts +77 -0
- package/dist/types/select/select.d.ts +2 -2
- package/dist/types/spinner/defines.d.ts +3 -0
- package/dist/types/spinner/index.d.ts +3 -0
- package/dist/types/spinner/spinner.d.ts +35 -0
- package/dist/types/switch/defines.d.ts +1 -0
- package/dist/types/switch/switch.d.ts +8 -4
- package/dist/types/tabs/defines.d.ts +1 -0
- package/dist/types/tabs/tabs.d.ts +3 -0
- package/dist/types/text-input/text-input.d.ts +0 -4
- package/dist/types/textarea/index.d.ts +1 -0
- package/dist/types/textarea/textarea.d.ts +26 -0
- package/dist/types/tooltip/defines.d.ts +2 -0
- package/dist/types/tooltip/index.d.ts +4 -0
- package/dist/types/tooltip/tooltip.d.ts +48 -0
- package/dist/types/tree/defines.d.ts +23 -0
- package/dist/types/tree/index.d.ts +5 -0
- package/dist/types/tree/tree-item.d.ts +54 -0
- package/dist/types/tree/tree.d.ts +64 -0
- package/package.json +5 -5
- package/src/aeico-field.ts +142 -7
- package/src/alert/alert.ts +3 -2
- package/src/card/defines.ts +1 -1
- package/src/checkbox/checkbox.ts +17 -2
- package/src/copy-button/copy-button.ts +150 -0
- package/src/copy-button/defines.ts +5 -0
- package/src/copy-button/index.ts +3 -0
- package/src/detail/defines.ts +2 -1
- package/src/detail/detail.ts +5 -1
- package/src/detail/index.ts +1 -1
- package/src/detail-group/detail-group.ts +104 -0
- package/src/detail-group/index.ts +2 -0
- package/src/drawer/defines.ts +1 -0
- package/src/drawer/drawer.ts +157 -0
- package/src/drawer/index.ts +3 -0
- package/src/icon/built-in-icons.ts +21 -0
- package/src/icon/defines.ts +6 -1
- package/src/icon/icon.ts +29 -10
- package/src/icon/index.ts +1 -1
- package/src/icon/registry.ts +23 -1
- package/src/index.ts +30 -0
- package/src/menu/defines.ts +17 -0
- package/src/menu/index.ts +5 -0
- package/src/menu/menu-item.ts +315 -0
- package/src/menu/menu.ts +81 -0
- package/src/number-input/index.ts +2 -0
- package/src/number-input/number-input.ts +137 -0
- package/src/pagination/defines.ts +2 -0
- package/src/pagination/index.ts +3 -0
- package/src/pagination/pagination.ts +310 -0
- package/src/radio-group/radio-group.ts +11 -4
- package/src/select/select.ts +111 -70
- package/src/slider/slider.ts +9 -2
- package/src/spinner/defines.ts +12 -0
- package/src/spinner/index.ts +3 -0
- package/src/spinner/spinner.ts +81 -0
- package/src/styles/color.css +91 -91
- package/src/styles/components/action-button.css +37 -0
- package/src/styles/components/alert.css +22 -28
- package/src/styles/components/badge.css +13 -20
- package/src/styles/components/breadcrumb-item.css +7 -7
- package/src/styles/components/button.css +39 -50
- package/src/styles/components/card.css +45 -30
- package/src/styles/components/checkbox.css +9 -36
- package/src/styles/components/copy-button.css +108 -0
- package/src/styles/components/detail-group.css +10 -0
- package/src/styles/components/detail.css +56 -35
- package/src/styles/components/dialog.css +11 -11
- package/src/styles/components/divider.css +3 -3
- package/src/styles/components/drawer.css +152 -0
- package/src/styles/components/dropdown-item.css +7 -8
- package/src/styles/components/dropdown.css +3 -4
- package/src/styles/components/field-label.css +120 -0
- package/src/styles/components/icon-button.css +25 -36
- package/src/styles/components/icon.css +1 -1
- package/src/styles/components/menu-item.css +167 -0
- package/src/styles/components/menu.css +17 -0
- package/src/styles/components/navbar.css +16 -16
- package/src/styles/components/number-input.css +158 -0
- package/src/styles/components/pagination.css +205 -0
- package/src/styles/components/progress-bar.css +2 -3
- package/src/styles/components/radio-group.css +69 -106
- package/src/styles/components/select-option.css +5 -5
- package/src/styles/components/select.css +30 -69
- package/src/styles/components/slider.css +26 -71
- package/src/styles/components/spinner.css +78 -0
- package/src/styles/components/switch.css +64 -27
- package/src/styles/components/tab-panel.css +1 -1
- package/src/styles/components/tab.css +4 -5
- package/src/styles/components/tabs.css +49 -1
- package/src/styles/components/tag.css +14 -21
- package/src/styles/components/text-input.css +17 -64
- package/src/styles/components/textarea.css +66 -0
- package/src/styles/components/tooltip.css +102 -0
- package/src/styles/components/tree-item.css +152 -0
- package/src/styles/components/tree.css +10 -0
- package/src/styles/layout.css +457 -25
- package/src/styles/radius.css +10 -0
- package/src/styles/size.css +7 -7
- package/src/styles/variables.css +271 -247
- package/src/switch/defines.ts +1 -0
- package/src/switch/switch.ts +61 -12
- package/src/tabs/defines.ts +1 -0
- package/src/tabs/tabs.ts +12 -0
- package/src/text-input/text-input.ts +10 -15
- package/src/textarea/index.ts +1 -0
- package/src/textarea/textarea.ts +107 -0
- package/src/tooltip/defines.ts +11 -0
- package/src/tooltip/index.ts +4 -0
- package/src/tooltip/tooltip.ts +183 -0
- package/src/tree/defines.ts +26 -0
- package/src/tree/index.ts +5 -0
- package/src/tree/tree-item.ts +258 -0
- package/src/tree/tree.ts +237 -0
- package/dist/chunks/aeico-field.cjs +0 -179
- package/dist/chunks/aeico-field.cjs.map +0 -1
- package/dist/chunks/aeico-field.js +0 -180
- package/dist/chunks/aeico-field.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"breadcrumb-item.js","sources":["../../src/breadcrumb/breadcrumb.ts","../../src/breadcrumb/breadcrumb-item.ts"],"sourcesContent":["import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport colorCSS from '../styles/color.css?inline';\nimport style from '../styles/components/breadcrumb.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\nimport type BreadcrumbItem from './breadcrumb-item';\n\n/**\n * Breadcrumb Component\n *\n * A navigation trail that shows the user's location in a hierarchy.\n * Automatically injects separators between items and marks the last item\n * as `aria-current=\"page\"`.\n *\n * The separator is configurable via:\n * - `separator` attribute (text, default `/`) — simple and concise\n * - `slot=\"separator\"` (any element, e.g. `ae-icon`) — takes priority over the attribute\n *\n * Supports `color` for theming item link colors. The separator intentionally\n * uses a fixed muted color and does NOT respond to the `color` prop.\n *\n * @example\n * ```html\n * <!-- Default separator \"/\" -->\n * <ae-breadcrumb>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item href=\"/docs\">Docs</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Getting Started</ae-breadcrumb-item>\n * </ae-breadcrumb>\n *\n * <!-- Custom text separator -->\n * <ae-breadcrumb separator=\">\">\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current</ae-breadcrumb-item>\n * </ae-breadcrumb>\n *\n * <!-- Icon separator (slot takes priority over separator attribute) -->\n * <ae-breadcrumb>\n * <ae-icon slot=\"separator\" name=\"chevron-right\" size=\"xs\"></ae-icon>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current</ae-breadcrumb-item>\n * </ae-breadcrumb>\n * ```\n */\nclass Breadcrumb extends AeicoComponent {\n static tagName = 'breadcrumb';\n\n protected static styles = [styleVariables, colorCSS, style];\n\n /** Text separator shown between items. Ignored when `slot=\"separator\"` is provided. */\n @prop({ type: String })\n accessor separator: string = '/';\n\n @prop({ type: String })\n accessor color: string | undefined;\n\n private _itemsSlot: HTMLSlotElement | null = null;\n private _sepSlot: HTMLSlotElement | null = null;\n\n protected render() {\n return html(({ nav, ol, slot }) => {\n nav({ 'aria-label': 'breadcrumb', part: 'nav' }, () => {\n ol({ part: 'list', className: 'list' }, () => {\n this._itemsSlot = slot({\n '@slotchange': () => this._syncSeparators(),\n });\n });\n });\n this._sepSlot = slot({\n name: 'separator',\n className: 'sep-template',\n '@slotchange': () => this._syncSeparators(),\n });\n });\n }\n\n protected onUpdated() {\n this._syncSeparators();\n }\n\n private _getItems(): BreadcrumbItem[] {\n return (this._itemsSlot?.assignedElements() ?? []) as BreadcrumbItem[];\n }\n\n private _getSepElement(): Element | null {\n return this._sepSlot?.assignedElements()[0] ?? null;\n }\n\n private _syncSeparators = () => {\n const items = this._getItems();\n const sepEl = this._getSepElement();\n\n items.forEach((item, i) => {\n // Remove previously injected separators to avoid duplicates\n item.querySelectorAll('[data-ae-sep]').forEach((n) => n.remove());\n\n const isLast = i === items.length - 1;\n\n // Mark the last item as the current page for accessibility\n if (isLast) {\n item.setAttribute('aria-current', 'page');\n } else {\n item.removeAttribute('aria-current');\n }\n\n // First item gets no separator\n if (i === 0) return;\n\n const wrapper = document.createElement('span');\n wrapper.setAttribute('slot', 'separator');\n wrapper.setAttribute('data-ae-sep', '');\n wrapper.setAttribute('aria-hidden', 'true');\n\n if (sepEl) {\n // Clone the slotted separator element (e.g. ae-icon)\n wrapper.appendChild(sepEl.cloneNode(true));\n } else {\n // Fall back to text separator\n wrapper.textContent = this.separator;\n }\n\n item.prepend(wrapper);\n });\n };\n}\n\nBreadcrumb.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-breadcrumb': Breadcrumb;\n }\n}\n\nexport default Breadcrumb;\nexport type BreadcrumbProps = InferProps<typeof Breadcrumb>;\n","import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport style from '../styles/components/breadcrumb-item.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\n\n/**\n * BreadcrumbItem Component\n *\n * A single item in the `ae-breadcrumb` navigation trail.\n * Renders as a link (`<a>`) when `href` is provided, otherwise as plain text.\n * The separator is injected by the parent `ae-breadcrumb`.\n *\n * @example\n * ```html\n * <ae-breadcrumb>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item href=\"/docs\">Docs</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current Page</ae-breadcrumb-item>\n * </ae-breadcrumb>\n * ```\n */\nclass BreadcrumbItem extends AeicoComponent {\n static tagName = 'breadcrumb-item';\n\n protected static styles = [styleVariables, style];\n\n @prop({ type: String })\n accessor href: string | undefined;\n\n protected render() {\n return html(({ li, span, slot, a }) => {\n li({ part: 'item', className: 'item' }, () => {\n span({ part: 'separator', className: 'sep', 'aria-hidden': 'true' }, () => {\n slot({ name: 'separator' });\n });\n span({ part: 'label', className: 'label' }, () => {\n if (this.href) {\n a({ href: this.href, part: 'link' }, () => {\n slot();\n });\n } else {\n slot();\n }\n });\n });\n });\n }\n}\n\nBreadcrumbItem.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-breadcrumb-item': BreadcrumbItem;\n }\n}\n\nexport default BreadcrumbItem;\nexport type BreadcrumbItemProps = InferProps<typeof BreadcrumbItem>;\n"],"names":["_a","_init","__privateAdd","__runInitializers","__publicField","__decoratorStart","__decorateElement","__decoratorMetadata","style"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,YAAA,gBAAAA,MAAAC,SAAA,YAAA;AA8CA,MAAM,oBAAmBD,OAAA,gBAMvB,iBAAA,CAAC,KAAK,EAAE,MAAM,OAAA,CAAQ,CAAA,GAGtB,aAAA,CAAC,KAAK,EAAE,MAAM,OAAA,CAAQ,IATCA,MAAe;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AAOEE,mBAAA,MAAS,YAAoBC,oBAA7BF,SAAA,GAAA,MAA6B,GAAA,CAAA,GAA7BE,oBAAAF,SAAA,IAAA,IAAA;AAGAC,mBAAA,MAAS,QAATC,oBAAAF,SAAA,IAAA,IAAA,CAAA,GAAAE,oBAAAF,SAAA,IAAA,IAAA;AAEAG,oBAAA,MAAQ,cAAqC,IAAA;AAC7CA,oBAAA,MAAQ,YAAmC,IAAA;AA+B3CA,oBAAA,MAAQ,mBAAkB,MAAM;AAC9B,YAAM,QAAQ,KAAK,UAAA;AACnB,YAAM,QAAQ,KAAK,eAAA;AAEnB,YAAM,QAAQ,CAAC,MAAM,MAAM;AAEzB,aAAK,iBAAiB,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ;AAEhE,cAAM,SAAS,MAAM,MAAM,SAAS;AAGpC,YAAI,QAAQ;AACV,eAAK,aAAa,gBAAgB,MAAM;AAAA,QAC1C,OAAO;AACL,eAAK,gBAAgB,cAAc;AAAA,QACrC;AAGA,YAAI,MAAM,EAAG;AAEb,cAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,gBAAQ,aAAa,QAAQ,WAAW;AACxC,gBAAQ,aAAa,eAAe,EAAE;AACtC,gBAAQ,aAAa,eAAe,MAAM;AAE1C,YAAI,OAAO;AAET,kBAAQ,YAAY,MAAM,UAAU,IAAI,CAAC;AAAA,QAC3C,OAAO;AAEL,kBAAQ,cAAc,KAAK;AAAA,QAC7B;AAEA,aAAK,QAAQ,OAAO;AAAA,MACtB,CAAC;AAAA,IACH,CAAA;AAAA,EAAA;AAAA,EAhEU,SAAS;AACjB,WAAO,KAAK,CAAC,EAAE,KAAK,IAAI,WAAW;AACjC,UAAI,EAAE,cAAc,cAAc,MAAM,MAAA,GAAS,MAAM;AACrD,WAAG,EAAE,MAAM,QAAQ,WAAW,OAAA,GAAU,MAAM;AAC5C,eAAK,aAAa,KAAK;AAAA,YACrB,eAAe,MAAM,KAAK,gBAAA;AAAA,UAAgB,CAC3C;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AACD,WAAK,WAAW,KAAK;AAAA,QACnB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,eAAe,MAAM,KAAK,gBAAA;AAAA,MAAgB,CAC3C;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEU,YAAY;AACpB,SAAK,gBAAA;AAAA,EACP;AAAA,EAEQ,YAA8B;;AACpC,aAAQJ,MAAA,KAAK,eAAL,gBAAAA,IAAiB,uBAAsB,CAAA;AAAA,EACjD;AAAA,EAEQ,iBAAiC;;AACvC,aAAOA,MAAA,KAAK,aAAL,gBAAAA,IAAe,mBAAmB,OAAM;AAAA,EACjD;AAsCF;AAhFAC,UAAAI,mBAAAL,IAAA;AAOW,aAAA,oBAAA,QAAA;AAGA,SAAA,oBAAA,QAAA;AAHTM,oBAAAL,SAAA,GAAS,aADT,gBANI,YAOK,UAAA;AAGTK,oBAAAL,SAAA,GAAS,SADT,YATI,YAUK,MAAA;AAVXM,sBAAAN,SAAM,UAAA;AACJG,gBADI,YACG,WAAU,YAAA;AAEjBA,gBAHI,YAGa,UAAS,
|
|
1
|
+
{"version":3,"file":"breadcrumb-item.js","sources":["../../src/breadcrumb/breadcrumb.ts","../../src/breadcrumb/breadcrumb-item.ts"],"sourcesContent":["import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport colorCSS from '../styles/color.css?inline';\nimport style from '../styles/components/breadcrumb.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\nimport type BreadcrumbItem from './breadcrumb-item';\n\n/**\n * Breadcrumb Component\n *\n * A navigation trail that shows the user's location in a hierarchy.\n * Automatically injects separators between items and marks the last item\n * as `aria-current=\"page\"`.\n *\n * The separator is configurable via:\n * - `separator` attribute (text, default `/`) — simple and concise\n * - `slot=\"separator\"` (any element, e.g. `ae-icon`) — takes priority over the attribute\n *\n * Supports `color` for theming item link colors. The separator intentionally\n * uses a fixed muted color and does NOT respond to the `color` prop.\n *\n * @example\n * ```html\n * <!-- Default separator \"/\" -->\n * <ae-breadcrumb>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item href=\"/docs\">Docs</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Getting Started</ae-breadcrumb-item>\n * </ae-breadcrumb>\n *\n * <!-- Custom text separator -->\n * <ae-breadcrumb separator=\">\">\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current</ae-breadcrumb-item>\n * </ae-breadcrumb>\n *\n * <!-- Icon separator (slot takes priority over separator attribute) -->\n * <ae-breadcrumb>\n * <ae-icon slot=\"separator\" name=\"chevron-right\" size=\"xs\"></ae-icon>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current</ae-breadcrumb-item>\n * </ae-breadcrumb>\n * ```\n */\nclass Breadcrumb extends AeicoComponent {\n static tagName = 'breadcrumb';\n\n protected static styles = [styleVariables, colorCSS, style];\n\n /** Text separator shown between items. Ignored when `slot=\"separator\"` is provided. */\n @prop({ type: String })\n accessor separator: string = '/';\n\n @prop({ type: String })\n accessor color: string | undefined;\n\n private _itemsSlot: HTMLSlotElement | null = null;\n private _sepSlot: HTMLSlotElement | null = null;\n\n protected render() {\n return html(({ nav, ol, slot }) => {\n nav({ 'aria-label': 'breadcrumb', part: 'nav' }, () => {\n ol({ part: 'list', className: 'list' }, () => {\n this._itemsSlot = slot({\n '@slotchange': () => this._syncSeparators(),\n });\n });\n });\n this._sepSlot = slot({\n name: 'separator',\n className: 'sep-template',\n '@slotchange': () => this._syncSeparators(),\n });\n });\n }\n\n protected onUpdated() {\n this._syncSeparators();\n }\n\n private _getItems(): BreadcrumbItem[] {\n return (this._itemsSlot?.assignedElements() ?? []) as BreadcrumbItem[];\n }\n\n private _getSepElement(): Element | null {\n return this._sepSlot?.assignedElements()[0] ?? null;\n }\n\n private _syncSeparators = () => {\n const items = this._getItems();\n const sepEl = this._getSepElement();\n\n items.forEach((item, i) => {\n // Remove previously injected separators to avoid duplicates\n item.querySelectorAll('[data-ae-sep]').forEach((n) => n.remove());\n\n const isLast = i === items.length - 1;\n\n // Mark the last item as the current page for accessibility\n if (isLast) {\n item.setAttribute('aria-current', 'page');\n } else {\n item.removeAttribute('aria-current');\n }\n\n // First item gets no separator\n if (i === 0) return;\n\n const wrapper = document.createElement('span');\n wrapper.setAttribute('slot', 'separator');\n wrapper.setAttribute('data-ae-sep', '');\n wrapper.setAttribute('aria-hidden', 'true');\n\n if (sepEl) {\n // Clone the slotted separator element (e.g. ae-icon)\n wrapper.appendChild(sepEl.cloneNode(true));\n } else {\n // Fall back to text separator\n wrapper.textContent = this.separator;\n }\n\n item.prepend(wrapper);\n });\n };\n}\n\nBreadcrumb.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-breadcrumb': Breadcrumb;\n }\n}\n\nexport default Breadcrumb;\nexport type BreadcrumbProps = InferProps<typeof Breadcrumb>;\n","import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport style from '../styles/components/breadcrumb-item.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\n\n/**\n * BreadcrumbItem Component\n *\n * A single item in the `ae-breadcrumb` navigation trail.\n * Renders as a link (`<a>`) when `href` is provided, otherwise as plain text.\n * The separator is injected by the parent `ae-breadcrumb`.\n *\n * @example\n * ```html\n * <ae-breadcrumb>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item href=\"/docs\">Docs</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current Page</ae-breadcrumb-item>\n * </ae-breadcrumb>\n * ```\n */\nclass BreadcrumbItem extends AeicoComponent {\n static tagName = 'breadcrumb-item';\n\n protected static styles = [styleVariables, style];\n\n @prop({ type: String })\n accessor href: string | undefined;\n\n protected render() {\n return html(({ li, span, slot, a }) => {\n li({ part: 'item', className: 'item' }, () => {\n span({ part: 'separator', className: 'sep', 'aria-hidden': 'true' }, () => {\n slot({ name: 'separator' });\n });\n span({ part: 'label', className: 'label' }, () => {\n if (this.href) {\n a({ href: this.href, part: 'link' }, () => {\n slot();\n });\n } else {\n slot();\n }\n });\n });\n });\n }\n}\n\nBreadcrumbItem.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-breadcrumb-item': BreadcrumbItem;\n }\n}\n\nexport default BreadcrumbItem;\nexport type BreadcrumbItemProps = InferProps<typeof BreadcrumbItem>;\n"],"names":["_a","_init","__privateAdd","__runInitializers","__publicField","__decoratorStart","__decorateElement","__decoratorMetadata","styleVariables","style"],"mappings":"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"}
|
|
@@ -73,7 +73,7 @@ __publicField(ButtonGroup, "props", {
|
|
|
73
73
|
block: { type: Boolean },
|
|
74
74
|
disabled: { type: Boolean }
|
|
75
75
|
});
|
|
76
|
-
__publicField(ButtonGroup, "styles", [variables.
|
|
76
|
+
__publicField(ButtonGroup, "styles", [variables.variables, buttonGroupStyle]);
|
|
77
77
|
ButtonGroup.register();
|
|
78
78
|
exports.ButtonGroup = ButtonGroup;
|
|
79
79
|
//# sourceMappingURL=button-group.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-group.cjs","sources":["../../src/button-group/button-group.ts"],"sourcesContent":["import type { InferProps, Props } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport buttonGroupStyle from '../styles/components/button-group.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport type { ButtonColor, ButtonVariant, ButtonSize } from '../button';\nimport Button from '../button/button';\nimport DropdownButton from '../dropdown/dropdown-button';\n\n/**\n * ButtonGroup Component\n *\n * Groups multiple `ae-button` elements, propagating shared `variant`, `color`,\n * `size`, and `disabled` props to each child. Supports a `compact` mode that\n * joins buttons into a seamless connected strip (like Bootstrap's button group).\n *\n * @example\n * ```html\n * <!-- Loose group (gap between buttons) -->\n * <ae-button-group variant=\"outlined\" color=\"primary\">\n * <ae-button>One</ae-button>\n * <ae-button>Two</ae-button>\n * <ae-button>Three</ae-button>\n * </ae-button-group>\n *\n * <!-- Compact — joined strip -->\n * <ae-button-group compact color=\"primary\">\n * <ae-button>Left</ae-button>\n * <ae-button>Middle</ae-button>\n * <ae-button>Right</ae-button>\n * </ae-button-group>\n *\n * <!-- Full-width -->\n * <ae-button-group block color=\"danger\" variant=\"outlined\">\n * <ae-button>Delete</ae-button>\n * <ae-button>Archive</ae-button>\n * </ae-button-group>\n * ```\n */\nclass ButtonGroup extends AeicoComponent {\n static props: Props = {\n variant: { type: String },\n color: { type: String },\n size: { type: String },\n compact: { type: Boolean },\n block: { type: Boolean },\n disabled: { type: Boolean },\n };\n\n protected static styles = [styleVariables, buttonGroupStyle];\n\n declare variant?: ButtonVariant;\n declare color?: ButtonColor;\n declare size?: ButtonSize;\n declare compact?: boolean;\n declare block?: boolean;\n declare disabled?: boolean;\n\n private slotEl: HTMLSlotElement | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n\n if (this.variant === undefined) this.variant = 'filled';\n if (this.color === undefined) this.color = 'default';\n if (this.size === undefined) this.size = 'md';\n }\n\n protected render() {\n return html(({ slot }) => {\n this.slotEl = slot({\n '@slotchange': () => this._syncChildren(),\n });\n this._syncChildren();\n });\n }\n\n private _getButtons(): Array<Button | DropdownButton> {\n if (!this.slotEl) return [];\n\n return (\n this.slotEl.assignedElements({ flatten: true }) as Array<Button | DropdownButton>\n ).filter((el) => {\n const tag = el.tagName.toLowerCase();\n return tag === 'ae-button' || tag === 'ae-dropdown-button';\n });\n }\n\n private _syncChildren() {\n const buttons = this._getButtons();\n const r = this.size === 'xs' || this.size === 'sm' ? 3 : 4;\n\n buttons.forEach((btn: Button | DropdownButton, i) => {\n btn.variant = this.variant;\n btn.color = this.color;\n btn.size = this.size;\n\n if (this.disabled) {\n btn.disabled = true;\n } else {\n btn.disabled = false;\n }\n\n if (this.compact) {\n const isFirst = i === 0;\n const isLast = i === buttons.length - 1;\n\n // Overlap adjacent borders by pulling non-first buttons left 1px\n btn.style.marginLeft = isFirst ? '' : '-1px';\n\n // Shape corners: only the outer edges of the strip keep radius\n btn.style.setProperty('--_btn-r-tl', isFirst ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-bl', isFirst ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-tr', isLast ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-br', isLast ? `${r}px` : '0');\n } else {\n btn.style.marginLeft = '';\n this._clearRadius(btn);\n }\n });\n }\n\n private _clearRadius(btn: HTMLElement) {\n btn.style.removeProperty('--_btn-r-tl');\n btn.style.removeProperty('--_btn-r-tr');\n btn.style.removeProperty('--_btn-r-br');\n btn.style.removeProperty('--_btn-r-bl');\n }\n}\n\nButtonGroup.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-button-group': ButtonGroup;\n }\n}\n\nexport default ButtonGroup;\nexport type ButtonGroupProps = InferProps<typeof ButtonGroup>;\n"],"names":["AeicoComponent","html","styleVariables"],"mappings":";;;;;;;;AAuCA,MAAM,oBAAoBA,eAAAA,eAAe;AAAA,EAAzC;AAAA;AAmBU,kCAAiC;AAAA;AAAA,EAEzC,oBAAoB;AAClB,UAAM,kBAAA;AAEN,QAAI,KAAK,YAAY,OAAW,MAAK,UAAU;AAC/C,QAAI,KAAK,UAAU,OAAW,MAAK,QAAQ;AAC3C,QAAI,KAAK,SAAS,OAAW,MAAK,OAAO;AAAA,EAC3C;AAAA,EAEU,SAAS;AACjB,WAAOC,MAAAA,KAAK,CAAC,EAAE,WAAW;AACxB,WAAK,SAAS,KAAK;AAAA,QACjB,eAAe,MAAM,KAAK,cAAA;AAAA,MAAc,CACzC;AACD,WAAK,cAAA;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAEQ,cAA8C;AACpD,QAAI,CAAC,KAAK,OAAQ,QAAO,CAAA;AAEzB,WACE,KAAK,OAAO,iBAAiB,EAAE,SAAS,MAAM,EAC9C,OAAO,CAAC,OAAO;AACf,YAAM,MAAM,GAAG,QAAQ,YAAA;AACvB,aAAO,QAAQ,eAAe,QAAQ;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,gBAAgB;AACtB,UAAM,UAAU,KAAK,YAAA;AACrB,UAAM,IAAI,KAAK,SAAS,QAAQ,KAAK,SAAS,OAAO,IAAI;AAEzD,YAAQ,QAAQ,CAAC,KAA8B,MAAM;AACnD,UAAI,UAAU,KAAK;AACnB,UAAI,QAAQ,KAAK;AACjB,UAAI,OAAO,KAAK;AAEhB,UAAI,KAAK,UAAU;AACjB,YAAI,WAAW;AAAA,MACjB,OAAO;AACL,YAAI,WAAW;AAAA,MACjB;AAEA,UAAI,KAAK,SAAS;AAChB,cAAM,UAAU,MAAM;AACtB,cAAM,SAAS,MAAM,QAAQ,SAAS;AAGtC,YAAI,MAAM,aAAa,UAAU,KAAK;AAGtC,YAAI,MAAM,YAAY,eAAe,UAAU,GAAG,CAAC,OAAO,GAAG;AAC7D,YAAI,MAAM,YAAY,eAAe,UAAU,GAAG,CAAC,OAAO,GAAG;AAC7D,YAAI,MAAM,YAAY,eAAe,SAAS,GAAG,CAAC,OAAO,GAAG;AAC5D,YAAI,MAAM,YAAY,eAAe,SAAS,GAAG,CAAC,OAAO,GAAG;AAAA,MAC9D,OAAO;AACL,YAAI,MAAM,aAAa;AACvB,aAAK,aAAa,GAAG;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,aAAa,KAAkB;AACrC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AAAA,EACxC;AACF;AAxFE,cADI,aACG,SAAe;AAAA,EACpB,SAAS,EAAE,MAAM,OAAA;AAAA,EACjB,OAAO,EAAE,MAAM,OAAA;AAAA,EACf,MAAM,EAAE,MAAM,OAAA;AAAA,EACd,SAAS,EAAE,MAAM,QAAA;AAAA,EACjB,OAAO,EAAE,MAAM,QAAA;AAAA,EACf,UAAU,EAAE,MAAM,QAAA;AAAQ;AAG5B,cAVI,aAUa,UAAS,CAACC,UAAAA,
|
|
1
|
+
{"version":3,"file":"button-group.cjs","sources":["../../src/button-group/button-group.ts"],"sourcesContent":["import type { InferProps, Props } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport buttonGroupStyle from '../styles/components/button-group.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport type { ButtonColor, ButtonVariant, ButtonSize } from '../button';\nimport Button from '../button/button';\nimport DropdownButton from '../dropdown/dropdown-button';\n\n/**\n * ButtonGroup Component\n *\n * Groups multiple `ae-button` elements, propagating shared `variant`, `color`,\n * `size`, and `disabled` props to each child. Supports a `compact` mode that\n * joins buttons into a seamless connected strip (like Bootstrap's button group).\n *\n * @example\n * ```html\n * <!-- Loose group (gap between buttons) -->\n * <ae-button-group variant=\"outlined\" color=\"primary\">\n * <ae-button>One</ae-button>\n * <ae-button>Two</ae-button>\n * <ae-button>Three</ae-button>\n * </ae-button-group>\n *\n * <!-- Compact — joined strip -->\n * <ae-button-group compact color=\"primary\">\n * <ae-button>Left</ae-button>\n * <ae-button>Middle</ae-button>\n * <ae-button>Right</ae-button>\n * </ae-button-group>\n *\n * <!-- Full-width -->\n * <ae-button-group block color=\"danger\" variant=\"outlined\">\n * <ae-button>Delete</ae-button>\n * <ae-button>Archive</ae-button>\n * </ae-button-group>\n * ```\n */\nclass ButtonGroup extends AeicoComponent {\n static props: Props = {\n variant: { type: String },\n color: { type: String },\n size: { type: String },\n compact: { type: Boolean },\n block: { type: Boolean },\n disabled: { type: Boolean },\n };\n\n protected static styles = [styleVariables, buttonGroupStyle];\n\n declare variant?: ButtonVariant;\n declare color?: ButtonColor;\n declare size?: ButtonSize;\n declare compact?: boolean;\n declare block?: boolean;\n declare disabled?: boolean;\n\n private slotEl: HTMLSlotElement | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n\n if (this.variant === undefined) this.variant = 'filled';\n if (this.color === undefined) this.color = 'default';\n if (this.size === undefined) this.size = 'md';\n }\n\n protected render() {\n return html(({ slot }) => {\n this.slotEl = slot({\n '@slotchange': () => this._syncChildren(),\n });\n this._syncChildren();\n });\n }\n\n private _getButtons(): Array<Button | DropdownButton> {\n if (!this.slotEl) return [];\n\n return (\n this.slotEl.assignedElements({ flatten: true }) as Array<Button | DropdownButton>\n ).filter((el) => {\n const tag = el.tagName.toLowerCase();\n return tag === 'ae-button' || tag === 'ae-dropdown-button';\n });\n }\n\n private _syncChildren() {\n const buttons = this._getButtons();\n const r = this.size === 'xs' || this.size === 'sm' ? 3 : 4;\n\n buttons.forEach((btn: Button | DropdownButton, i) => {\n btn.variant = this.variant;\n btn.color = this.color;\n btn.size = this.size;\n\n if (this.disabled) {\n btn.disabled = true;\n } else {\n btn.disabled = false;\n }\n\n if (this.compact) {\n const isFirst = i === 0;\n const isLast = i === buttons.length - 1;\n\n // Overlap adjacent borders by pulling non-first buttons left 1px\n btn.style.marginLeft = isFirst ? '' : '-1px';\n\n // Shape corners: only the outer edges of the strip keep radius\n btn.style.setProperty('--_btn-r-tl', isFirst ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-bl', isFirst ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-tr', isLast ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-br', isLast ? `${r}px` : '0');\n } else {\n btn.style.marginLeft = '';\n this._clearRadius(btn);\n }\n });\n }\n\n private _clearRadius(btn: HTMLElement) {\n btn.style.removeProperty('--_btn-r-tl');\n btn.style.removeProperty('--_btn-r-tr');\n btn.style.removeProperty('--_btn-r-br');\n btn.style.removeProperty('--_btn-r-bl');\n }\n}\n\nButtonGroup.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-button-group': ButtonGroup;\n }\n}\n\nexport default ButtonGroup;\nexport type ButtonGroupProps = InferProps<typeof ButtonGroup>;\n"],"names":["AeicoComponent","html","styleVariables"],"mappings":";;;;;;;;AAuCA,MAAM,oBAAoBA,eAAAA,eAAe;AAAA,EAAzC;AAAA;AAmBU,kCAAiC;AAAA;AAAA,EAEzC,oBAAoB;AAClB,UAAM,kBAAA;AAEN,QAAI,KAAK,YAAY,OAAW,MAAK,UAAU;AAC/C,QAAI,KAAK,UAAU,OAAW,MAAK,QAAQ;AAC3C,QAAI,KAAK,SAAS,OAAW,MAAK,OAAO;AAAA,EAC3C;AAAA,EAEU,SAAS;AACjB,WAAOC,MAAAA,KAAK,CAAC,EAAE,WAAW;AACxB,WAAK,SAAS,KAAK;AAAA,QACjB,eAAe,MAAM,KAAK,cAAA;AAAA,MAAc,CACzC;AACD,WAAK,cAAA;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAEQ,cAA8C;AACpD,QAAI,CAAC,KAAK,OAAQ,QAAO,CAAA;AAEzB,WACE,KAAK,OAAO,iBAAiB,EAAE,SAAS,MAAM,EAC9C,OAAO,CAAC,OAAO;AACf,YAAM,MAAM,GAAG,QAAQ,YAAA;AACvB,aAAO,QAAQ,eAAe,QAAQ;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,gBAAgB;AACtB,UAAM,UAAU,KAAK,YAAA;AACrB,UAAM,IAAI,KAAK,SAAS,QAAQ,KAAK,SAAS,OAAO,IAAI;AAEzD,YAAQ,QAAQ,CAAC,KAA8B,MAAM;AACnD,UAAI,UAAU,KAAK;AACnB,UAAI,QAAQ,KAAK;AACjB,UAAI,OAAO,KAAK;AAEhB,UAAI,KAAK,UAAU;AACjB,YAAI,WAAW;AAAA,MACjB,OAAO;AACL,YAAI,WAAW;AAAA,MACjB;AAEA,UAAI,KAAK,SAAS;AAChB,cAAM,UAAU,MAAM;AACtB,cAAM,SAAS,MAAM,QAAQ,SAAS;AAGtC,YAAI,MAAM,aAAa,UAAU,KAAK;AAGtC,YAAI,MAAM,YAAY,eAAe,UAAU,GAAG,CAAC,OAAO,GAAG;AAC7D,YAAI,MAAM,YAAY,eAAe,UAAU,GAAG,CAAC,OAAO,GAAG;AAC7D,YAAI,MAAM,YAAY,eAAe,SAAS,GAAG,CAAC,OAAO,GAAG;AAC5D,YAAI,MAAM,YAAY,eAAe,SAAS,GAAG,CAAC,OAAO,GAAG;AAAA,MAC9D,OAAO;AACL,YAAI,MAAM,aAAa;AACvB,aAAK,aAAa,GAAG;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,aAAa,KAAkB;AACrC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AAAA,EACxC;AACF;AAxFE,cADI,aACG,SAAe;AAAA,EACpB,SAAS,EAAE,MAAM,OAAA;AAAA,EACjB,OAAO,EAAE,MAAM,OAAA;AAAA,EACf,MAAM,EAAE,MAAM,OAAA;AAAA,EACd,SAAS,EAAE,MAAM,QAAA;AAAA,EACjB,OAAO,EAAE,MAAM,QAAA;AAAA,EACf,UAAU,EAAE,MAAM,QAAA;AAAQ;AAG5B,cAVI,aAUa,UAAS,CAACC,UAAAA,WAAgB,gBAAgB;AAiF7D,YAAY,SAAA;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import {
|
|
4
|
+
import { v as variables } from "./variables.js";
|
|
5
5
|
import { A as AeicoComponent } from "./aeico-component.js";
|
|
6
6
|
import { html } from "aeico";
|
|
7
7
|
const buttonGroupStyle = ":host {\n display: inline-flex;\n align-items: stretch;\n gap: 8px;\n}\n\n:host([block]) {\n display: flex;\n width: 100%;\n}\n\n:host([block]) ::slotted(ae-button) {\n flex: 1;\n}\n\n:host([compact]) {\n gap: 0;\n}\n\n/* Raise hovered/focused button so its border shows above neighbours */\n:host([compact]) ::slotted(ae-button:hover),\n:host([compact]) ::slotted(ae-button:focus-within) {\n position: relative;\n z-index: 1;\n}\n";
|
|
@@ -72,7 +72,7 @@ __publicField(ButtonGroup, "props", {
|
|
|
72
72
|
block: { type: Boolean },
|
|
73
73
|
disabled: { type: Boolean }
|
|
74
74
|
});
|
|
75
|
-
__publicField(ButtonGroup, "styles", [
|
|
75
|
+
__publicField(ButtonGroup, "styles", [variables, buttonGroupStyle]);
|
|
76
76
|
ButtonGroup.register();
|
|
77
77
|
export {
|
|
78
78
|
ButtonGroup as B
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-group.js","sources":["../../src/button-group/button-group.ts"],"sourcesContent":["import type { InferProps, Props } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport buttonGroupStyle from '../styles/components/button-group.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport type { ButtonColor, ButtonVariant, ButtonSize } from '../button';\nimport Button from '../button/button';\nimport DropdownButton from '../dropdown/dropdown-button';\n\n/**\n * ButtonGroup Component\n *\n * Groups multiple `ae-button` elements, propagating shared `variant`, `color`,\n * `size`, and `disabled` props to each child. Supports a `compact` mode that\n * joins buttons into a seamless connected strip (like Bootstrap's button group).\n *\n * @example\n * ```html\n * <!-- Loose group (gap between buttons) -->\n * <ae-button-group variant=\"outlined\" color=\"primary\">\n * <ae-button>One</ae-button>\n * <ae-button>Two</ae-button>\n * <ae-button>Three</ae-button>\n * </ae-button-group>\n *\n * <!-- Compact — joined strip -->\n * <ae-button-group compact color=\"primary\">\n * <ae-button>Left</ae-button>\n * <ae-button>Middle</ae-button>\n * <ae-button>Right</ae-button>\n * </ae-button-group>\n *\n * <!-- Full-width -->\n * <ae-button-group block color=\"danger\" variant=\"outlined\">\n * <ae-button>Delete</ae-button>\n * <ae-button>Archive</ae-button>\n * </ae-button-group>\n * ```\n */\nclass ButtonGroup extends AeicoComponent {\n static props: Props = {\n variant: { type: String },\n color: { type: String },\n size: { type: String },\n compact: { type: Boolean },\n block: { type: Boolean },\n disabled: { type: Boolean },\n };\n\n protected static styles = [styleVariables, buttonGroupStyle];\n\n declare variant?: ButtonVariant;\n declare color?: ButtonColor;\n declare size?: ButtonSize;\n declare compact?: boolean;\n declare block?: boolean;\n declare disabled?: boolean;\n\n private slotEl: HTMLSlotElement | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n\n if (this.variant === undefined) this.variant = 'filled';\n if (this.color === undefined) this.color = 'default';\n if (this.size === undefined) this.size = 'md';\n }\n\n protected render() {\n return html(({ slot }) => {\n this.slotEl = slot({\n '@slotchange': () => this._syncChildren(),\n });\n this._syncChildren();\n });\n }\n\n private _getButtons(): Array<Button | DropdownButton> {\n if (!this.slotEl) return [];\n\n return (\n this.slotEl.assignedElements({ flatten: true }) as Array<Button | DropdownButton>\n ).filter((el) => {\n const tag = el.tagName.toLowerCase();\n return tag === 'ae-button' || tag === 'ae-dropdown-button';\n });\n }\n\n private _syncChildren() {\n const buttons = this._getButtons();\n const r = this.size === 'xs' || this.size === 'sm' ? 3 : 4;\n\n buttons.forEach((btn: Button | DropdownButton, i) => {\n btn.variant = this.variant;\n btn.color = this.color;\n btn.size = this.size;\n\n if (this.disabled) {\n btn.disabled = true;\n } else {\n btn.disabled = false;\n }\n\n if (this.compact) {\n const isFirst = i === 0;\n const isLast = i === buttons.length - 1;\n\n // Overlap adjacent borders by pulling non-first buttons left 1px\n btn.style.marginLeft = isFirst ? '' : '-1px';\n\n // Shape corners: only the outer edges of the strip keep radius\n btn.style.setProperty('--_btn-r-tl', isFirst ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-bl', isFirst ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-tr', isLast ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-br', isLast ? `${r}px` : '0');\n } else {\n btn.style.marginLeft = '';\n this._clearRadius(btn);\n }\n });\n }\n\n private _clearRadius(btn: HTMLElement) {\n btn.style.removeProperty('--_btn-r-tl');\n btn.style.removeProperty('--_btn-r-tr');\n btn.style.removeProperty('--_btn-r-br');\n btn.style.removeProperty('--_btn-r-bl');\n }\n}\n\nButtonGroup.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-button-group': ButtonGroup;\n }\n}\n\nexport default ButtonGroup;\nexport type ButtonGroupProps = InferProps<typeof ButtonGroup>;\n"],"names":[],"mappings":";;;;;;;AAuCA,MAAM,oBAAoB,eAAe;AAAA,EAAzC;AAAA;AAmBU,kCAAiC;AAAA;AAAA,EAEzC,oBAAoB;AAClB,UAAM,kBAAA;AAEN,QAAI,KAAK,YAAY,OAAW,MAAK,UAAU;AAC/C,QAAI,KAAK,UAAU,OAAW,MAAK,QAAQ;AAC3C,QAAI,KAAK,SAAS,OAAW,MAAK,OAAO;AAAA,EAC3C;AAAA,EAEU,SAAS;AACjB,WAAO,KAAK,CAAC,EAAE,WAAW;AACxB,WAAK,SAAS,KAAK;AAAA,QACjB,eAAe,MAAM,KAAK,cAAA;AAAA,MAAc,CACzC;AACD,WAAK,cAAA;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAEQ,cAA8C;AACpD,QAAI,CAAC,KAAK,OAAQ,QAAO,CAAA;AAEzB,WACE,KAAK,OAAO,iBAAiB,EAAE,SAAS,MAAM,EAC9C,OAAO,CAAC,OAAO;AACf,YAAM,MAAM,GAAG,QAAQ,YAAA;AACvB,aAAO,QAAQ,eAAe,QAAQ;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,gBAAgB;AACtB,UAAM,UAAU,KAAK,YAAA;AACrB,UAAM,IAAI,KAAK,SAAS,QAAQ,KAAK,SAAS,OAAO,IAAI;AAEzD,YAAQ,QAAQ,CAAC,KAA8B,MAAM;AACnD,UAAI,UAAU,KAAK;AACnB,UAAI,QAAQ,KAAK;AACjB,UAAI,OAAO,KAAK;AAEhB,UAAI,KAAK,UAAU;AACjB,YAAI,WAAW;AAAA,MACjB,OAAO;AACL,YAAI,WAAW;AAAA,MACjB;AAEA,UAAI,KAAK,SAAS;AAChB,cAAM,UAAU,MAAM;AACtB,cAAM,SAAS,MAAM,QAAQ,SAAS;AAGtC,YAAI,MAAM,aAAa,UAAU,KAAK;AAGtC,YAAI,MAAM,YAAY,eAAe,UAAU,GAAG,CAAC,OAAO,GAAG;AAC7D,YAAI,MAAM,YAAY,eAAe,UAAU,GAAG,CAAC,OAAO,GAAG;AAC7D,YAAI,MAAM,YAAY,eAAe,SAAS,GAAG,CAAC,OAAO,GAAG;AAC5D,YAAI,MAAM,YAAY,eAAe,SAAS,GAAG,CAAC,OAAO,GAAG;AAAA,MAC9D,OAAO;AACL,YAAI,MAAM,aAAa;AACvB,aAAK,aAAa,GAAG;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,aAAa,KAAkB;AACrC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AAAA,EACxC;AACF;AAxFE,cADI,aACG,SAAe;AAAA,EACpB,SAAS,EAAE,MAAM,OAAA;AAAA,EACjB,OAAO,EAAE,MAAM,OAAA;AAAA,EACf,MAAM,EAAE,MAAM,OAAA;AAAA,EACd,SAAS,EAAE,MAAM,QAAA;AAAA,EACjB,OAAO,EAAE,MAAM,QAAA;AAAA,EACf,UAAU,EAAE,MAAM,QAAA;AAAQ;AAG5B,cAVI,aAUa,UAAS,
|
|
1
|
+
{"version":3,"file":"button-group.js","sources":["../../src/button-group/button-group.ts"],"sourcesContent":["import type { InferProps, Props } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport buttonGroupStyle from '../styles/components/button-group.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport type { ButtonColor, ButtonVariant, ButtonSize } from '../button';\nimport Button from '../button/button';\nimport DropdownButton from '../dropdown/dropdown-button';\n\n/**\n * ButtonGroup Component\n *\n * Groups multiple `ae-button` elements, propagating shared `variant`, `color`,\n * `size`, and `disabled` props to each child. Supports a `compact` mode that\n * joins buttons into a seamless connected strip (like Bootstrap's button group).\n *\n * @example\n * ```html\n * <!-- Loose group (gap between buttons) -->\n * <ae-button-group variant=\"outlined\" color=\"primary\">\n * <ae-button>One</ae-button>\n * <ae-button>Two</ae-button>\n * <ae-button>Three</ae-button>\n * </ae-button-group>\n *\n * <!-- Compact — joined strip -->\n * <ae-button-group compact color=\"primary\">\n * <ae-button>Left</ae-button>\n * <ae-button>Middle</ae-button>\n * <ae-button>Right</ae-button>\n * </ae-button-group>\n *\n * <!-- Full-width -->\n * <ae-button-group block color=\"danger\" variant=\"outlined\">\n * <ae-button>Delete</ae-button>\n * <ae-button>Archive</ae-button>\n * </ae-button-group>\n * ```\n */\nclass ButtonGroup extends AeicoComponent {\n static props: Props = {\n variant: { type: String },\n color: { type: String },\n size: { type: String },\n compact: { type: Boolean },\n block: { type: Boolean },\n disabled: { type: Boolean },\n };\n\n protected static styles = [styleVariables, buttonGroupStyle];\n\n declare variant?: ButtonVariant;\n declare color?: ButtonColor;\n declare size?: ButtonSize;\n declare compact?: boolean;\n declare block?: boolean;\n declare disabled?: boolean;\n\n private slotEl: HTMLSlotElement | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n\n if (this.variant === undefined) this.variant = 'filled';\n if (this.color === undefined) this.color = 'default';\n if (this.size === undefined) this.size = 'md';\n }\n\n protected render() {\n return html(({ slot }) => {\n this.slotEl = slot({\n '@slotchange': () => this._syncChildren(),\n });\n this._syncChildren();\n });\n }\n\n private _getButtons(): Array<Button | DropdownButton> {\n if (!this.slotEl) return [];\n\n return (\n this.slotEl.assignedElements({ flatten: true }) as Array<Button | DropdownButton>\n ).filter((el) => {\n const tag = el.tagName.toLowerCase();\n return tag === 'ae-button' || tag === 'ae-dropdown-button';\n });\n }\n\n private _syncChildren() {\n const buttons = this._getButtons();\n const r = this.size === 'xs' || this.size === 'sm' ? 3 : 4;\n\n buttons.forEach((btn: Button | DropdownButton, i) => {\n btn.variant = this.variant;\n btn.color = this.color;\n btn.size = this.size;\n\n if (this.disabled) {\n btn.disabled = true;\n } else {\n btn.disabled = false;\n }\n\n if (this.compact) {\n const isFirst = i === 0;\n const isLast = i === buttons.length - 1;\n\n // Overlap adjacent borders by pulling non-first buttons left 1px\n btn.style.marginLeft = isFirst ? '' : '-1px';\n\n // Shape corners: only the outer edges of the strip keep radius\n btn.style.setProperty('--_btn-r-tl', isFirst ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-bl', isFirst ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-tr', isLast ? `${r}px` : '0');\n btn.style.setProperty('--_btn-r-br', isLast ? `${r}px` : '0');\n } else {\n btn.style.marginLeft = '';\n this._clearRadius(btn);\n }\n });\n }\n\n private _clearRadius(btn: HTMLElement) {\n btn.style.removeProperty('--_btn-r-tl');\n btn.style.removeProperty('--_btn-r-tr');\n btn.style.removeProperty('--_btn-r-br');\n btn.style.removeProperty('--_btn-r-bl');\n }\n}\n\nButtonGroup.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-button-group': ButtonGroup;\n }\n}\n\nexport default ButtonGroup;\nexport type ButtonGroupProps = InferProps<typeof ButtonGroup>;\n"],"names":["styleVariables"],"mappings":";;;;;;;AAuCA,MAAM,oBAAoB,eAAe;AAAA,EAAzC;AAAA;AAmBU,kCAAiC;AAAA;AAAA,EAEzC,oBAAoB;AAClB,UAAM,kBAAA;AAEN,QAAI,KAAK,YAAY,OAAW,MAAK,UAAU;AAC/C,QAAI,KAAK,UAAU,OAAW,MAAK,QAAQ;AAC3C,QAAI,KAAK,SAAS,OAAW,MAAK,OAAO;AAAA,EAC3C;AAAA,EAEU,SAAS;AACjB,WAAO,KAAK,CAAC,EAAE,WAAW;AACxB,WAAK,SAAS,KAAK;AAAA,QACjB,eAAe,MAAM,KAAK,cAAA;AAAA,MAAc,CACzC;AACD,WAAK,cAAA;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAEQ,cAA8C;AACpD,QAAI,CAAC,KAAK,OAAQ,QAAO,CAAA;AAEzB,WACE,KAAK,OAAO,iBAAiB,EAAE,SAAS,MAAM,EAC9C,OAAO,CAAC,OAAO;AACf,YAAM,MAAM,GAAG,QAAQ,YAAA;AACvB,aAAO,QAAQ,eAAe,QAAQ;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,gBAAgB;AACtB,UAAM,UAAU,KAAK,YAAA;AACrB,UAAM,IAAI,KAAK,SAAS,QAAQ,KAAK,SAAS,OAAO,IAAI;AAEzD,YAAQ,QAAQ,CAAC,KAA8B,MAAM;AACnD,UAAI,UAAU,KAAK;AACnB,UAAI,QAAQ,KAAK;AACjB,UAAI,OAAO,KAAK;AAEhB,UAAI,KAAK,UAAU;AACjB,YAAI,WAAW;AAAA,MACjB,OAAO;AACL,YAAI,WAAW;AAAA,MACjB;AAEA,UAAI,KAAK,SAAS;AAChB,cAAM,UAAU,MAAM;AACtB,cAAM,SAAS,MAAM,QAAQ,SAAS;AAGtC,YAAI,MAAM,aAAa,UAAU,KAAK;AAGtC,YAAI,MAAM,YAAY,eAAe,UAAU,GAAG,CAAC,OAAO,GAAG;AAC7D,YAAI,MAAM,YAAY,eAAe,UAAU,GAAG,CAAC,OAAO,GAAG;AAC7D,YAAI,MAAM,YAAY,eAAe,SAAS,GAAG,CAAC,OAAO,GAAG;AAC5D,YAAI,MAAM,YAAY,eAAe,SAAS,GAAG,CAAC,OAAO,GAAG;AAAA,MAC9D,OAAO;AACL,YAAI,MAAM,aAAa;AACvB,aAAK,aAAa,GAAG;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,aAAa,KAAkB;AACrC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AACtC,QAAI,MAAM,eAAe,aAAa;AAAA,EACxC;AACF;AAxFE,cADI,aACG,SAAe;AAAA,EACpB,SAAS,EAAE,MAAM,OAAA;AAAA,EACjB,OAAO,EAAE,MAAM,OAAA;AAAA,EACf,MAAM,EAAE,MAAM,OAAA;AAAA,EACd,SAAS,EAAE,MAAM,QAAA;AAAA,EACjB,OAAO,EAAE,MAAM,QAAA;AAAA,EACf,UAAU,EAAE,MAAM,QAAA;AAAQ;AAG5B,cAVI,aAUa,UAAS,CAACA,WAAgB,gBAAgB;AAiF7D,YAAY,SAAA;"}
|
package/dist/chunks/button.cjs
CHANGED
|
@@ -6,17 +6,6 @@ const aeicoComponent = require("./aeico-component.cjs");
|
|
|
6
6
|
const aeico = require("aeico");
|
|
7
7
|
const buttonStyle = `:host {
|
|
8
8
|
display: inline-block;
|
|
9
|
-
--btn-solid-bg: var(--color-solid);
|
|
10
|
-
--btn-solid-bg-hover: var(--color-solid-hover);
|
|
11
|
-
--btn-solid-bg-active: var(--color-solid-active);
|
|
12
|
-
--btn-solid-color: var(--color-on-solid);
|
|
13
|
-
--btn-solid-color-hover: var(--color-on-solid-hover);
|
|
14
|
-
--btn-border: var(--color-border);
|
|
15
|
-
--btn-border-hover: var(--color-border-hover);
|
|
16
|
-
--btn-accent: var(--color-accent);
|
|
17
|
-
--btn-accent-hover: var(--color-accent-hover);
|
|
18
|
-
--btn-subtle-bg: var(--color-subtle);
|
|
19
|
-
--btn-subtle-bg-hover: var(--color-subtle-hover);
|
|
20
9
|
}
|
|
21
10
|
|
|
22
11
|
button {
|
|
@@ -37,100 +26,100 @@ button {
|
|
|
37
26
|
padding: 0.429em 1.071em;
|
|
38
27
|
font-size: 1em;
|
|
39
28
|
line-height: 1.5;
|
|
40
|
-
border-radius: var(--_btn-r-tl,
|
|
29
|
+
border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-sm)) var(--_btn-r-tr, var(--ae-radius-sm)) var(--_btn-r-br, var(--ae-radius-sm)) var(--_btn-r-bl, var(--ae-radius-sm)));
|
|
41
30
|
min-width: 4.571em;
|
|
42
31
|
height: 2.286em;
|
|
43
32
|
width: 100%;
|
|
44
33
|
|
|
45
|
-
background: var(--
|
|
46
|
-
border: 1px solid var(--
|
|
47
|
-
color: var(--
|
|
34
|
+
background: var(--ae-color-solid);
|
|
35
|
+
border: 1px solid var(--ae-color-solid);
|
|
36
|
+
color: var(--ae-color-on-solid);
|
|
48
37
|
}
|
|
49
38
|
|
|
50
39
|
button:focus { outline: none; }
|
|
51
40
|
button:active { transform: translateY(1px); }
|
|
52
41
|
|
|
53
42
|
button:hover:not(:disabled) {
|
|
54
|
-
background: var(--
|
|
55
|
-
border-color: var(--
|
|
56
|
-
color: var(--
|
|
43
|
+
background: var(--ae-color-solid-hover);
|
|
44
|
+
border-color: var(--ae-color-border-hover);
|
|
45
|
+
color: var(--ae-color-on-solid-hover, var(--ae-color-on-solid));
|
|
57
46
|
}
|
|
58
47
|
|
|
59
|
-
button:active:not(:disabled) { background: var(--
|
|
48
|
+
button:active:not(:disabled) { background: var(--ae-color-solid-active); }
|
|
60
49
|
|
|
61
50
|
button:disabled {
|
|
62
51
|
opacity: 0.5;
|
|
63
52
|
cursor: not-allowed;
|
|
64
53
|
}
|
|
65
54
|
|
|
66
|
-
:host([size="xs"]) button { border-radius: var(--_btn-r-tl,
|
|
67
|
-
:host([size="sm"]) button { border-radius: var(--_btn-r-tl,
|
|
55
|
+
:host([size="xs"]) button { border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-xs)) var(--_btn-r-tr, var(--ae-radius-xs)) var(--_btn-r-br, var(--ae-radius-xs)) var(--_btn-r-bl, var(--ae-radius-xs))); }
|
|
56
|
+
:host([size="sm"]) button { border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-xs)) var(--_btn-r-tr, var(--ae-radius-xs)) var(--_btn-r-br, var(--ae-radius-xs)) var(--_btn-r-bl, var(--ae-radius-xs))); }
|
|
68
57
|
|
|
69
58
|
/* --- Variants --- */
|
|
70
59
|
|
|
71
60
|
:host([variant="outlined"]) button {
|
|
72
61
|
background: transparent;
|
|
73
|
-
border-color: var(--
|
|
74
|
-
color: var(--
|
|
62
|
+
border-color: var(--ae-color-border);
|
|
63
|
+
color: var(--ae-color-accent);
|
|
75
64
|
}
|
|
76
65
|
|
|
77
66
|
:host([variant="outlined"]) button:hover:not(:disabled) {
|
|
78
|
-
background: var(--
|
|
79
|
-
border-color: var(--
|
|
80
|
-
color: var(--
|
|
67
|
+
background: var(--ae-color-subtle);
|
|
68
|
+
border-color: var(--ae-color-border-hover);
|
|
69
|
+
color: var(--ae-color-accent-hover);
|
|
81
70
|
}
|
|
82
71
|
|
|
83
72
|
:host([variant="outlined"]) button:active:not(:disabled) {
|
|
84
|
-
background: var(--
|
|
73
|
+
background: var(--ae-color-subtle-hover);
|
|
85
74
|
}
|
|
86
75
|
|
|
87
76
|
:host([variant="subtle"]) button {
|
|
88
|
-
background: var(--
|
|
77
|
+
background: var(--ae-color-subtle);
|
|
89
78
|
border-color: transparent;
|
|
90
|
-
color: var(--
|
|
79
|
+
color: var(--ae-color-accent);
|
|
91
80
|
}
|
|
92
81
|
|
|
93
82
|
:host([variant="subtle"]) button:hover:not(:disabled) {
|
|
94
|
-
background: var(--
|
|
95
|
-
color: var(--
|
|
83
|
+
background: var(--ae-color-subtle-hover);
|
|
84
|
+
color: var(--ae-color-accent-hover);
|
|
96
85
|
}
|
|
97
86
|
|
|
98
87
|
:host([variant="subtle"]) button:active:not(:disabled) {
|
|
99
|
-
background: var(--
|
|
88
|
+
background: var(--ae-color-subtle-hover);
|
|
100
89
|
}
|
|
101
90
|
|
|
102
91
|
:host([variant="faint"]) button {
|
|
103
|
-
background: var(--
|
|
104
|
-
border-color: var(--
|
|
105
|
-
color: var(--
|
|
92
|
+
background: var(--ae-color-subtle);
|
|
93
|
+
border-color: var(--ae-color-border);
|
|
94
|
+
color: var(--ae-color-accent);
|
|
106
95
|
}
|
|
107
96
|
|
|
108
97
|
:host([variant="faint"]) button:hover:not(:disabled) {
|
|
109
|
-
background: var(--
|
|
110
|
-
border-color: var(--
|
|
111
|
-
color: var(--
|
|
98
|
+
background: var(--ae-color-subtle-hover);
|
|
99
|
+
border-color: var(--ae-color-border-hover);
|
|
100
|
+
color: var(--ae-color-accent-hover);
|
|
112
101
|
}
|
|
113
102
|
|
|
114
103
|
:host([variant="faint"]) button:active:not(:disabled) {
|
|
115
|
-
background: var(--
|
|
104
|
+
background: var(--ae-color-subtle-hover);
|
|
116
105
|
}
|
|
117
106
|
|
|
118
107
|
:host([variant="text"]) button {
|
|
119
108
|
background: transparent;
|
|
120
109
|
border-color: transparent;
|
|
121
|
-
color: var(--
|
|
110
|
+
color: var(--ae-color-accent);
|
|
122
111
|
min-width: auto;
|
|
123
112
|
padding-left: 4px;
|
|
124
113
|
padding-right: 4px;
|
|
125
114
|
}
|
|
126
115
|
|
|
127
116
|
:host([variant="text"]) button:hover:not(:disabled) {
|
|
128
|
-
background: var(--
|
|
129
|
-
color: var(--
|
|
117
|
+
background: var(--ae-color-subtle);
|
|
118
|
+
color: var(--ae-color-accent-hover);
|
|
130
119
|
}
|
|
131
120
|
|
|
132
121
|
:host([variant="text"]) button:active:not(:disabled) {
|
|
133
|
-
background: var(--
|
|
122
|
+
background: var(--ae-color-subtle-hover);
|
|
134
123
|
}
|
|
135
124
|
|
|
136
125
|
/* Icon-only: single ae-icon child → square compact layout */
|
|
@@ -139,7 +128,7 @@ button:disabled {
|
|
|
139
128
|
}
|
|
140
129
|
|
|
141
130
|
:host([icon-only]:not([size])) {
|
|
142
|
-
font-size: var(--size-m);
|
|
131
|
+
font-size: var(--ae-size-m);
|
|
143
132
|
}
|
|
144
133
|
|
|
145
134
|
:host([icon-only]) button {
|
|
@@ -155,9 +144,9 @@ button:disabled {
|
|
|
155
144
|
}
|
|
156
145
|
|
|
157
146
|
:host([active]) button {
|
|
158
|
-
background: var(--
|
|
159
|
-
border-color: var(--
|
|
160
|
-
color: var(--
|
|
147
|
+
background: var(--ae-color-solid-active);
|
|
148
|
+
border-color: var(--ae-color-border-hover);
|
|
149
|
+
color: var(--ae-color-on-solid-hover, var(--ae-color-on-solid));
|
|
161
150
|
}
|
|
162
151
|
|
|
163
152
|
.btn-icon {
|
|
@@ -168,7 +157,7 @@ button:disabled {
|
|
|
168
157
|
display: inline-flex;
|
|
169
158
|
align-items: center;
|
|
170
159
|
justify-content: center;
|
|
171
|
-
border-radius:
|
|
160
|
+
border-radius: var(--ae-radius-sm);
|
|
172
161
|
}
|
|
173
162
|
|
|
174
163
|
.btn-icon.btn-lg {
|
|
@@ -177,7 +166,7 @@ button:disabled {
|
|
|
177
166
|
}
|
|
178
167
|
|
|
179
168
|
.btn-circle {
|
|
180
|
-
border-radius:
|
|
169
|
+
border-radius: var(--ae-radius-circle);
|
|
181
170
|
}
|
|
182
171
|
|
|
183
172
|
:host([block]) {
|
|
@@ -197,7 +186,7 @@ button.btn-loading::before {
|
|
|
197
186
|
height: 1em;
|
|
198
187
|
border: 2px solid currentColor;
|
|
199
188
|
border-top-color: transparent;
|
|
200
|
-
border-radius:
|
|
189
|
+
border-radius: var(--ae-radius-circle);
|
|
201
190
|
animation: btn-spin 0.6s linear infinite;
|
|
202
191
|
color: currentColor;
|
|
203
192
|
opacity: 0.8;
|
|
@@ -342,7 +331,7 @@ __decorateElement(_init, 5, "type", _type_dec, Button);
|
|
|
342
331
|
__decorateElement(_init, 5, "active", _active_dec, Button);
|
|
343
332
|
__decorateElement(_init, 5, "block", _block_dec, Button);
|
|
344
333
|
__decoratorMetadata(_init, Button);
|
|
345
|
-
__publicField(Button, "styles", [variables.
|
|
334
|
+
__publicField(Button, "styles", [variables.variables, size.sizeCSS, color.colorCSS, buttonStyle]);
|
|
346
335
|
Button.register();
|
|
347
336
|
exports.Button = Button;
|
|
348
337
|
//# sourceMappingURL=button.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.cjs","sources":["../../src/button/button.ts"],"sourcesContent":["import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport sizeCSS from '../styles/size.css?inline';\nimport colorCSS from '../styles/color.css?inline';\nimport buttonStyle from '../styles/components/button.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { ButtonColor, ButtonSize, ButtonVariant } from './defines';\nimport { prop } from 'aeico';\n\n/**\n * Button Component\n *\n * A customizable button component with multiple variants and sizes.\n * Supports theme and internationalization through mixins.\n *\n * @example\n * ```typescript\n * // Using the static create method\n * const button = Button.create({\n * variant: 'primary',\n * size: 'md'\n * })\n * ```\n *\n * @example\n * ```html\n * <!-- Using as Web Component -->\n * <ae-button variant=\"primary\" size=\"md\">Save</ae-button>\n * <ae-button variant=\"danger\" size=\"sm\">Delete</ae-button>\n * <ae-button variant=\"subtle\">Cancel</ae-button>\n * ```\n */\nclass Button extends AeicoComponent {\n protected static styles = [styleVariables, sizeCSS, colorCSS, buttonStyle];\n\n @prop({ type: String })\n color?: ButtonColor;\n\n @prop({ type: String })\n variant?: ButtonVariant;\n\n @prop({ type: String })\n size?: ButtonSize;\n\n @prop({ type: Boolean })\n disabled?: boolean;\n\n @prop({ type: String })\n type?: 'button' | 'submit' | 'reset';\n\n @prop({ type: Boolean })\n active?: boolean;\n\n @prop({ type: Boolean })\n block?: boolean;\n\n private _buttonElement: HTMLButtonElement | null = null;\n private _slotElement: HTMLSlotElement | null = null;\n private _autoAriaLabel = false;\n\n protected onMounted() {\n this._handleSlotChange();\n }\n\n private _handleSlotChange = () => {\n const nodes = this._slotElement?.assignedNodes() ?? [];\n // Icon-only: exactly one element (ae-icon) and no meaningful text nodes\n const elements = nodes.filter((n): n is Element => n.nodeType === Node.ELEMENT_NODE);\n const hasText = nodes.some(\n (n) => n.nodeType === Node.TEXT_NODE && n.textContent!.trim() !== '',\n );\n const isIconOnly =\n !hasText && elements.length === 1 && elements[0].tagName.toLowerCase() === 'ae-icon';\n\n if (isIconOnly) {\n this.setAttribute('icon-only', '');\n if (!this.hasAttribute('aria-label') || this._autoAriaLabel) {\n this.setAttribute('aria-label', elements[0].getAttribute('name') ?? '');\n this._autoAriaLabel = true;\n }\n } else {\n this.removeAttribute('icon-only');\n if (this._autoAriaLabel) {\n this.removeAttribute('aria-label');\n this._autoAriaLabel = false;\n }\n }\n };\n\n protected render() {\n return html(({ button, slot }) => {\n this._buttonElement = button(\n {\n type: this.type || 'button',\n disabled: this.disabled,\n part: 'button',\n 'aria-pressed': this.active,\n 'aria-disabled': this.disabled,\n },\n () => {\n this._slotElement = slot({ '@slotchange': this._handleSlotChange });\n },\n );\n });\n }\n\n /**\n * Programmatically click the button\n */\n click() {\n if (!this.disabled && this._buttonElement) {\n this._buttonElement.click();\n }\n }\n\n /**\n * Focus the button\n */\n focus() {\n if (this._buttonElement) {\n this._buttonElement.focus();\n }\n }\n\n /**\n * Blur the button\n */\n blur() {\n if (this._buttonElement) {\n this._buttonElement.blur();\n }\n }\n}\n\nButton.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-button': Button;\n }\n}\n\nexport default Button;\nexport type ButtonProps = InferProps<typeof Button>;\n"],"names":["prop","_a","html","styleVariables","sizeCSS","colorCSS"],"mappings":"
|
|
1
|
+
{"version":3,"file":"button.cjs","sources":["../../src/button/button.ts"],"sourcesContent":["import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport sizeCSS from '../styles/size.css?inline';\nimport colorCSS from '../styles/color.css?inline';\nimport buttonStyle from '../styles/components/button.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { ButtonColor, ButtonSize, ButtonVariant } from './defines';\nimport { prop } from 'aeico';\n\n/**\n * Button Component\n *\n * A customizable button component with multiple variants and sizes.\n * Supports theme and internationalization through mixins.\n *\n * @example\n * ```typescript\n * // Using the static create method\n * const button = Button.create({\n * variant: 'primary',\n * size: 'md'\n * })\n * ```\n *\n * @example\n * ```html\n * <!-- Using as Web Component -->\n * <ae-button variant=\"primary\" size=\"md\">Save</ae-button>\n * <ae-button variant=\"danger\" size=\"sm\">Delete</ae-button>\n * <ae-button variant=\"subtle\">Cancel</ae-button>\n * ```\n */\nclass Button extends AeicoComponent {\n protected static styles = [styleVariables, sizeCSS, colorCSS, buttonStyle];\n\n @prop({ type: String })\n color?: ButtonColor;\n\n @prop({ type: String })\n variant?: ButtonVariant;\n\n @prop({ type: String })\n size?: ButtonSize;\n\n @prop({ type: Boolean })\n disabled?: boolean;\n\n @prop({ type: String })\n type?: 'button' | 'submit' | 'reset';\n\n @prop({ type: Boolean })\n active?: boolean;\n\n @prop({ type: Boolean })\n block?: boolean;\n\n private _buttonElement: HTMLButtonElement | null = null;\n private _slotElement: HTMLSlotElement | null = null;\n private _autoAriaLabel = false;\n\n protected onMounted() {\n this._handleSlotChange();\n }\n\n private _handleSlotChange = () => {\n const nodes = this._slotElement?.assignedNodes() ?? [];\n // Icon-only: exactly one element (ae-icon) and no meaningful text nodes\n const elements = nodes.filter((n): n is Element => n.nodeType === Node.ELEMENT_NODE);\n const hasText = nodes.some(\n (n) => n.nodeType === Node.TEXT_NODE && n.textContent!.trim() !== '',\n );\n const isIconOnly =\n !hasText && elements.length === 1 && elements[0].tagName.toLowerCase() === 'ae-icon';\n\n if (isIconOnly) {\n this.setAttribute('icon-only', '');\n if (!this.hasAttribute('aria-label') || this._autoAriaLabel) {\n this.setAttribute('aria-label', elements[0].getAttribute('name') ?? '');\n this._autoAriaLabel = true;\n }\n } else {\n this.removeAttribute('icon-only');\n if (this._autoAriaLabel) {\n this.removeAttribute('aria-label');\n this._autoAriaLabel = false;\n }\n }\n };\n\n protected render() {\n return html(({ button, slot }) => {\n this._buttonElement = button(\n {\n type: this.type || 'button',\n disabled: this.disabled,\n part: 'button',\n 'aria-pressed': this.active,\n 'aria-disabled': this.disabled,\n },\n () => {\n this._slotElement = slot({ '@slotchange': this._handleSlotChange });\n },\n );\n });\n }\n\n /**\n * Programmatically click the button\n */\n click() {\n if (!this.disabled && this._buttonElement) {\n this._buttonElement.click();\n }\n }\n\n /**\n * Focus the button\n */\n focus() {\n if (this._buttonElement) {\n this._buttonElement.focus();\n }\n }\n\n /**\n * Blur the button\n */\n blur() {\n if (this._buttonElement) {\n this._buttonElement.blur();\n }\n }\n}\n\nButton.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-button': Button;\n }\n}\n\nexport default Button;\nexport type ButtonProps = InferProps<typeof Button>;\n"],"names":["prop","_a","html","styleVariables","sizeCSS","colorCSS"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,YAAA,aAAA,WAAA,eAAA,WAAA,cAAA,YAAA,IAAA;AAiCA,MAAM,gBAAe,oCAGnB,aAAA,CAACA,MAAAA,KAAK,EAAE,MAAM,OAAA,CAAQ,CAAA,GAGtB,eAAA,CAACA,MAAAA,KAAK,EAAE,MAAM,OAAA,CAAQ,CAAA,GAGtB,YAAA,CAACA,MAAAA,KAAK,EAAE,MAAM,OAAA,CAAQ,CAAA,GAGtB,gBAAA,CAACA,MAAAA,KAAK,EAAE,MAAM,QAAA,CAAS,CAAA,GAGvB,YAAA,CAACA,WAAK,EAAE,MAAM,QAAQ,CAAA,GAGtB,cAAA,CAACA,WAAK,EAAE,MAAM,SAAS,CAAA,GAGvB,aAAA,CAACA,WAAK,EAAE,MAAM,SAAS,CAAA,GArBJ,IAAe;AAAA,EAApC,cAAA;AAAA,UAAA,GAAA,SAAA;AAIE,kBAAA,MAAA,SAAA,kBAAA,OAAA,GAAA,IAAA,CAAA,GAAA,kBAAA,OAAA,IAAA,IAAA;AAGA,kBAAA,MAAA,WAAA,kBAAA,OAAA,IAAA,IAAA,CAAA,GAAA,kBAAA,OAAA,IAAA,IAAA;AAGA,kBAAA,MAAA,QAAA,kBAAA,OAAA,IAAA,IAAA,CAAA,GAAA,kBAAA,OAAA,IAAA,IAAA;AAGA,kBAAA,MAAA,YAAA,kBAAA,OAAA,IAAA,IAAA,CAAA,GAAA,kBAAA,OAAA,IAAA,IAAA;AAGA,kBAAA,MAAA,QAAA,kBAAA,OAAA,IAAA,IAAA,CAAA,GAAA,kBAAA,OAAA,IAAA,IAAA;AAGA,kBAAA,MAAA,UAAA,kBAAA,OAAA,IAAA,IAAA,CAAA,GAAA,kBAAA,OAAA,IAAA,IAAA;AAGA,kBAAA,MAAA,SAAA,kBAAA,OAAA,IAAA,IAAA,CAAA,GAAA,kBAAA,OAAA,IAAA,IAAA;AAEA,kBAAA,MAAQ,kBAA2C,IAAA;AACnD,kBAAA,MAAQ,gBAAuC,IAAA;AAC/C,kBAAA,MAAQ,kBAAiB,KAAA;AAMzB,kBAAA,MAAQ,qBAAoB,MAAM;;AAChC,YAAM,UAAQC,MAAA,KAAK,iBAAL,gBAAAA,IAAmB,oBAAmB,CAAA;AAEpD,YAAM,WAAW,MAAM,OAAO,CAAC,MAAoB,EAAE,aAAa,KAAK,YAAY;AACnF,YAAM,UAAU,MAAM;AAAA,QACpB,CAAC,MAAM,EAAE,aAAa,KAAK,aAAa,EAAE,YAAa,WAAW;AAAA,MAAA;AAEpE,YAAM,aACJ,CAAC,WAAW,SAAS,WAAW,KAAK,SAAS,CAAC,EAAE,QAAQ,YAAA,MAAkB;AAE7E,UAAI,YAAY;AACd,aAAK,aAAa,aAAa,EAAE;AACjC,YAAI,CAAC,KAAK,aAAa,YAAY,KAAK,KAAK,gBAAgB;AAC3D,eAAK,aAAa,cAAc,SAAS,CAAC,EAAE,aAAa,MAAM,KAAK,EAAE;AACtE,eAAK,iBAAiB;AAAA,QACxB;AAAA,MACF,OAAO;AACL,aAAK,gBAAgB,WAAW;AAChC,YAAI,KAAK,gBAAgB;AACvB,eAAK,gBAAgB,YAAY;AACjC,eAAK,iBAAiB;AAAA,QACxB;AAAA,MACF;AAAA,IACF,CAAA;AAAA,EAAA;AAAA,EA3BU,YAAY;AACpB,SAAK,kBAAA;AAAA,EACP;AAAA,EA2BU,SAAS;AACjB,WAAOC,WAAK,CAAC,EAAE,QAAQ,WAAW;AAChC,WAAK,iBAAiB;AAAA,QACpB;AAAA,UACE,MAAM,KAAK,QAAQ;AAAA,UACnB,UAAU,KAAK;AAAA,UACf,MAAM;AAAA,UACN,gBAAgB,KAAK;AAAA,UACrB,iBAAiB,KAAK;AAAA,QAAA;AAAA,QAExB,MAAM;AACJ,eAAK,eAAe,KAAK,EAAE,eAAe,KAAK,mBAAmB;AAAA,QACpE;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,QAAI,CAAC,KAAK,YAAY,KAAK,gBAAgB;AACzC,WAAK,eAAe,MAAA;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,MAAA;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO;AACL,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,KAAA;AAAA,IACtB;AAAA,EACF;AACF;AApGA,QAAA,iBAAA,EAAA;AAIE,kBAAA,OAAA,GAAA,SADA,YAHI,MAAA;AAOJ,kBAAA,OAAA,GAAA,WADA,cANI,MAAA;AAUJ,kBAAA,OAAA,GAAA,QADA,WATI,MAAA;AAaJ,kBAAA,OAAA,GAAA,YADA,eAZI,MAAA;AAgBJ,kBAAA,OAAA,GAAA,QADA,WAfI,MAAA;AAmBJ,kBAAA,OAAA,GAAA,UADA,aAlBI,MAAA;AAsBJ,kBAAA,OAAA,GAAA,SADA,YArBI,MAAA;AAAN,oBAAA,OAAM,MAAA;AACJ,cADI,QACa,UAAS,CAACC,UAAAA,WAAgBC,KAAAA,SAASC,MAAAA,UAAU,WAAW,CAAA;AAqG3E,OAAO,SAAA;;"}
|
package/dist/chunks/button.js
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { v as variables } from "./variables.js";
|
|
2
2
|
import { s as sizeCSS } from "./size.js";
|
|
3
3
|
import { c as colorCSS } from "./color.js";
|
|
4
4
|
import { A as AeicoComponent } from "./aeico-component.js";
|
|
5
5
|
import { prop, html } from "aeico";
|
|
6
6
|
const buttonStyle = `:host {
|
|
7
7
|
display: inline-block;
|
|
8
|
-
--btn-solid-bg: var(--color-solid);
|
|
9
|
-
--btn-solid-bg-hover: var(--color-solid-hover);
|
|
10
|
-
--btn-solid-bg-active: var(--color-solid-active);
|
|
11
|
-
--btn-solid-color: var(--color-on-solid);
|
|
12
|
-
--btn-solid-color-hover: var(--color-on-solid-hover);
|
|
13
|
-
--btn-border: var(--color-border);
|
|
14
|
-
--btn-border-hover: var(--color-border-hover);
|
|
15
|
-
--btn-accent: var(--color-accent);
|
|
16
|
-
--btn-accent-hover: var(--color-accent-hover);
|
|
17
|
-
--btn-subtle-bg: var(--color-subtle);
|
|
18
|
-
--btn-subtle-bg-hover: var(--color-subtle-hover);
|
|
19
8
|
}
|
|
20
9
|
|
|
21
10
|
button {
|
|
@@ -36,100 +25,100 @@ button {
|
|
|
36
25
|
padding: 0.429em 1.071em;
|
|
37
26
|
font-size: 1em;
|
|
38
27
|
line-height: 1.5;
|
|
39
|
-
border-radius: var(--_btn-r-tl,
|
|
28
|
+
border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-sm)) var(--_btn-r-tr, var(--ae-radius-sm)) var(--_btn-r-br, var(--ae-radius-sm)) var(--_btn-r-bl, var(--ae-radius-sm)));
|
|
40
29
|
min-width: 4.571em;
|
|
41
30
|
height: 2.286em;
|
|
42
31
|
width: 100%;
|
|
43
32
|
|
|
44
|
-
background: var(--
|
|
45
|
-
border: 1px solid var(--
|
|
46
|
-
color: var(--
|
|
33
|
+
background: var(--ae-color-solid);
|
|
34
|
+
border: 1px solid var(--ae-color-solid);
|
|
35
|
+
color: var(--ae-color-on-solid);
|
|
47
36
|
}
|
|
48
37
|
|
|
49
38
|
button:focus { outline: none; }
|
|
50
39
|
button:active { transform: translateY(1px); }
|
|
51
40
|
|
|
52
41
|
button:hover:not(:disabled) {
|
|
53
|
-
background: var(--
|
|
54
|
-
border-color: var(--
|
|
55
|
-
color: var(--
|
|
42
|
+
background: var(--ae-color-solid-hover);
|
|
43
|
+
border-color: var(--ae-color-border-hover);
|
|
44
|
+
color: var(--ae-color-on-solid-hover, var(--ae-color-on-solid));
|
|
56
45
|
}
|
|
57
46
|
|
|
58
|
-
button:active:not(:disabled) { background: var(--
|
|
47
|
+
button:active:not(:disabled) { background: var(--ae-color-solid-active); }
|
|
59
48
|
|
|
60
49
|
button:disabled {
|
|
61
50
|
opacity: 0.5;
|
|
62
51
|
cursor: not-allowed;
|
|
63
52
|
}
|
|
64
53
|
|
|
65
|
-
:host([size="xs"]) button { border-radius: var(--_btn-r-tl,
|
|
66
|
-
:host([size="sm"]) button { border-radius: var(--_btn-r-tl,
|
|
54
|
+
:host([size="xs"]) button { border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-xs)) var(--_btn-r-tr, var(--ae-radius-xs)) var(--_btn-r-br, var(--ae-radius-xs)) var(--_btn-r-bl, var(--ae-radius-xs))); }
|
|
55
|
+
:host([size="sm"]) button { border-radius: var(--ae-border-radius, var(--_btn-r-tl, var(--ae-radius-xs)) var(--_btn-r-tr, var(--ae-radius-xs)) var(--_btn-r-br, var(--ae-radius-xs)) var(--_btn-r-bl, var(--ae-radius-xs))); }
|
|
67
56
|
|
|
68
57
|
/* --- Variants --- */
|
|
69
58
|
|
|
70
59
|
:host([variant="outlined"]) button {
|
|
71
60
|
background: transparent;
|
|
72
|
-
border-color: var(--
|
|
73
|
-
color: var(--
|
|
61
|
+
border-color: var(--ae-color-border);
|
|
62
|
+
color: var(--ae-color-accent);
|
|
74
63
|
}
|
|
75
64
|
|
|
76
65
|
:host([variant="outlined"]) button:hover:not(:disabled) {
|
|
77
|
-
background: var(--
|
|
78
|
-
border-color: var(--
|
|
79
|
-
color: var(--
|
|
66
|
+
background: var(--ae-color-subtle);
|
|
67
|
+
border-color: var(--ae-color-border-hover);
|
|
68
|
+
color: var(--ae-color-accent-hover);
|
|
80
69
|
}
|
|
81
70
|
|
|
82
71
|
:host([variant="outlined"]) button:active:not(:disabled) {
|
|
83
|
-
background: var(--
|
|
72
|
+
background: var(--ae-color-subtle-hover);
|
|
84
73
|
}
|
|
85
74
|
|
|
86
75
|
:host([variant="subtle"]) button {
|
|
87
|
-
background: var(--
|
|
76
|
+
background: var(--ae-color-subtle);
|
|
88
77
|
border-color: transparent;
|
|
89
|
-
color: var(--
|
|
78
|
+
color: var(--ae-color-accent);
|
|
90
79
|
}
|
|
91
80
|
|
|
92
81
|
:host([variant="subtle"]) button:hover:not(:disabled) {
|
|
93
|
-
background: var(--
|
|
94
|
-
color: var(--
|
|
82
|
+
background: var(--ae-color-subtle-hover);
|
|
83
|
+
color: var(--ae-color-accent-hover);
|
|
95
84
|
}
|
|
96
85
|
|
|
97
86
|
:host([variant="subtle"]) button:active:not(:disabled) {
|
|
98
|
-
background: var(--
|
|
87
|
+
background: var(--ae-color-subtle-hover);
|
|
99
88
|
}
|
|
100
89
|
|
|
101
90
|
:host([variant="faint"]) button {
|
|
102
|
-
background: var(--
|
|
103
|
-
border-color: var(--
|
|
104
|
-
color: var(--
|
|
91
|
+
background: var(--ae-color-subtle);
|
|
92
|
+
border-color: var(--ae-color-border);
|
|
93
|
+
color: var(--ae-color-accent);
|
|
105
94
|
}
|
|
106
95
|
|
|
107
96
|
:host([variant="faint"]) button:hover:not(:disabled) {
|
|
108
|
-
background: var(--
|
|
109
|
-
border-color: var(--
|
|
110
|
-
color: var(--
|
|
97
|
+
background: var(--ae-color-subtle-hover);
|
|
98
|
+
border-color: var(--ae-color-border-hover);
|
|
99
|
+
color: var(--ae-color-accent-hover);
|
|
111
100
|
}
|
|
112
101
|
|
|
113
102
|
:host([variant="faint"]) button:active:not(:disabled) {
|
|
114
|
-
background: var(--
|
|
103
|
+
background: var(--ae-color-subtle-hover);
|
|
115
104
|
}
|
|
116
105
|
|
|
117
106
|
:host([variant="text"]) button {
|
|
118
107
|
background: transparent;
|
|
119
108
|
border-color: transparent;
|
|
120
|
-
color: var(--
|
|
109
|
+
color: var(--ae-color-accent);
|
|
121
110
|
min-width: auto;
|
|
122
111
|
padding-left: 4px;
|
|
123
112
|
padding-right: 4px;
|
|
124
113
|
}
|
|
125
114
|
|
|
126
115
|
:host([variant="text"]) button:hover:not(:disabled) {
|
|
127
|
-
background: var(--
|
|
128
|
-
color: var(--
|
|
116
|
+
background: var(--ae-color-subtle);
|
|
117
|
+
color: var(--ae-color-accent-hover);
|
|
129
118
|
}
|
|
130
119
|
|
|
131
120
|
:host([variant="text"]) button:active:not(:disabled) {
|
|
132
|
-
background: var(--
|
|
121
|
+
background: var(--ae-color-subtle-hover);
|
|
133
122
|
}
|
|
134
123
|
|
|
135
124
|
/* Icon-only: single ae-icon child → square compact layout */
|
|
@@ -138,7 +127,7 @@ button:disabled {
|
|
|
138
127
|
}
|
|
139
128
|
|
|
140
129
|
:host([icon-only]:not([size])) {
|
|
141
|
-
font-size: var(--size-m);
|
|
130
|
+
font-size: var(--ae-size-m);
|
|
142
131
|
}
|
|
143
132
|
|
|
144
133
|
:host([icon-only]) button {
|
|
@@ -154,9 +143,9 @@ button:disabled {
|
|
|
154
143
|
}
|
|
155
144
|
|
|
156
145
|
:host([active]) button {
|
|
157
|
-
background: var(--
|
|
158
|
-
border-color: var(--
|
|
159
|
-
color: var(--
|
|
146
|
+
background: var(--ae-color-solid-active);
|
|
147
|
+
border-color: var(--ae-color-border-hover);
|
|
148
|
+
color: var(--ae-color-on-solid-hover, var(--ae-color-on-solid));
|
|
160
149
|
}
|
|
161
150
|
|
|
162
151
|
.btn-icon {
|
|
@@ -167,7 +156,7 @@ button:disabled {
|
|
|
167
156
|
display: inline-flex;
|
|
168
157
|
align-items: center;
|
|
169
158
|
justify-content: center;
|
|
170
|
-
border-radius:
|
|
159
|
+
border-radius: var(--ae-radius-sm);
|
|
171
160
|
}
|
|
172
161
|
|
|
173
162
|
.btn-icon.btn-lg {
|
|
@@ -176,7 +165,7 @@ button:disabled {
|
|
|
176
165
|
}
|
|
177
166
|
|
|
178
167
|
.btn-circle {
|
|
179
|
-
border-radius:
|
|
168
|
+
border-radius: var(--ae-radius-circle);
|
|
180
169
|
}
|
|
181
170
|
|
|
182
171
|
:host([block]) {
|
|
@@ -196,7 +185,7 @@ button.btn-loading::before {
|
|
|
196
185
|
height: 1em;
|
|
197
186
|
border: 2px solid currentColor;
|
|
198
187
|
border-top-color: transparent;
|
|
199
|
-
border-radius:
|
|
188
|
+
border-radius: var(--ae-radius-circle);
|
|
200
189
|
animation: btn-spin 0.6s linear infinite;
|
|
201
190
|
color: currentColor;
|
|
202
191
|
opacity: 0.8;
|
|
@@ -341,7 +330,7 @@ __decorateElement(_init, 5, "type", _type_dec, Button);
|
|
|
341
330
|
__decorateElement(_init, 5, "active", _active_dec, Button);
|
|
342
331
|
__decorateElement(_init, 5, "block", _block_dec, Button);
|
|
343
332
|
__decoratorMetadata(_init, Button);
|
|
344
|
-
__publicField(Button, "styles", [
|
|
333
|
+
__publicField(Button, "styles", [variables, sizeCSS, colorCSS, buttonStyle]);
|
|
345
334
|
Button.register();
|
|
346
335
|
export {
|
|
347
336
|
Button as B
|