@rinzai/zen 0.10.3 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/README.md +38 -8
  2. package/dist/accordion/index.d.ts +41 -0
  3. package/dist/accordion/index.d.ts.map +1 -0
  4. package/dist/accordion/index.js +81 -0
  5. package/dist/animated-number/index.d.ts +3 -2
  6. package/dist/animated-number/index.d.ts.map +1 -1
  7. package/dist/animated-number/index.js +40 -38
  8. package/dist/avatar/index.d.ts +8 -3
  9. package/dist/avatar/index.d.ts.map +1 -1
  10. package/dist/avatar/index.js +29 -21
  11. package/dist/backdrop/index.d.ts +4 -4
  12. package/dist/backdrop/index.d.ts.map +1 -1
  13. package/dist/backdrop/index.js +41 -39
  14. package/dist/badge/index.d.ts +4 -2
  15. package/dist/badge/index.d.ts.map +1 -1
  16. package/dist/badge/index.js +20 -11
  17. package/dist/base.css +4 -0
  18. package/dist/breadcrumbs/index.d.ts +1 -1
  19. package/dist/breadcrumbs/index.d.ts.map +1 -1
  20. package/dist/breadcrumbs/index.js +25 -24
  21. package/dist/button/index.d.ts +3 -3
  22. package/dist/button/index.d.ts.map +1 -1
  23. package/dist/button/index.js +16 -11
  24. package/dist/button-group/index.d.ts +13 -0
  25. package/dist/button-group/index.d.ts.map +1 -0
  26. package/dist/button-group/index.js +14 -0
  27. package/dist/calendar/index.d.ts +15 -8
  28. package/dist/calendar/index.d.ts.map +1 -1
  29. package/dist/calendar/index.js +97 -91
  30. package/dist/calendar-heatmap/index.d.ts +7 -5
  31. package/dist/calendar-heatmap/index.d.ts.map +1 -1
  32. package/dist/calendar-heatmap/index.js +32 -30
  33. package/dist/canvas/geometry.d.ts +51 -0
  34. package/dist/canvas/geometry.d.ts.map +1 -0
  35. package/dist/canvas/geometry.js +90 -0
  36. package/dist/canvas/index.d.ts +59 -0
  37. package/dist/canvas/index.d.ts.map +1 -0
  38. package/dist/canvas/index.js +305 -0
  39. package/dist/carousel/index.d.ts +27 -0
  40. package/dist/carousel/index.d.ts.map +1 -0
  41. package/dist/carousel/index.js +162 -0
  42. package/dist/chart/index.d.ts +5 -4
  43. package/dist/chart/index.d.ts.map +1 -1
  44. package/dist/chart/index.js +137 -135
  45. package/dist/chart/palette.js +0 -1
  46. package/dist/checkbox/index.d.ts +3 -3
  47. package/dist/checkbox/index.d.ts.map +1 -1
  48. package/dist/checkbox/index.js +33 -30
  49. package/dist/chip/index.js +1 -1
  50. package/dist/code-block/index.d.ts.map +1 -1
  51. package/dist/code-block/index.js +27 -32
  52. package/dist/code-input/index.d.ts.map +1 -1
  53. package/dist/code-input/index.js +30 -24
  54. package/dist/collapse/index.d.ts +4 -3
  55. package/dist/collapse/index.d.ts.map +1 -1
  56. package/dist/collapse/index.js +42 -39
  57. package/dist/color-picker/index.d.ts +43 -0
  58. package/dist/color-picker/index.d.ts.map +1 -0
  59. package/dist/color-picker/index.js +221 -0
  60. package/dist/combobox/index.d.ts +14 -6
  61. package/dist/combobox/index.d.ts.map +1 -1
  62. package/dist/combobox/index.js +151 -139
  63. package/dist/command-palette/index.d.ts +4 -3
  64. package/dist/command-palette/index.d.ts.map +1 -1
  65. package/dist/command-palette/index.js +60 -57
  66. package/dist/confirm-dialog/index.d.ts +6 -7
  67. package/dist/confirm-dialog/index.d.ts.map +1 -1
  68. package/dist/confirm-dialog/index.js +20 -16
  69. package/dist/date-picker/index.d.ts +23 -14
  70. package/dist/date-picker/index.d.ts.map +1 -1
  71. package/dist/date-picker/index.js +109 -93
  72. package/dist/dialog/index.d.ts +3 -4
  73. package/dist/dialog/index.d.ts.map +1 -1
  74. package/dist/dialog/index.js +58 -55
  75. package/dist/disclosure/index.d.ts +8 -0
  76. package/dist/disclosure/index.d.ts.map +1 -1
  77. package/dist/disclosure/index.js +31 -32
  78. package/dist/editable-cell/index.d.ts +4 -5
  79. package/dist/editable-cell/index.d.ts.map +1 -1
  80. package/dist/editable-cell/index.js +23 -22
  81. package/dist/field/index.d.ts +8 -8
  82. package/dist/field/index.d.ts.map +1 -1
  83. package/dist/field/index.js +20 -18
  84. package/dist/filter-bar/index.d.ts +2 -2
  85. package/dist/filter-bar/index.d.ts.map +1 -1
  86. package/dist/filter-bar/index.js +38 -36
  87. package/dist/header/index.d.ts +1 -1
  88. package/dist/header/index.d.ts.map +1 -1
  89. package/dist/header/index.js +13 -11
  90. package/dist/hover-card/index.d.ts +32 -0
  91. package/dist/hover-card/index.d.ts.map +1 -0
  92. package/dist/hover-card/index.js +84 -0
  93. package/dist/icon-picker/index.d.ts +16 -5
  94. package/dist/icon-picker/index.d.ts.map +1 -1
  95. package/dist/icon-picker/index.js +42 -47
  96. package/dist/icons/micro/plus.d.ts +3 -0
  97. package/dist/icons/micro/plus.d.ts.map +1 -0
  98. package/dist/icons/micro/plus.js +17 -0
  99. package/dist/index.d.ts +41 -24
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/input/index.d.ts +5 -1
  102. package/dist/input/index.d.ts.map +1 -1
  103. package/dist/input/index.js +10 -10
  104. package/dist/input-group/index.d.ts +4 -1
  105. package/dist/input-group/index.d.ts.map +1 -1
  106. package/dist/input-group/index.js +17 -17
  107. package/dist/keypad/index.d.ts +9 -7
  108. package/dist/keypad/index.d.ts.map +1 -1
  109. package/dist/keypad/index.js +22 -19
  110. package/dist/lib.js +112 -93
  111. package/dist/load-more/index.d.ts +4 -2
  112. package/dist/load-more/index.d.ts.map +1 -1
  113. package/dist/load-more/index.js +26 -23
  114. package/dist/locale-provider/index.d.ts +23 -0
  115. package/dist/locale-provider/index.d.ts.map +1 -0
  116. package/dist/locale-provider/index.js +35 -0
  117. package/dist/menu/index.d.ts +62 -9
  118. package/dist/menu/index.d.ts.map +1 -1
  119. package/dist/menu/index.js +371 -128
  120. package/dist/meter/index.d.ts +2 -2
  121. package/dist/meter/index.d.ts.map +1 -1
  122. package/dist/meter/index.js +4 -4
  123. package/dist/money-input/index.d.ts +20 -10
  124. package/dist/money-input/index.d.ts.map +1 -1
  125. package/dist/money-input/index.js +199 -190
  126. package/dist/month-picker/index.d.ts +17 -10
  127. package/dist/month-picker/index.d.ts.map +1 -1
  128. package/dist/month-picker/index.js +97 -86
  129. package/dist/navigation-menu/index.d.ts +42 -0
  130. package/dist/navigation-menu/index.d.ts.map +1 -0
  131. package/dist/navigation-menu/index.js +144 -0
  132. package/dist/number-field/index.d.ts +34 -0
  133. package/dist/number-field/index.d.ts.map +1 -0
  134. package/dist/number-field/index.js +119 -0
  135. package/dist/page-header/index.d.ts +4 -3
  136. package/dist/page-header/index.d.ts.map +1 -1
  137. package/dist/page-header/index.js +2 -1
  138. package/dist/pagination/index.d.ts +1 -1
  139. package/dist/pagination/index.d.ts.map +1 -1
  140. package/dist/pagination/index.js +35 -33
  141. package/dist/progress-ring/index.d.ts +4 -3
  142. package/dist/progress-ring/index.d.ts.map +1 -1
  143. package/dist/progress-ring/index.js +11 -10
  144. package/dist/radio-cards/index.d.ts +9 -5
  145. package/dist/radio-cards/index.d.ts.map +1 -1
  146. package/dist/radio-cards/index.js +26 -24
  147. package/dist/radio-group/index.d.ts +9 -8
  148. package/dist/radio-group/index.d.ts.map +1 -1
  149. package/dist/radio-group/index.js +35 -34
  150. package/dist/range-slider/index.d.ts +10 -4
  151. package/dist/range-slider/index.d.ts.map +1 -1
  152. package/dist/range-slider/index.js +43 -31
  153. package/dist/repeat-picker/index.d.ts +13 -6
  154. package/dist/repeat-picker/index.d.ts.map +1 -1
  155. package/dist/repeat-picker/index.js +74 -62
  156. package/dist/resizable/index.d.ts +29 -0
  157. package/dist/resizable/index.d.ts.map +1 -0
  158. package/dist/resizable/index.js +135 -0
  159. package/dist/segmented/index.d.ts +8 -5
  160. package/dist/segmented/index.d.ts.map +1 -1
  161. package/dist/segmented/index.js +36 -34
  162. package/dist/select/index.d.ts +9 -3
  163. package/dist/select/index.d.ts.map +1 -1
  164. package/dist/select/index.js +94 -91
  165. package/dist/separator/index.d.ts +14 -0
  166. package/dist/separator/index.d.ts.map +1 -0
  167. package/dist/separator/index.js +15 -0
  168. package/dist/side-nav/index.js +1 -1
  169. package/dist/skeleton/index.d.ts +4 -4
  170. package/dist/skeleton/index.d.ts.map +1 -1
  171. package/dist/skeleton/index.js +4 -3
  172. package/dist/slider/index.d.ts +6 -3
  173. package/dist/slider/index.d.ts.map +1 -1
  174. package/dist/slider/index.js +29 -23
  175. package/dist/sortable/index.d.ts +10 -20
  176. package/dist/sortable/index.d.ts.map +1 -1
  177. package/dist/sortable/index.js +72 -134
  178. package/dist/sortable/shared.d.ts +56 -0
  179. package/dist/sortable/shared.d.ts.map +1 -0
  180. package/dist/sortable/shared.js +104 -0
  181. package/dist/sortable/tree-model.d.ts +46 -0
  182. package/dist/sortable/tree-model.d.ts.map +1 -0
  183. package/dist/sortable/tree-model.js +87 -0
  184. package/dist/sortable/tree.d.ts +31 -0
  185. package/dist/sortable/tree.d.ts.map +1 -0
  186. package/dist/sortable/tree.js +150 -0
  187. package/dist/sparkline/index.d.ts +1 -1
  188. package/dist/sparkline/index.d.ts.map +1 -1
  189. package/dist/sparkline/index.js +26 -25
  190. package/dist/spinner/index.d.ts +4 -3
  191. package/dist/spinner/index.d.ts.map +1 -1
  192. package/dist/spinner/index.js +2 -1
  193. package/dist/status-pill/index.d.ts.map +1 -1
  194. package/dist/status-pill/index.js +1 -1
  195. package/dist/stepper/index.d.ts +1 -1
  196. package/dist/stepper/index.d.ts.map +1 -1
  197. package/dist/stepper/index.js +31 -30
  198. package/dist/tab-bar/index.js +1 -1
  199. package/dist/table/index.d.ts +5 -5
  200. package/dist/table/index.d.ts.map +1 -1
  201. package/dist/table/index.js +66 -64
  202. package/dist/table/selection.d.ts +2 -2
  203. package/dist/table/selection.d.ts.map +1 -1
  204. package/dist/table/selection.js +41 -38
  205. package/dist/table/swipe.d.ts +1 -1
  206. package/dist/table/swipe.d.ts.map +1 -1
  207. package/dist/table/swipe.js +1 -1
  208. package/dist/table-of-contents/index.d.ts +4 -2
  209. package/dist/table-of-contents/index.d.ts.map +1 -1
  210. package/dist/table-of-contents/index.js +27 -25
  211. package/dist/tabs/index.d.ts.map +1 -1
  212. package/dist/tabs/index.js +90 -88
  213. package/dist/tag-input/index.d.ts +3 -1
  214. package/dist/tag-input/index.d.ts.map +1 -1
  215. package/dist/tag-input/index.js +61 -52
  216. package/dist/textarea/index.js +4 -4
  217. package/dist/theme-toggle/index.d.ts +9 -8
  218. package/dist/theme-toggle/index.d.ts.map +1 -1
  219. package/dist/theme-toggle/index.js +30 -28
  220. package/dist/theme.css +90 -12
  221. package/dist/time-field/index.d.ts +31 -0
  222. package/dist/time-field/index.d.ts.map +1 -0
  223. package/dist/time-field/index.js +175 -0
  224. package/dist/timeline/index.js +1 -1
  225. package/dist/toast/index.d.ts +1 -1
  226. package/dist/toast/index.d.ts.map +1 -1
  227. package/dist/toast/index.js +127 -125
  228. package/dist/toggle/index.d.ts +2 -2
  229. package/dist/toggle/index.d.ts.map +1 -1
  230. package/dist/toggle/index.js +8 -6
  231. package/dist/toggle-group/index.d.ts +35 -0
  232. package/dist/toggle-group/index.d.ts.map +1 -0
  233. package/dist/toggle-group/index.js +53 -0
  234. package/dist/toolbar/index.d.ts +19 -0
  235. package/dist/toolbar/index.d.ts.map +1 -0
  236. package/dist/toolbar/index.js +36 -0
  237. package/dist/tooltip/index.d.ts.map +1 -1
  238. package/dist/tooltip/index.js +40 -74
  239. package/dist/tree/index.d.ts.map +1 -1
  240. package/dist/tree/index.js +105 -102
  241. package/dist/trend/index.d.ts +2 -2
  242. package/dist/trend/index.d.ts.map +1 -1
  243. package/dist/trend/index.js +20 -19
  244. package/dist/utils/color.d.ts +35 -0
  245. package/dist/utils/color.d.ts.map +1 -0
  246. package/dist/utils/color.js +65 -0
  247. package/dist/utils/cva.js +0 -1
  248. package/dist/utils/cx.js +0 -1
  249. package/dist/utils/date.d.ts +6 -0
  250. package/dist/utils/date.d.ts.map +1 -1
  251. package/dist/utils/date.js +1 -2
  252. package/dist/utils/direction.d.ts +7 -0
  253. package/dist/utils/direction.d.ts.map +1 -0
  254. package/dist/utils/direction.js +6 -0
  255. package/dist/utils/form-value.d.ts +15 -0
  256. package/dist/utils/form-value.d.ts.map +1 -0
  257. package/dist/utils/form-value.js +29 -0
  258. package/dist/utils/fx.js +0 -1
  259. package/dist/utils/merge.js +0 -1
  260. package/dist/utils/messages.d.ts +137 -0
  261. package/dist/utils/messages.d.ts.map +1 -0
  262. package/dist/utils/messages.js +133 -0
  263. package/dist/utils/money.js +0 -1
  264. package/dist/utils/month.js +0 -1
  265. package/dist/utils/motion.js +0 -1
  266. package/dist/utils/refs.d.ts +6 -0
  267. package/dist/utils/refs.d.ts.map +1 -0
  268. package/dist/utils/refs.js +13 -0
  269. package/dist/utils/repeat.d.ts +3 -1
  270. package/dist/utils/repeat.d.ts.map +1 -1
  271. package/dist/utils/repeat.js +28 -25
  272. package/dist/utils/roving.d.ts +17 -0
  273. package/dist/utils/roving.d.ts.map +1 -0
  274. package/dist/utils/roving.js +35 -0
  275. package/dist/utils/section-link.js +0 -1
  276. package/dist/utils/slot.d.ts.map +1 -1
  277. package/dist/utils/slot.js +7 -11
  278. package/dist/utils/status-icons.js +7 -7
  279. package/dist/utils/styles.d.ts +9 -2
  280. package/dist/utils/styles.d.ts.map +1 -1
  281. package/dist/utils/styles.js +6 -3
  282. package/dist/utils/theme-wave.d.ts.map +1 -1
  283. package/dist/utils/theme-wave.js +70 -70
  284. package/dist/utils/theme.d.ts.map +1 -1
  285. package/dist/utils/theme.js +56 -60
  286. package/dist/utils/useAnchoredPopup.d.ts +7 -4
  287. package/dist/utils/useAnchoredPopup.d.ts.map +1 -1
  288. package/dist/utils/useAnchoredPopup.js +18 -11
  289. package/dist/utils/useControllable.d.ts +9 -0
  290. package/dist/utils/useControllable.d.ts.map +1 -0
  291. package/dist/utils/useControllable.js +15 -0
  292. package/dist/utils/useCopyToClipboard.d.ts +13 -0
  293. package/dist/utils/useCopyToClipboard.d.ts.map +1 -0
  294. package/dist/utils/useCopyToClipboard.js +26 -0
  295. package/dist/utils/useHoverPopup.d.ts +39 -0
  296. package/dist/utils/useHoverPopup.d.ts.map +1 -0
  297. package/dist/utils/useHoverPopup.js +64 -0
  298. package/dist/zen.css +1 -1
  299. package/package.json +1 -1
@@ -1,144 +1,147 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
3
  import { useTypeahead as t } from "../utils/typeahead.js";
4
- import { useAnchoredPopup as n } from "../utils/useAnchoredPopup.js";
5
- import { POPUP as r, TRIGGER as i } from "../utils/styles.js";
4
+ import { useControllable as n } from "../utils/useControllable.js";
5
+ import { useAnchoredPopup as r } from "../utils/useAnchoredPopup.js";
6
+ import { useMessages as i } from "../locale-provider/index.js";
6
7
  import { CheckIcon as a } from "../utils/status-icons.js";
7
8
  import { useFieldProps as o } from "../field/index.js";
8
- import { FieldChevron as s } from "../utils/field-chevron.js";
9
- import { Children as c, Fragment as l, createContext as u, isValidElement as d, useCallback as f, useContext as p, useEffect as m, useId as h, useLayoutEffect as g, useRef as _, useState as v } from "react";
10
- import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
9
+ import { FIELD_SIZE as s, POPUP as c, TRIGGER as l } from "../utils/styles.js";
10
+ import { FormValue as u } from "../utils/form-value.js";
11
+ import { FieldChevron as d } from "../utils/field-chevron.js";
12
+ import { Children as f, Fragment as p, createContext as m, isValidElement as h, useCallback as ee, useContext as g, useEffect as _, useId as te, useLayoutEffect as v, useRef as y, useState as b } from "react";
13
+ import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
11
14
  //#region packages/select/index.tsx
12
- var S = u(null);
13
- function C({ value: a, onChange: c, placeholder: l = "Select…", disabled: u = !1, name: d, id: p, className: g, listClassName: C, children: T, style: E, onKeyDown: D, ...O }) {
14
- let k = _(null), A = h(), j = p ?? A, M = o({
15
- ...O,
16
- id: p
17
- }), [N, P] = v(null), F = t(), [I, L] = v(/* @__PURE__ */ new Map()), R = () => Array.from(k.current?.querySelectorAll("[role=\"option\"]") ?? []).map((e) => ({
15
+ var w = m(null);
16
+ function T({ value: a, defaultValue: f = null, onValueChange: p, placeholder: m, disabled: h = !1, size: g = "default", name: v, id: T, className: D, listClassName: O, children: k, style: A, onKeyDown: j, ...M }) {
17
+ let N = i(), P = m ?? N.selectPlaceholder, [F, I, L] = n(a, f, p), R = y(null), z = te(), B = T ?? z, ne = o({
18
+ ...M,
19
+ id: T
20
+ }), [V, H] = b(null), U = t(), [W, G] = b(/* @__PURE__ */ new Map()), K = () => Array.from(R.current?.querySelectorAll("[role=\"option\"]") ?? []).map((e) => ({
18
21
  value: e.dataset.value,
19
22
  label: e.dataset.label ?? "",
20
23
  disabled: e.getAttribute("aria-disabled") === "true"
21
- })), z = n({
24
+ })), q = r({
22
25
  matchWidth: !0,
23
26
  onOpenChange: (e) => {
24
27
  if (!e) return;
25
- let t = R();
26
- P(t.find((e) => e.value === a)?.value ?? t.find((e) => !e.disabled)?.value ?? null);
28
+ let t = K();
29
+ H(t.find((e) => e.value === F)?.value ?? t.find((e) => !e.disabled)?.value ?? null);
27
30
  }
28
31
  });
29
- m(() => {
30
- z.open && k.current?.focus();
31
- }, [z.open]);
32
- let B = (e) => {
33
- R().find((t) => t.value === e)?.disabled || (c(e), z.setOpen(!1));
34
- }, V = f((e, t) => (L((n) => n.get(e) === t ? n : new Map(n).set(e, t)), () => L((t) => {
32
+ _(() => {
33
+ q.open && R.current?.focus();
34
+ }, [q.open]);
35
+ let J = (e) => {
36
+ K().find((t) => t.value === e)?.disabled || (I(e), q.setOpen(!1));
37
+ }, Y = ee((e, t) => (G((n) => n.get(e) === t ? n : new Map(n).set(e, t)), () => G((t) => {
35
38
  let n = new Map(t);
36
39
  return n.delete(e), n;
37
- })), []), H = new Map(I);
38
- w(T, H);
39
- let U = a === null ? void 0 : H.get(a), W = (e, t, n = R()) => {
40
+ })), []), X = new Map(W);
41
+ E(k, X);
42
+ let Z = F === null ? void 0 : X.get(F), Q = (e, t, n = K()) => {
40
43
  let r = e === null ? t === 1 ? -1 : n.length : n.findIndex((t) => t.value === e);
41
44
  for (let e = 1; e <= n.length; e++) {
42
45
  let i = (r + t * e + n.length * 2) % n.length;
43
46
  if (!n[i].disabled) return n[i].value;
44
47
  }
45
48
  return e;
46
- }, G = (e) => {
49
+ }, re = (e) => {
47
50
  let t = {
48
- ArrowDown: () => P((e) => W(e, 1)),
49
- ArrowUp: () => P((e) => W(e, -1)),
50
- Home: () => P(W(null, 1)),
51
- End: () => P(W(null, -1)),
52
- Enter: () => N !== null && B(N),
53
- " ": () => N !== null && B(N),
54
- Tab: () => z.setOpen(!1)
51
+ ArrowDown: () => H((e) => Q(e, 1)),
52
+ ArrowUp: () => H((e) => Q(e, -1)),
53
+ Home: () => H(Q(null, 1)),
54
+ End: () => H(Q(null, -1)),
55
+ Enter: () => V !== null && J(V),
56
+ " ": () => V !== null && J(V),
57
+ Tab: () => q.setOpen(!1)
55
58
  };
56
59
  if (t[e.key]) {
57
60
  e.key !== "Tab" && e.preventDefault(), t[e.key]();
58
61
  return;
59
62
  }
60
- let n = F(e);
63
+ let n = U(e);
61
64
  if (n) {
62
- let e = R().find((e) => !e.disabled && e.label.toLowerCase().startsWith(n));
63
- e && P(e.value);
65
+ let e = K().find((e) => !e.disabled && e.label.toLowerCase().startsWith(n));
66
+ e && H(e.value);
64
67
  }
65
- }, K = (e) => `${z.id}-option-${e}`;
66
- return /* @__PURE__ */ x(y, { children: [
67
- /* @__PURE__ */ x("button", {
68
+ }, $ = (e) => `${q.id}-option-${e}`;
69
+ return /* @__PURE__ */ C(x, { children: [
70
+ /* @__PURE__ */ C("button", {
68
71
  type: "button",
69
- ...O,
70
72
  ...M,
71
- id: j,
72
- disabled: u,
73
+ ...ne,
74
+ id: B,
75
+ disabled: h,
73
76
  "aria-haspopup": "listbox",
74
- ...z.triggerProps,
77
+ ...q.triggerProps,
75
78
  style: {
76
- ...z.triggerProps.style,
77
- ...E
79
+ ...q.triggerProps.style,
80
+ ...A
78
81
  },
79
82
  onKeyDown: (e) => {
80
- D?.(e), ["ArrowDown", "ArrowUp"].includes(e.key) && !z.open && (e.preventDefault(), z.setOpen(!0));
83
+ j?.(e), ["ArrowDown", "ArrowUp"].includes(e.key) && !q.open && (e.preventDefault(), q.setOpen(!0));
81
84
  },
82
- className: e("zen__select group", i, "w-full", z.open && "border-glow/60 [--glow-border-color:transparent] shadow-glow-focus", g),
83
- children: [/* @__PURE__ */ b("span", {
84
- className: e("truncate", U === void 0 && "text-[color:oklch(var(--muted-foreground)/var(--zen-placeholder))]"),
85
- children: U ?? l
86
- }), /* @__PURE__ */ b(s, { open: z.open })]
85
+ className: e("zen__select group", l, s[g], "w-full", q.open && "border-glow/60 [--glow-border-color:transparent] shadow-glow-focus", D),
86
+ children: [/* @__PURE__ */ S("span", {
87
+ className: e("truncate", Z === void 0 && "text-[color:oklch(var(--muted-foreground)/var(--zen-placeholder))]"),
88
+ children: Z ?? P
89
+ }), /* @__PURE__ */ S(d, { open: q.open })]
87
90
  }),
88
- d && /* @__PURE__ */ b("input", {
89
- type: "hidden",
90
- name: d,
91
- value: a ?? ""
91
+ /* @__PURE__ */ S(u, {
92
+ name: v,
93
+ value: F ?? "",
94
+ onReset: L
92
95
  }),
93
- /* @__PURE__ */ b("div", {
94
- ...z.popupProps,
95
- className: e("zen__popover", r, "overflow-visible py-1", C),
96
- children: /* @__PURE__ */ b("div", {
97
- ref: k,
96
+ /* @__PURE__ */ S("div", {
97
+ ...q.popupProps,
98
+ className: e("zen__popover", c, "overflow-visible py-1", O),
99
+ children: /* @__PURE__ */ S("div", {
100
+ ref: R,
98
101
  role: "listbox",
99
102
  tabIndex: -1,
100
- "aria-label": O["aria-label"],
101
- "aria-labelledby": O["aria-label"] ? void 0 : j,
102
- "aria-activedescendant": N === null ? void 0 : K(N),
103
- onKeyDown: G,
103
+ "aria-label": M["aria-label"],
104
+ "aria-labelledby": M["aria-label"] ? void 0 : B,
105
+ "aria-activedescendant": V === null ? void 0 : $(V),
106
+ onKeyDown: re,
104
107
  className: "max-h-72 overflow-y-auto outline-hidden",
105
- children: /* @__PURE__ */ b(S.Provider, {
108
+ children: /* @__PURE__ */ S(w.Provider, {
106
109
  value: {
107
- value: a,
108
- active: N,
109
- setActive: P,
110
- choose: B,
111
- optionId: K,
112
- register: V
110
+ value: F,
111
+ active: V,
112
+ setActive: H,
113
+ choose: J,
114
+ optionId: $,
115
+ register: Y
113
116
  },
114
- children: T
117
+ children: k
115
118
  })
116
119
  })
117
120
  })
118
121
  ] });
119
122
  }
120
- function w(e, t) {
121
- c.forEach(e, (e) => {
122
- if (!d(e)) return;
123
+ function E(e, t) {
124
+ f.forEach(e, (e) => {
125
+ if (!h(e)) return;
123
126
  let n = e;
124
- if (n.type === E && n.props.value !== void 0) {
125
- let e = n.props.label ?? T(n.props.children);
127
+ if (n.type === O && n.props.value !== void 0) {
128
+ let e = n.props.label ?? D(n.props.children);
126
129
  e && t.set(n.props.value, e);
127
- } else (n.type === D || n.type === l) && w(n.props.children, t);
130
+ } else (n.type === k || n.type === p) && E(n.props.children, t);
128
131
  });
129
132
  }
130
- var T = (e) => typeof e == "string" || typeof e == "number" ? String(e) : Array.isArray(e) ? e.map(T).join("") : "";
131
- function E({ value: t, label: n, disabled: r, className: i, children: o }) {
132
- let s = p(S);
133
+ var D = (e) => typeof e == "string" || typeof e == "number" ? String(e) : Array.isArray(e) ? e.map(D).join("") : "";
134
+ function O({ value: t, label: n, disabled: r, className: i, children: o }) {
135
+ let s = g(w);
133
136
  if (!s) throw Error("SelectItem must be inside a Select");
134
- let c = _(null), l = n ?? T(o), u = s.register;
135
- g(() => u(t, l || c.current?.textContent?.trim() || ""), [
137
+ let c = y(null), l = n ?? D(o), u = s.register;
138
+ v(() => u(t, l || c.current?.textContent?.trim() || ""), [
136
139
  u,
137
140
  t,
138
141
  l
139
142
  ]);
140
143
  let d = s.value === t;
141
- return /* @__PURE__ */ x("div", {
144
+ return /* @__PURE__ */ C("div", {
142
145
  ref: c,
143
146
  id: s.optionId(t),
144
147
  role: "option",
@@ -150,32 +153,32 @@ function E({ value: t, label: n, disabled: r, className: i, children: o }) {
150
153
  onMouseMove: () => !r && s.setActive(t),
151
154
  onClick: () => s.choose(t),
152
155
  className: e("grid cursor-pointer grid-cols-[1rem_1fr] items-center gap-2 px-3 py-2 text-sm outline-hidden select-none", "data-highlighted:bg-muted aria-disabled:cursor-not-allowed aria-disabled:opacity-50", i),
153
- children: [/* @__PURE__ */ b("span", {
156
+ children: [/* @__PURE__ */ S("span", {
154
157
  className: "text-primary col-start-1",
155
158
  "aria-hidden": !0,
156
- children: d && /* @__PURE__ */ b(a, {})
157
- }), /* @__PURE__ */ b("span", {
159
+ children: d && /* @__PURE__ */ S(a, {})
160
+ }), /* @__PURE__ */ S("span", {
158
161
  className: "col-start-2 truncate",
159
162
  children: o
160
163
  })]
161
164
  });
162
165
  }
163
- function D({ label: e, children: t }) {
164
- return /* @__PURE__ */ x("div", {
166
+ function k({ label: e, children: t }) {
167
+ return /* @__PURE__ */ C("div", {
165
168
  role: "group",
166
169
  "aria-label": typeof e == "string" ? e : void 0,
167
- children: [/* @__PURE__ */ b("div", {
170
+ children: [/* @__PURE__ */ S("div", {
168
171
  "aria-hidden": !0,
169
172
  className: "text-muted-foreground px-3 pt-2 pb-1 text-xs font-medium",
170
173
  children: e
171
174
  }), t]
172
175
  });
173
176
  }
174
- function O() {
175
- return /* @__PURE__ */ b("div", {
177
+ function A() {
178
+ return /* @__PURE__ */ S("div", {
176
179
  role: "separator",
177
180
  className: "bg-tint/[0.07] mx-2 my-1 h-px"
178
181
  });
179
182
  }
180
183
  //#endregion
181
- export { D as SelectGroup, E as SelectItem, O as SelectSeparator, C as default };
184
+ export { k as SelectGroup, O as SelectItem, A as SelectSeparator, T as default };
@@ -0,0 +1,14 @@
1
+ import { ComponentProps } from 'react';
2
+ /**
3
+ * A hairline between groups of content, across (the default) or upright
4
+ * (`orientation="vertical"`, e.g. between toolbar buttons; it takes its
5
+ * container's height). Screen readers hear it only when it divides something
6
+ * meaningful: pass `decorative` for one that's just visual.
7
+ */
8
+ export default function Separator({ orientation, decorative, className, ...rest }: SeparatorProps): import('react').JSX.Element;
9
+ export interface SeparatorProps extends ComponentProps<'div'> {
10
+ orientation?: 'horizontal' | 'vertical';
11
+ /** Only visual: hidden from screen readers. */
12
+ decorative?: boolean;
13
+ }
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/separator/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,WAA0B,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,+BAc/G;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,KAAK,CAAC;IACzD,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB"}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { jsx as t } from "react/jsx-runtime";
4
+ //#region packages/separator/index.tsx
5
+ function n({ orientation: n = "horizontal", decorative: r, className: i, ...a }) {
6
+ return /* @__PURE__ */ t("div", {
7
+ role: r ? "none" : "separator",
8
+ "aria-orientation": r || n === "horizontal" ? void 0 : "vertical",
9
+ "data-orientation": n,
10
+ className: e("zen__separator bg-tint/[0.09] shrink-0", n === "horizontal" ? "h-px w-full" : "w-px self-stretch", i),
11
+ ...a
12
+ });
13
+ }
14
+ //#endregion
15
+ export { n as default };
@@ -18,7 +18,7 @@ function a({ title: t, children: i, className: a }) {
18
18
  }), i]
19
19
  });
20
20
  }
21
- var o = e("rounded-lg px-3 py-1.5 text-sm outline-hidden transition-[background-color,color,box-shadow] duration-200", "text-muted-foreground hover:bg-tint/[0.05] hover:text-foreground focus-visible:ring-ring/50 focus-visible:ring-2", "aria-[current=page]:bg-primary/15 aria-[current=page]:text-foreground aria-[current=page]:shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.25)]");
21
+ var o = e("rounded-lg px-3 py-1.5 text-sm outline-hidden transition-[background-color,color,box-shadow] duration-200", "text-muted-foreground hover:bg-tint/[0.05] hover:text-foreground focus-ring", "aria-[current=page]:bg-primary/15 aria-[current=page]:text-foreground aria-[current=page]:shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.25)]");
22
22
  function s({ active: r, asChild: i, className: a, children: s, ...c }) {
23
23
  let l = {
24
24
  ...c,
@@ -1,13 +1,13 @@
1
- import { ReactElement } from 'react';
1
+ import { ComponentProps, ReactElement } from 'react';
2
2
  /**
3
3
  * Shimmering placeholder in the shape of content that's on its way. Size it with className.
4
4
  *
5
5
  * Give it the content as its child and `loading`: the placeholder shows while
6
6
  * loading, then the content fades in where it was.
7
7
  */
8
- export default function Skeleton({ className, loading, children }: SkeletonProps): import('react').JSX.Element;
9
- export interface SkeletonProps {
10
- className?: string;
8
+ export default function Skeleton({ className, loading, children, ...rest }: SkeletonProps): import('react').JSX.Element;
9
+ /** Other props (data-*, a style) go on the placeholder. */
10
+ export interface SkeletonProps extends Omit<ComponentProps<'span'>, 'children'> {
11
11
  /** With children: show the placeholder instead of them while true. */
12
12
  loading?: boolean;
13
13
  /** The content this stands in for, a single element. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/skeleton/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAY,MAAM,OAAO,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,aAAa,+BAK/E;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,YAAY,CAAC;CAC3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/skeleton/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAY,MAAM,OAAO,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,aAAa,+BAKxF;AAED,2DAA2D;AAC3D,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC3E,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,YAAY,CAAC;CAC3B"}
@@ -4,13 +4,14 @@ import { Slot as t } from "../utils/slot.js";
4
4
  import { useState as n } from "react";
5
5
  import { jsx as r } from "react/jsx-runtime";
6
6
  //#region packages/skeleton/index.tsx
7
- function i({ className: i, loading: a, children: o }) {
8
- let [s, c] = n(!!a);
9
- return a && !s && c(!0), o && !a ? s ? /* @__PURE__ */ r(t, {
7
+ function i({ className: i, loading: a, children: o, ...s }) {
8
+ let [c, l] = n(!!a);
9
+ return a && !c && l(!0), o && !a ? c ? /* @__PURE__ */ r(t, {
10
10
  className: "zen__reveal",
11
11
  children: o
12
12
  }) : o : /* @__PURE__ */ r("span", {
13
13
  "aria-hidden": !0,
14
+ ...s,
14
15
  className: e("zen__skeleton block rounded-md", i)
15
16
  });
16
17
  }
@@ -5,11 +5,14 @@ import { ComponentProps } from 'react';
5
5
  * the accent unless you give it your own `trackBackground` (e.g. a hue
6
6
  * gradient), and a glowing thumb.
7
7
  */
8
- export default function Slider({ value, min, max, step, onValueChange, onValueCommit, trackBackground, thumbColor, valueText, className, style, ...rest }: SliderProps): import('react').JSX.Element;
8
+ export default function Slider({ value: valueProp, defaultValue, min, max, step, onValueChange, onValueCommit, trackBackground, thumbColor, valueText, className, style, onChange, ...rest }: SliderProps): import('react').JSX.Element;
9
9
  /** The glowing thumb, with its focus ring: Slider's and RangeSlider's. */
10
10
  export declare const THUMB: string;
11
- export interface SliderProps extends Omit<ComponentProps<'input'>, 'type' | 'value' | 'min' | 'max' | 'step' | 'onChange' | 'defaultValue'> {
12
- value: number;
11
+ export interface SliderProps extends Omit<ComponentProps<'input'>, 'type' | 'value' | 'min' | 'max' | 'step' | 'defaultValue'> {
12
+ /** The value, when you keep it. */
13
+ value?: number;
14
+ /** The first value, when the slider keeps its own (default `min`). */
15
+ defaultValue?: number;
13
16
  min?: number;
14
17
  max?: number;
15
18
  step?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/slider/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAoC,MAAM,OAAO,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,KAAK,EACL,GAAO,EACP,GAAS,EACT,IAAQ,EACR,aAAa,EACb,aAAa,EACb,eAAe,EACf,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACV,EAAE,WAAW,+BA6Cb;AAED,0EAA0E;AAC1E,eAAO,MAAM,KAAK,QAI+E,CAAC;AAElG,MAAM,WAAW,WAAY,SAAQ,IAAI,CACrC,cAAc,CAAC,OAAO,CAAC,EACvB,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,cAAc,CAC1E;IACG,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iDAAiD;IACjD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/slider/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAoC,MAAM,OAAO,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,GAAO,EACP,GAAS,EACT,IAAQ,EACR,aAAa,EACb,aAAa,EACb,eAAe,EACf,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,WAAW,+BAmDb;AAED,0EAA0E;AAC1E,eAAO,MAAM,KAAK,QAI+E,CAAC;AAElG,MAAM,WAAW,WAAY,SAAQ,IAAI,CACrC,cAAc,CAAC,OAAO,CAAC,EACvB,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,cAAc,CAC7D;IACG,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iDAAiD;IACjD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC"}
@@ -1,35 +1,41 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { useEffect as t, useRef as n } from "react";
4
- import { jsx as r } from "react/jsx-runtime";
3
+ import { useControllable as t } from "../utils/useControllable.js";
4
+ import { useFormReset as n } from "../utils/form-value.js";
5
+ import { useEffect as r, useRef as i } from "react";
6
+ import { jsx as a } from "react/jsx-runtime";
5
7
  //#region packages/slider/index.tsx
6
- function i({ value: i, min: o = 0, max: s = 100, step: c = 1, onValueChange: l, onValueCommit: u, trackBackground: d, thumbColor: f, valueText: p, className: m, style: h, ...g }) {
7
- let _ = n(null), v = n(u);
8
- v.current = u, t(() => {
9
- let e = _.current;
8
+ function o({ value: o, defaultValue: c, min: l = 0, max: u = 100, step: d = 1, onValueChange: f, onValueCommit: p, trackBackground: m, thumbColor: h, valueText: g, className: _, style: v, onChange: y, ...b }) {
9
+ let [x, S, C] = t(o, c ?? l, f), w = i(null);
10
+ n(w, C);
11
+ let T = i(p);
12
+ T.current = p, r(() => {
13
+ let e = w.current;
10
14
  if (!e) return;
11
- let t = () => v.current?.(Number(e.value));
15
+ let t = () => T.current?.(Number(e.value));
12
16
  return e.addEventListener("change", t), () => e.removeEventListener("change", t);
13
17
  }, []);
14
- let y = s > o ? (i - o) / (s - o) * 100 : 0, b = d ?? `linear-gradient(to right, oklch(var(--primary)) ${y}%, oklch(var(--muted)) ${y}%)`;
15
- return /* @__PURE__ */ r("input", {
16
- ref: _,
18
+ let E = u > l ? (x - l) / (u - l) * 100 : 0, D = m ?? `linear-gradient(to var(--zen-end), oklch(var(--primary)) ${E}%, oklch(var(--muted)) ${E}%)`;
19
+ return /* @__PURE__ */ a("input", {
20
+ ref: w,
17
21
  type: "range",
18
- min: o,
19
- max: s,
20
- step: c,
21
- value: i,
22
- "aria-valuetext": p?.(i),
23
- onChange: (e) => l?.(Number(e.target.value)),
22
+ min: l,
23
+ max: u,
24
+ step: d,
25
+ value: x,
26
+ "aria-valuetext": g?.(x),
27
+ onChange: (e) => {
28
+ y?.(e), S(Number(e.target.value));
29
+ },
24
30
  style: {
25
- ...h,
26
- "--zen-track": b,
27
- "--zen-thumb": f ?? "oklch(var(--primary))"
31
+ ...v,
32
+ "--zen-track": D,
33
+ "--zen-thumb": h ?? "oklch(var(--primary))"
28
34
  },
29
- className: e("zen__slider h-5 w-full cursor-pointer appearance-none bg-transparent outline-hidden disabled:cursor-not-allowed disabled:opacity-50", "[&::-webkit-slider-runnable-track]:h-2.5 [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:[background:var(--zen-track)]", "[&::-moz-range-track]:h-2.5 [&::-moz-range-track]:rounded-full [&::-moz-range-track]:[background:var(--zen-track)]", a, m),
30
- ...g
35
+ className: e("zen__slider h-5 w-full cursor-pointer [--zen-end:right] rtl:[--zen-end:left] appearance-none bg-transparent outline-hidden disabled:cursor-not-allowed disabled:opacity-50", "[&::-webkit-slider-runnable-track]:h-2.5 [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:[background:var(--zen-track)]", "[&::-moz-range-track]:h-2.5 [&::-moz-range-track]:rounded-full [&::-moz-range-track]:[background:var(--zen-track)]", s, _),
36
+ ...b
31
37
  });
32
38
  }
33
- var a = "[&::-webkit-slider-thumb]:-mt-[5px] [&::-webkit-slider-thumb]:size-5 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-white [&::-webkit-slider-thumb]:shadow-[0_0_0_1px_oklch(0_0_0/0.3),0_0_16px_oklch(var(--glow)/calc(0.8*var(--glow-k)))] [&::-webkit-slider-thumb]:[background:var(--zen-thumb)] [&::-moz-range-thumb]:size-5 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-white [&::-moz-range-thumb]:shadow-[0_0_0_1px_oklch(0_0_0/0.3),0_0_16px_oklch(var(--glow)/calc(0.8*var(--glow-k)))] [&::-moz-range-thumb]:[background:var(--zen-thumb)] focus-visible:[&::-webkit-slider-thumb]:ring-ring/40 focus-visible:[&::-webkit-slider-thumb]:ring-4 focus-visible:[&::-moz-range-thumb]:ring-ring/40 focus-visible:[&::-moz-range-thumb]:ring-4";
39
+ var s = "[&::-webkit-slider-thumb]:-mt-[5px] [&::-webkit-slider-thumb]:size-5 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-white [&::-webkit-slider-thumb]:shadow-[0_0_0_1px_oklch(0_0_0/0.3),0_0_16px_oklch(var(--glow)/calc(0.8*var(--glow-k)))] [&::-webkit-slider-thumb]:[background:var(--zen-thumb)] [&::-moz-range-thumb]:size-5 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-white [&::-moz-range-thumb]:shadow-[0_0_0_1px_oklch(0_0_0/0.3),0_0_16px_oklch(var(--glow)/calc(0.8*var(--glow-k)))] [&::-moz-range-thumb]:[background:var(--zen-thumb)] focus-visible:[&::-webkit-slider-thumb]:ring-ring/40 focus-visible:[&::-webkit-slider-thumb]:ring-4 focus-visible:[&::-moz-range-thumb]:ring-ring/40 focus-visible:[&::-moz-range-thumb]:ring-4";
34
40
  //#endregion
35
- export { a as THUMB, i as default };
41
+ export { s as THUMB, o as default };
@@ -1,4 +1,7 @@
1
1
  import { ComponentProps } from 'react';
2
+ export { SortableHandle, type SortableHandleProps, SortableItem, type SortableItemProps } from './shared';
3
+ export { default as SortableTree, type SortableTreeProps } from './tree';
4
+ export { flattenTree, type SortableNode, type SortableRow } from './tree-model';
2
5
  /**
3
6
  * A list put in order by dragging, e.g. budget categories: drag an item by its
4
7
  * SortableHandle and the others make way (a phone taps lightly at each new
@@ -6,28 +9,15 @@ import { ComponentProps } from 'react';
6
9
  * From the keyboard, Space or Enter on a handle picks the item up, the arrow
7
10
  * keys move it, Space or Enter drops it and Escape puts it back; each step is
8
11
  * announced. `value` is the ids in order; render a SortableItem for each.
12
+ * With `asChild` (and `asChild` on the items), your own elements instead: a
13
+ * TableBody of TableRows, say, one per group, each sorted on its own.
9
14
  */
10
- export declare function SortableList({ value, onChange, className, children, ...rest }: SortableListProps): import('react').JSX.Element;
11
- /** One item in a SortableList; give it the `id` it has in the list's value. */
12
- export declare function SortableItem({ id, className, ...rest }: SortableItemProps): import('react').JSX.Element;
13
- /**
14
- * What an item is dragged by: a grip button. `label` names the item ("Rent");
15
- * the button reads "Reorder Rent". It takes no scroll gestures, so dragging it
16
- * never scrolls the page.
17
- */
18
- export declare function SortableHandle({ id, label, className, children, ...rest }: SortableHandleProps): import('react').JSX.Element;
19
- export interface SortableListProps extends Omit<ComponentProps<'ul'>, 'onChange'> {
15
+ export declare function SortableList({ value, onValueChange, asChild, className, children, ref, ...rest }: SortableListProps): import('react').JSX.Element;
16
+ export interface SortableListProps extends ComponentProps<'ul'> {
20
17
  /** The items' ids, in order. */
21
18
  value: readonly string[];
22
- onChange: (value: string[]) => void;
23
- }
24
- export interface SortableItemProps extends ComponentProps<'li'> {
25
- id: string;
26
- }
27
- export interface SortableHandleProps extends Omit<ComponentProps<'button'>, 'id'> {
28
- /** The item's id, as in the list's value. */
29
- id: string;
30
- /** The item's name, e.g. "Rent". */
31
- label: string;
19
+ onValueChange: (value: string[]) => void;
20
+ /** Put the list's props on your own element (the single child, e.g. a TableBody) instead of a ul. */
21
+ asChild?: boolean;
32
22
  }
33
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/sortable/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,cAAc,EASjB,MAAM,OAAO,CAAC;AA2Bf;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,+BAuJhG;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,+BAczE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,mBAAmB,+BAwB9F;AAUD,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC7E,gCAAgC;IAChC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,IAAI,CAAC;IAC3D,EAAE,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAC7E,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/sortable/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAA6E,MAAM,OAAO,CAAC;AAIlH,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC1G,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAUhF;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,+BAkInH;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,IAAI,CAAC;IAC3D,gCAAgC;IAChC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACzC,qGAAqG;IACrG,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}