@rinzai/zen 0.11.0 → 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 (289) hide show
  1. package/README.md +37 -7
  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 +7 -2
  9. package/dist/avatar/index.d.ts.map +1 -1
  10. package/dist/avatar/index.js +17 -11
  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.js +0 -1
  34. package/dist/canvas/index.d.ts +6 -6
  35. package/dist/canvas/index.d.ts.map +1 -1
  36. package/dist/canvas/index.js +135 -133
  37. package/dist/carousel/index.d.ts +27 -0
  38. package/dist/carousel/index.d.ts.map +1 -0
  39. package/dist/carousel/index.js +162 -0
  40. package/dist/chart/index.d.ts +5 -4
  41. package/dist/chart/index.d.ts.map +1 -1
  42. package/dist/chart/index.js +137 -135
  43. package/dist/chart/palette.js +0 -1
  44. package/dist/checkbox/index.d.ts +3 -3
  45. package/dist/checkbox/index.d.ts.map +1 -1
  46. package/dist/checkbox/index.js +33 -30
  47. package/dist/chip/index.js +1 -1
  48. package/dist/code-block/index.d.ts.map +1 -1
  49. package/dist/code-block/index.js +27 -25
  50. package/dist/code-input/index.d.ts.map +1 -1
  51. package/dist/code-input/index.js +30 -24
  52. package/dist/collapse/index.d.ts +4 -3
  53. package/dist/collapse/index.d.ts.map +1 -1
  54. package/dist/collapse/index.js +42 -39
  55. package/dist/color-picker/index.d.ts +14 -7
  56. package/dist/color-picker/index.d.ts.map +1 -1
  57. package/dist/color-picker/index.js +139 -128
  58. package/dist/combobox/index.d.ts +14 -6
  59. package/dist/combobox/index.d.ts.map +1 -1
  60. package/dist/combobox/index.js +158 -146
  61. package/dist/command-palette/index.d.ts +4 -3
  62. package/dist/command-palette/index.d.ts.map +1 -1
  63. package/dist/command-palette/index.js +60 -57
  64. package/dist/confirm-dialog/index.d.ts +6 -7
  65. package/dist/confirm-dialog/index.d.ts.map +1 -1
  66. package/dist/confirm-dialog/index.js +20 -16
  67. package/dist/date-picker/index.d.ts +23 -14
  68. package/dist/date-picker/index.d.ts.map +1 -1
  69. package/dist/date-picker/index.js +109 -93
  70. package/dist/dialog/index.d.ts +3 -4
  71. package/dist/dialog/index.d.ts.map +1 -1
  72. package/dist/dialog/index.js +58 -55
  73. package/dist/disclosure/index.d.ts +8 -0
  74. package/dist/disclosure/index.d.ts.map +1 -1
  75. package/dist/disclosure/index.js +31 -32
  76. package/dist/editable-cell/index.d.ts +4 -5
  77. package/dist/editable-cell/index.d.ts.map +1 -1
  78. package/dist/editable-cell/index.js +23 -22
  79. package/dist/field/index.d.ts +8 -8
  80. package/dist/field/index.d.ts.map +1 -1
  81. package/dist/field/index.js +20 -18
  82. package/dist/filter-bar/index.d.ts +2 -2
  83. package/dist/filter-bar/index.d.ts.map +1 -1
  84. package/dist/filter-bar/index.js +38 -36
  85. package/dist/header/index.d.ts +1 -1
  86. package/dist/header/index.d.ts.map +1 -1
  87. package/dist/header/index.js +13 -11
  88. package/dist/hover-card/index.d.ts +32 -0
  89. package/dist/hover-card/index.d.ts.map +1 -0
  90. package/dist/hover-card/index.js +84 -0
  91. package/dist/icon-picker/index.d.ts +16 -5
  92. package/dist/icon-picker/index.d.ts.map +1 -1
  93. package/dist/icon-picker/index.js +42 -47
  94. package/dist/icons/micro/plus.d.ts +3 -0
  95. package/dist/icons/micro/plus.d.ts.map +1 -0
  96. package/dist/icons/micro/plus.js +17 -0
  97. package/dist/index.d.ts +37 -24
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/input/index.d.ts +5 -1
  100. package/dist/input/index.d.ts.map +1 -1
  101. package/dist/input/index.js +9 -9
  102. package/dist/input-group/index.d.ts +4 -1
  103. package/dist/input-group/index.d.ts.map +1 -1
  104. package/dist/input-group/index.js +14 -14
  105. package/dist/keypad/index.d.ts +9 -7
  106. package/dist/keypad/index.d.ts.map +1 -1
  107. package/dist/keypad/index.js +22 -19
  108. package/dist/lib.js +112 -97
  109. package/dist/load-more/index.d.ts +4 -2
  110. package/dist/load-more/index.d.ts.map +1 -1
  111. package/dist/load-more/index.js +26 -23
  112. package/dist/locale-provider/index.d.ts +23 -0
  113. package/dist/locale-provider/index.d.ts.map +1 -0
  114. package/dist/locale-provider/index.js +35 -0
  115. package/dist/menu/index.d.ts +62 -9
  116. package/dist/menu/index.d.ts.map +1 -1
  117. package/dist/menu/index.js +371 -128
  118. package/dist/meter/index.d.ts +2 -2
  119. package/dist/meter/index.d.ts.map +1 -1
  120. package/dist/meter/index.js +4 -4
  121. package/dist/money-input/index.d.ts +20 -10
  122. package/dist/money-input/index.d.ts.map +1 -1
  123. package/dist/money-input/index.js +199 -190
  124. package/dist/month-picker/index.d.ts +17 -10
  125. package/dist/month-picker/index.d.ts.map +1 -1
  126. package/dist/month-picker/index.js +97 -86
  127. package/dist/navigation-menu/index.d.ts +42 -0
  128. package/dist/navigation-menu/index.d.ts.map +1 -0
  129. package/dist/navigation-menu/index.js +144 -0
  130. package/dist/number-field/index.d.ts +34 -0
  131. package/dist/number-field/index.d.ts.map +1 -0
  132. package/dist/number-field/index.js +119 -0
  133. package/dist/page-header/index.d.ts +4 -3
  134. package/dist/page-header/index.d.ts.map +1 -1
  135. package/dist/page-header/index.js +2 -1
  136. package/dist/pagination/index.d.ts +1 -1
  137. package/dist/pagination/index.d.ts.map +1 -1
  138. package/dist/pagination/index.js +35 -33
  139. package/dist/progress-ring/index.d.ts +4 -3
  140. package/dist/progress-ring/index.d.ts.map +1 -1
  141. package/dist/progress-ring/index.js +11 -10
  142. package/dist/radio-cards/index.d.ts +9 -5
  143. package/dist/radio-cards/index.d.ts.map +1 -1
  144. package/dist/radio-cards/index.js +26 -24
  145. package/dist/radio-group/index.d.ts +9 -8
  146. package/dist/radio-group/index.d.ts.map +1 -1
  147. package/dist/radio-group/index.js +35 -34
  148. package/dist/range-slider/index.d.ts +10 -4
  149. package/dist/range-slider/index.d.ts.map +1 -1
  150. package/dist/range-slider/index.js +43 -31
  151. package/dist/repeat-picker/index.d.ts +13 -6
  152. package/dist/repeat-picker/index.d.ts.map +1 -1
  153. package/dist/repeat-picker/index.js +73 -61
  154. package/dist/resizable/index.d.ts +29 -0
  155. package/dist/resizable/index.d.ts.map +1 -0
  156. package/dist/resizable/index.js +135 -0
  157. package/dist/segmented/index.d.ts +8 -5
  158. package/dist/segmented/index.d.ts.map +1 -1
  159. package/dist/segmented/index.js +36 -34
  160. package/dist/select/index.d.ts +9 -3
  161. package/dist/select/index.d.ts.map +1 -1
  162. package/dist/select/index.js +99 -96
  163. package/dist/separator/index.d.ts +14 -0
  164. package/dist/separator/index.d.ts.map +1 -0
  165. package/dist/separator/index.js +15 -0
  166. package/dist/side-nav/index.js +1 -1
  167. package/dist/skeleton/index.d.ts +4 -4
  168. package/dist/skeleton/index.d.ts.map +1 -1
  169. package/dist/skeleton/index.js +4 -3
  170. package/dist/slider/index.d.ts +6 -3
  171. package/dist/slider/index.d.ts.map +1 -1
  172. package/dist/slider/index.js +29 -23
  173. package/dist/sortable/index.d.ts +10 -20
  174. package/dist/sortable/index.d.ts.map +1 -1
  175. package/dist/sortable/index.js +72 -134
  176. package/dist/sortable/shared.d.ts +56 -0
  177. package/dist/sortable/shared.d.ts.map +1 -0
  178. package/dist/sortable/shared.js +104 -0
  179. package/dist/sortable/tree-model.d.ts +46 -0
  180. package/dist/sortable/tree-model.d.ts.map +1 -0
  181. package/dist/sortable/tree-model.js +87 -0
  182. package/dist/sortable/tree.d.ts +31 -0
  183. package/dist/sortable/tree.d.ts.map +1 -0
  184. package/dist/sortable/tree.js +150 -0
  185. package/dist/sparkline/index.d.ts +1 -1
  186. package/dist/sparkline/index.d.ts.map +1 -1
  187. package/dist/sparkline/index.js +26 -25
  188. package/dist/spinner/index.d.ts +4 -3
  189. package/dist/spinner/index.d.ts.map +1 -1
  190. package/dist/spinner/index.js +2 -1
  191. package/dist/status-pill/index.d.ts.map +1 -1
  192. package/dist/status-pill/index.js +1 -1
  193. package/dist/stepper/index.d.ts +1 -1
  194. package/dist/stepper/index.d.ts.map +1 -1
  195. package/dist/stepper/index.js +31 -30
  196. package/dist/tab-bar/index.js +1 -1
  197. package/dist/table/index.d.ts +5 -5
  198. package/dist/table/index.d.ts.map +1 -1
  199. package/dist/table/index.js +66 -64
  200. package/dist/table/selection.d.ts +2 -2
  201. package/dist/table/selection.d.ts.map +1 -1
  202. package/dist/table/selection.js +41 -38
  203. package/dist/table/swipe.d.ts +1 -1
  204. package/dist/table/swipe.d.ts.map +1 -1
  205. package/dist/table/swipe.js +1 -1
  206. package/dist/table-of-contents/index.d.ts +4 -2
  207. package/dist/table-of-contents/index.d.ts.map +1 -1
  208. package/dist/table-of-contents/index.js +27 -25
  209. package/dist/tabs/index.d.ts.map +1 -1
  210. package/dist/tabs/index.js +90 -88
  211. package/dist/tag-input/index.d.ts +3 -1
  212. package/dist/tag-input/index.d.ts.map +1 -1
  213. package/dist/tag-input/index.js +61 -52
  214. package/dist/theme-toggle/index.d.ts +9 -8
  215. package/dist/theme-toggle/index.d.ts.map +1 -1
  216. package/dist/theme-toggle/index.js +30 -28
  217. package/dist/theme.css +90 -12
  218. package/dist/time-field/index.d.ts +31 -0
  219. package/dist/time-field/index.d.ts.map +1 -0
  220. package/dist/time-field/index.js +175 -0
  221. package/dist/timeline/index.js +1 -1
  222. package/dist/toast/index.d.ts +1 -1
  223. package/dist/toast/index.d.ts.map +1 -1
  224. package/dist/toast/index.js +127 -125
  225. package/dist/toggle/index.d.ts +2 -2
  226. package/dist/toggle/index.d.ts.map +1 -1
  227. package/dist/toggle/index.js +8 -6
  228. package/dist/toggle-group/index.d.ts +35 -0
  229. package/dist/toggle-group/index.d.ts.map +1 -0
  230. package/dist/toggle-group/index.js +53 -0
  231. package/dist/toolbar/index.d.ts +19 -0
  232. package/dist/toolbar/index.d.ts.map +1 -0
  233. package/dist/toolbar/index.js +36 -0
  234. package/dist/tooltip/index.d.ts.map +1 -1
  235. package/dist/tooltip/index.js +40 -74
  236. package/dist/tree/index.d.ts.map +1 -1
  237. package/dist/tree/index.js +105 -102
  238. package/dist/trend/index.d.ts +2 -2
  239. package/dist/trend/index.d.ts.map +1 -1
  240. package/dist/trend/index.js +20 -19
  241. package/dist/utils/color.js +0 -1
  242. package/dist/utils/cva.js +0 -1
  243. package/dist/utils/cx.js +0 -1
  244. package/dist/utils/date.d.ts +6 -0
  245. package/dist/utils/date.d.ts.map +1 -1
  246. package/dist/utils/date.js +1 -2
  247. package/dist/utils/direction.d.ts +7 -0
  248. package/dist/utils/direction.d.ts.map +1 -0
  249. package/dist/utils/direction.js +6 -0
  250. package/dist/utils/form-value.d.ts +15 -0
  251. package/dist/utils/form-value.d.ts.map +1 -0
  252. package/dist/utils/form-value.js +29 -0
  253. package/dist/utils/fx.js +0 -1
  254. package/dist/utils/merge.js +0 -1
  255. package/dist/utils/messages.d.ts +137 -0
  256. package/dist/utils/messages.d.ts.map +1 -0
  257. package/dist/utils/messages.js +133 -0
  258. package/dist/utils/money.js +0 -1
  259. package/dist/utils/month.js +0 -1
  260. package/dist/utils/motion.js +0 -1
  261. package/dist/utils/refs.d.ts +6 -0
  262. package/dist/utils/refs.d.ts.map +1 -0
  263. package/dist/utils/refs.js +13 -0
  264. package/dist/utils/repeat.d.ts +3 -1
  265. package/dist/utils/repeat.d.ts.map +1 -1
  266. package/dist/utils/repeat.js +28 -25
  267. package/dist/utils/roving.d.ts +17 -0
  268. package/dist/utils/roving.d.ts.map +1 -0
  269. package/dist/utils/roving.js +35 -0
  270. package/dist/utils/section-link.js +0 -1
  271. package/dist/utils/slot.d.ts.map +1 -1
  272. package/dist/utils/slot.js +7 -11
  273. package/dist/utils/status-icons.js +7 -7
  274. package/dist/utils/styles.d.ts +9 -2
  275. package/dist/utils/styles.d.ts.map +1 -1
  276. package/dist/utils/styles.js +6 -3
  277. package/dist/utils/theme-wave.js +0 -1
  278. package/dist/utils/theme.js +0 -1
  279. package/dist/utils/useAnchoredPopup.d.ts +7 -4
  280. package/dist/utils/useAnchoredPopup.d.ts.map +1 -1
  281. package/dist/utils/useAnchoredPopup.js +18 -11
  282. package/dist/utils/useControllable.d.ts +9 -0
  283. package/dist/utils/useControllable.d.ts.map +1 -0
  284. package/dist/utils/useControllable.js +15 -0
  285. package/dist/utils/useHoverPopup.d.ts +39 -0
  286. package/dist/utils/useHoverPopup.d.ts.map +1 -0
  287. package/dist/utils/useHoverPopup.js +64 -0
  288. package/dist/zen.css +1 -1
  289. package/package.json +1 -1
@@ -1,60 +1,59 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { FieldChevron as t } from "../utils/field-chevron.js";
4
- import { createContext as n, useContext as r, useEffect as i, useId as a, useRef as o, useState as s } from "react";
5
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
3
+ import { useControllable as t } from "../utils/useControllable.js";
4
+ import { FieldChevron as n } from "../utils/field-chevron.js";
5
+ import { createContext as r, useContext as i, useEffect as a, useId as o, useRef as s, useState as c } from "react";
6
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
7
  //#region packages/disclosure/index.tsx
7
- var u = n(null);
8
- function d(e) {
9
- let t = r(u);
8
+ var d = r(null);
9
+ function f(e) {
10
+ let t = i(d);
10
11
  if (!t) throw Error(`<${e}> must be inside <Disclosure>`);
11
12
  return t;
12
13
  }
13
- function f({ open: e, defaultOpen: t = !1, onOpenChange: n, children: r }) {
14
- let [i, o] = s(t), l = a(), d = e ?? i;
15
- return /* @__PURE__ */ c(u.Provider, {
14
+ function p({ open: e, defaultOpen: n = !1, onOpenChange: r, children: i }) {
15
+ let [a, s] = t(e, n, r), c = o();
16
+ return /* @__PURE__ */ l(d.Provider, {
16
17
  value: {
17
- open: d,
18
- setOpen: (t) => {
19
- e === void 0 && o(t), n?.(t);
20
- },
21
- contentId: l
18
+ open: a,
19
+ setOpen: s,
20
+ contentId: c
22
21
  },
23
- children: r
22
+ children: i
24
23
  });
25
24
  }
26
- function p({ className: n, onClick: r, children: i, ...a }) {
27
- let { open: o, setOpen: s, contentId: u } = d("DisclosureTrigger");
28
- return /* @__PURE__ */ l("button", {
25
+ function m({ className: t, onClick: r, children: i, ...a }) {
26
+ let { open: o, setOpen: s, contentId: c } = f("DisclosureTrigger");
27
+ return /* @__PURE__ */ u("button", {
29
28
  type: "button",
30
29
  "aria-expanded": o,
31
- "aria-controls": o ? u : void 0,
30
+ "aria-controls": o ? c : void 0,
32
31
  onClick: (e) => {
33
32
  r?.(e), e.defaultPrevented || s(!o);
34
33
  },
35
- className: e("zen__disclosure group text-muted-foreground flex w-fit cursor-pointer items-center gap-1.5 rounded-md text-sm font-medium outline-hidden", "hover:text-foreground aria-expanded:text-foreground transition-colors duration-200", "focus-visible:outline-ring/50 focus-visible:outline-2 focus-visible:outline-offset-4", n),
34
+ className: e("zen__disclosure group text-muted-foreground flex w-fit cursor-pointer items-center gap-1.5 rounded-md text-sm font-medium outline-hidden", "hover:text-foreground aria-expanded:text-foreground transition-colors duration-200", "focus-visible:outline-ring/50 focus-visible:outline-2 focus-visible:outline-offset-4", t),
36
35
  ...a,
37
- children: [/* @__PURE__ */ c(t, { className: e("ease-out-soft text-inherit duration-300", !o && "-rotate-90") }), i]
36
+ children: [/* @__PURE__ */ l(n, { className: e("ease-out-soft text-inherit duration-300", !o && "-rotate-90") }), i]
38
37
  });
39
38
  }
40
- function m({ className: t, children: n, ...r }) {
41
- let { open: a, contentId: l } = d("DisclosureContent"), u = o(null), [f, p] = s(a), [m, h] = s(!1);
42
- return a && !f && (p(!0), h(!0)), i(() => {
39
+ function h({ className: t, children: n, ...r }) {
40
+ let { open: i, contentId: o } = f("DisclosureContent"), u = s(null), [d, p] = c(i), [m, h] = c(!1);
41
+ return i && !d && (p(!0), h(!0)), a(() => {
43
42
  let e = u.current;
44
- if (a || !f || !e) return;
43
+ if (i || !d || !e) return;
45
44
  let t = !0;
46
45
  return Promise.all((e.getAnimations?.() ?? []).map((e) => e.finished)).then(() => t && p(!1), () => {}), () => {
47
46
  t = !1;
48
47
  };
49
- }, [a, f]), f ? /* @__PURE__ */ c("div", {
48
+ }, [i, d]), d ? /* @__PURE__ */ l("div", {
50
49
  ref: u,
51
- id: l,
52
- "data-open": a || void 0,
53
- inert: !a,
50
+ id: o,
51
+ "data-open": i || void 0,
52
+ inert: !i,
54
53
  className: e("zen__disclosure-content ease-out-soft grid grid-rows-[0fr] transition-[grid-template-rows] duration-300 data-open:grid-rows-[1fr]", m && "data-open:starting:grid-rows-[0fr]"),
55
- children: /* @__PURE__ */ c("div", {
54
+ children: /* @__PURE__ */ l("div", {
56
55
  className: "min-h-0 overflow-hidden",
57
- children: /* @__PURE__ */ c("div", {
56
+ children: /* @__PURE__ */ l("div", {
58
57
  className: e("zen__disclosure-body -translate-y-1 pt-2 opacity-0 transition-[opacity,translate] duration-300 ease-out", "in-data-open:translate-y-0 in-data-open:opacity-100", m && "in-data-open:starting:-translate-y-1 in-data-open:starting:opacity-0", t),
59
58
  ...r,
60
59
  children: n
@@ -63,4 +62,4 @@ function m({ className: t, children: n, ...r }) {
63
62
  }) : null;
64
63
  }
65
64
  //#endregion
66
- export { m as DisclosureContent, p as DisclosureTrigger, f as default };
65
+ export { h as DisclosureContent, m as DisclosureTrigger, p as default, f as useDisclosure };
@@ -1,4 +1,4 @@
1
- import { ReactNode } from 'react';
1
+ import { ComponentProps, ReactNode } from 'react';
2
2
  /**
3
3
  * A value edited in place, e.g. in a table cell: shows `children` as a button,
4
4
  * and on click (or Enter) swaps in your editor. Call `close()` from the editor
@@ -6,8 +6,9 @@ import { ReactNode } from 'react';
6
6
  * MoneyInput, an Input, a Select. A value changed by an edit glows briefly
7
7
  * when the editor closes.
8
8
  */
9
- export default function EditableCell({ children, editor, label, readOnly, editing: editingProp, onEditingChange, title, className, }: EditableCellProps): import('react').JSX.Element;
10
- export interface EditableCellProps {
9
+ export default function EditableCell({ children, editor, label, readOnly, editing: editingProp, onEditingChange, title, className, ref, onClick, ...rest }: EditableCellProps): import('react').JSX.Element;
10
+ /** Other props (data-*, aria-*) go on the button. */
11
+ export interface EditableCellProps extends Omit<ComponentProps<'button'>, 'children'> {
11
12
  /** What the cell shows when not editing. */
12
13
  children: ReactNode;
13
14
  /** The editor to show while editing; call `close` when it's done. */
@@ -19,7 +20,5 @@ export interface EditableCellProps {
19
20
  /** Control the editing state yourself (with onEditingChange). */
20
21
  editing?: boolean;
21
22
  onEditingChange?: (editing: boolean) => void;
22
- title?: string;
23
- className?: string;
24
23
  }
25
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/editable-cell/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAgD,MAAM,OAAO,CAAC;AAIhF;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACjC,QAAQ,EACR,MAAM,EACN,KAAK,EACL,QAAgB,EAChB,OAAO,EAAE,WAAW,EACpB,eAAe,EACf,KAAK,EACL,SAAS,GACZ,EAAE,iBAAiB,+BAwCnB;AAED,MAAM,WAAW,iBAAiB;IAC9B,4CAA4C;IAC5C,QAAQ,EAAE,SAAS,CAAC;IACpB,qEAAqE;IACrE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,SAAS,CAAC;IACzC,qGAAqG;IACrG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/editable-cell/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAgD,MAAM,OAAO,CAAC;AAIhG;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACjC,QAAQ,EACR,MAAM,EACN,KAAK,EACL,QAAgB,EAChB,OAAO,EAAE,WAAW,EACpB,eAAe,EACf,KAAK,EACL,SAAS,EACT,GAAG,EACH,OAAO,EACP,GAAG,IAAI,EACV,EAAE,iBAAiB,+BAsCnB;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACjF,4CAA4C;IAC5C,QAAQ,EAAE,SAAS,CAAC;IACpB,qEAAqE;IACrE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,SAAS,CAAC;IACzC,qGAAqG;IACrG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD"}
@@ -1,31 +1,32 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { useEffect as t, useLayoutEffect as n, useRef as r, useState as i } from "react";
4
- import { Fragment as a, jsx as o } from "react/jsx-runtime";
3
+ import { useMergedRefs as t } from "../utils/refs.js";
4
+ import { useControllable as n } from "../utils/useControllable.js";
5
+ import { useEffect as r, useLayoutEffect as i, useRef as a, useState as o } from "react";
6
+ import { Fragment as s, jsx as c } from "react/jsx-runtime";
5
7
  //#region packages/editable-cell/index.tsx
6
- var s = typeof window > "u" ? t : n;
7
- function c({ children: t, editor: n, label: c, readOnly: l = !1, editing: u, onEditingChange: d, title: f, className: p }) {
8
- let [m, h] = i(!1), g = u ?? m, _ = (e) => {
9
- u === void 0 && h(e), d?.(e);
10
- }, v = r(null), [y, b] = i(null);
11
- return s(() => {
12
- let e = v.current;
13
- !g && e && y !== null && e.textContent !== y && (e.dataset.changed = "");
14
- }, [g, y]), l ? /* @__PURE__ */ o("span", {
15
- title: f,
16
- className: e("zen__editable-cell block px-1 text-right tabular-nums", p),
17
- children: t
18
- }) : g ? /* @__PURE__ */ o(a, { children: n(() => _(!1)) }) : /* @__PURE__ */ o("button", {
19
- ref: v,
8
+ var l = typeof window > "u" ? r : i;
9
+ function u({ children: r, editor: i, label: u, readOnly: d = !1, editing: f, onEditingChange: p, title: m, className: h, ref: g, onClick: _, ...v }) {
10
+ let [y, b] = n(f, !1, p), x = a(null), S = t(x, g), [C, w] = o(null);
11
+ return l(() => {
12
+ let e = x.current;
13
+ !y && e && C !== null && e.textContent !== C && (e.dataset.changed = "");
14
+ }, [y, C]), d ? /* @__PURE__ */ c("span", {
15
+ title: m,
16
+ className: e("zen__editable-cell block px-1 text-end tabular-nums", h),
17
+ children: r
18
+ }) : y ? /* @__PURE__ */ c(s, { children: i(() => b(!1)) }) : /* @__PURE__ */ c("button", {
20
19
  type: "button",
21
- title: f,
22
- "aria-label": c ? `${c}. Edit` : void 0,
20
+ title: m,
21
+ "aria-label": u ? `${u}. Edit` : void 0,
22
+ ...v,
23
+ ref: S,
23
24
  onClick: (e) => {
24
- b(e.currentTarget.textContent), _(!0);
25
+ _?.(e), w(e.currentTarget.textContent), b(!0);
25
26
  },
26
- className: e("zen__editable-cell hover:bg-primary/10 focus-visible:ring-ring/50 w-full cursor-pointer rounded-md px-1.5 py-0.5 text-right tabular-nums transition-colors focus-visible:ring-2 focus-visible:outline-hidden", p),
27
- children: t
27
+ className: e("zen__editable-cell hover:bg-primary/10 w-full cursor-pointer rounded-md px-1.5 py-0.5 text-end tabular-nums transition-colors focus-ring", h),
28
+ children: r
28
29
  });
29
30
  }
30
31
  //#endregion
31
- export { c as default };
32
+ export { u as default };
@@ -1,4 +1,5 @@
1
- import { ReactNode } from 'react';
1
+ import { AlertProps } from '../alert';
2
+ import { ComponentProps, ReactNode } from 'react';
2
3
  /** What a Field tells the control inside it. */
3
4
  export interface FieldControl {
4
5
  /** For the control's id (the label's `for`). */
@@ -41,10 +42,11 @@ export declare function useFieldProps(props: {
41
42
  * markup (e.g. an amount beside a unit select), give it an id and pass the
42
43
  * same id as `htmlFor`: Zen's controls with that id pick them up themselves.
43
44
  */
44
- export default function Field({ label, hint, error, htmlFor, children, className }: FieldProps): import('react').JSX.Element;
45
+ export default function Field({ label, hint, error, htmlFor, children, className, ...rest }: FieldProps): import('react').JSX.Element;
45
46
  /** A message for a form as a whole: an error or success in a tinted box, or a quiet note. An Alert, set for forms. */
46
- export declare function FormMessage({ tone, children, className }: FormMessageProps): import('react').JSX.Element;
47
- export interface FieldProps {
47
+ export declare function FormMessage({ tone, children, className, ...rest }: FormMessageProps): import('react').JSX.Element;
48
+ /** Other props (data-*, an id) go on the field's outer element. */
49
+ export interface FieldProps extends Omit<ComponentProps<'div'>, 'children'> {
48
50
  label: ReactNode;
49
51
  /** Help text under the control. */
50
52
  hint?: ReactNode;
@@ -56,9 +58,7 @@ export interface FieldProps {
56
58
  children: ReactNode;
57
59
  className?: string;
58
60
  }
59
- export interface FormMessageProps {
60
- tone?: 'info' | 'success' | 'error';
61
- children: ReactNode;
62
- className?: string;
61
+ export interface FormMessageProps extends Omit<AlertProps, 'tone' | 'plain'> {
62
+ tone?: 'default' | 'positive' | 'negative';
63
63
  }
64
64
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/field/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA6D,SAAS,EAAqB,MAAM,OAAO,CAAC;AAEhH,gDAAgD;AAChD,MAAM,WAAW,YAAY;IACzB,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAID;;;;GAIG;AACH,wBAAgB,QAAQ,wBAEvB;AAMD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;EAO1G;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,UAAU,+BAiD7F;AAED,sHAAsH;AACtH,wBAAgB,WAAW,CAAC,EAAE,IAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,gBAAgB,+BAUnF;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,mCAAmC;IACnC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uEAAuE;IACvE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0FAA0F;IAC1F,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/field/index.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAEH,cAAc,EAId,SAAS,EAGZ,MAAM,OAAO,CAAC;AAEf,gDAAgD;AAChD,MAAM,WAAW,YAAY;IACzB,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAID;;;;GAIG;AACH,wBAAgB,QAAQ,wBAEvB;AAMD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;EAO1G;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,UAAU,+BAiDtG;AAED,sHAAsH;AACtH,wBAAgB,WAAW,CAAC,EAAE,IAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,gBAAgB,+BAM/F;AAED,mEAAmE;AACnE,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACvE,KAAK,EAAE,SAAS,CAAC;IACjB,mCAAmC;IACnC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uEAAuE;IACvE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0FAA0F;IAC1F,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACxE,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;CAC9C"}
@@ -17,36 +17,37 @@ function p(e) {
17
17
  "aria-invalid": e["aria-invalid"] ?? t["aria-invalid"]
18
18
  };
19
19
  }
20
- function m({ label: n, hint: i, error: o, htmlFor: d, children: p, className: m }) {
21
- let h = s(), g = !d && a(p) ? p : null, _ = d ?? g?.props.id ?? `${h}-control`, v = i && !o ? `${h}-hint` : void 0, y = o ? `${h}-error` : void 0, b = `${h}-label`, x = {
22
- id: _,
23
- labelId: b,
24
- "aria-describedby": f(v, y),
20
+ function m({ label: n, hint: i, error: o, htmlFor: d, children: p, className: m, ...h }) {
21
+ let g = s(), _ = !d && a(p) ? p : null, v = d ?? _?.props.id ?? `${g}-control`, y = i && !o ? `${g}-hint` : void 0, b = o ? `${g}-error` : void 0, x = `${g}-label`, S = {
22
+ id: v,
23
+ labelId: x,
24
+ "aria-describedby": f(y, b),
25
25
  "aria-invalid": o ? !0 : void 0
26
26
  };
27
27
  return /* @__PURE__ */ c(u.Provider, {
28
- value: x,
28
+ value: S,
29
29
  children: /* @__PURE__ */ l("div", {
30
+ ...h,
30
31
  className: e("zen__field flex flex-col gap-2", m),
31
32
  children: [
32
33
  /* @__PURE__ */ c("label", {
33
- id: b,
34
- htmlFor: _,
34
+ id: x,
35
+ htmlFor: v,
35
36
  className: "text-sm leading-none font-medium",
36
37
  children: n
37
38
  }),
38
- g ? r(g, {
39
- id: _,
40
- "aria-describedby": f(g.props["aria-describedby"], x["aria-describedby"]),
41
- "aria-invalid": o ? !0 : g.props["aria-invalid"]
42
- }) : p,
43
- v && /* @__PURE__ */ c("p", {
39
+ _ ? r(_, {
44
40
  id: v,
41
+ "aria-describedby": f(_.props["aria-describedby"], S["aria-describedby"]),
42
+ "aria-invalid": o ? !0 : _.props["aria-invalid"]
43
+ }) : p,
44
+ y && /* @__PURE__ */ c("p", {
45
+ id: y,
45
46
  className: "text-muted-foreground mt-0! text-xs",
46
47
  children: i
47
48
  }),
48
49
  o && /* @__PURE__ */ l("p", {
49
- id: y,
50
+ id: b,
50
51
  role: "alert",
51
52
  className: "text-destructive mt-0! flex items-center gap-1.5 text-xs font-medium",
52
53
  children: [/* @__PURE__ */ c(t, { className: "shrink-0" }), o]
@@ -55,10 +56,11 @@ function m({ label: n, hint: i, error: o, htmlFor: d, children: p, className: m
55
56
  })
56
57
  });
57
58
  }
58
- function h({ tone: t = "info", children: r, className: i }) {
59
+ function h({ tone: t = "default", children: r, className: i, ...a }) {
59
60
  return /* @__PURE__ */ c(n, {
60
- tone: t === "error" ? "negative" : t === "success" ? "positive" : "default",
61
- plain: t === "info",
61
+ ...a,
62
+ tone: t,
63
+ plain: t === "default",
62
64
  className: e("mt-0!", i),
63
65
  children: r
64
66
  });
@@ -3,9 +3,9 @@ import { ComponentProps, ReactNode } from 'react';
3
3
  * The filters in effect, as chips each removed with its ×, and "Clear all"
4
4
  * once there are two or more. Renders nothing when no filter is set.
5
5
  */
6
- export default function FilterBar({ onClear, clearLabel, 'aria-label': label, className, children, ref, ...rest }: FilterBarProps): import('react').JSX.Element | null;
6
+ export default function FilterBar({ onClear, clearLabel: clearLabelProp, 'aria-label': labelProp, className, children, ref, ...rest }: FilterBarProps): import('react').JSX.Element | null;
7
7
  /** One filter in a FilterBar: what it is (e.g. "Amount: $50–$500"), and its × to remove it. */
8
- export declare function FilterChip({ onRemove, removeLabel, className, children }: FilterChipProps): import('react').JSX.Element;
8
+ export declare function FilterChip({ onRemove, removeLabel: removeLabelProp, className, children }: FilterChipProps): import('react').JSX.Element;
9
9
  export interface FilterBarProps extends ComponentProps<'div'> {
10
10
  /** Removes every filter; shown as "Clear all" once there are two or more. */
11
11
  onClear?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/filter-bar/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAY,cAAc,EAAE,SAAS,EAAiD,MAAM,OAAO,CAAC;AAM3G;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAC9B,OAAO,EACP,UAAwB,EACxB,YAAY,EAAE,KAAwB,EACtC,SAAS,EACT,QAAQ,EACR,GAAG,EACH,GAAG,IAAI,EACV,EAAE,cAAc,sCA6BhB;AAiDD,+FAA+F;AAC/F,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,WAA6B,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,eAAe,+BAmB3G;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,KAAK,CAAC;IACzD,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACvB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/filter-bar/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAY,cAAc,EAAE,SAAS,EAAiD,MAAM,OAAO,CAAC;AAM3G;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAC9B,OAAO,EACP,UAAU,EAAE,cAAc,EAC1B,YAAY,EAAE,SAAS,EACvB,SAAS,EACT,QAAQ,EACR,GAAG,EACH,GAAG,IAAI,EACV,EAAE,cAAc,sCAgChB;AAiDD,+FAA+F;AAC/F,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,eAAe,+BAqB1G;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,KAAK,CAAC;IACzD,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACvB"}
@@ -1,45 +1,46 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { reducedMotion as t } from "../utils/motion.js";
4
- import n from "../icons/micro/x-mark.js";
5
- import { Children as r, useEffect as i, useLayoutEffect as a, useRef as o } from "react";
6
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
3
+ import { useMessages as t } from "../locale-provider/index.js";
4
+ import { reducedMotion as n } from "../utils/motion.js";
5
+ import r from "../icons/micro/x-mark.js";
6
+ import { Children as i, useEffect as a, useLayoutEffect as o, useRef as s } from "react";
7
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
7
8
  //#region packages/filter-bar/index.tsx
8
- var l = typeof window > "u" ? i : a, u = {
9
+ var u = typeof window > "u" ? a : o, d = {
9
10
  duration: 260,
10
11
  easing: "cubic-bezier(0.2, 0.8, 0.2, 1)"
11
- }, d = {
12
+ }, f = {
12
13
  duration: 120,
13
14
  easing: "ease-in"
14
15
  };
15
- function f({ onClear: t, clearLabel: n = "Clear all", "aria-label": i = "Active filters", className: a, children: l, ref: u, ...d }) {
16
- let f = r.toArray(l).length, m = o(null);
17
- return p(m), f === 0 ? null : /* @__PURE__ */ c("div", {
16
+ function p({ onClear: n, clearLabel: r, "aria-label": a, className: o, children: u, ref: d, ...f }) {
17
+ let p = t(), h = r ?? p.clearAll, g = a ?? p.activeFilters, _ = i.toArray(u).length, v = s(null);
18
+ return m(v), _ === 0 ? null : /* @__PURE__ */ l("div", {
18
19
  ref: (e) => {
19
- if (m.current = e, typeof u == "function") return u(e);
20
- u && (u.current = e);
20
+ if (v.current = e, typeof d == "function") return d(e);
21
+ d && (d.current = e);
21
22
  },
22
23
  role: "group",
23
- "aria-label": i,
24
- className: e("zen__filter-bar relative flex flex-wrap items-center gap-1.5", a),
25
- ...d,
26
- children: [l, f > 1 && t && /* @__PURE__ */ s("button", {
24
+ "aria-label": g,
25
+ className: e("zen__filter-bar relative flex flex-wrap items-center gap-1.5", o),
26
+ ...f,
27
+ children: [u, _ > 1 && n && /* @__PURE__ */ c("button", {
27
28
  type: "button",
28
- onClick: t,
29
- className: "zen__filter-clear text-muted-foreground hover:text-foreground focus-visible:ring-ring/50 touch-target ml-1 cursor-pointer rounded-md px-1.5 py-1 text-xs outline-hidden focus-visible:ring-2",
30
- children: n
29
+ onClick: n,
30
+ className: "zen__filter-clear text-muted-foreground hover:text-foreground touch-target focus-ring ms-1 cursor-pointer rounded-md px-1.5 py-1 text-xs outline-hidden",
31
+ children: h
31
32
  })]
32
33
  });
33
34
  }
34
- function p(e) {
35
- let n = o(/* @__PURE__ */ new Map());
36
- l(() => {
37
- let r = e.current, i = n.current, a = /* @__PURE__ */ new Map();
35
+ function m(e) {
36
+ let t = s(/* @__PURE__ */ new Map());
37
+ u(() => {
38
+ let r = e.current, i = t.current, a = /* @__PURE__ */ new Map();
38
39
  for (let e of r ? [...r.children] : []) e instanceof HTMLElement && !e.dataset.zenLeaving && a.set(e, {
39
40
  left: e.offsetLeft,
40
41
  top: e.offsetTop
41
42
  });
42
- if (n.current = a, !r || t()) return;
43
+ if (t.current = a, !r || n()) return;
43
44
  let o = !1;
44
45
  for (let [e, t] of i) {
45
46
  if (e.isConnected || !(e instanceof HTMLElement)) continue;
@@ -53,12 +54,12 @@ function p(e) {
53
54
  let n = e.animate?.({
54
55
  opacity: [1, 0],
55
56
  scale: [1, .9]
56
- }, d);
57
+ }, f);
57
58
  n ? n.onfinish = n.oncancel = () => e.remove() : e.remove();
58
59
  }
59
60
  let s = {
60
- ...u,
61
- delay: o ? d.duration : 0,
61
+ ...d,
62
+ delay: o ? f.duration : 0,
62
63
  fill: "backwards"
63
64
  };
64
65
  for (let [e, t] of a) {
@@ -69,22 +70,23 @@ function p(e) {
69
70
  }, {
70
71
  ...s,
71
72
  duration: 200,
72
- delay: s.delay + u.duration * .6
73
+ delay: s.delay + d.duration * .6
73
74
  }));
74
75
  }
75
76
  });
76
77
  }
77
- function m({ onRemove: t, removeLabel: r = "Remove filter", className: i, children: a }) {
78
- return /* @__PURE__ */ c("span", {
79
- className: e("zen__filter-chip bg-primary/12 text-foreground inline-flex items-center gap-1 rounded-full py-1 pr-1 pl-3 text-xs shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.25)]", i),
80
- children: [a, /* @__PURE__ */ s("button", {
78
+ function h({ onRemove: n, removeLabel: i, className: a, children: o }) {
79
+ let s = t(), u = i ?? s.removeFilter;
80
+ return /* @__PURE__ */ l("span", {
81
+ className: e("zen__filter-chip bg-primary/12 text-foreground inline-flex items-center gap-1 rounded-full py-1 ps-3 pe-1 text-xs shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.25)]", a),
82
+ children: [o, /* @__PURE__ */ c("button", {
81
83
  type: "button",
82
- "aria-label": r,
83
- onClick: t,
84
- className: "text-muted-foreground hover:text-foreground hover:bg-tint/10 focus-visible:ring-ring/50 touch-target grid size-5 cursor-pointer place-items-center rounded-full outline-hidden focus-visible:ring-2",
85
- children: /* @__PURE__ */ s(n, { className: "size-3" })
84
+ "aria-label": u,
85
+ onClick: n,
86
+ className: "text-muted-foreground hover:text-foreground hover:bg-tint/10 touch-target focus-ring grid size-5 cursor-pointer place-items-center rounded-full outline-hidden",
87
+ children: /* @__PURE__ */ c(r, { className: "size-3" })
86
88
  })]
87
89
  });
88
90
  }
89
91
  //#endregion
90
- export { m as FilterChip, f as default };
92
+ export { h as FilterChip, p as default };
@@ -8,7 +8,7 @@ import { ComponentProps } from 'react';
8
8
  * focused, that moves focus to the page's <main> past the bar's links (WCAG
9
9
  * 2.4.1). Change its text with `skipLabel`, or pass null to leave it out.
10
10
  */
11
- export default function Header({ skipLabel, className, children, ...rest }: HeaderProps): import('react').JSX.Element;
11
+ export default function Header({ skipLabel: skipLabelProp, className, children, ...rest }: HeaderProps): import('react').JSX.Element;
12
12
  export interface HeaderProps extends ComponentProps<'header'> {
13
13
  /** The skip link's text; null for no skip link (e.g. when the page has its own). */
14
14
  skipLabel?: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/header/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,SAA6B,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAoC1G;AAED,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,QAAQ,CAAC;IACzD,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/header/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAsCrG;AAED,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,QAAQ,CAAC;IACzD,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B"}
@@ -1,25 +1,27 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
3
  import { useGraphicsMode as t } from "../utils/graphics.js";
4
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ import { useMessages as n } from "../locale-provider/index.js";
5
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
6
  //#region packages/header/index.tsx
6
- function i({ skipLabel: i = "Skip to content", className: a, children: o, ...s }) {
7
- return t(), /* @__PURE__ */ r("header", {
8
- className: e("zen__header glow-edge border-tint/5 bg-background/60 sticky top-0 z-40 border-b pt-[env(safe-area-inset-top)] backdrop-blur-xl", "pointer-coarse:bg-background/95 pointer-coarse:backdrop-blur-none", a),
9
- ...s,
10
- children: [i !== null && /* @__PURE__ */ n("a", {
7
+ function a({ skipLabel: a, className: o, children: s, ...c }) {
8
+ let l = n(), u = a === void 0 ? l.skipToContent : a;
9
+ return t(), /* @__PURE__ */ i("header", {
10
+ className: e("zen__header glow-edge border-tint/5 bg-background/60 sticky top-0 z-40 border-b pt-[env(safe-area-inset-top)] backdrop-blur-xl", "pointer-coarse:bg-background/95 pointer-coarse:backdrop-blur-none", o),
11
+ ...c,
12
+ children: [u !== null && /* @__PURE__ */ r("a", {
11
13
  href: "#main",
12
14
  onClick: (e) => {
13
15
  let t = document.querySelector("main");
14
16
  t && (e.preventDefault(), t.hasAttribute("tabindex") || (t.tabIndex = -1, t.dataset.zenSkipTarget = ""), t.focus());
15
17
  },
16
- className: "bg-primary text-primary-foreground focus-visible:ring-glow/50 sr-only rounded-lg px-3 py-2 text-sm font-medium outline-hidden focus:not-sr-only focus:absolute focus:top-2 focus:left-4 focus:z-50 focus-visible:ring-2",
17
- children: i
18
- }), /* @__PURE__ */ n("div", {
18
+ className: "bg-primary text-primary-foreground focus-ring sr-only rounded-lg px-3 py-2 text-sm font-medium outline-hidden focus:not-sr-only focus:absolute focus:start-4 focus:top-2 focus:z-50",
19
+ children: u
20
+ }), /* @__PURE__ */ r("div", {
19
21
  className: "flex items-center justify-between gap-4 px-4 py-2.5 md:gap-6 md:px-6 md:py-3",
20
- children: o
22
+ children: s
21
23
  })]
22
24
  });
23
25
  }
24
26
  //#endregion
25
- export { i as default };
27
+ export { a as default };
@@ -0,0 +1,32 @@
1
+ import { ComponentProps, ReactNode } from 'react';
2
+ /**
3
+ * A preview of what a link points to, e.g. a person or an account: a glass
4
+ * card shown after the pointer rests on the link (`openDelay`), or while it
5
+ * has keyboard focus, and kept while the pointer or focus is on the card.
6
+ * Escape hides it. What it shows is extra, out of the tab order: everything in
7
+ * it should be reachable by following the link too. Put a HoverCardTrigger and
8
+ * a HoverCardContent inside (it can go in a paragraph).
9
+ */
10
+ export default function HoverCard({ openDelay, closeDelay, children }: HoverCardProps): import('react').JSX.Element;
11
+ /** What the card previews: a link by default (give it `href`). With `asChild`, your own element (e.g. your router's link). */
12
+ export declare function HoverCardTrigger({ asChild, style, className, onPointerEnter, onPointerLeave, onFocus, onBlur, onKeyDown, children, ...rest }: HoverCardTriggerProps): import('react').JSX.Element;
13
+ /** The card: glass, below the trigger (above it if there's no room), lined up with its start by default. */
14
+ export declare function HoverCardContent(props: HoverCardContentProps): import('react').ReactPortal | null;
15
+ export interface HoverCardProps {
16
+ /** How long the pointer rests on the trigger before the card shows, in ms. Default 500. */
17
+ openDelay?: number;
18
+ /** How long it stays after the pointer leaves, in ms, so the pointer can reach it. Default 200. */
19
+ closeDelay?: number;
20
+ children?: ReactNode;
21
+ }
22
+ export interface HoverCardTriggerProps extends ComponentProps<'a'> {
23
+ /** Put the trigger's props on your own element instead of rendering a link. */
24
+ asChild?: boolean;
25
+ }
26
+ export interface HoverCardContentProps extends ComponentProps<'div'> {
27
+ /** Lined up with the trigger's start (default) or end edge, or centred on it. */
28
+ align?: 'start' | 'end' | 'center';
29
+ /** Gap from the trigger, in px. */
30
+ offset?: number;
31
+ }
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/hover-card/index.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAiB,SAAS,EAAsB,MAAM,OAAO,CAAC;AAWrF;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,SAAe,EAAE,UAAgB,EAAE,QAAQ,EAAE,EAAE,cAAc,+BAIhG;AAED,8HAA8H;AAC9H,wBAAgB,gBAAgB,CAAC,EAC7B,OAAO,EACP,KAAK,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,OAAO,EACP,MAAM,EACN,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,qBAAqB,+BAsBvB;AAED,4GAA4G;AAC5G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,sCAK5D;AAiCD,MAAM,WAAW,cAAc;IAC3B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,cAAc,CAAC,GAAG,CAAC;IAC9D,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,qBAAsB,SAAQ,cAAc,CAAC,KAAK,CAAC;IAChE,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;IACnC,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { useGraphicsMode as t } from "../utils/graphics.js";
4
+ import { Slot as n } from "../utils/slot.js";
5
+ import { anchorFor as r, anchoredStyle as i, useAnchorFallback as a } from "../utils/useAnchoredPopup.js";
6
+ import { POPUP as o } from "../utils/styles.js";
7
+ import { useHydrated as s } from "../utils/useHydrated.js";
8
+ import { useHoverPopup as c } from "../utils/useHoverPopup.js";
9
+ import { createContext as l, useContext as u, useRef as d } from "react";
10
+ import { jsx as f } from "react/jsx-runtime";
11
+ import { createPortal as p } from "react-dom";
12
+ //#region packages/hover-card/index.tsx
13
+ var m = l(null);
14
+ function h(e) {
15
+ let t = u(m);
16
+ if (!t) throw Error(`<${e}> must be inside <HoverCard>`);
17
+ return t;
18
+ }
19
+ function g({ openDelay: e = 500, closeDelay: n = 200, children: r }) {
20
+ t();
21
+ let i = c("zen__hover-card", {
22
+ openDelay: e,
23
+ closeDelay: n
24
+ });
25
+ return /* @__PURE__ */ f(m.Provider, {
26
+ value: i,
27
+ children: r
28
+ });
29
+ }
30
+ function _({ asChild: t, style: i, className: a, onPointerEnter: o, onPointerLeave: s, onFocus: c, onBlur: l, onKeyDown: u, children: d, ...p }) {
31
+ let m = h("HoverCardTrigger"), g = {
32
+ ...p,
33
+ ...r(m.id),
34
+ style: {
35
+ ...r(m.id).style,
36
+ ...i
37
+ },
38
+ ...m.triggerProps({
39
+ onPointerEnter: o,
40
+ onPointerLeave: s,
41
+ onFocus: c,
42
+ onBlur: l,
43
+ onKeyDown: u
44
+ })
45
+ };
46
+ return t ? /* @__PURE__ */ f(n, {
47
+ ...g,
48
+ className: a,
49
+ children: d
50
+ }) : /* @__PURE__ */ f("a", {
51
+ ...g,
52
+ className: e("text-primary focus-ring rounded-sm underline-offset-4 hover:underline", a),
53
+ children: d
54
+ });
55
+ }
56
+ function v(e) {
57
+ return s() ? p(/* @__PURE__ */ f(y, { ...e }), document.body) : null;
58
+ }
59
+ function y({ align: t = "start", offset: n = 8, className: r, style: s, onPointerEnter: c, onPointerLeave: l, onBlur: u, onKeyDown: p, children: m, ...g }) {
60
+ let _ = h("HoverCardContent"), v = d(null);
61
+ return a(v), /* @__PURE__ */ f("div", {
62
+ ...g,
63
+ ref: v,
64
+ id: _.id,
65
+ popover: "manual",
66
+ ..._.contentProps({
67
+ onPointerEnter: c,
68
+ onPointerLeave: l,
69
+ onBlur: u,
70
+ onKeyDown: p
71
+ }),
72
+ style: {
73
+ ...i(_.id, {
74
+ align: t,
75
+ offset: n
76
+ }),
77
+ ...s
78
+ },
79
+ className: e("zen__popover fixed z-50 w-72 overflow-visible p-4", o, r),
80
+ children: m
81
+ });
82
+ }
83
+ //#endregion
84
+ export { v as HoverCardContent, _ as HoverCardTrigger, g as default };