@vielzeug/refine 1.5.1 → 1.5.2

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 (234) hide show
  1. package/dist/async.cjs +9 -9
  2. package/dist/async.cjs.map +1 -1
  3. package/dist/async.js +30 -31
  4. package/dist/async.js.map +1 -1
  5. package/dist/button.cjs +6 -6
  6. package/dist/button.cjs.map +1 -1
  7. package/dist/button.js +29 -30
  8. package/dist/button.js.map +1 -1
  9. package/dist/calendar.cjs +44 -44
  10. package/dist/calendar.cjs.map +1 -1
  11. package/dist/calendar.js +115 -117
  12. package/dist/calendar.js.map +1 -1
  13. package/dist/checkbox-group.cjs +7 -7
  14. package/dist/checkbox-group.cjs.map +1 -1
  15. package/dist/checkbox-group.js +71 -73
  16. package/dist/checkbox-group.js.map +1 -1
  17. package/dist/checkbox.cjs +3 -3
  18. package/dist/checkbox.cjs.map +1 -1
  19. package/dist/checkbox.js +28 -29
  20. package/dist/checkbox.js.map +1 -1
  21. package/dist/code-window.cjs +7 -7
  22. package/dist/code-window.cjs.map +1 -1
  23. package/dist/code-window.js +17 -18
  24. package/dist/code-window.js.map +1 -1
  25. package/dist/combobox.cjs +1 -1
  26. package/dist/combobox.cjs.map +1 -1
  27. package/dist/combobox.js +11 -12
  28. package/dist/combobox.js.map +1 -1
  29. package/dist/custom-elements.json +5267 -5267
  30. package/dist/datagrid.cjs +66 -66
  31. package/dist/datagrid.cjs.map +1 -1
  32. package/dist/datagrid.js +267 -268
  33. package/dist/datagrid.js.map +1 -1
  34. package/dist/date-picker.cjs +11 -11
  35. package/dist/date-picker.cjs.map +1 -1
  36. package/dist/date-picker.js +8 -9
  37. package/dist/date-picker.js.map +1 -1
  38. package/dist/file-input.cjs +6 -6
  39. package/dist/file-input.cjs.map +1 -1
  40. package/dist/file-input.js +50 -51
  41. package/dist/file-input.js.map +1 -1
  42. package/dist/grid.cjs +1 -1
  43. package/dist/grid.cjs.map +1 -1
  44. package/dist/grid.js +47 -48
  45. package/dist/grid.js.map +1 -1
  46. package/dist/icon.cjs +1 -1
  47. package/dist/icon.cjs.map +1 -1
  48. package/dist/icon.js +26 -27
  49. package/dist/icon.js.map +1 -1
  50. package/dist/input.cjs +20 -20
  51. package/dist/input.cjs.map +1 -1
  52. package/dist/input.js +98 -100
  53. package/dist/input.js.map +1 -1
  54. package/dist/message-composer.cjs +18 -18
  55. package/dist/message-composer.cjs.map +1 -1
  56. package/dist/message-composer.js +113 -115
  57. package/dist/message-composer.js.map +1 -1
  58. package/dist/navbar.cjs +11 -11
  59. package/dist/navbar.cjs.map +1 -1
  60. package/dist/navbar.js +78 -79
  61. package/dist/navbar.js.map +1 -1
  62. package/dist/otp-input.cjs +4 -4
  63. package/dist/otp-input.cjs.map +1 -1
  64. package/dist/otp-input.js +31 -32
  65. package/dist/otp-input.js.map +1 -1
  66. package/dist/progress.cjs +13 -13
  67. package/dist/progress.cjs.map +1 -1
  68. package/dist/progress.js +45 -46
  69. package/dist/progress.js.map +1 -1
  70. package/dist/radio-group.cjs +5 -5
  71. package/dist/radio-group.cjs.map +1 -1
  72. package/dist/radio-group.js +83 -85
  73. package/dist/radio-group.js.map +1 -1
  74. package/dist/radio.cjs +3 -3
  75. package/dist/radio.cjs.map +1 -1
  76. package/dist/radio.js +27 -28
  77. package/dist/radio.js.map +1 -1
  78. package/dist/rating.cjs +4 -4
  79. package/dist/rating.cjs.map +1 -1
  80. package/dist/rating.js +30 -31
  81. package/dist/rating.js.map +1 -1
  82. package/dist/select.cjs +4 -4
  83. package/dist/select.cjs.map +1 -1
  84. package/dist/select.js +88 -89
  85. package/dist/select.js.map +1 -1
  86. package/dist/sidebar.cjs +11 -11
  87. package/dist/sidebar.cjs.map +1 -1
  88. package/dist/sidebar.js +97 -98
  89. package/dist/sidebar.js.map +1 -1
  90. package/dist/skeleton.cjs +3 -3
  91. package/dist/skeleton.cjs.map +1 -1
  92. package/dist/skeleton.js +23 -24
  93. package/dist/skeleton.js.map +1 -1
  94. package/dist/slider.cjs +3 -3
  95. package/dist/slider.cjs.map +1 -1
  96. package/dist/slider.js +65 -66
  97. package/dist/slider.js.map +1 -1
  98. package/dist/switch.cjs +3 -3
  99. package/dist/switch.cjs.map +1 -1
  100. package/dist/switch.js +23 -24
  101. package/dist/switch.js.map +1 -1
  102. package/dist/tab-panel.cjs +7 -7
  103. package/dist/tab-panel.cjs.map +1 -1
  104. package/dist/tab-panel.js +21 -23
  105. package/dist/tab-panel.js.map +1 -1
  106. package/dist/testing.cjs +1 -1
  107. package/dist/testing.cjs.map +1 -1
  108. package/dist/testing.js +4 -5
  109. package/dist/testing.js.map +1 -1
  110. package/dist/textarea.cjs +13 -13
  111. package/dist/textarea.cjs.map +1 -1
  112. package/dist/textarea.js +92 -94
  113. package/dist/textarea.js.map +1 -1
  114. package/dist/time-picker.cjs +9 -9
  115. package/dist/time-picker.cjs.map +1 -1
  116. package/dist/time-picker.js +47 -48
  117. package/dist/time-picker.js.map +1 -1
  118. package/package.json +1 -1
  119. package/dist/ore/dist/_dev.cjs +0 -2
  120. package/dist/ore/dist/_dev.cjs.map +0 -1
  121. package/dist/ore/dist/_dev.js +0 -12
  122. package/dist/ore/dist/_dev.js.map +0 -1
  123. package/dist/ore/dist/base-element.cjs +0 -2
  124. package/dist/ore/dist/base-element.cjs.map +0 -1
  125. package/dist/ore/dist/base-element.js +0 -158
  126. package/dist/ore/dist/base-element.js.map +0 -1
  127. package/dist/ore/dist/context.cjs +0 -2
  128. package/dist/ore/dist/context.cjs.map +0 -1
  129. package/dist/ore/dist/context.js +0 -11
  130. package/dist/ore/dist/context.js.map +0 -1
  131. package/dist/ore/dist/define.cjs +0 -2
  132. package/dist/ore/dist/define.cjs.map +0 -1
  133. package/dist/ore/dist/define.js +0 -27
  134. package/dist/ore/dist/define.js.map +0 -1
  135. package/dist/ore/dist/directives/classMap.cjs +0 -1
  136. package/dist/ore/dist/directives/classMap.js +0 -1
  137. package/dist/ore/dist/directives/each.cjs +0 -1
  138. package/dist/ore/dist/directives/each.js +0 -5
  139. package/dist/ore/dist/directives/live.cjs +0 -2
  140. package/dist/ore/dist/directives/live.cjs.map +0 -1
  141. package/dist/ore/dist/directives/live.js +0 -6
  142. package/dist/ore/dist/directives/live.js.map +0 -1
  143. package/dist/ore/dist/directives/model.cjs +0 -1
  144. package/dist/ore/dist/directives/model.js +0 -3
  145. package/dist/ore/dist/directives/raw.cjs +0 -2
  146. package/dist/ore/dist/directives/raw.cjs.map +0 -1
  147. package/dist/ore/dist/directives/raw.js +0 -38
  148. package/dist/ore/dist/directives/raw.js.map +0 -1
  149. package/dist/ore/dist/directives/styleMap.cjs +0 -2
  150. package/dist/ore/dist/directives/styleMap.cjs.map +0 -1
  151. package/dist/ore/dist/directives/styleMap.js +0 -20
  152. package/dist/ore/dist/directives/styleMap.js.map +0 -1
  153. package/dist/ore/dist/directives/when.cjs +0 -2
  154. package/dist/ore/dist/directives/when.cjs.map +0 -1
  155. package/dist/ore/dist/directives/when.js +0 -38
  156. package/dist/ore/dist/directives/when.js.map +0 -1
  157. package/dist/ore/dist/directives.cjs +0 -1
  158. package/dist/ore/dist/directives.js +0 -8
  159. package/dist/ore/dist/errors.cjs +0 -3
  160. package/dist/ore/dist/errors.cjs.map +0 -1
  161. package/dist/ore/dist/errors.js +0 -50
  162. package/dist/ore/dist/errors.js.map +0 -1
  163. package/dist/ore/dist/forms/context.cjs +0 -2
  164. package/dist/ore/dist/forms/context.cjs.map +0 -1
  165. package/dist/ore/dist/forms/context.js +0 -6
  166. package/dist/ore/dist/forms/context.js.map +0 -1
  167. package/dist/ore/dist/forms/field.cjs +0 -2
  168. package/dist/ore/dist/forms/field.cjs.map +0 -1
  169. package/dist/ore/dist/forms/field.js +0 -42
  170. package/dist/ore/dist/forms/field.js.map +0 -1
  171. package/dist/ore/dist/forms.cjs +0 -1
  172. package/dist/ore/dist/forms.js +0 -3
  173. package/dist/ore/dist/observers/intersection-observe.cjs +0 -2
  174. package/dist/ore/dist/observers/intersection-observe.cjs.map +0 -1
  175. package/dist/ore/dist/observers/intersection-observe.js +0 -12
  176. package/dist/ore/dist/observers/intersection-observe.js.map +0 -1
  177. package/dist/ore/dist/observers/media-observe.cjs +0 -1
  178. package/dist/ore/dist/observers/media-observe.js +0 -1
  179. package/dist/ore/dist/observers/mutation-observe.cjs +0 -1
  180. package/dist/ore/dist/observers/mutation-observe.js +0 -1
  181. package/dist/ore/dist/observers/resize-observe.cjs +0 -2
  182. package/dist/ore/dist/observers/resize-observe.cjs.map +0 -1
  183. package/dist/ore/dist/observers/resize-observe.js +0 -20
  184. package/dist/ore/dist/observers/resize-observe.js.map +0 -1
  185. package/dist/ore/dist/observers.cjs +0 -1
  186. package/dist/ore/dist/observers.js +0 -5
  187. package/dist/ore/dist/props.cjs +0 -2
  188. package/dist/ore/dist/props.cjs.map +0 -1
  189. package/dist/ore/dist/props.js +0 -56
  190. package/dist/ore/dist/props.js.map +0 -1
  191. package/dist/ore/dist/runtime.cjs +0 -2
  192. package/dist/ore/dist/runtime.cjs.map +0 -1
  193. package/dist/ore/dist/runtime.js +0 -25
  194. package/dist/ore/dist/runtime.js.map +0 -1
  195. package/dist/ore/dist/testing/flush.cjs +0 -2
  196. package/dist/ore/dist/testing/flush.cjs.map +0 -1
  197. package/dist/ore/dist/testing/flush.js +0 -11
  198. package/dist/ore/dist/testing/flush.js.map +0 -1
  199. package/dist/ore/dist/testing/mount.cjs +0 -2
  200. package/dist/ore/dist/testing/mount.cjs.map +0 -1
  201. package/dist/ore/dist/testing/mount.js +0 -94
  202. package/dist/ore/dist/testing/mount.js.map +0 -1
  203. package/dist/ore/dist/testing/query.cjs +0 -2
  204. package/dist/ore/dist/testing/query.cjs.map +0 -1
  205. package/dist/ore/dist/testing/query.js +0 -12
  206. package/dist/ore/dist/testing/query.js.map +0 -1
  207. package/dist/ore/dist/testing/render-hook.cjs +0 -1
  208. package/dist/ore/dist/testing/render-hook.js +0 -3
  209. package/dist/ore/dist/testing/testing.cjs +0 -1
  210. package/dist/ore/dist/testing/testing.js +0 -4
  211. package/dist/ore/dist/testing/wait.cjs +0 -1
  212. package/dist/ore/dist/testing/wait.js +0 -1
  213. package/dist/ore/dist/testing.cjs +0 -1
  214. package/dist/ore/dist/testing.js +0 -6
  215. package/dist/ore/dist/types/bindings.cjs +0 -2
  216. package/dist/ore/dist/types/bindings.cjs.map +0 -1
  217. package/dist/ore/dist/types/bindings.js +0 -15
  218. package/dist/ore/dist/types/bindings.js.map +0 -1
  219. package/dist/ore/dist/types.cjs +0 -2
  220. package/dist/ore/dist/types.cjs.map +0 -1
  221. package/dist/ore/dist/types.js +0 -15
  222. package/dist/ore/dist/types.js.map +0 -1
  223. package/dist/ore/dist/utils/css.cjs +0 -2
  224. package/dist/ore/dist/utils/css.cjs.map +0 -1
  225. package/dist/ore/dist/utils/css.js +0 -18
  226. package/dist/ore/dist/utils/css.js.map +0 -1
  227. package/dist/ore/dist/utils/dom.cjs +0 -2
  228. package/dist/ore/dist/utils/dom.cjs.map +0 -1
  229. package/dist/ore/dist/utils/dom.js +0 -43
  230. package/dist/ore/dist/utils/dom.js.map +0 -1
  231. package/dist/ore/dist/utils/id.cjs +0 -2
  232. package/dist/ore/dist/utils/id.cjs.map +0 -1
  233. package/dist/ore/dist/utils/id.js +0 -4
  234. package/dist/ore/dist/utils/id.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.cjs","names":[],"sources":["../src/feedback/skeleton/skeleton.ts"],"sourcesContent":["import { define, html, prop, bind, getHost, onMounted } from '@vielzeug/ore';\nimport { intersectionObserver } from '@vielzeug/ore/observers';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize } from '../../types';\n\nimport { sizableBundle } from '../../shared';\nimport { reducedMotionMixin } from '../../styles';\nimport { safeCSSLength } from '../../utils';\nimport componentStyles from './skeleton.css?inline';\n\n/** Skeleton loader component properties */\nexport type OreSkeletonProps = {\n /** Toggle shimmer animation */\n animated?: boolean;\n /** Height override (e.g. '1rem', '3rem') */\n height?: string;\n /** Number of text lines for `variant='text'` */\n lines?: number;\n /** Radius override (e.g. '9999px', 'var(--rounded-xl)') */\n radius?: string;\n /** Size preset controlling line height and circle size */\n size?: ComponentSize;\n /** Render diagonal stripes instead of the shimmer — useful as a design-mode placeholder */\n striped?: boolean;\n /** Visual variant: 'rect' (default), 'circle', or 'text' */\n variant?: 'rect' | 'circle' | 'text';\n /** Width override (e.g. '12rem', '70%') */\n width?: string;\n};\n\n/**\n * A shimmer placeholder that represents loading content.\n * Control dimensions via the `--skeleton-width` and `--skeleton-height` CSS custom properties,\n * or via `width` / `height` inline styles.\n *\n * @element ore-skeleton\n *\n * @attr {string} variant - Shape: 'rect' (default) | 'circle' | 'text'\n * @attr {string} size - Height/circle preset: 'sm' | 'md' | 'lg'\n * @attr {string} width - Width override (CSS length/percentage)\n * @attr {string} height - Height override (CSS length)\n * @attr {string} radius - Radius override\n * @attr {boolean} animated - Disable with `animated=\"false\"`\n * @attr {number} lines - Text line count (only for `variant='text'`)\n * @attr {boolean} striped - Replace shimmer with diagonal stripes\n *\n * @cssprop --skeleton-bg - Base shimmer color\n * @cssprop --skeleton-highlight - Shimmer highlight color\n * @cssprop --skeleton-radius - Border radius\n * @cssprop --skeleton-size - Circle fallback size\n * @cssprop --skeleton-width - Width (default: 100%)\n * @cssprop --skeleton-height - Height (default: var(--size-4))\n * @cssprop --skeleton-line-gap - Vertical gap between text lines\n * @cssprop --skeleton-last-line-width - Width of the final text line\n * @cssprop --skeleton-duration - Shimmer animation duration\n * @cssprop --skeleton-stripe-size - Width of each diagonal stripe (default: 6px)\n *\n * @part stack - Stack container.\n * @part bone - Skeleton bone element.\n * @example\n * ```html\n * <!-- Paragraph lines -->\n * <ore-skeleton variant=\"text\" lines=\"3\" width=\"100%\"></ore-skeleton>\n *\n * <!-- Avatar -->\n * <ore-skeleton variant=\"circle\" size=\"md\"></ore-skeleton>\n *\n * <!-- Card image -->\n * <ore-skeleton width=\"100%\" height=\"10rem\"></ore-skeleton>\n * ```\n */\nexport const SKELETON_TAG = 'ore-skeleton' as const;\ndefine<OreSkeletonProps>(SKELETON_TAG, {\n props: {\n ...sizableBundle,\n animated: prop.bool(true),\n height: prop.string(),\n lines: prop.number(1),\n radius: prop.string(),\n striped: prop.bool(false),\n variant: prop.oneOf(['rect', 'circle', 'text'] as const, 'rect'),\n width: prop.string(),\n },\n setup(props) {\n const el = getHost();\n\n const isPaused = signal(false);\n const lineCount = () => {\n const value = Math.floor(Number(props.lines.value));\n\n return Number.isFinite(value) && value > 0 ? value : 1;\n };\n const renderLineCount = () => (props.variant.value === 'text' ? lineCount() : 1);\n const styleDeps = () =>\n `${props.width.value ?? ''}|${props.height.value ?? ''}|${props.radius.value ?? ''}|${props.animated.value === false ? '0' : '1'}`;\n\n watch(\n computed(styleDeps),\n () => {\n const safeWidth = safeCSSLength(props.width.value);\n const safeHeight = safeCSSLength(props.height.value);\n const safeRadius = safeCSSLength(props.radius.value);\n\n if (safeWidth) el.style.setProperty('--skeleton-width', safeWidth);\n else el.style.removeProperty('--skeleton-width');\n\n if (safeHeight) el.style.setProperty('--skeleton-height', safeHeight);\n else el.style.removeProperty('--skeleton-height');\n\n if (safeRadius) el.style.setProperty('--skeleton-radius', safeRadius);\n else el.style.removeProperty('--skeleton-radius');\n\n const rawAnimated = el.getAttribute('animated');\n const isAnimated = rawAnimated !== 'false' && props.animated.value !== false;\n\n el.setAttribute('data-animated', isAnimated ? 'true' : 'false');\n },\n { immediate: true },\n );\n\n bind({\n attr: {\n 'data-paused': () => (isPaused.value ? true : undefined),\n },\n });\n\n onMounted(() => {\n const entry = intersectionObserver(el, { threshold: 0 });\n\n watch(entry, (e) => {\n const paused =\n typeof e === 'object' && e !== null && 'isIntersecting' in e\n ? !(e as IntersectionObserverEntry).isIntersecting\n : false;\n\n isPaused.value = paused;\n });\n });\n\n return html`\n <div class=\"stack\" part=\"stack\">\n ${() =>\n Array.from({ length: renderLineCount() }, (_, index) => {\n const isLastLine =\n props.variant.value === 'text' && renderLineCount() > 1 && index === renderLineCount() - 1;\n\n return html`<div\n class=\"bone\"\n part=\"bone\"\n aria-hidden=\"true\"\n :data-last=\"${() => (isLastLine ? 'true' : null)}\"></div>`;\n })}\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n"],"mappings":"oZAwEA,IAAa,EAAe,4BACH,EAAc,CACrC,MAAO,CACL,GAAG,EAAA,cACH,SAAU,EAAA,KAAK,KAAK,EAAI,EACxB,OAAQ,EAAA,KAAK,OAAO,EACpB,MAAO,EAAA,KAAK,OAAO,CAAC,EACpB,OAAQ,EAAA,KAAK,OAAO,EACpB,QAAS,EAAA,KAAK,KAAK,EAAK,EACxB,QAAS,EAAA,KAAK,MAAM,CAAC,OAAQ,SAAU,MAAM,EAAY,MAAM,EAC/D,MAAO,EAAA,KAAK,OAAO,CACrB,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAA,EAAA,QAAA,CAAa,EAEb,GAAA,EAAA,EAAA,OAAA,CAAkB,EAAK,EACvB,MAAkB,CACtB,IAAM,EAAQ,KAAK,MAAM,OAAO,EAAM,MAAM,KAAK,CAAC,EAElD,OAAO,OAAO,SAAS,CAAK,GAAK,EAAQ,EAAI,EAAQ,CACvD,EACM,MAAyB,EAAM,QAAQ,QAAU,OAAS,EAAU,EAAI,EA+C9E,OA3CA,EAAA,EAAA,MAAA,EAAA,EAAA,EAAA,SAAA,KAFE,GAAG,EAAM,MAAM,OAAS,GAAG,GAAG,EAAM,OAAO,OAAS,GAAG,GAAG,EAAM,OAAO,OAAS,GAAG,GAAG,EAAM,SAAS,QAAU,GAAQ,IAAM,KAG3G,MACZ,CACJ,IAAM,EAAY,EAAA,cAAc,EAAM,MAAM,KAAK,EAC3C,EAAa,EAAA,cAAc,EAAM,OAAO,KAAK,EAC7C,EAAa,EAAA,cAAc,EAAM,OAAO,KAAK,EAE/C,EAAW,EAAG,MAAM,YAAY,mBAAoB,CAAS,EAC5D,EAAG,MAAM,eAAe,kBAAkB,EAE3C,EAAY,EAAG,MAAM,YAAY,oBAAqB,CAAU,EAC/D,EAAG,MAAM,eAAe,mBAAmB,EAE5C,EAAY,EAAG,MAAM,YAAY,oBAAqB,CAAU,EAC/D,EAAG,MAAM,eAAe,mBAAmB,EAGhD,IAAM,EADc,EAAG,aAAa,UACjB,IAAgB,SAAW,EAAM,SAAS,QAAU,GAEvE,EAAG,aAAa,gBAAiB,EAAa,OAAS,OAAO,CAChE,EACA,CAAE,UAAW,EAAK,CACpB,GAEA,EAAA,EAAA,KAAA,CAAK,CACH,KAAM,CACJ,kBAAsB,EAAS,MAAQ,GAAO,IAAA,EAChD,CACF,CAAC,GAED,EAAA,EAAA,UAAA,KAAgB,EAGd,EAAA,EAAA,MAAA,CAFc,EAAA,qBAAqB,EAAI,CAAE,UAAW,CAAE,CAEhD,EAAQ,GAAM,CAClB,IAAM,EACJ,OAAO,GAAM,UAAY,GAAc,mBAAoB,EACvD,CAAE,EAAgC,eAClC,GAEN,EAAS,MAAQ,CACnB,CAAC,CACH,CAAC,EAEM,EAAA,IAAI;;cAGL,MAAM,KAAK,CAAE,OAAQ,EAAgB,CAAE,GAAI,EAAG,IAAU,CACtD,IAAM,EACJ,EAAM,QAAQ,QAAU,QAAU,EAAgB,EAAI,GAAK,IAAU,EAAgB,EAAI,EAE3F,MAAO,GAAA,IAAI;;;;gCAIY,EAAa,OAAS,KAAM,SACrD,CAAC,EAAE;;KAGX,EACA,OAAQ,CAAC,EAAA,mBAAoB,EAAA,OAAe,CAC9C,CAAC"}
1
+ {"version":3,"file":"skeleton.cjs","names":[],"sources":["../src/feedback/skeleton/skeleton.ts"],"sourcesContent":["import { define, html, prop, bind, getHost, onMounted } from '@vielzeug/ore';\nimport { intersectionObserver } from '@vielzeug/ore/observers';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize } from '../../types';\n\nimport { sizableBundle } from '../../shared';\nimport { reducedMotionMixin } from '../../styles';\nimport { safeCSSLength } from '../../utils';\nimport componentStyles from './skeleton.css?inline';\n\n/** Skeleton loader component properties */\nexport type OreSkeletonProps = {\n /** Toggle shimmer animation */\n animated?: boolean;\n /** Height override (e.g. '1rem', '3rem') */\n height?: string;\n /** Number of text lines for `variant='text'` */\n lines?: number;\n /** Radius override (e.g. '9999px', 'var(--rounded-xl)') */\n radius?: string;\n /** Size preset controlling line height and circle size */\n size?: ComponentSize;\n /** Render diagonal stripes instead of the shimmer — useful as a design-mode placeholder */\n striped?: boolean;\n /** Visual variant: 'rect' (default), 'circle', or 'text' */\n variant?: 'rect' | 'circle' | 'text';\n /** Width override (e.g. '12rem', '70%') */\n width?: string;\n};\n\n/**\n * A shimmer placeholder that represents loading content.\n * Control dimensions via the `--skeleton-width` and `--skeleton-height` CSS custom properties,\n * or via `width` / `height` inline styles.\n *\n * @element ore-skeleton\n *\n * @attr {string} variant - Shape: 'rect' (default) | 'circle' | 'text'\n * @attr {string} size - Height/circle preset: 'sm' | 'md' | 'lg'\n * @attr {string} width - Width override (CSS length/percentage)\n * @attr {string} height - Height override (CSS length)\n * @attr {string} radius - Radius override\n * @attr {boolean} animated - Disable with `animated=\"false\"`\n * @attr {number} lines - Text line count (only for `variant='text'`)\n * @attr {boolean} striped - Replace shimmer with diagonal stripes\n *\n * @cssprop --skeleton-bg - Base shimmer color\n * @cssprop --skeleton-highlight - Shimmer highlight color\n * @cssprop --skeleton-radius - Border radius\n * @cssprop --skeleton-size - Circle fallback size\n * @cssprop --skeleton-width - Width (default: 100%)\n * @cssprop --skeleton-height - Height (default: var(--size-4))\n * @cssprop --skeleton-line-gap - Vertical gap between text lines\n * @cssprop --skeleton-last-line-width - Width of the final text line\n * @cssprop --skeleton-duration - Shimmer animation duration\n * @cssprop --skeleton-stripe-size - Width of each diagonal stripe (default: 6px)\n *\n * @part stack - Stack container.\n * @part bone - Skeleton bone element.\n * @example\n * ```html\n * <!-- Paragraph lines -->\n * <ore-skeleton variant=\"text\" lines=\"3\" width=\"100%\"></ore-skeleton>\n *\n * <!-- Avatar -->\n * <ore-skeleton variant=\"circle\" size=\"md\"></ore-skeleton>\n *\n * <!-- Card image -->\n * <ore-skeleton width=\"100%\" height=\"10rem\"></ore-skeleton>\n * ```\n */\nexport const SKELETON_TAG = 'ore-skeleton' as const;\ndefine<OreSkeletonProps>(SKELETON_TAG, {\n props: {\n ...sizableBundle,\n animated: prop.bool(true),\n height: prop.string(),\n lines: prop.number(1),\n radius: prop.string(),\n striped: prop.bool(false),\n variant: prop.oneOf(['rect', 'circle', 'text'] as const, 'rect'),\n width: prop.string(),\n },\n setup(props) {\n const el = getHost();\n\n const isPaused = signal(false);\n const lineCount = () => {\n const value = Math.floor(Number(props.lines.value));\n\n return Number.isFinite(value) && value > 0 ? value : 1;\n };\n const renderLineCount = () => (props.variant.value === 'text' ? lineCount() : 1);\n const styleDeps = () =>\n `${props.width.value ?? ''}|${props.height.value ?? ''}|${props.radius.value ?? ''}|${props.animated.value === false ? '0' : '1'}`;\n\n watch(\n computed(styleDeps),\n () => {\n const safeWidth = safeCSSLength(props.width.value);\n const safeHeight = safeCSSLength(props.height.value);\n const safeRadius = safeCSSLength(props.radius.value);\n\n if (safeWidth) el.style.setProperty('--skeleton-width', safeWidth);\n else el.style.removeProperty('--skeleton-width');\n\n if (safeHeight) el.style.setProperty('--skeleton-height', safeHeight);\n else el.style.removeProperty('--skeleton-height');\n\n if (safeRadius) el.style.setProperty('--skeleton-radius', safeRadius);\n else el.style.removeProperty('--skeleton-radius');\n\n const rawAnimated = el.getAttribute('animated');\n const isAnimated = rawAnimated !== 'false' && props.animated.value !== false;\n\n el.setAttribute('data-animated', isAnimated ? 'true' : 'false');\n },\n { immediate: true },\n );\n\n bind({\n attr: {\n 'data-paused': () => (isPaused.value ? true : undefined),\n },\n });\n\n onMounted(() => {\n const entry = intersectionObserver(el, { threshold: 0 });\n\n watch(entry, (e) => {\n const paused =\n typeof e === 'object' && e !== null && 'isIntersecting' in e\n ? !(e as IntersectionObserverEntry).isIntersecting\n : false;\n\n isPaused.value = paused;\n });\n });\n\n return html`\n <div class=\"stack\" part=\"stack\">\n ${() =>\n Array.from({ length: renderLineCount() }, (_, index) => {\n const isLastLine =\n props.variant.value === 'text' && renderLineCount() > 1 && index === renderLineCount() - 1;\n\n return html`<div\n class=\"bone\"\n part=\"bone\"\n aria-hidden=\"true\"\n :data-last=\"${() => (isLastLine ? 'true' : null)}\"></div>`;\n })}\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n"],"mappings":"oVAwEA,IAAa,EAAe,4BACH,EAAc,CACrC,MAAO,CACL,GAAG,EAAA,cACH,SAAU,EAAA,KAAK,KAAK,EAAI,EACxB,OAAQ,EAAA,KAAK,OAAO,EACpB,MAAO,EAAA,KAAK,OAAO,CAAC,EACpB,OAAQ,EAAA,KAAK,OAAO,EACpB,QAAS,EAAA,KAAK,KAAK,EAAK,EACxB,QAAS,EAAA,KAAK,MAAM,CAAC,OAAQ,SAAU,MAAM,EAAY,MAAM,EAC/D,MAAO,EAAA,KAAK,OAAO,CACrB,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAA,EAAA,QAAA,CAAa,EAEb,GAAA,EAAA,EAAA,OAAA,CAAkB,EAAK,EACvB,MAAkB,CACtB,IAAM,EAAQ,KAAK,MAAM,OAAO,EAAM,MAAM,KAAK,CAAC,EAElD,OAAO,OAAO,SAAS,CAAK,GAAK,EAAQ,EAAI,EAAQ,CACvD,EACM,MAAyB,EAAM,QAAQ,QAAU,OAAS,EAAU,EAAI,EA+C9E,OA3CA,EAAA,EAAA,MAAA,EAAA,EAAA,EAAA,SAAA,KAFE,GAAG,EAAM,MAAM,OAAS,GAAG,GAAG,EAAM,OAAO,OAAS,GAAG,GAAG,EAAM,OAAO,OAAS,GAAG,GAAG,EAAM,SAAS,QAAU,GAAQ,IAAM,KAG3G,MACZ,CACJ,IAAM,EAAY,EAAA,cAAc,EAAM,MAAM,KAAK,EAC3C,EAAa,EAAA,cAAc,EAAM,OAAO,KAAK,EAC7C,EAAa,EAAA,cAAc,EAAM,OAAO,KAAK,EAE/C,EAAW,EAAG,MAAM,YAAY,mBAAoB,CAAS,EAC5D,EAAG,MAAM,eAAe,kBAAkB,EAE3C,EAAY,EAAG,MAAM,YAAY,oBAAqB,CAAU,EAC/D,EAAG,MAAM,eAAe,mBAAmB,EAE5C,EAAY,EAAG,MAAM,YAAY,oBAAqB,CAAU,EAC/D,EAAG,MAAM,eAAe,mBAAmB,EAGhD,IAAM,EADc,EAAG,aAAa,UACjB,IAAgB,SAAW,EAAM,SAAS,QAAU,GAEvE,EAAG,aAAa,gBAAiB,EAAa,OAAS,OAAO,CAChE,EACA,CAAE,UAAW,EAAK,CACpB,GAEA,EAAA,EAAA,KAAA,CAAK,CACH,KAAM,CACJ,kBAAsB,EAAS,MAAQ,GAAO,IAAA,EAChD,CACF,CAAC,GAED,EAAA,EAAA,UAAA,KAAgB,EAGd,EAAA,EAAA,MAAA,EAAA,EAAA,EAAA,qBAAA,CAFmC,EAAI,CAAE,UAAW,CAAE,CAEhD,EAAQ,GAAM,CAClB,IAAM,EACJ,OAAO,GAAM,UAAY,GAAc,mBAAoB,EACvD,CAAE,EAAgC,eAClC,GAEN,EAAS,MAAQ,CACnB,CAAC,CACH,CAAC,EAEM,EAAA,IAAI;;cAGL,MAAM,KAAK,CAAE,OAAQ,EAAgB,CAAE,GAAI,EAAG,IAAU,CACtD,IAAM,EACJ,EAAM,QAAQ,QAAU,QAAU,EAAgB,EAAI,GAAK,IAAU,EAAgB,EAAI,EAE3F,MAAO,GAAA,IAAI;;;;gCAIY,EAAa,OAAS,KAAM,SACrD,CAAC,EAAE;;KAGX,EACA,OAAQ,CAAC,EAAA,mBAAoB,EAAA,OAAe,CAC9C,CAAC"}
package/dist/skeleton.js CHANGED
@@ -1,48 +1,47 @@
1
1
  import { reducedMotionMixin as e } from "./styles/mixins/accessibility.css.js";
2
2
  import { sizableBundle as t } from "./shared/prop-bundles.js";
3
3
  import { safeCSSLength as n } from "./utils/css.js";
4
- import { intersectionObserver as r } from "./ore/dist/observers/intersection-observe.js";
5
- import "./ore/dist/observers.js";
6
- import i from "./feedback/skeleton/skeleton.css.js";
7
- import { bind as a, define as o, getHost as s, html as c, onMounted as l, prop as u } from "@vielzeug/ore";
8
- import { computed as d, signal as f, watch as p } from "@vielzeug/ripple";
4
+ import r from "./feedback/skeleton/skeleton.css.js";
5
+ import { bind as i, define as a, getHost as o, html as s, onMounted as c, prop as l } from "@vielzeug/ore";
6
+ import { computed as u, signal as d, watch as f } from "@vielzeug/ripple";
7
+ import { intersectionObserver as p } from "@vielzeug/ore/observers";
9
8
  //#region src/feedback/skeleton/skeleton.ts
10
9
  var m = "ore-skeleton";
11
- o(m, {
10
+ a(m, {
12
11
  props: {
13
12
  ...t,
14
- animated: u.bool(!0),
15
- height: u.string(),
16
- lines: u.number(1),
17
- radius: u.string(),
18
- striped: u.bool(!1),
19
- variant: u.oneOf([
13
+ animated: l.bool(!0),
14
+ height: l.string(),
15
+ lines: l.number(1),
16
+ radius: l.string(),
17
+ striped: l.bool(!1),
18
+ variant: l.oneOf([
20
19
  "rect",
21
20
  "circle",
22
21
  "text"
23
22
  ], "rect"),
24
- width: u.string()
23
+ width: l.string()
25
24
  },
26
25
  setup(e) {
27
- let t = s(), i = f(!1), o = () => {
26
+ let t = o(), r = d(!1), a = () => {
28
27
  let t = Math.floor(Number(e.lines.value));
29
28
  return Number.isFinite(t) && t > 0 ? t : 1;
30
- }, u = () => e.variant.value === "text" ? o() : 1;
31
- return p(d(() => `${e.width.value ?? ""}|${e.height.value ?? ""}|${e.radius.value ?? ""}|${e.animated.value === !1 ? "0" : "1"}`), () => {
29
+ }, l = () => e.variant.value === "text" ? a() : 1;
30
+ return f(u(() => `${e.width.value ?? ""}|${e.height.value ?? ""}|${e.radius.value ?? ""}|${e.animated.value === !1 ? "0" : "1"}`), () => {
32
31
  let r = n(e.width.value), i = n(e.height.value), a = n(e.radius.value);
33
32
  r ? t.style.setProperty("--skeleton-width", r) : t.style.removeProperty("--skeleton-width"), i ? t.style.setProperty("--skeleton-height", i) : t.style.removeProperty("--skeleton-height"), a ? t.style.setProperty("--skeleton-radius", a) : t.style.removeProperty("--skeleton-radius");
34
33
  let o = t.getAttribute("animated") !== "false" && e.animated.value !== !1;
35
34
  t.setAttribute("data-animated", o ? "true" : "false");
36
- }, { immediate: !0 }), a({ attr: { "data-paused": () => i.value ? !0 : void 0 } }), l(() => {
37
- p(r(t, { threshold: 0 }), (e) => {
35
+ }, { immediate: !0 }), i({ attr: { "data-paused": () => r.value ? !0 : void 0 } }), c(() => {
36
+ f(p(t, { threshold: 0 }), (e) => {
38
37
  let t = typeof e == "object" && e && "isIntersecting" in e ? !e.isIntersecting : !1;
39
- i.value = t;
38
+ r.value = t;
40
39
  });
41
- }), c`
40
+ }), s`
42
41
  <div class="stack" part="stack">
43
- ${() => Array.from({ length: u() }, (t, n) => {
44
- let r = e.variant.value === "text" && u() > 1 && n === u() - 1;
45
- return c`<div
42
+ ${() => Array.from({ length: l() }, (t, n) => {
43
+ let r = e.variant.value === "text" && l() > 1 && n === l() - 1;
44
+ return s`<div
46
45
  class="bone"
47
46
  part="bone"
48
47
  aria-hidden="true"
@@ -51,7 +50,7 @@ o(m, {
51
50
  </div>
52
51
  `;
53
52
  },
54
- styles: [e, i]
53
+ styles: [e, r]
55
54
  });
56
55
  //#endregion
57
56
  export { m as SKELETON_TAG };
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.js","names":[],"sources":["../src/feedback/skeleton/skeleton.ts"],"sourcesContent":["import { define, html, prop, bind, getHost, onMounted } from '@vielzeug/ore';\nimport { intersectionObserver } from '@vielzeug/ore/observers';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize } from '../../types';\n\nimport { sizableBundle } from '../../shared';\nimport { reducedMotionMixin } from '../../styles';\nimport { safeCSSLength } from '../../utils';\nimport componentStyles from './skeleton.css?inline';\n\n/** Skeleton loader component properties */\nexport type OreSkeletonProps = {\n /** Toggle shimmer animation */\n animated?: boolean;\n /** Height override (e.g. '1rem', '3rem') */\n height?: string;\n /** Number of text lines for `variant='text'` */\n lines?: number;\n /** Radius override (e.g. '9999px', 'var(--rounded-xl)') */\n radius?: string;\n /** Size preset controlling line height and circle size */\n size?: ComponentSize;\n /** Render diagonal stripes instead of the shimmer — useful as a design-mode placeholder */\n striped?: boolean;\n /** Visual variant: 'rect' (default), 'circle', or 'text' */\n variant?: 'rect' | 'circle' | 'text';\n /** Width override (e.g. '12rem', '70%') */\n width?: string;\n};\n\n/**\n * A shimmer placeholder that represents loading content.\n * Control dimensions via the `--skeleton-width` and `--skeleton-height` CSS custom properties,\n * or via `width` / `height` inline styles.\n *\n * @element ore-skeleton\n *\n * @attr {string} variant - Shape: 'rect' (default) | 'circle' | 'text'\n * @attr {string} size - Height/circle preset: 'sm' | 'md' | 'lg'\n * @attr {string} width - Width override (CSS length/percentage)\n * @attr {string} height - Height override (CSS length)\n * @attr {string} radius - Radius override\n * @attr {boolean} animated - Disable with `animated=\"false\"`\n * @attr {number} lines - Text line count (only for `variant='text'`)\n * @attr {boolean} striped - Replace shimmer with diagonal stripes\n *\n * @cssprop --skeleton-bg - Base shimmer color\n * @cssprop --skeleton-highlight - Shimmer highlight color\n * @cssprop --skeleton-radius - Border radius\n * @cssprop --skeleton-size - Circle fallback size\n * @cssprop --skeleton-width - Width (default: 100%)\n * @cssprop --skeleton-height - Height (default: var(--size-4))\n * @cssprop --skeleton-line-gap - Vertical gap between text lines\n * @cssprop --skeleton-last-line-width - Width of the final text line\n * @cssprop --skeleton-duration - Shimmer animation duration\n * @cssprop --skeleton-stripe-size - Width of each diagonal stripe (default: 6px)\n *\n * @part stack - Stack container.\n * @part bone - Skeleton bone element.\n * @example\n * ```html\n * <!-- Paragraph lines -->\n * <ore-skeleton variant=\"text\" lines=\"3\" width=\"100%\"></ore-skeleton>\n *\n * <!-- Avatar -->\n * <ore-skeleton variant=\"circle\" size=\"md\"></ore-skeleton>\n *\n * <!-- Card image -->\n * <ore-skeleton width=\"100%\" height=\"10rem\"></ore-skeleton>\n * ```\n */\nexport const SKELETON_TAG = 'ore-skeleton' as const;\ndefine<OreSkeletonProps>(SKELETON_TAG, {\n props: {\n ...sizableBundle,\n animated: prop.bool(true),\n height: prop.string(),\n lines: prop.number(1),\n radius: prop.string(),\n striped: prop.bool(false),\n variant: prop.oneOf(['rect', 'circle', 'text'] as const, 'rect'),\n width: prop.string(),\n },\n setup(props) {\n const el = getHost();\n\n const isPaused = signal(false);\n const lineCount = () => {\n const value = Math.floor(Number(props.lines.value));\n\n return Number.isFinite(value) && value > 0 ? value : 1;\n };\n const renderLineCount = () => (props.variant.value === 'text' ? lineCount() : 1);\n const styleDeps = () =>\n `${props.width.value ?? ''}|${props.height.value ?? ''}|${props.radius.value ?? ''}|${props.animated.value === false ? '0' : '1'}`;\n\n watch(\n computed(styleDeps),\n () => {\n const safeWidth = safeCSSLength(props.width.value);\n const safeHeight = safeCSSLength(props.height.value);\n const safeRadius = safeCSSLength(props.radius.value);\n\n if (safeWidth) el.style.setProperty('--skeleton-width', safeWidth);\n else el.style.removeProperty('--skeleton-width');\n\n if (safeHeight) el.style.setProperty('--skeleton-height', safeHeight);\n else el.style.removeProperty('--skeleton-height');\n\n if (safeRadius) el.style.setProperty('--skeleton-radius', safeRadius);\n else el.style.removeProperty('--skeleton-radius');\n\n const rawAnimated = el.getAttribute('animated');\n const isAnimated = rawAnimated !== 'false' && props.animated.value !== false;\n\n el.setAttribute('data-animated', isAnimated ? 'true' : 'false');\n },\n { immediate: true },\n );\n\n bind({\n attr: {\n 'data-paused': () => (isPaused.value ? true : undefined),\n },\n });\n\n onMounted(() => {\n const entry = intersectionObserver(el, { threshold: 0 });\n\n watch(entry, (e) => {\n const paused =\n typeof e === 'object' && e !== null && 'isIntersecting' in e\n ? !(e as IntersectionObserverEntry).isIntersecting\n : false;\n\n isPaused.value = paused;\n });\n });\n\n return html`\n <div class=\"stack\" part=\"stack\">\n ${() =>\n Array.from({ length: renderLineCount() }, (_, index) => {\n const isLastLine =\n props.variant.value === 'text' && renderLineCount() > 1 && index === renderLineCount() - 1;\n\n return html`<div\n class=\"bone\"\n part=\"bone\"\n aria-hidden=\"true\"\n :data-last=\"${() => (isLastLine ? 'true' : null)}\"></div>`;\n })}\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n"],"mappings":";;;;;;;;;AAwEA,IAAa,IAAe;AAC5B,EAAyB,GAAc;CACrC,OAAO;EACL,GAAG;EACH,UAAU,EAAK,KAAK,EAAI;EACxB,QAAQ,EAAK,OAAO;EACpB,OAAO,EAAK,OAAO,CAAC;EACpB,QAAQ,EAAK,OAAO;EACpB,SAAS,EAAK,KAAK,EAAK;EACxB,SAAS,EAAK,MAAM;GAAC;GAAQ;GAAU;EAAM,GAAY,MAAM;EAC/D,OAAO,EAAK,OAAO;CACrB;CACA,MAAM,GAAO;EACX,IAAM,IAAK,EAAQ,GAEb,IAAW,EAAO,EAAK,GACvB,UAAkB;GACtB,IAAM,IAAQ,KAAK,MAAM,OAAO,EAAM,MAAM,KAAK,CAAC;GAElD,OAAO,OAAO,SAAS,CAAK,KAAK,IAAQ,IAAI,IAAQ;EACvD,GACM,UAAyB,EAAM,QAAQ,UAAU,SAAS,EAAU,IAAI;EA+C9E,OA3CA,EACE,QAHA,GAAG,EAAM,MAAM,SAAS,GAAG,GAAG,EAAM,OAAO,SAAS,GAAG,GAAG,EAAM,OAAO,SAAS,GAAG,GAAG,EAAM,SAAS,UAAU,KAAQ,MAAM,KAG3G,SACZ;GACJ,IAAM,IAAY,EAAc,EAAM,MAAM,KAAK,GAC3C,IAAa,EAAc,EAAM,OAAO,KAAK,GAC7C,IAAa,EAAc,EAAM,OAAO,KAAK;GAQnD,AANI,IAAW,EAAG,MAAM,YAAY,oBAAoB,CAAS,IAC5D,EAAG,MAAM,eAAe,kBAAkB,GAE3C,IAAY,EAAG,MAAM,YAAY,qBAAqB,CAAU,IAC/D,EAAG,MAAM,eAAe,mBAAmB,GAE5C,IAAY,EAAG,MAAM,YAAY,qBAAqB,CAAU,IAC/D,EAAG,MAAM,eAAe,mBAAmB;GAGhD,IAAM,IADc,EAAG,aAAa,UACjB,MAAgB,WAAW,EAAM,SAAS,UAAU;GAEvE,EAAG,aAAa,iBAAiB,IAAa,SAAS,OAAO;EAChE,GACA,EAAE,WAAW,GAAK,CACpB,GAEA,EAAK,EACH,MAAM,EACJ,qBAAsB,EAAS,QAAQ,KAAO,KAAA,EAChD,EACF,CAAC,GAED,QAAgB;GAGd,EAFc,EAAqB,GAAI,EAAE,WAAW,EAAE,CAEhD,IAAQ,MAAM;IAClB,IAAM,IACJ,OAAO,KAAM,YAAY,KAAc,oBAAoB,IACvD,CAAE,EAAgC,iBAClC;IAEN,EAAS,QAAQ;GACnB,CAAC;EACH,CAAC,GAEM,CAAI;;gBAGL,MAAM,KAAK,EAAE,QAAQ,EAAgB,EAAE,IAAI,GAAG,MAAU;GACtD,IAAM,IACJ,EAAM,QAAQ,UAAU,UAAU,EAAgB,IAAI,KAAK,MAAU,EAAgB,IAAI;GAE3F,OAAO,CAAI;;;;kCAIY,IAAa,SAAS,KAAM;EACrD,CAAC,EAAE;;;CAGX;CACA,QAAQ,CAAC,GAAoB,CAAe;AAC9C,CAAC"}
1
+ {"version":3,"file":"skeleton.js","names":[],"sources":["../src/feedback/skeleton/skeleton.ts"],"sourcesContent":["import { define, html, prop, bind, getHost, onMounted } from '@vielzeug/ore';\nimport { intersectionObserver } from '@vielzeug/ore/observers';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize } from '../../types';\n\nimport { sizableBundle } from '../../shared';\nimport { reducedMotionMixin } from '../../styles';\nimport { safeCSSLength } from '../../utils';\nimport componentStyles from './skeleton.css?inline';\n\n/** Skeleton loader component properties */\nexport type OreSkeletonProps = {\n /** Toggle shimmer animation */\n animated?: boolean;\n /** Height override (e.g. '1rem', '3rem') */\n height?: string;\n /** Number of text lines for `variant='text'` */\n lines?: number;\n /** Radius override (e.g. '9999px', 'var(--rounded-xl)') */\n radius?: string;\n /** Size preset controlling line height and circle size */\n size?: ComponentSize;\n /** Render diagonal stripes instead of the shimmer — useful as a design-mode placeholder */\n striped?: boolean;\n /** Visual variant: 'rect' (default), 'circle', or 'text' */\n variant?: 'rect' | 'circle' | 'text';\n /** Width override (e.g. '12rem', '70%') */\n width?: string;\n};\n\n/**\n * A shimmer placeholder that represents loading content.\n * Control dimensions via the `--skeleton-width` and `--skeleton-height` CSS custom properties,\n * or via `width` / `height` inline styles.\n *\n * @element ore-skeleton\n *\n * @attr {string} variant - Shape: 'rect' (default) | 'circle' | 'text'\n * @attr {string} size - Height/circle preset: 'sm' | 'md' | 'lg'\n * @attr {string} width - Width override (CSS length/percentage)\n * @attr {string} height - Height override (CSS length)\n * @attr {string} radius - Radius override\n * @attr {boolean} animated - Disable with `animated=\"false\"`\n * @attr {number} lines - Text line count (only for `variant='text'`)\n * @attr {boolean} striped - Replace shimmer with diagonal stripes\n *\n * @cssprop --skeleton-bg - Base shimmer color\n * @cssprop --skeleton-highlight - Shimmer highlight color\n * @cssprop --skeleton-radius - Border radius\n * @cssprop --skeleton-size - Circle fallback size\n * @cssprop --skeleton-width - Width (default: 100%)\n * @cssprop --skeleton-height - Height (default: var(--size-4))\n * @cssprop --skeleton-line-gap - Vertical gap between text lines\n * @cssprop --skeleton-last-line-width - Width of the final text line\n * @cssprop --skeleton-duration - Shimmer animation duration\n * @cssprop --skeleton-stripe-size - Width of each diagonal stripe (default: 6px)\n *\n * @part stack - Stack container.\n * @part bone - Skeleton bone element.\n * @example\n * ```html\n * <!-- Paragraph lines -->\n * <ore-skeleton variant=\"text\" lines=\"3\" width=\"100%\"></ore-skeleton>\n *\n * <!-- Avatar -->\n * <ore-skeleton variant=\"circle\" size=\"md\"></ore-skeleton>\n *\n * <!-- Card image -->\n * <ore-skeleton width=\"100%\" height=\"10rem\"></ore-skeleton>\n * ```\n */\nexport const SKELETON_TAG = 'ore-skeleton' as const;\ndefine<OreSkeletonProps>(SKELETON_TAG, {\n props: {\n ...sizableBundle,\n animated: prop.bool(true),\n height: prop.string(),\n lines: prop.number(1),\n radius: prop.string(),\n striped: prop.bool(false),\n variant: prop.oneOf(['rect', 'circle', 'text'] as const, 'rect'),\n width: prop.string(),\n },\n setup(props) {\n const el = getHost();\n\n const isPaused = signal(false);\n const lineCount = () => {\n const value = Math.floor(Number(props.lines.value));\n\n return Number.isFinite(value) && value > 0 ? value : 1;\n };\n const renderLineCount = () => (props.variant.value === 'text' ? lineCount() : 1);\n const styleDeps = () =>\n `${props.width.value ?? ''}|${props.height.value ?? ''}|${props.radius.value ?? ''}|${props.animated.value === false ? '0' : '1'}`;\n\n watch(\n computed(styleDeps),\n () => {\n const safeWidth = safeCSSLength(props.width.value);\n const safeHeight = safeCSSLength(props.height.value);\n const safeRadius = safeCSSLength(props.radius.value);\n\n if (safeWidth) el.style.setProperty('--skeleton-width', safeWidth);\n else el.style.removeProperty('--skeleton-width');\n\n if (safeHeight) el.style.setProperty('--skeleton-height', safeHeight);\n else el.style.removeProperty('--skeleton-height');\n\n if (safeRadius) el.style.setProperty('--skeleton-radius', safeRadius);\n else el.style.removeProperty('--skeleton-radius');\n\n const rawAnimated = el.getAttribute('animated');\n const isAnimated = rawAnimated !== 'false' && props.animated.value !== false;\n\n el.setAttribute('data-animated', isAnimated ? 'true' : 'false');\n },\n { immediate: true },\n );\n\n bind({\n attr: {\n 'data-paused': () => (isPaused.value ? true : undefined),\n },\n });\n\n onMounted(() => {\n const entry = intersectionObserver(el, { threshold: 0 });\n\n watch(entry, (e) => {\n const paused =\n typeof e === 'object' && e !== null && 'isIntersecting' in e\n ? !(e as IntersectionObserverEntry).isIntersecting\n : false;\n\n isPaused.value = paused;\n });\n });\n\n return html`\n <div class=\"stack\" part=\"stack\">\n ${() =>\n Array.from({ length: renderLineCount() }, (_, index) => {\n const isLastLine =\n props.variant.value === 'text' && renderLineCount() > 1 && index === renderLineCount() - 1;\n\n return html`<div\n class=\"bone\"\n part=\"bone\"\n aria-hidden=\"true\"\n :data-last=\"${() => (isLastLine ? 'true' : null)}\"></div>`;\n })}\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n"],"mappings":";;;;;;;;AAwEA,IAAa,IAAe;AAC5B,EAAyB,GAAc;CACrC,OAAO;EACL,GAAG;EACH,UAAU,EAAK,KAAK,EAAI;EACxB,QAAQ,EAAK,OAAO;EACpB,OAAO,EAAK,OAAO,CAAC;EACpB,QAAQ,EAAK,OAAO;EACpB,SAAS,EAAK,KAAK,EAAK;EACxB,SAAS,EAAK,MAAM;GAAC;GAAQ;GAAU;EAAM,GAAY,MAAM;EAC/D,OAAO,EAAK,OAAO;CACrB;CACA,MAAM,GAAO;EACX,IAAM,IAAK,EAAQ,GAEb,IAAW,EAAO,EAAK,GACvB,UAAkB;GACtB,IAAM,IAAQ,KAAK,MAAM,OAAO,EAAM,MAAM,KAAK,CAAC;GAElD,OAAO,OAAO,SAAS,CAAK,KAAK,IAAQ,IAAI,IAAQ;EACvD,GACM,UAAyB,EAAM,QAAQ,UAAU,SAAS,EAAU,IAAI;EA+C9E,OA3CA,EACE,QAHA,GAAG,EAAM,MAAM,SAAS,GAAG,GAAG,EAAM,OAAO,SAAS,GAAG,GAAG,EAAM,OAAO,SAAS,GAAG,GAAG,EAAM,SAAS,UAAU,KAAQ,MAAM,KAG3G,SACZ;GACJ,IAAM,IAAY,EAAc,EAAM,MAAM,KAAK,GAC3C,IAAa,EAAc,EAAM,OAAO,KAAK,GAC7C,IAAa,EAAc,EAAM,OAAO,KAAK;GAQnD,AANI,IAAW,EAAG,MAAM,YAAY,oBAAoB,CAAS,IAC5D,EAAG,MAAM,eAAe,kBAAkB,GAE3C,IAAY,EAAG,MAAM,YAAY,qBAAqB,CAAU,IAC/D,EAAG,MAAM,eAAe,mBAAmB,GAE5C,IAAY,EAAG,MAAM,YAAY,qBAAqB,CAAU,IAC/D,EAAG,MAAM,eAAe,mBAAmB;GAGhD,IAAM,IADc,EAAG,aAAa,UACjB,MAAgB,WAAW,EAAM,SAAS,UAAU;GAEvE,EAAG,aAAa,iBAAiB,IAAa,SAAS,OAAO;EAChE,GACA,EAAE,WAAW,GAAK,CACpB,GAEA,EAAK,EACH,MAAM,EACJ,qBAAsB,EAAS,QAAQ,KAAO,KAAA,EAChD,EACF,CAAC,GAED,QAAgB;GAGd,EAFc,EAAqB,GAAI,EAAE,WAAW,EAAE,CAEhD,IAAQ,MAAM;IAClB,IAAM,IACJ,OAAO,KAAM,YAAY,KAAc,oBAAoB,IACvD,CAAE,EAAgC,iBAClC;IAEN,EAAS,QAAQ;GACnB,CAAC;EACH,CAAC,GAEM,CAAI;;gBAGL,MAAM,KAAK,EAAE,QAAQ,EAAgB,EAAE,IAAI,GAAG,MAAU;GACtD,IAAM,IACJ,EAAM,QAAQ,UAAU,UAAU,EAAgB,IAAI,KAAK,MAAU,EAAgB,IAAI;GAE3F,OAAO,CAAI;;;;kCAIY,IAAa,SAAS,KAAM;EACrD,CAAC,EAAE;;;CAGX;CACA,QAAQ,CAAC,GAAoB,CAAe;AAC9C,CAAC"}
package/dist/slider.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/accessibility.css.cjs"),t=require("./styles/mixins/shape.css.cjs"),n=require("./styles/mixins/states.css.cjs"),r=require("./styles/mixins/theme.css.cjs"),i=require("./shared/prop-bundles.cjs"),a=require("./shared/size-presets.cjs"),o=require("./headless/field-base.cjs"),s=require("./headless/slider.cjs"),c=require("./ore/dist/forms/field.cjs");require("./ore/dist/forms.cjs");const l=require("./inputs/shared/form-context.cjs"),u=require("./inputs/shared/templates.cjs"),d=require("./inputs/slider/slider.css.cjs");let f=require("@vielzeug/ore"),p=require("@vielzeug/ripple");var m=(e,t)=>n=>{e()&&t(n)},h=`ore-slider`;(0,f.define)(h,{formAssociated:!0,props:{...i.themableBundle,...i.sizableBundle,...i.disablableBundle,error:f.prop.string(),from:f.prop.number(0),"from-value-text":f.prop.string(),helper:f.prop.string(),max:f.prop.number(100),min:f.prop.number(0),name:f.prop.string(),range:f.prop.bool(!1),step:f.prop.number(1),to:f.prop.number(100),"to-value-text":f.prop.string(),value:f.prop.number(0),"value-text":f.prop.string()},setup(e){let t=(0,f.getHost)(),n=(0,f.useEmit)(),r=(0,f.useSlots)(),i=e.range.value,a=s.createSliderControl({max:e.max,min:e.min,step:e.step}),d=(0,f.inject)(l.FORM_CTX),h=l.useFormContext(e,d),g=(0,p.signal)(!1),_=h.disabled,v=(0,p.signal)(void 0),y=(0,f.createStableId)(`helper`),b=o.createErrorHelperState({error:e.error,helper:e.helper}),x=(0,p.computed)(()=>b.value.errorText),S=(0,p.computed)(()=>b.value.helperText),C=(0,p.computed)(()=>x.value||S.value?y:null);(0,f.bind)({attr:{"data-dragging":()=>g.value?!0:void 0,size:h.size}});let w,T=(0,p.signal)(`0`);i||(w=c.useField({disabled:_,value:T}),(0,p.watch)(e.value,e=>{T.value=String(e)},{immediate:!0}),(0,f.bind)({attr:{ariaDescribedby:()=>C.value??null,ariaDisabled:()=>_.value?`true`:null,ariaLabelledby:()=>v.value??null,ariaValuemax:()=>a.max(),ariaValuemin:()=>a.min(),ariaValuenow:()=>Number(T.value||0),ariaValuetext:()=>e[`value-text`].value??null,role:()=>`slider`,tabindex:()=>_.value?null:`0`}}));let E=(0,p.signal)(0),D=(0,p.signal)(100);i&&(w=c.useField({disabled:_,toFormValue:({from:t,to:n})=>{let r=e.name.value;if(!r)return null;let i=new FormData;return i.append(`${r}[from]`,String(t)),i.append(`${r}[to]`,String(n)),i},value:(0,p.computed)(()=>({from:E.value,to:D.value}))}),(0,p.watch)(e.from,e=>{E.value=a.snap(Number(e))},{immediate:!0}),(0,p.watch)(e.to,e=>{D.value=a.snap(Number(e))},{immediate:!0}));let O=(0,f.ref)(),k=(0,f.ref)(),A=(0,f.ref)(),j=(0,f.ref)(),M=(0,f.createStableId)(`slider-start`),N=(0,f.createStableId)(`slider-end`),P=e=>{let n=a.toPercent(e);t.style.setProperty(`--_thumb-pos`,`${n}%`),t.style.setProperty(`--_fill-start`,`0%`),t.style.setProperty(`--_fill-width`,`${n}%`)},F=()=>{let e=a.toPercent(E.value),n=a.toPercent(D.value);t.style.setProperty(`--_thumb-start`,`${e}%`),t.style.setProperty(`--_thumb-end`,`${n}%`),t.style.setProperty(`--_fill-start`,`${e}%`),t.style.setProperty(`--_fill-width`,`${n-e}%`)},I=e=>{d?.validateOn?.value===e&&w?.reportValidity()},L=t=>{F();let r=e=>{let n=t.getBoundingClientRect();return a.fromClientX(e,n)},i=null,o=e=>{i===`start`?E.value=Math.min(a.snap(e),D.value):i===`end`&&(D.value=Math.max(a.snap(e),E.value)),E.value=a.clamp(E.value),D.value=a.clamp(D.value),F(),n(`change`,{from:E.value,to:D.value,value:{from:E.value,to:D.value}}),I(`change`)};(0,f.onEvent)(t,`pointerdown`,m(()=>!_.value,e=>{e.preventDefault();let t=r(e.clientX);i=Math.abs(t-E.value)<=Math.abs(t-D.value)?`start`:`end`,e.target.setPointerCapture(e.pointerId),o(t)})),(0,f.onEvent)(t,`pointermove`,m(()=>!!i,e=>{e.preventDefault(),g.value||=!0,o(r(e.clientX))})),(0,f.onEvent)(t,`pointerup`,m(()=>!!i,e=>{e.preventDefault(),i=null,g.value=!1,e.target.releasePointerCapture(e.pointerId)}));let s=(e,t)=>r=>{if(_.value)return;let i=a.nextFromKey(r.key,e());i!==null&&(r.preventDefault(),t(a.snap(i)),F(),n(`change`,{from:E.value,originalEvent:r,to:D.value,value:{from:E.value,to:D.value}}),I(`change`))},c=A.value,l=j.value;c&&((0,f.onEvent)(c,`keydown`,s(()=>E.value,e=>{E.value=Math.min(e,D.value)})),(0,f.onCleanup)((0,f.aria)(c,{label:`Range start`,valuemax:()=>D.value,valuemin:()=>a.min(),valuenow:()=>E.value,valuetext:()=>e[`from-value-text`].value??null}))),l&&((0,f.onEvent)(l,`keydown`,s(()=>D.value,e=>{D.value=Math.max(e,E.value)})),(0,f.onCleanup)((0,f.aria)(l,{label:`Range end`,valuemax:()=>a.max(),valuemin:()=>E.value,valuenow:()=>D.value,valuetext:()=>e[`to-value-text`].value??null})))},R=e=>{P(Number(T.value));let r=t=>{if(_.value)return;let r=e.getBoundingClientRect(),i=a.fromClientX(t,r);Number(T.value)!==i&&(T.value=i.toString(),P(i),n(`change`,{value:i}),I(`change`))},i=!1;(0,f.onEvent)(e,`pointerdown`,m(()=>!_.value,e=>{e.preventDefault(),i=!0,r(e.clientX),e.target.setPointerCapture(e.pointerId)})),(0,f.onEvent)(e,`pointermove`,m(()=>i,e=>{e.preventDefault(),g.value||=!0,r(e.clientX)})),(0,f.onEvent)(e,`pointerup`,m(()=>i,e=>{e.preventDefault(),i=!1,g.value=!1,e.target.releasePointerCapture(e.pointerId)})),(0,f.onEvent)(t,`keydown`,m(()=>!_.value,e=>{let t=Number(T.value||0),r=a.nextFromKey(e.key,t);if(r===null)return;e.preventDefault();let i=a.clamp(r);i!==t&&(T.value=i.toString(),P(i),n(`change`,{originalEvent:e,value:i}),I(`change`))}))};return(0,f.onMounted)(()=>{let e=O.value;if(e){if(r.has().value&&k.value){let e=(0,f.createStableId)(`slider-label`);k.value.id=e,i||(v.value=e)}i?L(e):R(e)}}),f.html`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/accessibility.css.cjs"),t=require("./styles/mixins/shape.css.cjs"),n=require("./styles/mixins/states.css.cjs"),r=require("./styles/mixins/theme.css.cjs"),i=require("./shared/prop-bundles.cjs"),a=require("./shared/size-presets.cjs"),o=require("./headless/field-base.cjs"),s=require("./headless/slider.cjs"),c=require("./inputs/shared/form-context.cjs"),l=require("./inputs/shared/templates.cjs"),u=require("./inputs/slider/slider.css.cjs");let d=require("@vielzeug/ore"),f=require("@vielzeug/ripple"),p=require("@vielzeug/ore/forms");var m=(e,t)=>n=>{e()&&t(n)},h=`ore-slider`;(0,d.define)(h,{formAssociated:!0,props:{...i.themableBundle,...i.sizableBundle,...i.disablableBundle,error:d.prop.string(),from:d.prop.number(0),"from-value-text":d.prop.string(),helper:d.prop.string(),max:d.prop.number(100),min:d.prop.number(0),name:d.prop.string(),range:d.prop.bool(!1),step:d.prop.number(1),to:d.prop.number(100),"to-value-text":d.prop.string(),value:d.prop.number(0),"value-text":d.prop.string()},setup(e){let t=(0,d.getHost)(),n=(0,d.useEmit)(),r=(0,d.useSlots)(),i=e.range.value,a=s.createSliderControl({max:e.max,min:e.min,step:e.step}),u=(0,d.inject)(c.FORM_CTX),h=c.useFormContext(e,u),g=(0,f.signal)(!1),_=h.disabled,v=(0,f.signal)(void 0),y=(0,d.createStableId)(`helper`),b=o.createErrorHelperState({error:e.error,helper:e.helper}),x=(0,f.computed)(()=>b.value.errorText),S=(0,f.computed)(()=>b.value.helperText),C=(0,f.computed)(()=>x.value||S.value?y:null);(0,d.bind)({attr:{"data-dragging":()=>g.value?!0:void 0,size:h.size}});let w,T=(0,f.signal)(`0`);i||(w=(0,p.useField)({disabled:_,value:T}),(0,f.watch)(e.value,e=>{T.value=String(e)},{immediate:!0}),(0,d.bind)({attr:{ariaDescribedby:()=>C.value??null,ariaDisabled:()=>_.value?`true`:null,ariaLabelledby:()=>v.value??null,ariaValuemax:()=>a.max(),ariaValuemin:()=>a.min(),ariaValuenow:()=>Number(T.value||0),ariaValuetext:()=>e[`value-text`].value??null,role:()=>`slider`,tabindex:()=>_.value?null:`0`}}));let E=(0,f.signal)(0),D=(0,f.signal)(100);i&&(w=(0,p.useField)({disabled:_,toFormValue:({from:t,to:n})=>{let r=e.name.value;if(!r)return null;let i=new FormData;return i.append(`${r}[from]`,String(t)),i.append(`${r}[to]`,String(n)),i},value:(0,f.computed)(()=>({from:E.value,to:D.value}))}),(0,f.watch)(e.from,e=>{E.value=a.snap(Number(e))},{immediate:!0}),(0,f.watch)(e.to,e=>{D.value=a.snap(Number(e))},{immediate:!0}));let O=(0,d.ref)(),k=(0,d.ref)(),A=(0,d.ref)(),j=(0,d.ref)(),M=(0,d.createStableId)(`slider-start`),N=(0,d.createStableId)(`slider-end`),P=e=>{let n=a.toPercent(e);t.style.setProperty(`--_thumb-pos`,`${n}%`),t.style.setProperty(`--_fill-start`,`0%`),t.style.setProperty(`--_fill-width`,`${n}%`)},F=()=>{let e=a.toPercent(E.value),n=a.toPercent(D.value);t.style.setProperty(`--_thumb-start`,`${e}%`),t.style.setProperty(`--_thumb-end`,`${n}%`),t.style.setProperty(`--_fill-start`,`${e}%`),t.style.setProperty(`--_fill-width`,`${n-e}%`)},I=e=>{u?.validateOn?.value===e&&w?.reportValidity()},L=t=>{F();let r=e=>{let n=t.getBoundingClientRect();return a.fromClientX(e,n)},i=null,o=e=>{i===`start`?E.value=Math.min(a.snap(e),D.value):i===`end`&&(D.value=Math.max(a.snap(e),E.value)),E.value=a.clamp(E.value),D.value=a.clamp(D.value),F(),n(`change`,{from:E.value,to:D.value,value:{from:E.value,to:D.value}}),I(`change`)};(0,d.onEvent)(t,`pointerdown`,m(()=>!_.value,e=>{e.preventDefault();let t=r(e.clientX);i=Math.abs(t-E.value)<=Math.abs(t-D.value)?`start`:`end`,e.target.setPointerCapture(e.pointerId),o(t)})),(0,d.onEvent)(t,`pointermove`,m(()=>!!i,e=>{e.preventDefault(),g.value||=!0,o(r(e.clientX))})),(0,d.onEvent)(t,`pointerup`,m(()=>!!i,e=>{e.preventDefault(),i=null,g.value=!1,e.target.releasePointerCapture(e.pointerId)}));let s=(e,t)=>r=>{if(_.value)return;let i=a.nextFromKey(r.key,e());i!==null&&(r.preventDefault(),t(a.snap(i)),F(),n(`change`,{from:E.value,originalEvent:r,to:D.value,value:{from:E.value,to:D.value}}),I(`change`))},c=A.value,l=j.value;c&&((0,d.onEvent)(c,`keydown`,s(()=>E.value,e=>{E.value=Math.min(e,D.value)})),(0,d.onCleanup)((0,d.aria)(c,{label:`Range start`,valuemax:()=>D.value,valuemin:()=>a.min(),valuenow:()=>E.value,valuetext:()=>e[`from-value-text`].value??null}))),l&&((0,d.onEvent)(l,`keydown`,s(()=>D.value,e=>{D.value=Math.max(e,E.value)})),(0,d.onCleanup)((0,d.aria)(l,{label:`Range end`,valuemax:()=>a.max(),valuemin:()=>E.value,valuenow:()=>D.value,valuetext:()=>e[`to-value-text`].value??null})))},R=e=>{P(Number(T.value));let r=t=>{if(_.value)return;let r=e.getBoundingClientRect(),i=a.fromClientX(t,r);Number(T.value)!==i&&(T.value=i.toString(),P(i),n(`change`,{value:i}),I(`change`))},i=!1;(0,d.onEvent)(e,`pointerdown`,m(()=>!_.value,e=>{e.preventDefault(),i=!0,r(e.clientX),e.target.setPointerCapture(e.pointerId)})),(0,d.onEvent)(e,`pointermove`,m(()=>i,e=>{e.preventDefault(),g.value||=!0,r(e.clientX)})),(0,d.onEvent)(e,`pointerup`,m(()=>i,e=>{e.preventDefault(),i=!1,g.value=!1,e.target.releasePointerCapture(e.pointerId)})),(0,d.onEvent)(t,`keydown`,m(()=>!_.value,e=>{let t=Number(T.value||0),r=a.nextFromKey(e.key,t);if(r===null)return;e.preventDefault();let i=a.clamp(r);i!==t&&(T.value=i.toString(),P(i),n(`change`,{originalEvent:e,value:i}),I(`change`))}))};return(0,d.onMounted)(()=>{let e=O.value;if(e){if(r.has().value&&k.value){let e=(0,d.createStableId)(`slider-label`);k.value.id=e,i||(v.value=e)}i?L(e):R(e)}}),d.html`
2
2
  <div class="slider-container" part="slider" ref=${O}>
3
3
  <div class="slider-track" part="track">
4
4
  <div class="slider-fill" part="fill"></div>
@@ -22,6 +22,6 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
22
22
  </div>
23
23
  </div>
24
24
  <span class="label" part="label" ref=${k}><slot></slot></span>
25
- ${u.renderHelperRegion(y,x,S)}
26
- `},styles:[n.disabledStateMixin,r.colorThemeMixin,t.sizeVariantMixin(a.SLIDER_SIZE_PRESET),d.default,e.coarsePointerMixin]}),exports.SLIDER_TAG=h;
25
+ ${l.renderHelperRegion(y,x,S)}
26
+ `},styles:[n.disabledStateMixin,r.colorThemeMixin,t.sizeVariantMixin(a.SLIDER_SIZE_PRESET),u.default,e.coarsePointerMixin]}),exports.SLIDER_TAG=h;
27
27
  //# sourceMappingURL=slider.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"slider.cjs","names":[],"sources":["../src/inputs/slider/slider.ts"],"sourcesContent":["import {\n createStableId,\n define,\n html,\n inject,\n prop,\n ref,\n aria,\n bind,\n getHost,\n onCleanup,\n onEvent,\n onMounted,\n useEmit,\n useSlots,\n} from '@vielzeug/ore';\nimport { useField } from '@vielzeug/ore/forms';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { createErrorHelperState, createSliderControl } from '../../headless';\nimport { disablableBundle, sizableBundle, SLIDER_SIZE_PRESET, themableBundle } from '../../shared';\nimport { coarsePointerMixin, colorThemeMixin, disabledStateMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport { renderHelperRegion } from '../shared/templates';\nimport componentStyles from './slider.css?inline';\n\nconst guard =\n <E extends Event = Event>(condition: () => unknown, handler: (e: E) => void): ((e: E) => void) =>\n (e) => {\n if (condition()) handler(e);\n };\n\n/** Slider component properties */\n\nexport type OreSliderEvents = {\n change: { from?: number; originalEvent?: Event; to?: number; value: number | { from: number; to: number } };\n};\n\nexport type OreSliderProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Disable interaction */\n disabled?: boolean;\n /** Error message — marks the field as invalid (fallback when the `error` slot is empty) */\n error?: string;\n /** Range mode: lower bound */\n from?: number | string;\n /** Range mode a11y label for the start thumb (e.g. \"$20\") */\n 'from-value-text'?: string;\n /** Helper text displayed below the slider (fallback when the `helper` slot is empty) */\n helper?: string;\n /** Maximum value */\n max?: number | string;\n /** Minimum value */\n min?: number | string;\n /** Single-value mode: form field name */\n name?: string;\n /** Activate two-thumb range selection */\n range?: boolean;\n /** Component size */\n size?: ComponentSize;\n /** Step increment */\n step?: number | string;\n /** Range mode: upper bound */\n to?: number | string;\n /** Range mode a11y label for the end thumb (e.g. \"$80\") */\n 'to-value-text'?: string;\n /** Single-value mode: current value */\n value?: number | string;\n /** Single-value mode a11y label override (e.g. \"75%\"). Overrides raw aria-valuenow. */\n 'value-text'?: string;\n};\n\n/**\n * A slider for selecting a single numeric value or a numeric range.\n *\n * Add the boolean `range` attribute to activate two-thumb range mode.\n *\n * @element ore-slider\n *\n * @attr {number} min - Minimum value (default: 0)\n * @attr {number} max - Maximum value (default: 100)\n * @attr {number} step - Step increment (default: 1)\n * @attr {number} value - Current value (single mode)\n * @attr {number} from - Lower bound (range mode)\n * @attr {number} to - Upper bound (range mode)\n * @attr {boolean} range - Activate range mode\n * @attr {boolean} disabled - Disable interaction\n * @attr {string} name - Form field name (single mode)\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} helper - Helper text below the slider\n * @attr {string} error - Error message below the slider\n *\n * @fires change - detail always includes `value`; single mode: { value: number }, range mode: { value: { from, to }, from, to }, plus optional originalEvent\n *\n * @slot - Slider label text\n *\n * @part slider - Slider container\n * @part track - Track element\n * @part fill - Fill element\n * @part thumb - Single-value thumb\n * @part thumb-start - Range start thumb\n * @part thumb-end - Range end thumb\n * @part label - Label element\n * @part helper-text - The helper/error text element\n *\n * @cssprop --slider-height - Track height\n * @cssprop --slider-size - Thumb dimensions\n * @cssprop --slider-track-bg - Track background color\n * @cssprop --slider-fill - Active fill color\n * @cssprop --slider-thumb-bg - Thumb background color\n *\n * @example\n * ```html\n * <ore-slider value=\"50\" name=\"volume\">Volume</ore-slider>\n * <ore-slider range from=\"20\" to=\"80\" color=\"primary\">Price range</ore-slider>\n * ```\n */\nexport const SLIDER_TAG = 'ore-slider' as const;\ndefine<OreSliderProps>(SLIDER_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n error: prop.string(),\n from: prop.number(0),\n 'from-value-text': prop.string(),\n helper: prop.string(),\n max: prop.number(100),\n min: prop.number(0),\n name: prop.string(),\n range: prop.bool(false),\n step: prop.number(1),\n to: prop.number(100),\n 'to-value-text': prop.string(),\n value: prop.number(0),\n 'value-text': prop.string(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreSliderEvents>();\n const slots = useSlots();\n\n // Treat `range` as static — determined at first render\n const isRange = props.range.value;\n // ── Shared helpers ────────────────────────────────────────────\n const sliderControl = createSliderControl({\n max: props.max,\n min: props.min,\n step: props.step,\n });\n // ── Single-value state ────────────────────────────────────────\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(props, formCtx);\n const isDragging = signal(false);\n const isDisabled = fCtxProps.disabled;\n const labelledById = signal<string | undefined>(undefined);\n const assistiveId = createStableId('helper');\n const assistive = createErrorHelperState({ error: props.error, helper: props.helper });\n const errorText = computed(() => assistive.value.errorText);\n const helperText = computed(() => assistive.value.helperText);\n const ariaDescribedBy = computed(() => (errorText.value || helperText.value ? assistiveId : null));\n\n bind({\n attr: {\n 'data-dragging': () => (isDragging.value ? true : undefined),\n size: fCtxProps.size,\n },\n });\n\n let sliderFd:\n | {\n reportValidity: () => boolean;\n }\n | undefined;\n const valueSignal = signal('0');\n\n if (!isRange) {\n sliderFd = useField({ disabled: isDisabled, value: valueSignal });\n watch(\n props.value,\n (v) => {\n valueSignal.value = String(v);\n },\n { immediate: true },\n );\n bind({\n attr: {\n ariaDescribedby: () => ariaDescribedBy.value ?? null,\n ariaDisabled: () => (isDisabled.value ? 'true' : null),\n ariaLabelledby: () => labelledById.value ?? null,\n ariaValuemax: () => sliderControl.max(),\n ariaValuemin: () => sliderControl.min(),\n ariaValuenow: () => Number(valueSignal.value || 0),\n ariaValuetext: () => props['value-text'].value ?? null,\n role: () => 'slider',\n tabindex: () => (isDisabled.value ? null : '0'),\n },\n });\n }\n\n // ── Range state ───────────────────────────────────────────────\n const startVal = signal(0);\n const endVal = signal(100);\n\n if (isRange) {\n sliderFd = useField<{\n from: number;\n to: number;\n }>({\n disabled: isDisabled,\n toFormValue: ({ from, to }) => {\n const name = props.name.value;\n\n if (!name) return null;\n\n const fd = new FormData();\n\n fd.append(`${name}[from]`, String(from));\n fd.append(`${name}[to]`, String(to));\n\n return fd;\n },\n value: computed(() => ({ from: startVal.value, to: endVal.value })),\n });\n watch(\n props.from,\n (v) => {\n startVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n watch(\n props.to,\n (v) => {\n endVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n }\n\n // ── Refs ──────────────────────────────────────────────────────\n const containerRef = ref<HTMLDivElement>();\n const labelRef = ref<HTMLSpanElement>();\n const thumbStartRef = ref<HTMLDivElement>();\n const thumbEndRef = ref<HTMLDivElement>();\n const startId = createStableId('slider-start');\n const endId = createStableId('slider-end');\n // ── CSS update helpers ────────────────────────────────────────\n const updateSingleCSS = (value: number) => {\n const pct = sliderControl.toPercent(value);\n\n el.style.setProperty('--_thumb-pos', `${pct}%`);\n el.style.setProperty('--_fill-start', '0%');\n el.style.setProperty('--_fill-width', `${pct}%`);\n };\n const updateRangeCSS = () => {\n const s = sliderControl.toPercent(startVal.value);\n const e = sliderControl.toPercent(endVal.value);\n\n el.style.setProperty('--_thumb-start', `${s}%`);\n el.style.setProperty('--_thumb-end', `${e}%`);\n el.style.setProperty('--_fill-start', `${s}%`);\n el.style.setProperty('--_fill-width', `${e - s}%`);\n };\n\n // ── Range mode setup ──────────────────────────────────────────\n const triggerValidation = (on: 'blur' | 'change') => {\n if (formCtx?.validateOn?.value === on) {\n sliderFd?.reportValidity();\n }\n };\n\n const setupRangeMode = (container: HTMLDivElement) => {\n updateRangeCSS();\n\n const clientToValue = (clientX: number) => {\n const rect = container.getBoundingClientRect();\n\n return sliderControl.fromClientX(clientX, rect);\n };\n let dragging: 'start' | 'end' | null = null;\n const applyDrag = (val: number) => {\n if (dragging === 'start') startVal.value = Math.min(sliderControl.snap(val), endVal.value);\n else if (dragging === 'end') endVal.value = Math.max(sliderControl.snap(val), startVal.value);\n\n startVal.value = sliderControl.clamp(startVal.value);\n endVal.value = sliderControl.clamp(endVal.value);\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n\n const val = clientToValue(e.clientX);\n\n dragging = Math.abs(val - startVal.value) <= Math.abs(val - endVal.value) ? 'start' : 'end';\n (e.target as Element).setPointerCapture(e.pointerId);\n applyDrag(val);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n applyDrag(clientToValue(e.clientX));\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n dragging = null;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n\n const makeThumbKeydown = (getVal: () => number, setVal: (v: number) => void) => (e: KeyboardEvent) => {\n if (isDisabled.value) return;\n\n const next = sliderControl.nextFromKey(e.key, getVal());\n\n if (next === null) return;\n\n e.preventDefault();\n setVal(sliderControl.snap(next));\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n originalEvent: e,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n const thumbStartEl = thumbStartRef.value;\n const thumbEndEl = thumbEndRef.value;\n\n if (thumbStartEl) {\n onEvent(\n thumbStartEl,\n 'keydown',\n makeThumbKeydown(\n () => startVal.value,\n (v) => {\n startVal.value = Math.min(v, endVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbStartEl, {\n label: 'Range start',\n valuemax: () => endVal.value,\n valuemin: () => sliderControl.min(),\n valuenow: () => startVal.value,\n valuetext: () => props['from-value-text'].value ?? null,\n }),\n );\n }\n\n if (thumbEndEl) {\n onEvent(\n thumbEndEl,\n 'keydown',\n makeThumbKeydown(\n () => endVal.value,\n (v) => {\n endVal.value = Math.max(v, startVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbEndEl, {\n label: 'Range end',\n valuemax: () => sliderControl.max(),\n valuemin: () => startVal.value,\n valuenow: () => endVal.value,\n valuetext: () => props['to-value-text'].value ?? null,\n }),\n );\n }\n };\n // ── Single-value mode setup ───────────────────────────────────\n const setupSingleMode = (container: HTMLDivElement) => {\n updateSingleCSS(Number(valueSignal.value));\n\n const updateValue = (clientX: number) => {\n if (isDisabled.value) return;\n\n const rect = container.getBoundingClientRect();\n const newValue = sliderControl.fromClientX(clientX, rect);\n\n if (Number(valueSignal.value) !== newValue) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { value: newValue });\n triggerValidation('change');\n }\n };\n let isPointerDragging = false;\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = true;\n updateValue(e.clientX);\n (e.target as Element).setPointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n updateValue(e.clientX);\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = false;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n el,\n 'keydown',\n guard(\n () => !isDisabled.value,\n (e: KeyboardEvent) => {\n const val = Number(valueSignal.value || 0);\n const next = sliderControl.nextFromKey(e.key, val);\n\n if (next === null) return;\n\n e.preventDefault();\n\n const newValue = sliderControl.clamp(next);\n\n if (newValue !== val) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { originalEvent: e, value: newValue });\n triggerValidation('change');\n }\n },\n ),\n );\n };\n\n onMounted(() => {\n const container = containerRef.value;\n\n if (!container) return;\n\n if (slots.has().value && labelRef.value) {\n const labelId = createStableId('slider-label');\n\n labelRef.value.id = labelId;\n\n if (!isRange) labelledById.value = labelId;\n }\n\n if (isRange) setupRangeMode(container);\n else setupSingleMode(container);\n });\n\n return html`\n <div class=\"slider-container\" part=\"slider\" ref=${containerRef}>\n <div class=\"slider-track\" part=\"track\">\n <div class=\"slider-fill\" part=\"fill\"></div>\n <div class=\"slider-thumb slider-thumb-sole\" part=\"thumb\"></div>\n <div\n class=\"slider-thumb slider-thumb-start\"\n part=\"thumb-start\"\n ref=${thumbStartRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${startId}\"></div>\n <div\n class=\"slider-thumb slider-thumb-end\"\n part=\"thumb-end\"\n ref=${thumbEndRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${endId}\"></div>\n </div>\n </div>\n <span class=\"label\" part=\"label\" ref=${labelRef}><slot></slot></span>\n ${renderHelperRegion(assistiveId, errorText, helperText)}\n `;\n },\n styles: [\n disabledStateMixin,\n colorThemeMixin,\n sizeVariantMixin(SLIDER_SIZE_PRESET),\n componentStyles,\n coarsePointerMixin,\n ],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"slider.cjs","names":[],"sources":["../src/inputs/slider/slider.ts"],"sourcesContent":["import {\n createStableId,\n define,\n html,\n inject,\n prop,\n ref,\n aria,\n bind,\n getHost,\n onCleanup,\n onEvent,\n onMounted,\n useEmit,\n useSlots,\n} from '@vielzeug/ore';\nimport { useField } from '@vielzeug/ore/forms';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { createErrorHelperState, createSliderControl } from '../../headless';\nimport { disablableBundle, sizableBundle, SLIDER_SIZE_PRESET, themableBundle } from '../../shared';\nimport { coarsePointerMixin, colorThemeMixin, disabledStateMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport { renderHelperRegion } from '../shared/templates';\nimport componentStyles from './slider.css?inline';\n\nconst guard =\n <E extends Event = Event>(condition: () => unknown, handler: (e: E) => void): ((e: E) => void) =>\n (e) => {\n if (condition()) handler(e);\n };\n\n/** Slider component properties */\n\nexport type OreSliderEvents = {\n change: { from?: number; originalEvent?: Event; to?: number; value: number | { from: number; to: number } };\n};\n\nexport type OreSliderProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Disable interaction */\n disabled?: boolean;\n /** Error message — marks the field as invalid (fallback when the `error` slot is empty) */\n error?: string;\n /** Range mode: lower bound */\n from?: number | string;\n /** Range mode a11y label for the start thumb (e.g. \"$20\") */\n 'from-value-text'?: string;\n /** Helper text displayed below the slider (fallback when the `helper` slot is empty) */\n helper?: string;\n /** Maximum value */\n max?: number | string;\n /** Minimum value */\n min?: number | string;\n /** Single-value mode: form field name */\n name?: string;\n /** Activate two-thumb range selection */\n range?: boolean;\n /** Component size */\n size?: ComponentSize;\n /** Step increment */\n step?: number | string;\n /** Range mode: upper bound */\n to?: number | string;\n /** Range mode a11y label for the end thumb (e.g. \"$80\") */\n 'to-value-text'?: string;\n /** Single-value mode: current value */\n value?: number | string;\n /** Single-value mode a11y label override (e.g. \"75%\"). Overrides raw aria-valuenow. */\n 'value-text'?: string;\n};\n\n/**\n * A slider for selecting a single numeric value or a numeric range.\n *\n * Add the boolean `range` attribute to activate two-thumb range mode.\n *\n * @element ore-slider\n *\n * @attr {number} min - Minimum value (default: 0)\n * @attr {number} max - Maximum value (default: 100)\n * @attr {number} step - Step increment (default: 1)\n * @attr {number} value - Current value (single mode)\n * @attr {number} from - Lower bound (range mode)\n * @attr {number} to - Upper bound (range mode)\n * @attr {boolean} range - Activate range mode\n * @attr {boolean} disabled - Disable interaction\n * @attr {string} name - Form field name (single mode)\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} helper - Helper text below the slider\n * @attr {string} error - Error message below the slider\n *\n * @fires change - detail always includes `value`; single mode: { value: number }, range mode: { value: { from, to }, from, to }, plus optional originalEvent\n *\n * @slot - Slider label text\n *\n * @part slider - Slider container\n * @part track - Track element\n * @part fill - Fill element\n * @part thumb - Single-value thumb\n * @part thumb-start - Range start thumb\n * @part thumb-end - Range end thumb\n * @part label - Label element\n * @part helper-text - The helper/error text element\n *\n * @cssprop --slider-height - Track height\n * @cssprop --slider-size - Thumb dimensions\n * @cssprop --slider-track-bg - Track background color\n * @cssprop --slider-fill - Active fill color\n * @cssprop --slider-thumb-bg - Thumb background color\n *\n * @example\n * ```html\n * <ore-slider value=\"50\" name=\"volume\">Volume</ore-slider>\n * <ore-slider range from=\"20\" to=\"80\" color=\"primary\">Price range</ore-slider>\n * ```\n */\nexport const SLIDER_TAG = 'ore-slider' as const;\ndefine<OreSliderProps>(SLIDER_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n error: prop.string(),\n from: prop.number(0),\n 'from-value-text': prop.string(),\n helper: prop.string(),\n max: prop.number(100),\n min: prop.number(0),\n name: prop.string(),\n range: prop.bool(false),\n step: prop.number(1),\n to: prop.number(100),\n 'to-value-text': prop.string(),\n value: prop.number(0),\n 'value-text': prop.string(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreSliderEvents>();\n const slots = useSlots();\n\n // Treat `range` as static — determined at first render\n const isRange = props.range.value;\n // ── Shared helpers ────────────────────────────────────────────\n const sliderControl = createSliderControl({\n max: props.max,\n min: props.min,\n step: props.step,\n });\n // ── Single-value state ────────────────────────────────────────\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(props, formCtx);\n const isDragging = signal(false);\n const isDisabled = fCtxProps.disabled;\n const labelledById = signal<string | undefined>(undefined);\n const assistiveId = createStableId('helper');\n const assistive = createErrorHelperState({ error: props.error, helper: props.helper });\n const errorText = computed(() => assistive.value.errorText);\n const helperText = computed(() => assistive.value.helperText);\n const ariaDescribedBy = computed(() => (errorText.value || helperText.value ? assistiveId : null));\n\n bind({\n attr: {\n 'data-dragging': () => (isDragging.value ? true : undefined),\n size: fCtxProps.size,\n },\n });\n\n let sliderFd:\n | {\n reportValidity: () => boolean;\n }\n | undefined;\n const valueSignal = signal('0');\n\n if (!isRange) {\n sliderFd = useField({ disabled: isDisabled, value: valueSignal });\n watch(\n props.value,\n (v) => {\n valueSignal.value = String(v);\n },\n { immediate: true },\n );\n bind({\n attr: {\n ariaDescribedby: () => ariaDescribedBy.value ?? null,\n ariaDisabled: () => (isDisabled.value ? 'true' : null),\n ariaLabelledby: () => labelledById.value ?? null,\n ariaValuemax: () => sliderControl.max(),\n ariaValuemin: () => sliderControl.min(),\n ariaValuenow: () => Number(valueSignal.value || 0),\n ariaValuetext: () => props['value-text'].value ?? null,\n role: () => 'slider',\n tabindex: () => (isDisabled.value ? null : '0'),\n },\n });\n }\n\n // ── Range state ───────────────────────────────────────────────\n const startVal = signal(0);\n const endVal = signal(100);\n\n if (isRange) {\n sliderFd = useField<{\n from: number;\n to: number;\n }>({\n disabled: isDisabled,\n toFormValue: ({ from, to }) => {\n const name = props.name.value;\n\n if (!name) return null;\n\n const fd = new FormData();\n\n fd.append(`${name}[from]`, String(from));\n fd.append(`${name}[to]`, String(to));\n\n return fd;\n },\n value: computed(() => ({ from: startVal.value, to: endVal.value })),\n });\n watch(\n props.from,\n (v) => {\n startVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n watch(\n props.to,\n (v) => {\n endVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n }\n\n // ── Refs ──────────────────────────────────────────────────────\n const containerRef = ref<HTMLDivElement>();\n const labelRef = ref<HTMLSpanElement>();\n const thumbStartRef = ref<HTMLDivElement>();\n const thumbEndRef = ref<HTMLDivElement>();\n const startId = createStableId('slider-start');\n const endId = createStableId('slider-end');\n // ── CSS update helpers ────────────────────────────────────────\n const updateSingleCSS = (value: number) => {\n const pct = sliderControl.toPercent(value);\n\n el.style.setProperty('--_thumb-pos', `${pct}%`);\n el.style.setProperty('--_fill-start', '0%');\n el.style.setProperty('--_fill-width', `${pct}%`);\n };\n const updateRangeCSS = () => {\n const s = sliderControl.toPercent(startVal.value);\n const e = sliderControl.toPercent(endVal.value);\n\n el.style.setProperty('--_thumb-start', `${s}%`);\n el.style.setProperty('--_thumb-end', `${e}%`);\n el.style.setProperty('--_fill-start', `${s}%`);\n el.style.setProperty('--_fill-width', `${e - s}%`);\n };\n\n // ── Range mode setup ──────────────────────────────────────────\n const triggerValidation = (on: 'blur' | 'change') => {\n if (formCtx?.validateOn?.value === on) {\n sliderFd?.reportValidity();\n }\n };\n\n const setupRangeMode = (container: HTMLDivElement) => {\n updateRangeCSS();\n\n const clientToValue = (clientX: number) => {\n const rect = container.getBoundingClientRect();\n\n return sliderControl.fromClientX(clientX, rect);\n };\n let dragging: 'start' | 'end' | null = null;\n const applyDrag = (val: number) => {\n if (dragging === 'start') startVal.value = Math.min(sliderControl.snap(val), endVal.value);\n else if (dragging === 'end') endVal.value = Math.max(sliderControl.snap(val), startVal.value);\n\n startVal.value = sliderControl.clamp(startVal.value);\n endVal.value = sliderControl.clamp(endVal.value);\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n\n const val = clientToValue(e.clientX);\n\n dragging = Math.abs(val - startVal.value) <= Math.abs(val - endVal.value) ? 'start' : 'end';\n (e.target as Element).setPointerCapture(e.pointerId);\n applyDrag(val);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n applyDrag(clientToValue(e.clientX));\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n dragging = null;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n\n const makeThumbKeydown = (getVal: () => number, setVal: (v: number) => void) => (e: KeyboardEvent) => {\n if (isDisabled.value) return;\n\n const next = sliderControl.nextFromKey(e.key, getVal());\n\n if (next === null) return;\n\n e.preventDefault();\n setVal(sliderControl.snap(next));\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n originalEvent: e,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n const thumbStartEl = thumbStartRef.value;\n const thumbEndEl = thumbEndRef.value;\n\n if (thumbStartEl) {\n onEvent(\n thumbStartEl,\n 'keydown',\n makeThumbKeydown(\n () => startVal.value,\n (v) => {\n startVal.value = Math.min(v, endVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbStartEl, {\n label: 'Range start',\n valuemax: () => endVal.value,\n valuemin: () => sliderControl.min(),\n valuenow: () => startVal.value,\n valuetext: () => props['from-value-text'].value ?? null,\n }),\n );\n }\n\n if (thumbEndEl) {\n onEvent(\n thumbEndEl,\n 'keydown',\n makeThumbKeydown(\n () => endVal.value,\n (v) => {\n endVal.value = Math.max(v, startVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbEndEl, {\n label: 'Range end',\n valuemax: () => sliderControl.max(),\n valuemin: () => startVal.value,\n valuenow: () => endVal.value,\n valuetext: () => props['to-value-text'].value ?? null,\n }),\n );\n }\n };\n // ── Single-value mode setup ───────────────────────────────────\n const setupSingleMode = (container: HTMLDivElement) => {\n updateSingleCSS(Number(valueSignal.value));\n\n const updateValue = (clientX: number) => {\n if (isDisabled.value) return;\n\n const rect = container.getBoundingClientRect();\n const newValue = sliderControl.fromClientX(clientX, rect);\n\n if (Number(valueSignal.value) !== newValue) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { value: newValue });\n triggerValidation('change');\n }\n };\n let isPointerDragging = false;\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = true;\n updateValue(e.clientX);\n (e.target as Element).setPointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n updateValue(e.clientX);\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = false;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n el,\n 'keydown',\n guard(\n () => !isDisabled.value,\n (e: KeyboardEvent) => {\n const val = Number(valueSignal.value || 0);\n const next = sliderControl.nextFromKey(e.key, val);\n\n if (next === null) return;\n\n e.preventDefault();\n\n const newValue = sliderControl.clamp(next);\n\n if (newValue !== val) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { originalEvent: e, value: newValue });\n triggerValidation('change');\n }\n },\n ),\n );\n };\n\n onMounted(() => {\n const container = containerRef.value;\n\n if (!container) return;\n\n if (slots.has().value && labelRef.value) {\n const labelId = createStableId('slider-label');\n\n labelRef.value.id = labelId;\n\n if (!isRange) labelledById.value = labelId;\n }\n\n if (isRange) setupRangeMode(container);\n else setupSingleMode(container);\n });\n\n return html`\n <div class=\"slider-container\" part=\"slider\" ref=${containerRef}>\n <div class=\"slider-track\" part=\"track\">\n <div class=\"slider-fill\" part=\"fill\"></div>\n <div class=\"slider-thumb slider-thumb-sole\" part=\"thumb\"></div>\n <div\n class=\"slider-thumb slider-thumb-start\"\n part=\"thumb-start\"\n ref=${thumbStartRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${startId}\"></div>\n <div\n class=\"slider-thumb slider-thumb-end\"\n part=\"thumb-end\"\n ref=${thumbEndRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${endId}\"></div>\n </div>\n </div>\n <span class=\"label\" part=\"label\" ref=${labelRef}><slot></slot></span>\n ${renderHelperRegion(assistiveId, errorText, helperText)}\n `;\n },\n styles: [\n disabledStateMixin,\n colorThemeMixin,\n sizeVariantMixin(SLIDER_SIZE_PRESET),\n componentStyles,\n coarsePointerMixin,\n ],\n});\n"],"mappings":"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"}
package/dist/slider.js CHANGED
@@ -6,86 +6,85 @@ import { disablableBundle as i, sizableBundle as a, themableBundle as o } from "
6
6
  import { SLIDER_SIZE_PRESET as s } from "./shared/size-presets.js";
7
7
  import { createErrorHelperState as c } from "./headless/field-base.js";
8
8
  import { createSliderControl as l } from "./headless/slider.js";
9
- import { useField as u } from "./ore/dist/forms/field.js";
10
- import "./ore/dist/forms.js";
11
- import { FORM_CTX as d, useFormContext as f } from "./inputs/shared/form-context.js";
12
- import { renderHelperRegion as p } from "./inputs/shared/templates.js";
13
- import m from "./inputs/slider/slider.css.js";
14
- import { aria as h, bind as g, createStableId as _, define as v, getHost as y, html as b, inject as x, onCleanup as S, onEvent as C, onMounted as w, prop as T, ref as E, useEmit as D, useSlots as O } from "@vielzeug/ore";
15
- import { computed as k, signal as A, watch as j } from "@vielzeug/ripple";
9
+ import { FORM_CTX as u, useFormContext as d } from "./inputs/shared/form-context.js";
10
+ import { renderHelperRegion as f } from "./inputs/shared/templates.js";
11
+ import p from "./inputs/slider/slider.css.js";
12
+ import { aria as m, bind as h, createStableId as g, define as _, getHost as v, html as y, inject as b, onCleanup as x, onEvent as S, onMounted as C, prop as w, ref as T, useEmit as E, useSlots as D } from "@vielzeug/ore";
13
+ import { computed as O, signal as k, watch as A } from "@vielzeug/ripple";
14
+ import { useField as j } from "@vielzeug/ore/forms";
16
15
  //#region src/inputs/slider/slider.ts
17
16
  var M = (e, t) => (n) => {
18
17
  e() && t(n);
19
18
  }, N = "ore-slider";
20
- v(N, {
19
+ _(N, {
21
20
  formAssociated: !0,
22
21
  props: {
23
22
  ...o,
24
23
  ...a,
25
24
  ...i,
26
- error: T.string(),
27
- from: T.number(0),
28
- "from-value-text": T.string(),
29
- helper: T.string(),
30
- max: T.number(100),
31
- min: T.number(0),
32
- name: T.string(),
33
- range: T.bool(!1),
34
- step: T.number(1),
35
- to: T.number(100),
36
- "to-value-text": T.string(),
37
- value: T.number(0),
38
- "value-text": T.string()
25
+ error: w.string(),
26
+ from: w.number(0),
27
+ "from-value-text": w.string(),
28
+ helper: w.string(),
29
+ max: w.number(100),
30
+ min: w.number(0),
31
+ name: w.string(),
32
+ range: w.bool(!1),
33
+ step: w.number(1),
34
+ to: w.number(100),
35
+ "to-value-text": w.string(),
36
+ value: w.number(0),
37
+ "value-text": w.string()
39
38
  },
40
39
  setup(e) {
41
- let t = y(), n = D(), r = O(), i = e.range.value, a = l({
40
+ let t = v(), n = E(), r = D(), i = e.range.value, a = l({
42
41
  max: e.max,
43
42
  min: e.min,
44
43
  step: e.step
45
- }), o = x(d), s = f(e, o), m = A(!1), v = s.disabled, T = A(void 0), N = _("helper"), P = c({
44
+ }), o = b(u), s = d(e, o), p = k(!1), _ = s.disabled, w = k(void 0), N = g("helper"), P = c({
46
45
  error: e.error,
47
46
  helper: e.helper
48
- }), F = k(() => P.value.errorText), I = k(() => P.value.helperText), L = k(() => F.value || I.value ? N : null);
49
- g({ attr: {
50
- "data-dragging": () => m.value ? !0 : void 0,
47
+ }), F = O(() => P.value.errorText), I = O(() => P.value.helperText), L = O(() => F.value || I.value ? N : null);
48
+ h({ attr: {
49
+ "data-dragging": () => p.value ? !0 : void 0,
51
50
  size: s.size
52
51
  } });
53
- let R, z = A("0");
54
- i || (R = u({
55
- disabled: v,
52
+ let R, z = k("0");
53
+ i || (R = j({
54
+ disabled: _,
56
55
  value: z
57
- }), j(e.value, (e) => {
56
+ }), A(e.value, (e) => {
58
57
  z.value = String(e);
59
- }, { immediate: !0 }), g({ attr: {
58
+ }, { immediate: !0 }), h({ attr: {
60
59
  ariaDescribedby: () => L.value ?? null,
61
- ariaDisabled: () => v.value ? "true" : null,
62
- ariaLabelledby: () => T.value ?? null,
60
+ ariaDisabled: () => _.value ? "true" : null,
61
+ ariaLabelledby: () => w.value ?? null,
63
62
  ariaValuemax: () => a.max(),
64
63
  ariaValuemin: () => a.min(),
65
64
  ariaValuenow: () => Number(z.value || 0),
66
65
  ariaValuetext: () => e["value-text"].value ?? null,
67
66
  role: () => "slider",
68
- tabindex: () => v.value ? null : "0"
67
+ tabindex: () => _.value ? null : "0"
69
68
  } }));
70
- let B = A(0), V = A(100);
71
- i && (R = u({
72
- disabled: v,
69
+ let B = k(0), V = k(100);
70
+ i && (R = j({
71
+ disabled: _,
73
72
  toFormValue: ({ from: t, to: n }) => {
74
73
  let r = e.name.value;
75
74
  if (!r) return null;
76
75
  let i = new FormData();
77
76
  return i.append(`${r}[from]`, String(t)), i.append(`${r}[to]`, String(n)), i;
78
77
  },
79
- value: k(() => ({
78
+ value: O(() => ({
80
79
  from: B.value,
81
80
  to: V.value
82
81
  }))
83
- }), j(e.from, (e) => {
82
+ }), A(e.from, (e) => {
84
83
  B.value = a.snap(Number(e));
85
- }, { immediate: !0 }), j(e.to, (e) => {
84
+ }, { immediate: !0 }), A(e.to, (e) => {
86
85
  V.value = a.snap(Number(e));
87
86
  }, { immediate: !0 }));
88
- let H = E(), U = E(), W = E(), G = E(), K = _("slider-start"), q = _("slider-end"), J = (e) => {
87
+ let H = T(), U = T(), W = T(), G = T(), K = g("slider-start"), q = g("slider-end"), J = (e) => {
89
88
  let n = a.toPercent(e);
90
89
  t.style.setProperty("--_thumb-pos", `${n}%`), t.style.setProperty("--_fill-start", "0%"), t.style.setProperty("--_fill-width", `${n}%`);
91
90
  }, Y = () => {
@@ -108,17 +107,17 @@ v(N, {
108
107
  }
109
108
  }), X("change");
110
109
  };
111
- C(t, "pointerdown", M(() => !v.value, (e) => {
110
+ S(t, "pointerdown", M(() => !_.value, (e) => {
112
111
  e.preventDefault();
113
112
  let t = r(e.clientX);
114
113
  i = Math.abs(t - B.value) <= Math.abs(t - V.value) ? "start" : "end", e.target.setPointerCapture(e.pointerId), o(t);
115
- })), C(t, "pointermove", M(() => !!i, (e) => {
116
- e.preventDefault(), m.value ||= !0, o(r(e.clientX));
117
- })), C(t, "pointerup", M(() => !!i, (e) => {
118
- e.preventDefault(), i = null, m.value = !1, e.target.releasePointerCapture(e.pointerId);
114
+ })), S(t, "pointermove", M(() => !!i, (e) => {
115
+ e.preventDefault(), p.value ||= !0, o(r(e.clientX));
116
+ })), S(t, "pointerup", M(() => !!i, (e) => {
117
+ e.preventDefault(), i = null, p.value = !1, e.target.releasePointerCapture(e.pointerId);
119
118
  }));
120
119
  let s = (e, t) => (r) => {
121
- if (v.value) return;
120
+ if (_.value) return;
122
121
  let i = a.nextFromKey(r.key, e());
123
122
  i !== null && (r.preventDefault(), t(a.snap(i)), Y(), n("change", {
124
123
  from: B.value,
@@ -130,17 +129,17 @@ v(N, {
130
129
  }
131
130
  }), X("change"));
132
131
  }, c = W.value, l = G.value;
133
- c && (C(c, "keydown", s(() => B.value, (e) => {
132
+ c && (S(c, "keydown", s(() => B.value, (e) => {
134
133
  B.value = Math.min(e, V.value);
135
- })), S(h(c, {
134
+ })), x(m(c, {
136
135
  label: "Range start",
137
136
  valuemax: () => V.value,
138
137
  valuemin: () => a.min(),
139
138
  valuenow: () => B.value,
140
139
  valuetext: () => e["from-value-text"].value ?? null
141
- }))), l && (C(l, "keydown", s(() => V.value, (e) => {
140
+ }))), l && (S(l, "keydown", s(() => V.value, (e) => {
142
141
  V.value = Math.max(e, B.value);
143
- })), S(h(l, {
142
+ })), x(m(l, {
144
143
  label: "Range end",
145
144
  valuemax: () => a.max(),
146
145
  valuemin: () => B.value,
@@ -150,17 +149,17 @@ v(N, {
150
149
  }, Q = (e) => {
151
150
  J(Number(z.value));
152
151
  let r = (t) => {
153
- if (v.value) return;
152
+ if (_.value) return;
154
153
  let r = e.getBoundingClientRect(), i = a.fromClientX(t, r);
155
154
  Number(z.value) !== i && (z.value = i.toString(), J(i), n("change", { value: i }), X("change"));
156
155
  }, i = !1;
157
- C(e, "pointerdown", M(() => !v.value, (e) => {
156
+ S(e, "pointerdown", M(() => !_.value, (e) => {
158
157
  e.preventDefault(), i = !0, r(e.clientX), e.target.setPointerCapture(e.pointerId);
159
- })), C(e, "pointermove", M(() => i, (e) => {
160
- e.preventDefault(), m.value ||= !0, r(e.clientX);
161
- })), C(e, "pointerup", M(() => i, (e) => {
162
- e.preventDefault(), i = !1, m.value = !1, e.target.releasePointerCapture(e.pointerId);
163
- })), C(t, "keydown", M(() => !v.value, (e) => {
158
+ })), S(e, "pointermove", M(() => i, (e) => {
159
+ e.preventDefault(), p.value ||= !0, r(e.clientX);
160
+ })), S(e, "pointerup", M(() => i, (e) => {
161
+ e.preventDefault(), i = !1, p.value = !1, e.target.releasePointerCapture(e.pointerId);
162
+ })), S(t, "keydown", M(() => !_.value, (e) => {
164
163
  let t = Number(z.value || 0), r = a.nextFromKey(e.key, t);
165
164
  if (r === null) return;
166
165
  e.preventDefault();
@@ -171,16 +170,16 @@ v(N, {
171
170
  }), X("change"));
172
171
  }));
173
172
  };
174
- return w(() => {
173
+ return C(() => {
175
174
  let e = H.value;
176
175
  if (e) {
177
176
  if (r.has().value && U.value) {
178
- let e = _("slider-label");
179
- U.value.id = e, i || (T.value = e);
177
+ let e = g("slider-label");
178
+ U.value.id = e, i || (w.value = e);
180
179
  }
181
180
  i ? Z(e) : Q(e);
182
181
  }
183
- }), b`
182
+ }), y`
184
183
  <div class="slider-container" part="slider" ref=${H}>
185
184
  <div class="slider-track" part="track">
186
185
  <div class="slider-fill" part="fill"></div>
@@ -190,7 +189,7 @@ v(N, {
190
189
  part="thumb-start"
191
190
  ref=${W}
192
191
  role="slider"
193
- tabindex="${() => v.value ? "-1" : "0"}"
192
+ tabindex="${() => _.value ? "-1" : "0"}"
194
193
  :aria-describedby="${L}"
195
194
  id="${K}"></div>
196
195
  <div
@@ -198,20 +197,20 @@ v(N, {
198
197
  part="thumb-end"
199
198
  ref=${G}
200
199
  role="slider"
201
- tabindex="${() => v.value ? "-1" : "0"}"
200
+ tabindex="${() => _.value ? "-1" : "0"}"
202
201
  :aria-describedby="${L}"
203
202
  id="${q}"></div>
204
203
  </div>
205
204
  </div>
206
205
  <span class="label" part="label" ref=${U}><slot></slot></span>
207
- ${p(N, F, I)}
206
+ ${f(N, F, I)}
208
207
  `;
209
208
  },
210
209
  styles: [
211
210
  n,
212
211
  r,
213
212
  t(s),
214
- m,
213
+ p,
215
214
  e
216
215
  ]
217
216
  });