@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,88 +1,91 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { useModal as t } from "../dialog/index.js";
4
- import { useEffect as n, useId as r, useMemo as i, useRef as a, useState as o } from "react";
5
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
3
+ import { useMergedRefs as t } from "../utils/refs.js";
4
+ import { useMessages as n } from "../locale-provider/index.js";
5
+ import { useModal as r } from "../dialog/index.js";
6
+ import { useEffect as i, useId as a, useMemo as o, useRef as s, useState as c } from "react";
7
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
8
  //#region packages/command-palette/index.tsx
7
- function l({ open: l, onOpenChange: d, items: f, placeholder: p = "Search…", empty: m = "No results", label: h = "Commands", className: g }) {
8
- let _ = a(null), v = a(null), y = a(null), b = r(), [x, S] = o(""), [C, w] = o(0);
9
- t(_, l, v);
10
- let [T, E] = o(l);
11
- l !== T && (E(l), l && (S(""), w(0)));
12
- let D = i(() => u(f, x), [f, x]), O = i(() => {
9
+ function d({ open: d, onOpenChange: p, items: m, placeholder: h, empty: g, label: _, className: v, ref: y, ...b }) {
10
+ let x = n(), S = h ?? x.search, C = g ?? x.noResults, w = _ ?? x.commands, T = s(null), E = t(T, y), D = s(null), O = s(null), k = a(), [A, j] = c(""), [M, N] = c(0);
11
+ r(T, d, D);
12
+ let [P, F] = c(d);
13
+ d !== P && (F(d), d && (j(""), N(0)));
14
+ let I = o(() => f(m, A), [m, A]), L = o(() => {
13
15
  let e = /* @__PURE__ */ new Map();
14
- return D.forEach((t, n) => {
16
+ return I.forEach((t, n) => {
15
17
  let r = t.group ?? "";
16
18
  e.set(r, [...e.get(r) ?? [], {
17
19
  item: t,
18
20
  index: n
19
21
  }]);
20
22
  }), e;
21
- }, [D]), k = Math.min(C, D.length - 1);
22
- n(() => {
23
- y.current?.querySelector(`[data-index="${k}"]`)?.scrollIntoView({ block: "nearest" });
24
- }, [k]);
25
- let A = (e) => {
26
- e && (d(!1), e.onSelect());
23
+ }, [I]), R = Math.min(M, I.length - 1);
24
+ i(() => {
25
+ O.current?.querySelector(`[data-index="${R}"]`)?.scrollIntoView({ block: "nearest" });
26
+ }, [R]);
27
+ let z = (e) => {
28
+ e && (p(!1), e.onSelect());
29
+ }, B = (e) => {
30
+ let t = I.length - 1, n = e.key === "ArrowDown" ? (R + 1) % (t + 1) : e.key === "ArrowUp" ? (R - 1 + t + 1) % (t + 1) : e.key === "Home" && e.ctrlKey ? 0 : e.key === "End" && e.ctrlKey ? t : null;
31
+ n !== null && I.length ? (e.preventDefault(), N(n)) : e.key === "Enter" && (e.preventDefault(), z(I[R]));
27
32
  };
28
- return /* @__PURE__ */ c("dialog", {
29
- ref: _,
30
- "aria-label": h,
31
- className: e("zen__dialog zen__command-palette glass glass-blur glow-edge text-card-foreground bg-card/90! overflow-hidden p-0", "mx-auto mt-[12dvh] mb-auto w-[36rem] max-w-[calc(100vw-2rem)] rounded-xl", "backdrop:bg-[color:var(--backdrop-scrim,oklch(0_0_0/0.5))] backdrop:backdrop-blur-sm pointer-coarse:backdrop:backdrop-blur-none", g),
33
+ return /* @__PURE__ */ u("dialog", {
34
+ ...b,
35
+ ref: E,
36
+ "aria-label": w,
37
+ className: e("zen__dialog zen__command-palette glass glass-blur glow-edge text-card-foreground bg-card/90! overflow-hidden p-0", "mx-auto mt-[12dvh] mb-auto w-[36rem] max-w-[calc(100vw-2rem)] rounded-xl", "backdrop:bg-[color:var(--backdrop-scrim,oklch(0_0_0/0.5))] backdrop:backdrop-blur-sm pointer-coarse:backdrop:backdrop-blur-none", v),
32
38
  onCancel: (e) => {
33
- e.preventDefault(), d(!1);
39
+ e.preventDefault(), p(!1);
34
40
  },
35
- onClick: (e) => e.target === e.currentTarget && d(!1),
36
- children: [/* @__PURE__ */ s("input", {
37
- ref: v,
41
+ onClick: (e) => e.target === e.currentTarget && p(!1),
42
+ children: [/* @__PURE__ */ l("input", {
43
+ ref: D,
38
44
  role: "combobox",
39
45
  "aria-expanded": !0,
40
- "aria-controls": `${b}-list`,
41
- "aria-activedescendant": D.length ? `${b}-${k}` : void 0,
46
+ "aria-controls": `${k}-list`,
47
+ "aria-activedescendant": I.length ? `${k}-${R}` : void 0,
42
48
  "aria-autocomplete": "list",
43
- "aria-label": h,
44
- placeholder: p,
45
- value: x,
49
+ "aria-label": w,
50
+ placeholder: S,
51
+ value: A,
46
52
  onChange: (e) => {
47
- S(e.target.value), w(0);
48
- },
49
- onKeyDown: (e) => {
50
- let t = D.length - 1, n = e.key === "ArrowDown" ? (k + 1) % (t + 1) : e.key === "ArrowUp" ? (k - 1 + t + 1) % (t + 1) : e.key === "Home" && e.ctrlKey ? 0 : e.key === "End" && e.ctrlKey ? t : null;
51
- n !== null && D.length ? (e.preventDefault(), w(n)) : e.key === "Enter" && (e.preventDefault(), A(D[k]));
53
+ j(e.target.value), N(0);
52
54
  },
55
+ onKeyDown: B,
53
56
  className: "border-tint/[0.07] h-14 w-full border-b bg-transparent px-5 text-base outline-hidden placeholder:text-[color:oklch(var(--muted-foreground)/var(--zen-placeholder))]"
54
- }), /* @__PURE__ */ c("div", {
55
- ref: y,
56
- id: `${b}-list`,
57
+ }), /* @__PURE__ */ u("div", {
58
+ ref: O,
59
+ id: `${k}-list`,
57
60
  role: "listbox",
58
- "aria-label": h,
61
+ "aria-label": w,
59
62
  className: "max-h-[min(24rem,60dvh)] overflow-y-auto p-2",
60
- children: [!D.length && /* @__PURE__ */ s("p", {
63
+ children: [!I.length && /* @__PURE__ */ l("p", {
61
64
  className: "text-muted-foreground my-0! px-3 py-8 text-center text-sm",
62
- children: m
63
- }), [...O].map(([e, t]) => /* @__PURE__ */ c("div", {
65
+ children: C
66
+ }), [...L].map(([e, t]) => /* @__PURE__ */ u("div", {
64
67
  role: "group",
65
68
  "aria-label": e || void 0,
66
69
  className: "not-first:mt-2",
67
- children: [e && /* @__PURE__ */ s("div", {
70
+ children: [e && /* @__PURE__ */ l("div", {
68
71
  "aria-hidden": !0,
69
72
  className: "text-muted-foreground text-2xs px-3 pt-2 pb-1 tracking-widest uppercase",
70
73
  children: e
71
- }), t.map(({ item: e, index: t }) => /* @__PURE__ */ c("div", {
72
- id: `${b}-${t}`,
74
+ }), t.map(({ item: e, index: t }) => /* @__PURE__ */ u("div", {
75
+ id: `${k}-${t}`,
73
76
  "data-index": t,
74
77
  role: "option",
75
- "aria-selected": t === k,
76
- onPointerMove: () => t !== k && w(t),
77
- onClick: () => A(e),
78
+ "aria-selected": t === R,
79
+ onPointerMove: () => t !== R && N(t),
80
+ onClick: () => z(e),
78
81
  className: "text-muted-foreground aria-selected:bg-primary/15 aria-selected:text-foreground flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2.5 text-sm aria-selected:shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.25)] [&_svg]:size-4 [&_svg]:shrink-0",
79
82
  children: [
80
83
  e.icon,
81
- /* @__PURE__ */ s("span", {
84
+ /* @__PURE__ */ l("span", {
82
85
  className: "min-w-0 flex-1 truncate",
83
86
  children: e.label
84
87
  }),
85
- e.hint && /* @__PURE__ */ s("span", {
88
+ e.hint && /* @__PURE__ */ l("span", {
86
89
  className: "text-muted-foreground text-xs",
87
90
  children: e.hint
88
91
  })
@@ -92,7 +95,7 @@ function l({ open: l, onOpenChange: d, items: f, placeholder: p = "Search…", e
92
95
  })]
93
96
  });
94
97
  }
95
- function u(e, t) {
98
+ function f(e, t) {
96
99
  let n = t.toLowerCase().split(/\s+/).filter(Boolean);
97
100
  if (!n.length) return e;
98
101
  let r = t.trim().toLowerCase(), i = e.filter((e) => {
@@ -105,16 +108,16 @@ function u(e, t) {
105
108
  }), a = (e) => +!e.label.toLowerCase().startsWith(r);
106
109
  return i.sort((e, t) => a(e) - a(t));
107
110
  }
108
- function d(e, t = "k") {
109
- let r = a(e);
110
- n(() => {
111
- r.current = e;
112
- }), n(() => {
111
+ function p(e, t = "k") {
112
+ let n = s(e);
113
+ i(() => {
114
+ n.current = e;
115
+ }), i(() => {
113
116
  let e = (e) => {
114
- e.key.toLowerCase() !== t || !(e.metaKey || e.ctrlKey) || e.altKey || e.shiftKey || (e.preventDefault(), r.current());
117
+ e.key.toLowerCase() !== t || !(e.metaKey || e.ctrlKey) || e.altKey || e.shiftKey || (e.preventDefault(), n.current());
115
118
  };
116
119
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
117
120
  }, [t]);
118
121
  }
119
122
  //#endregion
120
- export { l as default, u as search, d as useCommandPaletteShortcut };
123
+ export { d as default, f as search, p as useCommandPaletteShortcut };
@@ -1,14 +1,13 @@
1
- import { ReactNode } from 'react';
1
+ import { DialogProps } from '../dialog';
2
2
  /** Confirmation for destructive or irreversible actions. Cancel has focus, so Enter is the safe choice. */
3
- export default function ConfirmDialog({ open, onOpenChange, title, description, confirmLabel, cancelLabel, destructive, onConfirm, }: ConfirmDialogProps): import('react').JSX.Element;
4
- export interface ConfirmDialogProps {
5
- open: boolean;
3
+ export default function ConfirmDialog({ open, onOpenChange, title, description, confirmLabel, cancelLabel: cancelLabelProp, tone, onConfirm, className, ...rest }: ConfirmDialogProps): import('react').JSX.Element;
4
+ /** Other props (data-*, an id) go on the <dialog>. */
5
+ export interface ConfirmDialogProps extends Omit<DialogProps, 'children' | 'role' | 'onOpenChange'> {
6
6
  onOpenChange: (open: boolean) => void;
7
- title: ReactNode;
8
- description?: ReactNode;
9
7
  confirmLabel: string;
10
8
  cancelLabel?: string;
11
- destructive?: boolean;
9
+ /** `negative` for a destructive action: the confirm button is red. */
10
+ tone?: 'default' | 'negative';
12
11
  onConfirm: () => void;
13
12
  }
14
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/confirm-dialog/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,2GAA2G;AAC3G,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAClC,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,YAAY,EACZ,WAAsB,EACtB,WAAmB,EACnB,SAAS,GACZ,EAAE,kBAAkB,+BAoBpB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;CACzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/confirm-dialog/index.tsx"],"names":[],"mappings":"AAEA,OAAe,EAA6B,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAElF,2GAA2G;AAC3G,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAClC,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,YAAY,EACZ,WAAW,EAAE,eAAe,EAC5B,IAAgB,EAChB,SAAS,EACT,SAAS,EACT,GAAG,IAAI,EACV,EAAE,kBAAkB,+BAuBpB;AAED,sDAAsD;AACtD,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,MAAM,GAAG,cAAc,CAAC;IAC/F,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAC;CACzB"}
@@ -1,25 +1,29 @@
1
1
  "use client";
2
- import e, { DialogClose as t, DialogFooter as n } from "../dialog/index.js";
3
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { useMessages as t } from "../locale-provider/index.js";
4
+ import n, { DialogClose as r, DialogFooter as i } from "../dialog/index.js";
5
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
4
6
  //#region packages/confirm-dialog/index.tsx
5
- function a({ open: a, onOpenChange: o, title: s, description: c, confirmLabel: l, cancelLabel: u = "Cancel", destructive: d = !1, onConfirm: f }) {
6
- return /* @__PURE__ */ r(e, {
7
+ function s({ open: s, onOpenChange: c, title: l, description: u, confirmLabel: d, cancelLabel: f, tone: p = "default", onConfirm: m, className: h, ...g }) {
8
+ let _ = t(), v = f ?? _.cancel;
9
+ return /* @__PURE__ */ a(n, {
10
+ ...g,
7
11
  role: "alertdialog",
8
- open: a,
9
- onOpenChange: o,
10
- title: s,
11
- description: c,
12
- className: "w-[26rem]",
13
- children: /* @__PURE__ */ i(n, { children: [/* @__PURE__ */ r(t, {
12
+ open: s,
13
+ onOpenChange: c,
14
+ title: l,
15
+ description: u,
16
+ className: e("w-[26rem]", h),
17
+ children: /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ a(r, {
14
18
  variant: "outline",
15
19
  autoFocus: !0,
16
- children: u
17
- }), /* @__PURE__ */ r(t, {
18
- variant: d ? "destructive" : "default",
19
- onClick: f,
20
- children: l
20
+ children: v
21
+ }), /* @__PURE__ */ a(r, {
22
+ tone: p,
23
+ onClick: m,
24
+ children: d
21
25
  })] })
22
26
  });
23
27
  }
24
28
  //#endregion
25
- export { a as default };
29
+ export { s as default };
@@ -1,12 +1,13 @@
1
1
  import { DateRange, DateString } from '../utils/date';
2
+ import { FieldSize } from '../utils/styles';
2
3
  import { ComponentProps } from 'react';
3
4
  /**
4
5
  * Date field: shows the date ("Sep 30, 2026" for the locale) and opens a
5
6
  * Calendar to pick one, focused on the chosen date so the keyboard works at
6
- * once. Dates are "YYYY-MM-DD" strings. With `onClear`, the popup also offers
7
- * `clearLabel` to empty it.
7
+ * once. Dates are "YYYY-MM-DD" strings. When `clearable`, the popup also offers
8
+ * `clearLabel` to empty it. With `name`, it's submitted with a form.
8
9
  */
9
- export default function DatePicker({ value, onChange, locale, min, max, isDisabled, weekStartsOn, placeholder, onClear, clearLabel, ...rest }: DatePickerProps): import('react').JSX.Element;
10
+ export default function DatePicker({ value: valueProp, defaultValue, onValueChange, locale: localeProp, min, max, isDisabled, weekStartsOn, placeholder: placeholderProp, clearable, clearLabel: clearLabelProp, ...rest }: DatePickerProps): import('react').JSX.Element;
10
11
  /**
11
12
  * Date range field: pick a start and then an end in a Calendar (the days
12
13
  * between are previewed while pointing); it closes once the range is complete.
@@ -14,10 +15,10 @@ export default function DatePicker({ value, onChange, locale, min, max, isDisabl
14
15
  * common ranges ("Last 30 days") sit beside the calendar, one tap each (see
15
16
  * commonRanges).
16
17
  */
17
- export declare function DateRangePicker({ value, onChange, locale, min, max, isDisabled, weekStartsOn, months, placeholder, onClear, clearLabel, presets, ...rest }: DateRangePickerProps): import('react').JSX.Element;
18
+ export declare function DateRangePicker({ value: valueProp, defaultValue, onValueChange, locale: localeProp, min, max, isDisabled, weekStartsOn, months, placeholder: placeholderProp, clearable, clearLabel: clearLabelProp, presets, ...rest }: DateRangePickerProps): import('react').JSX.Element;
18
19
  interface PickerProps extends Omit<ComponentProps<'button'>, 'value' | 'onChange' | 'defaultValue'> {
19
- /** Decides the date format, month and weekday names, and the first day of the week, e.g. "en-IN". */
20
- locale: string;
20
+ /** Decides the date format, month and weekday names, and the first day of the week, e.g. "en-IN". Defaults to the LocaleProvider's. */
21
+ locale?: string;
21
22
  /** Earliest date that can be picked ("YYYY-MM-DD"). */
22
23
  min?: DateString;
23
24
  /** Latest date that can be picked. */
@@ -28,21 +29,29 @@ interface PickerProps extends Omit<ComponentProps<'button'>, 'value' | 'onChange
28
29
  weekStartsOn?: number;
29
30
  /** Classes for the trigger (e.g. a width, instead of the default full width). */
30
31
  className?: string;
32
+ /** Height, matching Button's: sm (32px), default (40px) or lg (44px). */
33
+ size?: FieldSize;
31
34
  placeholder?: string;
32
- /** Offers a clear option in the popup (shown when a value is set). */
33
- onClear?: () => void;
35
+ /** Offers a clear option in the popup (shown when a value is set); clearing reports null. */
36
+ clearable?: boolean;
34
37
  clearLabel?: string;
38
+ /** Form field name: the value is submitted with the form ("YYYY-MM-DD", a range as "start/end"). */
39
+ name?: string;
35
40
  }
36
41
  /** Also takes the trigger button's props (aria-*, data-*, onBlur…), so Field can wire it up. */
37
42
  export interface DatePickerProps extends PickerProps {
38
- /** "YYYY-MM-DD", or null for none. */
39
- value: DateString | null;
40
- onChange: (date: DateString) => void;
43
+ /** "YYYY-MM-DD", or null for none, when you keep it. */
44
+ value?: DateString | null;
45
+ /** The first date, when the picker keeps its own. */
46
+ defaultValue?: DateString | null;
47
+ onValueChange?: (date: DateString | null) => void;
41
48
  }
42
49
  export interface DateRangePickerProps extends PickerProps {
43
- /** The range; `end` is null while only the start is picked. */
44
- value: DateRange | null;
45
- onChange: (range: DateRange) => void;
50
+ /** The range when you keep it; `end` is null while only the start is picked. */
51
+ value?: DateRange | null;
52
+ /** The first range, when the picker keeps its own. */
53
+ defaultValue?: DateRange | null;
54
+ onValueChange?: (range: DateRange | null) => void;
46
55
  /** Months shown side by side (2 suits wide screens). */
47
56
  months?: number;
48
57
  /** Ranges picked in one tap, beside the calendar. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/date-picker/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAA+B,MAAM,iBAAiB,CAAC;AAG/F,OAAO,EAAE,cAAc,EAAa,MAAM,OAAO,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,GAAG,EACH,GAAG,EACH,UAAU,EACV,YAAY,EACZ,WAA2B,EAC3B,OAAO,EACP,UAAoB,EACpB,GAAG,IAAI,EACV,EAAE,eAAe,+BAsBjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,GAAG,EACH,GAAG,EACH,UAAU,EACV,YAAY,EACZ,MAAU,EACV,WAA0B,EAC1B,OAAO,EACP,UAAoB,EACpB,OAAO,EACP,GAAG,IAAI,EACV,EAAE,oBAAoB,+BA2DtB;AAmED,UAAU,WAAY,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC/F,qGAAqG;IACrG,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,sCAAsC;IACtC,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAC3C,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,gGAAgG;AAChG,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAChD,sCAAsC;IACtC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACrD,+DAA+D;IAC/D,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;CACpB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/date-picker/index.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAA+B,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAAc,KAAK,SAAS,EAA6C,MAAM,mBAAmB,CAAC;AAG1G,OAAO,EAAE,cAAc,EAAa,MAAM,OAAO,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,KAAK,EAAE,SAAS,EAChB,YAAmB,EACnB,aAAa,EACb,MAAM,EAAE,UAAU,EAClB,GAAG,EACH,GAAG,EACH,UAAU,EACV,YAAY,EACZ,WAAW,EAAE,eAAe,EAC5B,SAAiB,EACjB,UAAU,EAAE,cAAc,EAC1B,GAAG,IAAI,EACV,EAAE,eAAe,+BA6BjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAC5B,KAAK,EAAE,SAAS,EAChB,YAAmB,EACnB,aAAa,EACb,MAAM,EAAE,UAAU,EAClB,GAAG,EACH,GAAG,EACH,UAAU,EACV,YAAY,EACZ,MAAU,EACV,WAAW,EAAE,eAAe,EAC5B,SAAiB,EACjB,UAAU,EAAE,cAAc,EAC1B,OAAO,EACP,GAAG,IAAI,EACV,EAAE,oBAAoB,+BAkEtB;AAkFD,UAAU,WAAY,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC/F,uIAAuI;IACvI,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,sCAAsC;IACtC,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAC3C,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oGAAoG;IACpG,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,gGAAgG;AAChG,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAChD,wDAAwD;IACxD,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,qDAAqD;IACrD,YAAY,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACrD,gFAAgF;IAChF,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,sDAAsD;IACtD,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;CACpB"}
@@ -1,120 +1,136 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { useAnchoredPopup as t } from "../utils/useAnchoredPopup.js";
4
- import { POPUP as n, TRIGGER as r } from "../utils/styles.js";
5
- import { useFieldProps as i } from "../field/index.js";
6
- import { formatDate as a, formatDateRange as o } from "../utils/date.js";
7
- import s from "../calendar/index.js";
8
- import c from "../icons/micro/calendar.js";
9
- import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
3
+ import { useControllable as t } from "../utils/useControllable.js";
4
+ import { useAnchoredPopup as n } from "../utils/useAnchoredPopup.js";
5
+ import { useLocale as r, useMessages as i } from "../locale-provider/index.js";
6
+ import { useFieldProps as a } from "../field/index.js";
7
+ import { FIELD_SIZE as o, POPUP as s, TRIGGER as c } from "../utils/styles.js";
8
+ import { FormValue as l } from "../utils/form-value.js";
9
+ import { formatDate as u, formatDateRange as d } from "../utils/date.js";
10
+ import f from "../calendar/index.js";
11
+ import p from "../icons/micro/calendar.js";
12
+ import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
10
13
  //#region packages/date-picker/index.tsx
11
- function f({ value: e, onChange: t, locale: n, min: r, max: i, isDisabled: o, weekStartsOn: c, placeholder: l = "Pick a date", onClear: d, clearLabel: f = "Clear", ...p }) {
12
- return /* @__PURE__ */ u(m, {
13
- ...p,
14
- shown: e ? a(e, n) : null,
15
- placeholder: l,
16
- label: "Choose date",
17
- onClear: e ? d : void 0,
18
- clearLabel: f,
19
- calendar: (a) => /* @__PURE__ */ u(s, {
14
+ function _({ value: e, defaultValue: n = null, onValueChange: a, locale: o, min: s, max: c, isDisabled: l, weekStartsOn: d, placeholder: p, clearable: m = !1, clearLabel: g, ..._ }) {
15
+ let v = i(), b = p ?? v.pickDate, x = g ?? v.clear, S = r(o), [C, w, T] = t(e, n, a);
16
+ return /* @__PURE__ */ h(y, {
17
+ ..._,
18
+ shown: C ? u(C, S) : null,
19
+ formValue: C ?? "",
20
+ onReset: T,
21
+ placeholder: b,
22
+ label: v.chooseDate,
23
+ onClear: m && C ? () => w(null) : void 0,
24
+ clearLabel: x,
25
+ calendar: (e) => /* @__PURE__ */ h(f, {
20
26
  autoFocus: !0,
21
- value: e,
22
- onChange: (e) => {
23
- t(e), a();
27
+ value: C,
28
+ onValueChange: (t) => {
29
+ w(t), e();
24
30
  },
25
- locale: n,
26
- min: r,
27
- max: i,
28
- isDisabled: o,
29
- weekStartsOn: c
31
+ locale: S,
32
+ min: s,
33
+ max: c,
34
+ isDisabled: l,
35
+ weekStartsOn: d
30
36
  })
31
37
  });
32
38
  }
33
- function p({ value: e, onChange: t, locale: n, min: r, max: i, isDisabled: c, weekStartsOn: l, months: f = 1, placeholder: p = "Pick dates", onClear: h, clearLabel: g = "Clear", presets: _, ...v }) {
34
- let y = e ? e.end ? o(e.start, e.end, n) : `${a(e.start, n)} – …` : null;
35
- return /* @__PURE__ */ u(m, {
36
- ...v,
37
- shown: y,
38
- placeholder: p,
39
- label: "Choose dates",
40
- onClear: e ? h : void 0,
41
- clearLabel: g,
42
- calendar: (a) => {
43
- let o = /* @__PURE__ */ u(s, {
39
+ function v({ value: e, defaultValue: n = null, onValueChange: a, locale: o, min: s, max: c, isDisabled: l, weekStartsOn: p, months: m = 1, placeholder: _, clearable: v = !1, clearLabel: b, presets: x, ...S }) {
40
+ let C = i(), w = _ ?? C.pickDates, T = b ?? C.clear, E = r(o), [D, O, k] = t(e, n, a), A = D ? D.end ? d(D.start, D.end, E) : `${u(D.start, E)} – …` : null;
41
+ return /* @__PURE__ */ h(y, {
42
+ ...S,
43
+ shown: A,
44
+ formValue: D ? `${D.start}/${D.end ?? ""}` : "",
45
+ onReset: k,
46
+ placeholder: w,
47
+ label: C.chooseDates,
48
+ onClear: v && D ? () => O(null) : void 0,
49
+ clearLabel: T,
50
+ calendar: (e) => {
51
+ let t = /* @__PURE__ */ h(f, {
44
52
  autoFocus: !0,
45
53
  mode: "range",
46
- value: e,
47
- onChange: (e) => {
48
- t(e), e.end && a();
54
+ value: D,
55
+ onValueChange: (t) => {
56
+ O(t), t.end && e();
49
57
  },
50
- locale: n,
51
- min: r,
52
- max: i,
53
- isDisabled: c,
54
- weekStartsOn: l,
55
- months: f
58
+ locale: E,
59
+ min: s,
60
+ max: c,
61
+ isDisabled: l,
62
+ weekStartsOn: p,
63
+ months: m
56
64
  });
57
- return _?.length ? /* @__PURE__ */ d("div", {
65
+ return x?.length ? /* @__PURE__ */ g("div", {
58
66
  className: "flex flex-col gap-3 sm:flex-row",
59
- children: [/* @__PURE__ */ u("div", {
67
+ children: [/* @__PURE__ */ h("div", {
60
68
  role: "group",
61
- "aria-label": "Presets",
69
+ "aria-label": C.presets,
62
70
  className: "border-tint/[0.06] flex flex-wrap gap-1 sm:flex-col sm:flex-nowrap sm:border-e sm:pe-3",
63
- children: _.map((n) => {
64
- let r = e?.start === n.range.start && e?.end === n.range.end;
65
- return /* @__PURE__ */ u("button", {
71
+ children: x.map((t) => {
72
+ let n = D?.start === t.range.start && D?.end === t.range.end;
73
+ return /* @__PURE__ */ h("button", {
66
74
  type: "button",
67
- "aria-pressed": r,
75
+ "aria-pressed": n,
68
76
  onClick: () => {
69
- t(n.range), a();
77
+ O(t.range), e();
70
78
  },
71
- className: "text-muted-foreground hover:bg-tint/[0.06] hover:text-foreground aria-pressed:bg-primary/12 aria-pressed:text-foreground focus-visible:ring-ring/40 cursor-pointer rounded-lg px-2.5 py-1.5 text-start text-sm whitespace-nowrap outline-hidden focus-visible:ring-2",
72
- children: n.label
73
- }, n.label);
79
+ className: "text-muted-foreground hover:bg-tint/[0.06] hover:text-foreground aria-pressed:bg-primary/12 aria-pressed:text-foreground focus-ring cursor-pointer rounded-lg px-2.5 py-1.5 text-start text-sm whitespace-nowrap outline-hidden",
80
+ children: t.label
81
+ }, t.label);
74
82
  })
75
- }), o]
76
- }) : o;
83
+ }), t]
84
+ }) : t;
77
85
  }
78
86
  });
79
87
  }
80
- function m({ shown: a, placeholder: o, label: s, calendar: c, onClear: f, clearLabel: p, id: m, className: g, disabled: _ = !1, style: v, ...y }) {
81
- let b = t(), x = i({
82
- ...y,
83
- id: m
84
- }), S = () => b.setOpen(!1);
85
- return /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ d("button", {
86
- type: "button",
87
- ...y,
88
- ...x,
89
- id: m,
90
- disabled: _,
91
- ...b.triggerProps,
92
- style: {
93
- ...b.triggerProps.style,
94
- ...v
95
- },
96
- className: e("zen__date-picker group", r, "w-full", b.open && "border-glow/60 [--glow-border-color:transparent] shadow-glow-focus", g),
97
- children: [/* @__PURE__ */ u("span", {
98
- className: e("truncate", !a && "text-[color:oklch(var(--muted-foreground)/var(--zen-placeholder))]"),
99
- children: a ?? o
100
- }), /* @__PURE__ */ u(h, {})]
101
- }), /* @__PURE__ */ d("div", {
102
- ...b.popupProps,
103
- role: "dialog",
104
- "aria-label": s,
105
- className: e("zen__popover", n, "p-3"),
106
- children: [b.open && c(S), f && /* @__PURE__ */ u("button", {
88
+ function y({ shown: t, placeholder: r, label: i, calendar: u, onClear: d, clearLabel: f, name: p, formValue: _, onReset: v, size: y = "default", id: x, className: S, disabled: C = !1, style: w, ...T }) {
89
+ let E = n(), D = a({
90
+ ...T,
91
+ id: x
92
+ }), O = () => E.setOpen(!1);
93
+ return /* @__PURE__ */ g(m, { children: [
94
+ /* @__PURE__ */ g("button", {
107
95
  type: "button",
108
- onClick: () => {
109
- f(), S();
96
+ ...T,
97
+ ...D,
98
+ id: x,
99
+ disabled: C,
100
+ ...E.triggerProps,
101
+ style: {
102
+ ...E.triggerProps.style,
103
+ ...w
110
104
  },
111
- className: "border-tint/[0.06] text-muted-foreground hover:text-foreground focus-visible:ring-ring/40 mt-2 w-full cursor-pointer rounded-lg border-t px-2 pt-2.5 pb-1.5 text-sm outline-hidden focus-visible:ring-2",
112
- children: p
113
- })]
114
- })] });
105
+ className: e("zen__date-picker group", c, o[y], "w-full", E.open && "border-glow/60 [--glow-border-color:transparent] shadow-glow-focus", S),
106
+ children: [/* @__PURE__ */ h("span", {
107
+ className: e("truncate", !t && "text-[color:oklch(var(--muted-foreground)/var(--zen-placeholder))]"),
108
+ children: t ?? r
109
+ }), /* @__PURE__ */ h(b, {})]
110
+ }),
111
+ /* @__PURE__ */ h(l, {
112
+ name: p,
113
+ value: _,
114
+ onReset: v
115
+ }),
116
+ /* @__PURE__ */ g("div", {
117
+ ...E.popupProps,
118
+ role: "dialog",
119
+ "aria-label": i,
120
+ className: e("zen__popover", s, "p-3"),
121
+ children: [E.open && u(O), d && /* @__PURE__ */ h("button", {
122
+ type: "button",
123
+ onClick: () => {
124
+ d(), O();
125
+ },
126
+ className: "border-tint/[0.06] text-muted-foreground hover:text-foreground focus-ring mt-2 w-full cursor-pointer rounded-lg border-t px-2 pt-2.5 pb-1.5 text-sm outline-hidden",
127
+ children: f
128
+ })]
129
+ })
130
+ ] });
115
131
  }
116
- function h() {
117
- return /* @__PURE__ */ u(c, { className: "text-muted-foreground group-data-popup-open:text-foreground size-4 shrink-0 transition-colors" });
132
+ function b() {
133
+ return /* @__PURE__ */ h(p, { className: "text-muted-foreground group-data-popup-open:text-foreground size-4 shrink-0 transition-colors" });
118
134
  }
119
135
  //#endregion
120
- export { p as DateRangePicker, f as default };
136
+ export { v as DateRangePicker, _ as default };
@@ -7,7 +7,7 @@ import { ComponentProps, ReactNode, RefObject } from 'react';
7
7
  * it's a sheet that slides in from that edge: a bottom sheet on phones, a side
8
8
  * panel for filters or details. On touch, a sheet swipes back to its edge to close.
9
9
  */
10
- export default function Dialog({ open, onOpenChange, title, description, children, dismissible, initialFocus, size, side, className, role, closeLabel, }: DialogProps): import('react').JSX.Element;
10
+ export default function Dialog({ open, onOpenChange, title, description, children, dismissible, initialFocus, size, side, className, role, closeLabel: closeLabelProp, ref: refProp, ...rest }: DialogProps): import('react').JSX.Element;
11
11
  /**
12
12
  * Opens and closes a <dialog> as a modal with `open`: focus moves in (to
13
13
  * `initialFocus` if given) and back after, the page behind is inert and
@@ -23,7 +23,8 @@ export declare function DialogFooter({ className, ...rest }: ComponentProps<'div
23
23
  * preventDefault). Takes every Button prop: variant, size, asChild…
24
24
  */
25
25
  export declare function DialogClose({ onClick, ...rest }: ButtonProps): import('react').JSX.Element;
26
- export interface DialogProps {
26
+ /** Other props (data-*, an id) go on the <dialog>. */
27
+ export interface DialogProps extends Omit<ComponentProps<'dialog'>, 'open' | 'title'> {
27
28
  open: boolean;
28
29
  onOpenChange?: (open: boolean) => void;
29
30
  title: ReactNode;
@@ -36,8 +37,6 @@ export interface DialogProps {
36
37
  size?: 'md' | 'lg';
37
38
  /** Slide in from this edge as a sheet, instead of appearing in the middle. */
38
39
  side?: 'bottom' | 'left' | 'right';
39
- className?: string;
40
- role?: ComponentProps<'dialog'>['role'];
41
40
  /** The close button's accessible name. */
42
41
  closeLabel?: string;
43
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/dialog/index.tsx"],"names":[],"mappings":"AAEA,OAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,EACH,cAAc,EAGd,SAAS,EACT,SAAS,EAKZ,MAAM,OAAO,CAAC;AAKf;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAkB,EAClB,YAAY,EACZ,IAAW,EACX,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,UAAoB,GACvB,EAAE,WAAW,+BAuEb;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACpB,GAAG,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,EACxC,IAAI,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAC7C,IAAI,CA4BN;AAiCD,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,+BAEzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAW5D;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iFAAiF;IACjF,YAAY,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7C,sEAAsE;IACtE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/dialog/index.tsx"],"names":[],"mappings":"AAIA,OAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,EACH,cAAc,EAGd,SAAS,EACT,SAAS,EAKZ,MAAM,OAAO,CAAC;AAKf;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAkB,EAClB,YAAY,EACZ,IAAW,EACX,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,UAAU,EAAE,cAAc,EAC1B,GAAG,EAAE,OAAO,EACZ,GAAG,IAAI,EACV,EAAE,WAAW,+BA2Eb;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACpB,GAAG,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,EACxC,IAAI,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAC7C,IAAI,CA4BN;AAiCD,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,+BAEzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAW5D;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjF,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iFAAiF;IACjF,YAAY,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7C,sEAAsE;IACtE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB"}