@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,143 +1,145 @@
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 { PILL as n } from "../utils/styles.js";
5
- import { useIndicator as r } from "../utils/indicator.js";
6
- import i, { PillIndicator as a } from "../pills/index.js";
7
- import { createContext as o, useContext as s, useEffect as c, useId as l, useLayoutEffect as u, useRef as d, useState as f } from "react";
8
- import { jsx as p, jsxs as m } from "react/jsx-runtime";
3
+ import { readingKey as t } from "../utils/direction.js";
4
+ import { useControllable as n } from "../utils/useControllable.js";
5
+ import { reducedMotion as r } from "../utils/motion.js";
6
+ import { PILL as i } from "../utils/styles.js";
7
+ import { useIndicator as a } from "../utils/indicator.js";
8
+ import o, { PillIndicator as s } from "../pills/index.js";
9
+ import { createContext as c, useCallback as l, useContext as u, useEffect as d, useId as f, useLayoutEffect as p, useRef as m, useState as h } from "react";
10
+ import { jsx as g, jsxs as _ } from "react/jsx-runtime";
9
11
  //#region packages/tabs/index.tsx
10
- var h = typeof window > "u" ? c : u, g = o(null);
11
- function _(e) {
12
- let t = s(g);
12
+ var v = typeof window > "u" ? d : p, y = c(null);
13
+ function b(e) {
14
+ let t = u(y);
13
15
  if (!t) throw Error(`<${e}> must be inside <Tabs>`);
14
16
  return t;
15
17
  }
16
- function v({ value: t, defaultValue: n = "", onValueChange: r, className: i, ...a }) {
17
- let [o, s] = f(n), c = t ?? o, [u, m] = f({ value: c });
18
- u.value !== c && m({
19
- value: c,
18
+ function x({ value: t, defaultValue: r = "", onValueChange: i, className: a, ...o }) {
19
+ let [s, c] = n(t, r, i), [u, d] = h({ value: s });
20
+ u.value !== s && d({
21
+ value: s,
20
22
  before: u.value
21
23
  });
22
- let h = d(null), _ = (e) => {
23
- let t = h.current;
24
- return h.current = e, t;
25
- }, v = l();
26
- return /* @__PURE__ */ p(g.Provider, {
24
+ let p = m(null), _ = (e) => {
25
+ let t = p.current;
26
+ return p.current = e, t;
27
+ }, [v, b] = h(0), x = l(() => (b((e) => e + 1), () => b((e) => e - 1)), []), S = f();
28
+ return /* @__PURE__ */ g(y.Provider, {
27
29
  value: {
28
- value: c,
30
+ value: s,
29
31
  before: u.before,
30
32
  show: _,
31
- select: (e) => {
32
- t === void 0 && s(e), r?.(e);
33
- },
34
- idFor: (e, t) => `${v}-${e}-${t.replace(/\s+/g, "-")}`
33
+ select: c,
34
+ idFor: (e, t) => `${S}-${e}-${t.replace(/\s+/g, "-")}`,
35
+ hasPanels: v > 0,
36
+ addPanel: x
35
37
  },
36
- children: /* @__PURE__ */ p("div", {
37
- className: e("zen__tabs relative flex flex-col gap-4", i),
38
- ...a
38
+ children: /* @__PURE__ */ g("div", {
39
+ className: e("zen__tabs relative flex flex-col gap-4", a),
40
+ ...o
39
41
  })
40
42
  });
41
43
  }
42
- var y = o("underline");
43
- function b({ variant: e = "underline", className: t, children: n, ...r }) {
44
- _("TabList");
45
- let o = d(null), s = (e) => {
46
- let t = Array.from(o.current?.querySelectorAll("[role=\"tab\"]:not(:disabled)") ?? []), n = t.indexOf(document.activeElement);
47
- if (n === -1) return;
48
- let r = {
49
- ArrowRight: n + 1,
50
- ArrowLeft: n - 1,
44
+ var S = c("underline");
45
+ function C({ variant: e = "underline", className: n, children: r, ...i }) {
46
+ b("TabList");
47
+ let a = m(null), c = (e) => {
48
+ let n = Array.from(a.current?.querySelectorAll("[role=\"tab\"]:not(:disabled)") ?? []), r = n.indexOf(document.activeElement);
49
+ if (r === -1) return;
50
+ let i = {
51
+ ArrowRight: r + 1,
52
+ ArrowLeft: r - 1,
51
53
  Home: 0,
52
- End: t.length - 1
53
- }[e.key];
54
- if (r === void 0) return;
54
+ End: n.length - 1
55
+ }[t(e.key, e.currentTarget)];
56
+ if (i === void 0) return;
55
57
  e.preventDefault();
56
- let i = t[(r + t.length) % t.length];
57
- i.focus(), i.click();
58
- }, c = /* @__PURE__ */ p(y.Provider, {
58
+ let o = n[(i + n.length) % n.length];
59
+ o.focus(), o.click();
60
+ }, l = /* @__PURE__ */ g(S.Provider, {
59
61
  value: e,
60
- children: n
62
+ children: r
61
63
  });
62
- return e === "pills" ? /* @__PURE__ */ m(i, {
63
- ref: o,
64
+ return e === "pills" ? /* @__PURE__ */ _(o, {
65
+ ref: a,
64
66
  role: "tablist",
65
- onKeyDown: s,
66
- className: t,
67
- ...r,
68
- children: [c, /* @__PURE__ */ p(a, {})]
69
- }) : /* @__PURE__ */ p(x, {
70
- ref: o,
67
+ onKeyDown: c,
68
+ className: n,
69
+ ...i,
70
+ children: [l, /* @__PURE__ */ g(s, {})]
71
+ }) : /* @__PURE__ */ g(w, {
72
+ ref: a,
71
73
  role: "tablist",
72
- onKeyDown: s,
73
- className: t,
74
- ...r,
75
- children: c
74
+ onKeyDown: c,
75
+ className: n,
76
+ ...i,
77
+ children: l
76
78
  });
77
79
  }
78
- function x({ ref: t, className: n, children: i, ...a }) {
79
- let o = d(null), s = r(o, "[role=\"tab\"][aria-selected=\"true\"]");
80
- return /* @__PURE__ */ m("div", {
80
+ function w({ ref: t, className: n, children: r, ...i }) {
81
+ let o = m(null), s = a(o, "[role=\"tab\"][aria-selected=\"true\"]");
82
+ return /* @__PURE__ */ _("div", {
81
83
  ref: (e) => {
82
84
  o.current = e, typeof t == "function" ? t(e) : t && (t.current = e);
83
85
  },
84
86
  className: e("border-border relative flex gap-1 border-b", n),
85
- ...a,
86
- children: [i, s ? /* @__PURE__ */ p("span", {
87
+ ...i,
88
+ children: [r, s ? /* @__PURE__ */ g("span", {
87
89
  "aria-hidden": !0,
88
90
  className: "zen__tab-bar bg-primary absolute bottom-[-1px] left-0 h-0.5 transition-[translate,width] duration-150 ease-in-out",
89
91
  style: {
90
92
  width: s.w,
91
93
  translate: `${s.x}px 0`
92
94
  }
93
- }, "measured") : /* @__PURE__ */ p("span", {
95
+ }, "measured") : /* @__PURE__ */ g("span", {
94
96
  "aria-hidden": !0,
95
97
  "data-pending": !0,
96
98
  className: "zen__tab-bar hidden"
97
99
  }, "pending")]
98
100
  });
99
101
  }
100
- function S({ value: t, className: r, onClick: i, ...a }) {
101
- let { value: o, select: c, idFor: l } = _("Tab"), u = s(y), d = o === t;
102
- return /* @__PURE__ */ p("button", {
102
+ function T({ value: t, className: n, onClick: r, ...a }) {
103
+ let { value: o, select: s, idFor: c, hasPanels: l } = b("Tab"), d = u(S), f = o === t;
104
+ return /* @__PURE__ */ g("button", {
103
105
  type: "button",
104
106
  role: "tab",
105
- id: l("tab", t),
106
- "aria-selected": d,
107
- "aria-controls": l("panel", t),
108
- tabIndex: d ? 0 : -1,
109
- "data-active": d || void 0,
107
+ id: c("tab", t),
108
+ "aria-selected": f,
109
+ "aria-controls": l ? c("panel", t) : void 0,
110
+ tabIndex: f ? 0 : -1,
111
+ "data-active": f || void 0,
110
112
  onClick: (e) => {
111
- c(t), i?.(e);
113
+ s(t), r?.(e);
112
114
  },
113
- className: e(u === "pills" ? n : "focus-visible:ring-ring text-muted-foreground hover:text-foreground data-active:text-foreground cursor-pointer px-3 py-2 text-sm whitespace-nowrap outline-hidden select-none focus-visible:ring-1 disabled:cursor-not-allowed", r),
115
+ className: e(d === "pills" ? i : "focus-ring text-muted-foreground hover:text-foreground data-active:text-foreground cursor-pointer px-3 py-2 text-sm whitespace-nowrap select-none disabled:cursor-not-allowed", n),
114
116
  ...a
115
117
  });
116
118
  }
117
- function C({ value: n, className: r, ...i }) {
118
- let { value: a, before: o, show: s, idFor: c } = _("TabPanel"), l = a === n;
119
- return h(() => {
120
- if (!l) return;
121
- let e = document.getElementById(c("panel", n)), r = s(e);
122
- if (!e || o === void 0 || o === n) return;
123
- let i = document.getElementById(c("tab", n)), a = document.getElementById(c("tab", o));
119
+ function E({ value: t, className: n, ...i }) {
120
+ let { value: a, before: o, show: s, idFor: c, addPanel: l } = b("TabPanel"), u = a === t;
121
+ return d(l, [l]), v(() => {
122
+ if (!u) return;
123
+ let e = document.getElementById(c("panel", t)), n = s(e);
124
+ if (!e || o === void 0 || o === t) return;
125
+ let i = document.getElementById(c("tab", t)), a = document.getElementById(c("tab", o));
124
126
  if (!i || !a) return;
125
- let u = !!(i.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);
126
- e.dataset.enter = u ? "end" : "start", t() || T(e, r, u);
127
- }, [l, o]), l ? /* @__PURE__ */ p("div", {
127
+ let l = !!(i.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);
128
+ e.dataset.enter = l ? "end" : "start", r() || O(e, n, l);
129
+ }, [u, o]), u ? /* @__PURE__ */ g("div", {
128
130
  role: "tabpanel",
129
- id: c("panel", n),
130
- "aria-labelledby": c("tab", n),
131
+ id: c("panel", t),
132
+ "aria-labelledby": c("tab", t),
131
133
  tabIndex: 0,
132
- className: e("zen__tab-panel focus-visible:outline-ring/50 outline-hidden focus-visible:outline-2 focus-visible:outline-offset-4", r),
134
+ className: e("zen__tab-panel focus-visible:outline-ring/50 outline-hidden focus-visible:outline-2 focus-visible:outline-offset-4", n),
133
135
  ...i
134
136
  }) : null;
135
137
  }
136
- var w = {
138
+ var D = {
137
139
  duration: 300,
138
140
  easing: "cubic-bezier(0.33, 1, 0.68, 1)"
139
141
  };
140
- function T(e, t, n) {
142
+ function O(e, t, n) {
141
143
  let r = e.closest(".zen__tabs");
142
144
  if (!e.animate) return;
143
145
  let i = n === (getComputedStyle(e).direction !== "rtl") ? 1 : -1, a = e.offsetWidth, o = Math.min(a * .25, 208), s = e.offsetHeight, c = s;
@@ -154,7 +156,7 @@ function T(e, t, n) {
154
156
  translate: ["0 0", `${-i * o}px 0`],
155
157
  opacity: [1, 0],
156
158
  clipPath: ["inset(0 0 0 0)", i > 0 ? `inset(0 0 ${u}px ${o}px)` : `inset(0 ${o}px ${u}px 0)`]
157
- }, w);
159
+ }, D);
158
160
  d.onfinish = d.oncancel = () => t.remove();
159
161
  }
160
162
  let l = Math.max(0, s - c);
@@ -162,7 +164,7 @@ function T(e, t, n) {
162
164
  translate: [`${i * o}px 0`, "0 0"],
163
165
  opacity: [0, 1],
164
166
  clipPath: [i > 0 ? `inset(0 ${o}px ${l}px 0)` : `inset(0 0 ${l}px ${o}px)`, "inset(0 0 0 0)"]
165
- }, w);
167
+ }, D);
166
168
  }
167
169
  //#endregion
168
- export { S as Tab, b as TabList, C as TabPanel, v as default };
170
+ export { T as Tab, C as TabList, E as TabPanel, x as default };
@@ -6,7 +6,7 @@ import { ComponentProps } from 'react';
6
6
  * trimmed and kept once. Past about three rows the tags scroll, under a
7
7
  * typing line that stays in view (a max-h-* class sets the field's height).
8
8
  */
9
- export default function TagInput({ value: controlled, defaultValue, onValueChange, validate, removeLabel, className, disabled, ...rest }: TagInputProps): import('react').JSX.Element;
9
+ export default function TagInput({ value: controlled, defaultValue, onValueChange, validate, removeLabel: removeLabelProp, className, disabled, name, ...rest }: TagInputProps): import('react').JSX.Element;
10
10
  export interface TagInputProps extends Omit<ComponentProps<'input'>, 'value' | 'defaultValue'> {
11
11
  value?: string[];
12
12
  defaultValue?: string[];
@@ -15,5 +15,7 @@ export interface TagInputProps extends Omit<ComponentProps<'input'>, 'value' | '
15
15
  validate?: (entry: string) => boolean;
16
16
  /** The × button's label, for screen readers. */
17
17
  removeLabel?: (tag: string) => string;
18
+ /** Form field name: each tag is submitted under it. */
19
+ name?: string;
18
20
  }
19
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/tag-input/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAkB,cAAc,EAAoD,MAAM,OAAO,CAAC;AAEzG;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC7B,KAAK,EAAE,UAAU,EACjB,YAAiB,EACjB,aAAa,EACb,QAAQ,EACR,WAAsC,EACtC,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,aAAa,+BAgGf;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;IAC1F,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,gDAAgD;IAChD,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/tag-input/index.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAkB,cAAc,EAAoD,MAAM,OAAO,CAAC;AAEzG;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC7B,KAAK,EAAE,UAAU,EACjB,YAAiB,EACjB,aAAa,EACb,QAAQ,EACR,WAAW,EAAE,eAAe,EAC5B,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,GAAG,IAAI,EACV,EAAE,aAAa,+BA8Ff;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;IAC1F,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,gDAAgD;IAChD,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1,61 +1,70 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { FIELD as t } from "../utils/styles.js";
4
- import { useFieldProps as n } from "../field/index.js";
5
- import r from "../icons/micro/x-mark.js";
6
- import { useLayoutEffect as i, useRef as a, useState as o } from "react";
7
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
3
+ import { useControllable as t } from "../utils/useControllable.js";
4
+ import { useMessages as n } from "../locale-provider/index.js";
5
+ import { useFieldProps as r } from "../field/index.js";
6
+ import { FIELD as i } from "../utils/styles.js";
7
+ import { FormValue as a } from "../utils/form-value.js";
8
+ import o from "../icons/micro/x-mark.js";
9
+ import { useLayoutEffect as s, useRef as c, useState as l } from "react";
10
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
8
11
  //#region packages/tag-input/index.tsx
9
- function l({ value: l, defaultValue: u = [], onValueChange: d, validate: f, removeLabel: p = (e) => `Remove ${e}`, className: m, disabled: h, ...g }) {
10
- let [_, v] = o(u), y = l ?? _, [b, x] = o(""), S = n(g), C = a(null), w = y.length;
11
- i(() => {
12
- let e = C.current;
12
+ function f({ value: f, defaultValue: p = [], onValueChange: m, validate: h, removeLabel: g, className: _, disabled: v, name: y, ...b }) {
13
+ let x = n(), S = g ?? x.remove, [C, w, T] = t(f, p, m), [E, D] = l(""), O = r(b), k = c(null), A = C.length;
14
+ s(() => {
15
+ let e = k.current;
13
16
  e?.parentElement?.contains(document.activeElement) && (e.scrollTop = e.scrollHeight);
14
- }, [w]);
15
- let T = (e) => {
16
- l === void 0 && v(e), d?.(e);
17
- }, E = (e) => {
18
- let t = [...y];
19
- for (let n of e.map((e) => e.trim())) n && !t.includes(n) && (f?.(n) ?? !0) && t.push(n);
20
- t.length !== y.length && T(t);
17
+ }, [A]);
18
+ let j = (e) => {
19
+ let t = [...C];
20
+ for (let n of e.map((e) => e.trim())) n && !t.includes(n) && (h?.(n) ?? !0) && t.push(n);
21
+ t.length !== C.length && w(t);
21
22
  };
22
- return /* @__PURE__ */ c("div", {
23
- className: e("zen__tag-input", t, "flex h-auto max-h-36 min-h-10 w-full cursor-text flex-col gap-1.5 py-1.5", "has-[input:focus-visible]:border-glow/60 has-[input:focus-visible]:bg-tint/[0.05] has-[input:focus-visible]:shadow-glow-focus has-[input:focus-visible]:[--glow-border-color:transparent]", h && "cursor-not-allowed opacity-50", m),
23
+ return /* @__PURE__ */ d("div", {
24
+ className: e("zen__tag-input", i, "flex h-auto max-h-36 min-h-10 w-full cursor-text flex-col gap-1.5 py-1.5", "has-[input:focus-visible]:border-glow/60 has-[input:focus-visible]:bg-tint/[0.05] has-[input:focus-visible]:shadow-glow-focus has-[input:focus-visible]:[--glow-border-color:transparent]", v && "cursor-not-allowed opacity-50", _),
24
25
  onClick: (e) => e.currentTarget.querySelector("input")?.focus(),
25
- children: [w > 0 && /* @__PURE__ */ s("div", {
26
- ref: C,
27
- className: "flex min-h-0 flex-wrap gap-1.5 overflow-y-auto",
28
- children: y.map((e) => /* @__PURE__ */ c("span", {
29
- className: "zen__tag bg-primary/12 text-foreground inline-flex items-center gap-1 rounded-md py-0.5 pr-1 pl-2 text-xs shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.25)]",
30
- children: [e, /* @__PURE__ */ s("button", {
31
- type: "button",
32
- disabled: h,
33
- "aria-label": p(e),
34
- onClick: () => T(y.filter((t) => t !== e)),
35
- className: "text-muted-foreground hover:text-foreground hover:bg-tint/10 focus-visible:ring-ring/50 touch-target grid size-4 cursor-pointer place-items-center rounded-sm outline-hidden focus-visible:ring-2",
36
- children: /* @__PURE__ */ s(r, { className: "size-3" })
37
- })]
38
- }, e))
39
- }), /* @__PURE__ */ s("input", {
40
- ...g,
41
- ...S,
42
- disabled: h,
43
- value: b,
44
- onChange: (e) => x(e.target.value),
45
- onKeyDown: (e) => {
46
- g.onKeyDown?.(e), !(e.defaultPrevented || e.nativeEvent.isComposing) && ((e.key === "Enter" || e.key === ",") && b.trim() ? (e.preventDefault(), E([b]), x("")) : e.key === "Backspace" && !b && y.length && (e.preventDefault(), x(y[y.length - 1]), T(y.slice(0, -1))));
47
- },
48
- onBlur: (e) => {
49
- g.onBlur?.(e), b.trim() && (E([b]), x(""));
50
- },
51
- onPaste: (e) => {
52
- g.onPaste?.(e);
53
- let t = e.clipboardData.getData("text");
54
- !e.defaultPrevented && /[,\n]/.test(t) && (e.preventDefault(), E(t.split(/[,\n]/)));
55
- },
56
- className: "h-7 w-full shrink-0 bg-transparent outline-hidden placeholder:text-[color:oklch(var(--muted-foreground)/var(--zen-placeholder))]"
57
- })]
26
+ children: [
27
+ A > 0 && /* @__PURE__ */ u("div", {
28
+ ref: k,
29
+ className: "flex min-h-0 flex-wrap gap-1.5 overflow-y-auto",
30
+ children: C.map((e) => /* @__PURE__ */ d("span", {
31
+ className: "zen__tag bg-primary/12 text-foreground inline-flex items-center gap-1 rounded-md py-0.5 ps-2 pe-1 text-xs shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.25)]",
32
+ children: [e, /* @__PURE__ */ u("button", {
33
+ type: "button",
34
+ disabled: v,
35
+ "aria-label": S(e),
36
+ onClick: () => w(C.filter((t) => t !== e)),
37
+ className: "text-muted-foreground hover:text-foreground hover:bg-tint/10 touch-target focus-ring grid size-4 cursor-pointer place-items-center rounded-sm outline-hidden",
38
+ children: /* @__PURE__ */ u(o, { className: "size-3" })
39
+ })]
40
+ }, e))
41
+ }),
42
+ /* @__PURE__ */ u("input", {
43
+ ...b,
44
+ ...O,
45
+ disabled: v,
46
+ value: E,
47
+ onChange: (e) => D(e.target.value),
48
+ onKeyDown: (e) => {
49
+ b.onKeyDown?.(e), !(e.defaultPrevented || e.nativeEvent.isComposing) && ((e.key === "Enter" || e.key === ",") && E.trim() ? (e.preventDefault(), j([E]), D("")) : e.key === "Backspace" && !E && C.length && (e.preventDefault(), D(C[C.length - 1]), w(C.slice(0, -1))));
50
+ },
51
+ onBlur: (e) => {
52
+ b.onBlur?.(e), E.trim() && (j([E]), D(""));
53
+ },
54
+ onPaste: (e) => {
55
+ b.onPaste?.(e);
56
+ let t = e.clipboardData.getData("text");
57
+ !e.defaultPrevented && /[,\n]/.test(t) && (e.preventDefault(), j(t.split(/[,\n]/)));
58
+ },
59
+ className: "h-7 w-full shrink-0 bg-transparent outline-hidden placeholder:text-[color:oklch(var(--muted-foreground)/var(--zen-placeholder))]"
60
+ }),
61
+ /* @__PURE__ */ u(a, {
62
+ name: y,
63
+ value: C,
64
+ onReset: T
65
+ })
66
+ ]
58
67
  });
59
68
  }
60
69
  //#endregion
61
- export { l as default };
70
+ export { f as default };
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { FIELD as t } from "../utils/styles.js";
4
- import { useFieldProps as n } from "../field/index.js";
3
+ import { useFieldProps as t } from "../field/index.js";
4
+ import { FIELD as n } from "../utils/styles.js";
5
5
  import { jsx as r } from "react/jsx-runtime";
6
6
  //#region packages/textarea/index.tsx
7
7
  function i(i) {
8
- let { className: a, ...o } = i, s = n(o);
8
+ let { className: a, ...o } = i, s = t(o);
9
9
  return /* @__PURE__ */ r("textarea", {
10
- className: e("zen__textarea", t.replace("h-10", ""), "h-32 w-full resize-y py-2", "read-only:text-foreground read-only:cursor-default read-only:border-none! read-only:bg-transparent read-only:shadow-none! read-only:outline-hidden!", a),
10
+ className: e("zen__textarea", n.replace("h-10", ""), "h-32 w-full resize-y py-2", "read-only:text-foreground read-only:cursor-default read-only:border-none! read-only:bg-transparent read-only:shadow-none! read-only:outline-hidden!", a),
11
11
  ...o,
12
12
  ...s
13
13
  });
@@ -1,5 +1,5 @@
1
1
  import { Appearance } from '../utils/theme';
2
- import { RefObject } from 'react';
2
+ import { ComponentProps, RefObject } from 'react';
3
3
  /** The inline script ThemeScript renders (for frameworks that take a raw string). */
4
4
  export declare const themeScript: (storageKey?: string) => string;
5
5
  /**
@@ -15,23 +15,24 @@ export declare function ThemeScript({ storageKey }: {
15
15
  *
16
16
  * On its own, it switches <html>'s class and remembers the choice (localStorage):
17
17
  * add ThemeScript to <head> to apply it on the next visit. Give it `value` and
18
- * `onChange` and the theme is yours: it shows `value` and leaves applying and
19
- * storing the choice to `onChange` (in your state, a database, a cookie…).
18
+ * `onValueChange` and the theme is yours: it shows `value` and leaves applying and
19
+ * storing the choice to `onValueChange` (in your state, a database, a cookie…).
20
20
  * With `target` too, it switches the theme of one element (a panel, a preview),
21
21
  * and the water stays inside it.
22
22
  */
23
- export default function ThemeToggle({ value, onChange, target, storageKey, className }: ThemeToggleProps): import('react').JSX.Element;
24
- export interface ThemeToggleProps {
23
+ export default function ThemeToggle({ value, onValueChange, target, storageKey, className, ...rest }: ThemeToggleProps): import('react').JSX.Element;
24
+ /** Other props (aria-*, data-*, an id) go on the button. */
25
+ export interface ThemeToggleProps extends Omit<ComponentProps<'button'>, 'value' | 'onClick'> {
25
26
  /**
26
- * The theme, when you keep it: the toggle shows it, and `onChange` must apply
27
+ * The theme, when you keep it: the toggle shows it, and `onValueChange` must apply
27
28
  * the new one (by the end of a synchronous render and its effects). Without it,
28
29
  * the toggle switches <html>'s class itself.
29
30
  */
30
31
  value?: Appearance;
31
32
  /** Called with the theme switched to. */
32
- onChange?: (theme: Appearance) => void;
33
+ onValueChange?: (theme: Appearance) => void;
33
34
  /**
34
- * The element whose theme `onChange` switches, when it's not the page (a panel
35
+ * The element whose theme `onValueChange` switches, when it's not the page (a panel
35
36
  * with its own .dark or .light): the wave plays inside it. Needs `value`.
36
37
  */
37
38
  target?: RefObject<HTMLElement | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/theme-toggle/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAC;AAG7D,qFAAqF;AACrF,eAAO,MAAM,WAAW,GAAI,mBAAoB,WAC4I,CAAC;AAE7L;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,UAAoB,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE5E;AAiBD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAoB,EAAE,SAAS,EAAE,EAAE,gBAAgB,+BA4CjH;AAED,MAAM,WAAW,gBAAgB;IAC7B;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACvC,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/theme-toggle/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAC;AAGlF,qFAAqF;AACrF,eAAO,MAAM,WAAW,GAAI,mBAAoB,WAC4I,CAAC;AAE7L;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,UAAoB,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE5E;AAiBD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAChC,KAAK,EACL,aAAa,EACb,MAAM,EACN,UAAoB,EACpB,SAAS,EACT,GAAG,IAAI,EACV,EAAE,gBAAgB,+BA8ClB;AAED,4DAA4D;AAC5D,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzF;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,yCAAyC;IACzC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACvC,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -1,50 +1,52 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import t from "../icons/micro/moon.js";
4
- import n from "../icons/micro/sun.js";
5
- import { prepareThemeWave as r, themeWave as i } from "../utils/theme-wave.js";
6
- import { useSyncExternalStore as a } from "react";
7
- import { flushSync as o } from "react-dom";
3
+ import { useMessages as t } from "../locale-provider/index.js";
4
+ import n from "../icons/micro/moon.js";
5
+ import r from "../icons/micro/sun.js";
6
+ import { prepareThemeWave as i, themeWave as a } from "../utils/theme-wave.js";
7
+ import { useSyncExternalStore as o } from "react";
8
8
  import { jsx as s } from "react/jsx-runtime";
9
+ import { flushSync as c } from "react-dom";
9
10
  //#region packages/theme-toggle/index.tsx
10
- var c = (e = "theme") => `try{var t=localStorage.getItem(${JSON.stringify(e)}),r=document.documentElement;if(t==='light'||t==='dark'){r.classList.remove('light','dark');r.classList.add(t)}}catch(e){}`;
11
- function l({ storageKey: e = "theme" }) {
12
- return /* @__PURE__ */ s("script", { dangerouslySetInnerHTML: { __html: c(e) } });
11
+ var l = (e = "theme") => `try{var t=localStorage.getItem(${JSON.stringify(e)}),r=document.documentElement;if(t==='light'||t==='dark'){r.classList.remove('light','dark');r.classList.add(t)}}catch(e){}`;
12
+ function u({ storageKey: e = "theme" }) {
13
+ return /* @__PURE__ */ s("script", { dangerouslySetInnerHTML: { __html: l(e) } });
13
14
  }
14
- var u = /* @__PURE__ */ new Set();
15
- function d(e) {
16
- u.add(e);
15
+ var d = /* @__PURE__ */ new Set();
16
+ function f(e) {
17
+ d.add(e);
17
18
  let t = new MutationObserver(e);
18
19
  return t.observe(document.documentElement, {
19
20
  attributes: !0,
20
21
  attributeFilter: ["class"]
21
22
  }), () => {
22
- u.delete(e), t.disconnect();
23
+ d.delete(e), t.disconnect();
23
24
  };
24
25
  }
25
- var f = () => document.documentElement.classList.contains("light") ? "light" : "dark";
26
- function p({ value: c, onChange: l, target: p, storageKey: m = "theme", className: h }) {
27
- let g = a(d, f, () => "dark"), _ = c ?? g, v = _ === "dark" ? "light" : "dark";
26
+ var p = () => document.documentElement.classList.contains("light") ? "light" : "dark";
27
+ function m({ value: l, onValueChange: u, target: m, storageKey: h = "theme", className: g, ..._ }) {
28
+ let v = o(f, p, () => "dark"), y = l ?? v, b = y === "dark" ? "light" : "dark", x = t();
28
29
  return /* @__PURE__ */ s("button", {
29
30
  type: "button",
30
- "aria-label": `Switch to ${v} theme`,
31
- onPointerEnter: r,
32
- onFocus: r,
33
- onClick: (e) => i(() => {
34
- if (c === void 0) {
31
+ "aria-label": b === "dark" ? x.switchToDark : x.switchToLight,
32
+ ..._,
33
+ onPointerEnter: i,
34
+ onFocus: i,
35
+ onClick: (e) => a(() => {
36
+ if (l === void 0) {
35
37
  let e = document.documentElement;
36
- e.classList.remove("dark", "light"), e.classList.add(v);
38
+ e.classList.remove("dark", "light"), e.classList.add(b);
37
39
  try {
38
- localStorage.setItem(m, v);
40
+ localStorage.setItem(h, b);
39
41
  } catch {}
40
42
  }
41
- o(() => {
42
- l?.(v), u.forEach((e) => e());
43
+ c(() => {
44
+ u?.(b), d.forEach((e) => e());
43
45
  });
44
- }, e.currentTarget, p?.current),
45
- className: e("zen__theme-toggle text-muted-foreground hover:bg-tint/[0.06] hover:text-foreground focus-visible:ring-ring/50 grid size-9 cursor-pointer place-items-center rounded-lg outline-hidden focus-visible:ring-2", h),
46
- children: s(_ === "dark" ? t : n, { className: "size-4" })
46
+ }, e.currentTarget, m?.current),
47
+ className: e("zen__theme-toggle text-muted-foreground hover:bg-tint/[0.06] hover:text-foreground grid size-10 cursor-pointer place-items-center rounded-lg outline-hidden focus-ring", g),
48
+ children: s(y === "dark" ? n : r, { className: "size-4" })
47
49
  });
48
50
  }
49
51
  //#endregion
50
- export { l as ThemeScript, p as default, c as themeScript };
52
+ export { u as ThemeScript, m as default, l as themeScript };