@ecopages/radiant-ui 0.1.0-rc.7 → 0.1.0

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 (238) hide show
  1. package/README.md +11 -3
  2. package/dist/components/ui/alert/alert.d.ts +2 -4
  3. package/dist/components/ui/alert/alert.script.d.ts +25 -15
  4. package/dist/components/ui/autocomplete/autocomplete.css +1 -2
  5. package/dist/components/ui/autocomplete/autocomplete.d.ts +8 -3
  6. package/dist/components/ui/autocomplete/autocomplete.script.d.ts +29 -4
  7. package/dist/components/ui/avatar/avatar.css +10 -8
  8. package/dist/components/ui/avatar/avatar.d.ts +3 -1
  9. package/dist/components/ui/breadcrumb/breadcrumb.d.ts +11 -11
  10. package/dist/components/ui/breadcrumb/breadcrumb.script.d.ts +10 -10
  11. package/dist/components/ui/calendar/calendar.css +10 -5
  12. package/dist/components/ui/calendar/calendar.script.d.ts +24 -21
  13. package/dist/components/ui/calendar/index.js +1 -1
  14. package/dist/components/ui/calendar/index.js.map +3 -3
  15. package/dist/components/ui/carousel/carousel-autoplay.d.ts +22 -0
  16. package/dist/components/ui/carousel/carousel-swipe.d.ts +17 -0
  17. package/dist/components/ui/carousel/carousel-window.d.ts +63 -0
  18. package/dist/components/ui/carousel/carousel.css +71 -18
  19. package/dist/components/ui/carousel/carousel.d.ts +8 -4
  20. package/dist/components/ui/carousel/carousel.script.d.ts +73 -40
  21. package/dist/components/ui/carousel/index.js +1 -1
  22. package/dist/components/ui/carousel/index.js.map +4 -4
  23. package/dist/components/ui/checkbox/checkbox.d.ts +11 -0
  24. package/dist/components/ui/checkbox/checkbox.script.d.ts +31 -8
  25. package/dist/components/ui/checkbox/index.js +1 -1
  26. package/dist/components/ui/checkbox/index.js.map +4 -4
  27. package/dist/components/ui/checkbox-group/checkbox-group.d.ts +4 -2
  28. package/dist/components/ui/checkbox-group/checkbox-group.script.d.ts +39 -20
  29. package/dist/components/ui/checkbox-group/index.js +1 -1
  30. package/dist/components/ui/checkbox-group/index.js.map +4 -4
  31. package/dist/components/ui/combobox/combobox.css +9 -1
  32. package/dist/components/ui/combobox/combobox.d.ts +12 -4
  33. package/dist/components/ui/combobox/combobox.script.d.ts +74 -25
  34. package/dist/components/ui/combobox/index.d.ts +2 -2
  35. package/dist/components/ui/combobox/index.js +1 -1
  36. package/dist/components/ui/combobox/index.js.map +4 -4
  37. package/dist/components/ui/cycle-toggle/cycle-toggle.d.ts +6 -2
  38. package/dist/components/ui/cycle-toggle/cycle-toggle.script.d.ts +35 -4
  39. package/dist/components/ui/cycle-toggle/index.js +1 -1
  40. package/dist/components/ui/cycle-toggle/index.js.map +3 -3
  41. package/dist/components/ui/date-field/date-field.css +13 -17
  42. package/dist/components/ui/date-field/date-field.d.ts +10 -8
  43. package/dist/components/ui/date-field/date-field.script.d.ts +35 -52
  44. package/dist/components/ui/date-field/index.js +1 -1
  45. package/dist/components/ui/date-field/index.js.map +4 -4
  46. package/dist/components/ui/date-input/date-input-segment-dom.d.ts +24 -0
  47. package/dist/components/ui/date-input/date-input.css +50 -0
  48. package/dist/components/ui/date-input/date-input.d.ts +8 -0
  49. package/dist/components/ui/date-input/date-input.script.d.ts +137 -0
  50. package/dist/components/ui/date-input/index.d.ts +2 -0
  51. package/dist/components/ui/date-input/index.js +2 -0
  52. package/dist/components/ui/date-input/index.js.map +7 -0
  53. package/dist/components/ui/date-range-picker/date-range-picker.css +18 -19
  54. package/dist/components/ui/date-range-picker/date-range-picker.d.ts +11 -9
  55. package/dist/components/ui/date-range-picker/date-range-picker.script.d.ts +42 -51
  56. package/dist/components/ui/date-range-picker/index.js +1 -1
  57. package/dist/components/ui/date-range-picker/index.js.map +4 -4
  58. package/dist/components/ui/dialog/dialog.css +18 -14
  59. package/dist/components/ui/dialog/dialog.d.ts +6 -0
  60. package/dist/components/ui/dialog/dialog.script.d.ts +43 -10
  61. package/dist/components/ui/dialog/index.js +1 -1
  62. package/dist/components/ui/dialog/index.js.map +4 -4
  63. package/dist/components/ui/disclosure/disclosure-group.script.d.ts +19 -3
  64. package/dist/components/ui/disclosure/disclosure.css +3 -6
  65. package/dist/components/ui/disclosure/disclosure.d.ts +23 -7
  66. package/dist/components/ui/disclosure/disclosure.script.d.ts +31 -7
  67. package/dist/components/ui/disclosure/index.d.ts +1 -1
  68. package/dist/components/ui/disclosure/index.js +1 -1
  69. package/dist/components/ui/disclosure/index.js.map +4 -4
  70. package/dist/components/ui/field/field-description.d.ts +1 -0
  71. package/dist/components/ui/field/field-error.d.ts +2 -2
  72. package/dist/components/ui/field/field.d.ts +4 -4
  73. package/dist/components/ui/field/field.script.d.ts +54 -24
  74. package/dist/components/ui/field/index.js +1 -1
  75. package/dist/components/ui/field/index.js.map +4 -4
  76. package/dist/components/ui/form/control-protocol.d.ts +38 -1
  77. package/dist/components/ui/form/form-context.d.ts +3 -0
  78. package/dist/components/ui/form/form.d.ts +6 -0
  79. package/dist/components/ui/form/form.script.d.ts +29 -12
  80. package/dist/components/ui/form/index.d.ts +2 -1
  81. package/dist/components/ui/form/index.js +1 -1
  82. package/dist/components/ui/form/index.js.map +4 -4
  83. package/dist/components/ui/grid/grid.d.ts +4 -3
  84. package/dist/components/ui/grid/grid.script.d.ts +19 -11
  85. package/dist/components/ui/hover-card/hover-card.css +12 -101
  86. package/dist/components/ui/hover-card/hover-card.d.ts +7 -2
  87. package/dist/components/ui/hover-card/hover-card.script.d.ts +36 -5
  88. package/dist/components/ui/hover-card/index.js +1 -1
  89. package/dist/components/ui/hover-card/index.js.map +4 -4
  90. package/dist/components/ui/input/index.js +1 -1
  91. package/dist/components/ui/input/index.js.map +4 -4
  92. package/dist/components/ui/input/input.css +1 -1
  93. package/dist/components/ui/knob/index.js +1 -1
  94. package/dist/components/ui/knob/index.js.map +3 -3
  95. package/dist/components/ui/knob/knob.css +6 -1
  96. package/dist/components/ui/knob/knob.d.ts +4 -4
  97. package/dist/components/ui/knob/knob.script.d.ts +55 -20
  98. package/dist/components/ui/label/index.js +1 -1
  99. package/dist/components/ui/label/index.js.map +4 -4
  100. package/dist/components/ui/label/label.d.ts +2 -1
  101. package/dist/components/ui/listbox/index.d.ts +2 -2
  102. package/dist/components/ui/listbox/index.js +1 -1
  103. package/dist/components/ui/listbox/index.js.map +4 -4
  104. package/dist/components/ui/listbox/listbox.css +14 -0
  105. package/dist/components/ui/listbox/listbox.d.ts +16 -2
  106. package/dist/components/ui/listbox/listbox.script.d.ts +55 -12
  107. package/dist/components/ui/menu-button/index.js +1 -1
  108. package/dist/components/ui/menu-button/index.js.map +4 -4
  109. package/dist/components/ui/menu-button/menu-button.d.ts +2 -2
  110. package/dist/components/ui/menu-button/menu-button.script.d.ts +30 -27
  111. package/dist/components/ui/menubar/index.js +1 -1
  112. package/dist/components/ui/menubar/index.js.map +4 -4
  113. package/dist/components/ui/menubar/menubar.script.d.ts +41 -15
  114. package/dist/components/ui/meter/index.js +1 -1
  115. package/dist/components/ui/meter/index.js.map +3 -3
  116. package/dist/components/ui/meter/meter.css +27 -2
  117. package/dist/components/ui/meter/meter.script.d.ts +19 -14
  118. package/dist/components/ui/navigation-menu/index.d.ts +1 -1
  119. package/dist/components/ui/navigation-menu/index.js +1 -1
  120. package/dist/components/ui/navigation-menu/index.js.map +4 -4
  121. package/dist/components/ui/navigation-menu/navigation-menu.css +32 -34
  122. package/dist/components/ui/navigation-menu/navigation-menu.d.ts +34 -5
  123. package/dist/components/ui/navigation-menu/navigation-menu.script.d.ts +93 -12
  124. package/dist/components/ui/number-field/index.js +1 -1
  125. package/dist/components/ui/number-field/index.js.map +4 -4
  126. package/dist/components/ui/number-field/number-field.css +1 -1
  127. package/dist/components/ui/number-field/number-field.d.ts +8 -19
  128. package/dist/components/ui/number-field/number-field.script.d.ts +30 -9
  129. package/dist/components/ui/pagination/index.d.ts +1 -1
  130. package/dist/components/ui/pagination/index.js +1 -1
  131. package/dist/components/ui/pagination/index.js.map +3 -3
  132. package/dist/components/ui/pagination/pagination.css +50 -13
  133. package/dist/components/ui/pagination/pagination.d.ts +33 -9
  134. package/dist/components/ui/pagination/pagination.script.d.ts +29 -9
  135. package/dist/components/ui/popover/index.js +1 -1
  136. package/dist/components/ui/popover/index.js.map +4 -4
  137. package/dist/components/ui/popover/popover.d.ts +17 -1
  138. package/dist/components/ui/popover/popover.script.d.ts +57 -9
  139. package/dist/components/ui/radio-group/index.js +1 -1
  140. package/dist/components/ui/radio-group/index.js.map +4 -4
  141. package/dist/components/ui/radio-group/radio-group.d.ts +2 -2
  142. package/dist/components/ui/radio-group/radio-group.script.d.ts +35 -16
  143. package/dist/components/ui/select/index.d.ts +2 -2
  144. package/dist/components/ui/select/index.js +1 -1
  145. package/dist/components/ui/select/index.js.map +4 -4
  146. package/dist/components/ui/select/select.css +8 -6
  147. package/dist/components/ui/select/select.d.ts +18 -9
  148. package/dist/components/ui/select/select.script.d.ts +74 -26
  149. package/dist/components/ui/shared/calendar-popover-behavior.d.ts +27 -0
  150. package/dist/components/ui/shared/control-toggle.css +8 -4
  151. package/dist/components/ui/shared/field-label.d.ts +5 -0
  152. package/dist/components/ui/shared/listbox-host-controller.d.ts +41 -0
  153. package/dist/components/ui/shared/listbox-option.d.ts +4 -0
  154. package/dist/components/ui/shared/multi-value.d.ts +23 -1
  155. package/dist/components/ui/shared/numeric-range.d.ts +8 -0
  156. package/dist/components/ui/shared/popover.css +10 -99
  157. package/dist/components/ui/sidebar/index.d.ts +2 -1
  158. package/dist/components/ui/sidebar/index.js +1 -1
  159. package/dist/components/ui/sidebar/index.js.map +4 -4
  160. package/dist/components/ui/sidebar/sidebar-trigger.d.ts +12 -0
  161. package/dist/components/ui/sidebar/sidebar-trigger.script.d.ts +52 -31
  162. package/dist/components/ui/sidebar/sidebar.css +67 -61
  163. package/dist/components/ui/sidebar/sidebar.d.ts +9 -4
  164. package/dist/components/ui/sidebar/sidebar.script.d.ts +42 -20
  165. package/dist/components/ui/slider/index.js +1 -1
  166. package/dist/components/ui/slider/index.js.map +4 -4
  167. package/dist/components/ui/slider/slider.css +5 -5
  168. package/dist/components/ui/slider/slider.d.ts +20 -10
  169. package/dist/components/ui/slider/slider.script.d.ts +103 -27
  170. package/dist/components/ui/switch/index.js +1 -1
  171. package/dist/components/ui/switch/index.js.map +4 -4
  172. package/dist/components/ui/switch/switch.css +28 -22
  173. package/dist/components/ui/switch/switch.d.ts +13 -0
  174. package/dist/components/ui/switch/switch.script.d.ts +34 -8
  175. package/dist/components/ui/table/index.js +1 -1
  176. package/dist/components/ui/table/index.js.map +4 -4
  177. package/dist/components/ui/table/table.d.ts +9 -7
  178. package/dist/components/ui/table/table.script.d.ts +55 -12
  179. package/dist/components/ui/tabs/tabs.css +18 -12
  180. package/dist/components/ui/tabs/tabs.d.ts +7 -4
  181. package/dist/components/ui/tabs/tabs.script.d.ts +39 -9
  182. package/dist/components/ui/tag-group/index.js +1 -1
  183. package/dist/components/ui/tag-group/index.js.map +4 -4
  184. package/dist/components/ui/tag-group/tag-group.d.ts +19 -7
  185. package/dist/components/ui/tag-group/tag-group.script.d.ts +58 -10
  186. package/dist/components/ui/textarea/index.js +1 -1
  187. package/dist/components/ui/textarea/index.js.map +4 -4
  188. package/dist/components/ui/textarea/textarea.css +1 -1
  189. package/dist/components/ui/toast/index.js +1 -1
  190. package/dist/components/ui/toast/index.js.map +4 -4
  191. package/dist/components/ui/toast/toast.css +35 -32
  192. package/dist/components/ui/toast/toast.script.d.ts +17 -31
  193. package/dist/components/ui/toast/toaster.script.d.ts +24 -12
  194. package/dist/components/ui/toc/toc.script.d.ts +19 -8
  195. package/dist/components/ui/toolbar/toolbar.d.ts +5 -0
  196. package/dist/components/ui/toolbar/toolbar.script.d.ts +24 -4
  197. package/dist/components/ui/tooltip/index.js +1 -1
  198. package/dist/components/ui/tooltip/index.js.map +4 -4
  199. package/dist/components/ui/tooltip/tooltip.css +14 -94
  200. package/dist/components/ui/tooltip/tooltip.d.ts +7 -0
  201. package/dist/components/ui/tooltip/tooltip.script.d.ts +36 -6
  202. package/dist/components/ui/tree/tree.d.ts +4 -3
  203. package/dist/components/ui/tree/tree.script.d.ts +28 -15
  204. package/dist/components/ui/treegrid/treegrid.d.ts +5 -3
  205. package/dist/components/ui/treegrid/treegrid.script.d.ts +33 -14
  206. package/dist/components/ui/window-splitter/index.d.ts +1 -1
  207. package/dist/components/ui/window-splitter/index.js +1 -1
  208. package/dist/components/ui/window-splitter/index.js.map +3 -3
  209. package/dist/components/ui/window-splitter/window-splitter.d.ts +10 -1
  210. package/dist/components/ui/window-splitter/window-splitter.script.d.ts +26 -8
  211. package/dist/index.d.ts +2 -0
  212. package/dist/index.js +1 -1
  213. package/dist/index.js.map +4 -4
  214. package/dist/lib/icons/check.d.ts +3 -0
  215. package/dist/lib/icons/chevron-down.d.ts +0 -1
  216. package/dist/lib/icons/index.d.ts +2 -0
  217. package/dist/lib/icons/x.d.ts +5 -0
  218. package/dist/lib/intl-date/index.d.ts +4 -2
  219. package/dist/lib/intl-date/segment-editing.d.ts +34 -0
  220. package/dist/lib/intl-date/segments.d.ts +26 -4
  221. package/dist/lib/non-empty.d.ts +6 -0
  222. package/dist/lib/unique-id.d.ts +11 -0
  223. package/dist/lib/viewport/breakpoints.d.ts +6 -0
  224. package/dist/lib/viewport/mobile-layout.d.ts +15 -0
  225. package/dist/styles/primitives.css +14 -11
  226. package/dist/styles/radiant-ui-core.css +10 -0
  227. package/dist/styles/radiant-ui.css +40 -11
  228. package/dist/styles/style-dependencies.json +38 -13
  229. package/dist/styles/styles.css +485 -252
  230. package/dist/styles/tailwind.css +40 -101
  231. package/dist/styles/tokens/presets/colors/aurora.css +2 -0
  232. package/dist/styles/tokens/presets/colors/basalt.css +2 -0
  233. package/dist/styles/tokens/presets/colors/ember.css +2 -0
  234. package/dist/styles/tokens/presets/colors/glacier.css +2 -0
  235. package/dist/styles/tokens/semantic.css +1 -0
  236. package/dist/styles/tokens/system.css +11 -3
  237. package/dist/styles/tokens/typography/default.css +8 -0
  238. package/package.json +27 -13
@@ -17,25 +17,28 @@ export type RuiTabPanelProps = Omit<JsxElementProps<HTMLDivElement>, 'id' | 'hid
17
17
  hidden?: boolean;
18
18
  };
19
19
  /**
20
- * Tab strip container. Set `aria-label` (or `label` on `RuiTabs`) for the tab list name.
20
+ * Tab strip container. Stamps `[role="tablist"]`.
21
21
  *
22
22
  * @cssclass rui-tabs__list - `role="tablist"` strip.
23
+ *
24
+ * @remarks Set `aria-label` here, or `label` on `RuiTabs`, for the tab list name.
23
25
  */
24
26
  export declare function RuiTabList({ children, class: className, ...props }: RuiTabListProps): import("@ecopages/jsx").JsxRenderable;
25
27
  /**
26
- * Tab control. `id` pairs with the matching `RuiTabPanel` id.
28
+ * Tab control. Stamps `[role="tab"]` with `data-tab-value` and `id="tab-{id}"`.
27
29
  *
28
30
  * @cssclass rui-tabs__tab - `role="tab"` button; underline/border per `variant`.
29
31
  */
30
32
  export declare function RuiTab({ id, children, class: className, disabled, selected, ...props }: RuiTabProps): import("@ecopages/jsx").JsxRenderable;
31
33
  /**
32
- * Groups tab panels below the tab list.
34
+ * Groups tab panels below the tab list. Presentation wrapper only; no role target.
33
35
  *
34
36
  * @cssclass rui-tabs__panels - Panel group.
35
37
  */
36
38
  export declare function RuiTabPanels({ children, class: className, ...props }: RuiTabPanelsProps): import("@ecopages/jsx").JsxRenderable;
37
39
  /**
38
- * Tab panel paired with a `RuiTab` by `id`.
40
+ * Tab panel paired with a `RuiTab` by `id`. Stamps `[role="tabpanel"]` with
41
+ * `data-tab-value` and `id="panel-{id}"`.
39
42
  *
40
43
  * @cssclass rui-tabs__panel - `role="tabpanel"`; hidden when not selected.
41
44
  */
@@ -21,20 +21,50 @@ export type RuiTabsChangeDetail = {
21
21
  value: string;
22
22
  };
23
23
  /**
24
- * `<rui-tabs>` — layered sections of content with one visible panel at a time.
24
+ * `<rui-tabs>` — layered sections with one visible panel at a time.
25
25
  *
26
- * Compose with `RuiTabList`, `RuiTab`, `RuiTabPanels`, and `RuiTabPanel`, or author
27
- * matching `[role="tablist"]`, `[role="tab"]`, and `[role="tabpanel"]` markup directly.
26
+ * The custom element is a behavior host: it does not render tab chrome. Import
27
+ * the script and place light-DOM children that match the contract below, or use
28
+ * `RuiTabList`, `RuiTab`, `RuiTabPanels`, and `RuiTabPanel`, which stamp the
29
+ * same targets.
28
30
  *
29
- * @remarks
30
- * Re-syncs when light-DOM children are replaced (e.g. a parent host re-renders the
31
- * tab list). Observes `childList` only so attribute updates from sync itself do not loop.
31
+ * ## Light-DOM contract
32
32
  *
33
- * @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/
33
+ * Required:
34
+ * - `[role="tablist"]` — tab strip. Host sets `aria-label` from `label` when the
35
+ * tablist has no `aria-label`.
36
+ * - `[role="tab"]` — tab control. Host sets `aria-selected` and `tabIndex`.
37
+ * - `[role="tabpanel"]` — panel region. Host sets `hidden`; sets `tabIndex` when
38
+ * not already present.
39
+ *
40
+ * Per tab / panel:
41
+ * - `data-tab-value` — identity matched against `value`. Falls back to `id` with
42
+ * `tab-` / `panel-` prefixes stripped.
43
+ *
44
+ * Author `aria-label` on the tablist (preferred over `label` on the host) and
45
+ * `aria-disabled="true"` on a tab to block activation. Do not set `aria-selected`,
46
+ * `tabIndex`, or `hidden` on panels — the host owns those after `resync()`.
47
+ *
48
+ * Nested hosts: none.
34
49
  *
50
+ * @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/
35
51
  * @element rui-tabs
36
- * @slot - `RuiTabList` and `RuiTabPanels` (or matching tablist / tabpanel markup).
37
- * @fires rui-change - Emitted when the selected tab changes.
52
+ * @attr {('ghost'|'boxed')} variant - Visual treatment. Default: `boxed`.
53
+ * @attr {string} value - Selected tab id. Default: `''` (first tab).
54
+ * @attr {string} label - Accessible name for the tab list when `[role="tablist"]` has no `aria-label`.
55
+ * @attr {boolean} automatic - When `true`, focusing a tab activates it. Default: `true`.
56
+ * @fires rui-change - Emitted when the selected tab changes; `detail.value` is the tab id.
57
+ *
58
+ * @cssprop --rui-tabs-radius - Boxed card corner radius. Default: `--radius-container`.
59
+ * @cssprop --rui-tabs-indicator-width - Selected-tab underline thickness. Default: `2px`.
60
+ * @cssprop --rui-tabs-indicator-color - Selected-tab underline. Default: `--primary`.
61
+ * @cssprop --rui-tabs-tab-padding-x - Tab inline padding. Default: `--space-control-x`.
62
+ * @cssprop --rui-tabs-tab-padding-y - Tab block padding. Default: `--space-control-y`.
63
+ * @cssprop --rui-tabs-panel-padding - Panel padding. Default: `--space-inset`.
64
+ *
65
+ * @remarks
66
+ * `resync()` re-applies tablist labeling and selected/hidden state from `value`.
67
+ * Observes `childList` so replaced children (e.g. parent re-render) stay in sync.
38
68
  */
39
69
  export declare class RuiTabs extends RadiantElement {
40
70
  variant: RuiTabsVariant;
@@ -1,2 +1,2 @@
1
- import{RadiantElement as Ve,customElement as Je,event as Ie,onEvent as W,onUpdated as Qe,prop as M,state as We}from"@ecopages/radiant";function Be(t,e){t.forEach((i,a)=>{let u=a===e?0:-1;i.tabIndex!==u&&(i.tabIndex=u)})}function qe(t,e){if(!t.length)return null;let i=Math.max(0,Math.min(t.length-1,e));return Be(t,i),t[i]?.focus(),t[i]??null}function Ge(t,e){return t==="Home"?"first":t==="End"?"last":e==="horizontal"?t==="ArrowRight"?"next":t==="ArrowLeft"?"prev":null:t==="ArrowDown"?"next":t==="ArrowUp"?"prev":null}function oe(t){let{items:e,current:i,key:a,orientation:u="horizontal",wrap:p=!0}=t;if(!e.length||!i)return{handled:!1};let c=e.indexOf(i);if(c<0)return{handled:!1};let r=Ge(a,u);if(!r)return{handled:!1};let b=c;r==="first"?b=0:r==="last"?b=e.length-1:r==="next"?b=p?(c+1)%e.length:Math.min(e.length-1,c+1):b=p?(c-1+e.length)%e.length:Math.max(0,c-1);let S=qe(e,b);return S?{handled:!0,index:b,item:S}:{handled:!1}}function le(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean):[]}function Q(t){return t.join(",")}var ue,ce,de,ge,he,fe,me,pe,be,ve,ye,Te,_e,xe,we,Ee,Se,Ae;function $e(t,e,i,a,u,p){var c,r,b,S,L,q,R,X=Symbol.metadata||Symbol.for("Symbol.metadata"),Y=Object.defineProperty,G=Object.create,Z=[G(null),G(null)],H=e.length;function j(n,v,h){return function(s,o){v&&(o=s,s=t);for(var y=0;y<n.length;y++)o=n[y].apply(s,h?[o]:[]);return h?o:s}}function x(n,v,h,s){if(typeof n!="function"&&(s||n!==void 0))throw new TypeError(v+" must "+(h||"be")+" a function"+(s?"":" or undefined"));return n}function P(n,v,h,s,o,y,E,f,T,_,N){function $(d){if(!N(d))throw new TypeError("Attempted to access private element on non-instance")}var K=[].concat(v[0]),ee=v[3],O=!E,V=o===1,te=o===3,ie=o===4,D=o===2;function C(d,A,ne){return function(z,se){return A&&(se=z,z=n),ne&&ne(z),l[d].call(z,se)}}if(!O){var l={},U=[],w=te?"get":ie||V?"set":"value";if(T?(_||V?l={get:Re(function(){return ee(this)},s,"get"),set:function(d){v[4](this,d)}}:l[w]=ee,_||Re(l[w],s,D?"":w)):_||(l=Object.getOwnPropertyDescriptor(n,s)),!_&&!T){if((r=Z[+f][s])&&(r^o)!==7)throw Error("Decorating two elements with the same name ("+l[w].name+") is not supported yet");Z[+f][s]=o<3?1:o}}for(var g=n,k=K.length-1;k>=0;k-=h?2:1){var ae=x(K[k],"A decorator","be",!0),re=h?K[k-1]:void 0,J={},I={kind:["field","accessor","method","getter","setter","class"][o],name:s,metadata:c,addInitializer:function(d,A){if(d.v)throw new TypeError("attempted to call addInitializer after decoration was finished");x(A,"An initializer","be",!0),y.push(A)}.bind(null,J)};if(O)r=ae.call(re,g,I),J.v=1,x(r,"class decorators","return")&&(g=r);else if(I.static=f,I.private=T,r=I.access={has:T?N.bind():function(d){return s in d}},ie||(r.get=T?D?function(d){return $(d),l.value}:C("get",0,$):function(d){return d[s]}),D||te||(r.set=T?C("set",0,$):function(d,A){d[s]=A}),g=ae.call(re,V?{get:l.get,set:l.set}:l[w],I),J.v=1,V){if(typeof g=="object"&&g)(r=x(g.get,"accessor.get"))&&(l.get=r),(r=x(g.set,"accessor.set"))&&(l.set=r),(r=x(g.init,"accessor.init"))&&U.unshift(r);else if(g!==void 0)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else x(g,(_?"field":"method")+" decorators","return")&&(_?U.unshift(g):l[w]=g)}return o<2&&E.push(j(U,f,1),j(y,f,0)),_||O||(T?V?E.splice(-1,0,C("get",f),C("set",f)):E.push(D?l[w]:x.call.bind(l[w])):Y(n,s,l)),g}function F(n){return Y(n,X,{configurable:!0,enumerable:!0,value:c})}return p!==void 0&&(c=p[X]),c=G(c??null),L=[],q=function(n){n&&L.push(j(n))},R=function(n,v){for(var h=0;h<i.length;h++){var s=i[h],o=s[1],y=7&o;if((8&o)==n&&!y==v){var E=s[2],f=!!s[3],T=16&o;P(n?t:t.prototype,s,T,f?"#"+E:Ke(E),y,y<2?[]:n?S=S||[]:b=b||[],L,!!n,f,v,n&&f?function(_){return Ue(_)===t}:u)}}},R(8,0),R(0,0),R(8,1),R(0,1),q(b),q(S),r=L,H||F(t),{e:r,get c(){var n=[];return H&&[F(t=P(t,[e],a,t.name,5,n)),j(n,1)]}}}function Ke(t){var e=Oe(t,"string");return typeof e=="symbol"?e:e+""}function Oe(t,e){if(typeof t!="object"||!t)return t;var i=t[Symbol.toPrimitive];if(i!==void 0){var a=i.call(t,e||"default");if(typeof a!="object")return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function Re(t,e,i){typeof e=="symbol"&&(e=(e=e.description)?"["+e+"]":"");try{Object.defineProperty(t,"name",{configurable:!0,value:i?i+" "+e:e})}catch{}return t}function Ue(t){if(Object(t)!==t)throw TypeError("right-hand side of 'in' should be an object, got "+(t!==null?typeof t:"null"));return t}var Le,Me=class extends Ve{static{({e:[de,ge,he,fe,me,pe,be,ve,ye,Te,_e,xe,we,Ee,Se,Ae,ue],c:[Le,ce]}=$e(this,[Je("rui-tag-group")],[[M({type:String,reflect:!0,defaultValue:""}),0,"value"],[M({type:String,defaultValue:""}),0,"label"],[M({type:Boolean,reflect:!0,defaultValue:!1}),0,"disabled"],[M({type:String,attribute:"selection-mode",defaultValue:"multiple"}),0,"selectionMode"],[M({type:Boolean,reflect:!0,defaultValue:!1}),0,"embedded"],[Ie({name:"rui-change",bubbles:!0,composed:!0}),0,"changeEvent"],[Ie({name:"rui-remove",bubbles:!0,composed:!0}),0,"removeEvent"],[We,0,"managedItems"],[Qe(["value","label","disabled","selectionMode","embedded","managedItems"]),2,"onPropsUpdated"],[W({selector:"[data-tag]",type:"click"}),2,"onTagClick"],[W({selector:"[data-tag-remove]",type:"click"}),2,"onRemoveClick"],[W({selector:"[data-tag]",type:"keydown"}),2,"onTagKeydown"]],0,void 0,Ve))}constructor(...e){super(...e),Ae(this)}value=(ue(this),de(this));label=(ge(this),he(this));disabled=(fe(this),me(this));selectionMode=(pe(this),be(this));embedded=(ve(this),ye(this));changeEvent=(Te(this),_e(this));removeEvent=(xe(this),we(this));uid=(Ee(this),Math.random().toString(36).slice(2,9));managedItems=Se(this,[]);isMultiple(){return this.selectionMode==="multiple"}getSelectedValues(){return this.value?le(this.value):[]}setSelectedValues(e){this.value=Q(e)}getList(){let e=this.querySelector("[data-rui-managed-list]");return e||this.querySelector("[data-tag-list]")}getTags(){let e=this.getList();return e?Array.from(e.querySelectorAll("[data-tag]")):[]}getVisibleTags(){return this.getTags().filter(e=>!e.hidden&&e.getAttribute("aria-disabled")!=="true")}getTagValue(e){return e.getAttribute("data-value")||e.textContent?.trim()||""}getTagLabel(e){return e.getAttribute("data-label")||e.textContent?.trim()||""}ensureTagIds(){this.getTags().forEach((e,i)=>{e.id||(e.id=`rui-tag-${this.uid}-${i}`)})}syncList(){let e=this.getList();e&&(e.id||(e.id=`rui-tag-list-${this.uid}`),e.setAttribute("role","list"),e.setAttribute("aria-label",this.label||"Tags"),this.disabled?e.setAttribute("aria-disabled","true"):e.removeAttribute("aria-disabled"))}syncTags(){let e=new Set(this.getSelectedValues());this.getTags().forEach((a,u)=>{a.setAttribute("role","listitem");let p=this.getTagValue(a),c=e.has(p);a.setAttribute("aria-selected",String(c)),a.tabIndex=u===0?0:-1;let r=a.querySelector("[data-tag-remove]");r&&(r.type="button",r.tabIndex=-1,r.setAttribute("aria-label",`Remove ${this.getTagLabel(a)}`))})}selectTag(e){if(this.disabled||this.embedded||e.getAttribute("aria-disabled")==="true")return;let i=this.getTagValue(e);if(this.isMultiple()){let a=new Set(this.getSelectedValues());a.has(i)?a.delete(i):a.add(i),this.setSelectedValues([...a])}else this.value=i;this.syncTags(),this.changeEvent.emit({value:this.value})}removeTag(e){let i=this.getTagValue(e),a=new Set(this.getSelectedValues());a.delete(i),this.setSelectedValues([...a]),this.syncTags(),this.removeEvent.emit({value:i}),this.changeEvent.emit({value:this.value})}initialize(){this.ensureTagIds(),this.syncList(),this.syncTags()}onConnected(){this.initialize()}onPropsUpdated(){this.syncManagedList(),this.syncList(),this.syncTags()}resync(){this.ensureTagIds(),this.syncList(),this.syncTags()}setItems(e){this.managedItems=e,this.value=Q(e.map(i=>i.value))}createManagedTag(e){let i=document.createElement("span");i.setAttribute("data-tag",""),i.setAttribute("data-value",e.value),i.setAttribute("data-label",e.label),i.className="rui-tag",i.textContent=e.label;let a=document.createElement("button");a.type="button",a.setAttribute("data-tag-remove",""),a.className="rui-tag__remove",a.setAttribute("aria-label",`Remove ${e.label}`);let u=document.createElement("span");return u.setAttribute("aria-hidden","true"),u.textContent="\xD7",a.append(u),i.append(a),i}syncManagedList(){let e=this.querySelector('[data-ref="root"]');if(!e)return;let i=e.querySelector("[data-rui-managed-list]");if(this.managedItems.length===0){i?.remove();return}i||(i=document.createElement("div"),i.setAttribute("data-tag-list",""),i.setAttribute("data-rui-managed-list",""),i.className="rui-tag-group__list",e.appendChild(i)),i.replaceChildren(...this.managedItems.map(a=>this.createManagedTag(a))),this.ensureTagIds(),this.syncList(),this.syncTags()}onTagClick(e){let i=e.target;if(i.closest("[data-tag-remove]"))return;let a=i.closest("[data-tag]");a&&this.contains(a)&&this.selectTag(a)}onRemoveClick(e){e.stopPropagation();let a=e.target.closest("[data-tag]");a&&this.contains(a)&&this.removeTag(a)}onTagKeydown(e){let i=this.getVisibleTags(),a=e.target.closest("[data-tag]");if(!a)return;if(e.key==="Enter"||e.key===" "){e.preventDefault(),this.embedded||this.selectTag(a);return}if(e.key==="Backspace"||e.key==="Delete"){a.querySelector("[data-tag-remove]")&&(e.preventDefault(),this.removeTag(a));return}oe({items:i,current:a,key:e.key,orientation:"horizontal"}).handled&&e.preventDefault()}static{ce()}};import{jsx as m,jsxs as Xe}from"@ecopages/jsx/jsx-runtime";function je(t,e){return e===void 0||t?.label!==void 0?t:{...t,label:e}}function B(...t){return t.filter(Boolean).join(" ")}function Ce({children:t,class:e,...i}){return m("div",{...i,"data-tag-list":!0,class:B("rui-tag-group__list",e),children:t})}function ke({value:t,label:e,children:i,class:a,disabled:u,...p}){return Xe("span",{...p,"data-tag":!0,"data-value":t,"data-label":e,class:B("rui-tag",a),"aria-disabled":u?"true":void 0,children:[i,m(ze,{})]})}function ze({children:t,class:e,aria:i,...a}){return m("button",{...a,aria:je(i,"Remove"),type:"button","data-tag-remove":!0,class:B("rui-tag__remove",e),children:t??m("span",{"aria-hidden":"true",children:"\xD7"})})}function De({children:t}){return m("div",{class:"rui-tag-group","data-ref":"root",children:t})}function Ye({tags:t,children:e,...i}){return t!=null?m("rui-tag-group",{...i,children:m(De,{children:m(Ce,{children:t.map(a=>m(ke,{value:a.value,label:typeof a.label=="string"?a.label:void 0,disabled:a.disabled,children:a.label}))})})}):m("rui-tag-group",{...i,children:m(De,{children:e})})}export{ke as RuiTag,Ye as RuiTagGroup,Le as RuiTagGroupElement,Ce as RuiTagList,ze as RuiTagRemove};
1
+ import{RadiantElement as qt,customElement as re,event as zt,onEvent as P,onUpdated as ie,prop as C,state as ne}from"@ecopages/radiant";import{jsx as ut,jsxs as Kt}from"@ecopages/jsx/jsx-runtime";function R(...e){return e.filter(Boolean).join(" ")}var lt="http://www.w3.org/2000/svg";function N({class:e,size:t="sm",...r}){return Kt("svg",{...r,class:R("rui-icon",t==="md"&&"rui-icon--md",e),viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",children:[ut("path",{d:"m18 6-12 12"}),ut("path",{d:"m6 6 12 12"})]})}function ct(){let e=document.createElementNS(lt,"svg");e.setAttribute("class","rui-icon"),e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("fill","none"),e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","2"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.setAttribute("aria-hidden","true");for(let t of["m18 6-12 12","m6 6 12 12"]){let r=document.createElementNS(lt,"path");r.setAttribute("d",t),e.append(r)}return e}function Nt(e,t){e.forEach((r,i)=>{let s=i===t?0:-1;r.tabIndex!==s&&(r.tabIndex=s)})}function Pt(e,t){if(!e.length)return null;let r=Math.max(0,Math.min(e.length-1,t));return Nt(e,r),e[r]?.focus(),e[r]??null}function Zt(e,t){return e==="Home"?"first":e==="End"?"last":t==="horizontal"?e==="ArrowRight"?"next":e==="ArrowLeft"?"prev":null:e==="ArrowDown"?"next":e==="ArrowUp"?"prev":null}function dt(e){let{items:t,current:r,key:i,orientation:s="horizontal",wrap:p=!0}=e;if(!t.length||!r)return{handled:!1};let l=t.indexOf(r);if(l<0)return{handled:!1};let n=Zt(i,s);if(!n)return{handled:!1};let b=l;n==="first"?b=0:n==="last"?b=t.length-1:n==="next"?b=p?(l+1)%t.length:Math.min(t.length-1,l+1):b=p?(l-1+t.length)%t.length:Math.max(0,l-1);let S=Pt(t,b);return S?{handled:!0,index:b,item:S}:{handled:!1}}var Jt=/^[A-Za-z][A-Za-z0-9_-]*$/;function ft(e){return Jt.test(e)}function Qt(e){let t=e.trim();if(ft(t))return t;let r=`rui-${t}`;return t&&ft(r)?r:"rui"}function mt(e){let t=typeof crypto.randomUUID=="function"?crypto.randomUUID().replace(/-/g,""):Array.from(crypto.getRandomValues(new Uint8Array(16)),r=>r.toString(16).padStart(2,"0")).join("");return`${Qt(e)}-${t}`}function gt(e){return e?pt(e.split(",")):[]}function Wt(e){return e.join(",")}var Yt={fromAttribute:e=>gt(e),toAttribute:e=>e.length>0?Wt(e):null,fromProperty:e=>Array.isArray(e)?pt(e.map(String)):typeof e=="string"?gt(e):[]},ht={type:Array,reflect:!0,transform:Yt};function pt(e){return[...new Set(e.map(t=>t.trim()).filter(Boolean))]}var bt,vt,yt,xt,_t,Tt,At,wt,St,It,Rt,Et,Vt,jt,Ct,Mt,kt,Lt;function Ft(e,t,r,i,s,p){var l,n,b,S,M,B,E,J=Symbol.metadata||Symbol.for("Symbol.metadata"),Q=Object.defineProperty,U=Object.create,W=[U(null),U(null)],Y=t.length;function k(a,v,m){return function(o,u){v&&(u=o,o=e);for(var y=0;y<a.length;y++)u=a[y].apply(o,m?[u]:[]);return m?u:o}}function T(a,v,m,o){if(typeof a!="function"&&(o||a!==void 0))throw new TypeError(v+" must "+(m||"be")+" a function"+(o?"":" or undefined"));return a}function F(a,v,m,o,u,y,w,g,x,_,tt){function $(d){if(!tt(d))throw new TypeError("Attempted to access private element on non-instance")}var G=[].concat(v[0]),et=v[3],O=!w,V=u===1,rt=u===3,it=u===4,L=u===2;function D(d,I,ot){return function(z,st){return I&&(st=z,z=a),ot&&ot(z),c[d].call(z,st)}}if(!O){var c={},X=[],A=rt?"get":it||V?"set":"value";if(x?(_||V?c={get:Dt(function(){return et(this)},o,"get"),set:function(d){v[4](this,d)}}:c[A]=et,_||Dt(c[A],o,L?"":A)):_||(c=Object.getOwnPropertyDescriptor(a,o)),!_&&!x){if((n=W[+g][o])&&(n^u)!==7)throw Error("Decorating two elements with the same name ("+c[A].name+") is not supported yet");W[+g][o]=u<3?1:u}}for(var f=a,q=G.length-1;q>=0;q-=m?2:1){var nt=T(G[q],"A decorator","be",!0),at=m?G[q-1]:void 0,K={},j={kind:["field","accessor","method","getter","setter","class"][u],name:o,metadata:l,addInitializer:function(d,I){if(d.v)throw new TypeError("attempted to call addInitializer after decoration was finished");T(I,"An initializer","be",!0),y.push(I)}.bind(null,K)};if(O)n=nt.call(at,f,j),K.v=1,T(n,"class decorators","return")&&(f=n);else if(j.static=g,j.private=x,n=j.access={has:x?tt.bind():function(d){return o in d}},it||(n.get=x?L?function(d){return $(d),c.value}:D("get",0,$):function(d){return d[o]}),L||rt||(n.set=x?D("set",0,$):function(d,I){d[o]=I}),f=nt.call(at,V?{get:c.get,set:c.set}:c[A],j),K.v=1,V){if(typeof f=="object"&&f)(n=T(f.get,"accessor.get"))&&(c.get=n),(n=T(f.set,"accessor.set"))&&(c.set=n),(n=T(f.init,"accessor.init"))&&X.unshift(n);else if(f!==void 0)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else T(f,(_?"field":"method")+" decorators","return")&&(_?X.unshift(f):c[A]=f)}return u<2&&w.push(k(X,g,1),k(y,g,0)),_||O||(x?V?w.splice(-1,0,D("get",g),D("set",g)):w.push(L?c[A]:T.call.bind(c[A])):Q(a,o,c)),f}function H(a){return Q(a,J,{configurable:!0,enumerable:!0,value:l})}return p!==void 0&&(l=p[J]),l=U(l??null),M=[],B=function(a){a&&M.push(k(a))},E=function(a,v){for(var m=0;m<r.length;m++){var o=r[m],u=o[1],y=7&u;if((8&u)==a&&!y==v){var w=o[2],g=!!o[3],x=16&u;F(a?e:e.prototype,o,x,g?"#"+w:Ht(w),y,y<2?[]:a?S=S||[]:b=b||[],M,!!a,g,v,a&&g?function(_){return ee(_)===e}:s)}}},E(8,0),E(0,0),E(8,1),E(0,1),B(b),B(S),n=M,Y||H(e),{e:n,get c(){var a=[];return Y&&[H(e=F(e,[t],i,e.name,5,a)),k(a,1)]}}}function Ht(e){var t=te(e,"string");return typeof t=="symbol"?t:t+""}function te(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,t||"default");if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Dt(e,t,r){typeof t=="symbol"&&(t=(t=t.description)?"["+t+"]":"");try{Object.defineProperty(e,"name",{configurable:!0,value:r?r+" "+t:t})}catch{}return e}function ee(e){if(Object(e)!==e)throw TypeError("right-hand side of 'in' should be an object, got "+(e!==null?typeof e:"null"));return e}var Ut,Bt=class extends qt{static{({e:[yt,xt,_t,Tt,At,wt,St,It,Rt,Et,Vt,jt,Ct,Mt,kt,Lt,bt],c:[Ut,vt]}=Ft(this,[re("rui-tag-group")],[[C({...ht,defaultValue:[]}),0,"value"],[C({type:String,defaultValue:""}),0,"label"],[C({type:Boolean,reflect:!0,defaultValue:!1}),0,"disabled"],[C({type:String,attribute:"selection-mode",defaultValue:"multiple"}),0,"selectionMode"],[C({type:Boolean,reflect:!0,defaultValue:!1}),0,"embedded"],[zt({name:"rui-change",bubbles:!0,composed:!0}),0,"changeEvent"],[zt({name:"rui-remove",bubbles:!0,composed:!0}),0,"removeEvent"],[ne,0,"derivedItems"],[ie(["value","label","disabled","selectionMode","embedded","derivedItems"]),2,"onPropsUpdated"],[P({selector:"[data-tag]",type:"click"}),2,"onTagClick"],[P({selector:"[data-tag-remove]",type:"click"}),2,"onRemoveClick"],[P({selector:"[data-tag]",type:"keydown"}),2,"onTagKeydown"]],0,void 0,qt))}constructor(...t){super(...t),Lt(this)}value=(bt(this),yt(this));label=(xt(this),_t(this));disabled=(Tt(this),At(this));selectionMode=(wt(this),St(this));embedded=(It(this),Rt(this));changeEvent=(Et(this),Vt(this));removeEvent=(jt(this),Ct(this));uid=(Mt(this),mt("rui-tag-group"));derivedItems=kt(this,null);isMultiple(){return this.selectionMode==="multiple"}getSelectedValues(){return this.value}setSelectedValues(t){this.value=t}getList(){let t=this.querySelector("[data-rui-managed-list]");return t||(this.derivedItems!=null?null:this.querySelector("[data-tag-list]"))}getTags(){let t=this.getList();return t?Array.from(t.querySelectorAll("[data-tag]")):[]}getVisibleTags(){return this.getTags().filter(t=>!t.hidden&&t.getAttribute("aria-disabled")!=="true")}getTagValue(t){return t.getAttribute("data-value")||t.textContent?.trim()||""}getTagLabel(t){return t.getAttribute("data-label")||t.textContent?.trim()||""}ensureTagIds(){this.getTags().forEach((t,r)=>{t.id||(t.id=`${this.uid}-tag-${r}`)})}syncList(){let t=this.getList();t&&(t.id||(t.id=`${this.uid}-list`),t.setAttribute("role","list"),t.setAttribute("aria-label",this.label||"Tags"),this.disabled?t.setAttribute("aria-disabled","true"):t.removeAttribute("aria-disabled"))}syncTags(){let t=new Set(this.getSelectedValues());this.getTags().forEach((i,s)=>{i.setAttribute("role","listitem");let p=this.getTagValue(i),l=t.has(p);i.setAttribute("aria-selected",String(l)),i.tabIndex=s===0?0:-1;let n=i.querySelector("[data-tag-remove]");n&&(n.type="button",n.tabIndex=-1,n.setAttribute("aria-label",`Remove ${this.getTagLabel(i)}`))})}selectTag(t){if(this.disabled||this.embedded||t.getAttribute("aria-disabled")==="true")return;let r=this.getTagValue(t);if(this.isMultiple()){let i=new Set(this.getSelectedValues());i.has(r)?i.delete(r):i.add(r),this.setSelectedValues([...i])}else this.value=[r];this.syncTags(),this.changeEvent.emit({value:this.value})}removeTag(t){let r=this.getTagValue(t),i=new Set(this.getSelectedValues());i.delete(r),this.setSelectedValues([...i]),this.syncTags(),this.removeEvent.emit({value:r}),this.changeEvent.emit({value:this.value})}initialize(){this.syncManagedList(),this.ensureTagIds(),this.syncList(),this.syncTags()}onConnected(){this.initialize()}onPropsUpdated(){this.syncManagedList(),this.syncList(),this.syncTags()}resync(){this.ensureTagIds(),this.syncList(),this.syncTags()}setItems(t){this.derivedItems=t,this.value=t.map(r=>r.value)}createManagedTag(t){let r=document.createElement("span");r.setAttribute("data-tag",""),r.setAttribute("data-value",t.value),r.setAttribute("data-label",t.label),r.className="rui-tag",r.textContent=t.label,r.setAttribute("aria-label",t.label);let i=document.createElement("button");return i.type="button",i.setAttribute("data-tag-remove",""),i.className="rui-tag__remove",i.setAttribute("aria-label",`Remove ${t.label}`),i.append(ct()),r.append(i),r}syncManagedList(){let t=this.querySelector('[data-ref="root"]');if(!t||this.derivedItems==null)return;t.querySelector("[data-tag-list]:not([data-rui-managed-list])")?.toggleAttribute("hidden",!0);let i=t.querySelector("[data-rui-managed-list]");if(this.derivedItems.length===0){i?.remove();return}i||(i=document.createElement("div"),i.setAttribute("data-tag-list",""),i.setAttribute("data-rui-managed-list",""),i.className="rui-tag-group__list",t.appendChild(i)),i.replaceChildren(...this.derivedItems.map(s=>this.createManagedTag(s))),this.ensureTagIds(),this.syncList(),this.syncTags()}onTagClick(t){let r=t.target;if(r.closest("[data-tag-remove]"))return;let i=r.closest("[data-tag]");i&&this.contains(i)&&this.selectTag(i)}onRemoveClick(t){t.stopPropagation();let i=t.target.closest("[data-tag]");i&&this.contains(i)&&this.removeTag(i)}onTagKeydown(t){let r=this.getVisibleTags(),i=t.target.closest("[data-tag]");if(!i)return;if(t.key==="Enter"||t.key===" "){t.preventDefault(),this.embedded||this.selectTag(i);return}if(t.key==="Backspace"||t.key==="Delete"){i.querySelector("[data-tag-remove]")&&(t.preventDefault(),this.removeTag(i));return}dt({items:r,current:i,key:t.key,orientation:"horizontal"}).handled&&t.preventDefault()}static{vt()}};import{jsx as h,jsxs as ae}from"@ecopages/jsx/jsx-runtime";function Z(e,t){return t===void 0||e?.label!==void 0?e:{...e,label:t}}function Gt({children:e,class:t,...r}){return h("div",{...r,"data-tag-list":!0,class:R("rui-tag-group__list",t),children:e})}function Ot({value:e,label:t,children:r,class:i,disabled:s,aria:p,...l}){return ae("span",{...l,"data-tag":!0,"data-value":e,"data-label":t,class:R("rui-tag",i),aria:Z(p,t),"aria-disabled":s?"true":void 0,children:[r,h(Xt,{})]})}function Xt({children:e,class:t,aria:r,...i}){return h("button",{...i,aria:Z(r,"Remove"),type:"button","data-tag-remove":!0,class:R("rui-tag__remove",t),children:e??h(N,{})})}function $t({children:e}){return h("div",{class:"rui-tag-group","data-ref":"root",children:e})}function oe({tags:e,children:t,value:r,...i}){return e!=null?h("rui-tag-group",{...i,value:r,children:h($t,{children:h(Gt,{children:e.map(s=>h(Ot,{value:s.value,label:typeof s.label=="string"?s.label:void 0,disabled:s.disabled,children:s.label}))})})}):h("rui-tag-group",{...i,value:r,children:h($t,{children:t})})}export{Ot as RuiTag,oe as RuiTagGroup,Ut as RuiTagGroupElement,Gt as RuiTagList,Xt as RuiTagRemove};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../src/components/ui/tag-group/tag-group.script.tsx", "../../../../src/lib/roving-tabindex.ts", "../../../../src/components/ui/shared/multi-value.ts", "../../../../src/components/ui/tag-group/tag-group.tsx", "../../../../src/aria.ts", "../../../../src/lib/cx.ts"],
4
- "sourcesContent": ["let _initProto, _initClass, _init_value, _init_extra_value, _init_label, _init_extra_label, _init_disabled, _init_extra_disabled, _init_selectionMode, _init_extra_selectionMode, _init_embedded, _init_extra_embedded, _init_changeEvent, _init_extra_changeEvent, _init_removeEvent, _init_extra_removeEvent, _init_managedItems, _init_extra_managedItems;\nfunction _applyDecs(e, t, n, r, o, i) { var a, c, u, s, f, l, p, d = Symbol.metadata || Symbol.for(\"Symbol.metadata\"), m = Object.defineProperty, h = Object.create, y = [h(null), h(null)], v = t.length; function g(t, n, r) { return function (o, i) { n && (i = o, o = e); for (var a = 0; a < t.length; a++) i = t[a].apply(o, r ? [i] : []); return r ? i : o; }; } function b(e, t, n, r) { if (\"function\" != typeof e && (r || void 0 !== e)) throw new TypeError(t + \" must \" + (n || \"be\") + \" a function\" + (r ? \"\" : \" or undefined\")); return e; } function applyDec(e, t, n, r, o, i, u, s, f, l, p) { function d(e) { if (!p(e)) throw new TypeError(\"Attempted to access private element on non-instance\"); } var h = [].concat(t[0]), v = t[3], w = !u, D = 1 === o, S = 3 === o, j = 4 === o, E = 2 === o; function I(t, n, r) { return function (o, i) { return n && (i = o, o = e), r && r(o), P[t].call(o, i); }; } if (!w) { var P = {}, k = [], F = S ? \"get\" : j || D ? \"set\" : \"value\"; if (f ? (l || D ? P = { get: _setFunctionName(function () { return v(this); }, r, \"get\"), set: function (e) { t[4](this, e); } } : P[F] = v, l || _setFunctionName(P[F], r, E ? \"\" : F)) : l || (P = Object.getOwnPropertyDescriptor(e, r)), !l && !f) { if ((c = y[+s][r]) && 7 !== (c ^ o)) throw Error(\"Decorating two elements with the same name (\" + P[F].name + \") is not supported yet\"); y[+s][r] = o < 3 ? 1 : o; } } for (var N = e, O = h.length - 1; O >= 0; O -= n ? 2 : 1) { var T = b(h[O], \"A decorator\", \"be\", !0), z = n ? h[O - 1] : void 0, A = {}, H = { kind: [\"field\", \"accessor\", \"method\", \"getter\", \"setter\", \"class\"][o], name: r, metadata: a, addInitializer: function (e, t) { if (e.v) throw new TypeError(\"attempted to call addInitializer after decoration was finished\"); b(t, \"An initializer\", \"be\", !0), i.push(t); }.bind(null, A) }; if (w) c = T.call(z, N, H), A.v = 1, b(c, \"class decorators\", \"return\") && (N = c);else if (H.static = s, H.private = f, c = H.access = { has: f ? p.bind() : function (e) { return r in e; } }, j || (c.get = f ? E ? function (e) { return d(e), P.value; } : I(\"get\", 0, d) : function (e) { return e[r]; }), E || S || (c.set = f ? I(\"set\", 0, d) : function (e, t) { e[r] = t; }), N = T.call(z, D ? { get: P.get, set: P.set } : P[F], H), A.v = 1, D) { if (\"object\" == typeof N && N) (c = b(N.get, \"accessor.get\")) && (P.get = c), (c = b(N.set, \"accessor.set\")) && (P.set = c), (c = b(N.init, \"accessor.init\")) && k.unshift(c);else if (void 0 !== N) throw new TypeError(\"accessor decorators must return an object with get, set, or init properties or undefined\"); } else b(N, (l ? \"field\" : \"method\") + \" decorators\", \"return\") && (l ? k.unshift(N) : P[F] = N); } return o < 2 && u.push(g(k, s, 1), g(i, s, 0)), l || w || (f ? D ? u.splice(-1, 0, I(\"get\", s), I(\"set\", s)) : u.push(E ? P[F] : b.call.bind(P[F])) : m(e, r, P)), N; } function w(e) { return m(e, d, { configurable: !0, enumerable: !0, value: a }); } return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function (e) { e && f.push(g(e)); }, p = function (t, r) { for (var i = 0; i < n.length; i++) { var a = n[i], c = a[1], l = 7 & c; if ((8 & c) == t && !l == r) { var p = a[2], d = !!a[3], m = 16 & c; applyDec(t ? e : e.prototype, a, m, d ? \"#\" + p : _toPropertyKey(p), l, l < 2 ? [] : t ? s = s || [] : u = u || [], f, !!t, d, r, t && d ? function (t) { return _checkInRHS(t) === e; } : o); } } }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), { e: c, get c() { var n = []; return v && [w(e = applyDec(e, [t], r, e.name, 5, n)), g(n, 1)]; } }; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _setFunctionName(e, t, n) { \"symbol\" == typeof t && (t = (t = t.description) ? \"[\" + t + \"]\" : \"\"); try { Object.defineProperty(e, \"name\", { configurable: !0, value: n ? n + \" \" + t : t }); } catch (e) {} return e; }\nfunction _checkInRHS(e) { if (Object(e) !== e) throw TypeError(\"right-hand side of 'in' should be an object, got \" + (null !== e ? typeof e : \"null\")); return e; }\nimport { RadiantElement, customElement, event, onEvent, onUpdated, prop, state } from \"@ecopages/radiant\";\nimport { navigateRovingTabindex } from \"@/lib/roving-tabindex\";\nimport { parseMultiValue, serializeMultiValue } from \"../shared/multi-value\";\nlet _RuiTagGroup;\nclass RuiTagGroup extends RadiantElement {\n static {\n ({\n e: [_init_value, _init_extra_value, _init_label, _init_extra_label, _init_disabled, _init_extra_disabled, _init_selectionMode, _init_extra_selectionMode, _init_embedded, _init_extra_embedded, _init_changeEvent, _init_extra_changeEvent, _init_removeEvent, _init_extra_removeEvent, _init_managedItems, _init_extra_managedItems, _initProto],\n c: [_RuiTagGroup, _initClass]\n } = _applyDecs(this, [customElement(\"rui-tag-group\")], [[prop({\n type: String,\n reflect: true,\n defaultValue: \"\"\n }), 0, \"value\"], [prop({\n type: String,\n defaultValue: \"\"\n }), 0, \"label\"], [prop({\n type: Boolean,\n reflect: true,\n defaultValue: false\n }), 0, \"disabled\"], [prop({\n type: String,\n attribute: \"selection-mode\",\n defaultValue: \"multiple\"\n }), 0, \"selectionMode\"], [prop({\n type: Boolean,\n reflect: true,\n defaultValue: false\n }), 0, \"embedded\"], [event({\n name: \"rui-change\",\n bubbles: true,\n composed: true\n }), 0, \"changeEvent\"], [event({\n name: \"rui-remove\",\n bubbles: true,\n composed: true\n }), 0, \"removeEvent\"], [state, 0, \"managedItems\"], [onUpdated([\"value\", \"label\", \"disabled\", \"selectionMode\", \"embedded\", \"managedItems\"]), 2, \"onPropsUpdated\"], [onEvent({\n selector: \"[data-tag]\",\n type: \"click\"\n }), 2, \"onTagClick\"], [onEvent({\n selector: \"[data-tag-remove]\",\n type: \"click\"\n }), 2, \"onRemoveClick\"], [onEvent({\n selector: \"[data-tag]\",\n type: \"keydown\"\n }), 2, \"onTagKeydown\"]], 0, void 0, RadiantElement));\n }\n constructor(...args) {\n super(...args);\n _init_extra_managedItems(this);\n }\n value = (_initProto(this), _init_value(this));\n label = (_init_extra_value(this), _init_label(this));\n disabled = (_init_extra_label(this), _init_disabled(this));\n selectionMode = (_init_extra_disabled(this), _init_selectionMode(this));\n embedded = (_init_extra_selectionMode(this), _init_embedded(this));\n changeEvent = (_init_extra_embedded(this), _init_changeEvent(this));\n removeEvent = (_init_extra_changeEvent(this), _init_removeEvent(this));\n uid = (_init_extra_removeEvent(this), Math.random().toString(36).slice(2, 9));\n managedItems = _init_managedItems(this, []);\n isMultiple() {\n return this.selectionMode === \"multiple\";\n }\n getSelectedValues() {\n if (!this.value) {\n return [];\n }\n return parseMultiValue(this.value);\n }\n setSelectedValues(values) {\n this.value = serializeMultiValue(values);\n }\n getList() {\n const managed = this.querySelector(\"[data-rui-managed-list]\");\n if (managed) {\n return managed;\n }\n return this.querySelector(\"[data-tag-list]\");\n }\n getTags() {\n const list = this.getList();\n if (!list) {\n return [];\n }\n return Array.from(list.querySelectorAll(\"[data-tag]\"));\n }\n getVisibleTags() {\n return this.getTags().filter(tag => !tag.hidden && tag.getAttribute(\"aria-disabled\") !== \"true\");\n }\n getTagValue(tag) {\n return tag.getAttribute(\"data-value\") || tag.textContent?.trim() || \"\";\n }\n getTagLabel(tag) {\n return tag.getAttribute(\"data-label\") || tag.textContent?.trim() || \"\";\n }\n ensureTagIds() {\n this.getTags().forEach((tag, index) => {\n if (!tag.id) {\n tag.id = `rui-tag-${this.uid}-${index}`;\n }\n });\n }\n syncList() {\n const list = this.getList();\n if (!list) {\n return;\n }\n if (!list.id) {\n list.id = `rui-tag-list-${this.uid}`;\n }\n list.setAttribute(\"role\", \"list\");\n list.setAttribute(\"aria-label\", this.label || \"Tags\");\n if (this.disabled) {\n list.setAttribute(\"aria-disabled\", \"true\");\n } else {\n list.removeAttribute(\"aria-disabled\");\n }\n }\n syncTags() {\n const selected = new Set(this.getSelectedValues());\n const tags = this.getTags();\n tags.forEach((tag, index) => {\n tag.setAttribute(\"role\", \"listitem\");\n const value = this.getTagValue(tag);\n const isSelected = selected.has(value);\n tag.setAttribute(\"aria-selected\", String(isSelected));\n tag.tabIndex = index === 0 ? 0 : -1;\n const removeButton = tag.querySelector(\"[data-tag-remove]\");\n if (removeButton) {\n removeButton.type = \"button\";\n removeButton.tabIndex = -1;\n removeButton.setAttribute(\"aria-label\", `Remove ${this.getTagLabel(tag)}`);\n }\n });\n }\n selectTag(tag) {\n if (this.disabled || this.embedded || tag.getAttribute(\"aria-disabled\") === \"true\") {\n return;\n }\n const tagValue = this.getTagValue(tag);\n if (this.isMultiple()) {\n const selected = new Set(this.getSelectedValues());\n if (selected.has(tagValue)) {\n selected.delete(tagValue);\n } else {\n selected.add(tagValue);\n }\n this.setSelectedValues([...selected]);\n } else {\n this.value = tagValue;\n }\n this.syncTags();\n this.changeEvent.emit({\n value: this.value\n });\n }\n removeTag(tag) {\n const tagValue = this.getTagValue(tag);\n const selected = new Set(this.getSelectedValues());\n selected.delete(tagValue);\n this.setSelectedValues([...selected]);\n this.syncTags();\n this.removeEvent.emit({\n value: tagValue\n });\n this.changeEvent.emit({\n value: this.value\n });\n }\n initialize() {\n this.ensureTagIds();\n this.syncList();\n this.syncTags();\n }\n onConnected() {\n this.initialize();\n }\n onPropsUpdated() {\n this.syncManagedList();\n this.syncList();\n this.syncTags();\n }\n resync() {\n this.ensureTagIds();\n this.syncList();\n this.syncTags();\n }\n setItems(items) {\n this.managedItems = items;\n this.value = serializeMultiValue(items.map(item => item.value));\n }\n /**\n * Imperative twin of the view's `RuiTag` / `RuiTagRemove` markup for\n * CE-managed items (same `data-*` hooks, classes, and remove glyph).\n */\n createManagedTag(item) {\n const tag = document.createElement(\"span\");\n tag.setAttribute(\"data-tag\", \"\");\n tag.setAttribute(\"data-value\", item.value);\n tag.setAttribute(\"data-label\", item.label);\n tag.className = \"rui-tag\";\n tag.textContent = item.label;\n const remove = document.createElement(\"button\");\n remove.type = \"button\";\n remove.setAttribute(\"data-tag-remove\", \"\");\n remove.className = \"rui-tag__remove\";\n remove.setAttribute(\"aria-label\", `Remove ${item.label}`);\n const icon = document.createElement(\"span\");\n icon.setAttribute(\"aria-hidden\", \"true\");\n icon.textContent = \"\\xD7\";\n remove.append(icon);\n tag.append(remove);\n return tag;\n }\n syncManagedList() {\n const root = this.querySelector('[data-ref=\"root\"]');\n if (!root) {\n return;\n }\n let managed = root.querySelector(\"[data-rui-managed-list]\");\n if (this.managedItems.length === 0) {\n managed?.remove();\n return;\n }\n if (!managed) {\n managed = document.createElement(\"div\");\n managed.setAttribute(\"data-tag-list\", \"\");\n managed.setAttribute(\"data-rui-managed-list\", \"\");\n managed.className = \"rui-tag-group__list\";\n root.appendChild(managed);\n }\n managed.replaceChildren(...this.managedItems.map(item => this.createManagedTag(item)));\n this.ensureTagIds();\n this.syncList();\n this.syncTags();\n }\n onTagClick(event2) {\n const target = event2.target;\n if (target.closest(\"[data-tag-remove]\")) {\n return;\n }\n const tag = target.closest(\"[data-tag]\");\n if (tag && this.contains(tag)) {\n this.selectTag(tag);\n }\n }\n onRemoveClick(event2) {\n event2.stopPropagation();\n const button = event2.target;\n const tag = button.closest(\"[data-tag]\");\n if (tag && this.contains(tag)) {\n this.removeTag(tag);\n }\n }\n onTagKeydown(event2) {\n const tags = this.getVisibleTags();\n const current = event2.target.closest(\"[data-tag]\");\n if (!current) {\n return;\n }\n if (event2.key === \"Enter\" || event2.key === \" \") {\n event2.preventDefault();\n if (!this.embedded) {\n this.selectTag(current);\n }\n return;\n }\n if (event2.key === \"Backspace\" || event2.key === \"Delete\") {\n const removeButton = current.querySelector(\"[data-tag-remove]\");\n if (removeButton) {\n event2.preventDefault();\n this.removeTag(current);\n }\n return;\n }\n const result = navigateRovingTabindex({\n items: tags,\n current,\n key: event2.key,\n orientation: \"horizontal\"\n });\n if (result.handled) {\n event2.preventDefault();\n }\n }\n static {\n _initClass();\n }\n}\nexport { _RuiTagGroup as RuiTagGroup };", "export function applyRovingTabindex(items, activeIndex) {\n items.forEach((item, index) => {\n const next = index === activeIndex ? 0 : -1;\n if (item.tabIndex !== next) {\n item.tabIndex = next;\n }\n });\n}\nexport function focusRovingItem(items, index) {\n if (!items.length) return null;\n const next = Math.max(0, Math.min(items.length - 1, index));\n applyRovingTabindex(items, next);\n items[next]?.focus();\n return items[next] ?? null;\n}\nfunction deltaForKey(key, orientation) {\n if (key === \"Home\") return \"first\";\n if (key === \"End\") return \"last\";\n if (orientation === \"horizontal\") {\n if (key === \"ArrowRight\") return \"next\";\n if (key === \"ArrowLeft\") return \"prev\";\n return null;\n }\n if (key === \"ArrowDown\") return \"next\";\n if (key === \"ArrowUp\") return \"prev\";\n return null;\n}\nexport function navigateRovingTabindex(options) {\n const {\n items,\n current,\n key,\n orientation = \"horizontal\",\n wrap = true\n } = options;\n if (!items.length || !current) return {\n handled: false\n };\n const index = items.indexOf(current);\n if (index < 0) return {\n handled: false\n };\n const delta = deltaForKey(key, orientation);\n if (!delta) return {\n handled: false\n };\n let next = index;\n if (delta === \"first\") next = 0;else if (delta === \"last\") next = items.length - 1;else if (delta === \"next\") next = wrap ? (index + 1) % items.length : Math.min(items.length - 1, index + 1);else next = wrap ? (index - 1 + items.length) % items.length : Math.max(0, index - 1);\n const item = focusRovingItem(items, next);\n if (!item) return {\n handled: false\n };\n return {\n handled: true,\n index: next,\n item\n };\n}", "export function parseMultiValue(value) {\n if (!value) {\n return [];\n }\n return value.split(\",\").map(item => item.trim()).filter(Boolean);\n}\nexport function serializeMultiValue(values) {\n return values.join(\",\");\n}", "import { jsx, jsxs } from \"@ecopages/jsx/jsx-runtime\";\nimport { withDefaultAriaLabel } from \"@/aria\";\nimport { cx } from \"@/lib/cx\";\nimport \"./tag-group.script\";\nexport function RuiTagList({\n children,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"div\", {\n ...props,\n \"data-tag-list\": true,\n class: cx(\"rui-tag-group__list\", className),\n children\n });\n}\nexport function RuiTag({\n value,\n label,\n children,\n class: className,\n disabled,\n ...props\n}) {\n return /* @__PURE__ */jsxs(\"span\", {\n ...props,\n \"data-tag\": true,\n \"data-value\": value,\n \"data-label\": label,\n class: cx(\"rui-tag\", className),\n \"aria-disabled\": disabled ? \"true\" : void 0,\n children: [children, /* @__PURE__ */jsx(RuiTagRemove, {})]\n });\n}\nexport function RuiTagRemove({\n children,\n class: className,\n aria,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"button\", {\n ...props,\n aria: withDefaultAriaLabel(aria, \"Remove\"),\n type: \"button\",\n \"data-tag-remove\": true,\n class: cx(\"rui-tag__remove\", className),\n children: children ?? /* @__PURE__ */jsx(\"span\", {\n \"aria-hidden\": \"true\",\n children: \"\\xD7\"\n })\n });\n}\nfunction TagGroupShell({\n children\n}) {\n return /* @__PURE__ */jsx(\"div\", {\n class: \"rui-tag-group\",\n \"data-ref\": \"root\",\n children\n });\n}\nexport function RuiTagGroup({\n tags,\n children,\n ...props\n}) {\n if (tags != null) {\n return /* @__PURE__ */jsx(\"rui-tag-group\", {\n ...props,\n children: /* @__PURE__ */jsx(TagGroupShell, {\n children: /* @__PURE__ */jsx(RuiTagList, {\n children: tags.map(tag => /* @__PURE__ */jsx(RuiTag, {\n value: tag.value,\n label: typeof tag.label === \"string\" ? tag.label : void 0,\n disabled: tag.disabled,\n children: tag.label\n }))\n })\n })\n });\n }\n return /* @__PURE__ */jsx(\"rui-tag-group\", {\n ...props,\n children: /* @__PURE__ */jsx(TagGroupShell, {\n children\n })\n });\n}", "export function withDefaultAriaLabel(aria, fallback) {\n if (fallback === void 0 || aria?.label !== void 0) {\n return aria;\n }\n return {\n ...aria,\n label: fallback\n };\n}", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}"],
5
- "mappings": "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",
6
- "names": ["RadiantElement", "customElement", "event", "onEvent", "onUpdated", "prop", "state", "applyRovingTabindex", "items", "activeIndex", "item", "index", "next", "focusRovingItem", "deltaForKey", "key", "orientation", "navigateRovingTabindex", "options", "current", "wrap", "delta", "parseMultiValue", "value", "item", "serializeMultiValue", "values", "_initProto", "_initClass", "_init_value", "_init_extra_value", "_init_label", "_init_extra_label", "_init_disabled", "_init_extra_disabled", "_init_selectionMode", "_init_extra_selectionMode", "_init_embedded", "_init_extra_embedded", "_init_changeEvent", "_init_extra_changeEvent", "_init_removeEvent", "_init_extra_removeEvent", "_init_managedItems", "_init_extra_managedItems", "_applyDecs", "e", "t", "n", "r", "o", "i", "a", "c", "u", "s", "f", "l", "p", "d", "m", "h", "y", "v", "g", "b", "applyDec", "w", "D", "S", "j", "E", "I", "P", "k", "F", "_setFunctionName", "N", "O", "T", "z", "A", "H", "_toPropertyKey", "_checkInRHS", "_toPrimitive", "_RuiTagGroup", "RuiTagGroup", "RadiantElement", "customElement", "prop", "event", "state", "onUpdated", "onEvent", "args", "parseMultiValue", "values", "serializeMultiValue", "managed", "list", "tag", "index", "selected", "value", "isSelected", "removeButton", "tagValue", "items", "item", "remove", "icon", "root", "event2", "target", "tags", "current", "navigateRovingTabindex", "jsx", "jsxs", "withDefaultAriaLabel", "aria", "fallback", "cx", "parts", "RuiTagList", "children", "className", "props", "jsx", "cx", "RuiTag", "value", "label", "disabled", "jsxs", "RuiTagRemove", "aria", "withDefaultAriaLabel", "TagGroupShell", "RuiTagGroup", "tags", "tag"]
3
+ "sources": ["../../../../src/components/ui/tag-group/tag-group.script.tsx", "../../../../src/lib/icons/x.tsx", "../../../../src/lib/cx.ts", "../../../../src/lib/roving-tabindex.ts", "../../../../src/lib/unique-id.ts", "../../../../src/components/ui/shared/multi-value.ts", "../../../../src/components/ui/tag-group/tag-group.tsx", "../../../../src/aria.ts"],
4
+ "sourcesContent": ["let _initProto, _initClass, _init_value, _init_extra_value, _init_label, _init_extra_label, _init_disabled, _init_extra_disabled, _init_selectionMode, _init_extra_selectionMode, _init_embedded, _init_extra_embedded, _init_changeEvent, _init_extra_changeEvent, _init_removeEvent, _init_extra_removeEvent, _init_derivedItems, _init_extra_derivedItems;\nfunction _applyDecs(e, t, n, r, o, i) { var a, c, u, s, f, l, p, d = Symbol.metadata || Symbol.for(\"Symbol.metadata\"), m = Object.defineProperty, h = Object.create, y = [h(null), h(null)], v = t.length; function g(t, n, r) { return function (o, i) { n && (i = o, o = e); for (var a = 0; a < t.length; a++) i = t[a].apply(o, r ? [i] : []); return r ? i : o; }; } function b(e, t, n, r) { if (\"function\" != typeof e && (r || void 0 !== e)) throw new TypeError(t + \" must \" + (n || \"be\") + \" a function\" + (r ? \"\" : \" or undefined\")); return e; } function applyDec(e, t, n, r, o, i, u, s, f, l, p) { function d(e) { if (!p(e)) throw new TypeError(\"Attempted to access private element on non-instance\"); } var h = [].concat(t[0]), v = t[3], w = !u, D = 1 === o, S = 3 === o, j = 4 === o, E = 2 === o; function I(t, n, r) { return function (o, i) { return n && (i = o, o = e), r && r(o), P[t].call(o, i); }; } if (!w) { var P = {}, k = [], F = S ? \"get\" : j || D ? \"set\" : \"value\"; if (f ? (l || D ? P = { get: _setFunctionName(function () { return v(this); }, r, \"get\"), set: function (e) { t[4](this, e); } } : P[F] = v, l || _setFunctionName(P[F], r, E ? \"\" : F)) : l || (P = Object.getOwnPropertyDescriptor(e, r)), !l && !f) { if ((c = y[+s][r]) && 7 !== (c ^ o)) throw Error(\"Decorating two elements with the same name (\" + P[F].name + \") is not supported yet\"); y[+s][r] = o < 3 ? 1 : o; } } for (var N = e, O = h.length - 1; O >= 0; O -= n ? 2 : 1) { var T = b(h[O], \"A decorator\", \"be\", !0), z = n ? h[O - 1] : void 0, A = {}, H = { kind: [\"field\", \"accessor\", \"method\", \"getter\", \"setter\", \"class\"][o], name: r, metadata: a, addInitializer: function (e, t) { if (e.v) throw new TypeError(\"attempted to call addInitializer after decoration was finished\"); b(t, \"An initializer\", \"be\", !0), i.push(t); }.bind(null, A) }; if (w) c = T.call(z, N, H), A.v = 1, b(c, \"class decorators\", \"return\") && (N = c);else if (H.static = s, H.private = f, c = H.access = { has: f ? p.bind() : function (e) { return r in e; } }, j || (c.get = f ? E ? function (e) { return d(e), P.value; } : I(\"get\", 0, d) : function (e) { return e[r]; }), E || S || (c.set = f ? I(\"set\", 0, d) : function (e, t) { e[r] = t; }), N = T.call(z, D ? { get: P.get, set: P.set } : P[F], H), A.v = 1, D) { if (\"object\" == typeof N && N) (c = b(N.get, \"accessor.get\")) && (P.get = c), (c = b(N.set, \"accessor.set\")) && (P.set = c), (c = b(N.init, \"accessor.init\")) && k.unshift(c);else if (void 0 !== N) throw new TypeError(\"accessor decorators must return an object with get, set, or init properties or undefined\"); } else b(N, (l ? \"field\" : \"method\") + \" decorators\", \"return\") && (l ? k.unshift(N) : P[F] = N); } return o < 2 && u.push(g(k, s, 1), g(i, s, 0)), l || w || (f ? D ? u.splice(-1, 0, I(\"get\", s), I(\"set\", s)) : u.push(E ? P[F] : b.call.bind(P[F])) : m(e, r, P)), N; } function w(e) { return m(e, d, { configurable: !0, enumerable: !0, value: a }); } return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function (e) { e && f.push(g(e)); }, p = function (t, r) { for (var i = 0; i < n.length; i++) { var a = n[i], c = a[1], l = 7 & c; if ((8 & c) == t && !l == r) { var p = a[2], d = !!a[3], m = 16 & c; applyDec(t ? e : e.prototype, a, m, d ? \"#\" + p : _toPropertyKey(p), l, l < 2 ? [] : t ? s = s || [] : u = u || [], f, !!t, d, r, t && d ? function (t) { return _checkInRHS(t) === e; } : o); } } }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), { e: c, get c() { var n = []; return v && [w(e = applyDec(e, [t], r, e.name, 5, n)), g(n, 1)]; } }; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _setFunctionName(e, t, n) { \"symbol\" == typeof t && (t = (t = t.description) ? \"[\" + t + \"]\" : \"\"); try { Object.defineProperty(e, \"name\", { configurable: !0, value: n ? n + \" \" + t : t }); } catch (e) {} return e; }\nfunction _checkInRHS(e) { if (Object(e) !== e) throw TypeError(\"right-hand side of 'in' should be an object, got \" + (null !== e ? typeof e : \"null\")); return e; }\nimport { RadiantElement, customElement, event, onEvent, onUpdated, prop, state } from \"@ecopages/radiant\";\nimport { createRuiIconX } from \"@/lib/icons/x\";\nimport { navigateRovingTabindex } from \"@/lib/roving-tabindex\";\nimport { uniqueId } from \"@/lib/unique-id\";\nimport { multiValuePropOptions } from \"../shared/multi-value\";\nlet _RuiTagGroup;\nclass RuiTagGroup extends RadiantElement {\n static {\n ({\n e: [_init_value, _init_extra_value, _init_label, _init_extra_label, _init_disabled, _init_extra_disabled, _init_selectionMode, _init_extra_selectionMode, _init_embedded, _init_extra_embedded, _init_changeEvent, _init_extra_changeEvent, _init_removeEvent, _init_extra_removeEvent, _init_derivedItems, _init_extra_derivedItems, _initProto],\n c: [_RuiTagGroup, _initClass]\n } = _applyDecs(this, [customElement(\"rui-tag-group\")], [[prop({\n ...multiValuePropOptions,\n defaultValue: []\n }), 0, \"value\"], [prop({\n type: String,\n defaultValue: \"\"\n }), 0, \"label\"], [prop({\n type: Boolean,\n reflect: true,\n defaultValue: false\n }), 0, \"disabled\"], [prop({\n type: String,\n attribute: \"selection-mode\",\n defaultValue: \"multiple\"\n }), 0, \"selectionMode\"], [prop({\n type: Boolean,\n reflect: true,\n defaultValue: false\n }), 0, \"embedded\"], [event({\n name: \"rui-change\",\n bubbles: true,\n composed: true\n }), 0, \"changeEvent\"], [event({\n name: \"rui-remove\",\n bubbles: true,\n composed: true\n }), 0, \"removeEvent\"], [state, 0, \"derivedItems\"], [onUpdated([\"value\", \"label\", \"disabled\", \"selectionMode\", \"embedded\", \"derivedItems\"]), 2, \"onPropsUpdated\"], [onEvent({\n selector: \"[data-tag]\",\n type: \"click\"\n }), 2, \"onTagClick\"], [onEvent({\n selector: \"[data-tag-remove]\",\n type: \"click\"\n }), 2, \"onRemoveClick\"], [onEvent({\n selector: \"[data-tag]\",\n type: \"keydown\"\n }), 2, \"onTagKeydown\"]], 0, void 0, RadiantElement));\n }\n constructor(...args) {\n super(...args);\n _init_extra_derivedItems(this);\n }\n value = (_initProto(this), _init_value(this));\n label = (_init_extra_value(this), _init_label(this));\n disabled = (_init_extra_label(this), _init_disabled(this));\n selectionMode = (_init_extra_disabled(this), _init_selectionMode(this));\n embedded = (_init_extra_selectionMode(this), _init_embedded(this));\n changeEvent = (_init_extra_embedded(this), _init_changeEvent(this));\n removeEvent = (_init_extra_changeEvent(this), _init_removeEvent(this));\n uid = (_init_extra_removeEvent(this), uniqueId(\"rui-tag-group\"));\n derivedItems = _init_derivedItems(this, null);\n isMultiple() {\n return this.selectionMode === \"multiple\";\n }\n getSelectedValues() {\n return this.value;\n }\n setSelectedValues(values) {\n this.value = values;\n }\n getList() {\n const managed = this.querySelector(\"[data-rui-managed-list]\");\n if (managed) {\n return managed;\n }\n if (this.derivedItems != null) {\n return null;\n }\n return this.querySelector(\"[data-tag-list]\");\n }\n getTags() {\n const list = this.getList();\n if (!list) {\n return [];\n }\n return Array.from(list.querySelectorAll(\"[data-tag]\"));\n }\n getVisibleTags() {\n return this.getTags().filter(tag => !tag.hidden && tag.getAttribute(\"aria-disabled\") !== \"true\");\n }\n getTagValue(tag) {\n return tag.getAttribute(\"data-value\") || tag.textContent?.trim() || \"\";\n }\n getTagLabel(tag) {\n return tag.getAttribute(\"data-label\") || tag.textContent?.trim() || \"\";\n }\n ensureTagIds() {\n this.getTags().forEach((tag, index) => {\n if (!tag.id) {\n tag.id = `${this.uid}-tag-${index}`;\n }\n });\n }\n syncList() {\n const list = this.getList();\n if (!list) {\n return;\n }\n if (!list.id) {\n list.id = `${this.uid}-list`;\n }\n list.setAttribute(\"role\", \"list\");\n list.setAttribute(\"aria-label\", this.label || \"Tags\");\n if (this.disabled) {\n list.setAttribute(\"aria-disabled\", \"true\");\n } else {\n list.removeAttribute(\"aria-disabled\");\n }\n }\n syncTags() {\n const selected = new Set(this.getSelectedValues());\n const tags = this.getTags();\n tags.forEach((tag, index) => {\n tag.setAttribute(\"role\", \"listitem\");\n const value = this.getTagValue(tag);\n const isSelected = selected.has(value);\n tag.setAttribute(\"aria-selected\", String(isSelected));\n tag.tabIndex = index === 0 ? 0 : -1;\n const removeButton = tag.querySelector(\"[data-tag-remove]\");\n if (removeButton) {\n removeButton.type = \"button\";\n removeButton.tabIndex = -1;\n removeButton.setAttribute(\"aria-label\", `Remove ${this.getTagLabel(tag)}`);\n }\n });\n }\n selectTag(tag) {\n if (this.disabled || this.embedded || tag.getAttribute(\"aria-disabled\") === \"true\") {\n return;\n }\n const tagValue = this.getTagValue(tag);\n if (this.isMultiple()) {\n const selected = new Set(this.getSelectedValues());\n if (selected.has(tagValue)) {\n selected.delete(tagValue);\n } else {\n selected.add(tagValue);\n }\n this.setSelectedValues([...selected]);\n } else {\n this.value = [tagValue];\n }\n this.syncTags();\n this.changeEvent.emit({\n value: this.value\n });\n }\n removeTag(tag) {\n const tagValue = this.getTagValue(tag);\n const selected = new Set(this.getSelectedValues());\n selected.delete(tagValue);\n this.setSelectedValues([...selected]);\n this.syncTags();\n this.removeEvent.emit({\n value: tagValue\n });\n this.changeEvent.emit({\n value: this.value\n });\n }\n initialize() {\n this.syncManagedList();\n this.ensureTagIds();\n this.syncList();\n this.syncTags();\n }\n onConnected() {\n this.initialize();\n }\n onPropsUpdated() {\n this.syncManagedList();\n this.syncList();\n this.syncTags();\n }\n /**\n * Re-read authored `[data-tag]` children after the parent mutates them in place.\n */\n resync() {\n this.ensureTagIds();\n this.syncList();\n this.syncTags();\n }\n /**\n * Replace authored tags with a CE-owned list. Requires `[data-ref=\"root\"]`.\n *\n * @remarks Hides the authored `[data-tag-list]` and sets `value` to every\n * item. Pass `[]` to clear the managed list.\n */\n setItems(items) {\n this.derivedItems = items;\n this.value = items.map(item => item.value);\n }\n /**\n * Imperative twin of the view's `RuiTag` / `RuiTagRemove` markup for\n * CE-managed items (same `data-*` hooks, classes, and remove icon).\n */\n createManagedTag(item) {\n const tag = document.createElement(\"span\");\n tag.setAttribute(\"data-tag\", \"\");\n tag.setAttribute(\"data-value\", item.value);\n tag.setAttribute(\"data-label\", item.label);\n tag.className = \"rui-tag\";\n tag.textContent = item.label;\n tag.setAttribute(\"aria-label\", item.label);\n const remove = document.createElement(\"button\");\n remove.type = \"button\";\n remove.setAttribute(\"data-tag-remove\", \"\");\n remove.className = \"rui-tag__remove\";\n remove.setAttribute(\"aria-label\", `Remove ${item.label}`);\n remove.append(createRuiIconX());\n tag.append(remove);\n return tag;\n }\n syncManagedList() {\n const root = this.querySelector('[data-ref=\"root\"]');\n if (!root || this.derivedItems == null) {\n return;\n }\n const authored = root.querySelector(\"[data-tag-list]:not([data-rui-managed-list])\");\n authored?.toggleAttribute(\"hidden\", true);\n let managed = root.querySelector(\"[data-rui-managed-list]\");\n if (this.derivedItems.length === 0) {\n managed?.remove();\n return;\n }\n if (!managed) {\n managed = document.createElement(\"div\");\n managed.setAttribute(\"data-tag-list\", \"\");\n managed.setAttribute(\"data-rui-managed-list\", \"\");\n managed.className = \"rui-tag-group__list\";\n root.appendChild(managed);\n }\n managed.replaceChildren(...this.derivedItems.map(item => this.createManagedTag(item)));\n this.ensureTagIds();\n this.syncList();\n this.syncTags();\n }\n onTagClick(event2) {\n const target = event2.target;\n if (target.closest(\"[data-tag-remove]\")) {\n return;\n }\n const tag = target.closest(\"[data-tag]\");\n if (tag && this.contains(tag)) {\n this.selectTag(tag);\n }\n }\n onRemoveClick(event2) {\n event2.stopPropagation();\n const button = event2.target;\n const tag = button.closest(\"[data-tag]\");\n if (tag && this.contains(tag)) {\n this.removeTag(tag);\n }\n }\n onTagKeydown(event2) {\n const tags = this.getVisibleTags();\n const current = event2.target.closest(\"[data-tag]\");\n if (!current) {\n return;\n }\n if (event2.key === \"Enter\" || event2.key === \" \") {\n event2.preventDefault();\n if (!this.embedded) {\n this.selectTag(current);\n }\n return;\n }\n if (event2.key === \"Backspace\" || event2.key === \"Delete\") {\n const removeButton = current.querySelector(\"[data-tag-remove]\");\n if (removeButton) {\n event2.preventDefault();\n this.removeTag(current);\n }\n return;\n }\n const result = navigateRovingTabindex({\n items: tags,\n current,\n key: event2.key,\n orientation: \"horizontal\"\n });\n if (result.handled) {\n event2.preventDefault();\n }\n }\n static {\n _initClass();\n }\n}\nexport { _RuiTagGroup as RuiTagGroup };", "import { jsx, jsxs } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nexport function RuiIconX({\n class: className,\n size = \"sm\",\n ...props\n}) {\n return /* @__PURE__ */jsxs(\"svg\", {\n ...props,\n class: cx(\"rui-icon\", size === \"md\" && \"rui-icon--md\", className),\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n \"aria-hidden\": \"true\",\n children: [/* @__PURE__ */jsx(\"path\", {\n d: \"m18 6-12 12\"\n }), /* @__PURE__ */jsx(\"path\", {\n d: \"m6 6 12 12\"\n })]\n });\n}\nexport function createRuiIconX() {\n const icon = document.createElementNS(SVG_NAMESPACE, \"svg\");\n icon.setAttribute(\"class\", \"rui-icon\");\n icon.setAttribute(\"viewBox\", \"0 0 24 24\");\n icon.setAttribute(\"fill\", \"none\");\n icon.setAttribute(\"stroke\", \"currentColor\");\n icon.setAttribute(\"stroke-width\", \"2\");\n icon.setAttribute(\"stroke-linecap\", \"round\");\n icon.setAttribute(\"stroke-linejoin\", \"round\");\n icon.setAttribute(\"aria-hidden\", \"true\");\n for (const d of [\"m18 6-12 12\", \"m6 6 12 12\"]) {\n const path = document.createElementNS(SVG_NAMESPACE, \"path\");\n path.setAttribute(\"d\", d);\n icon.append(path);\n }\n return icon;\n}", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "export function applyRovingTabindex(items, activeIndex) {\n items.forEach((item, index) => {\n const next = index === activeIndex ? 0 : -1;\n if (item.tabIndex !== next) {\n item.tabIndex = next;\n }\n });\n}\nexport function focusRovingItem(items, index) {\n if (!items.length) return null;\n const next = Math.max(0, Math.min(items.length - 1, index));\n applyRovingTabindex(items, next);\n items[next]?.focus();\n return items[next] ?? null;\n}\nfunction deltaForKey(key, orientation) {\n if (key === \"Home\") return \"first\";\n if (key === \"End\") return \"last\";\n if (orientation === \"horizontal\") {\n if (key === \"ArrowRight\") return \"next\";\n if (key === \"ArrowLeft\") return \"prev\";\n return null;\n }\n if (key === \"ArrowDown\") return \"next\";\n if (key === \"ArrowUp\") return \"prev\";\n return null;\n}\nexport function navigateRovingTabindex(options) {\n const {\n items,\n current,\n key,\n orientation = \"horizontal\",\n wrap = true\n } = options;\n if (!items.length || !current) return {\n handled: false\n };\n const index = items.indexOf(current);\n if (index < 0) return {\n handled: false\n };\n const delta = deltaForKey(key, orientation);\n if (!delta) return {\n handled: false\n };\n let next = index;\n if (delta === \"first\") next = 0;else if (delta === \"last\") next = items.length - 1;else if (delta === \"next\") next = wrap ? (index + 1) % items.length : Math.min(items.length - 1, index + 1);else next = wrap ? (index - 1 + items.length) % items.length : Math.max(0, index - 1);\n const item = focusRovingItem(items, next);\n if (!item) return {\n handled: false\n };\n return {\n handled: true,\n index: next,\n item\n };\n}", "const CSS_SAFE_ID = /^[A-Za-z][A-Za-z0-9_-]*$/;\nexport function isCssSafeId(value) {\n return CSS_SAFE_ID.test(value);\n}\nfunction cssSafePrefix(prefix) {\n const trimmed = prefix.trim();\n if (isCssSafeId(trimmed)) {\n return trimmed;\n }\n const prefixed = `rui-${trimmed}`;\n if (trimmed && isCssSafeId(prefixed)) {\n return prefixed;\n }\n return \"rui\";\n}\nexport function uniqueId(prefix) {\n const token = typeof crypto.randomUUID === \"function\" ? crypto.randomUUID().replace(/-/g, \"\") : Array.from(crypto.getRandomValues(new Uint8Array(16)), byte => byte.toString(16).padStart(2, \"0\")).join(\"\");\n return `${cssSafePrefix(prefix)}-${token}`;\n}", "export function parseMultiValue(value) {\n if (!value) {\n return [];\n }\n return uniqueTrimmed(value.split(\",\"));\n}\nexport function serializeMultiValue(values) {\n return values.join(\",\");\n}\nexport const multiValueTransform = {\n fromAttribute: value => parseMultiValue(value),\n toAttribute: values => values.length > 0 ? serializeMultiValue(values) : null,\n fromProperty: value => {\n if (Array.isArray(value)) {\n return uniqueTrimmed(value.map(String));\n }\n if (typeof value === \"string\") {\n return parseMultiValue(value);\n }\n return [];\n }\n};\nexport const multiValuePropOptions = {\n type: Array,\n reflect: true,\n transform: multiValueTransform\n};\nexport function parseViewValue(value) {\n return multiValueTransform.fromProperty?.(value) ?? [];\n}\nfunction parseNumberArray(value) {\n if (!value) {\n return [];\n }\n return value.split(\",\").map(item => Number(item.trim())).filter(item => Number.isFinite(item));\n}\nfunction serializeNumberArray(values) {\n return values.join(\",\");\n}\nexport const numberArrayTransform = {\n fromAttribute: value => parseNumberArray(value),\n toAttribute: values => values.length > 0 ? serializeNumberArray(values) : null,\n fromProperty: value => {\n if (Array.isArray(value)) {\n return value.map(Number).filter(item => Number.isFinite(item));\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return [value];\n }\n if (typeof value === \"string\") {\n return parseNumberArray(value);\n }\n return [];\n }\n};\nfunction uniqueTrimmed(values) {\n return [...new Set(values.map(item => item.trim()).filter(Boolean))];\n}", "import { jsx, jsxs } from \"@ecopages/jsx/jsx-runtime\";\nimport { withDefaultAriaLabel } from \"@/aria\";\nimport { cx } from \"@/lib/cx\";\nimport { RuiIconX } from \"@/lib/icons\";\nimport \"./tag-group.script\";\nexport function RuiTagList({\n children,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"div\", {\n ...props,\n \"data-tag-list\": true,\n class: cx(\"rui-tag-group__list\", className),\n children\n });\n}\nexport function RuiTag({\n value,\n label,\n children,\n class: className,\n disabled,\n aria,\n ...props\n}) {\n return /* @__PURE__ */jsxs(\"span\", {\n ...props,\n \"data-tag\": true,\n \"data-value\": value,\n \"data-label\": label,\n class: cx(\"rui-tag\", className),\n aria: withDefaultAriaLabel(aria, label),\n \"aria-disabled\": disabled ? \"true\" : void 0,\n children: [children, /* @__PURE__ */jsx(RuiTagRemove, {})]\n });\n}\nexport function RuiTagRemove({\n children,\n class: className,\n aria,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"button\", {\n ...props,\n aria: withDefaultAriaLabel(aria, \"Remove\"),\n type: \"button\",\n \"data-tag-remove\": true,\n class: cx(\"rui-tag__remove\", className),\n children: children ?? /* @__PURE__ */jsx(RuiIconX, {})\n });\n}\nfunction TagGroupShell({\n children\n}) {\n return /* @__PURE__ */jsx(\"div\", {\n class: \"rui-tag-group\",\n \"data-ref\": \"root\",\n children\n });\n}\nexport function RuiTagGroup({\n tags,\n children,\n value,\n ...props\n}) {\n if (tags != null) {\n return /* @__PURE__ */jsx(\"rui-tag-group\", {\n ...props,\n value,\n children: /* @__PURE__ */jsx(TagGroupShell, {\n children: /* @__PURE__ */jsx(RuiTagList, {\n children: tags.map(tag => /* @__PURE__ */jsx(RuiTag, {\n value: tag.value,\n label: typeof tag.label === \"string\" ? tag.label : void 0,\n disabled: tag.disabled,\n children: tag.label\n }))\n })\n })\n });\n }\n return /* @__PURE__ */jsx(\"rui-tag-group\", {\n ...props,\n value,\n children: /* @__PURE__ */jsx(TagGroupShell, {\n children\n })\n });\n}", "export function withDefaultAriaLabel(aria, fallback) {\n if (fallback === void 0 || aria?.label !== void 0) {\n return aria;\n }\n return {\n ...aria,\n label: fallback\n };\n}"],
5
+ "mappings": "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",
6
+ "names": ["RadiantElement", "customElement", "event", "onEvent", "onUpdated", "prop", "state", "jsx", "jsxs", "cx", "parts", "SVG_NAMESPACE", "RuiIconX", "className", "size", "props", "jsxs", "cx", "jsx", "createRuiIconX", "icon", "d", "path", "applyRovingTabindex", "items", "activeIndex", "item", "index", "next", "focusRovingItem", "deltaForKey", "key", "orientation", "navigateRovingTabindex", "options", "current", "wrap", "delta", "CSS_SAFE_ID", "isCssSafeId", "value", "cssSafePrefix", "prefix", "trimmed", "prefixed", "uniqueId", "token", "byte", "parseMultiValue", "value", "uniqueTrimmed", "serializeMultiValue", "values", "multiValueTransform", "multiValuePropOptions", "uniqueTrimmed", "values", "item", "_initProto", "_initClass", "_init_value", "_init_extra_value", "_init_label", "_init_extra_label", "_init_disabled", "_init_extra_disabled", "_init_selectionMode", "_init_extra_selectionMode", "_init_embedded", "_init_extra_embedded", "_init_changeEvent", "_init_extra_changeEvent", "_init_removeEvent", "_init_extra_removeEvent", "_init_derivedItems", "_init_extra_derivedItems", "_applyDecs", "n", "r", "o", "i", "a", "c", "u", "s", "f", "l", "p", "d", "m", "h", "y", "v", "g", "t", "b", "e", "applyDec", "w", "D", "S", "j", "E", "I", "P", "k", "F", "_setFunctionName", "N", "O", "T", "z", "A", "H", "_toPropertyKey", "_checkInRHS", "_toPrimitive", "_RuiTagGroup", "RuiTagGroup", "RadiantElement", "customElement", "prop", "multiValuePropOptions", "event", "state", "onUpdated", "onEvent", "args", "uniqueId", "values", "managed", "list", "tag", "index", "selected", "value", "isSelected", "removeButton", "tagValue", "items", "item", "remove", "createRuiIconX", "root", "event2", "target", "tags", "current", "navigateRovingTabindex", "jsx", "jsxs", "withDefaultAriaLabel", "aria", "fallback", "RuiTagList", "children", "className", "props", "jsx", "cx", "RuiTag", "value", "label", "disabled", "aria", "jsxs", "withDefaultAriaLabel", "RuiTagRemove", "RuiIconX", "TagGroupShell", "RuiTagGroup", "tags", "tag"]
7
7
  }
@@ -3,7 +3,7 @@ import type { RuiTagGroup as RuiTagGroupElement, RuiTagGroupProps } from './tag-
3
3
  import './tag-group.script';
4
4
  export type RuiTagListProps = JsxElementProps<HTMLDivElement>;
5
5
  /**
6
- * Flex-wrapped container for `RuiTag` children.
6
+ * Flex-wrapped container for `RuiTag` children. Stamps `[data-tag-list]`.
7
7
  *
8
8
  * @cssclass rui-tag-group__list - Tag row (flex-wrap container).
9
9
  */
@@ -14,17 +14,21 @@ export type RuiTagProps = JsxElementProps<HTMLSpanElement> & {
14
14
  disabled?: boolean;
15
15
  };
16
16
  /**
17
- * A single tag with optional remove button.
17
+ * A single tag. Stamps `[data-tag]`, `data-value`, `data-label`, and `aria-label`
18
+ * (from `label`).
18
19
  *
19
20
  * @cssclass rui-tag - Tag chip; selected state via `[aria-selected='true']`.
20
21
  *
21
- * @remarks Tags built imperatively for CE-managed items mirror this markup in
22
- * `RuiTagGroup.createManagedTag` (`tag-group.script.tsx`) — edit both together.
22
+ * @remarks `listitem` has an author-only accessible name, so the chip needs
23
+ * `aria-label` for assistive tech and `getByRole('listitem', { name })`.
24
+ * Always appends `RuiTagRemove`. For a non-removable tag, stamp
25
+ * `[data-tag]` yourself without `[data-tag-remove]`. Tags built in
26
+ * `createManagedTag` always include a remove control — edit both together.
23
27
  */
24
- export declare function RuiTag({ value, label, children, class: className, disabled, ...props }: RuiTagProps): JsxRenderable;
28
+ export declare function RuiTag({ value, label, children, class: className, disabled, aria, ...props }: RuiTagProps): JsxRenderable;
25
29
  export type RuiTagRemoveProps = JsxElementProps<HTMLButtonElement>;
26
30
  /**
27
- * Remove button rendered inside `RuiTag`.
31
+ * Remove control inside a tag. Stamps `[data-tag-remove]`.
28
32
  *
29
33
  * @cssclass rui-tag__remove - Tag remove control.
30
34
  */
@@ -34,6 +38,14 @@ export type RuiTagData = {
34
38
  label: JsxRenderable;
35
39
  disabled?: boolean;
36
40
  };
37
- export declare function RuiTagGroup({ tags, children, ...props }: JsxCustomElementAttributes<RuiTagGroupElement, RuiTagGroupProps & {
41
+ /**
42
+ * Tag group view. Pass `tags` for the simple API, or compose `RuiTagList` /
43
+ * `RuiTag` children. Either path wraps content in `[data-ref="root"]`.
44
+ *
45
+ * Raw markup that already matches the host contract can be passed as `children`.
46
+ *
47
+ * @cssclass rui-tag-group - Root wrapper around the tag list (`data-ref="root"`).
48
+ */
49
+ export declare function RuiTagGroup({ tags, children, value, ...props }: JsxCustomElementAttributes<RuiTagGroupElement, RuiTagGroupProps & {
38
50
  tags?: RuiTagData[];
39
51
  }>): JsxRenderable;
@@ -1,12 +1,13 @@
1
1
  import { RadiantElement } from '@ecopages/radiant';
2
2
  import type { EventEmitter } from '@ecopages/radiant/tools/event-emitter';
3
+ import { type ViewMultiValue } from '../shared/multi-value';
3
4
  export type RuiTagGroupSelectionMode = 'single' | 'multiple';
4
5
  export type RuiTagGroupItem = {
5
6
  value: string;
6
7
  label: string;
7
8
  };
8
9
  export type RuiTagGroupProps = {
9
- value?: string;
10
+ value?: ViewMultiValue;
10
11
  label?: string;
11
12
  disabled?: boolean;
12
13
  selectionMode?: RuiTagGroupSelectionMode;
@@ -14,7 +15,7 @@ export type RuiTagGroupProps = {
14
15
  embedded?: boolean;
15
16
  };
16
17
  export type RuiTagGroupChangeDetail = {
17
- value: string;
18
+ value: string[];
18
19
  };
19
20
  export type RuiTagGroupRemoveDetail = {
20
21
  value: string;
@@ -22,22 +23,56 @@ export type RuiTagGroupRemoveDetail = {
22
23
  /**
23
24
  * `<rui-tag-group>` — a focusable list of tags with optional selection and removal.
24
25
  *
25
- * Compose with `data-tag` items and optional `data-tag-remove` buttons inside each tag.
26
- * Use inside `RuiSelectValue` to display multi-select chips.
26
+ * The custom element is a behavior host: it does not render tag markup. Import the
27
+ * script and place any light-DOM children that match the contract below, or use
28
+ * `RuiTagGroup` / `RuiTagList` / `RuiTag`, which stamp the same targets.
29
+ *
30
+ * Use inside `RuiSelectValue` for multi-select chips. Set `embedded` so this host
31
+ * does not toggle selection; the parent owns `value`.
32
+ *
33
+ * ## Light-DOM contract
34
+ *
35
+ * Required:
36
+ * - `[data-tag-list]` — list container. Host sets `id`, `role="list"`, `aria-label`
37
+ * (from `label`, fallback `Tags`), and `aria-disabled` when `disabled`.
38
+ * - `[data-tag]` — one item, descendant of the list. Host sets `id` when missing,
39
+ * `role="listitem"`, `aria-selected`, and roving `tabIndex`.
40
+ *
41
+ * Per tag:
42
+ * - `[data-value]` — selection and remove identity. Falls back to trimmed text.
43
+ * - `[data-label]` — used in the remove control's accessible name. Falls back to trimmed text.
44
+ *
45
+ * Optional:
46
+ * - `[data-tag-remove]` — control inside a tag. Host sets `type="button"`,
47
+ * `tabIndex="-1"`, and `aria-label="Remove {label}"`. Omit for a non-removable tag.
48
+ * - `[data-ref="root"]` — wrapper required only when calling `setItems()`.
49
+ *
50
+ * Author `hidden` or `aria-disabled="true"` on a tag to exclude it from keyboard
51
+ * movement; `aria-disabled` also blocks selection. Do not set `role`,
52
+ * `aria-selected`, or `tabIndex` on tags — the host owns those.
53
+ *
54
+ * Nested hosts: none. Parent hosts (`rui-select`) query `rui-tag-group` by tag name.
27
55
  *
28
56
  * @see https://react-aria.adobe.com/TagGroup
29
57
  * @element rui-tag-group
30
- * @attr {string} value - Comma-separated selected values.
58
+ * @attr {string} value - Comma-separated selected values in markup; the property is `string[]`. Default: `[]`.
31
59
  * @attr {string} label - Accessible name for the tag list.
32
60
  * @attr {boolean} disabled - Disable selection and removal. Default: `false`.
33
61
  * @attr {('single'|'multiple')} selection-mode - Allow one or many selected tags. Default: `multiple`.
34
62
  * @attr {boolean} embedded - Disables selection when the parent component owns the selected values. Default: `false`.
35
- * @fires rui-change - Emitted when the selected `value` changes; `detail.value` is the comma-separated value.
63
+ * @fires rui-change - Emitted when the selected `value` changes; `detail.value` is `string[]`.
36
64
  * @fires rui-remove - Emitted when a tag is removed; `detail.value` is the removed tag's value.
37
- * @cssclass rui-tag-group - Root wrapper around the tag list.
65
+ *
66
+ * @remarks
67
+ * Minimum tree: `[data-tag-list]` > `[data-tag][data-value][data-label]` with optional
68
+ * `[data-tag-remove]` inside. `setItems()` switches to a Derived Tree: it hides the
69
+ * authored list and paints chips into `[data-rui-managed-list]` (do not author that
70
+ * marker). `resync()` re-reads authored children after in-place mutations.
71
+ * BEM classes live on the view helpers; the host never queries them.
72
+ * Not form-associated: wrap in `rui-field` and read `RuiForm` `onSubmit`.
38
73
  */
39
74
  export declare class RuiTagGroup extends RadiantElement {
40
- value: string;
75
+ value: string[];
41
76
  label: string;
42
77
  disabled: boolean;
43
78
  selectionMode: RuiTagGroupSelectionMode;
@@ -45,7 +80,11 @@ export declare class RuiTagGroup extends RadiantElement {
45
80
  changeEvent: EventEmitter<RuiTagGroupChangeDetail>;
46
81
  removeEvent: EventEmitter<RuiTagGroupRemoveDetail>;
47
82
  private readonly uid;
48
- private managedItems;
83
+ /**
84
+ * CE-owned chip list. `null` means the view still owns Authored Children;
85
+ * an array (including empty) means `setItems` has taken over as a Derived Tree.
86
+ */
87
+ private derivedItems;
49
88
  private isMultiple;
50
89
  private getSelectedValues;
51
90
  private setSelectedValues;
@@ -62,11 +101,20 @@ export declare class RuiTagGroup extends RadiantElement {
62
101
  private initialize;
63
102
  protected onConnected(): void;
64
103
  onPropsUpdated(): void;
104
+ /**
105
+ * Re-read authored `[data-tag]` children after the parent mutates them in place.
106
+ */
65
107
  resync(): void;
108
+ /**
109
+ * Replace authored tags with a CE-owned list. Requires `[data-ref="root"]`.
110
+ *
111
+ * @remarks Hides the authored `[data-tag-list]` and sets `value` to every
112
+ * item. Pass `[]` to clear the managed list.
113
+ */
66
114
  setItems(items: RuiTagGroupItem[]): void;
67
115
  /**
68
116
  * Imperative twin of the view's `RuiTag` / `RuiTagRemove` markup for
69
- * CE-managed items (same `data-*` hooks, classes, and remove glyph).
117
+ * CE-managed items (same `data-*` hooks, classes, and remove icon).
70
118
  */
71
119
  private createManagedTag;
72
120
  private syncManagedList;
@@ -1,2 +1,2 @@
1
- import{jsx as o}from"@ecopages/jsx/jsx-runtime";function r(...e){return e.filter(Boolean).join(" ")}var t="data-rui-control";var a=new Set(["rui-combobox","rui-date-field","rui-date-range-picker","rui-select","rui-tag-group","rui-checkbox","rui-checkbox-group","rui-switch","rui-radio-group","rui-slider","rui-knob","rui-number-field","rui-listbox"]),f=`[${t}], ${Array.from(a).join(", ")}`;function l(e){let{class:i,rows:n=3,...u}=e;return o("textarea",{...u,rows:n,[t]:"","data-rui-control-type":"text",class:r("rui-textarea",i)})}export{l as RuiTextarea};
1
+ import{jsx as x}from"@ecopages/jsx/jsx-runtime";function u(...e){return e.filter(Boolean).join(" ")}function o(e){return e?c(e.split(",")):[]}function g(e){return e.join(",")}var s={fromAttribute:e=>o(e),toAttribute:e=>e.length>0?g(e):null,fromProperty:e=>Array.isArray(e)?c(e.map(String)):typeof e=="string"?o(e):[]};function a(e){return e?e.split(",").map(t=>Number(t.trim())).filter(t=>Number.isFinite(t)):[]}function h(e){return e.join(",")}var l={fromAttribute:e=>a(e),toAttribute:e=>e.length>0?h(e):null,fromProperty:e=>Array.isArray(e)?e.map(Number).filter(t=>Number.isFinite(t)):typeof e=="number"&&Number.isFinite(e)?[e]:typeof e=="string"?a(e):[]};function c(e){return[...new Set(e.map(t=>t.trim()).filter(Boolean))]}var m="data-rui-control";var n={read:e=>{let t=Reflect.get(e,"value");return typeof t=="string"?t:e.getAttribute("value")??""},write:(e,t)=>{let r=t==null?"":String(t);e.setAttribute("value",r),"value"in e&&Reflect.set(e,"value",r)}},f={read:e=>{let t=Reflect.get(e,"value");if(typeof t=="number")return t;let r=e.getAttribute("value");return r==null||r===""?"":Number(r)},write:(e,t)=>{let r=t==null?"":String(t);e.setAttribute("value",r),"value"in e&&Reflect.set(e,"value",t)}},d={read:e=>e.querySelector('input[type="checkbox"]')?.checked??e.hasAttribute("checked"),write:(e,t)=>{t?e.setAttribute("checked",""):e.removeAttribute("checked")}};function p(e,t){let r=Reflect.get(e,"value");return r!==void 0&&t.fromProperty?t.fromProperty(r):t.fromAttribute?t.fromAttribute(e.getAttribute("value")):r}function A(e,t){Reflect.set(e,"value",t)}var i={read:e=>p(e,s),write:A},y={read:e=>p(e,l),write:A},N=new Map([["rui-checkbox",d],["rui-switch",d],["rui-combobox",{...i,submission:"none"}],["rui-date-field",n],["rui-date-input",{...n,submission:"host"}],["rui-date-range-picker",n],["rui-select",{...i,submission:"none"}],["rui-radio-group",n],["rui-checkbox-group",i],["rui-listbox",i],["rui-tag-group",i],["rui-slider",{...y,submission:"host"}],["rui-knob",{...f,submission:"host"}],["rui-number-field",{...f,submission:"host"}]]);function R(e){let{class:t,rows:r=3,...b}=e;return x("textarea",{...b,rows:r,[m]:"","data-rui-control-type":"text",class:u("rui-textarea",t)})}export{R as RuiTextarea};
2
2
  //# sourceMappingURL=index.js.map