@vielzeug/refine 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/dist/button.cjs +1 -1
  2. package/dist/button.cjs.map +1 -1
  3. package/dist/button.js +3 -3
  4. package/dist/button.js.map +1 -1
  5. package/dist/checkbox-group.cjs +7 -7
  6. package/dist/checkbox-group.cjs.map +1 -1
  7. package/dist/checkbox-group.js +35 -26
  8. package/dist/checkbox-group.js.map +1 -1
  9. package/dist/checkbox.cjs +3 -3
  10. package/dist/checkbox.cjs.map +1 -1
  11. package/dist/checkbox.js +24 -19
  12. package/dist/checkbox.js.map +1 -1
  13. package/dist/combobox.cjs +24 -24
  14. package/dist/combobox.cjs.map +1 -1
  15. package/dist/combobox.js +133 -129
  16. package/dist/combobox.js.map +1 -1
  17. package/dist/content/card/card.css.cjs +1 -1
  18. package/dist/content/card/card.css.cjs.map +1 -1
  19. package/dist/content/card/card.css.js +1 -1
  20. package/dist/content/card/card.css.js.map +1 -1
  21. package/dist/content/icon/icon.css.cjs +1 -1
  22. package/dist/content/icon/icon.css.cjs.map +1 -1
  23. package/dist/content/icon/icon.css.js +1 -1
  24. package/dist/content/icon/icon.css.js.map +1 -1
  25. package/dist/custom-elements.json +4711 -4209
  26. package/dist/feedback/toast/toast.css.cjs +1 -1
  27. package/dist/feedback/toast/toast.css.cjs.map +1 -1
  28. package/dist/feedback/toast/toast.css.js +1 -1
  29. package/dist/feedback/toast/toast.css.js.map +1 -1
  30. package/dist/headless/auto-resize.cjs +2 -0
  31. package/dist/headless/auto-resize.cjs.map +1 -0
  32. package/dist/headless/auto-resize.d.ts +29 -0
  33. package/dist/headless/auto-resize.d.ts.map +1 -0
  34. package/dist/headless/auto-resize.js +16 -0
  35. package/dist/headless/auto-resize.js.map +1 -0
  36. package/dist/headless/checkable.cjs +1 -1
  37. package/dist/headless/checkable.cjs.map +1 -1
  38. package/dist/headless/checkable.d.ts +25 -7
  39. package/dist/headless/checkable.d.ts.map +1 -1
  40. package/dist/headless/checkable.js +19 -14
  41. package/dist/headless/checkable.js.map +1 -1
  42. package/dist/headless/choice-field.cjs +1 -1
  43. package/dist/headless/choice-field.cjs.map +1 -1
  44. package/dist/headless/choice-field.d.ts +21 -0
  45. package/dist/headless/choice-field.d.ts.map +1 -1
  46. package/dist/headless/choice-field.js +27 -19
  47. package/dist/headless/choice-field.js.map +1 -1
  48. package/dist/headless/composer.cjs +2 -0
  49. package/dist/headless/composer.cjs.map +1 -0
  50. package/dist/headless/composer.d.ts +44 -0
  51. package/dist/headless/composer.d.ts.map +1 -0
  52. package/dist/headless/composer.js +21 -0
  53. package/dist/headless/composer.js.map +1 -0
  54. package/dist/headless/field-base.cjs +1 -1
  55. package/dist/headless/field-base.cjs.map +1 -1
  56. package/dist/headless/field-base.d.ts +97 -84
  57. package/dist/headless/field-base.d.ts.map +1 -1
  58. package/dist/headless/field-base.js +43 -32
  59. package/dist/headless/field-base.js.map +1 -1
  60. package/dist/headless/index.d.ts +3 -1
  61. package/dist/headless/index.d.ts.map +1 -1
  62. package/dist/headless/text-field.cjs +1 -1
  63. package/dist/headless/text-field.cjs.map +1 -1
  64. package/dist/headless/text-field.d.ts +40 -0
  65. package/dist/headless/text-field.d.ts.map +1 -1
  66. package/dist/headless/text-field.js +30 -25
  67. package/dist/headless/text-field.js.map +1 -1
  68. package/dist/headless.cjs +1 -1
  69. package/dist/headless.js +27 -25
  70. package/dist/index.cjs +1 -1
  71. package/dist/index.js +61 -60
  72. package/dist/input.cjs +9 -9
  73. package/dist/input.cjs.map +1 -1
  74. package/dist/input.js +49 -44
  75. package/dist/input.js.map +1 -1
  76. package/dist/inputs/button/button.css.cjs +1 -1
  77. package/dist/inputs/button/button.css.cjs.map +1 -1
  78. package/dist/inputs/button/button.css.js +1 -1
  79. package/dist/inputs/button/button.css.js.map +1 -1
  80. package/dist/inputs/checkbox/checkbox.css.cjs +1 -1
  81. package/dist/inputs/checkbox/checkbox.css.cjs.map +1 -1
  82. package/dist/inputs/checkbox/checkbox.css.js +1 -1
  83. package/dist/inputs/checkbox/checkbox.css.js.map +1 -1
  84. package/dist/inputs/checkbox/checkbox.d.ts +3 -0
  85. package/dist/inputs/checkbox/checkbox.d.ts.map +1 -1
  86. package/dist/inputs/checkbox-group/checkbox-group.css.cjs +1 -1
  87. package/dist/inputs/checkbox-group/checkbox-group.css.cjs.map +1 -1
  88. package/dist/inputs/checkbox-group/checkbox-group.css.js +1 -1
  89. package/dist/inputs/checkbox-group/checkbox-group.css.js.map +1 -1
  90. package/dist/inputs/combobox/combobox.d.ts +1 -0
  91. package/dist/inputs/combobox/combobox.d.ts.map +1 -1
  92. package/dist/inputs/combobox/combobox.types.d.ts +2 -0
  93. package/dist/inputs/combobox/combobox.types.d.ts.map +1 -1
  94. package/dist/inputs/file-input/file-input.css.cjs +1 -1
  95. package/dist/inputs/file-input/file-input.css.cjs.map +1 -1
  96. package/dist/inputs/file-input/file-input.css.js +1 -1
  97. package/dist/inputs/file-input/file-input.css.js.map +1 -1
  98. package/dist/inputs/index.d.ts +2 -0
  99. package/dist/inputs/index.d.ts.map +1 -1
  100. package/dist/inputs/input/input.css.cjs +1 -1
  101. package/dist/inputs/input/input.css.cjs.map +1 -1
  102. package/dist/inputs/input/input.css.js +1 -1
  103. package/dist/inputs/input/input.css.js.map +1 -1
  104. package/dist/inputs/input/input.d.ts.map +1 -1
  105. package/dist/inputs/message-composer/message-composer.css.cjs +2 -0
  106. package/dist/inputs/message-composer/message-composer.css.cjs.map +1 -0
  107. package/dist/inputs/message-composer/message-composer.css.js +6 -0
  108. package/dist/inputs/message-composer/message-composer.css.js.map +1 -0
  109. package/dist/inputs/message-composer/message-composer.d.ts +139 -0
  110. package/dist/inputs/message-composer/message-composer.d.ts.map +1 -0
  111. package/dist/inputs/otp-input/otp-input.css.cjs +1 -1
  112. package/dist/inputs/otp-input/otp-input.css.cjs.map +1 -1
  113. package/dist/inputs/otp-input/otp-input.css.js +1 -1
  114. package/dist/inputs/otp-input/otp-input.css.js.map +1 -1
  115. package/dist/inputs/radio/radio.css.cjs +1 -1
  116. package/dist/inputs/radio/radio.css.cjs.map +1 -1
  117. package/dist/inputs/radio/radio.css.js +1 -1
  118. package/dist/inputs/radio/radio.css.js.map +1 -1
  119. package/dist/inputs/radio-group/radio-group.css.cjs +1 -1
  120. package/dist/inputs/radio-group/radio-group.css.cjs.map +1 -1
  121. package/dist/inputs/radio-group/radio-group.css.js +1 -1
  122. package/dist/inputs/radio-group/radio-group.css.js.map +1 -1
  123. package/dist/inputs/rating/rating.css.cjs +1 -1
  124. package/dist/inputs/rating/rating.css.cjs.map +1 -1
  125. package/dist/inputs/rating/rating.css.js +1 -1
  126. package/dist/inputs/rating/rating.css.js.map +1 -1
  127. package/dist/inputs/shared/field-binding.cjs +1 -1
  128. package/dist/inputs/shared/field-binding.cjs.map +1 -1
  129. package/dist/inputs/shared/field-binding.d.ts +15 -0
  130. package/dist/inputs/shared/field-binding.d.ts.map +1 -1
  131. package/dist/inputs/shared/field-binding.js +4 -3
  132. package/dist/inputs/shared/field-binding.js.map +1 -1
  133. package/dist/inputs/shared/form-context.cjs.map +1 -1
  134. package/dist/inputs/shared/form-context.d.ts +6 -0
  135. package/dist/inputs/shared/form-context.d.ts.map +1 -1
  136. package/dist/inputs/shared/form-context.js.map +1 -1
  137. package/dist/inputs/slider/slider.css.cjs +1 -1
  138. package/dist/inputs/slider/slider.css.cjs.map +1 -1
  139. package/dist/inputs/slider/slider.css.js +1 -1
  140. package/dist/inputs/slider/slider.css.js.map +1 -1
  141. package/dist/inputs/switch/switch.css.cjs +1 -1
  142. package/dist/inputs/switch/switch.css.cjs.map +1 -1
  143. package/dist/inputs/switch/switch.css.js +1 -1
  144. package/dist/inputs/switch/switch.css.js.map +1 -1
  145. package/dist/inputs/textarea/textarea.css.cjs +1 -1
  146. package/dist/inputs/textarea/textarea.css.cjs.map +1 -1
  147. package/dist/inputs/textarea/textarea.css.js +1 -1
  148. package/dist/inputs/textarea/textarea.css.js.map +1 -1
  149. package/dist/inputs/textarea/textarea.d.ts.map +1 -1
  150. package/dist/layout/navbar/navbar.css.cjs +1 -1
  151. package/dist/layout/navbar/navbar.css.cjs.map +1 -1
  152. package/dist/layout/navbar/navbar.css.js +1 -1
  153. package/dist/layout/navbar/navbar.css.js.map +1 -1
  154. package/dist/layout/sidebar/sidebar.css.cjs +1 -1
  155. package/dist/layout/sidebar/sidebar.css.cjs.map +1 -1
  156. package/dist/layout/sidebar/sidebar.css.js +1 -1
  157. package/dist/layout/sidebar/sidebar.css.js.map +1 -1
  158. package/dist/message-composer.cjs +52 -0
  159. package/dist/message-composer.cjs.map +1 -0
  160. package/dist/message-composer.js +168 -0
  161. package/dist/message-composer.js.map +1 -0
  162. package/dist/ore/dist/base-element.cjs +1 -1
  163. package/dist/ore/dist/base-element.cjs.map +1 -1
  164. package/dist/ore/dist/base-element.js +13 -3
  165. package/dist/ore/dist/base-element.js.map +1 -1
  166. package/dist/ore/dist/forms/field.cjs +1 -1
  167. package/dist/ore/dist/forms/field.cjs.map +1 -1
  168. package/dist/ore/dist/forms/field.js +29 -22
  169. package/dist/ore/dist/forms/field.js.map +1 -1
  170. package/dist/ore/dist/runtime.cjs +1 -1
  171. package/dist/ore/dist/runtime.cjs.map +1 -1
  172. package/dist/ore/dist/runtime.js +3 -1
  173. package/dist/ore/dist/runtime.js.map +1 -1
  174. package/dist/overlay/menu/menu.css.cjs +1 -1
  175. package/dist/overlay/menu/menu.css.cjs.map +1 -1
  176. package/dist/overlay/menu/menu.css.js +1 -1
  177. package/dist/overlay/menu/menu.css.js.map +1 -1
  178. package/dist/radio-group.cjs +9 -9
  179. package/dist/radio-group.cjs.map +1 -1
  180. package/dist/radio-group.js +44 -38
  181. package/dist/radio-group.js.map +1 -1
  182. package/dist/radio.cjs +3 -3
  183. package/dist/radio.cjs.map +1 -1
  184. package/dist/radio.js +23 -24
  185. package/dist/radio.js.map +1 -1
  186. package/dist/refine.cjs +228 -181
  187. package/dist/refine.cjs.map +1 -1
  188. package/dist/refine.iife.js +228 -181
  189. package/dist/refine.iife.js.map +1 -1
  190. package/dist/refine.js +251 -204
  191. package/dist/refine.js.map +1 -1
  192. package/dist/select.cjs +31 -31
  193. package/dist/select.cjs.map +1 -1
  194. package/dist/select.js +125 -122
  195. package/dist/select.js.map +1 -1
  196. package/dist/shared/size-presets.cjs +1 -1
  197. package/dist/shared/size-presets.cjs.map +1 -1
  198. package/dist/shared/size-presets.d.ts +23 -0
  199. package/dist/shared/size-presets.d.ts.map +1 -1
  200. package/dist/shared/size-presets.js +17 -1
  201. package/dist/shared/size-presets.js.map +1 -1
  202. package/dist/styles/mixins/animation.css.cjs +0 -3
  203. package/dist/styles/mixins/animation.css.cjs.map +1 -1
  204. package/dist/styles/mixins/animation.css.d.ts +12 -4
  205. package/dist/styles/mixins/animation.css.d.ts.map +1 -1
  206. package/dist/styles/mixins/animation.css.js +0 -3
  207. package/dist/styles/mixins/animation.css.js.map +1 -1
  208. package/dist/styles/mixins/variants.css.cjs.map +1 -1
  209. package/dist/styles/mixins/variants.css.d.ts +7 -2
  210. package/dist/styles/mixins/variants.css.d.ts.map +1 -1
  211. package/dist/styles/mixins/variants.css.js.map +1 -1
  212. package/dist/styles/theme.css +341 -132
  213. package/dist/switch.cjs +3 -3
  214. package/dist/switch.cjs.map +1 -1
  215. package/dist/switch.js +17 -18
  216. package/dist/switch.js.map +1 -1
  217. package/dist/textarea.cjs +15 -15
  218. package/dist/textarea.cjs.map +1 -1
  219. package/dist/textarea.js +64 -60
  220. package/dist/textarea.js.map +1 -1
  221. package/package.json +21 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-composer.css.cjs","names":[],"sources":["../../../src/inputs/message-composer/message-composer.css?inline"],"sourcesContent":["/*\n * Unlike the first version of this component, the field here is a plain `<textarea>` owned\n * directly by this stylesheet — not a nested `ore-textarea` with its own chrome suppressed via\n * `::part()` overrides. There is exactly one implementation of \"what the field looks like\" to\n * maintain (this file), not two.\n */\n@layer refine.base {\n :host {\n /* --_bg/--_border-color are set per-variant in @layer refine.variants below (every host\n matches exactly one variant rule, including the implicit \"no attribute\" default) — no\n fallback needed here. --_padding/--_font-size/--_gap are set per-size by\n sizeVariantMixin(MESSAGE_COMPOSER_SIZE_PRESET) (see message-composer.ts's `styles`); this\n is the `--message-composer-padding` public-override fallback for the \"md\" tier, matching\n the same pattern `ore-textarea` uses for `--textarea-padding`. */\n --_radius: var(--message-composer-radius, var(--rounded-2xl));\n --_padding: var(--message-composer-padding, var(--size-3));\n --_surface: var(--_bg);\n\n display: flex;\n width: fit-content;\n max-width: 100%;\n }\n\n :host([fullwidth]) {\n width: 100%;\n }\n\n .composer {\n display: flex;\n flex-direction: column;\n gap: var(--message-composer-gap, var(--_gap));\n width: 100%;\n padding: var(--_padding);\n background: var(--_surface);\n border: var(--border) solid var(--_border-color);\n border-radius: var(--_radius);\n box-shadow: var(--shadow-2xs);\n transition:\n background var(--transition-fast),\n border-color var(--transition-fast),\n box-shadow var(--transition-fast);\n }\n\n /* `flat` excluded — it gets its own theme-tinted hover/focus recipe below instead of the\n plain canvas-background one every other variant shares (mirrors `ore-textarea`). */\n :host(:not([disabled], [variant='bordered'], [variant='flat'])) .composer:hover {\n border-color: var(--color-contrast-400);\n }\n\n :host(:not([disabled], [variant='flat'])) .composer:focus-within {\n --_surface: var(--color-canvas);\n\n border-color: var(--_theme-focus);\n box-shadow: var(--_theme-shadow);\n }\n\n :host([error]:not([error=''])) .composer {\n border-color: var(--color-error);\n }\n\n :host([error]:not([error=''])) .composer:focus-within {\n border-color: var(--color-error);\n box-shadow: var(--color-error-focus-shadow);\n }\n\n .field {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n\n /* Floor so an inline `height` from auto-resize (JS, set on `<textarea>` directly — see\n auto-resize.ts) can never visually collapse the field below one line, e.g. before the\n first `scrollHeight` read has actually happened. `ore-textarea` has the equivalent\n `--_min-height` for the same reason. */\n min-height: var(--message-composer-min-height, 1lh);\n padding: 0;\n font: inherit;\n font-size: var(--_font-size);\n line-height: var(--leading-relaxed);\n color: var(--text-color-body);\n resize: none;\n outline: none;\n background: transparent;\n border: none;\n }\n\n .field::placeholder {\n color: var(--message-composer-placeholder-color, var(--color-contrast-500));\n }\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n padding-inline: 2px;\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .counter {\n align-self: flex-end;\n padding-inline: 2px;\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-contrast-400);\n }\n\n .counter.near-limit {\n color: var(--color-warning);\n }\n\n .counter.at-limit {\n color: var(--color-error);\n }\n\n .toolbar {\n display: flex;\n gap: var(--message-composer-gap, var(--_gap));\n align-items: center;\n justify-content: space-between;\n }\n\n .toolbar-start,\n .toolbar-end {\n display: flex;\n gap: var(--message-composer-gap, var(--_gap));\n align-items: center;\n min-width: 0;\n }\n\n .send-btn {\n flex-shrink: 0;\n }\n}\n\n/*\n * Same five-variant set as `ore-textarea` (solid/flat/bordered/outline/ghost), applied to the\n * card (`.composer`) instead of a bare field — kept consistent with the rest of the field\n * family rather than a bespoke boolean \"flat or not\" so `ore-message-composer` doesn't read as\n * a special case next to `ore-input`/`ore-textarea`.\n */\n@layer refine.variants {\n /* Solid (Default) */\n :host(:not([variant])),\n :host([variant='solid']) {\n --_bg: var(--message-composer-bg, var(--color-contrast-50));\n --_border-color: var(--message-composer-border-color, var(--color-contrast-300));\n }\n\n :host(:not([variant])) .composer,\n :host([variant='solid']) .composer {\n box-shadow: var(--shadow-2xs);\n }\n\n :host(:not([variant], [disabled])) .composer:focus-within,\n :host([variant='solid']:not([disabled])) .composer:focus-within {\n box-shadow: var(--_theme-shadow);\n }\n\n /*\n * Flat — a filled, theme-tinted card that \"sinks in\" via an inset shadow rather than sitting\n * on a border, same recipe as `ore-textarea`'s flat. Previously this was transparent at rest\n * (identical to `ghost`) and only grew a visible identity nobody could see until it happened\n * to line up with `ghost`'s own hover state — the two read as the same variant side-by-side.\n */\n :host([variant='flat']) {\n --_bg: var(--message-composer-bg, var(--color-contrast-100));\n --_border-color: var(--message-composer-border-color, color-mix(in oklch, var(--_theme-focus) 20%, transparent));\n }\n\n :host([variant='flat']) .composer {\n box-shadow: var(--inset-shadow-2xs);\n }\n\n :host([variant='flat']:not([disabled])) .composer:hover {\n background: var(--message-composer-hover-bg, color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));\n border-color: var(\n --message-composer-hover-border-color,\n color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300))\n );\n }\n\n :host([variant='flat']:not([disabled])) .composer:focus-within {\n background: var(--message-composer-focus-bg, color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));\n border-color: var(--message-composer-focus-border-color, color-mix(in oklch, var(--_theme-focus) 60%, transparent));\n box-shadow: var(--_theme-shadow);\n }\n\n /* Bordered — theme-tinted backdrop and border; field text picks up the theme color too. */\n :host([variant='bordered']) {\n --_bg: var(--message-composer-bg, var(--_theme-backdrop));\n --_border-color: var(--message-composer-border-color, color-mix(in oklch, var(--_theme-focus) 70%, transparent));\n }\n\n :host([variant='bordered']:not([disabled])) .composer:hover {\n border-color: var(--message-composer-hover-border-color, var(--_theme-focus));\n }\n\n :host([variant='bordered']) .field {\n color: var(--_theme-base);\n }\n\n :host([variant='bordered']) .field::placeholder {\n color: var(--message-composer-placeholder-color, color-mix(in oklch, var(--_theme-base) 45%, transparent));\n }\n\n /* Outline — transparent background, border always visible, theme-colored focus ring. */\n :host([variant='outline']) {\n --_bg: var(--message-composer-bg, transparent);\n }\n\n :host([variant='outline']) .composer {\n box-shadow: none;\n }\n\n :host([variant='outline']:not([disabled])) .composer:focus-within {\n box-shadow: var(--_theme-shadow);\n }\n\n /*\n * Ghost — fully transparent at rest and on hover-only background tint; focus falls through to\n * the shared `:focus-within` rule above (canvas background + theme-focus border + theme\n * shadow) instead of a second, bespoke focus recipe here — same as `ore-textarea`'s ghost.\n */\n :host([variant='ghost']) {\n --_bg: var(--message-composer-bg, transparent);\n --_border-color: var(--message-composer-border-color, transparent);\n }\n\n :host([variant='ghost']) .composer {\n box-shadow: none;\n }\n\n :host([variant='ghost']:not([disabled])) .composer:hover {\n background: var(--message-composer-hover-bg, var(--color-contrast-100));\n }\n}\n"],"mappings":""}
@@ -0,0 +1,6 @@
1
+ //#region src/inputs/message-composer/message-composer.css?inline
2
+ var e = "@layer refine.base{:host{--_radius:var(--message-composer-radius,var(--rounded-2xl));--_padding:var(--message-composer-padding,var(--size-3));--_surface:var(--_bg);width:fit-content;max-width:100%;display:flex}:host([fullwidth]){width:100%}.composer{gap:var(--message-composer-gap,var(--_gap));width:100%;padding:var(--_padding);background:var(--_surface);border:var(--border) solid var(--_border-color);border-radius:var(--_radius);box-shadow:var(--shadow-2xs);transition:background var(--transition-fast), border-color var(--transition-fast), box-shadow var(--transition-fast);flex-direction:column;display:flex}:host(:not([disabled],[variant=bordered],[variant=flat])) .composer:hover{border-color:var(--color-contrast-400)}:host(:not([disabled],[variant=flat])) .composer:focus-within{--_surface:var(--color-canvas);border-color:var(--_theme-focus);box-shadow:var(--_theme-shadow)}:host([error]:not([error=\"\"])) .composer{border-color:var(--color-error)}:host([error]:not([error=\"\"])) .composer:focus-within{border-color:var(--color-error);box-shadow:var(--color-error-focus-shadow)}.field{box-sizing:border-box;width:100%;min-width:0;min-height:var(--message-composer-min-height,1lh);font:inherit;font-size:var(--_font-size);line-height:var(--leading-relaxed);color:var(--text-color-body);resize:none;background:0 0;border:none;outline:none;padding:0}.field::placeholder{color:var(--message-composer-placeholder-color,var(--color-contrast-500))}.helper-text[hidden]{display:none}.helper-text{font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));padding-left:2px;padding-right:2px}.counter{font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-contrast-400);align-self:flex-end;padding-left:2px;padding-right:2px}.counter.near-limit{color:var(--color-warning)}.counter.at-limit{color:var(--color-error)}.toolbar{gap:var(--message-composer-gap,var(--_gap));justify-content:space-between;align-items:center;display:flex}.toolbar-start,.toolbar-end{gap:var(--message-composer-gap,var(--_gap));align-items:center;min-width:0;display:flex}.send-btn{flex-shrink:0}}@layer refine.variants{:host(:not([variant])),:host([variant=solid]){--_bg:var(--message-composer-bg,var(--color-contrast-50));--_border-color:var(--message-composer-border-color,var(--color-contrast-300))}:host(:not([variant])) .composer,:host([variant=solid]) .composer{box-shadow:var(--shadow-2xs)}:host(:not([variant],[disabled])) .composer:focus-within,:host([variant=solid]:not([disabled])) .composer:focus-within{box-shadow:var(--_theme-shadow)}:host([variant=flat]){--_bg:var(--message-composer-bg,var(--color-contrast-100));--_border-color:var(--message-composer-border-color,color-mix(in oklch, var(--_theme-focus) 20%, transparent))}:host([variant=flat]) .composer{box-shadow:var(--inset-shadow-2xs)}:host([variant=flat]:not([disabled])) .composer:hover{background:var(--message-composer-hover-bg,color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));border-color:var(--message-composer-hover-border-color,color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300)))}:host([variant=flat]:not([disabled])) .composer:focus-within{background:var(--message-composer-focus-bg,color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));border-color:var(--message-composer-focus-border-color,color-mix(in oklch, var(--_theme-focus) 60%, transparent));box-shadow:var(--_theme-shadow)}:host([variant=bordered]){--_bg:var(--message-composer-bg,var(--_theme-backdrop));--_border-color:var(--message-composer-border-color,color-mix(in oklch, var(--_theme-focus) 70%, transparent))}:host([variant=bordered]:not([disabled])) .composer:hover{border-color:var(--message-composer-hover-border-color,var(--_theme-focus))}:host([variant=bordered]) .field{color:var(--_theme-base)}:host([variant=bordered]) .field::placeholder{color:var(--message-composer-placeholder-color,color-mix(in oklch, var(--_theme-base) 45%, transparent))}:host([variant=outline]){--_bg:var(--message-composer-bg,transparent)}:host([variant=outline]) .composer{box-shadow:none}:host([variant=outline]:not([disabled])) .composer:focus-within{box-shadow:var(--_theme-shadow)}:host([variant=ghost]){--_bg:var(--message-composer-bg,transparent);--_border-color:var(--message-composer-border-color,transparent)}:host([variant=ghost]) .composer{box-shadow:none}:host([variant=ghost]:not([disabled])) .composer:hover{background:var(--message-composer-hover-bg,var(--color-contrast-100))}}";
3
+ //#endregion
4
+ export { e as default };
5
+
6
+ //# sourceMappingURL=message-composer.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-composer.css.js","names":[],"sources":["../../../src/inputs/message-composer/message-composer.css?inline"],"sourcesContent":["/*\n * Unlike the first version of this component, the field here is a plain `<textarea>` owned\n * directly by this stylesheet — not a nested `ore-textarea` with its own chrome suppressed via\n * `::part()` overrides. There is exactly one implementation of \"what the field looks like\" to\n * maintain (this file), not two.\n */\n@layer refine.base {\n :host {\n /* --_bg/--_border-color are set per-variant in @layer refine.variants below (every host\n matches exactly one variant rule, including the implicit \"no attribute\" default) — no\n fallback needed here. --_padding/--_font-size/--_gap are set per-size by\n sizeVariantMixin(MESSAGE_COMPOSER_SIZE_PRESET) (see message-composer.ts's `styles`); this\n is the `--message-composer-padding` public-override fallback for the \"md\" tier, matching\n the same pattern `ore-textarea` uses for `--textarea-padding`. */\n --_radius: var(--message-composer-radius, var(--rounded-2xl));\n --_padding: var(--message-composer-padding, var(--size-3));\n --_surface: var(--_bg);\n\n display: flex;\n width: fit-content;\n max-width: 100%;\n }\n\n :host([fullwidth]) {\n width: 100%;\n }\n\n .composer {\n display: flex;\n flex-direction: column;\n gap: var(--message-composer-gap, var(--_gap));\n width: 100%;\n padding: var(--_padding);\n background: var(--_surface);\n border: var(--border) solid var(--_border-color);\n border-radius: var(--_radius);\n box-shadow: var(--shadow-2xs);\n transition:\n background var(--transition-fast),\n border-color var(--transition-fast),\n box-shadow var(--transition-fast);\n }\n\n /* `flat` excluded — it gets its own theme-tinted hover/focus recipe below instead of the\n plain canvas-background one every other variant shares (mirrors `ore-textarea`). */\n :host(:not([disabled], [variant='bordered'], [variant='flat'])) .composer:hover {\n border-color: var(--color-contrast-400);\n }\n\n :host(:not([disabled], [variant='flat'])) .composer:focus-within {\n --_surface: var(--color-canvas);\n\n border-color: var(--_theme-focus);\n box-shadow: var(--_theme-shadow);\n }\n\n :host([error]:not([error=''])) .composer {\n border-color: var(--color-error);\n }\n\n :host([error]:not([error=''])) .composer:focus-within {\n border-color: var(--color-error);\n box-shadow: var(--color-error-focus-shadow);\n }\n\n .field {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n\n /* Floor so an inline `height` from auto-resize (JS, set on `<textarea>` directly — see\n auto-resize.ts) can never visually collapse the field below one line, e.g. before the\n first `scrollHeight` read has actually happened. `ore-textarea` has the equivalent\n `--_min-height` for the same reason. */\n min-height: var(--message-composer-min-height, 1lh);\n padding: 0;\n font: inherit;\n font-size: var(--_font-size);\n line-height: var(--leading-relaxed);\n color: var(--text-color-body);\n resize: none;\n outline: none;\n background: transparent;\n border: none;\n }\n\n .field::placeholder {\n color: var(--message-composer-placeholder-color, var(--color-contrast-500));\n }\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n padding-inline: 2px;\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .counter {\n align-self: flex-end;\n padding-inline: 2px;\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-contrast-400);\n }\n\n .counter.near-limit {\n color: var(--color-warning);\n }\n\n .counter.at-limit {\n color: var(--color-error);\n }\n\n .toolbar {\n display: flex;\n gap: var(--message-composer-gap, var(--_gap));\n align-items: center;\n justify-content: space-between;\n }\n\n .toolbar-start,\n .toolbar-end {\n display: flex;\n gap: var(--message-composer-gap, var(--_gap));\n align-items: center;\n min-width: 0;\n }\n\n .send-btn {\n flex-shrink: 0;\n }\n}\n\n/*\n * Same five-variant set as `ore-textarea` (solid/flat/bordered/outline/ghost), applied to the\n * card (`.composer`) instead of a bare field — kept consistent with the rest of the field\n * family rather than a bespoke boolean \"flat or not\" so `ore-message-composer` doesn't read as\n * a special case next to `ore-input`/`ore-textarea`.\n */\n@layer refine.variants {\n /* Solid (Default) */\n :host(:not([variant])),\n :host([variant='solid']) {\n --_bg: var(--message-composer-bg, var(--color-contrast-50));\n --_border-color: var(--message-composer-border-color, var(--color-contrast-300));\n }\n\n :host(:not([variant])) .composer,\n :host([variant='solid']) .composer {\n box-shadow: var(--shadow-2xs);\n }\n\n :host(:not([variant], [disabled])) .composer:focus-within,\n :host([variant='solid']:not([disabled])) .composer:focus-within {\n box-shadow: var(--_theme-shadow);\n }\n\n /*\n * Flat — a filled, theme-tinted card that \"sinks in\" via an inset shadow rather than sitting\n * on a border, same recipe as `ore-textarea`'s flat. Previously this was transparent at rest\n * (identical to `ghost`) and only grew a visible identity nobody could see until it happened\n * to line up with `ghost`'s own hover state — the two read as the same variant side-by-side.\n */\n :host([variant='flat']) {\n --_bg: var(--message-composer-bg, var(--color-contrast-100));\n --_border-color: var(--message-composer-border-color, color-mix(in oklch, var(--_theme-focus) 20%, transparent));\n }\n\n :host([variant='flat']) .composer {\n box-shadow: var(--inset-shadow-2xs);\n }\n\n :host([variant='flat']:not([disabled])) .composer:hover {\n background: var(--message-composer-hover-bg, color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));\n border-color: var(\n --message-composer-hover-border-color,\n color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300))\n );\n }\n\n :host([variant='flat']:not([disabled])) .composer:focus-within {\n background: var(--message-composer-focus-bg, color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));\n border-color: var(--message-composer-focus-border-color, color-mix(in oklch, var(--_theme-focus) 60%, transparent));\n box-shadow: var(--_theme-shadow);\n }\n\n /* Bordered — theme-tinted backdrop and border; field text picks up the theme color too. */\n :host([variant='bordered']) {\n --_bg: var(--message-composer-bg, var(--_theme-backdrop));\n --_border-color: var(--message-composer-border-color, color-mix(in oklch, var(--_theme-focus) 70%, transparent));\n }\n\n :host([variant='bordered']:not([disabled])) .composer:hover {\n border-color: var(--message-composer-hover-border-color, var(--_theme-focus));\n }\n\n :host([variant='bordered']) .field {\n color: var(--_theme-base);\n }\n\n :host([variant='bordered']) .field::placeholder {\n color: var(--message-composer-placeholder-color, color-mix(in oklch, var(--_theme-base) 45%, transparent));\n }\n\n /* Outline — transparent background, border always visible, theme-colored focus ring. */\n :host([variant='outline']) {\n --_bg: var(--message-composer-bg, transparent);\n }\n\n :host([variant='outline']) .composer {\n box-shadow: none;\n }\n\n :host([variant='outline']:not([disabled])) .composer:focus-within {\n box-shadow: var(--_theme-shadow);\n }\n\n /*\n * Ghost — fully transparent at rest and on hover-only background tint; focus falls through to\n * the shared `:focus-within` rule above (canvas background + theme-focus border + theme\n * shadow) instead of a second, bespoke focus recipe here — same as `ore-textarea`'s ghost.\n */\n :host([variant='ghost']) {\n --_bg: var(--message-composer-bg, transparent);\n --_border-color: var(--message-composer-border-color, transparent);\n }\n\n :host([variant='ghost']) .composer {\n box-shadow: none;\n }\n\n :host([variant='ghost']:not([disabled])) .composer:hover {\n background: var(--message-composer-hover-bg, var(--color-contrast-100));\n }\n}\n"],"mappings":""}
@@ -0,0 +1,139 @@
1
+ import type { ComponentSize, ThemeColor, VisualVariant } from '../../types';
2
+ import { type SendShortcut } from '../../headless';
3
+ import '../../content/icon/icon';
4
+ import '../button/button';
5
+ export type { SendShortcut } from '../../headless';
6
+ /** Events emitted by the message composer */
7
+ export type OreMessageComposerEvents = {
8
+ /** Fired on every keystroke with the current value. */
9
+ input: {
10
+ originalEvent: Event;
11
+ value: string;
12
+ };
13
+ /**
14
+ * Fired for a send attempt (the resolved `send-shortcut` or the send button) while the
15
+ * composer isn't blank/disabled/loading. Cancelable — call `preventDefault()` to keep the
16
+ * current text in the field instead of the default clear + refocus.
17
+ */
18
+ send: {
19
+ originalEvent: KeyboardEvent | MouseEvent;
20
+ value: string;
21
+ };
22
+ };
23
+ /** Message composer properties */
24
+ export type OreMessageComposerProps = {
25
+ /** Clear the value and refocus after a non-cancelled `send` (default `true`) */
26
+ 'clear-on-send'?: boolean;
27
+ /** Theme color (card focus ring + default send button color) */
28
+ color?: ThemeColor;
29
+ /** Disable the whole composer (field, slots, and send action) */
30
+ disabled?: boolean;
31
+ /** Error message shown below the field */
32
+ error?: string;
33
+ /** Stretch the composer to the full width of its container */
34
+ fullwidth?: boolean;
35
+ /** Helper text shown below the field */
36
+ helper?: string;
37
+ /** Accessible name for the field — never rendered visually, only as `aria-label` */
38
+ label?: string;
39
+ /** Blocks further sends (e.g. a send is already in flight) without disabling editing */
40
+ loading?: boolean;
41
+ /** Maximum character count; shows a counter */
42
+ maxlength?: number;
43
+ /** Form field name */
44
+ name?: string;
45
+ /** Placeholder text */
46
+ placeholder?: string;
47
+ /** Make the field read-only */
48
+ readonly?: boolean;
49
+ /**
50
+ * JS-only callback fired with the inner `<textarea>` element when it mounts, and with
51
+ * `null` when it unmounts. Set as a JS property: `composer.ref = (el) => { ... }`.
52
+ */
53
+ ref?: ((el: HTMLTextAreaElement | null) => void) | null;
54
+ /** Require a non-blank value for `<ore-form>` validation */
55
+ required?: boolean;
56
+ /** Number of visible rows before auto-resize grows the field */
57
+ rows?: number;
58
+ /** Lucide icon name for the default send button (default `'arrow-up'`) */
59
+ 'send-icon'?: string;
60
+ /** Accessible label for the send button (default `'Send message'`) */
61
+ 'send-label'?: string;
62
+ /** Keyboard shortcut that sends: 'enter' (Shift+Enter for a newline) or 'mod+enter' (Enter always inserts a newline; Ctrl/Cmd+Enter sends) */
63
+ 'send-shortcut'?: SendShortcut;
64
+ /** Component size */
65
+ size?: ComponentSize;
66
+ /** Current text value */
67
+ value?: string;
68
+ /** Visual variant of the card — same variant set as `ore-textarea`, applied to the card. */
69
+ variant?: Exclude<VisualVariant, 'frost' | 'text'>;
70
+ };
71
+ /**
72
+ * A message/comment composer — a card with an auto-resizing field on top and a toolbar row
73
+ * below it, built directly on the same headless primitives as `ore-textarea` (`createTextField`,
74
+ * `createAutoResize`) rather than composing `ore-textarea` itself. Nesting a fully-styled sibling
75
+ * component and suppressing most of its chrome (as an earlier version of this component did) is
76
+ * a leaky composition — this owns its single `<textarea>` outright, so there's exactly one
77
+ * implementation of the field's appearance to reason about, not two fighting each other.
78
+ *
79
+ * Handles the send gesture (Enter to send, Shift+Enter for a newline, or a Ctrl/Cmd+Enter
80
+ * alternative), IME-safe composition, and clear-and-refocus after sending.
81
+ *
82
+ * @element ore-message-composer
83
+ *
84
+ * @attr {string} value - Current text value
85
+ * @attr {string} placeholder - Placeholder text
86
+ * @attr {string} label - Accessible name for the field (not rendered visually)
87
+ * @attr {string} name - Form field name
88
+ * @attr {string} helper - Helper text shown below the field
89
+ * @attr {string} error - Error message shown below the field
90
+ * @attr {boolean} disabled - Disable the whole composer
91
+ * @attr {boolean} readonly - Read-only mode
92
+ * @attr {boolean} required - Require a non-blank value for `<ore-form>` validation
93
+ * @attr {boolean} loading - Blocks further sends without disabling editing
94
+ * @attr {number} maxlength - Max character count; shows a counter
95
+ * @attr {number} rows - Visible rows before auto-resize grows the field (default 1)
96
+ * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'
97
+ * @attr {string} variant - Visual variant of the card: 'solid' | 'flat' | 'bordered' | 'outline' | 'ghost'
98
+ * @attr {string} size - 'sm' | 'md' | 'lg'
99
+ * @attr {boolean} fullwidth - Stretch to the full width of the container
100
+ * @attr {string} send-icon - Lucide icon name for the default send button (default 'arrow-up')
101
+ * @attr {string} send-label - Accessible label for the send button (default 'Send message')
102
+ * @attr {string} send-shortcut - 'enter' (default) | 'mod+enter'
103
+ * @attr {boolean} clear-on-send - Clear the value and refocus after a non-cancelled send (default true)
104
+ *
105
+ * @fires input - Fired on every keystroke. detail: { value, originalEvent }
106
+ * @fires send - Fired on a send attempt. Cancelable. detail: { value, originalEvent }
107
+ *
108
+ * @slot prefix - Content at the start of the toolbar row (e.g. an attach menu)
109
+ * @slot suffix - Content at the end of the toolbar row, before the send button (e.g. a model picker)
110
+ * @slot send - Replaces the default send button entirely — the only supported way to customize it
111
+ *
112
+ * @cssprop --message-composer-bg - Card background color
113
+ * @cssprop --message-composer-border-color - Card border color
114
+ * @cssprop --message-composer-radius - Card border radius
115
+ * @cssprop --message-composer-padding - Card inner padding
116
+ * @cssprop --message-composer-gap - Gap between the field/toolbar rows and between toolbar items
117
+ * @cssprop --message-composer-placeholder-color - Field placeholder text color
118
+ * @cssprop --message-composer-min-height - Minimum field height (default one line)
119
+ * @cssprop --message-composer-hover-bg - Card background on hover (flat/ghost variants)
120
+ * @cssprop --message-composer-hover-border-color - Card border on hover (flat/bordered variants)
121
+ * @cssprop --message-composer-focus-bg - Card background when focused (flat variant)
122
+ * @cssprop --message-composer-focus-border-color - Card border when focused (flat variant)
123
+ *
124
+ * @part composer - Root card container
125
+ * @part field - The native `<textarea>` element
126
+ * @part helper - Helper text element
127
+ * @part error - Error text element (`role="alert"`)
128
+ * @part toolbar - Toolbar row below the field
129
+ * @part toolbar-start - Toolbar group holding the `prefix` slot
130
+ * @part toolbar-end - Toolbar group holding the `suffix` slot and the send button
131
+ * @part send-button - The default send button (absent when the `send` slot is used)
132
+ *
133
+ * @example
134
+ * ```html
135
+ * <ore-message-composer placeholder="Message…" send-shortcut="mod+enter"></ore-message-composer>
136
+ * ```
137
+ */
138
+ export declare const MESSAGE_COMPOSER_TAG: "ore-message-composer";
139
+ //# sourceMappingURL=message-composer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-composer.d.ts","sourceRoot":"","sources":["../../../src/inputs/message-composer/message-composer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAmBxB,OAAO,yBAAyB,CAAC;AACjC,OAAO,kBAAkB,CAAC;AAG1B,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD,6CAA6C;AAC7C,MAAM,MAAM,wBAAwB,GAAG;IACrC,uDAAuD;IACvD,KAAK,EAAE;QAAE,aAAa,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C;;;;OAIG;IACH,IAAI,EAAE;QAAE,aAAa,EAAE,aAAa,GAAG,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACpE,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,uBAAuB,GAAG;IACpC,gFAAgF;IAChF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACxD,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8IAA8I;IAC9I,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,qBAAqB;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;CACpD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,eAAO,MAAM,oBAAoB,EAAG,sBAA+B,CAAC"}
@@ -1,2 +1,2 @@
1
- var e=`@layer refine.base{:host{--_cell-size:var(--otp-cell-size,var(--size-12));--_cell-gap:var(--otp-cell-gap,var(--size-2));--_cell-font-size:var(--otp-cell-font-size,var(--text-xl));--_cell-radius:var(--otp-cell-radius,var(--rounded-lg));--_cell-border:var(--otp-cell-border,var(--border));--_cell-border-color:var(--otp-cell-border-color,var(--color-contrast-300));--_cell-bg:var(--otp-cell-bg,var(--color-canvas));--_cell-focus-border:var(--otp-cell-focus-border,var(--_theme-base,var(--color-contrast-700)));gap:var(--size-1);flex-direction:column;display:inline-flex}.otp-group{gap:var(--_cell-gap);align-items:center;display:flex}.cell{box-sizing:border-box;width:var(--_cell-size);height:var(--_cell-size);font-size:var(--_cell-font-size);font-weight:var(--font-semibold);color:var(--color-contrast-900);text-align:center;caret-color:var(--_cell-focus-border);background:var(--_cell-bg);border:var(--_cell-border) solid var(--_cell-border-color);border-radius:var(--_cell-radius);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);padding:0;line-height:1;display:block}.cell::selection{background:var(--_theme-backdrop,var(--color-contrast-100))}.cell:focus{border-color:var(--_cell-focus-border);box-shadow:0 0 0 var(--border-2) color-mix(in oklch, var(--_cell-focus-border) 20%, transparent);outline:none}.cell:disabled{cursor:not-allowed;opacity:.5}.separator{font-size:var(--_cell-font-size);color:var(--color-contrast-400);-webkit-user-select:none;user-select:none}}@layer refine.variants{:host(:not([variant])),:host([variant=solid]){--_cell-bg:var(--otp-cell-bg,var(--color-contrast-50));--_cell-border-color:var(--otp-cell-border-color,var(--color-contrast-300))}:host(:not([variant])) .cell,:host([variant=solid]) .cell{box-shadow:var(--shadow-2xs)}:host([variant=flat]){--_cell-bg:var(--otp-cell-bg,var(--color-contrast-100));--_cell-border-color:var(--otp-cell-border-color,var(--_theme-border,var(--color-contrast-200)))}:host([variant=flat]) .cell{box-shadow:var(--inset-shadow-2xs)}:host([variant=flat]) .cell:hover:not(:disabled){background:var(--otp-cell-hover-bg,color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));border-color:var(--otp-cell-hover-border-color,color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300)))}:host([variant=flat]) .cell:focus{background:var(--otp-cell-focus-bg,color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));border-color:var(--otp-cell-focus-border-color,color-mix(in oklch, var(--_cell-focus-border) 60%, transparent));box-shadow:var(--_theme-shadow)}:host([variant=bordered]){--_cell-bg:var(--otp-cell-bg,var(--_theme-backdrop,var(--color-contrast-50)));--_cell-border-color:var(--otp-cell-border-color,color-mix(in oklch, var(--_cell-focus-border) 70%, transparent))}:host([variant=bordered]) .cell{color:var(--_theme-base);caret-color:var(--_theme-base)}:host([variant=bordered]) .cell:hover:not(:disabled){border-color:var(--otp-cell-hover-border-color,var(--_cell-focus-border))}:host([variant=outline]){--_cell-bg:var(--otp-cell-bg,transparent)}:host([variant=outline]) .cell{box-shadow:none}:host([variant=ghost]){--_cell-bg:var(--otp-cell-bg,transparent);--_cell-border-color:var(--otp-cell-border-color,transparent)}:host([variant=ghost]) .cell{box-shadow:none}:host([variant=ghost]) .cell:hover:not(:disabled){background:var(--otp-cell-hover-bg,var(--color-contrast-100))}}@layer refine.utilities{:host([size=sm]){--_cell-size:var(--size-9);--_cell-font-size:var(--text-base)}:host([size=lg]){--_cell-size:var(--size-14);--_cell-font-size:var(--text-2xl)}}`;exports.default=e;
1
+ var e=`@layer refine.base{:host{--_cell-size:var(--otp-cell-size,var(--size-12));--_cell-gap:var(--otp-cell-gap,var(--size-2));--_cell-font-size:var(--otp-cell-font-size,var(--text-xl));--_cell-radius:var(--otp-cell-radius,var(--rounded-lg));--_cell-border:var(--otp-cell-border,var(--border));--_cell-border-color:var(--otp-cell-border-color,var(--color-contrast-300));--_cell-bg:var(--otp-cell-bg,var(--color-canvas));--_cell-focus-border:var(--otp-cell-focus-border,var(--_theme-base,var(--color-contrast-700)));gap:var(--size-1);flex-direction:column;display:inline-flex}.otp-group{gap:var(--_cell-gap);align-items:center;display:flex}.cell{box-sizing:border-box;width:var(--_cell-size);height:var(--_cell-size);font-size:var(--_cell-font-size);font-weight:var(--font-semibold);color:var(--color-contrast-900);text-align:center;caret-color:var(--_cell-focus-border);background:var(--_cell-bg);border:var(--_cell-border) solid var(--_cell-border-color);border-radius:var(--_cell-radius);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);padding:0;line-height:1;display:block}.cell::selection{background:var(--_theme-backdrop,var(--color-contrast-100))}.cell:focus{border-color:var(--_cell-focus-border);box-shadow:0 0 0 var(--border-2) color-mix(in oklch, var(--_cell-focus-border) 20%, transparent);outline:none}.cell:disabled{cursor:not-allowed;opacity:.5}.separator{font-size:var(--_cell-font-size);color:var(--color-contrast-400);-webkit-user-select:none;user-select:none}}@layer refine.variants{:host(:not([variant])),:host([variant=solid]){--_cell-bg:var(--otp-cell-bg,var(--color-contrast-50));--_cell-border-color:var(--otp-cell-border-color,var(--color-contrast-300))}:host(:not([variant])) .cell,:host([variant=solid]) .cell{box-shadow:var(--shadow-2xs)}:host([variant=flat]){--_cell-bg:var(--otp-cell-bg,var(--color-contrast-100));--_cell-border-color:var(--otp-cell-border-color,color-mix(in oklch, var(--_cell-focus-border) 20%, transparent))}:host([variant=flat]) .cell{box-shadow:var(--inset-shadow-2xs)}:host([variant=flat]) .cell:hover:not(:disabled){background:var(--otp-cell-hover-bg,color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));border-color:var(--otp-cell-hover-border-color,color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300)))}:host([variant=flat]) .cell:focus{background:var(--otp-cell-focus-bg,color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));border-color:var(--otp-cell-focus-border-color,color-mix(in oklch, var(--_cell-focus-border) 60%, transparent));box-shadow:var(--_theme-shadow)}:host([variant=bordered]){--_cell-bg:var(--otp-cell-bg,var(--_theme-backdrop,var(--color-contrast-50)));--_cell-border-color:var(--otp-cell-border-color,color-mix(in oklch, var(--_cell-focus-border) 70%, transparent))}:host([variant=bordered]) .cell{color:var(--_theme-base);caret-color:var(--_theme-base)}:host([variant=bordered]) .cell:hover:not(:disabled){border-color:var(--otp-cell-hover-border-color,var(--_cell-focus-border))}:host([variant=outline]){--_cell-bg:var(--otp-cell-bg,transparent)}:host([variant=outline]) .cell{box-shadow:none}:host([variant=ghost]){--_cell-bg:var(--otp-cell-bg,transparent);--_cell-border-color:var(--otp-cell-border-color,transparent)}:host([variant=ghost]) .cell{box-shadow:none}:host([variant=ghost]) .cell:hover:not(:disabled){background:var(--otp-cell-hover-bg,var(--color-contrast-100))}}@layer refine.utilities{:host([size=sm]){--_cell-size:var(--size-9);--_cell-font-size:var(--text-base)}:host([size=lg]){--_cell-size:var(--size-14);--_cell-font-size:var(--text-2xl)}}`;exports.default=e;
2
2
  //# sourceMappingURL=otp-input.css.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"otp-input.css.cjs","names":[],"sources":["../../../src/inputs/otp-input/otp-input.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_cell-size: var(--otp-cell-size, var(--size-12));\n --_cell-gap: var(--otp-cell-gap, var(--size-2));\n --_cell-font-size: var(--otp-cell-font-size, var(--text-xl));\n --_cell-radius: var(--otp-cell-radius, var(--rounded-lg));\n --_cell-border: var(--otp-cell-border, var(--border));\n --_cell-border-color: var(--otp-cell-border-color, var(--color-contrast-300));\n --_cell-bg: var(--otp-cell-bg, var(--color-canvas));\n --_cell-focus-border: var(--otp-cell-focus-border, var(--_theme-base, var(--color-contrast-700)));\n\n display: inline-flex;\n flex-direction: column;\n gap: var(--size-1);\n }\n\n .otp-group {\n display: flex;\n gap: var(--_cell-gap);\n align-items: center;\n }\n\n .cell {\n box-sizing: border-box;\n display: block;\n width: var(--_cell-size);\n height: var(--_cell-size);\n padding: 0;\n font-size: var(--_cell-font-size);\n font-weight: var(--font-semibold);\n line-height: 1;\n color: var(--color-contrast-900);\n text-align: center;\n caret-color: var(--_cell-focus-border);\n background: var(--_cell-bg);\n border: var(--_cell-border) solid var(--_cell-border-color);\n border-radius: var(--_cell-radius);\n transition:\n border-color var(--transition-fast),\n box-shadow var(--transition-fast);\n }\n\n .cell::selection {\n background: var(--_theme-backdrop, var(--color-contrast-100));\n }\n\n .cell:focus {\n outline: none;\n border-color: var(--_cell-focus-border);\n box-shadow: 0 0 0 var(--border-2) color-mix(in oklch, var(--_cell-focus-border) 20%, transparent);\n }\n\n .cell:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .separator {\n font-size: var(--_cell-font-size);\n color: var(--color-contrast-400);\n user-select: none;\n }\n}\n\n@layer refine.variants {\n /* Solid (default) */\n :host(:not([variant])),\n :host([variant='solid']) {\n --_cell-bg: var(--otp-cell-bg, var(--color-contrast-50));\n --_cell-border-color: var(--otp-cell-border-color, var(--color-contrast-300));\n }\n\n :host(:not([variant])) .cell,\n :host([variant='solid']) .cell {\n box-shadow: var(--shadow-2xs);\n }\n\n /* Flat */\n :host([variant='flat']) {\n --_cell-bg: var(--otp-cell-bg, var(--color-contrast-100));\n --_cell-border-color: var(--otp-cell-border-color, var(--_theme-border, var(--color-contrast-200)));\n }\n\n :host([variant='flat']) .cell {\n box-shadow: var(--inset-shadow-2xs);\n }\n\n :host([variant='flat']) .cell:hover:not(:disabled) {\n background: var(--otp-cell-hover-bg, color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));\n border-color: var(\n --otp-cell-hover-border-color,\n color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300))\n );\n }\n\n :host([variant='flat']) .cell:focus {\n background: var(--otp-cell-focus-bg, color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));\n border-color: var(--otp-cell-focus-border-color, color-mix(in oklch, var(--_cell-focus-border) 60%, transparent));\n box-shadow: var(--_theme-shadow);\n }\n\n /* Bordered */\n :host([variant='bordered']) {\n --_cell-bg: var(--otp-cell-bg, var(--_theme-backdrop, var(--color-contrast-50)));\n --_cell-border-color: var(--otp-cell-border-color, color-mix(in oklch, var(--_cell-focus-border) 70%, transparent));\n }\n\n :host([variant='bordered']) .cell {\n color: var(--_theme-base);\n caret-color: var(--_theme-base);\n }\n\n :host([variant='bordered']) .cell:hover:not(:disabled) {\n border-color: var(--otp-cell-hover-border-color, var(--_cell-focus-border));\n }\n\n /* Outline */\n :host([variant='outline']) {\n --_cell-bg: var(--otp-cell-bg, transparent);\n }\n\n :host([variant='outline']) .cell {\n box-shadow: none;\n }\n\n /* Ghost */\n :host([variant='ghost']) {\n --_cell-bg: var(--otp-cell-bg, transparent);\n --_cell-border-color: var(--otp-cell-border-color, transparent);\n }\n\n :host([variant='ghost']) .cell {\n box-shadow: none;\n }\n\n :host([variant='ghost']) .cell:hover:not(:disabled) {\n background: var(--otp-cell-hover-bg, var(--color-contrast-100));\n }\n}\n\n@layer refine.utilities {\n :host([size='sm']) {\n --_cell-size: var(--size-9);\n --_cell-font-size: var(--text-base);\n }\n\n :host([size='lg']) {\n --_cell-size: var(--size-14);\n --_cell-font-size: var(--text-2xl);\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"otp-input.css.cjs","names":[],"sources":["../../../src/inputs/otp-input/otp-input.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_cell-size: var(--otp-cell-size, var(--size-12));\n --_cell-gap: var(--otp-cell-gap, var(--size-2));\n --_cell-font-size: var(--otp-cell-font-size, var(--text-xl));\n --_cell-radius: var(--otp-cell-radius, var(--rounded-lg));\n --_cell-border: var(--otp-cell-border, var(--border));\n --_cell-border-color: var(--otp-cell-border-color, var(--color-contrast-300));\n --_cell-bg: var(--otp-cell-bg, var(--color-canvas));\n --_cell-focus-border: var(--otp-cell-focus-border, var(--_theme-base, var(--color-contrast-700)));\n\n display: inline-flex;\n flex-direction: column;\n gap: var(--size-1);\n }\n\n .otp-group {\n display: flex;\n gap: var(--_cell-gap);\n align-items: center;\n }\n\n .cell {\n box-sizing: border-box;\n display: block;\n width: var(--_cell-size);\n height: var(--_cell-size);\n padding: 0;\n font-size: var(--_cell-font-size);\n font-weight: var(--font-semibold);\n line-height: 1;\n color: var(--color-contrast-900);\n text-align: center;\n caret-color: var(--_cell-focus-border);\n background: var(--_cell-bg);\n border: var(--_cell-border) solid var(--_cell-border-color);\n border-radius: var(--_cell-radius);\n transition:\n border-color var(--transition-fast),\n box-shadow var(--transition-fast);\n }\n\n .cell::selection {\n background: var(--_theme-backdrop, var(--color-contrast-100));\n }\n\n .cell:focus {\n outline: none;\n border-color: var(--_cell-focus-border);\n box-shadow: 0 0 0 var(--border-2) color-mix(in oklch, var(--_cell-focus-border) 20%, transparent);\n }\n\n .cell:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .separator {\n font-size: var(--_cell-font-size);\n color: var(--color-contrast-400);\n user-select: none;\n }\n}\n\n@layer refine.variants {\n /* Solid (default) */\n :host(:not([variant])),\n :host([variant='solid']) {\n --_cell-bg: var(--otp-cell-bg, var(--color-contrast-50));\n --_cell-border-color: var(--otp-cell-border-color, var(--color-contrast-300));\n }\n\n :host(:not([variant])) .cell,\n :host([variant='solid']) .cell {\n box-shadow: var(--shadow-2xs);\n }\n\n /* Flat */\n :host([variant='flat']) {\n --_cell-bg: var(--otp-cell-bg, var(--color-contrast-100));\n --_cell-border-color: var(--otp-cell-border-color, color-mix(in oklch, var(--_cell-focus-border) 20%, transparent));\n }\n\n :host([variant='flat']) .cell {\n box-shadow: var(--inset-shadow-2xs);\n }\n\n :host([variant='flat']) .cell:hover:not(:disabled) {\n background: var(--otp-cell-hover-bg, color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));\n border-color: var(\n --otp-cell-hover-border-color,\n color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300))\n );\n }\n\n :host([variant='flat']) .cell:focus {\n background: var(--otp-cell-focus-bg, color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));\n border-color: var(--otp-cell-focus-border-color, color-mix(in oklch, var(--_cell-focus-border) 60%, transparent));\n box-shadow: var(--_theme-shadow);\n }\n\n /* Bordered */\n :host([variant='bordered']) {\n --_cell-bg: var(--otp-cell-bg, var(--_theme-backdrop, var(--color-contrast-50)));\n --_cell-border-color: var(--otp-cell-border-color, color-mix(in oklch, var(--_cell-focus-border) 70%, transparent));\n }\n\n :host([variant='bordered']) .cell {\n color: var(--_theme-base);\n caret-color: var(--_theme-base);\n }\n\n :host([variant='bordered']) .cell:hover:not(:disabled) {\n border-color: var(--otp-cell-hover-border-color, var(--_cell-focus-border));\n }\n\n /* Outline */\n :host([variant='outline']) {\n --_cell-bg: var(--otp-cell-bg, transparent);\n }\n\n :host([variant='outline']) .cell {\n box-shadow: none;\n }\n\n /* Ghost */\n :host([variant='ghost']) {\n --_cell-bg: var(--otp-cell-bg, transparent);\n --_cell-border-color: var(--otp-cell-border-color, transparent);\n }\n\n :host([variant='ghost']) .cell {\n box-shadow: none;\n }\n\n :host([variant='ghost']) .cell:hover:not(:disabled) {\n background: var(--otp-cell-hover-bg, var(--color-contrast-100));\n }\n}\n\n@layer refine.utilities {\n :host([size='sm']) {\n --_cell-size: var(--size-9);\n --_cell-font-size: var(--text-base);\n }\n\n :host([size='lg']) {\n --_cell-size: var(--size-14);\n --_cell-font-size: var(--text-2xl);\n }\n}\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  //#region src/inputs/otp-input/otp-input.css?inline
2
- var e = "@layer refine.base{:host{--_cell-size:var(--otp-cell-size,var(--size-12));--_cell-gap:var(--otp-cell-gap,var(--size-2));--_cell-font-size:var(--otp-cell-font-size,var(--text-xl));--_cell-radius:var(--otp-cell-radius,var(--rounded-lg));--_cell-border:var(--otp-cell-border,var(--border));--_cell-border-color:var(--otp-cell-border-color,var(--color-contrast-300));--_cell-bg:var(--otp-cell-bg,var(--color-canvas));--_cell-focus-border:var(--otp-cell-focus-border,var(--_theme-base,var(--color-contrast-700)));gap:var(--size-1);flex-direction:column;display:inline-flex}.otp-group{gap:var(--_cell-gap);align-items:center;display:flex}.cell{box-sizing:border-box;width:var(--_cell-size);height:var(--_cell-size);font-size:var(--_cell-font-size);font-weight:var(--font-semibold);color:var(--color-contrast-900);text-align:center;caret-color:var(--_cell-focus-border);background:var(--_cell-bg);border:var(--_cell-border) solid var(--_cell-border-color);border-radius:var(--_cell-radius);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);padding:0;line-height:1;display:block}.cell::selection{background:var(--_theme-backdrop,var(--color-contrast-100))}.cell:focus{border-color:var(--_cell-focus-border);box-shadow:0 0 0 var(--border-2) color-mix(in oklch, var(--_cell-focus-border) 20%, transparent);outline:none}.cell:disabled{cursor:not-allowed;opacity:.5}.separator{font-size:var(--_cell-font-size);color:var(--color-contrast-400);-webkit-user-select:none;user-select:none}}@layer refine.variants{:host(:not([variant])),:host([variant=solid]){--_cell-bg:var(--otp-cell-bg,var(--color-contrast-50));--_cell-border-color:var(--otp-cell-border-color,var(--color-contrast-300))}:host(:not([variant])) .cell,:host([variant=solid]) .cell{box-shadow:var(--shadow-2xs)}:host([variant=flat]){--_cell-bg:var(--otp-cell-bg,var(--color-contrast-100));--_cell-border-color:var(--otp-cell-border-color,var(--_theme-border,var(--color-contrast-200)))}:host([variant=flat]) .cell{box-shadow:var(--inset-shadow-2xs)}:host([variant=flat]) .cell:hover:not(:disabled){background:var(--otp-cell-hover-bg,color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));border-color:var(--otp-cell-hover-border-color,color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300)))}:host([variant=flat]) .cell:focus{background:var(--otp-cell-focus-bg,color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));border-color:var(--otp-cell-focus-border-color,color-mix(in oklch, var(--_cell-focus-border) 60%, transparent));box-shadow:var(--_theme-shadow)}:host([variant=bordered]){--_cell-bg:var(--otp-cell-bg,var(--_theme-backdrop,var(--color-contrast-50)));--_cell-border-color:var(--otp-cell-border-color,color-mix(in oklch, var(--_cell-focus-border) 70%, transparent))}:host([variant=bordered]) .cell{color:var(--_theme-base);caret-color:var(--_theme-base)}:host([variant=bordered]) .cell:hover:not(:disabled){border-color:var(--otp-cell-hover-border-color,var(--_cell-focus-border))}:host([variant=outline]){--_cell-bg:var(--otp-cell-bg,transparent)}:host([variant=outline]) .cell{box-shadow:none}:host([variant=ghost]){--_cell-bg:var(--otp-cell-bg,transparent);--_cell-border-color:var(--otp-cell-border-color,transparent)}:host([variant=ghost]) .cell{box-shadow:none}:host([variant=ghost]) .cell:hover:not(:disabled){background:var(--otp-cell-hover-bg,var(--color-contrast-100))}}@layer refine.utilities{:host([size=sm]){--_cell-size:var(--size-9);--_cell-font-size:var(--text-base)}:host([size=lg]){--_cell-size:var(--size-14);--_cell-font-size:var(--text-2xl)}}";
2
+ var e = "@layer refine.base{:host{--_cell-size:var(--otp-cell-size,var(--size-12));--_cell-gap:var(--otp-cell-gap,var(--size-2));--_cell-font-size:var(--otp-cell-font-size,var(--text-xl));--_cell-radius:var(--otp-cell-radius,var(--rounded-lg));--_cell-border:var(--otp-cell-border,var(--border));--_cell-border-color:var(--otp-cell-border-color,var(--color-contrast-300));--_cell-bg:var(--otp-cell-bg,var(--color-canvas));--_cell-focus-border:var(--otp-cell-focus-border,var(--_theme-base,var(--color-contrast-700)));gap:var(--size-1);flex-direction:column;display:inline-flex}.otp-group{gap:var(--_cell-gap);align-items:center;display:flex}.cell{box-sizing:border-box;width:var(--_cell-size);height:var(--_cell-size);font-size:var(--_cell-font-size);font-weight:var(--font-semibold);color:var(--color-contrast-900);text-align:center;caret-color:var(--_cell-focus-border);background:var(--_cell-bg);border:var(--_cell-border) solid var(--_cell-border-color);border-radius:var(--_cell-radius);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);padding:0;line-height:1;display:block}.cell::selection{background:var(--_theme-backdrop,var(--color-contrast-100))}.cell:focus{border-color:var(--_cell-focus-border);box-shadow:0 0 0 var(--border-2) color-mix(in oklch, var(--_cell-focus-border) 20%, transparent);outline:none}.cell:disabled{cursor:not-allowed;opacity:.5}.separator{font-size:var(--_cell-font-size);color:var(--color-contrast-400);-webkit-user-select:none;user-select:none}}@layer refine.variants{:host(:not([variant])),:host([variant=solid]){--_cell-bg:var(--otp-cell-bg,var(--color-contrast-50));--_cell-border-color:var(--otp-cell-border-color,var(--color-contrast-300))}:host(:not([variant])) .cell,:host([variant=solid]) .cell{box-shadow:var(--shadow-2xs)}:host([variant=flat]){--_cell-bg:var(--otp-cell-bg,var(--color-contrast-100));--_cell-border-color:var(--otp-cell-border-color,color-mix(in oklch, var(--_cell-focus-border) 20%, transparent))}:host([variant=flat]) .cell{box-shadow:var(--inset-shadow-2xs)}:host([variant=flat]) .cell:hover:not(:disabled){background:var(--otp-cell-hover-bg,color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));border-color:var(--otp-cell-hover-border-color,color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300)))}:host([variant=flat]) .cell:focus{background:var(--otp-cell-focus-bg,color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));border-color:var(--otp-cell-focus-border-color,color-mix(in oklch, var(--_cell-focus-border) 60%, transparent));box-shadow:var(--_theme-shadow)}:host([variant=bordered]){--_cell-bg:var(--otp-cell-bg,var(--_theme-backdrop,var(--color-contrast-50)));--_cell-border-color:var(--otp-cell-border-color,color-mix(in oklch, var(--_cell-focus-border) 70%, transparent))}:host([variant=bordered]) .cell{color:var(--_theme-base);caret-color:var(--_theme-base)}:host([variant=bordered]) .cell:hover:not(:disabled){border-color:var(--otp-cell-hover-border-color,var(--_cell-focus-border))}:host([variant=outline]){--_cell-bg:var(--otp-cell-bg,transparent)}:host([variant=outline]) .cell{box-shadow:none}:host([variant=ghost]){--_cell-bg:var(--otp-cell-bg,transparent);--_cell-border-color:var(--otp-cell-border-color,transparent)}:host([variant=ghost]) .cell{box-shadow:none}:host([variant=ghost]) .cell:hover:not(:disabled){background:var(--otp-cell-hover-bg,var(--color-contrast-100))}}@layer refine.utilities{:host([size=sm]){--_cell-size:var(--size-9);--_cell-font-size:var(--text-base)}:host([size=lg]){--_cell-size:var(--size-14);--_cell-font-size:var(--text-2xl)}}";
3
3
  //#endregion
4
4
  export { e as default };
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"otp-input.css.js","names":[],"sources":["../../../src/inputs/otp-input/otp-input.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_cell-size: var(--otp-cell-size, var(--size-12));\n --_cell-gap: var(--otp-cell-gap, var(--size-2));\n --_cell-font-size: var(--otp-cell-font-size, var(--text-xl));\n --_cell-radius: var(--otp-cell-radius, var(--rounded-lg));\n --_cell-border: var(--otp-cell-border, var(--border));\n --_cell-border-color: var(--otp-cell-border-color, var(--color-contrast-300));\n --_cell-bg: var(--otp-cell-bg, var(--color-canvas));\n --_cell-focus-border: var(--otp-cell-focus-border, var(--_theme-base, var(--color-contrast-700)));\n\n display: inline-flex;\n flex-direction: column;\n gap: var(--size-1);\n }\n\n .otp-group {\n display: flex;\n gap: var(--_cell-gap);\n align-items: center;\n }\n\n .cell {\n box-sizing: border-box;\n display: block;\n width: var(--_cell-size);\n height: var(--_cell-size);\n padding: 0;\n font-size: var(--_cell-font-size);\n font-weight: var(--font-semibold);\n line-height: 1;\n color: var(--color-contrast-900);\n text-align: center;\n caret-color: var(--_cell-focus-border);\n background: var(--_cell-bg);\n border: var(--_cell-border) solid var(--_cell-border-color);\n border-radius: var(--_cell-radius);\n transition:\n border-color var(--transition-fast),\n box-shadow var(--transition-fast);\n }\n\n .cell::selection {\n background: var(--_theme-backdrop, var(--color-contrast-100));\n }\n\n .cell:focus {\n outline: none;\n border-color: var(--_cell-focus-border);\n box-shadow: 0 0 0 var(--border-2) color-mix(in oklch, var(--_cell-focus-border) 20%, transparent);\n }\n\n .cell:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .separator {\n font-size: var(--_cell-font-size);\n color: var(--color-contrast-400);\n user-select: none;\n }\n}\n\n@layer refine.variants {\n /* Solid (default) */\n :host(:not([variant])),\n :host([variant='solid']) {\n --_cell-bg: var(--otp-cell-bg, var(--color-contrast-50));\n --_cell-border-color: var(--otp-cell-border-color, var(--color-contrast-300));\n }\n\n :host(:not([variant])) .cell,\n :host([variant='solid']) .cell {\n box-shadow: var(--shadow-2xs);\n }\n\n /* Flat */\n :host([variant='flat']) {\n --_cell-bg: var(--otp-cell-bg, var(--color-contrast-100));\n --_cell-border-color: var(--otp-cell-border-color, var(--_theme-border, var(--color-contrast-200)));\n }\n\n :host([variant='flat']) .cell {\n box-shadow: var(--inset-shadow-2xs);\n }\n\n :host([variant='flat']) .cell:hover:not(:disabled) {\n background: var(--otp-cell-hover-bg, color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));\n border-color: var(\n --otp-cell-hover-border-color,\n color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300))\n );\n }\n\n :host([variant='flat']) .cell:focus {\n background: var(--otp-cell-focus-bg, color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));\n border-color: var(--otp-cell-focus-border-color, color-mix(in oklch, var(--_cell-focus-border) 60%, transparent));\n box-shadow: var(--_theme-shadow);\n }\n\n /* Bordered */\n :host([variant='bordered']) {\n --_cell-bg: var(--otp-cell-bg, var(--_theme-backdrop, var(--color-contrast-50)));\n --_cell-border-color: var(--otp-cell-border-color, color-mix(in oklch, var(--_cell-focus-border) 70%, transparent));\n }\n\n :host([variant='bordered']) .cell {\n color: var(--_theme-base);\n caret-color: var(--_theme-base);\n }\n\n :host([variant='bordered']) .cell:hover:not(:disabled) {\n border-color: var(--otp-cell-hover-border-color, var(--_cell-focus-border));\n }\n\n /* Outline */\n :host([variant='outline']) {\n --_cell-bg: var(--otp-cell-bg, transparent);\n }\n\n :host([variant='outline']) .cell {\n box-shadow: none;\n }\n\n /* Ghost */\n :host([variant='ghost']) {\n --_cell-bg: var(--otp-cell-bg, transparent);\n --_cell-border-color: var(--otp-cell-border-color, transparent);\n }\n\n :host([variant='ghost']) .cell {\n box-shadow: none;\n }\n\n :host([variant='ghost']) .cell:hover:not(:disabled) {\n background: var(--otp-cell-hover-bg, var(--color-contrast-100));\n }\n}\n\n@layer refine.utilities {\n :host([size='sm']) {\n --_cell-size: var(--size-9);\n --_cell-font-size: var(--text-base);\n }\n\n :host([size='lg']) {\n --_cell-size: var(--size-14);\n --_cell-font-size: var(--text-2xl);\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"otp-input.css.js","names":[],"sources":["../../../src/inputs/otp-input/otp-input.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_cell-size: var(--otp-cell-size, var(--size-12));\n --_cell-gap: var(--otp-cell-gap, var(--size-2));\n --_cell-font-size: var(--otp-cell-font-size, var(--text-xl));\n --_cell-radius: var(--otp-cell-radius, var(--rounded-lg));\n --_cell-border: var(--otp-cell-border, var(--border));\n --_cell-border-color: var(--otp-cell-border-color, var(--color-contrast-300));\n --_cell-bg: var(--otp-cell-bg, var(--color-canvas));\n --_cell-focus-border: var(--otp-cell-focus-border, var(--_theme-base, var(--color-contrast-700)));\n\n display: inline-flex;\n flex-direction: column;\n gap: var(--size-1);\n }\n\n .otp-group {\n display: flex;\n gap: var(--_cell-gap);\n align-items: center;\n }\n\n .cell {\n box-sizing: border-box;\n display: block;\n width: var(--_cell-size);\n height: var(--_cell-size);\n padding: 0;\n font-size: var(--_cell-font-size);\n font-weight: var(--font-semibold);\n line-height: 1;\n color: var(--color-contrast-900);\n text-align: center;\n caret-color: var(--_cell-focus-border);\n background: var(--_cell-bg);\n border: var(--_cell-border) solid var(--_cell-border-color);\n border-radius: var(--_cell-radius);\n transition:\n border-color var(--transition-fast),\n box-shadow var(--transition-fast);\n }\n\n .cell::selection {\n background: var(--_theme-backdrop, var(--color-contrast-100));\n }\n\n .cell:focus {\n outline: none;\n border-color: var(--_cell-focus-border);\n box-shadow: 0 0 0 var(--border-2) color-mix(in oklch, var(--_cell-focus-border) 20%, transparent);\n }\n\n .cell:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .separator {\n font-size: var(--_cell-font-size);\n color: var(--color-contrast-400);\n user-select: none;\n }\n}\n\n@layer refine.variants {\n /* Solid (default) */\n :host(:not([variant])),\n :host([variant='solid']) {\n --_cell-bg: var(--otp-cell-bg, var(--color-contrast-50));\n --_cell-border-color: var(--otp-cell-border-color, var(--color-contrast-300));\n }\n\n :host(:not([variant])) .cell,\n :host([variant='solid']) .cell {\n box-shadow: var(--shadow-2xs);\n }\n\n /* Flat */\n :host([variant='flat']) {\n --_cell-bg: var(--otp-cell-bg, var(--color-contrast-100));\n --_cell-border-color: var(--otp-cell-border-color, color-mix(in oklch, var(--_cell-focus-border) 20%, transparent));\n }\n\n :host([variant='flat']) .cell {\n box-shadow: var(--inset-shadow-2xs);\n }\n\n :host([variant='flat']) .cell:hover:not(:disabled) {\n background: var(--otp-cell-hover-bg, color-mix(in oklch, var(--_theme-base) 6%, var(--color-contrast-100)));\n border-color: var(\n --otp-cell-hover-border-color,\n color-mix(in oklch, var(--_theme-base) 35%, var(--color-contrast-300))\n );\n }\n\n :host([variant='flat']) .cell:focus {\n background: var(--otp-cell-focus-bg, color-mix(in oklch, var(--_theme-base) 8%, var(--color-canvas)));\n border-color: var(--otp-cell-focus-border-color, color-mix(in oklch, var(--_cell-focus-border) 60%, transparent));\n box-shadow: var(--_theme-shadow);\n }\n\n /* Bordered */\n :host([variant='bordered']) {\n --_cell-bg: var(--otp-cell-bg, var(--_theme-backdrop, var(--color-contrast-50)));\n --_cell-border-color: var(--otp-cell-border-color, color-mix(in oklch, var(--_cell-focus-border) 70%, transparent));\n }\n\n :host([variant='bordered']) .cell {\n color: var(--_theme-base);\n caret-color: var(--_theme-base);\n }\n\n :host([variant='bordered']) .cell:hover:not(:disabled) {\n border-color: var(--otp-cell-hover-border-color, var(--_cell-focus-border));\n }\n\n /* Outline */\n :host([variant='outline']) {\n --_cell-bg: var(--otp-cell-bg, transparent);\n }\n\n :host([variant='outline']) .cell {\n box-shadow: none;\n }\n\n /* Ghost */\n :host([variant='ghost']) {\n --_cell-bg: var(--otp-cell-bg, transparent);\n --_cell-border-color: var(--otp-cell-border-color, transparent);\n }\n\n :host([variant='ghost']) .cell {\n box-shadow: none;\n }\n\n :host([variant='ghost']) .cell:hover:not(:disabled) {\n background: var(--otp-cell-hover-bg, var(--color-contrast-100));\n }\n}\n\n@layer refine.utilities {\n :host([size='sm']) {\n --_cell-size: var(--size-9);\n --_cell-font-size: var(--text-base);\n }\n\n :host([size='lg']) {\n --_cell-size: var(--size-14);\n --_cell-font-size: var(--text-2xl);\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- var e=`@layer refine.base{:host{--_size:var(--radio-size,var(--size-5));--_font-size:var(--radio-font-size,var(--text-sm));--_bg:var(--radio-bg,var(--color-contrast-200));--_border:var(--radio-border-color,var(--color-contrast-300));gap:var(--_gap,var(--size-2));min-height:var(--_touch-target);cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;display:inline-flex}.radio-wrapper{width:var(--_size);height:var(--_size);flex-shrink:0;display:block;position:relative}.circle{box-sizing:border-box;width:var(--_size);height:var(--_size);background:var(--_bg);border:var(--border-2) solid var(--_border);transition:background var(--transition-normal), border-color var(--transition-normal), box-shadow var(--transition-normal);border-radius:50%;position:relative}:host(:focus-visible) .circle{box-shadow:var(--_focus-shadow)}.dot{background:var(--_dot-color);opacity:0;width:50%;height:50%;transition:opacity var(--transition-spring), transform var(--transition-spring);border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.5)}.label{font-size:var(--_font-size);color:var(--color-contrast)}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-contrast-500)}.helper-text:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-left:calc(var(--_size) + var(--size-2))}.helper-text:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:calc(var(--_size) + var(--size-2))}.helper-text[role=alert]{color:var(--color-error)}}@layer refine.overrides{:host{--_active-bg:var(--radio-checked-bg,var(--_theme-base));--_dot-color:var(--radio-color,var(--_theme-contrast));--_focus-shadow:var(--_theme-shadow)}:host([checked]) .circle{background:var(--_active-bg);border-color:var(--_active-bg)}:host([checked]) .dot{opacity:1;transform:translate(-50%,-50%)scale(1)}}`;exports.default=e;
1
+ var e=`@layer refine.base{:host{--_size:var(--radio-size,var(--size-5));--_font-size:var(--radio-font-size,var(--text-sm));--_bg:var(--radio-bg,var(--color-contrast-200));--_border:var(--radio-border-color,var(--color-contrast-300));gap:var(--_gap,var(--size-2));min-height:var(--_touch-target);cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;display:inline-flex}.radio-wrapper{width:var(--_size);height:var(--_size);flex-shrink:0;display:block;position:relative}.circle{box-sizing:border-box;width:var(--_size);height:var(--_size);background:var(--_bg);border:var(--border-2) solid var(--_border);transition:background var(--transition-normal), border-color var(--transition-normal), box-shadow var(--transition-normal);border-radius:50%;position:relative}:host(:focus-visible) .circle{box-shadow:var(--_focus-shadow)}.dot{background:var(--_dot-color);opacity:0;width:50%;height:50%;transition:opacity var(--transition-spring), transform var(--transition-spring);border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.5)}.label{font-size:var(--_font-size);color:var(--color-contrast)}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas))}.helper-text:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-left:calc(var(--_size) + var(--size-2))}.helper-text:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:calc(var(--_size) + var(--size-2))}.helper-text[role=alert]{color:var(--color-error)}}@layer refine.overrides{:host{--_active-bg:var(--radio-checked-bg,var(--_theme-base));--_dot-color:var(--radio-color,var(--_theme-contrast));--_focus-shadow:var(--_theme-shadow)}:host([checked]) .circle{background:var(--_active-bg);border-color:var(--_active-bg)}:host([checked]) .dot{opacity:1;transform:translate(-50%,-50%)scale(1)}}`;exports.default=e;
2
2
  //# sourceMappingURL=radio.css.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio.css.cjs","names":[],"sources":["../../../src/inputs/radio/radio.css?inline"],"sourcesContent":["@layer refine.base {\n /* ========================================\n Base Styles & Defaults\n ======================================== */\n\n :host {\n --_size: var(--radio-size, var(--size-5));\n --_font-size: var(--radio-font-size, var(--text-sm));\n --_bg: var(--radio-bg, var(--color-contrast-200));\n --_border: var(--radio-border-color, var(--color-contrast-300));\n\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--_gap, var(--size-2));\n align-items: center;\n min-height: var(--_touch-target);\n cursor: pointer;\n user-select: none;\n }\n\n .radio-wrapper {\n position: relative;\n display: block;\n flex-shrink: 0;\n width: var(--_size);\n height: var(--_size);\n }\n\n .circle {\n position: relative;\n box-sizing: border-box;\n width: var(--_size);\n height: var(--_size);\n background: var(--_bg);\n border: var(--border-2) solid var(--_border);\n border-radius: 50%;\n transition:\n background var(--transition-normal),\n border-color var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n /* ========================================\n Focus State\n ======================================== */\n\n :host(:focus-visible) .circle {\n box-shadow: var(--_focus-shadow);\n }\n\n /* ========================================\n Inner Dot\n ======================================== */\n\n .dot {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 50%;\n height: 50%;\n background: var(--_dot-color);\n border-radius: 50%;\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.5);\n transition:\n opacity var(--transition-spring),\n transform var(--transition-spring);\n }\n\n /* ========================================\n Label\n ======================================== */\n\n .label {\n font-size: var(--_font-size);\n color: var(--color-contrast);\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n padding-inline-start: calc(var(--_size) + var(--size-2));\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-contrast-500);\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n\n@layer refine.overrides {\n /* Map theme variables to radio-specific variables */\n :host {\n --_active-bg: var(--radio-checked-bg, var(--_theme-base));\n --_dot-color: var(--radio-color, var(--_theme-contrast));\n --_focus-shadow: var(--_theme-shadow);\n }\n\n /* ========================================\n Checked State\n ======================================== */\n\n :host([checked]) .circle {\n background: var(--_active-bg);\n border-color: var(--_active-bg);\n }\n\n :host([checked]) .dot {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"radio.css.cjs","names":[],"sources":["../../../src/inputs/radio/radio.css?inline"],"sourcesContent":["@layer refine.base {\n /* ========================================\n Base Styles & Defaults\n ======================================== */\n\n :host {\n --_size: var(--radio-size, var(--size-5));\n --_font-size: var(--radio-font-size, var(--text-sm));\n --_bg: var(--radio-bg, var(--color-contrast-200));\n --_border: var(--radio-border-color, var(--color-contrast-300));\n\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--_gap, var(--size-2));\n align-items: center;\n min-height: var(--_touch-target);\n cursor: pointer;\n user-select: none;\n }\n\n .radio-wrapper {\n position: relative;\n display: block;\n flex-shrink: 0;\n width: var(--_size);\n height: var(--_size);\n }\n\n .circle {\n position: relative;\n box-sizing: border-box;\n width: var(--_size);\n height: var(--_size);\n background: var(--_bg);\n border: var(--border-2) solid var(--_border);\n border-radius: 50%;\n transition:\n background var(--transition-normal),\n border-color var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n /* ========================================\n Focus State\n ======================================== */\n\n :host(:focus-visible) .circle {\n box-shadow: var(--_focus-shadow);\n }\n\n /* ========================================\n Inner Dot\n ======================================== */\n\n .dot {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 50%;\n height: 50%;\n background: var(--_dot-color);\n border-radius: 50%;\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.5);\n transition:\n opacity var(--transition-spring),\n transform var(--transition-spring);\n }\n\n /* ========================================\n Label\n ======================================== */\n\n .label {\n font-size: var(--_font-size);\n color: var(--color-contrast);\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n padding-inline-start: calc(var(--_size) + var(--size-2));\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n\n@layer refine.overrides {\n /* Map theme variables to radio-specific variables */\n :host {\n --_active-bg: var(--radio-checked-bg, var(--_theme-base));\n --_dot-color: var(--radio-color, var(--_theme-contrast));\n --_focus-shadow: var(--_theme-shadow);\n }\n\n /* ========================================\n Checked State\n ======================================== */\n\n :host([checked]) .circle {\n background: var(--_active-bg);\n border-color: var(--_active-bg);\n }\n\n :host([checked]) .dot {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  //#region src/inputs/radio/radio.css?inline
2
- var e = "@layer refine.base{:host{--_size:var(--radio-size,var(--size-5));--_font-size:var(--radio-font-size,var(--text-sm));--_bg:var(--radio-bg,var(--color-contrast-200));--_border:var(--radio-border-color,var(--color-contrast-300));gap:var(--_gap,var(--size-2));min-height:var(--_touch-target);cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;display:inline-flex}.radio-wrapper{width:var(--_size);height:var(--_size);flex-shrink:0;display:block;position:relative}.circle{box-sizing:border-box;width:var(--_size);height:var(--_size);background:var(--_bg);border:var(--border-2) solid var(--_border);transition:background var(--transition-normal), border-color var(--transition-normal), box-shadow var(--transition-normal);border-radius:50%;position:relative}:host(:focus-visible) .circle{box-shadow:var(--_focus-shadow)}.dot{background:var(--_dot-color);opacity:0;width:50%;height:50%;transition:opacity var(--transition-spring), transform var(--transition-spring);border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.5)}.label{font-size:var(--_font-size);color:var(--color-contrast)}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-contrast-500)}.helper-text:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-left:calc(var(--_size) + var(--size-2))}.helper-text:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:calc(var(--_size) + var(--size-2))}.helper-text[role=alert]{color:var(--color-error)}}@layer refine.overrides{:host{--_active-bg:var(--radio-checked-bg,var(--_theme-base));--_dot-color:var(--radio-color,var(--_theme-contrast));--_focus-shadow:var(--_theme-shadow)}:host([checked]) .circle{background:var(--_active-bg);border-color:var(--_active-bg)}:host([checked]) .dot{opacity:1;transform:translate(-50%,-50%)scale(1)}}";
2
+ var e = "@layer refine.base{:host{--_size:var(--radio-size,var(--size-5));--_font-size:var(--radio-font-size,var(--text-sm));--_bg:var(--radio-bg,var(--color-contrast-200));--_border:var(--radio-border-color,var(--color-contrast-300));gap:var(--_gap,var(--size-2));min-height:var(--_touch-target);cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;display:inline-flex}.radio-wrapper{width:var(--_size);height:var(--_size);flex-shrink:0;display:block;position:relative}.circle{box-sizing:border-box;width:var(--_size);height:var(--_size);background:var(--_bg);border:var(--border-2) solid var(--_border);transition:background var(--transition-normal), border-color var(--transition-normal), box-shadow var(--transition-normal);border-radius:50%;position:relative}:host(:focus-visible) .circle{box-shadow:var(--_focus-shadow)}.dot{background:var(--_dot-color);opacity:0;width:50%;height:50%;transition:opacity var(--transition-spring), transform var(--transition-spring);border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.5)}.label{font-size:var(--_font-size);color:var(--color-contrast)}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas))}.helper-text:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-left:calc(var(--_size) + var(--size-2))}.helper-text:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:calc(var(--_size) + var(--size-2))}.helper-text[role=alert]{color:var(--color-error)}}@layer refine.overrides{:host{--_active-bg:var(--radio-checked-bg,var(--_theme-base));--_dot-color:var(--radio-color,var(--_theme-contrast));--_focus-shadow:var(--_theme-shadow)}:host([checked]) .circle{background:var(--_active-bg);border-color:var(--_active-bg)}:host([checked]) .dot{opacity:1;transform:translate(-50%,-50%)scale(1)}}";
3
3
  //#endregion
4
4
  export { e as default };
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"radio.css.js","names":[],"sources":["../../../src/inputs/radio/radio.css?inline"],"sourcesContent":["@layer refine.base {\n /* ========================================\n Base Styles & Defaults\n ======================================== */\n\n :host {\n --_size: var(--radio-size, var(--size-5));\n --_font-size: var(--radio-font-size, var(--text-sm));\n --_bg: var(--radio-bg, var(--color-contrast-200));\n --_border: var(--radio-border-color, var(--color-contrast-300));\n\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--_gap, var(--size-2));\n align-items: center;\n min-height: var(--_touch-target);\n cursor: pointer;\n user-select: none;\n }\n\n .radio-wrapper {\n position: relative;\n display: block;\n flex-shrink: 0;\n width: var(--_size);\n height: var(--_size);\n }\n\n .circle {\n position: relative;\n box-sizing: border-box;\n width: var(--_size);\n height: var(--_size);\n background: var(--_bg);\n border: var(--border-2) solid var(--_border);\n border-radius: 50%;\n transition:\n background var(--transition-normal),\n border-color var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n /* ========================================\n Focus State\n ======================================== */\n\n :host(:focus-visible) .circle {\n box-shadow: var(--_focus-shadow);\n }\n\n /* ========================================\n Inner Dot\n ======================================== */\n\n .dot {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 50%;\n height: 50%;\n background: var(--_dot-color);\n border-radius: 50%;\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.5);\n transition:\n opacity var(--transition-spring),\n transform var(--transition-spring);\n }\n\n /* ========================================\n Label\n ======================================== */\n\n .label {\n font-size: var(--_font-size);\n color: var(--color-contrast);\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n padding-inline-start: calc(var(--_size) + var(--size-2));\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-contrast-500);\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n\n@layer refine.overrides {\n /* Map theme variables to radio-specific variables */\n :host {\n --_active-bg: var(--radio-checked-bg, var(--_theme-base));\n --_dot-color: var(--radio-color, var(--_theme-contrast));\n --_focus-shadow: var(--_theme-shadow);\n }\n\n /* ========================================\n Checked State\n ======================================== */\n\n :host([checked]) .circle {\n background: var(--_active-bg);\n border-color: var(--_active-bg);\n }\n\n :host([checked]) .dot {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"radio.css.js","names":[],"sources":["../../../src/inputs/radio/radio.css?inline"],"sourcesContent":["@layer refine.base {\n /* ========================================\n Base Styles & Defaults\n ======================================== */\n\n :host {\n --_size: var(--radio-size, var(--size-5));\n --_font-size: var(--radio-font-size, var(--text-sm));\n --_bg: var(--radio-bg, var(--color-contrast-200));\n --_border: var(--radio-border-color, var(--color-contrast-300));\n\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--_gap, var(--size-2));\n align-items: center;\n min-height: var(--_touch-target);\n cursor: pointer;\n user-select: none;\n }\n\n .radio-wrapper {\n position: relative;\n display: block;\n flex-shrink: 0;\n width: var(--_size);\n height: var(--_size);\n }\n\n .circle {\n position: relative;\n box-sizing: border-box;\n width: var(--_size);\n height: var(--_size);\n background: var(--_bg);\n border: var(--border-2) solid var(--_border);\n border-radius: 50%;\n transition:\n background var(--transition-normal),\n border-color var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n /* ========================================\n Focus State\n ======================================== */\n\n :host(:focus-visible) .circle {\n box-shadow: var(--_focus-shadow);\n }\n\n /* ========================================\n Inner Dot\n ======================================== */\n\n .dot {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 50%;\n height: 50%;\n background: var(--_dot-color);\n border-radius: 50%;\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.5);\n transition:\n opacity var(--transition-spring),\n transform var(--transition-spring);\n }\n\n /* ========================================\n Label\n ======================================== */\n\n .label {\n font-size: var(--_font-size);\n color: var(--color-contrast);\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n padding-inline-start: calc(var(--_size) + var(--size-2));\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n\n@layer refine.overrides {\n /* Map theme variables to radio-specific variables */\n :host {\n --_active-bg: var(--radio-checked-bg, var(--_theme-base));\n --_dot-color: var(--radio-color, var(--_theme-contrast));\n --_focus-shadow: var(--_theme-shadow);\n }\n\n /* ========================================\n Checked State\n ======================================== */\n\n :host([checked]) .circle {\n background: var(--_active-bg);\n border-color: var(--_active-bg);\n }\n\n :host([checked]) .dot {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- var e=`@layer refine.base{:host{display:block}fieldset{border:none;min-width:0;margin:0;padding:0}legend{margin-bottom:var(--size-2);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-contrast-600);padding:0}legend[hidden]{display:none}.radio-group-items{flex-direction:var(--radio-group-direction,column);gap:var(--radio-group-gap,var(--size-2));display:flex}.helper-text[hidden]{display:none}.helper-text{margin-top:var(--size-1-5);font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-contrast-500);padding-left:2px;padding-right:2px}.error-text{margin-top:var(--size-1-5);font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-error);padding-left:2px;padding-right:2px}}@layer refine.variants{:host([orientation=horizontal]) .radio-group-items{--radio-group-direction:row;flex-wrap:wrap}}`;exports.default=e;
1
+ var e=`@layer refine.base{:host{display:block}fieldset{border:none;min-width:0;margin:0;padding:0}legend{margin-bottom:var(--size-2);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-contrast-600);padding:0}legend[hidden]{display:none}.radio-group-items{flex-direction:var(--radio-group-direction,column);gap:var(--radio-group-gap,var(--size-2));display:flex}.helper-text[hidden]{display:none}.helper-text{margin-top:var(--size-1-5);font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));padding-left:2px;padding-right:2px}.error-text{margin-top:var(--size-1-5);font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-error);padding-left:2px;padding-right:2px}}@layer refine.variants{:host([orientation=horizontal]) .radio-group-items{--radio-group-direction:row;flex-wrap:wrap}}`;exports.default=e;
2
2
  //# sourceMappingURL=radio-group.css.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group.css.cjs","names":[],"sources":["../../../src/inputs/radio-group/radio-group.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n display: block;\n }\n\n fieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: none;\n }\n\n legend {\n padding: 0;\n margin-bottom: var(--size-2);\n font-size: var(--text-sm);\n font-weight: var(--font-medium);\n color: var(--color-contrast-600);\n }\n\n legend[hidden] {\n display: none;\n }\n\n .radio-group-items {\n display: flex;\n flex-direction: var(--radio-group-direction, column);\n gap: var(--radio-group-gap, var(--size-2));\n }\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n padding-inline: 2px;\n margin-top: var(--size-1-5);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-contrast-500);\n }\n\n .error-text {\n padding-inline: 2px;\n margin-top: var(--size-1-5);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-error);\n }\n}\n\n@layer refine.variants {\n :host([orientation='horizontal']) .radio-group-items {\n --radio-group-direction: row;\n\n flex-wrap: wrap;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"radio-group.css.cjs","names":[],"sources":["../../../src/inputs/radio-group/radio-group.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n display: block;\n }\n\n fieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: none;\n }\n\n legend {\n padding: 0;\n margin-bottom: var(--size-2);\n font-size: var(--text-sm);\n font-weight: var(--font-medium);\n color: var(--color-contrast-600);\n }\n\n legend[hidden] {\n display: none;\n }\n\n .radio-group-items {\n display: flex;\n flex-direction: var(--radio-group-direction, column);\n gap: var(--radio-group-gap, var(--size-2));\n }\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n padding-inline: 2px;\n margin-top: var(--size-1-5);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .error-text {\n padding-inline: 2px;\n margin-top: var(--size-1-5);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-error);\n }\n}\n\n@layer refine.variants {\n :host([orientation='horizontal']) .radio-group-items {\n --radio-group-direction: row;\n\n flex-wrap: wrap;\n }\n}\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  //#region src/inputs/radio-group/radio-group.css?inline
2
- var e = "@layer refine.base{:host{display:block}fieldset{border:none;min-width:0;margin:0;padding:0}legend{margin-bottom:var(--size-2);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-contrast-600);padding:0}legend[hidden]{display:none}.radio-group-items{flex-direction:var(--radio-group-direction,column);gap:var(--radio-group-gap,var(--size-2));display:flex}.helper-text[hidden]{display:none}.helper-text{margin-top:var(--size-1-5);font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-contrast-500);padding-left:2px;padding-right:2px}.error-text{margin-top:var(--size-1-5);font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-error);padding-left:2px;padding-right:2px}}@layer refine.variants{:host([orientation=horizontal]) .radio-group-items{--radio-group-direction:row;flex-wrap:wrap}}";
2
+ var e = "@layer refine.base{:host{display:block}fieldset{border:none;min-width:0;margin:0;padding:0}legend{margin-bottom:var(--size-2);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-contrast-600);padding:0}legend[hidden]{display:none}.radio-group-items{flex-direction:var(--radio-group-direction,column);gap:var(--radio-group-gap,var(--size-2));display:flex}.helper-text[hidden]{display:none}.helper-text{margin-top:var(--size-1-5);font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));padding-left:2px;padding-right:2px}.error-text{margin-top:var(--size-1-5);font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-error);padding-left:2px;padding-right:2px}}@layer refine.variants{:host([orientation=horizontal]) .radio-group-items{--radio-group-direction:row;flex-wrap:wrap}}";
3
3
  //#endregion
4
4
  export { e as default };
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group.css.js","names":[],"sources":["../../../src/inputs/radio-group/radio-group.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n display: block;\n }\n\n fieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: none;\n }\n\n legend {\n padding: 0;\n margin-bottom: var(--size-2);\n font-size: var(--text-sm);\n font-weight: var(--font-medium);\n color: var(--color-contrast-600);\n }\n\n legend[hidden] {\n display: none;\n }\n\n .radio-group-items {\n display: flex;\n flex-direction: var(--radio-group-direction, column);\n gap: var(--radio-group-gap, var(--size-2));\n }\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n padding-inline: 2px;\n margin-top: var(--size-1-5);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-contrast-500);\n }\n\n .error-text {\n padding-inline: 2px;\n margin-top: var(--size-1-5);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-error);\n }\n}\n\n@layer refine.variants {\n :host([orientation='horizontal']) .radio-group-items {\n --radio-group-direction: row;\n\n flex-wrap: wrap;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"radio-group.css.js","names":[],"sources":["../../../src/inputs/radio-group/radio-group.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n display: block;\n }\n\n fieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: none;\n }\n\n legend {\n padding: 0;\n margin-bottom: var(--size-2);\n font-size: var(--text-sm);\n font-weight: var(--font-medium);\n color: var(--color-contrast-600);\n }\n\n legend[hidden] {\n display: none;\n }\n\n .radio-group-items {\n display: flex;\n flex-direction: var(--radio-group-direction, column);\n gap: var(--radio-group-gap, var(--size-2));\n }\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n padding-inline: 2px;\n margin-top: var(--size-1-5);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .error-text {\n padding-inline: 2px;\n margin-top: var(--size-1-5);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-error);\n }\n}\n\n@layer refine.variants {\n :host([orientation='horizontal']) .radio-group-items {\n --radio-group-direction: row;\n\n flex-wrap: wrap;\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- var e=`@layer refine.base{:host{--_star-size:var(--rating-star-size,var(--size-7));--_color-empty:var(--rating-color-empty,var(--color-contrast-200));--_color-filled:var(--rating-color-filled,var(--_theme-base,var(--color-warning)));--_gap:var(--rating-gap,var(--size-0_5));flex-wrap:wrap;align-items:center;display:inline-flex}.stars{gap:var(--_gap);align-items:center;display:flex;position:relative}.sparkle-layer{pointer-events:none;position:absolute;inset:0;overflow:visible}.sparkle{pointer-events:none;background:var(--_color-filled);animation:var(--_motion-animation,sparkle-fly var(--_dur,.5s) var(--ease-out) forwards);border-radius:50%;position:absolute}@keyframes sparkle-fly{0%{opacity:.9;transform:translate(-50%, -50%) rotate(var(--_angle)) translateY(0) scale(1)}to{opacity:0;transform:translate(-50%, -50%) rotate(var(--_angle)) translateY(calc(-1 * var(--_dist))) scale(0)}}.star-btn{all:unset;width:var(--_star-size);min-width:var(--_touch-target);height:var(--_star-size);min-height:var(--_touch-target);color:var(--_color-empty);cursor:pointer;border-radius:var(--rounded-sm);transition:color var(--transition-fast), transform .12s var(--ease-spring);justify-content:center;align-items:center;display:inline-flex}.star-btn[data-filled]{color:var(--_color-filled)}:host([solid]) .star-btn ore-icon::part(svg){fill:none}:host([solid]) .star-btn[data-filled] ore-icon::part(svg){fill:currentColor}.star-btn:hover:not([disabled]),.star-btn:focus-visible:not([disabled]){transform:scale(1.08)}.star-btn:focus-visible{outline:var(--border-2) solid var(--_color-filled);outline-offset:var(--border-2)}.star-btn[disabled]{cursor:default}:host([readonly]) .star-btn,:host([disabled]) .star-btn{pointer-events:none}:host([disabled]){opacity:.5}}@layer refine.utilities{:host([size=sm]){--_star-size:var(--size-5)}:host([size=lg]){--_star-size:var(--size-9)}@media (forced-colors:active){.star-btn{color:buttontext}.star-btn[data-filled]{color:highlight;forced-color-adjust:none}.star-btn:focus-visible{box-shadow:none;outline:2px solid highlight}}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-contrast-500);margin-top:var(--size-1)}.helper-text[role=alert]{color:var(--color-error)}}@media (prefers-reduced-motion:reduce){.sparkle{display:none}}`;exports.default=e;
1
+ var e=`@layer refine.base{:host{--_star-size:var(--rating-star-size,var(--size-7));--_color-empty:var(--rating-color-empty,var(--color-contrast-200));--_color-filled:var(--rating-color-filled,var(--_theme-base,var(--color-warning)));--_gap:var(--rating-gap,var(--size-0_5));flex-wrap:wrap;align-items:center;display:inline-flex}.stars{gap:var(--_gap);align-items:center;display:flex;position:relative}.sparkle-layer{pointer-events:none;position:absolute;inset:0;overflow:visible}.sparkle{pointer-events:none;background:var(--_color-filled);animation:var(--_motion-animation,sparkle-fly var(--_dur,.5s) var(--ease-out) forwards);border-radius:50%;position:absolute}@keyframes sparkle-fly{0%{opacity:.9;transform:translate(-50%, -50%) rotate(var(--_angle)) translateY(0) scale(1)}to{opacity:0;transform:translate(-50%, -50%) rotate(var(--_angle)) translateY(calc(-1 * var(--_dist))) scale(0)}}.star-btn{all:unset;width:var(--_star-size);min-width:var(--_touch-target);height:var(--_star-size);min-height:var(--_touch-target);color:var(--_color-empty);cursor:pointer;border-radius:var(--rounded-sm);transition:color var(--transition-fast), transform .12s var(--ease-spring);justify-content:center;align-items:center;display:inline-flex}.star-btn[data-filled]{color:var(--_color-filled)}:host([solid]) .star-btn ore-icon::part(svg){fill:none}:host([solid]) .star-btn[data-filled] ore-icon::part(svg){fill:currentColor}.star-btn:hover:not([disabled]),.star-btn:focus-visible:not([disabled]){transform:scale(1.08)}.star-btn:focus-visible{outline:var(--border-2) solid var(--_color-filled);outline-offset:var(--border-2)}.star-btn[disabled]{cursor:default}:host([readonly]) .star-btn,:host([disabled]) .star-btn{pointer-events:none}:host([disabled]){opacity:.5}}@layer refine.utilities{:host([size=sm]){--_star-size:var(--size-5)}:host([size=lg]){--_star-size:var(--size-9)}@media (forced-colors:active){.star-btn{color:buttontext}.star-btn[data-filled]{color:highlight;forced-color-adjust:none}.star-btn:focus-visible{box-shadow:none;outline:2px solid highlight}}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));margin-top:var(--size-1)}.helper-text[role=alert]{color:var(--color-error)}}@media (prefers-reduced-motion:reduce){.sparkle{display:none}}`;exports.default=e;
2
2
  //# sourceMappingURL=rating.css.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rating.css.cjs","names":[],"sources":["../../../src/inputs/rating/rating.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_star-size: var(--rating-star-size, var(--size-7));\n --_color-empty: var(--rating-color-empty, var(--color-contrast-200));\n --_color-filled: var(--rating-color-filled, var(--_theme-base, var(--color-warning)));\n --_gap: var(--rating-gap, var(--size-0_5));\n\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n }\n\n .stars {\n position: relative;\n display: flex;\n gap: var(--_gap);\n align-items: center;\n }\n\n .sparkle-layer {\n position: absolute;\n inset: 0;\n overflow: visible;\n pointer-events: none;\n }\n\n .sparkle {\n position: absolute;\n pointer-events: none;\n background: var(--_color-filled);\n border-radius: 50%;\n animation: var(--_motion-animation, sparkle-fly var(--_dur, 500ms) var(--ease-out) forwards);\n }\n\n @keyframes sparkle-fly {\n from {\n opacity: 0.9;\n transform: translate(-50%, -50%) rotate(var(--_angle)) translateY(0) scale(1);\n }\n\n to {\n opacity: 0;\n transform: translate(-50%, -50%) rotate(var(--_angle)) translateY(calc(-1 * var(--_dist))) scale(0);\n }\n }\n\n .star-btn {\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--_star-size);\n min-width: var(--_touch-target);\n height: var(--_star-size);\n min-height: var(--_touch-target);\n color: var(--_color-empty);\n cursor: pointer;\n border-radius: var(--rounded-sm);\n transition:\n color var(--transition-fast),\n transform 120ms var(--ease-spring);\n }\n\n .star-btn[data-filled] {\n color: var(--_color-filled);\n }\n\n :host([solid]) .star-btn ore-icon::part(svg) {\n fill: none;\n }\n\n :host([solid]) .star-btn[data-filled] ore-icon::part(svg) {\n fill: currentcolor;\n }\n\n .star-btn:hover:not([disabled]),\n .star-btn:focus-visible:not([disabled]) {\n transform: scale(1.08);\n }\n\n .star-btn:focus-visible {\n outline: var(--border-2) solid var(--_color-filled);\n outline-offset: var(--border-2);\n }\n\n .star-btn[disabled] {\n cursor: default;\n }\n\n :host([readonly]) .star-btn,\n :host([disabled]) .star-btn {\n pointer-events: none;\n }\n\n :host([disabled]) {\n opacity: 0.5;\n }\n}\n\n@layer refine.utilities {\n :host([size='sm']) {\n --_star-size: var(--size-5);\n }\n\n :host([size='lg']) {\n --_star-size: var(--size-9);\n }\n\n @media (forced-colors: active) {\n /* Distinguish filled vs unfilled stars with system button colors */\n .star-btn {\n color: ButtonText;\n }\n\n .star-btn[data-filled] {\n color: Highlight;\n forced-color-adjust: none;\n }\n\n .star-btn:focus-visible {\n outline: 2px solid Highlight;\n box-shadow: none;\n }\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n margin-block-start: var(--size-1);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-contrast-500);\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sparkle {\n display: none;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"rating.css.cjs","names":[],"sources":["../../../src/inputs/rating/rating.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_star-size: var(--rating-star-size, var(--size-7));\n --_color-empty: var(--rating-color-empty, var(--color-contrast-200));\n --_color-filled: var(--rating-color-filled, var(--_theme-base, var(--color-warning)));\n --_gap: var(--rating-gap, var(--size-0_5));\n\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n }\n\n .stars {\n position: relative;\n display: flex;\n gap: var(--_gap);\n align-items: center;\n }\n\n .sparkle-layer {\n position: absolute;\n inset: 0;\n overflow: visible;\n pointer-events: none;\n }\n\n .sparkle {\n position: absolute;\n pointer-events: none;\n background: var(--_color-filled);\n border-radius: 50%;\n animation: var(--_motion-animation, sparkle-fly var(--_dur, 500ms) var(--ease-out) forwards);\n }\n\n @keyframes sparkle-fly {\n from {\n opacity: 0.9;\n transform: translate(-50%, -50%) rotate(var(--_angle)) translateY(0) scale(1);\n }\n\n to {\n opacity: 0;\n transform: translate(-50%, -50%) rotate(var(--_angle)) translateY(calc(-1 * var(--_dist))) scale(0);\n }\n }\n\n .star-btn {\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--_star-size);\n min-width: var(--_touch-target);\n height: var(--_star-size);\n min-height: var(--_touch-target);\n color: var(--_color-empty);\n cursor: pointer;\n border-radius: var(--rounded-sm);\n transition:\n color var(--transition-fast),\n transform 120ms var(--ease-spring);\n }\n\n .star-btn[data-filled] {\n color: var(--_color-filled);\n }\n\n :host([solid]) .star-btn ore-icon::part(svg) {\n fill: none;\n }\n\n :host([solid]) .star-btn[data-filled] ore-icon::part(svg) {\n fill: currentcolor;\n }\n\n .star-btn:hover:not([disabled]),\n .star-btn:focus-visible:not([disabled]) {\n transform: scale(1.08);\n }\n\n .star-btn:focus-visible {\n outline: var(--border-2) solid var(--_color-filled);\n outline-offset: var(--border-2);\n }\n\n .star-btn[disabled] {\n cursor: default;\n }\n\n :host([readonly]) .star-btn,\n :host([disabled]) .star-btn {\n pointer-events: none;\n }\n\n :host([disabled]) {\n opacity: 0.5;\n }\n}\n\n@layer refine.utilities {\n :host([size='sm']) {\n --_star-size: var(--size-5);\n }\n\n :host([size='lg']) {\n --_star-size: var(--size-9);\n }\n\n @media (forced-colors: active) {\n /* Distinguish filled vs unfilled stars with system button colors */\n .star-btn {\n color: ButtonText;\n }\n\n .star-btn[data-filled] {\n color: Highlight;\n forced-color-adjust: none;\n }\n\n .star-btn:focus-visible {\n outline: 2px solid Highlight;\n box-shadow: none;\n }\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n margin-block-start: var(--size-1);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sparkle {\n display: none;\n }\n}\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  //#region src/inputs/rating/rating.css?inline
2
- var e = "@layer refine.base{:host{--_star-size:var(--rating-star-size,var(--size-7));--_color-empty:var(--rating-color-empty,var(--color-contrast-200));--_color-filled:var(--rating-color-filled,var(--_theme-base,var(--color-warning)));--_gap:var(--rating-gap,var(--size-0_5));flex-wrap:wrap;align-items:center;display:inline-flex}.stars{gap:var(--_gap);align-items:center;display:flex;position:relative}.sparkle-layer{pointer-events:none;position:absolute;inset:0;overflow:visible}.sparkle{pointer-events:none;background:var(--_color-filled);animation:var(--_motion-animation,sparkle-fly var(--_dur,.5s) var(--ease-out) forwards);border-radius:50%;position:absolute}@keyframes sparkle-fly{0%{opacity:.9;transform:translate(-50%, -50%) rotate(var(--_angle)) translateY(0) scale(1)}to{opacity:0;transform:translate(-50%, -50%) rotate(var(--_angle)) translateY(calc(-1 * var(--_dist))) scale(0)}}.star-btn{all:unset;width:var(--_star-size);min-width:var(--_touch-target);height:var(--_star-size);min-height:var(--_touch-target);color:var(--_color-empty);cursor:pointer;border-radius:var(--rounded-sm);transition:color var(--transition-fast), transform .12s var(--ease-spring);justify-content:center;align-items:center;display:inline-flex}.star-btn[data-filled]{color:var(--_color-filled)}:host([solid]) .star-btn ore-icon::part(svg){fill:none}:host([solid]) .star-btn[data-filled] ore-icon::part(svg){fill:currentColor}.star-btn:hover:not([disabled]),.star-btn:focus-visible:not([disabled]){transform:scale(1.08)}.star-btn:focus-visible{outline:var(--border-2) solid var(--_color-filled);outline-offset:var(--border-2)}.star-btn[disabled]{cursor:default}:host([readonly]) .star-btn,:host([disabled]) .star-btn{pointer-events:none}:host([disabled]){opacity:.5}}@layer refine.utilities{:host([size=sm]){--_star-size:var(--size-5)}:host([size=lg]){--_star-size:var(--size-9)}@media (forced-colors:active){.star-btn{color:buttontext}.star-btn[data-filled]{color:highlight;forced-color-adjust:none}.star-btn:focus-visible{box-shadow:none;outline:2px solid highlight}}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--color-contrast-500);margin-top:var(--size-1)}.helper-text[role=alert]{color:var(--color-error)}}@media (prefers-reduced-motion:reduce){.sparkle{display:none}}";
2
+ var e = "@layer refine.base{:host{--_star-size:var(--rating-star-size,var(--size-7));--_color-empty:var(--rating-color-empty,var(--color-contrast-200));--_color-filled:var(--rating-color-filled,var(--_theme-base,var(--color-warning)));--_gap:var(--rating-gap,var(--size-0_5));flex-wrap:wrap;align-items:center;display:inline-flex}.stars{gap:var(--_gap);align-items:center;display:flex;position:relative}.sparkle-layer{pointer-events:none;position:absolute;inset:0;overflow:visible}.sparkle{pointer-events:none;background:var(--_color-filled);animation:var(--_motion-animation,sparkle-fly var(--_dur,.5s) var(--ease-out) forwards);border-radius:50%;position:absolute}@keyframes sparkle-fly{0%{opacity:.9;transform:translate(-50%, -50%) rotate(var(--_angle)) translateY(0) scale(1)}to{opacity:0;transform:translate(-50%, -50%) rotate(var(--_angle)) translateY(calc(-1 * var(--_dist))) scale(0)}}.star-btn{all:unset;width:var(--_star-size);min-width:var(--_touch-target);height:var(--_star-size);min-height:var(--_touch-target);color:var(--_color-empty);cursor:pointer;border-radius:var(--rounded-sm);transition:color var(--transition-fast), transform .12s var(--ease-spring);justify-content:center;align-items:center;display:inline-flex}.star-btn[data-filled]{color:var(--_color-filled)}:host([solid]) .star-btn ore-icon::part(svg){fill:none}:host([solid]) .star-btn[data-filled] ore-icon::part(svg){fill:currentColor}.star-btn:hover:not([disabled]),.star-btn:focus-visible:not([disabled]){transform:scale(1.08)}.star-btn:focus-visible{outline:var(--border-2) solid var(--_color-filled);outline-offset:var(--border-2)}.star-btn[disabled]{cursor:default}:host([readonly]) .star-btn,:host([disabled]) .star-btn{pointer-events:none}:host([disabled]){opacity:.5}}@layer refine.utilities{:host([size=sm]){--_star-size:var(--size-5)}:host([size=lg]){--_star-size:var(--size-9)}@media (forced-colors:active){.star-btn{color:buttontext}.star-btn[data-filled]{color:highlight;forced-color-adjust:none}.star-btn:focus-visible{box-shadow:none;outline:2px solid highlight}}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));margin-top:var(--size-1)}.helper-text[role=alert]{color:var(--color-error)}}@media (prefers-reduced-motion:reduce){.sparkle{display:none}}";
3
3
  //#endregion
4
4
  export { e as default };
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"rating.css.js","names":[],"sources":["../../../src/inputs/rating/rating.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_star-size: var(--rating-star-size, var(--size-7));\n --_color-empty: var(--rating-color-empty, var(--color-contrast-200));\n --_color-filled: var(--rating-color-filled, var(--_theme-base, var(--color-warning)));\n --_gap: var(--rating-gap, var(--size-0_5));\n\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n }\n\n .stars {\n position: relative;\n display: flex;\n gap: var(--_gap);\n align-items: center;\n }\n\n .sparkle-layer {\n position: absolute;\n inset: 0;\n overflow: visible;\n pointer-events: none;\n }\n\n .sparkle {\n position: absolute;\n pointer-events: none;\n background: var(--_color-filled);\n border-radius: 50%;\n animation: var(--_motion-animation, sparkle-fly var(--_dur, 500ms) var(--ease-out) forwards);\n }\n\n @keyframes sparkle-fly {\n from {\n opacity: 0.9;\n transform: translate(-50%, -50%) rotate(var(--_angle)) translateY(0) scale(1);\n }\n\n to {\n opacity: 0;\n transform: translate(-50%, -50%) rotate(var(--_angle)) translateY(calc(-1 * var(--_dist))) scale(0);\n }\n }\n\n .star-btn {\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--_star-size);\n min-width: var(--_touch-target);\n height: var(--_star-size);\n min-height: var(--_touch-target);\n color: var(--_color-empty);\n cursor: pointer;\n border-radius: var(--rounded-sm);\n transition:\n color var(--transition-fast),\n transform 120ms var(--ease-spring);\n }\n\n .star-btn[data-filled] {\n color: var(--_color-filled);\n }\n\n :host([solid]) .star-btn ore-icon::part(svg) {\n fill: none;\n }\n\n :host([solid]) .star-btn[data-filled] ore-icon::part(svg) {\n fill: currentcolor;\n }\n\n .star-btn:hover:not([disabled]),\n .star-btn:focus-visible:not([disabled]) {\n transform: scale(1.08);\n }\n\n .star-btn:focus-visible {\n outline: var(--border-2) solid var(--_color-filled);\n outline-offset: var(--border-2);\n }\n\n .star-btn[disabled] {\n cursor: default;\n }\n\n :host([readonly]) .star-btn,\n :host([disabled]) .star-btn {\n pointer-events: none;\n }\n\n :host([disabled]) {\n opacity: 0.5;\n }\n}\n\n@layer refine.utilities {\n :host([size='sm']) {\n --_star-size: var(--size-5);\n }\n\n :host([size='lg']) {\n --_star-size: var(--size-9);\n }\n\n @media (forced-colors: active) {\n /* Distinguish filled vs unfilled stars with system button colors */\n .star-btn {\n color: ButtonText;\n }\n\n .star-btn[data-filled] {\n color: Highlight;\n forced-color-adjust: none;\n }\n\n .star-btn:focus-visible {\n outline: 2px solid Highlight;\n box-shadow: none;\n }\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n margin-block-start: var(--size-1);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: var(--color-contrast-500);\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sparkle {\n display: none;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"rating.css.js","names":[],"sources":["../../../src/inputs/rating/rating.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_star-size: var(--rating-star-size, var(--size-7));\n --_color-empty: var(--rating-color-empty, var(--color-contrast-200));\n --_color-filled: var(--rating-color-filled, var(--_theme-base, var(--color-warning)));\n --_gap: var(--rating-gap, var(--size-0_5));\n\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n }\n\n .stars {\n position: relative;\n display: flex;\n gap: var(--_gap);\n align-items: center;\n }\n\n .sparkle-layer {\n position: absolute;\n inset: 0;\n overflow: visible;\n pointer-events: none;\n }\n\n .sparkle {\n position: absolute;\n pointer-events: none;\n background: var(--_color-filled);\n border-radius: 50%;\n animation: var(--_motion-animation, sparkle-fly var(--_dur, 500ms) var(--ease-out) forwards);\n }\n\n @keyframes sparkle-fly {\n from {\n opacity: 0.9;\n transform: translate(-50%, -50%) rotate(var(--_angle)) translateY(0) scale(1);\n }\n\n to {\n opacity: 0;\n transform: translate(-50%, -50%) rotate(var(--_angle)) translateY(calc(-1 * var(--_dist))) scale(0);\n }\n }\n\n .star-btn {\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--_star-size);\n min-width: var(--_touch-target);\n height: var(--_star-size);\n min-height: var(--_touch-target);\n color: var(--_color-empty);\n cursor: pointer;\n border-radius: var(--rounded-sm);\n transition:\n color var(--transition-fast),\n transform 120ms var(--ease-spring);\n }\n\n .star-btn[data-filled] {\n color: var(--_color-filled);\n }\n\n :host([solid]) .star-btn ore-icon::part(svg) {\n fill: none;\n }\n\n :host([solid]) .star-btn[data-filled] ore-icon::part(svg) {\n fill: currentcolor;\n }\n\n .star-btn:hover:not([disabled]),\n .star-btn:focus-visible:not([disabled]) {\n transform: scale(1.08);\n }\n\n .star-btn:focus-visible {\n outline: var(--border-2) solid var(--_color-filled);\n outline-offset: var(--border-2);\n }\n\n .star-btn[disabled] {\n cursor: default;\n }\n\n :host([readonly]) .star-btn,\n :host([disabled]) .star-btn {\n pointer-events: none;\n }\n\n :host([disabled]) {\n opacity: 0.5;\n }\n}\n\n@layer refine.utilities {\n :host([size='sm']) {\n --_star-size: var(--size-5);\n }\n\n :host([size='lg']) {\n --_star-size: var(--size-9);\n }\n\n @media (forced-colors: active) {\n /* Distinguish filled vs unfilled stars with system button colors */\n .star-btn {\n color: ButtonText;\n }\n\n .star-btn[data-filled] {\n color: Highlight;\n forced-color-adjust: none;\n }\n\n .star-btn:focus-visible {\n outline: 2px solid Highlight;\n box-shadow: none;\n }\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n margin-block-start: var(--size-1);\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sparkle {\n display: none;\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- let e=require("@vielzeug/ore");var t=(t,n,r)=>{let{assistiveId:i,checked:a,disabled:o,errorText:s,handleClick:c,handleKeydown:l,helperText:u,indeterminate:d,labelId:f}=n;(0,e.bind)({attr:{...d!==void 0&&{indeterminate:d},ariaChecked:()=>r===`checkbox`&&d?.value?`mixed`:a.value?`true`:`false`,ariaDescribedby:()=>s.value||u.value?i:null,ariaDisabled:()=>o.value?`true`:null,ariaInvalid:()=>s.value?`true`:null,ariaLabelledby:f,checked:a,role:r,size:t,tabindex:()=>o.value?void 0:0},class:()=>({"is-checked":a.value,"is-disabled":o.value,...d!==void 0&&{"is-indeterminate":d.value}}),on:{click:c,keydown:l}})};exports.applyCheckableBinding=t;
1
+ let e=require("@vielzeug/ore");var t=e=>()=>e.value||void 0,n=(t,n,r)=>{let{assistiveId:i,checked:a,disabled:o,errorText:s,handleClick:c,handleKeydown:l,helperText:u,indeterminate:d,labelId:f,required:p}=n;(0,e.bind)({attr:{...d!==void 0&&{indeterminate:d},ariaChecked:()=>r===`checkbox`&&d?.value?`mixed`:a.value?`true`:`false`,ariaDescribedby:()=>s.value||u.value?i:null,ariaDisabled:()=>o.value?`true`:null,ariaInvalid:()=>s.value?`true`:null,ariaLabelledby:f,ariaRequired:()=>p?.value?`true`:null,checked:a,role:r,size:t,tabindex:()=>o.value?void 0:0},class:()=>({"is-checked":a.value,"is-disabled":o.value,...d!==void 0&&{"is-indeterminate":d.value}}),on:{click:c,keydown:l}})};exports.applyCheckableBinding=n,exports.errorAttr=t;
2
2
  //# sourceMappingURL=field-binding.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-binding.cjs","names":[],"sources":["../../../src/inputs/shared/field-binding.ts"],"sourcesContent":["import type { Readable, Signal } from '@vielzeug/ripple';\n\nimport { bind } from '@vielzeug/ore';\n\nimport type { ComponentSize } from '../../types';\n\n/**\n * Minimal shape of the handle returned by `createCheckable` that\n * `applyCheckableBinding` needs. Matches both checkbox (with `indeterminate`)\n * and switch (without).\n */\nexport type CheckableBindingHandle = {\n assistiveId: string;\n checked: Signal<boolean>;\n disabled: Readable<boolean>;\n errorText: Readable<string>;\n handleClick: (event: MouseEvent) => boolean;\n handleKeydown: (event: KeyboardEvent) => boolean;\n helperText: Readable<string>;\n indeterminate?: Signal<boolean>;\n labelId: string;\n};\n\n/**\n * Applies the standard host bindings shared by all checkable components\n * (checkbox, switch, radio).\n *\n * Wires `role`, all ARIA attributes, `checked`, `size`, `tabindex`, the\n * `is-checked`/`is-disabled` classes, and the `click`/`keydown` event handlers.\n *\n * Pass `handle.indeterminate` for components that need it (checkbox);\n * omit it for switch/radio.\n */\nexport const applyCheckableBinding = (\n fCtxSize: Readable<ComponentSize | undefined>,\n handle: CheckableBindingHandle,\n role: 'checkbox' | 'radio' | 'switch',\n): void => {\n const { assistiveId, checked, disabled, errorText, handleClick, handleKeydown, helperText, indeterminate, labelId } =\n handle;\n\n bind({\n attr: {\n ...(indeterminate !== undefined && { indeterminate }),\n ariaChecked: () => {\n if (role === 'checkbox' && indeterminate?.value) return 'mixed';\n\n return checked.value ? 'true' : 'false';\n },\n ariaDescribedby: () => (errorText.value || helperText.value ? assistiveId : null),\n ariaDisabled: () => (disabled.value ? 'true' : null),\n ariaInvalid: () => (errorText.value ? 'true' : null),\n ariaLabelledby: labelId,\n checked,\n role,\n size: fCtxSize,\n tabindex: () => (disabled.value ? undefined : 0),\n },\n class: () => ({\n 'is-checked': checked.value,\n 'is-disabled': disabled.value,\n ...(indeterminate !== undefined && { 'is-indeterminate': indeterminate.value }),\n }),\n on: {\n click: handleClick,\n keydown: handleKeydown,\n },\n });\n};\n"],"mappings":"+BAiCA,IAAa,GACX,EACA,EACA,IACS,CACT,GAAM,CAAE,cAAa,UAAS,WAAU,YAAW,cAAa,gBAAe,aAAY,gBAAe,WACxG,GAEF,EAAA,EAAA,KAAA,CAAK,CACH,KAAM,CACJ,GAAI,IAAkB,IAAA,IAAa,CAAE,eAAc,EACnD,gBACM,IAAS,YAAc,GAAe,MAAc,QAEjD,EAAQ,MAAQ,OAAS,QAElC,oBAAwB,EAAU,OAAS,EAAW,MAAQ,EAAc,KAC5E,iBAAqB,EAAS,MAAQ,OAAS,KAC/C,gBAAoB,EAAU,MAAQ,OAAS,KAC/C,eAAgB,EAChB,UACA,OACA,KAAM,EACN,aAAiB,EAAS,MAAQ,IAAA,GAAY,CAChD,EACA,WAAc,CACZ,aAAc,EAAQ,MACtB,cAAe,EAAS,MACxB,GAAI,IAAkB,IAAA,IAAa,CAAE,mBAAoB,EAAc,KAAM,CAC/E,GACA,GAAI,CACF,MAAO,EACP,QAAS,CACX,CACF,CAAC,CACH"}
1
+ {"version":3,"file":"field-binding.cjs","names":[],"sources":["../../../src/inputs/shared/field-binding.ts"],"sourcesContent":["import type { Readable, Signal } from '@vielzeug/ripple';\n\nimport { bind } from '@vielzeug/ore';\n\nimport type { ComponentSize } from '../../types';\n\n/**\n * Minimal shape of the handle returned by `createCheckable` that\n * `applyCheckableBinding` needs. Matches both checkbox (with `indeterminate`)\n * and switch (without).\n */\nexport type CheckableBindingHandle = {\n assistiveId: string;\n checked: Signal<boolean>;\n disabled: Readable<boolean>;\n errorText: Readable<string>;\n handleClick: (event: MouseEvent) => boolean;\n handleKeydown: (event: KeyboardEvent) => boolean;\n helperText: Readable<string>;\n indeterminate?: Signal<boolean>;\n labelId: string;\n /** Reflects `aria-required` — there's no native form control here to carry a real `required` attribute. */\n required?: Readable<boolean | undefined>;\n};\n\n/**\n * `prop.string()` already reflects `error`'s raw value as an attribute, but that leaves the\n * attribute present-but-empty (`error=\"\"`) once set instead of removing it — this normalizes\n * an empty error back to \"no attribute at all\". Shared by every text-field component\n * (`ore-input`, `ore-textarea`, `ore-message-composer`) since `bind()`'s own `error` writer\n * needs a derived getter, not the raw prop, to get that behavior.\n *\n * @example\n * ```ts\n * bind({ attr: { error: errorAttr(errorText), size: fCtxProps.size, variant: fCtxProps.variant } });\n * ```\n */\nexport const errorAttr = (errorText: Readable<string>): (() => string | undefined) => {\n return () => errorText.value || undefined;\n};\n\n/**\n * Applies the standard host bindings shared by all checkable components\n * (checkbox, switch, radio).\n *\n * Wires `role`, all ARIA attributes, `checked`, `size`, `tabindex`, the\n * `is-checked`/`is-disabled` classes, and the `click`/`keydown` event handlers.\n *\n * Pass `handle.indeterminate` for components that need it (checkbox);\n * omit it for switch/radio.\n */\nexport const applyCheckableBinding = (\n fCtxSize: Readable<ComponentSize | undefined>,\n handle: CheckableBindingHandle,\n role: 'checkbox' | 'radio' | 'switch',\n): void => {\n const {\n assistiveId,\n checked,\n disabled,\n errorText,\n handleClick,\n handleKeydown,\n helperText,\n indeterminate,\n labelId,\n required,\n } = handle;\n\n bind({\n attr: {\n ...(indeterminate !== undefined && { indeterminate }),\n ariaChecked: () => {\n if (role === 'checkbox' && indeterminate?.value) return 'mixed';\n\n return checked.value ? 'true' : 'false';\n },\n ariaDescribedby: () => (errorText.value || helperText.value ? assistiveId : null),\n ariaDisabled: () => (disabled.value ? 'true' : null),\n ariaInvalid: () => (errorText.value ? 'true' : null),\n ariaLabelledby: labelId,\n ariaRequired: () => (required?.value ? 'true' : null),\n checked,\n role,\n size: fCtxSize,\n tabindex: () => (disabled.value ? undefined : 0),\n },\n class: () => ({\n 'is-checked': checked.value,\n 'is-disabled': disabled.value,\n ...(indeterminate !== undefined && { 'is-indeterminate': indeterminate.value }),\n }),\n on: {\n click: handleClick,\n keydown: handleKeydown,\n },\n });\n};\n"],"mappings":"+BAqCA,IAAa,EAAa,OACX,EAAU,OAAS,IAAA,GAarB,GACX,EACA,EACA,IACS,CACT,GAAM,CACJ,cACA,UACA,WACA,YACA,cACA,gBACA,aACA,gBACA,UACA,YACE,GAEJ,EAAA,EAAA,KAAA,CAAK,CACH,KAAM,CACJ,GAAI,IAAkB,IAAA,IAAa,CAAE,eAAc,EACnD,gBACM,IAAS,YAAc,GAAe,MAAc,QAEjD,EAAQ,MAAQ,OAAS,QAElC,oBAAwB,EAAU,OAAS,EAAW,MAAQ,EAAc,KAC5E,iBAAqB,EAAS,MAAQ,OAAS,KAC/C,gBAAoB,EAAU,MAAQ,OAAS,KAC/C,eAAgB,EAChB,iBAAqB,GAAU,MAAQ,OAAS,KAChD,UACA,OACA,KAAM,EACN,aAAiB,EAAS,MAAQ,IAAA,GAAY,CAChD,EACA,WAAc,CACZ,aAAc,EAAQ,MACtB,cAAe,EAAS,MACxB,GAAI,IAAkB,IAAA,IAAa,CAAE,mBAAoB,EAAc,KAAM,CAC/E,GACA,GAAI,CACF,MAAO,EACP,QAAS,CACX,CACF,CAAC,CACH"}
@@ -15,7 +15,22 @@ export type CheckableBindingHandle = {
15
15
  helperText: Readable<string>;
16
16
  indeterminate?: Signal<boolean>;
17
17
  labelId: string;
18
+ /** Reflects `aria-required` — there's no native form control here to carry a real `required` attribute. */
19
+ required?: Readable<boolean | undefined>;
18
20
  };
21
+ /**
22
+ * `prop.string()` already reflects `error`'s raw value as an attribute, but that leaves the
23
+ * attribute present-but-empty (`error=""`) once set instead of removing it — this normalizes
24
+ * an empty error back to "no attribute at all". Shared by every text-field component
25
+ * (`ore-input`, `ore-textarea`, `ore-message-composer`) since `bind()`'s own `error` writer
26
+ * needs a derived getter, not the raw prop, to get that behavior.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * bind({ attr: { error: errorAttr(errorText), size: fCtxProps.size, variant: fCtxProps.variant } });
31
+ * ```
32
+ */
33
+ export declare const errorAttr: (errorText: Readable<string>) => (() => string | undefined);
19
34
  /**
20
35
  * Applies the standard host bindings shared by all checkable components
21
36
  * (checkbox, switch, radio).
@@ -1 +1 @@
1
- {"version":3,"file":"field-binding.d.ts","sourceRoot":"","sources":["../../../src/inputs/shared/field-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAIzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5B,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IACjD,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC,EAC7C,QAAQ,sBAAsB,EAC9B,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,KACpC,IA+BF,CAAC"}
1
+ {"version":3,"file":"field-binding.d.ts","sourceRoot":"","sources":["../../../src/inputs/shared/field-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAIzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5B,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IACjD,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,2GAA2G;IAC3G,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,QAAQ,CAAC,MAAM,CAAC,KAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAEhF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC,EAC7C,QAAQ,sBAAsB,EAC9B,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,KACpC,IA0CF,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { bind as e } from "@vielzeug/ore";
2
2
  //#region src/inputs/shared/field-binding.ts
3
- var t = (t, n, r) => {
4
- let { assistiveId: i, checked: a, disabled: o, errorText: s, handleClick: c, handleKeydown: l, helperText: u, indeterminate: d, labelId: f } = n;
3
+ var t = (e) => () => e.value || void 0, n = (t, n, r) => {
4
+ let { assistiveId: i, checked: a, disabled: o, errorText: s, handleClick: c, handleKeydown: l, helperText: u, indeterminate: d, labelId: f, required: p } = n;
5
5
  e({
6
6
  attr: {
7
7
  ...d !== void 0 && { indeterminate: d },
@@ -10,6 +10,7 @@ var t = (t, n, r) => {
10
10
  ariaDisabled: () => o.value ? "true" : null,
11
11
  ariaInvalid: () => s.value ? "true" : null,
12
12
  ariaLabelledby: f,
13
+ ariaRequired: () => p?.value ? "true" : null,
13
14
  checked: a,
14
15
  role: r,
15
16
  size: t,
@@ -27,6 +28,6 @@ var t = (t, n, r) => {
27
28
  });
28
29
  };
29
30
  //#endregion
30
- export { t as applyCheckableBinding };
31
+ export { n as applyCheckableBinding, t as errorAttr };
31
32
 
32
33
  //# sourceMappingURL=field-binding.js.map