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.
Files changed (337) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +0 -0
  3. package/dist/chunks/action-button.cjs +296 -0
  4. package/dist/chunks/action-button.cjs.map +1 -0
  5. package/dist/chunks/action-button.js +297 -0
  6. package/dist/chunks/action-button.js.map +1 -0
  7. package/dist/chunks/alert.cjs +26 -32
  8. package/dist/chunks/alert.cjs.map +1 -1
  9. package/dist/chunks/alert.js +27 -33
  10. package/dist/chunks/alert.js.map +1 -1
  11. package/dist/chunks/badge.cjs +2 -2
  12. package/dist/chunks/badge.cjs.map +1 -1
  13. package/dist/chunks/badge.js +3 -3
  14. package/dist/chunks/badge.js.map +1 -1
  15. package/dist/chunks/breadcrumb-item.cjs +9 -9
  16. package/dist/chunks/breadcrumb-item.cjs.map +1 -1
  17. package/dist/chunks/breadcrumb-item.js +10 -10
  18. package/dist/chunks/breadcrumb-item.js.map +1 -1
  19. package/dist/chunks/button-group.cjs +1 -1
  20. package/dist/chunks/button-group.cjs.map +1 -1
  21. package/dist/chunks/button-group.js +2 -2
  22. package/dist/chunks/button-group.js.map +1 -1
  23. package/dist/chunks/button.cjs +40 -51
  24. package/dist/chunks/button.cjs.map +1 -1
  25. package/dist/chunks/button.js +41 -52
  26. package/dist/chunks/button.js.map +1 -1
  27. package/dist/chunks/card.cjs +2 -2
  28. package/dist/chunks/card.cjs.map +1 -1
  29. package/dist/chunks/card.js +3 -3
  30. package/dist/chunks/card.js.map +1 -1
  31. package/dist/chunks/checkbox.cjs +18 -5
  32. package/dist/chunks/checkbox.cjs.map +1 -1
  33. package/dist/chunks/checkbox.js +18 -5
  34. package/dist/chunks/checkbox.js.map +1 -1
  35. package/dist/chunks/color.cjs +1 -1
  36. package/dist/chunks/color.js +1 -1
  37. package/dist/chunks/copy-button.cjs +171 -0
  38. package/dist/chunks/copy-button.cjs.map +1 -0
  39. package/dist/chunks/copy-button.js +172 -0
  40. package/dist/chunks/copy-button.js.map +1 -0
  41. package/dist/chunks/detail-group.cjs +65 -0
  42. package/dist/chunks/detail-group.cjs.map +1 -0
  43. package/dist/chunks/detail-group.js +66 -0
  44. package/dist/chunks/detail-group.js.map +1 -0
  45. package/dist/chunks/detail.cjs +7 -4
  46. package/dist/chunks/detail.cjs.map +1 -1
  47. package/dist/chunks/detail.js +8 -5
  48. package/dist/chunks/detail.js.map +1 -1
  49. package/dist/chunks/dialog.cjs +2 -2
  50. package/dist/chunks/dialog.cjs.map +1 -1
  51. package/dist/chunks/dialog.js +3 -3
  52. package/dist/chunks/dialog.js.map +1 -1
  53. package/dist/chunks/divider.cjs +2 -2
  54. package/dist/chunks/divider.cjs.map +1 -1
  55. package/dist/chunks/divider.js +3 -3
  56. package/dist/chunks/divider.js.map +1 -1
  57. package/dist/chunks/drawer.cjs +180 -0
  58. package/dist/chunks/drawer.cjs.map +1 -0
  59. package/dist/chunks/drawer.js +181 -0
  60. package/dist/chunks/drawer.js.map +1 -0
  61. package/dist/chunks/dropdown-button.cjs +10 -11
  62. package/dist/chunks/dropdown-button.cjs.map +1 -1
  63. package/dist/chunks/dropdown-button.js +14 -15
  64. package/dist/chunks/dropdown-button.js.map +1 -1
  65. package/dist/chunks/icon.cjs +57 -11
  66. package/dist/chunks/icon.cjs.map +1 -1
  67. package/dist/chunks/icon.js +58 -12
  68. package/dist/chunks/icon.js.map +1 -1
  69. package/dist/chunks/menu.cjs +396 -0
  70. package/dist/chunks/menu.cjs.map +1 -0
  71. package/dist/chunks/menu.js +397 -0
  72. package/dist/chunks/menu.js.map +1 -0
  73. package/dist/chunks/navbar.cjs +2 -2
  74. package/dist/chunks/navbar.cjs.map +1 -1
  75. package/dist/chunks/navbar.js +3 -3
  76. package/dist/chunks/navbar.js.map +1 -1
  77. package/dist/chunks/number-input.cjs +110 -0
  78. package/dist/chunks/number-input.cjs.map +1 -0
  79. package/dist/chunks/number-input.js +111 -0
  80. package/dist/chunks/number-input.js.map +1 -0
  81. package/dist/chunks/pagination.cjs +475 -0
  82. package/dist/chunks/pagination.cjs.map +1 -0
  83. package/dist/chunks/pagination.js +476 -0
  84. package/dist/chunks/pagination.js.map +1 -0
  85. package/dist/chunks/progress-bar.cjs +101 -0
  86. package/dist/chunks/progress-bar.cjs.map +1 -0
  87. package/dist/chunks/progress-bar.js +102 -0
  88. package/dist/chunks/progress-bar.js.map +1 -0
  89. package/dist/chunks/radio.cjs +11 -7
  90. package/dist/chunks/radio.cjs.map +1 -1
  91. package/dist/chunks/radio.js +11 -7
  92. package/dist/chunks/radio.js.map +1 -1
  93. package/dist/chunks/select.cjs +97 -66
  94. package/dist/chunks/select.cjs.map +1 -1
  95. package/dist/chunks/select.js +97 -66
  96. package/dist/chunks/select.js.map +1 -1
  97. package/dist/chunks/size.cjs +1 -1
  98. package/dist/chunks/size.js +1 -1
  99. package/dist/chunks/slider.cjs +35 -75
  100. package/dist/chunks/slider.cjs.map +1 -1
  101. package/dist/chunks/slider.js +35 -75
  102. package/dist/chunks/slider.js.map +1 -1
  103. package/dist/chunks/spinner.cjs +102 -0
  104. package/dist/chunks/spinner.cjs.map +1 -0
  105. package/dist/chunks/spinner.js +103 -0
  106. package/dist/chunks/spinner.js.map +1 -0
  107. package/dist/chunks/switch.cjs +110 -16
  108. package/dist/chunks/switch.cjs.map +1 -1
  109. package/dist/chunks/switch.js +111 -17
  110. package/dist/chunks/switch.js.map +1 -1
  111. package/dist/chunks/tab-panel.cjs +14 -5
  112. package/dist/chunks/tab-panel.cjs.map +1 -1
  113. package/dist/chunks/tab-panel.js +15 -6
  114. package/dist/chunks/tab-panel.js.map +1 -1
  115. package/dist/chunks/tag.cjs +2 -2
  116. package/dist/chunks/tag.cjs.map +1 -1
  117. package/dist/chunks/tag.js +3 -3
  118. package/dist/chunks/tag.js.map +1 -1
  119. package/dist/chunks/text-input.cjs +11 -16
  120. package/dist/chunks/text-input.cjs.map +1 -1
  121. package/dist/chunks/text-input.js +11 -16
  122. package/dist/chunks/text-input.js.map +1 -1
  123. package/dist/chunks/textarea.cjs +137 -0
  124. package/dist/chunks/textarea.cjs.map +1 -0
  125. package/dist/chunks/textarea.js +138 -0
  126. package/dist/chunks/textarea.js.map +1 -0
  127. package/dist/chunks/tooltip.cjs +292 -0
  128. package/dist/chunks/tooltip.cjs.map +1 -0
  129. package/dist/chunks/tooltip.js +293 -0
  130. package/dist/chunks/tooltip.js.map +1 -0
  131. package/dist/chunks/tree.cjs +468 -0
  132. package/dist/chunks/tree.cjs.map +1 -0
  133. package/dist/chunks/tree.js +469 -0
  134. package/dist/chunks/tree.js.map +1 -0
  135. package/dist/chunks/variables.cjs +273 -249
  136. package/dist/chunks/variables.cjs.map +1 -1
  137. package/dist/chunks/variables.js +273 -249
  138. package/dist/chunks/variables.js.map +1 -1
  139. package/dist/copy-button.cjs +6 -0
  140. package/dist/copy-button.cjs.map +1 -0
  141. package/dist/copy-button.js +6 -0
  142. package/dist/copy-button.js.map +1 -0
  143. package/dist/detail-group.cjs +6 -0
  144. package/dist/detail-group.cjs.map +1 -0
  145. package/dist/detail-group.js +6 -0
  146. package/dist/detail-group.js.map +1 -0
  147. package/dist/drawer.cjs +6 -0
  148. package/dist/drawer.cjs.map +1 -0
  149. package/dist/drawer.js +6 -0
  150. package/dist/drawer.js.map +1 -0
  151. package/dist/dropdown.js +4 -4
  152. package/dist/index.cjs +24 -99
  153. package/dist/index.cjs.map +1 -1
  154. package/dist/index.js +41 -116
  155. package/dist/index.js.map +1 -1
  156. package/dist/menu.cjs +6 -0
  157. package/dist/menu.cjs.map +1 -0
  158. package/dist/menu.js +6 -0
  159. package/dist/menu.js.map +1 -0
  160. package/dist/number-input.cjs +6 -0
  161. package/dist/number-input.cjs.map +1 -0
  162. package/dist/number-input.js +6 -0
  163. package/dist/number-input.js.map +1 -0
  164. package/dist/pagination.cjs +6 -0
  165. package/dist/pagination.cjs.map +1 -0
  166. package/dist/pagination.js +6 -0
  167. package/dist/pagination.js.map +1 -0
  168. package/dist/progress-bar.cjs +6 -0
  169. package/dist/progress-bar.cjs.map +1 -0
  170. package/dist/progress-bar.js +6 -0
  171. package/dist/progress-bar.js.map +1 -0
  172. package/dist/select.cjs +2 -2
  173. package/dist/select.cjs.map +1 -1
  174. package/dist/select.js +3 -3
  175. package/dist/select.js.map +1 -1
  176. package/dist/spinner.cjs +6 -0
  177. package/dist/spinner.cjs.map +1 -0
  178. package/dist/spinner.js +6 -0
  179. package/dist/spinner.js.map +1 -0
  180. package/dist/textarea.cjs +5 -0
  181. package/dist/textarea.cjs.map +1 -0
  182. package/dist/textarea.js +5 -0
  183. package/dist/textarea.js.map +1 -0
  184. package/dist/tooltip.cjs +6 -0
  185. package/dist/tooltip.cjs.map +1 -0
  186. package/dist/tooltip.js +6 -0
  187. package/dist/tooltip.js.map +1 -0
  188. package/dist/tree.cjs +6 -0
  189. package/dist/tree.cjs.map +1 -0
  190. package/dist/tree.js +6 -0
  191. package/dist/tree.js.map +1 -0
  192. package/dist/types/aeico-field.d.ts +52 -0
  193. package/dist/types/alert/alert.d.ts +1 -0
  194. package/dist/types/card/defines.d.ts +1 -1
  195. package/dist/types/copy-button/copy-button.d.ts +32 -0
  196. package/dist/types/copy-button/defines.d.ts +1 -0
  197. package/dist/types/copy-button/index.d.ts +3 -0
  198. package/dist/types/detail/defines.d.ts +2 -1
  199. package/dist/types/detail/detail.d.ts +3 -1
  200. package/dist/types/detail/index.d.ts +1 -1
  201. package/dist/types/detail-group/detail-group.d.ts +39 -0
  202. package/dist/types/detail-group/index.d.ts +2 -0
  203. package/dist/types/drawer/defines.d.ts +1 -0
  204. package/dist/types/drawer/drawer.d.ts +31 -0
  205. package/dist/types/drawer/index.d.ts +3 -0
  206. package/dist/types/icon/built-in-icons.d.ts +1 -0
  207. package/dist/types/icon/defines.d.ts +5 -1
  208. package/dist/types/icon/icon.d.ts +1 -0
  209. package/dist/types/icon/index.d.ts +1 -1
  210. package/dist/types/icon/registry.d.ts +8 -0
  211. package/dist/types/index.d.ts +17 -0
  212. package/dist/types/menu/defines.d.ts +15 -0
  213. package/dist/types/menu/index.d.ts +5 -0
  214. package/dist/types/menu/menu-item.d.ts +63 -0
  215. package/dist/types/menu/menu.d.ts +34 -0
  216. package/dist/types/number-input/index.d.ts +2 -0
  217. package/dist/types/number-input/number-input.d.ts +35 -0
  218. package/dist/types/pagination/defines.d.ts +2 -0
  219. package/dist/types/pagination/index.d.ts +3 -0
  220. package/dist/types/pagination/pagination.d.ts +77 -0
  221. package/dist/types/select/select.d.ts +2 -2
  222. package/dist/types/spinner/defines.d.ts +3 -0
  223. package/dist/types/spinner/index.d.ts +3 -0
  224. package/dist/types/spinner/spinner.d.ts +35 -0
  225. package/dist/types/switch/defines.d.ts +1 -0
  226. package/dist/types/switch/switch.d.ts +8 -4
  227. package/dist/types/tabs/defines.d.ts +1 -0
  228. package/dist/types/tabs/tabs.d.ts +3 -0
  229. package/dist/types/text-input/text-input.d.ts +0 -4
  230. package/dist/types/textarea/index.d.ts +1 -0
  231. package/dist/types/textarea/textarea.d.ts +26 -0
  232. package/dist/types/tooltip/defines.d.ts +2 -0
  233. package/dist/types/tooltip/index.d.ts +4 -0
  234. package/dist/types/tooltip/tooltip.d.ts +48 -0
  235. package/dist/types/tree/defines.d.ts +23 -0
  236. package/dist/types/tree/index.d.ts +5 -0
  237. package/dist/types/tree/tree-item.d.ts +54 -0
  238. package/dist/types/tree/tree.d.ts +64 -0
  239. package/package.json +5 -5
  240. package/src/aeico-field.ts +142 -7
  241. package/src/alert/alert.ts +3 -2
  242. package/src/card/defines.ts +1 -1
  243. package/src/checkbox/checkbox.ts +17 -2
  244. package/src/copy-button/copy-button.ts +150 -0
  245. package/src/copy-button/defines.ts +5 -0
  246. package/src/copy-button/index.ts +3 -0
  247. package/src/detail/defines.ts +2 -1
  248. package/src/detail/detail.ts +5 -1
  249. package/src/detail/index.ts +1 -1
  250. package/src/detail-group/detail-group.ts +104 -0
  251. package/src/detail-group/index.ts +2 -0
  252. package/src/drawer/defines.ts +1 -0
  253. package/src/drawer/drawer.ts +157 -0
  254. package/src/drawer/index.ts +3 -0
  255. package/src/icon/built-in-icons.ts +21 -0
  256. package/src/icon/defines.ts +6 -1
  257. package/src/icon/icon.ts +29 -10
  258. package/src/icon/index.ts +1 -1
  259. package/src/icon/registry.ts +23 -1
  260. package/src/index.ts +30 -0
  261. package/src/menu/defines.ts +17 -0
  262. package/src/menu/index.ts +5 -0
  263. package/src/menu/menu-item.ts +315 -0
  264. package/src/menu/menu.ts +81 -0
  265. package/src/number-input/index.ts +2 -0
  266. package/src/number-input/number-input.ts +137 -0
  267. package/src/pagination/defines.ts +2 -0
  268. package/src/pagination/index.ts +3 -0
  269. package/src/pagination/pagination.ts +310 -0
  270. package/src/radio-group/radio-group.ts +11 -4
  271. package/src/select/select.ts +111 -70
  272. package/src/slider/slider.ts +9 -2
  273. package/src/spinner/defines.ts +12 -0
  274. package/src/spinner/index.ts +3 -0
  275. package/src/spinner/spinner.ts +81 -0
  276. package/src/styles/color.css +91 -91
  277. package/src/styles/components/action-button.css +37 -0
  278. package/src/styles/components/alert.css +22 -28
  279. package/src/styles/components/badge.css +13 -20
  280. package/src/styles/components/breadcrumb-item.css +7 -7
  281. package/src/styles/components/button.css +39 -50
  282. package/src/styles/components/card.css +45 -30
  283. package/src/styles/components/checkbox.css +9 -36
  284. package/src/styles/components/copy-button.css +108 -0
  285. package/src/styles/components/detail-group.css +10 -0
  286. package/src/styles/components/detail.css +56 -35
  287. package/src/styles/components/dialog.css +11 -11
  288. package/src/styles/components/divider.css +3 -3
  289. package/src/styles/components/drawer.css +152 -0
  290. package/src/styles/components/dropdown-item.css +7 -8
  291. package/src/styles/components/dropdown.css +3 -4
  292. package/src/styles/components/field-label.css +120 -0
  293. package/src/styles/components/icon-button.css +25 -36
  294. package/src/styles/components/icon.css +1 -1
  295. package/src/styles/components/menu-item.css +167 -0
  296. package/src/styles/components/menu.css +17 -0
  297. package/src/styles/components/navbar.css +16 -16
  298. package/src/styles/components/number-input.css +158 -0
  299. package/src/styles/components/pagination.css +205 -0
  300. package/src/styles/components/progress-bar.css +2 -3
  301. package/src/styles/components/radio-group.css +69 -106
  302. package/src/styles/components/select-option.css +5 -5
  303. package/src/styles/components/select.css +30 -69
  304. package/src/styles/components/slider.css +26 -71
  305. package/src/styles/components/spinner.css +78 -0
  306. package/src/styles/components/switch.css +64 -27
  307. package/src/styles/components/tab-panel.css +1 -1
  308. package/src/styles/components/tab.css +4 -5
  309. package/src/styles/components/tabs.css +49 -1
  310. package/src/styles/components/tag.css +14 -21
  311. package/src/styles/components/text-input.css +17 -64
  312. package/src/styles/components/textarea.css +66 -0
  313. package/src/styles/components/tooltip.css +102 -0
  314. package/src/styles/components/tree-item.css +152 -0
  315. package/src/styles/components/tree.css +10 -0
  316. package/src/styles/layout.css +457 -25
  317. package/src/styles/radius.css +10 -0
  318. package/src/styles/size.css +7 -7
  319. package/src/styles/variables.css +271 -247
  320. package/src/switch/defines.ts +1 -0
  321. package/src/switch/switch.ts +61 -12
  322. package/src/tabs/defines.ts +1 -0
  323. package/src/tabs/tabs.ts +12 -0
  324. package/src/text-input/text-input.ts +10 -15
  325. package/src/textarea/index.ts +1 -0
  326. package/src/textarea/textarea.ts +107 -0
  327. package/src/tooltip/defines.ts +11 -0
  328. package/src/tooltip/index.ts +4 -0
  329. package/src/tooltip/tooltip.ts +183 -0
  330. package/src/tree/defines.ts +26 -0
  331. package/src/tree/index.ts +5 -0
  332. package/src/tree/tree-item.ts +258 -0
  333. package/src/tree/tree.ts +237 -0
  334. package/dist/chunks/aeico-field.cjs +0 -179
  335. package/dist/chunks/aeico-field.cjs.map +0 -1
  336. package/dist/chunks/aeico-field.js +0 -180
  337. 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":"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"}
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.styleVariables, buttonGroupStyle]);
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,gBAAgB,gBAAgB;AAiF7D,YAAY,SAAA;;"}
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 { s as styleVariables } from "./variables.js";
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", [styleVariables, buttonGroupStyle]);
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,CAAC,gBAAgB,gBAAgB;AAiF7D,YAAY,SAAA;"}
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;"}
@@ -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, 4px) var(--_btn-r-tr, 4px) var(--_btn-r-br, 4px) var(--_btn-r-bl, 4px);
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(--btn-solid-bg);
46
- border: 1px solid var(--btn-solid-bg);
47
- color: var(--btn-solid-color);
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(--btn-solid-bg-hover);
55
- border-color: var(--btn-border-hover);
56
- color: var(--btn-solid-color-hover, var(--btn-solid-color));
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(--btn-solid-bg-active); }
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, 3px) var(--_btn-r-tr, 3px) var(--_btn-r-br, 3px) var(--_btn-r-bl, 3px); }
67
- :host([size="sm"]) button { border-radius: var(--_btn-r-tl, 3px) var(--_btn-r-tr, 3px) var(--_btn-r-br, 3px) var(--_btn-r-bl, 3px); }
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(--btn-border);
74
- color: var(--btn-accent);
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(--btn-subtle-bg);
79
- border-color: var(--btn-border-hover);
80
- color: var(--btn-accent-hover);
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(--btn-subtle-bg-hover);
73
+ background: var(--ae-color-subtle-hover);
85
74
  }
86
75
 
87
76
  :host([variant="subtle"]) button {
88
- background: var(--btn-subtle-bg);
77
+ background: var(--ae-color-subtle);
89
78
  border-color: transparent;
90
- color: var(--btn-accent);
79
+ color: var(--ae-color-accent);
91
80
  }
92
81
 
93
82
  :host([variant="subtle"]) button:hover:not(:disabled) {
94
- background: var(--btn-subtle-bg-hover);
95
- color: var(--btn-accent-hover);
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(--btn-subtle-bg-hover);
88
+ background: var(--ae-color-subtle-hover);
100
89
  }
101
90
 
102
91
  :host([variant="faint"]) button {
103
- background: var(--btn-subtle-bg);
104
- border-color: var(--btn-border);
105
- color: var(--btn-accent);
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(--btn-subtle-bg-hover);
110
- border-color: var(--btn-border-hover);
111
- color: var(--btn-accent-hover);
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(--btn-subtle-bg-hover);
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(--btn-accent);
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(--btn-subtle-bg);
129
- color: var(--btn-accent-hover);
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(--btn-subtle-bg-hover);
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(--btn-solid-bg-active);
159
- border-color: var(--btn-border-hover);
160
- color: var(--btn-solid-color-hover, var(--btn-solid-color));
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: 4px;
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: 50%;
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: 50%;
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.styleVariables, size.sizeCSS, color.colorCSS, buttonStyle]);
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":"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"}
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":"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"}
@@ -1,21 +1,10 @@
1
- import { s as styleVariables } from "./variables.js";
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, 4px) var(--_btn-r-tr, 4px) var(--_btn-r-br, 4px) var(--_btn-r-bl, 4px);
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(--btn-solid-bg);
45
- border: 1px solid var(--btn-solid-bg);
46
- color: var(--btn-solid-color);
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(--btn-solid-bg-hover);
54
- border-color: var(--btn-border-hover);
55
- color: var(--btn-solid-color-hover, var(--btn-solid-color));
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(--btn-solid-bg-active); }
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, 3px) var(--_btn-r-tr, 3px) var(--_btn-r-br, 3px) var(--_btn-r-bl, 3px); }
66
- :host([size="sm"]) button { border-radius: var(--_btn-r-tl, 3px) var(--_btn-r-tr, 3px) var(--_btn-r-br, 3px) var(--_btn-r-bl, 3px); }
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(--btn-border);
73
- color: var(--btn-accent);
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(--btn-subtle-bg);
78
- border-color: var(--btn-border-hover);
79
- color: var(--btn-accent-hover);
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(--btn-subtle-bg-hover);
72
+ background: var(--ae-color-subtle-hover);
84
73
  }
85
74
 
86
75
  :host([variant="subtle"]) button {
87
- background: var(--btn-subtle-bg);
76
+ background: var(--ae-color-subtle);
88
77
  border-color: transparent;
89
- color: var(--btn-accent);
78
+ color: var(--ae-color-accent);
90
79
  }
91
80
 
92
81
  :host([variant="subtle"]) button:hover:not(:disabled) {
93
- background: var(--btn-subtle-bg-hover);
94
- color: var(--btn-accent-hover);
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(--btn-subtle-bg-hover);
87
+ background: var(--ae-color-subtle-hover);
99
88
  }
100
89
 
101
90
  :host([variant="faint"]) button {
102
- background: var(--btn-subtle-bg);
103
- border-color: var(--btn-border);
104
- color: var(--btn-accent);
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(--btn-subtle-bg-hover);
109
- border-color: var(--btn-border-hover);
110
- color: var(--btn-accent-hover);
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(--btn-subtle-bg-hover);
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(--btn-accent);
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(--btn-subtle-bg);
128
- color: var(--btn-accent-hover);
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(--btn-subtle-bg-hover);
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(--btn-solid-bg-active);
158
- border-color: var(--btn-border-hover);
159
- color: var(--btn-solid-color-hover, var(--btn-solid-color));
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: 4px;
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: 50%;
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: 50%;
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", [styleVariables, sizeCSS, colorCSS, buttonStyle]);
333
+ __publicField(Button, "styles", [variables, sizeCSS, colorCSS, buttonStyle]);
345
334
  Button.register();
346
335
  export {
347
336
  Button as B