@ecopages/radiant-ui 0.1.0-beta.7 → 0.1.0-beta.8

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 (264) hide show
  1. package/README.md +1 -1
  2. package/dist/components/ui/alert/alert.css +88 -50
  3. package/dist/components/ui/alert/alert.d.ts +43 -5
  4. package/dist/components/ui/alert/alert.script.d.ts +51 -4
  5. package/dist/components/ui/alert/index.d.ts +2 -2
  6. package/dist/components/ui/alert/index.js +1 -1
  7. package/dist/components/ui/alert/index.js.map +4 -4
  8. package/dist/components/ui/autocomplete/autocomplete.css +4 -4
  9. package/dist/components/ui/autocomplete/autocomplete.d.ts +15 -5
  10. package/dist/components/ui/autocomplete/autocomplete.script.d.ts +9 -0
  11. package/dist/components/ui/autocomplete/index.js +1 -1
  12. package/dist/components/ui/autocomplete/index.js.map +4 -4
  13. package/dist/components/ui/avatar/avatar.d.ts +15 -1
  14. package/dist/components/ui/avatar/index.js +1 -1
  15. package/dist/components/ui/avatar/index.js.map +4 -4
  16. package/dist/components/ui/breadcrumb/breadcrumb.d.ts +32 -6
  17. package/dist/components/ui/breadcrumb/index.js +1 -1
  18. package/dist/components/ui/breadcrumb/index.js.map +4 -4
  19. package/dist/{styles/components → components/ui/button}/button.css +45 -31
  20. package/dist/components/ui/button/button.d.ts +21 -4
  21. package/dist/components/ui/button-group/button-group.d.ts +7 -1
  22. package/dist/components/ui/button-group/index.js +1 -1
  23. package/dist/components/ui/button-group/index.js.map +4 -4
  24. package/dist/components/ui/calendar/calendar.css +7 -7
  25. package/dist/components/ui/calendar/calendar.d.ts +3 -2
  26. package/dist/components/ui/calendar/calendar.script.d.ts +39 -1
  27. package/dist/components/ui/calendar/index.js +1 -1
  28. package/dist/components/ui/calendar/index.js.map +4 -4
  29. package/dist/components/ui/carousel/carousel.d.ts +32 -6
  30. package/dist/components/ui/carousel/carousel.script.d.ts +44 -0
  31. package/dist/components/ui/carousel/index.js +1 -1
  32. package/dist/components/ui/carousel/index.js.map +4 -4
  33. package/dist/components/ui/checkbox/checkbox.css +1 -1
  34. package/dist/components/ui/checkbox/checkbox.d.ts +3 -2
  35. package/dist/components/ui/checkbox/checkbox.script.d.ts +4 -0
  36. package/dist/components/ui/checkbox/index.js +1 -1
  37. package/dist/components/ui/checkbox/index.js.map +4 -4
  38. package/dist/components/ui/chip/chip.d.ts +8 -0
  39. package/dist/components/ui/chip/index.js +1 -1
  40. package/dist/components/ui/chip/index.js.map +4 -4
  41. package/dist/components/ui/chip-list/chip-list.d.ts +10 -2
  42. package/dist/components/ui/chip-list/index.js +1 -1
  43. package/dist/components/ui/chip-list/index.js.map +4 -4
  44. package/dist/components/ui/combobox/combobox.css +39 -1
  45. package/dist/components/ui/combobox/combobox.d.ts +15 -5
  46. package/dist/components/ui/combobox/combobox.script.d.ts +13 -1
  47. package/dist/components/ui/combobox/index.js +1 -1
  48. package/dist/components/ui/combobox/index.js.map +4 -4
  49. package/dist/components/ui/cycle-toggle/cycle-toggle.css +15 -0
  50. package/dist/components/ui/cycle-toggle/cycle-toggle.d.ts +29 -0
  51. package/dist/components/ui/cycle-toggle/cycle-toggle.script.d.ts +61 -0
  52. package/dist/components/ui/cycle-toggle/index.d.ts +5 -0
  53. package/dist/components/ui/cycle-toggle/index.js +2 -0
  54. package/dist/components/ui/cycle-toggle/index.js.map +7 -0
  55. package/dist/components/ui/cycle-toggle/theme-preference-icons.d.ts +12 -0
  56. package/dist/components/ui/date-field/date-field.css +37 -0
  57. package/dist/components/ui/date-field/date-field.d.ts +22 -3
  58. package/dist/components/ui/date-field/date-field.script.d.ts +29 -5
  59. package/dist/components/ui/date-field/index.d.ts +1 -1
  60. package/dist/components/ui/date-field/index.js +1 -1
  61. package/dist/components/ui/date-field/index.js.map +4 -4
  62. package/dist/components/ui/date-range-picker/date-range-picker.css +37 -0
  63. package/dist/components/ui/date-range-picker/date-range-picker.d.ts +37 -4
  64. package/dist/components/ui/date-range-picker/date-range-picker.script.d.ts +31 -5
  65. package/dist/components/ui/date-range-picker/index.d.ts +1 -1
  66. package/dist/components/ui/date-range-picker/index.js +1 -1
  67. package/dist/components/ui/date-range-picker/index.js.map +4 -4
  68. package/dist/components/ui/dialog/dialog.css +1 -1
  69. package/dist/components/ui/dialog/dialog.d.ts +30 -5
  70. package/dist/components/ui/dialog/dialog.script.d.ts +3 -0
  71. package/dist/components/ui/dialog/index.js +1 -1
  72. package/dist/components/ui/dialog/index.js.map +4 -4
  73. package/dist/components/ui/disclosure/disclosure-group.css +1 -1
  74. package/dist/components/ui/disclosure/disclosure-group.script.d.ts +6 -0
  75. package/dist/components/ui/disclosure/disclosure.d.ts +26 -7
  76. package/dist/components/ui/disclosure/disclosure.script.d.ts +5 -0
  77. package/dist/components/ui/disclosure/index.js +1 -1
  78. package/dist/components/ui/disclosure/index.js.map +4 -4
  79. package/dist/components/ui/feed/feed.d.ts +37 -7
  80. package/dist/components/ui/feed/index.js +1 -1
  81. package/dist/components/ui/feed/index.js.map +4 -4
  82. package/dist/components/ui/field/field-description.d.ts +5 -1
  83. package/dist/components/ui/field/field-error.d.ts +5 -0
  84. package/dist/components/ui/field/field.d.ts +8 -1
  85. package/dist/components/ui/field/field.script.d.ts +35 -0
  86. package/dist/components/ui/field/index.js +1 -1
  87. package/dist/components/ui/field/index.js.map +4 -4
  88. package/dist/components/ui/form/control-protocol.d.ts +6 -0
  89. package/dist/components/ui/form/form.d.ts +2 -1
  90. package/dist/components/ui/form/form.script.d.ts +16 -1
  91. package/dist/components/ui/form/index.d.ts +1 -1
  92. package/dist/components/ui/form/index.js +1 -1
  93. package/dist/components/ui/form/index.js.map +4 -4
  94. package/dist/components/ui/grid/grid.d.ts +12 -2
  95. package/dist/components/ui/grid/grid.script.d.ts +14 -0
  96. package/dist/components/ui/grid/index.js +1 -1
  97. package/dist/components/ui/grid/index.js.map +4 -4
  98. package/dist/components/ui/heading/heading.d.ts +26 -4
  99. package/dist/components/ui/heading/index.js +1 -1
  100. package/dist/components/ui/heading/index.js.map +4 -4
  101. package/dist/components/ui/headline/headline.d.ts +9 -1
  102. package/dist/components/ui/headline/index.js +1 -1
  103. package/dist/components/ui/headline/index.js.map +4 -4
  104. package/dist/components/ui/input/index.d.ts +1 -1
  105. package/dist/components/ui/input/index.js +1 -1
  106. package/dist/components/ui/input/index.js.map +4 -4
  107. package/dist/components/ui/input/input.css +2 -7
  108. package/dist/components/ui/input/input.d.ts +7 -2
  109. package/dist/components/ui/label/index.js +1 -1
  110. package/dist/components/ui/label/index.js.map +4 -4
  111. package/dist/components/ui/label/label.d.ts +8 -1
  112. package/dist/components/ui/listbox/index.js +1 -1
  113. package/dist/components/ui/listbox/index.js.map +4 -4
  114. package/dist/components/ui/listbox/listbox.css +2 -5
  115. package/dist/components/ui/listbox/listbox.d.ts +7 -3
  116. package/dist/components/ui/listbox/listbox.script.d.ts +14 -1
  117. package/dist/components/ui/menu-button/index.d.ts +1 -1
  118. package/dist/components/ui/menu-button/index.js +1 -1
  119. package/dist/components/ui/menu-button/index.js.map +4 -4
  120. package/dist/components/ui/menu-button/menu-button.css +2 -2
  121. package/dist/components/ui/menu-button/menu-button.d.ts +27 -5
  122. package/dist/components/ui/menu-button/menu-button.script.d.ts +8 -3
  123. package/dist/components/ui/menubar/index.js +1 -1
  124. package/dist/components/ui/menubar/index.js.map +4 -4
  125. package/dist/components/ui/menubar/menubar.css +4 -4
  126. package/dist/components/ui/menubar/menubar.d.ts +14 -2
  127. package/dist/components/ui/menubar/menubar.script.d.ts +10 -1
  128. package/dist/components/ui/meter/index.js +1 -1
  129. package/dist/components/ui/meter/index.js.map +4 -4
  130. package/dist/components/ui/meter/meter.css +1 -1
  131. package/dist/components/ui/meter/meter.d.ts +7 -2
  132. package/dist/components/ui/meter/meter.script.d.ts +21 -0
  133. package/dist/components/ui/navigation-menu/index.js +1 -1
  134. package/dist/components/ui/navigation-menu/index.js.map +4 -4
  135. package/dist/components/ui/navigation-menu/navigation-menu.css +2 -2
  136. package/dist/components/ui/navigation-menu/navigation-menu.d.ts +3 -2
  137. package/dist/components/ui/navigation-menu/navigation-menu.script.d.ts +4 -0
  138. package/dist/components/ui/number-field/index.d.ts +1 -1
  139. package/dist/components/ui/number-field/index.js +1 -1
  140. package/dist/components/ui/number-field/index.js.map +4 -4
  141. package/dist/components/ui/number-field/number-field.css +18 -3
  142. package/dist/components/ui/number-field/number-field.d.ts +36 -8
  143. package/dist/components/ui/number-field/number-field.script.d.ts +28 -1
  144. package/dist/components/ui/popover/index.js +1 -1
  145. package/dist/components/ui/popover/index.js.map +4 -4
  146. package/dist/components/ui/popover/popover.d.ts +5 -4
  147. package/dist/components/ui/popover/popover.script.d.ts +4 -0
  148. package/dist/components/ui/radio-group/index.d.ts +1 -1
  149. package/dist/components/ui/radio-group/index.js +1 -1
  150. package/dist/components/ui/radio-group/index.js.map +4 -4
  151. package/dist/components/ui/radio-group/radio-group.d.ts +29 -4
  152. package/dist/components/ui/radio-group/radio-group.script.d.ts +14 -9
  153. package/dist/components/ui/select/index.js +1 -1
  154. package/dist/components/ui/select/index.js.map +4 -4
  155. package/dist/components/ui/select/select.css +48 -6
  156. package/dist/components/ui/select/select.d.ts +29 -8
  157. package/dist/components/ui/select/select.script.d.ts +7 -0
  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.script.d.ts +4 -0
  161. package/dist/components/ui/sidebar/sidebar.css +41 -24
  162. package/dist/components/ui/sidebar/sidebar.d.ts +68 -14
  163. package/dist/components/ui/sidebar/sidebar.docs.css +5 -2
  164. package/dist/components/ui/sidebar/sidebar.script.d.ts +9 -0
  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.d.ts +2 -1
  168. package/dist/components/ui/slider/slider.script.d.ts +29 -1
  169. package/dist/components/ui/switch/index.js +1 -1
  170. package/dist/components/ui/switch/index.js.map +4 -4
  171. package/dist/components/ui/switch/switch.css +3 -3
  172. package/dist/components/ui/switch/switch.d.ts +11 -2
  173. package/dist/components/ui/switch/switch.script.d.ts +5 -0
  174. package/dist/components/ui/tabs/index.js +1 -1
  175. package/dist/components/ui/tabs/index.js.map +4 -4
  176. package/dist/components/ui/tabs/tabs.css +9 -10
  177. package/dist/components/ui/tabs/tabs.d.ts +30 -9
  178. package/dist/components/ui/tag-group/index.js +1 -1
  179. package/dist/components/ui/tag-group/index.js.map +4 -4
  180. package/dist/components/ui/tag-group/tag-group.css +2 -11
  181. package/dist/components/ui/tag-group/tag-group.d.ts +18 -5
  182. package/dist/components/ui/tag-group/tag-group.script.d.ts +9 -2
  183. package/dist/components/ui/textarea/index.d.ts +1 -1
  184. package/dist/components/ui/textarea/index.js +1 -1
  185. package/dist/components/ui/textarea/index.js.map +4 -4
  186. package/dist/components/ui/textarea/textarea.d.ts +7 -2
  187. package/dist/components/ui/toast/index.d.ts +1 -1
  188. package/dist/components/ui/toast/index.js +1 -1
  189. package/dist/components/ui/toast/index.js.map +4 -4
  190. package/dist/components/ui/toast/stack-layout.d.ts +18 -0
  191. package/dist/components/ui/toast/toast-context.d.ts +10 -0
  192. package/dist/components/ui/toast/toast.css +30 -9
  193. package/dist/components/ui/toast/toast.d.ts +12 -2
  194. package/dist/components/ui/toast/toast.script.d.ts +60 -4
  195. package/dist/components/ui/toast/toaster.script.d.ts +71 -2
  196. package/dist/components/ui/toc/index.js +1 -1
  197. package/dist/components/ui/toc/index.js.map +4 -4
  198. package/dist/components/ui/toc/toc.css +3 -0
  199. package/dist/components/ui/toc/toc.d.ts +2 -1
  200. package/dist/components/ui/toc/toc.script.d.ts +15 -0
  201. package/dist/components/ui/toolbar/index.js +1 -1
  202. package/dist/components/ui/toolbar/index.js.map +4 -4
  203. package/dist/components/ui/toolbar/toolbar.d.ts +3 -2
  204. package/dist/components/ui/toolbar/toolbar.script.d.ts +8 -0
  205. package/dist/components/ui/tooltip/index.js +1 -1
  206. package/dist/components/ui/tooltip/index.js.map +4 -4
  207. package/dist/components/ui/tooltip/tooltip.d.ts +3 -2
  208. package/dist/components/ui/tooltip/tooltip.script.d.ts +3 -0
  209. package/dist/components/ui/tree/index.js +1 -1
  210. package/dist/components/ui/tree/index.js.map +4 -4
  211. package/dist/components/ui/tree/tree.d.ts +12 -2
  212. package/dist/components/ui/tree/tree.script.d.ts +18 -1
  213. package/dist/components/ui/treegrid/index.js +1 -1
  214. package/dist/components/ui/treegrid/index.js.map +4 -4
  215. package/dist/components/ui/treegrid/treegrid.d.ts +15 -2
  216. package/dist/components/ui/treegrid/treegrid.script.d.ts +22 -1
  217. package/dist/components/ui/window-splitter/index.js +1 -1
  218. package/dist/components/ui/window-splitter/index.js.map +4 -4
  219. package/dist/components/ui/window-splitter/window-splitter.css +1 -1
  220. package/dist/components/ui/window-splitter/window-splitter.d.ts +3 -2
  221. package/dist/components/ui/window-splitter/window-splitter.script.d.ts +22 -0
  222. package/dist/index.d.ts +1 -0
  223. package/dist/index.js +1 -1
  224. package/dist/index.js.map +4 -4
  225. package/dist/lib/cycle-value.d.ts +8 -0
  226. package/dist/lib/intl-number/range.d.ts +8 -0
  227. package/dist/styles/radiant-ui-core.css +110 -341
  228. package/dist/styles/radiant-ui.css +413 -377
  229. package/dist/styles/styles.css +839 -2731
  230. package/dist/styles/tailwind.css +626 -530
  231. package/dist/styles/tokens/colors/aurora.css +2 -2
  232. package/dist/styles/tokens/colors/basalt.css +2 -1
  233. package/dist/styles/tokens/colors/glacier.css +2 -1
  234. package/dist/styles/tokens/presets/colors/aurora.css +42 -14
  235. package/dist/styles/tokens/presets/colors/basalt.css +28 -0
  236. package/dist/styles/tokens/presets/colors/ember.css +28 -0
  237. package/dist/styles/tokens/presets/colors/glacier.css +28 -0
  238. package/dist/styles/tokens/semantic.css +22 -2
  239. package/dist/styles/tokens/spacing/compact.css +12 -12
  240. package/package.json +21 -8
  241. package/dist/components/ui/dialog/dialog-registry.test.d.ts +0 -1
  242. package/dist/components/ui/field/field-ssr-hydration.test.d.ts +0 -1
  243. package/dist/components/ui/form/form-field.test.d.ts +0 -4
  244. package/dist/components/ui/form/form-store.test.d.ts +0 -1
  245. package/dist/components/ui/shared/collection-navigation.test.d.ts +0 -1
  246. package/dist/components/ui/shared/floating-position.test.d.ts +0 -1
  247. package/dist/components/ui/shared/listbox-popover-behavior.test.d.ts +0 -1
  248. package/dist/components/ui/shared/popover-controller.test.d.ts +0 -1
  249. package/dist/components/ui/shared/portal.test.d.ts +0 -1
  250. package/dist/components/ui/sidebar/sidebar.ssr.test.d.ts +0 -2
  251. package/dist/components/ui/sidebar/sidebar.test.d.ts +0 -1
  252. package/dist/components/ui/toast/toast.test.d.ts +0 -2
  253. package/dist/components/ui/toc/toc-helpers.test.d.ts +0 -1
  254. package/dist/components/ui/toc/toc.ssr.test.d.ts +0 -1
  255. package/dist/components/ui/toc/toc.test.d.ts +0 -1
  256. package/dist/lib/intl-date/parts.test.d.ts +0 -1
  257. package/dist/lib/intl-date/segments.test.d.ts +0 -1
  258. package/dist/lib/intl-date/selection.test.d.ts +0 -1
  259. package/dist/lib/mask/date-mask.test.d.ts +0 -1
  260. package/dist/lib/mask/input-mask.test.d.ts +0 -1
  261. package/dist/lib/radiant-view.d.ts +0 -43
  262. package/dist/lib/text-filter.test.d.ts +0 -1
  263. package/dist/styles/tokens/presets/radius.css +0 -45
  264. package/dist/styles/tokens/presets/spacing.css +0 -57
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../src/components/ui/heading/heading.tsx", "../../../../src/lib/cx.ts", "../../../../src/lib/intrinsic.tsx", "../../../../src/lib/radiant-view.ts", "../../../../src/components/ui/headline/headline.tsx"],
4
- "sourcesContent": ["import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { Intrinsic } from \"@/lib/intrinsic\";\nimport { attachRadiantStylesheets } from \"@/lib/radiant-view\";\nimport { RuiHeadline } from \"../headline/headline\";\nfunction headingRootClassName(align, size, className) {\n return cx(\"rui-heading\", `rui-heading--align-${align}`, `rui-heading--size-${size}`, className);\n}\nexport function RuiHeading({\n children,\n as = \"div\",\n align = \"start\",\n size = \"md\",\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(Intrinsic, {\n as,\n ...props,\n class: headingRootClassName(align, size, className),\n children\n });\n}\nexport function RuiHeadingEyebrow({\n children,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"p\", {\n ...props,\n class: cx(\"rui-heading__eyebrow\", className),\n children\n });\n}\nexport function RuiHeadingTitle({\n children,\n as = \"h2\",\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(RuiHeadline, {\n as,\n size: false,\n class: cx(\"rui-heading__title\", className),\n ...props,\n children\n });\n}\nexport function RuiHeadingDescription({\n children,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"p\", {\n ...props,\n class: cx(\"rui-heading__description\", className),\n children\n });\n}\nattachRadiantStylesheets(RuiHeading, [\"./heading.css\", \"../headline/headline.css\"], import.meta.url);", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nexport function Intrinsic({\n as,\n children,\n ...props\n}) {\n const Tag = as ?? \"div\";\n return /* @__PURE__ */jsx(Tag, {\n ...props,\n children\n });\n}", "const RADIANT_VIEW_ELEMENT = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.viewElement\");\nconst RADIANT_SCRIPT_MODULE = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.scriptModule\");\nconst RADIANT_SCRIPT_EXPORT = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.scriptExport\");\nconst RADIANT_VIEW_MODULE = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.viewModule\");\nfunction linkViewToElement(view, element) {\n view[RADIANT_VIEW_ELEMENT] = element;\n const ssrModule = element[RADIANT_SCRIPT_MODULE];\n if (ssrModule) {\n view[RADIANT_SCRIPT_MODULE] = ssrModule;\n view[RADIANT_SCRIPT_EXPORT] = element[RADIANT_SCRIPT_EXPORT] ?? element.name;\n }\n}\nexport function defineRadiantView(element, render, _options) {\n const view = args => render(args);\n linkViewToElement(view, element);\n return view;\n}\nexport function attachRadiantStylesheets(target, _stylesheets, moduleUrl) {\n const view = target;\n view[RADIANT_VIEW_MODULE] = moduleUrl;\n return target;\n}\nexport function syncRadiantViewMetadata(view) {\n const element = view[RADIANT_VIEW_ELEMENT];\n if (element) {\n linkViewToElement(view, element);\n }\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { Intrinsic } from \"@/lib/intrinsic\";\nimport { attachRadiantStylesheets } from \"@/lib/radiant-view\";\nexport function RuiHeadline({\n children,\n as = \"h2\",\n size = \"md\",\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(Intrinsic, {\n as,\n ...props,\n class: cx(\"rui-headline\", size !== false && `rui-headline--size-${size}`, className),\n children\n });\n}\nattachRadiantStylesheets(RuiHeadline, [\"./headline.css\"], import.meta.url);"],
5
- "mappings": "AAAA,OAAS,OAAAA,MAAW,4BCAb,SAASC,KAAMC,EAAO,CAC3B,OAAOA,EAAM,OAAO,OAAO,EAAE,KAAK,GAAG,CACvC,CCFA,OAAS,OAAAC,MAAW,4BACb,SAASC,EAAU,CACxB,GAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAG,CAED,OAAsBJ,EADVE,GAAM,MACa,CAC7B,GAAGE,EACH,SAAAD,CACF,CAAC,CACH,CCRA,IAAME,EAAqC,OAAO,IAAI,wCAAwC,EAcvF,SAASC,EAAyBC,EAAQC,EAAcC,EAAW,CACxE,IAAMC,EAAOH,EACb,OAAAG,EAAKC,CAAmB,EAAIF,EACrBF,CACT,CCrBA,OAAS,OAAAK,MAAW,4BAIb,SAASC,EAAY,CAC1B,SAAAC,EACA,GAAAC,EAAK,KACL,KAAAC,EAAO,KACP,MAAOC,EACP,GAAGC,CACL,EAAG,CACD,OAAsBC,EAAIC,EAAW,CACnC,GAAAL,EACA,GAAGG,EACH,MAAOG,EAAG,eAAgBL,IAAS,IAAS,sBAAsBA,CAAI,GAAIC,CAAS,EACnF,SAAAH,CACF,CAAC,CACH,CACAQ,EAAyBT,EAAa,CAAC,gBAAgB,EAAG,YAAY,GAAG,EJbzE,SAASU,EAAqBC,EAAOC,EAAMC,EAAW,CACpD,OAAOC,EAAG,cAAe,sBAAsBH,CAAK,GAAI,qBAAqBC,CAAI,GAAIC,CAAS,CAChG,CACO,SAASE,EAAW,CACzB,SAAAC,EACA,GAAAC,EAAK,MACL,MAAAN,EAAQ,QACR,KAAAC,EAAO,KACP,MAAOC,EACP,GAAGK,CACL,EAAG,CACD,OAAsBC,EAAIC,EAAW,CACnC,GAAAH,EACA,GAAGC,EACH,MAAOR,EAAqBC,EAAOC,EAAMC,CAAS,EAClD,SAAAG,CACF,CAAC,CACH,CACO,SAASK,EAAkB,CAChC,SAAAL,EACA,MAAOH,EACP,GAAGK,CACL,EAAG,CACD,OAAsBC,EAAI,IAAK,CAC7B,GAAGD,EACH,MAAOJ,EAAG,uBAAwBD,CAAS,EAC3C,SAAAG,CACF,CAAC,CACH,CACO,SAASM,EAAgB,CAC9B,SAAAN,EACA,GAAAC,EAAK,KACL,MAAOJ,EACP,GAAGK,CACL,EAAG,CACD,OAAsBC,EAAII,EAAa,CACrC,GAAAN,EACA,KAAM,GACN,MAAOH,EAAG,qBAAsBD,CAAS,EACzC,GAAGK,EACH,SAAAF,CACF,CAAC,CACH,CACO,SAASQ,EAAsB,CACpC,SAAAR,EACA,MAAOH,EACP,GAAGK,CACL,EAAG,CACD,OAAsBC,EAAI,IAAK,CAC7B,GAAGD,EACH,MAAOJ,EAAG,2BAA4BD,CAAS,EAC/C,SAAAG,CACF,CAAC,CACH,CACAS,EAAyBV,EAAY,CAAC,gBAAiB,0BAA0B,EAAG,YAAY,GAAG",
6
- "names": ["jsx", "cx", "parts", "jsx", "Intrinsic", "as", "children", "props", "RADIANT_VIEW_MODULE", "attachRadiantStylesheets", "target", "_stylesheets", "moduleUrl", "view", "RADIANT_VIEW_MODULE", "jsx", "RuiHeadline", "children", "as", "size", "className", "props", "jsx", "Intrinsic", "cx", "attachRadiantStylesheets", "headingRootClassName", "align", "size", "className", "cx", "RuiHeading", "children", "as", "props", "jsx", "Intrinsic", "RuiHeadingEyebrow", "RuiHeadingTitle", "RuiHeadline", "RuiHeadingDescription", "attachRadiantStylesheets"]
3
+ "sources": ["../../../../src/components/ui/heading/heading.tsx", "../../../../src/lib/cx.ts", "../../../../src/lib/intrinsic.tsx", "../../../../src/components/ui/headline/headline.tsx"],
4
+ "sourcesContent": ["import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { Intrinsic } from \"@/lib/intrinsic\";\nimport { RuiHeadline } from \"../headline/headline\";\nfunction headingRootClassName(align, size, className) {\n return cx(\"rui-heading\", `rui-heading--align-${align}`, `rui-heading--size-${size}`, className);\n}\nexport function RuiHeading({\n children,\n as = \"div\",\n align = \"start\",\n size = \"md\",\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(Intrinsic, {\n as,\n ...props,\n class: headingRootClassName(align, size, className),\n children\n });\n}\nexport function RuiHeadingEyebrow({\n children,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"p\", {\n ...props,\n class: cx(\"rui-heading__eyebrow\", className),\n children\n });\n}\nexport function RuiHeadingTitle({\n children,\n as = \"h2\",\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(RuiHeadline, {\n as,\n size: false,\n class: cx(\"rui-heading__title\", className),\n ...props,\n children\n });\n}\nexport function RuiHeadingDescription({\n children,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"p\", {\n ...props,\n class: cx(\"rui-heading__description\", className),\n children\n });\n}", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nexport function Intrinsic({\n as,\n children,\n ...props\n}) {\n const Tag = as ?? \"div\";\n return /* @__PURE__ */jsx(Tag, {\n ...props,\n children\n });\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { Intrinsic } from \"@/lib/intrinsic\";\nexport function RuiHeadline({\n children,\n as = \"h2\",\n size = \"md\",\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(Intrinsic, {\n as,\n ...props,\n class: cx(\"rui-headline\", size !== false && `rui-headline--size-${size}`, className),\n children\n });\n}"],
5
+ "mappings": "AAAA,OAAS,OAAAA,MAAW,4BCAb,SAASC,KAAMC,EAAO,CAC3B,OAAOA,EAAM,OAAO,OAAO,EAAE,KAAK,GAAG,CACvC,CCFA,OAAS,OAAAC,MAAW,4BACb,SAASC,EAAU,CACxB,GAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAG,CAED,OAAsBJ,EADVE,GAAM,MACa,CAC7B,GAAGE,EACH,SAAAD,CACF,CAAC,CACH,CCXA,OAAS,OAAAE,MAAW,4BAGb,SAASC,EAAY,CAC1B,SAAAC,EACA,GAAAC,EAAK,KACL,KAAAC,EAAO,KACP,MAAOC,EACP,GAAGC,CACL,EAAG,CACD,OAAsBC,EAAIC,EAAW,CACnC,GAAAL,EACA,GAAGG,EACH,MAAOG,EAAG,eAAgBL,IAAS,IAAS,sBAAsBA,CAAI,GAAIC,CAAS,EACnF,SAAAH,CACF,CAAC,CACH,CHZA,SAASQ,EAAqBC,EAAOC,EAAMC,EAAW,CACpD,OAAOC,EAAG,cAAe,sBAAsBH,CAAK,GAAI,qBAAqBC,CAAI,GAAIC,CAAS,CAChG,CACO,SAASE,EAAW,CACzB,SAAAC,EACA,GAAAC,EAAK,MACL,MAAAN,EAAQ,QACR,KAAAC,EAAO,KACP,MAAOC,EACP,GAAGK,CACL,EAAG,CACD,OAAsBC,EAAIC,EAAW,CACnC,GAAAH,EACA,GAAGC,EACH,MAAOR,EAAqBC,EAAOC,EAAMC,CAAS,EAClD,SAAAG,CACF,CAAC,CACH,CACO,SAASK,EAAkB,CAChC,SAAAL,EACA,MAAOH,EACP,GAAGK,CACL,EAAG,CACD,OAAsBC,EAAI,IAAK,CAC7B,GAAGD,EACH,MAAOJ,EAAG,uBAAwBD,CAAS,EAC3C,SAAAG,CACF,CAAC,CACH,CACO,SAASM,EAAgB,CAC9B,SAAAN,EACA,GAAAC,EAAK,KACL,MAAOJ,EACP,GAAGK,CACL,EAAG,CACD,OAAsBC,EAAII,EAAa,CACrC,GAAAN,EACA,KAAM,GACN,MAAOH,EAAG,qBAAsBD,CAAS,EACzC,GAAGK,EACH,SAAAF,CACF,CAAC,CACH,CACO,SAASQ,EAAsB,CACpC,SAAAR,EACA,MAAOH,EACP,GAAGK,CACL,EAAG,CACD,OAAsBC,EAAI,IAAK,CAC7B,GAAGD,EACH,MAAOJ,EAAG,2BAA4BD,CAAS,EAC/C,SAAAG,CACF,CAAC,CACH",
6
+ "names": ["jsx", "cx", "parts", "jsx", "Intrinsic", "as", "children", "props", "jsx", "RuiHeadline", "children", "as", "size", "className", "props", "jsx", "Intrinsic", "cx", "headingRootClassName", "align", "size", "className", "cx", "RuiHeading", "children", "as", "props", "jsx", "Intrinsic", "RuiHeadingEyebrow", "RuiHeadingTitle", "RuiHeadline", "RuiHeadingDescription"]
7
7
  }
@@ -12,5 +12,13 @@ export type RuiHeadlineProps = JsxHtmlPropsWithChildren<{
12
12
  size?: RuiHeadlineSize | false;
13
13
  id?: string;
14
14
  }>;
15
- /** Standalone display title outside a heading block. */
15
+ /**
16
+ * Standalone display title outside a heading block.
17
+ *
18
+ * @cssclass rui-headline - Display title root.
19
+ * @cssclass rui-headline--size-sm - Small type scale.
20
+ * @cssclass rui-headline--size-md - Default type scale.
21
+ * @cssclass rui-headline--size-lg - Large type scale.
22
+ * @cssclass rui-headline--size-xl - XLarge type scale.
23
+ */
16
24
  export declare function RuiHeadline({ children, as, size, class: className, ...props }: RuiHeadlineProps): import("@ecopages/jsx").JsxRenderable;
@@ -1,2 +1,2 @@
1
- import{jsx as p}from"@ecopages/jsx/jsx-runtime";function r(...o){return o.filter(Boolean).join(" ")}import{jsx as f}from"@ecopages/jsx/jsx-runtime";function i({as:o,children:n,...t}){return f(o??"div",{...t,children:n})}var l=Symbol.for("@ecopages/storybook-radiant.viewModule");function s(o,n,t){let e=o;return e[l]=t,o}function a({children:o,as:n="h2",size:t="md",class:e,...c}){return p(i,{as:n,...c,class:r("rui-headline",t!==!1&&`rui-headline--size-${t}`,e),children:o})}s(a,["./headline.css"],import.meta.url);export{a as RuiHeadline};
1
+ import{jsx as f}from"@ecopages/jsx/jsx-runtime";function e(...r){return r.filter(Boolean).join(" ")}import{jsx as c}from"@ecopages/jsx/jsx-runtime";function t({as:r,children:n,...i}){return c(r??"div",{...i,children:n})}function m({children:r,as:n="h2",size:i="md",class:o,...a}){return f(t,{as:n,...a,class:e("rui-headline",i!==!1&&`rui-headline--size-${i}`,o),children:r})}export{m as RuiHeadline};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../src/components/ui/headline/headline.tsx", "../../../../src/lib/cx.ts", "../../../../src/lib/intrinsic.tsx", "../../../../src/lib/radiant-view.ts"],
4
- "sourcesContent": ["import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { Intrinsic } from \"@/lib/intrinsic\";\nimport { attachRadiantStylesheets } from \"@/lib/radiant-view\";\nexport function RuiHeadline({\n children,\n as = \"h2\",\n size = \"md\",\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(Intrinsic, {\n as,\n ...props,\n class: cx(\"rui-headline\", size !== false && `rui-headline--size-${size}`, className),\n children\n });\n}\nattachRadiantStylesheets(RuiHeadline, [\"./headline.css\"], import.meta.url);", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nexport function Intrinsic({\n as,\n children,\n ...props\n}) {\n const Tag = as ?? \"div\";\n return /* @__PURE__ */jsx(Tag, {\n ...props,\n children\n });\n}", "const RADIANT_VIEW_ELEMENT = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.viewElement\");\nconst RADIANT_SCRIPT_MODULE = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.scriptModule\");\nconst RADIANT_SCRIPT_EXPORT = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.scriptExport\");\nconst RADIANT_VIEW_MODULE = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.viewModule\");\nfunction linkViewToElement(view, element) {\n view[RADIANT_VIEW_ELEMENT] = element;\n const ssrModule = element[RADIANT_SCRIPT_MODULE];\n if (ssrModule) {\n view[RADIANT_SCRIPT_MODULE] = ssrModule;\n view[RADIANT_SCRIPT_EXPORT] = element[RADIANT_SCRIPT_EXPORT] ?? element.name;\n }\n}\nexport function defineRadiantView(element, render, _options) {\n const view = args => render(args);\n linkViewToElement(view, element);\n return view;\n}\nexport function attachRadiantStylesheets(target, _stylesheets, moduleUrl) {\n const view = target;\n view[RADIANT_VIEW_MODULE] = moduleUrl;\n return target;\n}\nexport function syncRadiantViewMetadata(view) {\n const element = view[RADIANT_VIEW_ELEMENT];\n if (element) {\n linkViewToElement(view, element);\n }\n}"],
5
- "mappings": "AAAA,OAAS,OAAAA,MAAW,4BCAb,SAASC,KAAMC,EAAO,CAC3B,OAAOA,EAAM,OAAO,OAAO,EAAE,KAAK,GAAG,CACvC,CCFA,OAAS,OAAAC,MAAW,4BACb,SAASC,EAAU,CACxB,GAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAG,CAED,OAAsBJ,EADVE,GAAM,MACa,CAC7B,GAAGE,EACH,SAAAD,CACF,CAAC,CACH,CCRA,IAAME,EAAqC,OAAO,IAAI,wCAAwC,EAcvF,SAASC,EAAyBC,EAAQC,EAAcC,EAAW,CACxE,IAAMC,EAAOH,EACb,OAAAG,EAAKC,CAAmB,EAAIF,EACrBF,CACT,CHjBO,SAASK,EAAY,CAC1B,SAAAC,EACA,GAAAC,EAAK,KACL,KAAAC,EAAO,KACP,MAAOC,EACP,GAAGC,CACL,EAAG,CACD,OAAsBC,EAAIC,EAAW,CACnC,GAAAL,EACA,GAAGG,EACH,MAAOG,EAAG,eAAgBL,IAAS,IAAS,sBAAsBA,CAAI,GAAIC,CAAS,EACnF,SAAAH,CACF,CAAC,CACH,CACAQ,EAAyBT,EAAa,CAAC,gBAAgB,EAAG,YAAY,GAAG",
6
- "names": ["jsx", "cx", "parts", "jsx", "Intrinsic", "as", "children", "props", "RADIANT_VIEW_MODULE", "attachRadiantStylesheets", "target", "_stylesheets", "moduleUrl", "view", "RADIANT_VIEW_MODULE", "RuiHeadline", "children", "as", "size", "className", "props", "jsx", "Intrinsic", "cx", "attachRadiantStylesheets"]
3
+ "sources": ["../../../../src/components/ui/headline/headline.tsx", "../../../../src/lib/cx.ts", "../../../../src/lib/intrinsic.tsx"],
4
+ "sourcesContent": ["import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { Intrinsic } from \"@/lib/intrinsic\";\nexport function RuiHeadline({\n children,\n as = \"h2\",\n size = \"md\",\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(Intrinsic, {\n as,\n ...props,\n class: cx(\"rui-headline\", size !== false && `rui-headline--size-${size}`, className),\n children\n });\n}", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nexport function Intrinsic({\n as,\n children,\n ...props\n}) {\n const Tag = as ?? \"div\";\n return /* @__PURE__ */jsx(Tag, {\n ...props,\n children\n });\n}"],
5
+ "mappings": "AAAA,OAAS,OAAAA,MAAW,4BCAb,SAASC,KAAMC,EAAO,CAC3B,OAAOA,EAAM,OAAO,OAAO,EAAE,KAAK,GAAG,CACvC,CCFA,OAAS,OAAAC,MAAW,4BACb,SAASC,EAAU,CACxB,GAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAG,CAED,OAAsBJ,EADVE,GAAM,MACa,CAC7B,GAAGE,EACH,SAAAD,CACF,CAAC,CACH,CFRO,SAASE,EAAY,CAC1B,SAAAC,EACA,GAAAC,EAAK,KACL,KAAAC,EAAO,KACP,MAAOC,EACP,GAAGC,CACL,EAAG,CACD,OAAsBC,EAAIC,EAAW,CACnC,GAAAL,EACA,GAAGG,EACH,MAAOG,EAAG,eAAgBL,IAAS,IAAS,sBAAsBA,CAAI,GAAIC,CAAS,EACnF,SAAAH,CACF,CAAC,CACH",
6
+ "names": ["jsx", "cx", "parts", "jsx", "Intrinsic", "as", "children", "props", "RuiHeadline", "children", "as", "size", "className", "props", "jsx", "Intrinsic", "cx"]
7
7
  }
@@ -1 +1 @@
1
- export { RuiInput, type RuiInputProps, type RuiInputSize } from './input';
1
+ export { RuiInput, type RuiInputProps } from './input';
@@ -1,2 +1,2 @@
1
- import{jsx as v}from"@ecopages/jsx/jsx-runtime";function h(...e){return e.filter(Boolean).join(" ")}var R={0:"digit",a:"letter","*":"any"},E=/\p{L}/u;function S(e,i){let n=i?.[e];if(n instanceof RegExp)return{kind:"any",pattern:n};if(n)return{kind:n};let t=R[e];return t?{kind:t}:null}function y(e,i,n){return n?n.test(e):i==="digit"?/\d/.test(e):i==="letter"?E.test(e):e.length>0}function g(e,i,n=!1){let t=[],r=0;for(;r<e.length;){let u=e[r];if(u==="\\"){let o=e[r+1];o&&t.push({type:"literal",value:o}),r+=2;continue}if(u==="{"){let o=e.indexOf("}",r+1);if(o<0){t.push({type:"literal",value:"{"}),r+=1;continue}t.push({type:"fixed",value:e.slice(r+1,o)}),r=o+1;continue}if(u==="["){let o=I(e,r+1);if(o<0){t.push({type:"literal",value:"["}),r+=1;continue}let l=g(e.slice(r+1,o),i,!0);t.push(...l),r=o+1;continue}if(u==="]")break;let a=S(u,i);if(a){t.push({type:"input",definition:u,kind:a.kind,pattern:a.pattern,optional:n}),r+=1;continue}t.push({type:"literal",value:u}),r+=1}return t}function I(e,i){let n=1;for(let t=i;t<e.length;t+=1)if(e[t]==="["&&e[t-1]!=="\\"&&(n+=1),e[t]==="]"&&e[t-1]!=="\\"&&(n-=1,n===0))return t;return-1}function s(e,i){return g(e,i)}function x(e,i={}){return e.filter(n=>n.type==="input"&&(!i.requiredOnly||!n.optional)).length}function c(e,i){let n=s(e,i),t="";for(let r of n){if(r.type==="literal"||r.type==="fixed"){t+=r.value;continue}t+="_"}return t}function k(e,i){let n="",t=0;for(let r of i){if(r.type==="fixed"||r.type==="literal"){e.slice(t,t+r.value.length)===r.value&&(t+=r.value.length);continue}if(t>=e.length)continue;let u=e[t];y(u,r.kind,r.pattern)&&(n+=u,t+=1)}return n}function T(e,i){if(!e)return"";let n=0,t="";for(let r of i){if(r.type==="fixed"||r.type==="literal"){t+=r.value;continue}if(n>=e.length){if(r.optional)continue;break}let u=e[n];if(!y(u,r.kind,r.pattern)){if(r.optional)continue;break}t+=u,n+=1}return t}function M(e){return e.every(i=>i.type!=="input"||i.kind==="digit")}function _(e,i){let n=e.replace(/\D/g,""),t=i.filter(r=>r.type==="fixed").map(r=>r.value.replace(/\D/g,"")).join("");return t&&n.startsWith(t)?n.slice(t.length):n}function f(e,i,n){let t=s(i,n),r=x(t),u=k(e,t);return u.length===0&&/\S/.test(e)&&M(t)&&(u=_(e,t)),u.length>r&&(u=u.slice(0,r)),T(u,t)}var D=Symbol.for("@ecopages/storybook-radiant.viewModule");function A(e,i,n){let t=e;return t[D]=n,e}var p="data-rui-control";var L=new Set(["rui-combobox","rui-date-field","rui-date-range-picker","rui-select","rui-tag-group","rui-checkbox","rui-switch","rui-radio-group","rui-slider","rui-number-field","rui-listbox"]),H=`[${p}], ${Array.from(L).join(", ")}, input, textarea`;function b(e){let{size:i="md",class:n,type:t="text",mask:r,placeholder:u,"on:input":a,...o}=e,l=r?c(r):u;return v("input",{...o,type:t,placeholder:l,...r?{"on:input":d=>{if(r){let m=d.target;m.value=f(m.value,r)}a?.(d)}}:a?{"on:input":a}:{},inputmode:r?"numeric":void 0,[p]:"","data-rui-control-type":"text",class:h("rui-input",`rui-input--${i}`,n)})}A(b,["./input.css"],import.meta.url);export{b as RuiInput};
1
+ import{jsx as D}from"@ecopages/jsx/jsx-runtime";function h(...t){return t.filter(Boolean).join(" ")}var A={0:"digit",a:"letter","*":"any"},R=/\p{L}/u;function T(t,n){let i=n?.[t];if(i instanceof RegExp)return{kind:"any",pattern:i};if(i)return{kind:i};let e=A[t];return e?{kind:e}:null}function g(t,n,i){return i?i.test(t):n==="digit"?/\d/.test(t):n==="letter"?R.test(t):t.length>0}function x(t,n,i=!1){let e=[],r=0;for(;r<t.length;){let u=t[r];if(u==="\\"){let l=t[r+1];l&&e.push({type:"literal",value:l}),r+=2;continue}if(u==="{"){let l=t.indexOf("}",r+1);if(l<0){e.push({type:"literal",value:"{"}),r+=1;continue}e.push({type:"fixed",value:t.slice(r+1,l)}),r=l+1;continue}if(u==="["){let l=S(t,r+1);if(l<0){e.push({type:"literal",value:"["}),r+=1;continue}let p=x(t.slice(r+1,l),n,!0);e.push(...p),r=l+1;continue}if(u==="]")break;let a=T(u,n);if(a){e.push({type:"input",definition:u,kind:a.kind,pattern:a.pattern,optional:i}),r+=1;continue}e.push({type:"literal",value:u}),r+=1}return e}function S(t,n){let i=1;for(let e=n;e<t.length;e+=1)if(t[e]==="["&&t[e-1]!=="\\"&&(i+=1),t[e]==="]"&&t[e-1]!=="\\"&&(i-=1,i===0))return e;return-1}function o(t,n){return x(t,n)}function y(t,n={}){return t.filter(i=>i.type==="input"&&(!n.requiredOnly||!i.optional)).length}function c(t,n){let i=o(t,n),e="";for(let r of i){if(r.type==="literal"||r.type==="fixed"){e+=r.value;continue}e+="_"}return e}function k(t,n){let i="",e=0;for(let r of n){if(r.type==="fixed"||r.type==="literal"){t.slice(e,e+r.value.length)===r.value&&(e+=r.value.length);continue}if(e>=t.length)continue;let u=t[e];g(u,r.kind,r.pattern)&&(i+=u,e+=1)}return i}function b(t,n){if(!t)return"";let i=0,e="";for(let r of n){if(r.type==="fixed"||r.type==="literal"){e+=r.value;continue}if(i>=t.length){if(r.optional)continue;break}let u=t[i];if(!g(u,r.kind,r.pattern)){if(r.optional)continue;break}e+=u,i+=1}return e}function v(t){return t.every(n=>n.type!=="input"||n.kind==="digit")}function N(t,n){let i=t.replace(/\D/g,""),e=n.filter(r=>r.type==="fixed").map(r=>r.value.replace(/\D/g,"")).join("");return e&&i.startsWith(e)?i.slice(e.length):i}function f(t,n,i){let e=o(n,i),r=y(e),u=k(t,e);return u.length===0&&/\S/.test(t)&&v(e)&&(u=N(t,e)),u.length>r&&(u=u.slice(0,r)),b(u,e)}var s="data-rui-control";var I=new Set(["rui-combobox","rui-date-field","rui-date-range-picker","rui-select","rui-tag-group","rui-checkbox","rui-switch","rui-radio-group","rui-slider","rui-number-field","rui-listbox"]),O=`[${s}], ${Array.from(I).join(", ")}`;function E(t){let{class:n,type:i="text",mask:e,placeholder:r,"on:input":u,...a}=t,l=e?c(e):r;return D("input",{...a,type:i,placeholder:l,...e?{"on:input":d=>{if(e){let m=d.target;m.value=f(m.value,e)}u?.(d)}}:u?{"on:input":u}:{},inputmode:e?"numeric":void 0,[s]:"","data-rui-control-type":"text",class:h("rui-input",n)})}export{E as RuiInput};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../src/components/ui/input/input.tsx", "../../../../src/lib/cx.ts", "../../../../src/lib/mask/input-mask.ts", "../../../../src/lib/radiant-view.ts", "../../../../src/components/ui/form/control-protocol.ts"],
4
- "sourcesContent": ["import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { applyInputMask, maskToPlaceholder } from \"@/lib/mask\";\nimport { attachRadiantStylesheets } from \"@/lib/radiant-view\";\nimport { RUI_CONTROL_ATTR } from \"../form/control-protocol\";\nexport function RuiInput(props) {\n const {\n size = \"md\",\n class: className,\n type = \"text\",\n mask,\n placeholder,\n \"on:input\": onInput,\n ...host\n } = props;\n const resolvedPlaceholder = mask ? maskToPlaceholder(mask) : placeholder;\n const handleInput = event => {\n if (mask) {\n const input = event.target;\n input.value = applyInputMask(input.value, mask);\n }\n onInput?.(event);\n };\n return /* @__PURE__ */jsx(\"input\", {\n ...host,\n type,\n placeholder: resolvedPlaceholder,\n ...(mask ? {\n \"on:input\": handleInput\n } : onInput ? {\n \"on:input\": onInput\n } : {}),\n inputmode: mask ? \"numeric\" : void 0,\n ...{\n [RUI_CONTROL_ATTR]: \"\"\n },\n \"data-rui-control-type\": \"text\",\n class: cx(\"rui-input\", `rui-input--${size}`, className)\n });\n}\nattachRadiantStylesheets(RuiInput, [\"./input.css\"], import.meta.url);", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "const DEFAULT_DEFINITIONS = {\n \"0\": \"digit\",\n a: \"letter\",\n \"*\": \"any\"\n};\nconst LETTER = /\\p{L}/u;\nfunction resolveDefinition(char, definitions) {\n const custom = definitions?.[char];\n if (custom instanceof RegExp) {\n return {\n kind: \"any\",\n pattern: custom\n };\n }\n if (custom) {\n return {\n kind: custom\n };\n }\n const builtIn = DEFAULT_DEFINITIONS[char];\n return builtIn ? {\n kind: builtIn\n } : null;\n}\nfunction matchesInput(char, kind, pattern) {\n if (pattern) {\n return pattern.test(char);\n }\n if (kind === \"digit\") {\n return /\\d/.test(char);\n }\n if (kind === \"letter\") {\n return LETTER.test(char);\n }\n return char.length > 0;\n}\nfunction parseMaskPatternInternal(pattern, definitions, optional = false) {\n const tokens = [];\n let index = 0;\n while (index < pattern.length) {\n const char = pattern[index];\n if (char === \"\\\\\") {\n const next = pattern[index + 1];\n if (next) {\n tokens.push({\n type: \"literal\",\n value: next\n });\n }\n index += 2;\n continue;\n }\n if (char === \"{\") {\n const end = pattern.indexOf(\"}\", index + 1);\n if (end < 0) {\n tokens.push({\n type: \"literal\",\n value: \"{\"\n });\n index += 1;\n continue;\n }\n tokens.push({\n type: \"fixed\",\n value: pattern.slice(index + 1, end)\n });\n index = end + 1;\n continue;\n }\n if (char === \"[\") {\n const end = findClosingBracket(pattern, index + 1);\n if (end < 0) {\n tokens.push({\n type: \"literal\",\n value: \"[\"\n });\n index += 1;\n continue;\n }\n const inner = parseMaskPatternInternal(pattern.slice(index + 1, end), definitions, true);\n tokens.push(...inner);\n index = end + 1;\n continue;\n }\n if (char === \"]\") {\n break;\n }\n const definition = resolveDefinition(char, definitions);\n if (definition) {\n tokens.push({\n type: \"input\",\n definition: char,\n kind: definition.kind,\n pattern: definition.pattern,\n optional\n });\n index += 1;\n continue;\n }\n tokens.push({\n type: \"literal\",\n value: char\n });\n index += 1;\n }\n return tokens;\n}\nfunction findClosingBracket(pattern, start) {\n let depth = 1;\n for (let index = start; index < pattern.length; index += 1) {\n if (pattern[index] === \"[\" && pattern[index - 1] !== \"\\\\\") {\n depth += 1;\n }\n if (pattern[index] === \"]\" && pattern[index - 1] !== \"\\\\\") {\n depth -= 1;\n if (depth === 0) {\n return index;\n }\n }\n }\n return -1;\n}\nexport function parseMaskPattern(pattern, definitions) {\n return parseMaskPatternInternal(pattern, definitions);\n}\nexport function maskInputSlotCount(tokens, options = {}) {\n return tokens.filter(token => token.type === \"input\" && (!options.requiredOnly || !token.optional)).length;\n}\nexport function maskDigitSlotCount(tokens) {\n return maskInputSlotCount(tokens, {\n requiredOnly: true\n });\n}\nexport function maskToPlaceholder(pattern, definitions) {\n const tokens = parseMaskPattern(pattern, definitions);\n let result = \"\";\n for (const token of tokens) {\n if (token.type === \"literal\" || token.type === \"fixed\") {\n result += token.value;\n continue;\n }\n result += \"_\";\n }\n return result;\n}\nexport function extractMaskInput(masked, tokens) {\n let input = \"\";\n let cursor = 0;\n for (const token of tokens) {\n if (token.type === \"fixed\" || token.type === \"literal\") {\n if (masked.slice(cursor, cursor + token.value.length) === token.value) {\n cursor += token.value.length;\n }\n continue;\n }\n if (cursor >= masked.length) {\n continue;\n }\n const char = masked[cursor];\n if (matchesInput(char, token.kind, token.pattern)) {\n input += char;\n cursor += 1;\n }\n }\n return input;\n}\nexport function extractMaskDigits(masked, tokens) {\n return extractMaskInput(masked, tokens).replace(/\\D/g, \"\");\n}\nexport function formatWithMask(input, tokens) {\n if (!input) {\n return \"\";\n }\n let inputIndex = 0;\n let result = \"\";\n for (const token of tokens) {\n if (token.type === \"fixed\" || token.type === \"literal\") {\n result += token.value;\n continue;\n }\n if (inputIndex >= input.length) {\n if (token.optional) {\n continue;\n }\n break;\n }\n const char = input[inputIndex];\n if (!matchesInput(char, token.kind, token.pattern)) {\n if (token.optional) {\n continue;\n }\n break;\n }\n result += char;\n inputIndex += 1;\n }\n return result;\n}\nfunction isDigitOnlyPattern(tokens) {\n return tokens.every(token => token.type !== \"input\" || token.kind === \"digit\");\n}\nfunction looseInputFromRaw(raw, tokens) {\n const loose = raw.replace(/\\D/g, \"\");\n const fixedDigits = tokens.filter(token => token.type === \"fixed\").map(token => token.value.replace(/\\D/g, \"\")).join(\"\");\n if (fixedDigits && loose.startsWith(fixedDigits)) {\n return loose.slice(fixedDigits.length);\n }\n return loose;\n}\nexport function applyInputMask(raw, pattern, definitions) {\n const tokens = parseMaskPattern(pattern, definitions);\n const capacity = maskInputSlotCount(tokens);\n let input = extractMaskInput(raw, tokens);\n if (input.length === 0 && /\\S/.test(raw) && isDigitOnlyPattern(tokens)) {\n input = looseInputFromRaw(raw, tokens);\n }\n if (input.length > capacity) {\n input = input.slice(0, capacity);\n }\n return formatWithMask(input, tokens);\n}", "const RADIANT_VIEW_ELEMENT = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.viewElement\");\nconst RADIANT_SCRIPT_MODULE = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.scriptModule\");\nconst RADIANT_SCRIPT_EXPORT = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.scriptExport\");\nconst RADIANT_VIEW_MODULE = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.viewModule\");\nfunction linkViewToElement(view, element) {\n view[RADIANT_VIEW_ELEMENT] = element;\n const ssrModule = element[RADIANT_SCRIPT_MODULE];\n if (ssrModule) {\n view[RADIANT_SCRIPT_MODULE] = ssrModule;\n view[RADIANT_SCRIPT_EXPORT] = element[RADIANT_SCRIPT_EXPORT] ?? element.name;\n }\n}\nexport function defineRadiantView(element, render, _options) {\n const view = args => render(args);\n linkViewToElement(view, element);\n return view;\n}\nexport function attachRadiantStylesheets(target, _stylesheets, moduleUrl) {\n const view = target;\n view[RADIANT_VIEW_MODULE] = moduleUrl;\n return target;\n}\nexport function syncRadiantViewMetadata(view) {\n const element = view[RADIANT_VIEW_ELEMENT];\n if (element) {\n linkViewToElement(view, element);\n }\n}", "export const RUI_CONTROL_ATTR = \"data-rui-control\";\nexport const RUI_FIELD_MANAGED_ATTR = \"data-rui-field-managed\";\nexport const RUI_FIELD_LABEL_ATTR = \"data-rui-field-label\";\nexport const RUI_FIELD_DESCRIPTION_ATTR = \"data-rui-field-description\";\nexport const RUI_FIELD_ERROR_ATTR = \"data-rui-field-error\";\nexport const RUI_FIELD_DEFAULT_VALUE_ATTR = \"data-default-value\";\nexport const RUI_FORM_DEFAULT_VALUES_ATTR = \"data-default-values\";\nconst HOST_CONTROL_TAGS = /* @__PURE__ */new Set([\"rui-combobox\", \"rui-date-field\", \"rui-date-range-picker\", \"rui-select\", \"rui-tag-group\", \"rui-checkbox\", \"rui-switch\", \"rui-radio-group\", \"rui-slider\", \"rui-number-field\", \"rui-listbox\"]);\nconst CONTROL_SELECTOR = `[${RUI_CONTROL_ATTR}], ${Array.from(HOST_CONTROL_TAGS).join(\", \")}, input, textarea`;\nconst stringValueAdapter = {\n read: host => {\n const value = Reflect.get(host, \"value\");\n return typeof value === \"string\" ? value : host.getAttribute(\"value\") ?? \"\";\n },\n write: (host, value) => {\n const next = value == null ? \"\" : String(value);\n host.setAttribute(\"value\", next);\n if (\"value\" in host) {\n Reflect.set(host, \"value\", next);\n }\n }\n};\nconst numberValueAdapter = {\n read: host => {\n const value = Reflect.get(host, \"value\");\n if (typeof value === \"number\") {\n return value;\n }\n const raw = host.getAttribute(\"value\");\n return raw == null || raw === \"\" ? \"\" : Number(raw);\n },\n write: (host, value) => {\n const next = value == null ? \"\" : String(value);\n host.setAttribute(\"value\", next);\n if (\"value\" in host) {\n Reflect.set(host, \"value\", value);\n }\n }\n};\nconst booleanValueAdapter = {\n read: host => {\n const input = host.querySelector('input[type=\"checkbox\"]');\n return input?.checked ?? host.hasAttribute(\"checked\");\n },\n write: (host, value) => {\n if (value) {\n host.setAttribute(\"checked\", \"\");\n } else {\n host.removeAttribute(\"checked\");\n }\n }\n};\nconst CONTROL_VALUE_ADAPTERS = /* @__PURE__ */new Map([[\"rui-checkbox\", booleanValueAdapter], [\"rui-switch\", booleanValueAdapter], [\"rui-combobox\", stringValueAdapter], [\"rui-date-field\", stringValueAdapter], [\"rui-date-range-picker\", stringValueAdapter], [\"rui-select\", stringValueAdapter], [\"rui-radio-group\", stringValueAdapter], [\"rui-listbox\", stringValueAdapter], [\"rui-tag-group\", stringValueAdapter], [\"rui-slider\", numberValueAdapter], [\"rui-number-field\", numberValueAdapter]]);\nfunction forEachFieldContentNode(root, visit) {\n const slotHost = root;\n const visited = /* @__PURE__ */new Set();\n const safeVisit = node => {\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n visit(node);\n };\n if (typeof slotHost.getSlotElements === \"function\") {\n for (const node of slotHost.getSlotElements()) {\n safeVisit(node);\n }\n }\n const renderRoot = root.querySelector(\".rui-field\") ?? root;\n for (const child of Array.from(renderRoot.children)) {\n safeVisit(child);\n }\n for (const node of renderRoot.querySelectorAll(\"*\")) {\n safeVisit(node);\n }\n for (const child of Array.from(root.children)) {\n safeVisit(child);\n }\n const shadow = root.shadowRoot;\n if (shadow) {\n for (const child of Array.from(shadow.children)) {\n safeVisit(child);\n }\n }\n}\nfunction queryFieldContent(root, selector) {\n let found = null;\n forEachFieldContentNode(root, node => {\n if (found || !(node instanceof HTMLElement)) {\n return;\n }\n if (node.matches(selector)) {\n found = node;\n return;\n }\n found = node.querySelector(selector);\n });\n return found;\n}\nfunction pickPrimaryFieldControl(candidates) {\n if (candidates.length === 0) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0];\n }\n const hostControl = candidates.find(candidate => HOST_CONTROL_TAGS.has(candidate.localName));\n const markedControl = candidates.find(candidate => candidate.hasAttribute(RUI_CONTROL_ATTR));\n if (markedControl) {\n return markedControl;\n }\n if (hostControl) {\n return hostControl;\n }\n const active = document.activeElement;\n if (active instanceof HTMLElement) {\n for (const candidate of candidates) {\n if (candidate === active || candidate.contains(active)) {\n return candidate;\n }\n }\n }\n const visible = candidates.filter(el => el.isConnected && el.getClientRects().length > 0 && !el.closest('[hidden],[aria-hidden=\"true\"]'));\n const pool = visible.length > 0 ? visible : candidates.filter(el => el.isConnected);\n return pool[pool.length - 1] ?? candidates[candidates.length - 1];\n}\nfunction listFieldControlsInRenderTree(root) {\n const renderRoot = root.querySelector(\".rui-field\");\n if (!(renderRoot instanceof HTMLElement)) {\n return [];\n }\n return Array.from(renderRoot.querySelectorAll(CONTROL_SELECTOR)).filter(el => root.contains(el));\n}\nexport function findFieldControl(root) {\n const fromRenderTree = pickPrimaryFieldControl(listFieldControlsInRenderTree(root));\n if (fromRenderTree) {\n return fromRenderTree;\n }\n let found = null;\n forEachFieldContentNode(root, node => {\n if (found) {\n return;\n }\n const match = findControlInSubtree(node);\n if (match) {\n found = match;\n }\n });\n if (found) {\n return found;\n }\n const renderRoot = root.querySelector(\".rui-field\") ?? root;\n return findControlInSubtree(renderRoot);\n}\nfunction findControlInSubtree(node) {\n if (!(node instanceof HTMLElement)) {\n return null;\n }\n if (node.matches(`[${RUI_CONTROL_ATTR}]`)) {\n return node;\n }\n if (HOST_CONTROL_TAGS.has(node.localName)) {\n return node;\n }\n if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) {\n return node;\n }\n const nested = node.querySelector(CONTROL_SELECTOR);\n return nested;\n}\nexport function readControlValue(control) {\n if (control instanceof HTMLInputElement) {\n const host2 = resolveControlHost(control);\n const adapter = host2 === control ? void 0 : CONTROL_VALUE_ADAPTERS.get(host2.localName);\n if (adapter) {\n return adapter.read(host2);\n }\n if (control.type === \"checkbox\") {\n return control.checked;\n }\n if (control.type === \"number\" || control.type === \"range\") {\n return control.value === \"\" ? \"\" : Number(control.value);\n }\n return control.value;\n }\n if (control instanceof HTMLTextAreaElement) {\n return control.value;\n }\n const host = resolveControlHost(control);\n return CONTROL_VALUE_ADAPTERS.get(host.localName)?.read(host) ?? host.getAttribute(\"value\") ?? \"\";\n}\nexport function writeControlValue(control, value) {\n if (control instanceof HTMLInputElement) {\n const host2 = resolveControlHost(control);\n const adapter = host2 === control ? void 0 : CONTROL_VALUE_ADAPTERS.get(host2.localName);\n if (adapter) {\n adapter.write(host2, value);\n return;\n }\n if (control.type === \"checkbox\") {\n control.checked = Boolean(value);\n const ce = control.closest(\"rui-checkbox, rui-switch\");\n if (ce) {\n if (value) {\n ce.setAttribute(\"checked\", \"\");\n } else {\n ce.removeAttribute(\"checked\");\n }\n }\n return;\n }\n control.value = value == null ? \"\" : String(value);\n return;\n }\n if (control instanceof HTMLTextAreaElement) {\n control.value = value == null ? \"\" : String(value);\n return;\n }\n const host = resolveControlHost(control);\n CONTROL_VALUE_ADAPTERS.get(host.localName)?.write(host, value);\n}\nfunction resolveControlHost(control) {\n if (control.hasAttribute(RUI_CONTROL_ATTR)) {\n const host = control.closest(Array.from(HOST_CONTROL_TAGS).join(\",\"));\n return host ?? control;\n }\n return control;\n}\nexport function findFieldLabel(root) {\n return queryFieldContent(root, `[${RUI_FIELD_LABEL_ATTR}], label.rui-label`);\n}\nexport function findFieldDescription(root) {\n return queryFieldContent(root, `[${RUI_FIELD_DESCRIPTION_ATTR}]`);\n}\nexport function findFieldError(root) {\n const all = findFieldErrorElements(root);\n return all[0] ?? null;\n}\nexport function findFieldErrorElements(root) {\n const renderRoot = root.querySelector(\".rui-field\");\n if (renderRoot instanceof HTMLElement) {\n const inRender = Array.from(renderRoot.querySelectorAll(`[${RUI_FIELD_ERROR_ATTR}]`));\n const visible = inRender.filter(el => el.getClientRects().length > 0);\n if (visible.length > 0) {\n return visible;\n }\n if (inRender.length > 0) {\n return inRender;\n }\n }\n const fromDom = Array.from(root.querySelectorAll(`[${RUI_FIELD_ERROR_ATTR}]`));\n if (fromDom.length > 0) {\n return fromDom;\n }\n const single = queryFieldContent(root, `[${RUI_FIELD_ERROR_ATTR}]`);\n return single ? [single] : [];\n}\nexport function wireFieldControlName(controlHost, ariaTarget, name) {\n if (!name) {\n return;\n }\n if (ariaTarget instanceof HTMLInputElement || ariaTarget instanceof HTMLTextAreaElement) {\n ariaTarget.name = name;\n }\n if (!controlHost) {\n return;\n }\n if (controlHost === ariaTarget) {\n return;\n }\n if (HOST_CONTROL_TAGS.has(controlHost.localName)) {\n controlHost.setAttribute(\"name\", name);\n }\n}\nexport function getAriaControlTarget(control) {\n if (control instanceof HTMLInputElement || control instanceof HTMLTextAreaElement) {\n return control;\n }\n if (control.hasAttribute(RUI_CONTROL_ATTR)) {\n return control;\n }\n const marked = control.querySelector(`[${RUI_CONTROL_ATTR}]`);\n if (marked) {\n return marked;\n }\n if (control.localName === \"rui-combobox\") {\n return control.querySelector(\"[data-combobox-input]\") ?? control;\n }\n if (control.localName === \"rui-date-field\") {\n return control.querySelector(\"[data-date-field-input]\") ?? control;\n }\n if (control.localName === \"rui-date-range-picker\") {\n return control.querySelector(\"[data-range-start]\") ?? control;\n }\n if (control.localName === \"rui-select\") {\n return control.querySelector(\"[data-select-trigger]\") ?? control;\n }\n if (control.localName === \"rui-tag-group\") {\n return control.querySelector(\"[data-tag-list]\") ?? control;\n }\n if (control.localName === \"rui-number-field\") {\n return control.querySelector(\"[data-number-field-input], input\") ?? control;\n }\n if (control.localName === \"rui-slider\") {\n return control.querySelector('input[type=\"range\"]') ?? control;\n }\n if (control.localName === \"rui-checkbox\" || control.localName === \"rui-switch\") {\n return control.querySelector(\"input\") ?? control;\n }\n if (control.localName === \"rui-radio-group\") {\n const checked = control.querySelector('input[type=\"radio\"]:checked');\n const first = control.querySelector('input[type=\"radio\"]');\n return checked ?? first ?? control;\n }\n return control;\n}"],
5
- "mappings": "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",
6
- "names": ["jsx", "cx", "parts", "DEFAULT_DEFINITIONS", "LETTER", "resolveDefinition", "char", "definitions", "custom", "builtIn", "matchesInput", "kind", "pattern", "parseMaskPatternInternal", "optional", "tokens", "index", "next", "end", "findClosingBracket", "inner", "definition", "start", "depth", "parseMaskPattern", "maskInputSlotCount", "options", "token", "maskToPlaceholder", "pattern", "definitions", "tokens", "parseMaskPattern", "result", "token", "extractMaskInput", "masked", "input", "cursor", "char", "matchesInput", "formatWithMask", "input", "tokens", "inputIndex", "result", "token", "char", "matchesInput", "isDigitOnlyPattern", "looseInputFromRaw", "raw", "loose", "fixedDigits", "applyInputMask", "pattern", "definitions", "parseMaskPattern", "capacity", "maskInputSlotCount", "extractMaskInput", "RADIANT_VIEW_MODULE", "attachRadiantStylesheets", "target", "_stylesheets", "moduleUrl", "view", "RADIANT_VIEW_MODULE", "RUI_CONTROL_ATTR", "HOST_CONTROL_TAGS", "CONTROL_SELECTOR", "RUI_CONTROL_ATTR", "RuiInput", "props", "size", "className", "type", "mask", "placeholder", "onInput", "host", "resolvedPlaceholder", "maskToPlaceholder", "jsx", "event", "input", "applyInputMask", "RUI_CONTROL_ATTR", "cx", "attachRadiantStylesheets"]
3
+ "sources": ["../../../../src/components/ui/input/input.tsx", "../../../../src/lib/cx.ts", "../../../../src/lib/mask/input-mask.ts", "../../../../src/components/ui/form/control-protocol.ts"],
4
+ "sourcesContent": ["import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { applyInputMask, maskToPlaceholder } from \"@/lib/mask\";\nimport { RUI_CONTROL_ATTR } from \"../form/control-protocol\";\nexport function RuiInput(props) {\n const {\n class: className,\n type = \"text\",\n mask,\n placeholder,\n \"on:input\": onInput,\n ...host\n } = props;\n const resolvedPlaceholder = mask ? maskToPlaceholder(mask) : placeholder;\n const handleInput = event => {\n if (mask) {\n const input = event.target;\n input.value = applyInputMask(input.value, mask);\n }\n onInput?.(event);\n };\n return /* @__PURE__ */jsx(\"input\", {\n ...host,\n type,\n placeholder: resolvedPlaceholder,\n ...(mask ? {\n \"on:input\": handleInput\n } : onInput ? {\n \"on:input\": onInput\n } : {}),\n inputmode: mask ? \"numeric\" : void 0,\n ...{\n [RUI_CONTROL_ATTR]: \"\"\n },\n \"data-rui-control-type\": \"text\",\n class: cx(\"rui-input\", className)\n });\n}", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "const DEFAULT_DEFINITIONS = {\n \"0\": \"digit\",\n a: \"letter\",\n \"*\": \"any\"\n};\nconst LETTER = /\\p{L}/u;\nfunction resolveDefinition(char, definitions) {\n const custom = definitions?.[char];\n if (custom instanceof RegExp) {\n return {\n kind: \"any\",\n pattern: custom\n };\n }\n if (custom) {\n return {\n kind: custom\n };\n }\n const builtIn = DEFAULT_DEFINITIONS[char];\n return builtIn ? {\n kind: builtIn\n } : null;\n}\nfunction matchesInput(char, kind, pattern) {\n if (pattern) {\n return pattern.test(char);\n }\n if (kind === \"digit\") {\n return /\\d/.test(char);\n }\n if (kind === \"letter\") {\n return LETTER.test(char);\n }\n return char.length > 0;\n}\nfunction parseMaskPatternInternal(pattern, definitions, optional = false) {\n const tokens = [];\n let index = 0;\n while (index < pattern.length) {\n const char = pattern[index];\n if (char === \"\\\\\") {\n const next = pattern[index + 1];\n if (next) {\n tokens.push({\n type: \"literal\",\n value: next\n });\n }\n index += 2;\n continue;\n }\n if (char === \"{\") {\n const end = pattern.indexOf(\"}\", index + 1);\n if (end < 0) {\n tokens.push({\n type: \"literal\",\n value: \"{\"\n });\n index += 1;\n continue;\n }\n tokens.push({\n type: \"fixed\",\n value: pattern.slice(index + 1, end)\n });\n index = end + 1;\n continue;\n }\n if (char === \"[\") {\n const end = findClosingBracket(pattern, index + 1);\n if (end < 0) {\n tokens.push({\n type: \"literal\",\n value: \"[\"\n });\n index += 1;\n continue;\n }\n const inner = parseMaskPatternInternal(pattern.slice(index + 1, end), definitions, true);\n tokens.push(...inner);\n index = end + 1;\n continue;\n }\n if (char === \"]\") {\n break;\n }\n const definition = resolveDefinition(char, definitions);\n if (definition) {\n tokens.push({\n type: \"input\",\n definition: char,\n kind: definition.kind,\n pattern: definition.pattern,\n optional\n });\n index += 1;\n continue;\n }\n tokens.push({\n type: \"literal\",\n value: char\n });\n index += 1;\n }\n return tokens;\n}\nfunction findClosingBracket(pattern, start) {\n let depth = 1;\n for (let index = start; index < pattern.length; index += 1) {\n if (pattern[index] === \"[\" && pattern[index - 1] !== \"\\\\\") {\n depth += 1;\n }\n if (pattern[index] === \"]\" && pattern[index - 1] !== \"\\\\\") {\n depth -= 1;\n if (depth === 0) {\n return index;\n }\n }\n }\n return -1;\n}\nexport function parseMaskPattern(pattern, definitions) {\n return parseMaskPatternInternal(pattern, definitions);\n}\nexport function maskInputSlotCount(tokens, options = {}) {\n return tokens.filter(token => token.type === \"input\" && (!options.requiredOnly || !token.optional)).length;\n}\nexport function maskDigitSlotCount(tokens) {\n return maskInputSlotCount(tokens, {\n requiredOnly: true\n });\n}\nexport function maskToPlaceholder(pattern, definitions) {\n const tokens = parseMaskPattern(pattern, definitions);\n let result = \"\";\n for (const token of tokens) {\n if (token.type === \"literal\" || token.type === \"fixed\") {\n result += token.value;\n continue;\n }\n result += \"_\";\n }\n return result;\n}\nexport function extractMaskInput(masked, tokens) {\n let input = \"\";\n let cursor = 0;\n for (const token of tokens) {\n if (token.type === \"fixed\" || token.type === \"literal\") {\n if (masked.slice(cursor, cursor + token.value.length) === token.value) {\n cursor += token.value.length;\n }\n continue;\n }\n if (cursor >= masked.length) {\n continue;\n }\n const char = masked[cursor];\n if (matchesInput(char, token.kind, token.pattern)) {\n input += char;\n cursor += 1;\n }\n }\n return input;\n}\nexport function extractMaskDigits(masked, tokens) {\n return extractMaskInput(masked, tokens).replace(/\\D/g, \"\");\n}\nexport function formatWithMask(input, tokens) {\n if (!input) {\n return \"\";\n }\n let inputIndex = 0;\n let result = \"\";\n for (const token of tokens) {\n if (token.type === \"fixed\" || token.type === \"literal\") {\n result += token.value;\n continue;\n }\n if (inputIndex >= input.length) {\n if (token.optional) {\n continue;\n }\n break;\n }\n const char = input[inputIndex];\n if (!matchesInput(char, token.kind, token.pattern)) {\n if (token.optional) {\n continue;\n }\n break;\n }\n result += char;\n inputIndex += 1;\n }\n return result;\n}\nfunction isDigitOnlyPattern(tokens) {\n return tokens.every(token => token.type !== \"input\" || token.kind === \"digit\");\n}\nfunction looseInputFromRaw(raw, tokens) {\n const loose = raw.replace(/\\D/g, \"\");\n const fixedDigits = tokens.filter(token => token.type === \"fixed\").map(token => token.value.replace(/\\D/g, \"\")).join(\"\");\n if (fixedDigits && loose.startsWith(fixedDigits)) {\n return loose.slice(fixedDigits.length);\n }\n return loose;\n}\nexport function applyInputMask(raw, pattern, definitions) {\n const tokens = parseMaskPattern(pattern, definitions);\n const capacity = maskInputSlotCount(tokens);\n let input = extractMaskInput(raw, tokens);\n if (input.length === 0 && /\\S/.test(raw) && isDigitOnlyPattern(tokens)) {\n input = looseInputFromRaw(raw, tokens);\n }\n if (input.length > capacity) {\n input = input.slice(0, capacity);\n }\n return formatWithMask(input, tokens);\n}", "export const RUI_CONTROL_ATTR = \"data-rui-control\";\nexport const RUI_FIELD_MANAGED_ATTR = \"data-rui-field-managed\";\nexport const RUI_FIELD_LABEL_ATTR = \"data-rui-field-label\";\nexport const RUI_FIELD_DESCRIPTION_ATTR = \"data-rui-field-description\";\nexport const RUI_FIELD_ERROR_ATTR = \"data-rui-field-error\";\nexport const RUI_FIELD_DEFAULT_VALUE_ATTR = \"data-default-value\";\nexport const RUI_FORM_DEFAULT_VALUES_ATTR = \"data-default-values\";\nconst HOST_CONTROL_TAGS = /* @__PURE__ */new Set([\"rui-combobox\", \"rui-date-field\", \"rui-date-range-picker\", \"rui-select\", \"rui-tag-group\", \"rui-checkbox\", \"rui-switch\", \"rui-radio-group\", \"rui-slider\", \"rui-number-field\", \"rui-listbox\"]);\nconst CONTROL_SELECTOR = `[${RUI_CONTROL_ATTR}], ${Array.from(HOST_CONTROL_TAGS).join(\", \")}`;\nexport function isNativeTextControl(node) {\n return node.localName === \"input\" || node.localName === \"textarea\";\n}\nfunction isNativeInput(node) {\n return node.localName === \"input\";\n}\nfunction isNativeTextarea(node) {\n return node.localName === \"textarea\";\n}\nconst stringValueAdapter = {\n read: host => {\n const value = Reflect.get(host, \"value\");\n return typeof value === \"string\" ? value : host.getAttribute(\"value\") ?? \"\";\n },\n write: (host, value) => {\n const next = value == null ? \"\" : String(value);\n host.setAttribute(\"value\", next);\n if (\"value\" in host) {\n Reflect.set(host, \"value\", next);\n }\n }\n};\nconst numberValueAdapter = {\n read: host => {\n const value = Reflect.get(host, \"value\");\n if (typeof value === \"number\") {\n return value;\n }\n const raw = host.getAttribute(\"value\");\n return raw == null || raw === \"\" ? \"\" : Number(raw);\n },\n write: (host, value) => {\n const next = value == null ? \"\" : String(value);\n host.setAttribute(\"value\", next);\n if (\"value\" in host) {\n Reflect.set(host, \"value\", value);\n }\n }\n};\nconst booleanValueAdapter = {\n read: host => {\n const input = host.querySelector('input[type=\"checkbox\"]');\n return input?.checked ?? host.hasAttribute(\"checked\");\n },\n write: (host, value) => {\n if (value) {\n host.setAttribute(\"checked\", \"\");\n } else {\n host.removeAttribute(\"checked\");\n }\n }\n};\nconst CONTROL_VALUE_ADAPTERS = /* @__PURE__ */new Map([[\"rui-checkbox\", booleanValueAdapter], [\"rui-switch\", booleanValueAdapter], [\"rui-combobox\", stringValueAdapter], [\"rui-date-field\", stringValueAdapter], [\"rui-date-range-picker\", stringValueAdapter], [\"rui-select\", stringValueAdapter], [\"rui-radio-group\", stringValueAdapter], [\"rui-listbox\", stringValueAdapter], [\"rui-tag-group\", stringValueAdapter], [\"rui-slider\", numberValueAdapter], [\"rui-number-field\", numberValueAdapter]]);\nfunction forEachFieldContentNode(root, visit) {\n const slotHost = root;\n const visited = /* @__PURE__ */new Set();\n const safeVisit = node => {\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n visit(node);\n };\n if (typeof slotHost.getSlotElements === \"function\") {\n for (const node of slotHost.getSlotElements()) {\n safeVisit(node);\n }\n }\n const renderRoot = root.querySelector(\".rui-field\") ?? root;\n for (const child of Array.from(renderRoot.children)) {\n safeVisit(child);\n }\n for (const node of renderRoot.querySelectorAll(\"*\")) {\n safeVisit(node);\n }\n for (const child of Array.from(root.children)) {\n safeVisit(child);\n }\n const shadow = root.shadowRoot;\n if (shadow) {\n for (const child of Array.from(shadow.children)) {\n safeVisit(child);\n }\n }\n}\nfunction queryFieldContent(root, selector) {\n let found = null;\n forEachFieldContentNode(root, node => {\n if (found || !(node instanceof HTMLElement)) {\n return;\n }\n if (node.matches(selector)) {\n found = node;\n return;\n }\n found = node.querySelector(selector);\n });\n return found;\n}\nfunction pickPrimaryFieldControl(candidates) {\n if (candidates.length === 0) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0];\n }\n const hostControl = candidates.find(candidate => HOST_CONTROL_TAGS.has(candidate.localName));\n const markedControl = candidates.find(candidate => candidate.hasAttribute(RUI_CONTROL_ATTR));\n if (markedControl) {\n return markedControl;\n }\n if (hostControl) {\n return hostControl;\n }\n const active = document.activeElement;\n if (active instanceof HTMLElement) {\n for (const candidate of candidates) {\n if (candidate === active || candidate.contains(active)) {\n return candidate;\n }\n }\n }\n const visible = candidates.filter(el => el.isConnected && el.getClientRects().length > 0 && !el.closest('[hidden],[aria-hidden=\"true\"]'));\n const pool = visible.length > 0 ? visible : candidates.filter(el => el.isConnected);\n return pool[pool.length - 1] ?? candidates[candidates.length - 1];\n}\nfunction listFieldControlsInRenderTree(root) {\n const renderRoot = root.querySelector(\".rui-field\");\n if (!(renderRoot instanceof HTMLElement)) {\n return [];\n }\n return Array.from(renderRoot.querySelectorAll(CONTROL_SELECTOR)).filter(el => root.contains(el));\n}\nexport function findFieldControl(root) {\n const fromRenderTree = pickPrimaryFieldControl(listFieldControlsInRenderTree(root));\n if (fromRenderTree) {\n return fromRenderTree;\n }\n let found = null;\n forEachFieldContentNode(root, node => {\n if (found) {\n return;\n }\n const match = findControlInSubtree(node);\n if (match) {\n found = match;\n }\n });\n if (found) {\n return found;\n }\n const renderRoot = root.querySelector(\".rui-field\") ?? root;\n return findControlInSubtree(renderRoot);\n}\nfunction findControlInSubtree(node) {\n if (!(node instanceof HTMLElement)) {\n return null;\n }\n if (node.matches(`[${RUI_CONTROL_ATTR}]`) || HOST_CONTROL_TAGS.has(node.localName)) {\n return node;\n }\n return node.querySelector(CONTROL_SELECTOR);\n}\nexport function readControlValue(control) {\n if (isNativeInput(control)) {\n const host2 = resolveControlHost(control);\n const adapter = host2 === control ? void 0 : CONTROL_VALUE_ADAPTERS.get(host2.localName);\n if (adapter) {\n return adapter.read(host2);\n }\n if (control.type === \"checkbox\") {\n return control.checked;\n }\n if (control.type === \"number\" || control.type === \"range\") {\n return control.value === \"\" ? \"\" : Number(control.value);\n }\n return control.value;\n }\n if (isNativeTextarea(control)) {\n return control.value;\n }\n const host = resolveControlHost(control);\n return CONTROL_VALUE_ADAPTERS.get(host.localName)?.read(host) ?? host.getAttribute(\"value\") ?? \"\";\n}\nexport function writeControlValue(control, value) {\n if (isNativeInput(control)) {\n const host2 = resolveControlHost(control);\n const adapter = host2 === control ? void 0 : CONTROL_VALUE_ADAPTERS.get(host2.localName);\n if (adapter) {\n adapter.write(host2, value);\n return;\n }\n if (control.type === \"checkbox\") {\n control.checked = Boolean(value);\n const ce = control.closest(\"rui-checkbox, rui-switch\");\n if (ce) {\n if (value) {\n ce.setAttribute(\"checked\", \"\");\n } else {\n ce.removeAttribute(\"checked\");\n }\n }\n return;\n }\n control.value = value == null ? \"\" : String(value);\n return;\n }\n if (isNativeTextarea(control)) {\n control.value = value == null ? \"\" : String(value);\n return;\n }\n const host = resolveControlHost(control);\n CONTROL_VALUE_ADAPTERS.get(host.localName)?.write(host, value);\n}\nfunction resolveControlHost(control) {\n if (control.hasAttribute(RUI_CONTROL_ATTR)) {\n const host = control.closest(Array.from(HOST_CONTROL_TAGS).join(\",\"));\n return host ?? control;\n }\n return control;\n}\nexport function findFieldLabel(root) {\n return queryFieldContent(root, `[${RUI_FIELD_LABEL_ATTR}], label.rui-label`);\n}\nexport function findFieldDescription(root) {\n return queryFieldContent(root, `[${RUI_FIELD_DESCRIPTION_ATTR}]`);\n}\nexport function findFieldError(root) {\n const all = findFieldErrorElements(root);\n return all[0] ?? null;\n}\nexport function findFieldErrorElements(root) {\n const renderRoot = root.querySelector(\".rui-field\");\n if (renderRoot instanceof HTMLElement) {\n const inRender = Array.from(renderRoot.querySelectorAll(`[${RUI_FIELD_ERROR_ATTR}]`));\n const visible = inRender.filter(el => el.getClientRects().length > 0);\n if (visible.length > 0) {\n return visible;\n }\n if (inRender.length > 0) {\n return inRender;\n }\n }\n const fromDom = Array.from(root.querySelectorAll(`[${RUI_FIELD_ERROR_ATTR}]`));\n if (fromDom.length > 0) {\n return fromDom;\n }\n const single = queryFieldContent(root, `[${RUI_FIELD_ERROR_ATTR}]`);\n return single ? [single] : [];\n}\nexport function wireFieldControlName(controlHost, ariaTarget, name) {\n if (!name) {\n return;\n }\n if (ariaTarget && isNativeTextControl(ariaTarget)) {\n ariaTarget.name = name;\n }\n if (!controlHost) {\n return;\n }\n if (controlHost === ariaTarget) {\n return;\n }\n if (HOST_CONTROL_TAGS.has(controlHost.localName)) {\n controlHost.setAttribute(\"name\", name);\n }\n}\nfunction isChecked(input) {\n const checked = Reflect.get(input, \"checked\");\n return typeof checked === \"boolean\" ? checked : input.hasAttribute(\"checked\");\n}\nexport function getAriaControlTarget(control) {\n if (isNativeTextControl(control)) {\n return control;\n }\n if (control.hasAttribute(RUI_CONTROL_ATTR)) {\n return control;\n }\n const marked = control.querySelector(`[${RUI_CONTROL_ATTR}]`);\n if (marked) {\n return marked;\n }\n if (control.localName === \"rui-combobox\") {\n return control.querySelector(\"[data-combobox-input]\") ?? control;\n }\n if (control.localName === \"rui-date-field\") {\n return control.querySelector(\"[data-date-field-input]\") ?? control;\n }\n if (control.localName === \"rui-date-range-picker\") {\n return control.querySelector(\"[data-range-start]\") ?? control;\n }\n if (control.localName === \"rui-select\") {\n return control.querySelector(\"[data-select-trigger]\") ?? control;\n }\n if (control.localName === \"rui-tag-group\") {\n return control.querySelector(\"[data-tag-list]\") ?? control;\n }\n if (control.localName === \"rui-number-field\") {\n return control.querySelector(\"[data-number-field-input], input\") ?? control;\n }\n if (control.localName === \"rui-slider\") {\n return control.querySelector('input[type=\"range\"]') ?? control;\n }\n if (control.localName === \"rui-checkbox\" || control.localName === \"rui-switch\") {\n return control.querySelector(\"input\") ?? control;\n }\n if (control.localName === \"rui-radio-group\") {\n const radios = control.querySelectorAll('input[type=\"radio\"]');\n for (const radio of radios) {\n if (isChecked(radio)) {\n return radio;\n }\n }\n return radios[0] ?? control;\n }\n return control;\n}"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "cx", "parts", "DEFAULT_DEFINITIONS", "LETTER", "resolveDefinition", "char", "definitions", "custom", "builtIn", "matchesInput", "kind", "pattern", "parseMaskPatternInternal", "optional", "tokens", "index", "next", "end", "findClosingBracket", "inner", "definition", "start", "depth", "parseMaskPattern", "maskInputSlotCount", "options", "token", "maskToPlaceholder", "pattern", "definitions", "tokens", "parseMaskPattern", "result", "token", "extractMaskInput", "masked", "input", "cursor", "char", "matchesInput", "formatWithMask", "input", "tokens", "inputIndex", "result", "token", "char", "matchesInput", "isDigitOnlyPattern", "looseInputFromRaw", "raw", "loose", "fixedDigits", "applyInputMask", "pattern", "definitions", "parseMaskPattern", "capacity", "maskInputSlotCount", "extractMaskInput", "RUI_CONTROL_ATTR", "HOST_CONTROL_TAGS", "CONTROL_SELECTOR", "RUI_CONTROL_ATTR", "RuiInput", "props", "className", "type", "mask", "placeholder", "onInput", "host", "resolvedPlaceholder", "maskToPlaceholder", "jsx", "event", "input", "applyInputMask", "RUI_CONTROL_ATTR", "cx"]
7
7
  }
@@ -11,8 +11,9 @@
11
11
  --tw-outline-style: none;
12
12
  outline-style: none;
13
13
  border-radius: var(--radius-control);
14
+ height: var(--size-control-md);
14
15
  padding-inline: var(--space-control-x);
15
- padding-block: var(--space-control-y);
16
+ padding-block: 0;
16
17
  font-size: var(--text-control, 0.875rem);
17
18
  transition-duration: var(--duration-normal);
18
19
  }
@@ -28,12 +29,6 @@
28
29
  .rui-input[aria-invalid='true'] {
29
30
  border-color: var(--color-error, var(--error));
30
31
  }
31
- .rui-input--sm {
32
- padding-block: calc(var(--space-control-y) * 0.75);
33
- }
34
- .rui-input--lg {
35
- padding-block: calc(var(--space-control-y) * 1.25);
36
- }
37
32
  }
38
33
  @property --tw-border-style {
39
34
  syntax: "*";
@@ -1,12 +1,10 @@
1
1
  import type { JsxHtmlProps } from '@ecopages/jsx';
2
- export type RuiInputSize = 'sm' | 'md' | 'lg';
3
2
  export type RuiInputProps = JsxHtmlProps<{
4
3
  value?: string;
5
4
  type?: string;
6
5
  placeholder?: string;
7
6
  disabled?: boolean;
8
7
  name?: string;
9
- size?: RuiInputSize;
10
8
  id?: string;
11
9
  'aria-label'?: string;
12
10
  /**
@@ -25,5 +23,12 @@ export type RuiInputProps = JsxHtmlProps<{
25
23
  *
26
24
  * Pass `mask` to guide entry with an [IMask](https://imask.js.org/guide.html#masked-pattern) pattern.
27
25
  * No custom element — Field owns labeling, `aria-*`, and validation wiring.
26
+ *
27
+ * @remarks
28
+ * Sets `data-rui-control` for `RuiField` discovery. Height uses `--size-control-md`
29
+ * (shared with `RuiButton`) and `--radius-control` corners so form rows align.
30
+ * Invalid state styles key off `aria-invalid` via the `error` role.
31
+ *
32
+ * @cssclass rui-input - Input root; control-height, rounded, bordered surface.
28
33
  */
29
34
  export declare function RuiInput(props: RuiInputProps): import("@ecopages/jsx").JsxRenderable;
@@ -1,2 +1,2 @@
1
- import{jsx as c}from"@ecopages/jsx/jsx-runtime";function n(...e){return e.filter(Boolean).join(" ")}var o=Symbol.for("@ecopages/storybook-radiant.viewModule");function u(e,i,t){let r=e;return r[o]=t,e}var f="data-rui-control";var a="data-rui-field-label";var s=new Set(["rui-combobox","rui-date-field","rui-date-range-picker","rui-select","rui-tag-group","rui-checkbox","rui-switch","rui-radio-group","rui-slider","rui-number-field","rui-listbox"]),p=`[${f}], ${Array.from(s).join(", ")}, input, textarea`;function l({children:e,htmlFor:i,class:t,...r}){return c("label",{...r,[a]:"",class:n("rui-label",t),htmlFor:i,children:e})}u(l,["./label.css"],import.meta.url);export{l as RuiLabel};
1
+ import{jsx as f}from"@ecopages/jsx/jsx-runtime";function t(...e){return e.filter(Boolean).join(" ")}var l="data-rui-control";var r="data-rui-field-label";var a=new Set(["rui-combobox","rui-date-field","rui-date-range-picker","rui-select","rui-tag-group","rui-checkbox","rui-switch","rui-radio-group","rui-slider","rui-number-field","rui-listbox"]),s=`[${l}], ${Array.from(a).join(", ")}`;function c({children:e,htmlFor:i,class:n,...u}){return f("label",{...u,[r]:"",class:t("rui-label",n),htmlFor:i,children:e})}export{c as RuiLabel};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../src/components/ui/label/label.tsx", "../../../../src/lib/cx.ts", "../../../../src/lib/radiant-view.ts", "../../../../src/components/ui/form/control-protocol.ts"],
4
- "sourcesContent": ["import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { attachRadiantStylesheets } from \"@/lib/radiant-view\";\nimport { RUI_FIELD_LABEL_ATTR } from \"../form/control-protocol\";\nexport function RuiLabel({\n children,\n htmlFor,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"label\", {\n ...props,\n ...{\n [RUI_FIELD_LABEL_ATTR]: \"\"\n },\n class: cx(\"rui-label\", className),\n htmlFor,\n children\n });\n}\nattachRadiantStylesheets(RuiLabel, [\"./label.css\"], import.meta.url);", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "const RADIANT_VIEW_ELEMENT = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.viewElement\");\nconst RADIANT_SCRIPT_MODULE = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.scriptModule\");\nconst RADIANT_SCRIPT_EXPORT = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.scriptExport\");\nconst RADIANT_VIEW_MODULE = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.viewModule\");\nfunction linkViewToElement(view, element) {\n view[RADIANT_VIEW_ELEMENT] = element;\n const ssrModule = element[RADIANT_SCRIPT_MODULE];\n if (ssrModule) {\n view[RADIANT_SCRIPT_MODULE] = ssrModule;\n view[RADIANT_SCRIPT_EXPORT] = element[RADIANT_SCRIPT_EXPORT] ?? element.name;\n }\n}\nexport function defineRadiantView(element, render, _options) {\n const view = args => render(args);\n linkViewToElement(view, element);\n return view;\n}\nexport function attachRadiantStylesheets(target, _stylesheets, moduleUrl) {\n const view = target;\n view[RADIANT_VIEW_MODULE] = moduleUrl;\n return target;\n}\nexport function syncRadiantViewMetadata(view) {\n const element = view[RADIANT_VIEW_ELEMENT];\n if (element) {\n linkViewToElement(view, element);\n }\n}", "export const RUI_CONTROL_ATTR = \"data-rui-control\";\nexport const RUI_FIELD_MANAGED_ATTR = \"data-rui-field-managed\";\nexport const RUI_FIELD_LABEL_ATTR = \"data-rui-field-label\";\nexport const RUI_FIELD_DESCRIPTION_ATTR = \"data-rui-field-description\";\nexport const RUI_FIELD_ERROR_ATTR = \"data-rui-field-error\";\nexport const RUI_FIELD_DEFAULT_VALUE_ATTR = \"data-default-value\";\nexport const RUI_FORM_DEFAULT_VALUES_ATTR = \"data-default-values\";\nconst HOST_CONTROL_TAGS = /* @__PURE__ */new Set([\"rui-combobox\", \"rui-date-field\", \"rui-date-range-picker\", \"rui-select\", \"rui-tag-group\", \"rui-checkbox\", \"rui-switch\", \"rui-radio-group\", \"rui-slider\", \"rui-number-field\", \"rui-listbox\"]);\nconst CONTROL_SELECTOR = `[${RUI_CONTROL_ATTR}], ${Array.from(HOST_CONTROL_TAGS).join(\", \")}, input, textarea`;\nconst stringValueAdapter = {\n read: host => {\n const value = Reflect.get(host, \"value\");\n return typeof value === \"string\" ? value : host.getAttribute(\"value\") ?? \"\";\n },\n write: (host, value) => {\n const next = value == null ? \"\" : String(value);\n host.setAttribute(\"value\", next);\n if (\"value\" in host) {\n Reflect.set(host, \"value\", next);\n }\n }\n};\nconst numberValueAdapter = {\n read: host => {\n const value = Reflect.get(host, \"value\");\n if (typeof value === \"number\") {\n return value;\n }\n const raw = host.getAttribute(\"value\");\n return raw == null || raw === \"\" ? \"\" : Number(raw);\n },\n write: (host, value) => {\n const next = value == null ? \"\" : String(value);\n host.setAttribute(\"value\", next);\n if (\"value\" in host) {\n Reflect.set(host, \"value\", value);\n }\n }\n};\nconst booleanValueAdapter = {\n read: host => {\n const input = host.querySelector('input[type=\"checkbox\"]');\n return input?.checked ?? host.hasAttribute(\"checked\");\n },\n write: (host, value) => {\n if (value) {\n host.setAttribute(\"checked\", \"\");\n } else {\n host.removeAttribute(\"checked\");\n }\n }\n};\nconst CONTROL_VALUE_ADAPTERS = /* @__PURE__ */new Map([[\"rui-checkbox\", booleanValueAdapter], [\"rui-switch\", booleanValueAdapter], [\"rui-combobox\", stringValueAdapter], [\"rui-date-field\", stringValueAdapter], [\"rui-date-range-picker\", stringValueAdapter], [\"rui-select\", stringValueAdapter], [\"rui-radio-group\", stringValueAdapter], [\"rui-listbox\", stringValueAdapter], [\"rui-tag-group\", stringValueAdapter], [\"rui-slider\", numberValueAdapter], [\"rui-number-field\", numberValueAdapter]]);\nfunction forEachFieldContentNode(root, visit) {\n const slotHost = root;\n const visited = /* @__PURE__ */new Set();\n const safeVisit = node => {\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n visit(node);\n };\n if (typeof slotHost.getSlotElements === \"function\") {\n for (const node of slotHost.getSlotElements()) {\n safeVisit(node);\n }\n }\n const renderRoot = root.querySelector(\".rui-field\") ?? root;\n for (const child of Array.from(renderRoot.children)) {\n safeVisit(child);\n }\n for (const node of renderRoot.querySelectorAll(\"*\")) {\n safeVisit(node);\n }\n for (const child of Array.from(root.children)) {\n safeVisit(child);\n }\n const shadow = root.shadowRoot;\n if (shadow) {\n for (const child of Array.from(shadow.children)) {\n safeVisit(child);\n }\n }\n}\nfunction queryFieldContent(root, selector) {\n let found = null;\n forEachFieldContentNode(root, node => {\n if (found || !(node instanceof HTMLElement)) {\n return;\n }\n if (node.matches(selector)) {\n found = node;\n return;\n }\n found = node.querySelector(selector);\n });\n return found;\n}\nfunction pickPrimaryFieldControl(candidates) {\n if (candidates.length === 0) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0];\n }\n const hostControl = candidates.find(candidate => HOST_CONTROL_TAGS.has(candidate.localName));\n const markedControl = candidates.find(candidate => candidate.hasAttribute(RUI_CONTROL_ATTR));\n if (markedControl) {\n return markedControl;\n }\n if (hostControl) {\n return hostControl;\n }\n const active = document.activeElement;\n if (active instanceof HTMLElement) {\n for (const candidate of candidates) {\n if (candidate === active || candidate.contains(active)) {\n return candidate;\n }\n }\n }\n const visible = candidates.filter(el => el.isConnected && el.getClientRects().length > 0 && !el.closest('[hidden],[aria-hidden=\"true\"]'));\n const pool = visible.length > 0 ? visible : candidates.filter(el => el.isConnected);\n return pool[pool.length - 1] ?? candidates[candidates.length - 1];\n}\nfunction listFieldControlsInRenderTree(root) {\n const renderRoot = root.querySelector(\".rui-field\");\n if (!(renderRoot instanceof HTMLElement)) {\n return [];\n }\n return Array.from(renderRoot.querySelectorAll(CONTROL_SELECTOR)).filter(el => root.contains(el));\n}\nexport function findFieldControl(root) {\n const fromRenderTree = pickPrimaryFieldControl(listFieldControlsInRenderTree(root));\n if (fromRenderTree) {\n return fromRenderTree;\n }\n let found = null;\n forEachFieldContentNode(root, node => {\n if (found) {\n return;\n }\n const match = findControlInSubtree(node);\n if (match) {\n found = match;\n }\n });\n if (found) {\n return found;\n }\n const renderRoot = root.querySelector(\".rui-field\") ?? root;\n return findControlInSubtree(renderRoot);\n}\nfunction findControlInSubtree(node) {\n if (!(node instanceof HTMLElement)) {\n return null;\n }\n if (node.matches(`[${RUI_CONTROL_ATTR}]`)) {\n return node;\n }\n if (HOST_CONTROL_TAGS.has(node.localName)) {\n return node;\n }\n if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) {\n return node;\n }\n const nested = node.querySelector(CONTROL_SELECTOR);\n return nested;\n}\nexport function readControlValue(control) {\n if (control instanceof HTMLInputElement) {\n const host2 = resolveControlHost(control);\n const adapter = host2 === control ? void 0 : CONTROL_VALUE_ADAPTERS.get(host2.localName);\n if (adapter) {\n return adapter.read(host2);\n }\n if (control.type === \"checkbox\") {\n return control.checked;\n }\n if (control.type === \"number\" || control.type === \"range\") {\n return control.value === \"\" ? \"\" : Number(control.value);\n }\n return control.value;\n }\n if (control instanceof HTMLTextAreaElement) {\n return control.value;\n }\n const host = resolveControlHost(control);\n return CONTROL_VALUE_ADAPTERS.get(host.localName)?.read(host) ?? host.getAttribute(\"value\") ?? \"\";\n}\nexport function writeControlValue(control, value) {\n if (control instanceof HTMLInputElement) {\n const host2 = resolveControlHost(control);\n const adapter = host2 === control ? void 0 : CONTROL_VALUE_ADAPTERS.get(host2.localName);\n if (adapter) {\n adapter.write(host2, value);\n return;\n }\n if (control.type === \"checkbox\") {\n control.checked = Boolean(value);\n const ce = control.closest(\"rui-checkbox, rui-switch\");\n if (ce) {\n if (value) {\n ce.setAttribute(\"checked\", \"\");\n } else {\n ce.removeAttribute(\"checked\");\n }\n }\n return;\n }\n control.value = value == null ? \"\" : String(value);\n return;\n }\n if (control instanceof HTMLTextAreaElement) {\n control.value = value == null ? \"\" : String(value);\n return;\n }\n const host = resolveControlHost(control);\n CONTROL_VALUE_ADAPTERS.get(host.localName)?.write(host, value);\n}\nfunction resolveControlHost(control) {\n if (control.hasAttribute(RUI_CONTROL_ATTR)) {\n const host = control.closest(Array.from(HOST_CONTROL_TAGS).join(\",\"));\n return host ?? control;\n }\n return control;\n}\nexport function findFieldLabel(root) {\n return queryFieldContent(root, `[${RUI_FIELD_LABEL_ATTR}], label.rui-label`);\n}\nexport function findFieldDescription(root) {\n return queryFieldContent(root, `[${RUI_FIELD_DESCRIPTION_ATTR}]`);\n}\nexport function findFieldError(root) {\n const all = findFieldErrorElements(root);\n return all[0] ?? null;\n}\nexport function findFieldErrorElements(root) {\n const renderRoot = root.querySelector(\".rui-field\");\n if (renderRoot instanceof HTMLElement) {\n const inRender = Array.from(renderRoot.querySelectorAll(`[${RUI_FIELD_ERROR_ATTR}]`));\n const visible = inRender.filter(el => el.getClientRects().length > 0);\n if (visible.length > 0) {\n return visible;\n }\n if (inRender.length > 0) {\n return inRender;\n }\n }\n const fromDom = Array.from(root.querySelectorAll(`[${RUI_FIELD_ERROR_ATTR}]`));\n if (fromDom.length > 0) {\n return fromDom;\n }\n const single = queryFieldContent(root, `[${RUI_FIELD_ERROR_ATTR}]`);\n return single ? [single] : [];\n}\nexport function wireFieldControlName(controlHost, ariaTarget, name) {\n if (!name) {\n return;\n }\n if (ariaTarget instanceof HTMLInputElement || ariaTarget instanceof HTMLTextAreaElement) {\n ariaTarget.name = name;\n }\n if (!controlHost) {\n return;\n }\n if (controlHost === ariaTarget) {\n return;\n }\n if (HOST_CONTROL_TAGS.has(controlHost.localName)) {\n controlHost.setAttribute(\"name\", name);\n }\n}\nexport function getAriaControlTarget(control) {\n if (control instanceof HTMLInputElement || control instanceof HTMLTextAreaElement) {\n return control;\n }\n if (control.hasAttribute(RUI_CONTROL_ATTR)) {\n return control;\n }\n const marked = control.querySelector(`[${RUI_CONTROL_ATTR}]`);\n if (marked) {\n return marked;\n }\n if (control.localName === \"rui-combobox\") {\n return control.querySelector(\"[data-combobox-input]\") ?? control;\n }\n if (control.localName === \"rui-date-field\") {\n return control.querySelector(\"[data-date-field-input]\") ?? control;\n }\n if (control.localName === \"rui-date-range-picker\") {\n return control.querySelector(\"[data-range-start]\") ?? control;\n }\n if (control.localName === \"rui-select\") {\n return control.querySelector(\"[data-select-trigger]\") ?? control;\n }\n if (control.localName === \"rui-tag-group\") {\n return control.querySelector(\"[data-tag-list]\") ?? control;\n }\n if (control.localName === \"rui-number-field\") {\n return control.querySelector(\"[data-number-field-input], input\") ?? control;\n }\n if (control.localName === \"rui-slider\") {\n return control.querySelector('input[type=\"range\"]') ?? control;\n }\n if (control.localName === \"rui-checkbox\" || control.localName === \"rui-switch\") {\n return control.querySelector(\"input\") ?? control;\n }\n if (control.localName === \"rui-radio-group\") {\n const checked = control.querySelector('input[type=\"radio\"]:checked');\n const first = control.querySelector('input[type=\"radio\"]');\n return checked ?? first ?? control;\n }\n return control;\n}"],
5
- "mappings": "AAAA,OAAS,OAAAA,MAAW,4BCAb,SAASC,KAAMC,EAAO,CAC3B,OAAOA,EAAM,OAAO,OAAO,EAAE,KAAK,GAAG,CACvC,CCCA,IAAMC,EAAqC,OAAO,IAAI,wCAAwC,EAcvF,SAASC,EAAyBC,EAAQC,EAAcC,EAAW,CACxE,IAAMC,EAAOH,EACb,OAAAG,EAAKC,CAAmB,EAAIF,EACrBF,CACT,CCrBO,IAAMK,EAAmB,mBAEzB,IAAMC,EAAuB,uBAKpC,IAAMC,EAAmC,IAAI,IAAI,CAAC,eAAgB,iBAAkB,wBAAyB,aAAc,gBAAiB,eAAgB,aAAc,kBAAmB,aAAc,mBAAoB,aAAa,CAAC,EACvOC,EAAmB,IAAIC,CAAgB,MAAM,MAAM,KAAKF,CAAiB,EAAE,KAAK,IAAI,CAAC,oBHJpF,SAASG,EAAS,CACvB,SAAAC,EACA,QAAAC,EACA,MAAOC,EACP,GAAGC,CACL,EAAG,CACD,OAAsBC,EAAI,QAAS,CACjC,GAAGD,EAED,CAACE,CAAoB,EAAG,GAE1B,MAAOC,EAAG,YAAaJ,CAAS,EAChC,QAAAD,EACA,SAAAD,CACF,CAAC,CACH,CACAO,EAAyBR,EAAU,CAAC,aAAa,EAAG,YAAY,GAAG",
6
- "names": ["jsx", "cx", "parts", "RADIANT_VIEW_MODULE", "attachRadiantStylesheets", "target", "_stylesheets", "moduleUrl", "view", "RADIANT_VIEW_MODULE", "RUI_CONTROL_ATTR", "RUI_FIELD_LABEL_ATTR", "HOST_CONTROL_TAGS", "CONTROL_SELECTOR", "RUI_CONTROL_ATTR", "RuiLabel", "children", "htmlFor", "className", "props", "jsx", "RUI_FIELD_LABEL_ATTR", "cx", "attachRadiantStylesheets"]
3
+ "sources": ["../../../../src/components/ui/label/label.tsx", "../../../../src/lib/cx.ts", "../../../../src/components/ui/form/control-protocol.ts"],
4
+ "sourcesContent": ["import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { RUI_FIELD_LABEL_ATTR } from \"../form/control-protocol\";\nexport function RuiLabel({\n children,\n htmlFor,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"label\", {\n ...props,\n ...{\n [RUI_FIELD_LABEL_ATTR]: \"\"\n },\n class: cx(\"rui-label\", className),\n htmlFor,\n children\n });\n}", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "export const RUI_CONTROL_ATTR = \"data-rui-control\";\nexport const RUI_FIELD_MANAGED_ATTR = \"data-rui-field-managed\";\nexport const RUI_FIELD_LABEL_ATTR = \"data-rui-field-label\";\nexport const RUI_FIELD_DESCRIPTION_ATTR = \"data-rui-field-description\";\nexport const RUI_FIELD_ERROR_ATTR = \"data-rui-field-error\";\nexport const RUI_FIELD_DEFAULT_VALUE_ATTR = \"data-default-value\";\nexport const RUI_FORM_DEFAULT_VALUES_ATTR = \"data-default-values\";\nconst HOST_CONTROL_TAGS = /* @__PURE__ */new Set([\"rui-combobox\", \"rui-date-field\", \"rui-date-range-picker\", \"rui-select\", \"rui-tag-group\", \"rui-checkbox\", \"rui-switch\", \"rui-radio-group\", \"rui-slider\", \"rui-number-field\", \"rui-listbox\"]);\nconst CONTROL_SELECTOR = `[${RUI_CONTROL_ATTR}], ${Array.from(HOST_CONTROL_TAGS).join(\", \")}`;\nexport function isNativeTextControl(node) {\n return node.localName === \"input\" || node.localName === \"textarea\";\n}\nfunction isNativeInput(node) {\n return node.localName === \"input\";\n}\nfunction isNativeTextarea(node) {\n return node.localName === \"textarea\";\n}\nconst stringValueAdapter = {\n read: host => {\n const value = Reflect.get(host, \"value\");\n return typeof value === \"string\" ? value : host.getAttribute(\"value\") ?? \"\";\n },\n write: (host, value) => {\n const next = value == null ? \"\" : String(value);\n host.setAttribute(\"value\", next);\n if (\"value\" in host) {\n Reflect.set(host, \"value\", next);\n }\n }\n};\nconst numberValueAdapter = {\n read: host => {\n const value = Reflect.get(host, \"value\");\n if (typeof value === \"number\") {\n return value;\n }\n const raw = host.getAttribute(\"value\");\n return raw == null || raw === \"\" ? \"\" : Number(raw);\n },\n write: (host, value) => {\n const next = value == null ? \"\" : String(value);\n host.setAttribute(\"value\", next);\n if (\"value\" in host) {\n Reflect.set(host, \"value\", value);\n }\n }\n};\nconst booleanValueAdapter = {\n read: host => {\n const input = host.querySelector('input[type=\"checkbox\"]');\n return input?.checked ?? host.hasAttribute(\"checked\");\n },\n write: (host, value) => {\n if (value) {\n host.setAttribute(\"checked\", \"\");\n } else {\n host.removeAttribute(\"checked\");\n }\n }\n};\nconst CONTROL_VALUE_ADAPTERS = /* @__PURE__ */new Map([[\"rui-checkbox\", booleanValueAdapter], [\"rui-switch\", booleanValueAdapter], [\"rui-combobox\", stringValueAdapter], [\"rui-date-field\", stringValueAdapter], [\"rui-date-range-picker\", stringValueAdapter], [\"rui-select\", stringValueAdapter], [\"rui-radio-group\", stringValueAdapter], [\"rui-listbox\", stringValueAdapter], [\"rui-tag-group\", stringValueAdapter], [\"rui-slider\", numberValueAdapter], [\"rui-number-field\", numberValueAdapter]]);\nfunction forEachFieldContentNode(root, visit) {\n const slotHost = root;\n const visited = /* @__PURE__ */new Set();\n const safeVisit = node => {\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n visit(node);\n };\n if (typeof slotHost.getSlotElements === \"function\") {\n for (const node of slotHost.getSlotElements()) {\n safeVisit(node);\n }\n }\n const renderRoot = root.querySelector(\".rui-field\") ?? root;\n for (const child of Array.from(renderRoot.children)) {\n safeVisit(child);\n }\n for (const node of renderRoot.querySelectorAll(\"*\")) {\n safeVisit(node);\n }\n for (const child of Array.from(root.children)) {\n safeVisit(child);\n }\n const shadow = root.shadowRoot;\n if (shadow) {\n for (const child of Array.from(shadow.children)) {\n safeVisit(child);\n }\n }\n}\nfunction queryFieldContent(root, selector) {\n let found = null;\n forEachFieldContentNode(root, node => {\n if (found || !(node instanceof HTMLElement)) {\n return;\n }\n if (node.matches(selector)) {\n found = node;\n return;\n }\n found = node.querySelector(selector);\n });\n return found;\n}\nfunction pickPrimaryFieldControl(candidates) {\n if (candidates.length === 0) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0];\n }\n const hostControl = candidates.find(candidate => HOST_CONTROL_TAGS.has(candidate.localName));\n const markedControl = candidates.find(candidate => candidate.hasAttribute(RUI_CONTROL_ATTR));\n if (markedControl) {\n return markedControl;\n }\n if (hostControl) {\n return hostControl;\n }\n const active = document.activeElement;\n if (active instanceof HTMLElement) {\n for (const candidate of candidates) {\n if (candidate === active || candidate.contains(active)) {\n return candidate;\n }\n }\n }\n const visible = candidates.filter(el => el.isConnected && el.getClientRects().length > 0 && !el.closest('[hidden],[aria-hidden=\"true\"]'));\n const pool = visible.length > 0 ? visible : candidates.filter(el => el.isConnected);\n return pool[pool.length - 1] ?? candidates[candidates.length - 1];\n}\nfunction listFieldControlsInRenderTree(root) {\n const renderRoot = root.querySelector(\".rui-field\");\n if (!(renderRoot instanceof HTMLElement)) {\n return [];\n }\n return Array.from(renderRoot.querySelectorAll(CONTROL_SELECTOR)).filter(el => root.contains(el));\n}\nexport function findFieldControl(root) {\n const fromRenderTree = pickPrimaryFieldControl(listFieldControlsInRenderTree(root));\n if (fromRenderTree) {\n return fromRenderTree;\n }\n let found = null;\n forEachFieldContentNode(root, node => {\n if (found) {\n return;\n }\n const match = findControlInSubtree(node);\n if (match) {\n found = match;\n }\n });\n if (found) {\n return found;\n }\n const renderRoot = root.querySelector(\".rui-field\") ?? root;\n return findControlInSubtree(renderRoot);\n}\nfunction findControlInSubtree(node) {\n if (!(node instanceof HTMLElement)) {\n return null;\n }\n if (node.matches(`[${RUI_CONTROL_ATTR}]`) || HOST_CONTROL_TAGS.has(node.localName)) {\n return node;\n }\n return node.querySelector(CONTROL_SELECTOR);\n}\nexport function readControlValue(control) {\n if (isNativeInput(control)) {\n const host2 = resolveControlHost(control);\n const adapter = host2 === control ? void 0 : CONTROL_VALUE_ADAPTERS.get(host2.localName);\n if (adapter) {\n return adapter.read(host2);\n }\n if (control.type === \"checkbox\") {\n return control.checked;\n }\n if (control.type === \"number\" || control.type === \"range\") {\n return control.value === \"\" ? \"\" : Number(control.value);\n }\n return control.value;\n }\n if (isNativeTextarea(control)) {\n return control.value;\n }\n const host = resolveControlHost(control);\n return CONTROL_VALUE_ADAPTERS.get(host.localName)?.read(host) ?? host.getAttribute(\"value\") ?? \"\";\n}\nexport function writeControlValue(control, value) {\n if (isNativeInput(control)) {\n const host2 = resolveControlHost(control);\n const adapter = host2 === control ? void 0 : CONTROL_VALUE_ADAPTERS.get(host2.localName);\n if (adapter) {\n adapter.write(host2, value);\n return;\n }\n if (control.type === \"checkbox\") {\n control.checked = Boolean(value);\n const ce = control.closest(\"rui-checkbox, rui-switch\");\n if (ce) {\n if (value) {\n ce.setAttribute(\"checked\", \"\");\n } else {\n ce.removeAttribute(\"checked\");\n }\n }\n return;\n }\n control.value = value == null ? \"\" : String(value);\n return;\n }\n if (isNativeTextarea(control)) {\n control.value = value == null ? \"\" : String(value);\n return;\n }\n const host = resolveControlHost(control);\n CONTROL_VALUE_ADAPTERS.get(host.localName)?.write(host, value);\n}\nfunction resolveControlHost(control) {\n if (control.hasAttribute(RUI_CONTROL_ATTR)) {\n const host = control.closest(Array.from(HOST_CONTROL_TAGS).join(\",\"));\n return host ?? control;\n }\n return control;\n}\nexport function findFieldLabel(root) {\n return queryFieldContent(root, `[${RUI_FIELD_LABEL_ATTR}], label.rui-label`);\n}\nexport function findFieldDescription(root) {\n return queryFieldContent(root, `[${RUI_FIELD_DESCRIPTION_ATTR}]`);\n}\nexport function findFieldError(root) {\n const all = findFieldErrorElements(root);\n return all[0] ?? null;\n}\nexport function findFieldErrorElements(root) {\n const renderRoot = root.querySelector(\".rui-field\");\n if (renderRoot instanceof HTMLElement) {\n const inRender = Array.from(renderRoot.querySelectorAll(`[${RUI_FIELD_ERROR_ATTR}]`));\n const visible = inRender.filter(el => el.getClientRects().length > 0);\n if (visible.length > 0) {\n return visible;\n }\n if (inRender.length > 0) {\n return inRender;\n }\n }\n const fromDom = Array.from(root.querySelectorAll(`[${RUI_FIELD_ERROR_ATTR}]`));\n if (fromDom.length > 0) {\n return fromDom;\n }\n const single = queryFieldContent(root, `[${RUI_FIELD_ERROR_ATTR}]`);\n return single ? [single] : [];\n}\nexport function wireFieldControlName(controlHost, ariaTarget, name) {\n if (!name) {\n return;\n }\n if (ariaTarget && isNativeTextControl(ariaTarget)) {\n ariaTarget.name = name;\n }\n if (!controlHost) {\n return;\n }\n if (controlHost === ariaTarget) {\n return;\n }\n if (HOST_CONTROL_TAGS.has(controlHost.localName)) {\n controlHost.setAttribute(\"name\", name);\n }\n}\nfunction isChecked(input) {\n const checked = Reflect.get(input, \"checked\");\n return typeof checked === \"boolean\" ? checked : input.hasAttribute(\"checked\");\n}\nexport function getAriaControlTarget(control) {\n if (isNativeTextControl(control)) {\n return control;\n }\n if (control.hasAttribute(RUI_CONTROL_ATTR)) {\n return control;\n }\n const marked = control.querySelector(`[${RUI_CONTROL_ATTR}]`);\n if (marked) {\n return marked;\n }\n if (control.localName === \"rui-combobox\") {\n return control.querySelector(\"[data-combobox-input]\") ?? control;\n }\n if (control.localName === \"rui-date-field\") {\n return control.querySelector(\"[data-date-field-input]\") ?? control;\n }\n if (control.localName === \"rui-date-range-picker\") {\n return control.querySelector(\"[data-range-start]\") ?? control;\n }\n if (control.localName === \"rui-select\") {\n return control.querySelector(\"[data-select-trigger]\") ?? control;\n }\n if (control.localName === \"rui-tag-group\") {\n return control.querySelector(\"[data-tag-list]\") ?? control;\n }\n if (control.localName === \"rui-number-field\") {\n return control.querySelector(\"[data-number-field-input], input\") ?? control;\n }\n if (control.localName === \"rui-slider\") {\n return control.querySelector('input[type=\"range\"]') ?? control;\n }\n if (control.localName === \"rui-checkbox\" || control.localName === \"rui-switch\") {\n return control.querySelector(\"input\") ?? control;\n }\n if (control.localName === \"rui-radio-group\") {\n const radios = control.querySelectorAll('input[type=\"radio\"]');\n for (const radio of radios) {\n if (isChecked(radio)) {\n return radio;\n }\n }\n return radios[0] ?? control;\n }\n return control;\n}"],
5
+ "mappings": "AAAA,OAAS,OAAAA,MAAW,4BCAb,SAASC,KAAMC,EAAO,CAC3B,OAAOA,EAAM,OAAO,OAAO,EAAE,KAAK,GAAG,CACvC,CCFO,IAAMC,EAAmB,mBAEzB,IAAMC,EAAuB,uBAKpC,IAAMC,EAAmC,IAAI,IAAI,CAAC,eAAgB,iBAAkB,wBAAyB,aAAc,gBAAiB,eAAgB,aAAc,kBAAmB,aAAc,mBAAoB,aAAa,CAAC,EACvOC,EAAmB,IAAIC,CAAgB,MAAM,MAAM,KAAKF,CAAiB,EAAE,KAAK,IAAI,CAAC,GFLpF,SAASG,EAAS,CACvB,SAAAC,EACA,QAAAC,EACA,MAAOC,EACP,GAAGC,CACL,EAAG,CACD,OAAsBC,EAAI,QAAS,CACjC,GAAGD,EAED,CAACE,CAAoB,EAAG,GAE1B,MAAOC,EAAG,YAAaJ,CAAS,EAChC,QAAAD,EACA,SAAAD,CACF,CAAC,CACH",
6
+ "names": ["jsx", "cx", "parts", "RUI_CONTROL_ATTR", "RUI_FIELD_LABEL_ATTR", "HOST_CONTROL_TAGS", "CONTROL_SELECTOR", "RUI_CONTROL_ATTR", "RuiLabel", "children", "htmlFor", "className", "props", "jsx", "RUI_FIELD_LABEL_ATTR", "cx"]
7
7
  }
@@ -2,5 +2,12 @@ import type { JsxHtmlPropsWithChildren } from '@ecopages/jsx';
2
2
  export type RuiLabelProps = JsxHtmlPropsWithChildren<{
3
3
  htmlFor?: string;
4
4
  }>;
5
- /** Shared label styles for form fields. */
5
+ /**
6
+ * Shared label styles for form fields.
7
+ *
8
+ * @remarks Sets `RUI_FIELD_LABEL_ATTR` so `RuiField` can discover it as the
9
+ * field's label and wire `for` / `aria-labelledby`.
10
+ *
11
+ * @cssclass rui-label - Form field label.
12
+ */
6
13
  export declare function RuiLabel({ children, htmlFor, class: className, ...props }: RuiLabelProps): import("@ecopages/jsx").JsxRenderable;
@@ -1,2 +1,2 @@
1
- import{jsx as _e}from"@ecopages/jsx/jsx-runtime";import{RadiantElement as we,customElement as Be,event as Ue,onEvent as Ee,onUpdated as ze,prop as L}from"@ecopages/radiant";function Oe(t,e){t.forEach((r,i)=>{r.tabIndex=i===e?0:-1})}function Ie(t,e){if(!t.length)return null;let r=Math.max(0,Math.min(t.length-1,e));return Oe(t,r),t[r]?.focus(),t[r]??null}function je(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:r,key:i,orientation:h="horizontal",wrap:w=!0}=t;if(!e.length||!r)return{handled:!1};let d=e.indexOf(r);if(d<0)return{handled:!1};let a=je(i,h);if(!a)return{handled:!1};let p=d;a==="first"?p=0:a==="last"?p=e.length-1:a==="next"?p=w?(d+1)%e.length:Math.min(e.length-1,d+1):p=w?(d-1+e.length)%e.length:Math.max(0,d-1);let R=Ie(e,p);return R?{handled:!0,index:p,item:R}:{handled:!1}}var ae,se,le,ue,de,ce,fe,be,he,pe,me,ve,ye,ge;function ke(t,e,r,i,h,w){var d,a,p,R,O,U,S,X=Symbol.metadata||Symbol.for("Symbol.metadata"),G=Object.defineProperty,z=Object.create,J=[z(null),z(null)],Q=e.length;function I(n,m,f){return function(o,s){m&&(s=o,o=t);for(var v=0;v<n.length;v++)s=n[v].apply(o,f?[s]:[]);return f?s:o}}function x(n,m,f,o){if(typeof n!="function"&&(o||n!==void 0))throw new TypeError(m+" must "+(f||"be")+" a function"+(o?"":" or undefined"));return n}function Y(n,m,f,o,s,v,E,b,y,g,H){function K(u){if(!H(u))throw new TypeError("Attempted to access private element on non-instance")}var q=[].concat(m[0]),F=m[3],$=!E,T=s===1,N=s===3,ee=s===4,j=s===2;function k(u,A,ie){return function(V,ne){return A&&(ne=V,V=n),ie&&ie(V),l[u].call(V,ne)}}if(!$){var l={},W=[],_=N?"get":ee||T?"set":"value";if(y?(g||T?l={get:xe(function(){return F(this)},o,"get"),set:function(u){m[4](this,u)}}:l[_]=F,g||xe(l[_],o,j?"":_)):g||(l=Object.getOwnPropertyDescriptor(n,o)),!g&&!y){if((a=J[+b][o])&&(a^s)!==7)throw Error("Decorating two elements with the same name ("+l[_].name+") is not supported yet");J[+b][o]=s<3?1:s}}for(var c=n,M=q.length-1;M>=0;M-=f?2:1){var te=x(q[M],"A decorator","be",!0),re=f?q[M-1]:void 0,P={},D={kind:["field","accessor","method","getter","setter","class"][s],name:o,metadata:d,addInitializer:function(u,A){if(u.v)throw new TypeError("attempted to call addInitializer after decoration was finished");x(A,"An initializer","be",!0),v.push(A)}.bind(null,P)};if($)a=te.call(re,c,D),P.v=1,x(a,"class decorators","return")&&(c=a);else if(D.static=b,D.private=y,a=D.access={has:y?H.bind():function(u){return o in u}},ee||(a.get=y?j?function(u){return K(u),l.value}:k("get",0,K):function(u){return u[o]}),j||N||(a.set=y?k("set",0,K):function(u,A){u[o]=A}),c=te.call(re,T?{get:l.get,set:l.set}:l[_],D),P.v=1,T){if(typeof c=="object"&&c)(a=x(c.get,"accessor.get"))&&(l.get=a),(a=x(c.set,"accessor.set"))&&(l.set=a),(a=x(c.init,"accessor.init"))&&W.unshift(a);else if(c!==void 0)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else x(c,(g?"field":"method")+" decorators","return")&&(g?W.unshift(c):l[_]=c)}return s<2&&E.push(I(W,b,1),I(v,b,0)),g||$||(y?T?E.splice(-1,0,k("get",b),k("set",b)):E.push(j?l[_]:x.call.bind(l[_])):G(n,o,l)),c}function Z(n){return G(n,X,{configurable:!0,enumerable:!0,value:d})}return w!==void 0&&(d=w[X]),d=z(d??null),O=[],U=function(n){n&&O.push(I(n))},S=function(n,m){for(var f=0;f<r.length;f++){var o=r[f],s=o[1],v=7&s;if((8&s)==n&&!v==m){var E=o[2],b=!!o[3],y=16&s;Y(n?t:t.prototype,o,y,b?"#"+E:Me(E),v,v<2?[]:n?R=R||[]:p=p||[],O,!!n,b,m,n&&b?function(g){return Ce(g)===t}:h)}}},S(8,0),S(0,0),S(8,1),S(0,1),U(p),U(R),a=O,Q||Z(t),{e:a,get c(){var n=[];return Q&&[Z(t=Y(t,[e],i,t.name,5,n)),I(n,1)]}}}function Me(t){var e=Ve(t,"string");return typeof e=="symbol"?e:e+""}function Ve(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var i=r.call(t,e||"default");if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function xe(t,e,r){typeof e=="symbol"&&(e=(e=e.description)?"["+e+"]":"");try{Object.defineProperty(t,"name",{configurable:!0,value:r?r+" "+e:e})}catch{}return t}function Ce(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 C,Re=class extends we{static{({e:[le,ue,de,ce,fe,be,he,pe,me,ve,ye,ge,ae],c:[C,se]}=ke(this,[Be("rui-listbox")],[[L({type:String,reflect:!0,defaultValue:""}),0,"value"],[L({type:String,defaultValue:""}),0,"label"],[L({type:Boolean,reflect:!0,defaultValue:!1}),0,"disabled"],[L({type:Boolean,reflect:!0,defaultValue:!1}),0,"embedded"],[L({type:Boolean,reflect:!0}),0,"bordered"],[Ue({name:"rui-change",bubbles:!0,composed:!0}),0,"changeEvent"],[ze(["value","disabled","embedded","bordered"]),2,"onPropsUpdated"],[Ee({selector:'[role="option"]',type:"click"}),2,"onOptionClick"],[Ee({selector:'[role="option"]',type:"keydown"}),2,"onOptionKeydown"]],0,void 0,we))}value=(ae(this),le(this));label=(ue(this),de(this));disabled=(ce(this),fe(this));embedded=(be(this),he(this));bordered=(pe(this),me(this));changeEvent=(ve(this),ye(this));resolvedAriaLabel=(ge(this),this.$.label.map(e=>e||void 0));resolvedAriaDisabled=this.$.disabled.map(e=>e?"true":void 0);connectedCallback(){super.connectedCallback(),queueMicrotask(()=>{this.sync(),this.syncPresentation()})}onPropsUpdated(){this.sync(),this.syncPresentation()}getOptions(){return Array.from(this.querySelectorAll('[role="option"]'))}sync(){let e=this.getOptions();for(let r of e){let i=r.getAttribute("data-value")===this.value;r.setAttribute("aria-selected",String(i)),r.tabIndex=this.embedded?-1:i||!this.value&&r===e[0]?0:-1}}select(e){this.disabled||e.getAttribute("aria-disabled")==="true"||(this.value=e.getAttribute("data-value")||e.textContent?.trim()||"",this.sync(),this.changeEvent.emit({value:this.value}),e.focus())}onOptionClick(e){if(this.embedded)return;let r=e.target.closest('[role="option"]');r&&this.contains(r)&&this.select(r)}onOptionKeydown(e){if(this.embedded)return;let r=this.getOptions(),i=e.target.closest('[role="option"]');if(!i)return;if(e.key==="Enter"||e.key===" "){e.preventDefault(),this.select(i);return}let h=oe({items:r,current:i,key:e.key,orientation:"vertical"});h.handled&&(e.preventDefault(),this.select(h.item))}isBordered(){return this.bordered!=null?this.bordered:!this.embedded}syncPresentation(){let e=this.querySelector(".rui-listbox");e&&e.classList.toggle("rui-listbox--bordered",this.isBordered())}render(){let e=this.isBordered();return _e("div",{class:`rui-listbox${e?" rui-listbox--bordered":""}`,role:"listbox","data-rui-control":!0,"data-rui-control-type":"text","aria-label":this.resolvedAriaLabel,"aria-disabled":this.resolvedAriaDisabled,children:_e("slot",{})})}static{se()}};import{jsx as B}from"@ecopages/jsx/jsx-runtime";function Ae(...t){return t.filter(Boolean).join(" ")}var Ke=Symbol.for("@ecopages/storybook-radiant.viewElement"),Se=Symbol.for("@ecopages/storybook-radiant.scriptModule"),Te=Symbol.for("@ecopages/storybook-radiant.scriptExport");function qe(t,e){t[Ke]=e;let r=e[Se];r&&(t[Se]=r,t[Te]=e[Te]??e.name)}function De(t,e,r){let i=h=>e(h);return qe(i,t),i}function Le({value:t,label:e,children:r,class:i,disabled:h,...w}){return B("div",{...w,class:Ae("rui-listbox__option",i),role:"option","data-value":t,"data-label":e,"aria-disabled":h?"true":void 0,tabindex:-1,children:r})}var $e=De(C,({options:t,children:e,...r})=>t!=null?B("rui-listbox",{...r,children:t.map(i=>B(Le,{value:i.value,label:typeof i.label=="string"?i.label:void 0,disabled:i.disabled,children:i.label}))}):B("rui-listbox",{...r,children:e}),{stylesheets:["./listbox.css"]});export{$e as RuiListbox,C as RuiListboxElement,Le as RuiListboxOption};
1
+ import{jsx as xe}from"@ecopages/jsx/jsx-runtime";import{RadiantElement as _e,customElement as Ie,event as Ce,onEvent as we,onUpdated as Me,prop as L}from"@ecopages/radiant";function Oe(t,e){t.forEach((r,n)=>{r.tabIndex=n===e?0:-1})}function Se(t,e){if(!t.length)return null;let r=Math.max(0,Math.min(t.length-1,e));return Oe(t,r),t[r]?.focus(),t[r]??null}function Le(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 ne(t){let{items:e,current:r,key:n,orientation:y="horizontal",wrap:w=!0}=t;if(!e.length||!r)return{handled:!1};let d=e.indexOf(r);if(d<0)return{handled:!1};let a=Le(n,y);if(!a)return{handled:!1};let b=d;a==="first"?b=0:a==="last"?b=e.length-1:a==="next"?b=w?(d+1)%e.length:Math.min(e.length-1,d+1):b=w?(d-1+e.length)%e.length:Math.max(0,d-1);let A=Se(e,b);return A?{handled:!0,index:b,item:A}:{handled:!1}}var oe,ae,le,se,ue,de,ce,fe,he,be,pe,ve,me,ge;function De(t,e,r,n,y,w){var d,a,b,A,D,z,R,J=Symbol.metadata||Symbol.for("Symbol.metadata"),Q=Object.defineProperty,K=Object.create,W=[K(null),K(null)],X=e.length;function T(i,p,f){return function(o,l){p&&(l=o,o=t);for(var v=0;v<i.length;v++)l=i[v].apply(o,f?[l]:[]);return f?l:o}}function x(i,p,f,o){if(typeof i!="function"&&(o||i!==void 0))throw new TypeError(p+" must "+(f||"be")+" a function"+(o?"":" or undefined"));return i}function Y(i,p,f,o,l,v,E,h,m,g,H){function U(u){if(!H(u))throw new TypeError("Attempted to access private element on non-instance")}var V=[].concat(p[0]),P=p[3],q=!E,O=l===1,F=l===3,N=l===4,k=l===2;function B(u,j,re){return function(C,ie){return j&&(ie=C,C=i),re&&re(C),s[u].call(C,ie)}}if(!q){var s={},$=[],_=F?"get":N||O?"set":"value";if(m?(g||O?s={get:ye(function(){return P(this)},o,"get"),set:function(u){p[4](this,u)}}:s[_]=P,g||ye(s[_],o,k?"":_)):g||(s=Object.getOwnPropertyDescriptor(i,o)),!g&&!m){if((a=W[+h][o])&&(a^l)!==7)throw Error("Decorating two elements with the same name ("+s[_].name+") is not supported yet");W[+h][o]=l<3?1:l}}for(var c=i,I=V.length-1;I>=0;I-=f?2:1){var ee=x(V[I],"A decorator","be",!0),te=f?V[I-1]:void 0,G={},S={kind:["field","accessor","method","getter","setter","class"][l],name:o,metadata:d,addInitializer:function(u,j){if(u.v)throw new TypeError("attempted to call addInitializer after decoration was finished");x(j,"An initializer","be",!0),v.push(j)}.bind(null,G)};if(q)a=ee.call(te,c,S),G.v=1,x(a,"class decorators","return")&&(c=a);else if(S.static=h,S.private=m,a=S.access={has:m?H.bind():function(u){return o in u}},N||(a.get=m?k?function(u){return U(u),s.value}:B("get",0,U):function(u){return u[o]}),k||F||(a.set=m?B("set",0,U):function(u,j){u[o]=j}),c=ee.call(te,O?{get:s.get,set:s.set}:s[_],S),G.v=1,O){if(typeof c=="object"&&c)(a=x(c.get,"accessor.get"))&&(s.get=a),(a=x(c.set,"accessor.set"))&&(s.set=a),(a=x(c.init,"accessor.init"))&&$.unshift(a);else if(c!==void 0)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else x(c,(g?"field":"method")+" decorators","return")&&(g?$.unshift(c):s[_]=c)}return l<2&&E.push(T($,h,1),T(v,h,0)),g||q||(m?O?E.splice(-1,0,B("get",h),B("set",h)):E.push(k?s[_]:x.call.bind(s[_])):Q(i,o,s)),c}function Z(i){return Q(i,J,{configurable:!0,enumerable:!0,value:d})}return w!==void 0&&(d=w[J]),d=K(d??null),D=[],z=function(i){i&&D.push(T(i))},R=function(i,p){for(var f=0;f<r.length;f++){var o=r[f],l=o[1],v=7&l;if((8&l)==i&&!v==p){var E=o[2],h=!!o[3],m=16&l;Y(i?t:t.prototype,o,m,h?"#"+E:Te(E),v,v<2?[]:i?A=A||[]:b=b||[],D,!!i,h,p,i&&h?function(g){return Be(g)===t}:y)}}},R(8,0),R(0,0),R(8,1),R(0,1),z(b),z(A),a=D,X||Z(t),{e:a,get c(){var i=[];return X&&[Z(t=Y(t,[e],n,t.name,5,i)),T(i,1)]}}}function Te(t){var e=ke(t,"string");return typeof e=="symbol"?e:e+""}function ke(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function ye(t,e,r){typeof e=="symbol"&&(e=(e=e.description)?"["+e+"]":"");try{Object.defineProperty(t,"name",{configurable:!0,value:r?r+" "+e:e})}catch{}return t}function Be(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 Ae,Ee=class extends _e{static{({e:[le,se,ue,de,ce,fe,he,be,pe,ve,me,ge,oe],c:[Ae,ae]}=De(this,[Ie("rui-listbox")],[[L({type:String,reflect:!0,defaultValue:""}),0,"value"],[L({type:String,defaultValue:""}),0,"label"],[L({type:Boolean,reflect:!0,defaultValue:!1}),0,"disabled"],[L({type:Boolean,reflect:!0,defaultValue:!1}),0,"embedded"],[L({type:Boolean,reflect:!0}),0,"bordered"],[Ce({name:"rui-change",bubbles:!0,composed:!0}),0,"changeEvent"],[Me(["value","disabled","embedded","bordered"]),2,"onPropsUpdated"],[we({selector:'[role="option"]',type:"click"}),2,"onOptionClick"],[we({selector:'[role="option"]',type:"keydown"}),2,"onOptionKeydown"]],0,void 0,_e))}value=(oe(this),le(this));label=(se(this),ue(this));disabled=(de(this),ce(this));embedded=(fe(this),he(this));bordered=(be(this),pe(this));changeEvent=(ve(this),me(this));resolvedAriaLabel=(ge(this),this.$.label.map(e=>e||void 0));resolvedAriaDisabled=this.$.disabled.map(e=>e?"true":void 0);connectedCallback(){super.connectedCallback(),queueMicrotask(()=>{this.sync(),this.syncPresentation()})}onPropsUpdated(){this.sync(),this.syncPresentation()}getOptions(){return Array.from(this.querySelectorAll('[role="option"]'))}sync(){let e=this.getOptions();for(let r of e){let n=r.getAttribute("data-value")===this.value;r.setAttribute("aria-selected",String(n)),r.tabIndex=this.embedded?-1:n||!this.value&&r===e[0]?0:-1}}select(e){this.disabled||e.getAttribute("aria-disabled")==="true"||(this.value=e.getAttribute("data-value")||e.textContent?.trim()||"",this.sync(),this.changeEvent.emit({value:this.value}),e.focus())}onOptionClick(e){if(this.embedded)return;let r=e.target.closest('[role="option"]');r&&this.contains(r)&&this.select(r)}onOptionKeydown(e){if(this.embedded)return;let r=this.getOptions(),n=e.target.closest('[role="option"]');if(!n)return;if(e.key==="Enter"||e.key===" "){e.preventDefault(),this.select(n);return}let y=ne({items:r,current:n,key:e.key,orientation:"vertical"});y.handled&&(e.preventDefault(),this.select(y.item))}isBordered(){return this.bordered!=null?this.bordered:!this.embedded}syncPresentation(){let e=this.querySelector(".rui-listbox");e&&e.classList.toggle("rui-listbox--bordered",this.isBordered())}render(){let e=this.isBordered();return xe("div",{class:`rui-listbox${e?" rui-listbox--bordered":""}`,role:"listbox","data-rui-control":!0,"data-rui-control-type":"text","aria-label":this.resolvedAriaLabel,"aria-disabled":this.resolvedAriaDisabled,children:xe("slot",{})})}static{ae()}};import{jsx as M}from"@ecopages/jsx/jsx-runtime";function je(...t){return t.filter(Boolean).join(" ")}function Re({value:t,label:e,children:r,class:n,disabled:y,...w}){return M("div",{...w,class:je("rui-listbox__option",n),role:"option","data-value":t,"data-label":e,"aria-disabled":y?"true":void 0,tabindex:-1,children:r})}function ze({options:t,children:e,...r}){return t!=null?M("rui-listbox",{...r,children:t.map(n=>M(Re,{value:n.value,label:typeof n.label=="string"?n.label:void 0,disabled:n.disabled,children:n.label}))}):M("rui-listbox",{...r,children:e})}export{ze as RuiListbox,Ae as RuiListboxElement,Re as RuiListboxOption};
2
2
  //# sourceMappingURL=index.js.map