@rinzai/zen 0.14.0 → 0.16.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 (225) hide show
  1. package/CHANGELOG.md +153 -0
  2. package/README.md +16 -1
  3. package/dist/animated-number/index.js +14 -14
  4. package/dist/breadcrumbs/index.js +14 -14
  5. package/dist/calendar/index.js +29 -29
  6. package/dist/calendar-heatmap/index.js +12 -12
  7. package/dist/canvas/index.js +19 -19
  8. package/dist/carousel/index.d.ts.map +1 -1
  9. package/dist/carousel/index.js +29 -29
  10. package/dist/chart/index.js +7 -7
  11. package/dist/code-block/index.js +5 -5
  12. package/dist/collapse/index.js +6 -6
  13. package/dist/color-picker/index.js +10 -10
  14. package/dist/combobox/index.js +61 -61
  15. package/dist/command-palette/index.js +5 -5
  16. package/dist/confirm-dialog/index.js +4 -4
  17. package/dist/date-picker/index.js +15 -15
  18. package/dist/dialog/index.d.ts.map +1 -1
  19. package/dist/dialog/index.js +45 -65
  20. package/dist/docs/README.md +205 -0
  21. package/dist/docs/accordion.md +122 -0
  22. package/dist/docs/alert.md +69 -0
  23. package/dist/docs/animated-number.md +105 -0
  24. package/dist/docs/avatar.md +91 -0
  25. package/dist/docs/backdrop.md +94 -0
  26. package/dist/docs/badge.md +37 -0
  27. package/dist/docs/breadcrumbs.md +44 -0
  28. package/dist/docs/button-group.md +76 -0
  29. package/dist/docs/button.md +131 -0
  30. package/dist/docs/calendar-heatmap.md +73 -0
  31. package/dist/docs/calendar.md +101 -0
  32. package/dist/docs/canvas.md +584 -0
  33. package/dist/docs/card.md +180 -0
  34. package/dist/docs/carousel.md +162 -0
  35. package/dist/docs/chart.md +325 -0
  36. package/dist/docs/checkbox.md +88 -0
  37. package/dist/docs/chip.md +52 -0
  38. package/dist/docs/code-block.md +116 -0
  39. package/dist/docs/code-input.md +52 -0
  40. package/dist/docs/collapse.md +46 -0
  41. package/dist/docs/color-picker.md +145 -0
  42. package/dist/docs/combobox.md +208 -0
  43. package/dist/docs/command-palette.md +65 -0
  44. package/dist/docs/date-picker.md +167 -0
  45. package/dist/docs/dialog.md +271 -0
  46. package/dist/docs/disclosure.md +88 -0
  47. package/dist/docs/editable-cell.md +90 -0
  48. package/dist/docs/empty-state.md +46 -0
  49. package/dist/docs/field.md +82 -0
  50. package/dist/docs/file-drop.md +44 -0
  51. package/dist/docs/filter-bar.md +66 -0
  52. package/dist/docs/header.md +51 -0
  53. package/dist/docs/hover-card.md +110 -0
  54. package/dist/docs/icon-picker.md +65 -0
  55. package/dist/docs/input-group.md +89 -0
  56. package/dist/docs/input.md +33 -0
  57. package/dist/docs/inset.md +57 -0
  58. package/dist/docs/kbd.md +34 -0
  59. package/dist/docs/keypad.md +51 -0
  60. package/dist/docs/load-more.md +66 -0
  61. package/dist/docs/locale-provider.md +99 -0
  62. package/dist/docs/marquee.md +86 -0
  63. package/dist/docs/menu.md +456 -0
  64. package/dist/docs/meter.md +102 -0
  65. package/dist/docs/money-input.md +169 -0
  66. package/dist/docs/month-picker.md +80 -0
  67. package/dist/docs/navigation-menu.md +157 -0
  68. package/dist/docs/number-field.md +129 -0
  69. package/dist/docs/page-header.md +44 -0
  70. package/dist/docs/page-transition.md +93 -0
  71. package/dist/docs/pagination.md +42 -0
  72. package/dist/docs/pills.md +85 -0
  73. package/dist/docs/player-bar.md +158 -0
  74. package/dist/docs/popover.md +200 -0
  75. package/dist/docs/progress-ring.md +70 -0
  76. package/dist/docs/radio-cards.md +82 -0
  77. package/dist/docs/radio-group.md +86 -0
  78. package/dist/docs/range-slider.md +64 -0
  79. package/dist/docs/repeat-picker.md +44 -0
  80. package/dist/docs/resizable.md +107 -0
  81. package/dist/docs/seek-bar.md +97 -0
  82. package/dist/docs/segmented.md +89 -0
  83. package/dist/docs/select.md +148 -0
  84. package/dist/docs/separator.md +76 -0
  85. package/dist/docs/side-nav.md +75 -0
  86. package/dist/docs/skeleton.md +89 -0
  87. package/dist/docs/slider.md +87 -0
  88. package/dist/docs/sortable.md +244 -0
  89. package/dist/docs/sparkline.md +56 -0
  90. package/dist/docs/spinner.md +69 -0
  91. package/dist/docs/status-pill.md +81 -0
  92. package/dist/docs/stepper.md +59 -0
  93. package/dist/docs/tab-bar.md +78 -0
  94. package/dist/docs/table-of-contents.md +43 -0
  95. package/dist/docs/table.md +714 -0
  96. package/dist/docs/tabs.md +140 -0
  97. package/dist/docs/tag-input.md +45 -0
  98. package/dist/docs/textarea.md +25 -0
  99. package/dist/docs/theme-toggle.md +85 -0
  100. package/dist/docs/theming.md +193 -0
  101. package/dist/docs/time-field.md +71 -0
  102. package/dist/docs/timeline.md +50 -0
  103. package/dist/docs/toast.md +53 -0
  104. package/dist/docs/toggle-group.md +83 -0
  105. package/dist/docs/toggle.md +38 -0
  106. package/dist/docs/toolbar.md +97 -0
  107. package/dist/docs/tooltip.md +102 -0
  108. package/dist/docs/tree.md +295 -0
  109. package/dist/docs/trend.md +50 -0
  110. package/dist/filter-bar/index.js +6 -6
  111. package/dist/header/index.js +6 -6
  112. package/dist/icon-picker/index.js +5 -5
  113. package/dist/icons/arrow-path.d.ts +3 -0
  114. package/dist/icons/arrow-path.d.ts.map +1 -0
  115. package/dist/icons/arrows-right-left.d.ts +3 -0
  116. package/dist/icons/arrows-right-left.d.ts.map +1 -0
  117. package/dist/icons/backward.d.ts +3 -0
  118. package/dist/icons/backward.d.ts.map +1 -0
  119. package/dist/icons/forward.d.ts +3 -0
  120. package/dist/icons/forward.d.ts.map +1 -0
  121. package/dist/icons/heart-solid.d.ts +3 -0
  122. package/dist/icons/heart-solid.d.ts.map +1 -0
  123. package/dist/icons/heart.d.ts +3 -0
  124. package/dist/icons/heart.d.ts.map +1 -0
  125. package/dist/icons/musical-note.d.ts +3 -0
  126. package/dist/icons/musical-note.d.ts.map +1 -0
  127. package/dist/icons/pause.d.ts +3 -0
  128. package/dist/icons/pause.d.ts.map +1 -0
  129. package/dist/icons/play.d.ts +3 -0
  130. package/dist/icons/play.d.ts.map +1 -0
  131. package/dist/icons/queue-list.d.ts +3 -0
  132. package/dist/icons/queue-list.d.ts.map +1 -0
  133. package/dist/icons/speaker-wave.d.ts +3 -0
  134. package/dist/icons/speaker-wave.d.ts.map +1 -0
  135. package/dist/icons/speaker-x-mark.d.ts +3 -0
  136. package/dist/icons/speaker-x-mark.d.ts.map +1 -0
  137. package/dist/index.d.ts +7 -1
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/keypad/index.js +5 -5
  140. package/dist/lib.js +86 -80
  141. package/dist/load-more/index.js +5 -5
  142. package/dist/marquee/index.d.ts +15 -0
  143. package/dist/marquee/index.d.ts.map +1 -0
  144. package/dist/marquee/index.js +90 -0
  145. package/dist/menu/index.d.ts +7 -1
  146. package/dist/menu/index.d.ts.map +1 -1
  147. package/dist/menu/index.js +222 -178
  148. package/dist/money-input/index.js +54 -54
  149. package/dist/month-picker/index.js +11 -11
  150. package/dist/number-field/index.js +5 -5
  151. package/dist/pagination/index.js +12 -12
  152. package/dist/player-bar/index.d.ts +11 -0
  153. package/dist/player-bar/index.d.ts.map +1 -0
  154. package/dist/player-bar/index.js +17 -0
  155. package/dist/radio-cards/index.d.ts +2 -1
  156. package/dist/radio-cards/index.d.ts.map +1 -1
  157. package/dist/radio-cards/index.js +3 -3
  158. package/dist/range-slider/index.js +11 -11
  159. package/dist/repeat-picker/index.js +5 -5
  160. package/dist/resizable/index.js +22 -22
  161. package/dist/seek-bar/index.d.ts +26 -0
  162. package/dist/seek-bar/index.d.ts.map +1 -0
  163. package/dist/seek-bar/index.js +121 -0
  164. package/dist/segmented/index.d.ts +3 -2
  165. package/dist/segmented/index.d.ts.map +1 -1
  166. package/dist/segmented/index.js +19 -18
  167. package/dist/select/index.js +21 -21
  168. package/dist/slider/index.d.ts +2 -1
  169. package/dist/slider/index.d.ts.map +1 -1
  170. package/dist/sortable/index.d.ts +13 -1
  171. package/dist/sortable/index.d.ts.map +1 -1
  172. package/dist/sortable/index.js +74 -55
  173. package/dist/sortable/shared.js +14 -14
  174. package/dist/sortable/tree.js +17 -17
  175. package/dist/sparkline/index.js +4 -4
  176. package/dist/stepper/index.js +13 -13
  177. package/dist/tab-bar/index.d.ts +4 -2
  178. package/dist/tab-bar/index.d.ts.map +1 -1
  179. package/dist/tab-bar/index.js +24 -19
  180. package/dist/table/index.js +26 -26
  181. package/dist/table/selection.js +9 -9
  182. package/dist/table-of-contents/index.js +11 -11
  183. package/dist/tag-input/index.js +5 -5
  184. package/dist/textarea/index.d.ts +6 -2
  185. package/dist/textarea/index.d.ts.map +1 -1
  186. package/dist/textarea/index.js +2 -1
  187. package/dist/theme-toggle/index.js +4 -4
  188. package/dist/theme.css +143 -0
  189. package/dist/time-field/index.js +21 -21
  190. package/dist/toast/index.d.ts.map +1 -1
  191. package/dist/toast/index.js +41 -41
  192. package/dist/tooltip/index.d.ts +9 -3
  193. package/dist/tooltip/index.d.ts.map +1 -1
  194. package/dist/tooltip/index.js +19 -16
  195. package/dist/tree/index.js +34 -34
  196. package/dist/trend/index.js +5 -5
  197. package/dist/utils/duration.d.ts +3 -0
  198. package/dist/utils/duration.d.ts.map +1 -0
  199. package/dist/utils/duration.js +7 -0
  200. package/dist/utils/messages.d.ts +3 -0
  201. package/dist/utils/messages.d.ts.map +1 -1
  202. package/dist/utils/messages.js +4 -1
  203. package/dist/utils/slot.d.ts +5 -2
  204. package/dist/utils/slot.d.ts.map +1 -1
  205. package/dist/utils/slot.js +16 -11
  206. package/dist/utils/swipe.d.ts +7 -0
  207. package/dist/utils/swipe.d.ts.map +1 -1
  208. package/dist/utils/swipe.js +45 -25
  209. package/dist/utils/useAnchoredPopup.d.ts +2 -1
  210. package/dist/utils/useAnchoredPopup.d.ts.map +1 -1
  211. package/dist/utils/useAnchoredPopup.js +10 -5
  212. package/dist/utils/useHeightVar.d.ts +7 -0
  213. package/dist/utils/useHeightVar.d.ts.map +1 -0
  214. package/dist/utils/useHeightVar.js +17 -0
  215. package/dist/utils/useMediaPlayer.d.ts +38 -0
  216. package/dist/utils/useMediaPlayer.d.ts.map +1 -0
  217. package/dist/utils/useMediaPlayer.js +91 -0
  218. package/dist/utils/useMediaSession.d.ts +24 -0
  219. package/dist/utils/useMediaSession.d.ts.map +1 -0
  220. package/dist/utils/useMediaSession.js +76 -0
  221. package/dist/utils/useVirtualList.d.ts +6 -1
  222. package/dist/utils/useVirtualList.d.ts.map +1 -1
  223. package/dist/utils/useVirtualList.js +12 -12
  224. package/dist/zen.css +1 -1
  225. package/package.json +4 -2
@@ -1,33 +1,40 @@
1
1
  "use client";
2
- import e from "../icons/micro/check.js";
3
- import t from "../icons/micro/chevron-right.js";
4
- import { cx as n } from "../utils/cx.js";
5
- import { readingKey as r } from "../utils/direction.js";
6
- import { useTypeahead as i } from "../utils/typeahead.js";
7
- import { useGraphicsMode as a } from "../utils/graphics.js";
8
- import { useMergedRefs as o } from "../utils/refs.js";
9
- import { moveFocus as s, rovingItems as c, useRovingTabIndex as l } from "../utils/roving.js";
10
- import { Slot as u } from "../utils/slot.js";
11
- import { useControllable as d } from "../utils/useControllable.js";
12
- import { anchorFor as f, anchoredStyle as p, useAnchoredPopup as m } from "../utils/useAnchoredPopup.js";
13
- import { createContext as h, useContext as g, useEffect as _, useId as v, useLayoutEffect as y, useRef as b, useState as x } from "react";
14
- import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
15
- import { createPortal as T } from "react-dom";
2
+ import { useMessages as e } from "../locale-provider/index.js";
3
+ import t from "../icons/micro/check.js";
4
+ import n from "../icons/micro/chevron-right.js";
5
+ import { cx as r } from "../utils/cx.js";
6
+ import { readingKey as i } from "../utils/direction.js";
7
+ import { useTypeahead as a } from "../utils/typeahead.js";
8
+ import { useGraphicsMode as o } from "../utils/graphics.js";
9
+ import { useMergedRefs as s } from "../utils/refs.js";
10
+ import { moveFocus as c, rovingItems as l, useRovingTabIndex as u } from "../utils/roving.js";
11
+ import { Slot as d } from "../utils/slot.js";
12
+ import { useSheetSwipe as f } from "../utils/swipe.js";
13
+ import { useControllable as p } from "../utils/useControllable.js";
14
+ import { anchorFor as m, anchoredStyle as h, useAnchoredPopup as g } from "../utils/useAnchoredPopup.js";
15
+ import { createContext as _, useContext as v, useEffect as y, useId as b, useLayoutEffect as x, useRef as S, useState as C } from "react";
16
+ import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
17
+ import { createPortal as D } from "react-dom";
16
18
  //#region packages/menu/index.tsx
17
- var E = typeof window > "u" ? _ : y, D = h(null), O = "[data-zen-menubar-trigger]", k = h(() => {}), A = h(null);
18
- function j(e) {
19
- let t = g(A);
19
+ var O = typeof window > "u" ? y : x, k = _(null), A = "[data-zen-menubar-trigger]", j = _(() => {}), M = _(!1), N = (e) => !!e?.hasAttribute("data-zen-sheet") && getComputedStyle(e).getPropertyValue("--zen-sheet").trim() === "1";
20
+ function P(e, t) {
21
+ let n = v(j), [r, i] = C(!1);
22
+ O(() => i(t && N(e.current)), [t, e]), f(e, r ? "bottom" : void 0, n);
23
+ }
24
+ var F = _(null);
25
+ function I(e) {
26
+ let t = v(F);
20
27
  if (!t) throw Error(`<${e}> must be inside <Menu>`);
21
28
  return t;
22
29
  }
23
- function M({ onOpenChange: e, children: t }) {
24
- a();
25
- let n = v(), [r, i] = x(null), o = b(null), s = b(!1), c = b(null), l = m({ onOpenChange: (t) => {
30
+ function L({ onOpenChange: e, children: t }) {
31
+ o();
32
+ let n = b(), [r, i] = C(null), a = S(null), s = S(!1), c = S(null), l = g({ onOpenChange: (t) => {
26
33
  s.current = t;
27
- let n = l.popupRef.current, r = n ? R(n) : [], i = c.current;
28
- if (c.current = null, t ? (i ? r[i === "first" ? 0 : r.length - 1] : n)?.focus() : u(), !t && o.current) {
34
+ let n = l.popupRef.current, r = n ? W(n) : [], i = c.current;
35
+ if (c.current = null, t ? (i ? r[i === "first" ? 0 : r.length - 1] : n)?.focus() : u(), !t && a.current) {
29
36
  let e = document.activeElement;
30
- (!e || e === document.body || l.popupRef.current?.contains(e)) && o.current.focus(), o.current = null;
37
+ (!e || e === document.body || l.popupRef.current?.contains(e)) && a.current.focus(), a.current = null;
31
38
  }
32
39
  e?.(t);
33
40
  } }), u = () => {
@@ -36,22 +43,22 @@ function M({ onOpenChange: e, children: t }) {
36
43
  s.current || i(null);
37
44
  });
38
45
  };
39
- E(() => {
46
+ O(() => {
40
47
  if (r && (l.setOpen(!0), r.pointerId !== void 0)) try {
41
48
  l.popupRef.current?.setPointerCapture(r.pointerId);
42
49
  } catch {}
43
50
  }, [r]);
44
51
  let d = (e) => {
45
- o.current = document.activeElement instanceof HTMLElement ? document.activeElement : null, i({ ...e });
52
+ a.current = document.activeElement instanceof HTMLElement ? document.activeElement : null, i({ ...e });
46
53
  }, f = (e) => {
47
54
  let t = l.popupRef.current;
48
55
  if (l.open && t) {
49
- R(t).at(e === "first" ? 0 : -1)?.focus();
56
+ W(t).at(e === "first" ? 0 : -1)?.focus();
50
57
  return;
51
58
  }
52
- c.current = e, o.current = document.getElementById(n), l.setOpen(!0);
53
- }, p = g(D);
54
- return _(() => (p?.set(n, f), () => void p?.delete(n))), /* @__PURE__ */ C(A.Provider, {
59
+ c.current = e, a.current = document.getElementById(n), l.setOpen(!0);
60
+ }, p = v(k);
61
+ return y(() => (p?.set(n, f), () => void p?.delete(n))), /* @__PURE__ */ T(F.Provider, {
55
62
  value: {
56
63
  popup: l,
57
64
  triggerId: n,
@@ -59,14 +66,14 @@ function M({ onOpenChange: e, children: t }) {
59
66
  openAt: d,
60
67
  openFrom: f
61
68
  },
62
- children: /* @__PURE__ */ C(k.Provider, {
69
+ children: /* @__PURE__ */ T(j.Provider, {
63
70
  value: () => l.setOpen(!1),
64
71
  children: t
65
72
  })
66
73
  });
67
74
  }
68
- function N({ asChild: e, style: t, onKeyDown: r, onPointerEnter: i, children: a, ...o }) {
69
- let { popup: s, triggerId: c, point: l, openFrom: d } = j("MenuTrigger"), f = !!g(D), p = {
75
+ function R({ asChild: e, style: t, onKeyDown: n, onPointerEnter: i, children: a, ...o }) {
76
+ let { popup: s, triggerId: c, point: l, openFrom: u } = I("MenuTrigger"), f = !!v(k), p = {
70
77
  id: c,
71
78
  "aria-haspopup": "menu",
72
79
  ...s.triggerProps,
@@ -79,13 +86,13 @@ function N({ asChild: e, style: t, onKeyDown: r, onPointerEnter: i, children: a,
79
86
  "data-zen-menubar-trigger": ""
80
87
  },
81
88
  ...o,
82
- className: n(f && ne, o.className),
89
+ className: r(f && le, o.className),
83
90
  style: {
84
91
  ...s.triggerProps.style,
85
92
  ...t
86
93
  },
87
94
  onKeyDown: (e) => {
88
- r?.(e), !(e.defaultPrevented || e.key !== "ArrowDown" && e.key !== "ArrowUp") && (e.preventDefault(), d(e.key === "ArrowDown" ? "first" : "last"));
95
+ n?.(e), !(e.defaultPrevented || e.key !== "ArrowDown" && e.key !== "ArrowUp") && (e.preventDefault(), u(e.key === "ArrowDown" ? "first" : "last"));
89
96
  },
90
97
  onPointerEnter: (e) => {
91
98
  i?.(e);
@@ -93,125 +100,138 @@ function N({ asChild: e, style: t, onKeyDown: r, onPointerEnter: i, children: a,
93
100
  t && !s.open && e.pointerType !== "touch" && t.querySelector("[data-zen-menubar-trigger][data-popup-open]") && (s.setOpen(!0), e.currentTarget.focus());
94
101
  }
95
102
  };
96
- return e ? /* @__PURE__ */ C(u, {
103
+ return e ? /* @__PURE__ */ T(d, {
97
104
  ...p,
98
105
  children: a
99
- }) : /* @__PURE__ */ C("button", {
106
+ }) : /* @__PURE__ */ T("button", {
100
107
  type: "button",
101
108
  ...p,
102
- className: n("cursor-pointer", p.className),
109
+ className: r("cursor-pointer", p.className),
103
110
  children: a
104
111
  });
105
112
  }
106
- function P({ align: e, offset: t, ref: i, className: a, style: s, children: l, ...u }) {
107
- let { popup: d, triggerId: f, point: m } = j("MenuContent"), h = o(d.popupRef, i), _ = g(D);
113
+ function z({ align: e, offset: t, sheet: n, ref: a, className: o, style: c, children: u, ...d }) {
114
+ let { popup: f, triggerId: p, point: m } = I("MenuContent"), g = s(f.popupRef, a);
115
+ P(f.popupRef, !!n && f.open);
116
+ let _ = v(k);
108
117
  e ??= m || _ ? "start" : "end", t ??= m ? 2 : 6;
109
- let v = z(), y = (e) => {
118
+ let y = G(), b = (e) => {
110
119
  if (e.defaultPrevented || e.target.closest("[role=\"menu\"]") !== e.currentTarget) return;
111
- let t = r(e.key, e.currentTarget);
120
+ let t = i(e.key, e.currentTarget);
112
121
  if (t !== "ArrowLeft" && t !== "ArrowRight") return;
113
- let n = document.getElementById(f), i = n?.closest("[role=\"menubar\"]");
114
- if (!n || !i) return;
115
- let a = c(i, O), o = a[(a.indexOf(n) + (t === "ArrowRight" ? 1 : -1) + a.length) % a.length];
122
+ let n = document.getElementById(p), r = n?.closest("[role=\"menubar\"]");
123
+ if (!n || !r) return;
124
+ let a = l(r, A), o = a[(a.indexOf(n) + (t === "ArrowRight" ? 1 : -1) + a.length) % a.length];
116
125
  o && o !== n && (e.preventDefault(), o.focus(), _?.get(o.id)?.("first"));
117
126
  };
118
- return /* @__PURE__ */ C("div", {
119
- "aria-labelledby": m ? void 0 : f,
120
- ...u,
121
- ...d.popupProps,
122
- ref: h,
127
+ return /* @__PURE__ */ E("div", {
128
+ "aria-labelledby": m ? void 0 : p,
129
+ ...d,
130
+ ...f.popupProps,
131
+ ref: g,
123
132
  role: "menu",
124
133
  tabIndex: -1,
134
+ "data-zen-sheet": n || void 0,
125
135
  onKeyDown: (e) => {
126
- u.onKeyDown?.(e), v(e), _ && y(e);
136
+ d.onKeyDown?.(e), y(e), _ && b(e);
127
137
  },
128
138
  style: {
129
- ...p(d.id, {
139
+ ...h(f.id, {
130
140
  align: e,
131
141
  offset: t
132
142
  }),
133
- ...s
143
+ ...c
134
144
  },
135
- className: n("zen__popover glass glass-blur text-foreground min-w-44 rounded-xl p-1.5 outline-hidden", a),
136
- children: l
145
+ className: r("zen__popover glass glass-blur text-foreground min-w-44 rounded-xl p-1.5 outline-hidden", o),
146
+ children: [n && /* @__PURE__ */ T(B, {}), /* @__PURE__ */ T(M.Provider, {
147
+ value: !!n,
148
+ children: u
149
+ })]
137
150
  });
138
151
  }
139
- var F = 500, I = 8;
140
- function L({ asChild: e, disabled: t, className: r, onContextMenu: i, onPointerDown: a, onClickCapture: o, children: s, ...c }) {
141
- let { popup: l, point: d, openAt: p } = j("MenuContextTrigger"), m = v(), h = d?.from === m, g = b(null), y = b(!1), x = () => {
152
+ function B() {
153
+ return /* @__PURE__ */ T("div", {
154
+ "aria-hidden": !0,
155
+ className: "zen__sheet-only bg-tint/20 mx-auto mt-0.5 mb-2 h-1 w-10 rounded-full"
156
+ });
157
+ }
158
+ var V = 500, H = 8;
159
+ function U({ asChild: e, disabled: t, className: n, onContextMenu: i, onPointerDown: a, onClickCapture: o, children: s, ...c }) {
160
+ let { popup: l, point: u, openAt: f } = I("MenuContextTrigger"), p = b(), h = u?.from === p, g = S(null), _ = S(!1), v = () => {
142
161
  g.current && clearTimeout(g.current.timer), g.current = null;
143
162
  };
144
- _(() => x, []);
145
- let E = {
163
+ y(() => v, []);
164
+ let x = {
146
165
  ...c,
147
- className: n("[-webkit-touch-callout:none]", r),
166
+ className: r("[-webkit-touch-callout:none]", n),
148
167
  "data-popup-open": h && l.open || void 0,
149
168
  onContextMenu: (e) => {
150
- if (i?.(e), !(t || e.defaultPrevented) && (e.preventDefault(), x(), !l.open)) {
169
+ if (i?.(e), !(t || e.defaultPrevented) && (e.preventDefault(), v(), !l.open)) {
151
170
  if (e.clientX === 0 && e.clientY === 0) {
152
171
  let t = e.target.getBoundingClientRect();
153
- p({
172
+ f({
154
173
  x: t.left,
155
174
  y: t.bottom,
156
- from: m
175
+ from: p
157
176
  });
158
177
  } else {
159
178
  let t = e.nativeEvent, n = "pointerId" in t && e.buttons ? t.pointerId : void 0;
160
- p({
179
+ f({
161
180
  x: e.clientX,
162
181
  y: e.clientY,
163
- from: m,
182
+ from: p,
164
183
  pointerId: n
165
184
  });
166
185
  }
167
186
  }
168
187
  },
169
188
  onPointerDown: (e) => {
170
- if (a?.(e), y.current = !1, t || e.pointerType !== "touch" || !e.isPrimary) return;
189
+ if (a?.(e), _.current = !1, t || e.pointerType !== "touch" || !e.isPrimary) return;
171
190
  let n = {
172
191
  x: e.clientX,
173
192
  y: e.clientY,
174
- from: m,
193
+ from: p,
175
194
  pointerId: e.pointerId
176
195
  }, r = e.currentTarget, i = (e) => {
177
- Math.hypot(e.clientX - n.x, e.clientY - n.y) > I && o();
196
+ Math.hypot(e.clientX - n.x, e.clientY - n.y) > H && o();
178
197
  }, o = () => {
179
- x(), r.removeEventListener("pointermove", i), r.removeEventListener("pointerup", o), r.removeEventListener("pointercancel", o);
198
+ v(), r.removeEventListener("pointermove", i), r.removeEventListener("pointerup", o), r.removeEventListener("pointercancel", o);
180
199
  };
181
200
  r.addEventListener("pointermove", i), r.addEventListener("pointerup", o), r.addEventListener("pointercancel", o), g.current = {
182
201
  ...n,
183
202
  timer: window.setTimeout(() => {
184
- o(), y.current = !0, l.open || p(n);
185
- }, F)
203
+ o(), _.current = !0, l.open || f(n);
204
+ }, V)
186
205
  };
187
206
  },
188
207
  onClickCapture: (e) => {
189
- o?.(e), y.current && (y.current = !1, e.preventDefault(), e.stopPropagation());
208
+ o?.(e), _.current && (_.current = !1, e.preventDefault(), e.stopPropagation());
190
209
  }
191
- }, D = d && h && T(/* @__PURE__ */ C("span", {
210
+ }, C = u && h && D(/* @__PURE__ */ T("span", {
192
211
  "aria-hidden": !0,
193
- ...f(l.id),
212
+ ...m(l.id),
194
213
  style: {
195
- ...f(l.id).style,
214
+ ...m(l.id).style,
196
215
  position: "fixed",
197
- left: d.x,
198
- top: d.y
216
+ left: u.x,
217
+ top: u.y
199
218
  }
200
219
  }), document.body);
201
- return /* @__PURE__ */ w(S, { children: [C(e ? u : "div", {
202
- ...E,
220
+ return /* @__PURE__ */ E(w, { children: [T(e ? d : "div", {
221
+ ...x,
203
222
  children: s
204
- }), D] });
223
+ }), C] });
205
224
  }
206
- function R(e) {
207
- return Array.from(e.querySelectorAll("[role^=\"menuitem\"]")).filter((t) => t.closest("[role=\"menu\"]") === e && !t.matches(":disabled, [aria-disabled=\"true\"]"));
225
+ function W(e) {
226
+ let t = N(e);
227
+ return Array.from(e.querySelectorAll("[role^=\"menuitem\"]")).filter((n) => n.closest("[role=\"menu\"]") === e && !n.matches(":disabled, [aria-disabled=\"true\"]") && (t || !n.classList.contains("zen__sheet-only")));
208
228
  }
209
- function z() {
210
- let e = i();
229
+ function G() {
230
+ let e = a();
211
231
  return (t) => {
212
232
  let n = t.currentTarget;
213
233
  if (t.target.closest("[role=\"menu\"]") !== n) return;
214
- let r = R(n), i = r.indexOf(document.activeElement), a = r.length - 1, o = e(t);
234
+ let r = W(n), i = r.indexOf(document.activeElement), a = r.length - 1, o = e(t);
215
235
  if (o) {
216
236
  r.find((e) => e.textContent?.trim().toLowerCase().startsWith(o))?.focus();
217
237
  return;
@@ -225,126 +245,128 @@ function z() {
225
245
  s !== void 0 && (t.preventDefault(), r[(s + r.length) % r.length]?.focus());
226
246
  };
227
247
  }
228
- var B = "flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-start text-sm outline-hidden select-none hover:bg-tint/[0.07] focus:bg-tint/[0.07] disabled:cursor-not-allowed disabled:opacity-50";
229
- function V({ icon: e, tone: t = "default", onSelect: r, asChild: i, className: a, children: o, onClick: s, ...c }) {
230
- let l = g(k), d = {
248
+ var K = "flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-start text-sm outline-hidden select-none hover:bg-tint/[0.07] focus:bg-tint/[0.07] disabled:cursor-not-allowed disabled:opacity-50";
249
+ function q({ icon: e, tone: t = "default", onSelect: n, asChild: i, className: a, children: o, onClick: s, ...c }) {
250
+ let l = v(j), u = {
231
251
  ...c,
232
252
  role: "menuitem",
233
253
  tabIndex: -1,
234
- className: n(B, t === "negative" && "text-destructive", a),
254
+ className: r(K, t === "negative" && "text-destructive", a),
235
255
  onClick: (e) => {
236
- s?.(e), l(), r?.();
256
+ s?.(e), l(), n?.();
237
257
  }
238
- };
239
- return i ? /* @__PURE__ */ C(u, {
240
- ...d,
258
+ }, f = e && /* @__PURE__ */ T("span", {
259
+ "aria-hidden": !0,
260
+ className: r("flex shrink-0", t !== "negative" && "text-muted-foreground"),
261
+ children: e
262
+ });
263
+ return i ? /* @__PURE__ */ T(d, {
264
+ ...u,
265
+ before: f,
241
266
  children: o
242
- }) : /* @__PURE__ */ w("button", {
267
+ }) : /* @__PURE__ */ E("button", {
243
268
  type: "button",
244
- ...d,
245
- children: [e && /* @__PURE__ */ C("span", {
246
- "aria-hidden": !0,
247
- className: n("flex shrink-0", t !== "negative" && "text-muted-foreground"),
248
- children: e
249
- }), o]
269
+ ...u,
270
+ children: [f, o]
250
271
  });
251
272
  }
252
- var H = "flex size-4 shrink-0 items-center justify-center";
253
- function U({ checked: t, defaultChecked: r = !1, onCheckedChange: i, className: a, children: o, onClick: s, ...c }) {
254
- let [l, u] = d(t, r, i);
255
- return /* @__PURE__ */ w("button", {
273
+ var J = "flex size-4 shrink-0 items-center justify-center";
274
+ function ee({ checked: e, defaultChecked: n = !1, onCheckedChange: i, className: a, children: o, onClick: s, ...c }) {
275
+ let [l, u] = p(e, n, i);
276
+ return /* @__PURE__ */ E("button", {
256
277
  type: "button",
257
278
  ...c,
258
279
  role: "menuitemcheckbox",
259
280
  "aria-checked": l,
260
281
  tabIndex: -1,
261
- className: n(B, a),
282
+ className: r(K, a),
262
283
  onClick: (e) => {
263
284
  s?.(e), e.defaultPrevented || u(!l);
264
285
  },
265
- children: [/* @__PURE__ */ C("span", {
286
+ children: [/* @__PURE__ */ T("span", {
266
287
  "aria-hidden": !0,
267
- className: H,
268
- children: l && /* @__PURE__ */ C(e, { className: "size-3.5" })
288
+ className: J,
289
+ children: l && /* @__PURE__ */ T(t, { className: "size-3.5" })
269
290
  }), o]
270
291
  });
271
292
  }
272
- var W = h(null);
273
- function G({ value: e, defaultValue: t = null, onValueChange: n, ...r }) {
274
- let [i, a] = d(e, t, n);
275
- return /* @__PURE__ */ C(W.Provider, {
293
+ var Y = _(null);
294
+ function te({ value: e, defaultValue: t = null, onValueChange: n, ...r }) {
295
+ let [i, a] = p(e, t, n);
296
+ return /* @__PURE__ */ T(Y.Provider, {
276
297
  value: {
277
298
  value: i,
278
299
  select: a
279
300
  },
280
- children: /* @__PURE__ */ C("div", {
301
+ children: /* @__PURE__ */ T("div", {
281
302
  role: "group",
282
303
  ...r
283
304
  })
284
305
  });
285
306
  }
286
- function K({ value: e, className: t, children: r, onClick: i, ...a }) {
287
- let o = g(W);
307
+ function ne({ value: e, className: t, children: n, onClick: i, ...a }) {
308
+ let o = v(Y);
288
309
  if (!o) throw Error("<MenuRadioItem> must be inside <MenuRadioGroup>");
289
310
  let s = o.value === e;
290
- return /* @__PURE__ */ w("button", {
311
+ return /* @__PURE__ */ E("button", {
291
312
  type: "button",
292
313
  ...a,
293
314
  role: "menuitemradio",
294
315
  "aria-checked": s,
295
316
  tabIndex: -1,
296
- className: n(B, t),
317
+ className: r(K, t),
297
318
  onClick: (t) => {
298
319
  i?.(t), t.defaultPrevented || o.select(e);
299
320
  },
300
- children: [/* @__PURE__ */ C("span", {
321
+ children: [/* @__PURE__ */ T("span", {
301
322
  "aria-hidden": !0,
302
- className: H,
303
- children: s && /* @__PURE__ */ C("span", { className: "size-1.5 rounded-full bg-current" })
304
- }), r]
323
+ className: J,
324
+ children: s && /* @__PURE__ */ T("span", { className: "size-1.5 rounded-full bg-current" })
325
+ }), n]
305
326
  });
306
327
  }
307
- var q = h(null);
308
- function J(e) {
309
- let t = g(q);
328
+ var X = _(null);
329
+ function Z(e) {
330
+ let t = v(X);
310
331
  if (!t) throw Error(`<${e}> must be inside <MenuSub>`);
311
332
  return t;
312
333
  }
313
- var Y = 250, X = (e) => {
334
+ var re = 250, ie = (e) => {
314
335
  try {
315
336
  return !!e?.matches(":popover-open");
316
337
  } catch {
317
338
  return !0;
318
339
  }
319
340
  };
320
- function Z({ onOpenChange: e, children: t }) {
321
- let n = b(null), r = v(), i = b(0), a = b(!1), o = m({ onOpenChange: (t) => {
341
+ function ae({ onOpenChange: e, children: t }) {
342
+ let n = S(null), r = b(), i = S(0), a = S(!1), o = g({ onOpenChange: (t) => {
322
343
  let r = o.popupRef.current, i = n.current;
323
- if (t && a.current && r && R(r)[0]?.focus(), a.current = !1, !t && i && X(i.closest("[role=\"menu\"]"))) {
344
+ if (t && a.current && r && W(r)[0]?.focus(), a.current = !1, !t && i && ie(i.closest("[role=\"menu\"]"))) {
324
345
  let e = document.activeElement;
325
346
  (!e || e === document.body || r?.contains(e)) && i.focus();
326
347
  }
327
348
  e?.(t);
328
- } }), s = () => clearTimeout(i.current);
329
- _(() => s, []);
330
- let c = {
349
+ } }), [s, c] = C(""), l = () => clearTimeout(i.current);
350
+ y(() => l, []);
351
+ let u = {
331
352
  popup: o,
353
+ label: s,
332
354
  triggerRef: n,
333
355
  triggerId: r,
334
356
  show: (e) => {
335
- if (s(), o.open) {
336
- e && o.popupRef.current && R(o.popupRef.current)[0]?.focus();
357
+ if (l(), o.open) {
358
+ e && o.popupRef.current && W(o.popupRef.current)[0]?.focus();
337
359
  return;
338
360
  }
339
- a.current = e, o.setOpen(!0);
361
+ a.current = e, c(n.current?.textContent?.trim() ?? ""), o.setOpen(!0);
340
362
  },
341
363
  hideSoon: () => {
342
- s(), i.current = window.setTimeout(() => o.setOpen(!1), Y);
364
+ l(), i.current = window.setTimeout(() => o.setOpen(!1), re);
343
365
  },
344
- stay: s
366
+ stay: l
345
367
  };
346
- return /* @__PURE__ */ C(q.Provider, {
347
- value: c,
368
+ return /* @__PURE__ */ T(X.Provider, {
369
+ value: u,
348
370
  children: t
349
371
  });
350
372
  }
@@ -352,9 +374,9 @@ function Q(e, t) {
352
374
  let n = e.relatedTarget;
353
375
  return n instanceof Node && !!t?.contains(n);
354
376
  }
355
- function $({ icon: e, ref: i, className: a, children: s, onClick: c, onKeyDown: l, onPointerEnter: u, onPointerLeave: d, style: f, ...p }) {
356
- let m = J("MenuSubTrigger"), h = o(m.triggerRef, i), { popoverTarget: g, ..._ } = m.popup.triggerProps;
357
- return /* @__PURE__ */ w("button", {
377
+ function oe({ icon: e, ref: t, className: a, children: o, onClick: c, onKeyDown: l, onPointerEnter: u, onPointerLeave: d, style: f, ...p }) {
378
+ let m = Z("MenuSubTrigger"), h = s(m.triggerRef, t), { popoverTarget: g, ..._ } = m.popup.triggerProps;
379
+ return /* @__PURE__ */ E("button", {
358
380
  type: "button",
359
381
  id: m.triggerId,
360
382
  ...p,
@@ -367,93 +389,115 @@ function $({ icon: e, ref: i, className: a, children: s, onClick: c, onKeyDown:
367
389
  ..._.style,
368
390
  ...f
369
391
  },
370
- className: n(B, "data-popup-open:bg-tint/[0.07]", a),
392
+ className: r(K, "data-popup-open:bg-tint/[0.07]", a),
371
393
  onClick: (e) => {
372
394
  c?.(e), e.defaultPrevented || m.show(e.detail === 0);
373
395
  },
374
396
  onKeyDown: (e) => {
375
- l?.(e), !(e.defaultPrevented || r(e.key, e.currentTarget) !== "ArrowRight") && (e.preventDefault(), m.show(!0));
397
+ l?.(e), !(e.defaultPrevented || i(e.key, e.currentTarget) !== "ArrowRight") && (e.preventDefault(), m.show(!0));
376
398
  },
377
399
  onPointerEnter: (e) => {
378
- u?.(e), e.pointerType !== "touch" && m.show(!1);
400
+ u?.(e), e.pointerType !== "touch" && !N(e.currentTarget.closest("[role=\"menu\"]")) && m.show(!1);
379
401
  },
380
402
  onPointerLeave: (e) => {
381
- d?.(e), Q(e, e.currentTarget.closest("[role=\"menu\"]")) && m.hideSoon();
403
+ d?.(e);
404
+ let t = e.currentTarget.closest("[role=\"menu\"]");
405
+ Q(e, t) && !N(t) && m.hideSoon();
382
406
  },
383
407
  children: [
384
- e && /* @__PURE__ */ C("span", {
408
+ e && /* @__PURE__ */ T("span", {
385
409
  "aria-hidden": !0,
386
410
  className: "text-muted-foreground flex shrink-0",
387
411
  children: e
388
412
  }),
389
- s,
390
- /* @__PURE__ */ C(t, {
413
+ o,
414
+ /* @__PURE__ */ T(n, {
391
415
  "aria-hidden": !0,
392
416
  className: "text-muted-foreground ms-auto size-4 shrink-0 rtl:-scale-x-100"
393
417
  })
394
418
  ]
395
419
  });
396
420
  }
397
- function ee({ offset: e = 8, ref: t, className: i, style: a, onKeyDown: s, onPointerEnter: c, onPointerLeave: l, children: u, ...d }) {
398
- let f = J("MenuSubContent"), m = o(f.popup.popupRef, t), h = z();
399
- return /* @__PURE__ */ C("div", {
400
- "aria-labelledby": f.triggerId,
401
- ...d,
402
- ...f.popup.popupProps,
403
- ref: m,
421
+ function se({ offset: t = 8, ref: a, className: o, style: c, onKeyDown: l, onPointerEnter: u, onPointerLeave: d, children: f, ...p }) {
422
+ let m = Z("MenuSubContent"), g = s(m.popup.popupRef, a), _ = G(), y = v(M), b = e();
423
+ P(m.popup.popupRef, y && m.popup.open);
424
+ let x = () => {
425
+ m.popup.setOpen(!1), m.triggerRef.current?.focus();
426
+ };
427
+ return /* @__PURE__ */ E("div", {
428
+ "aria-labelledby": m.triggerId,
429
+ ...p,
430
+ ...m.popup.popupProps,
431
+ ref: g,
404
432
  role: "menu",
405
433
  tabIndex: -1,
406
434
  "data-zen-beside": "",
435
+ "data-zen-sheet": y || void 0,
407
436
  onKeyDown: (e) => {
408
- s?.(e), !e.defaultPrevented && (h(e), e.target.closest("[role=\"menu\"]") === e.currentTarget && r(e.key, e.currentTarget) === "ArrowLeft" && (e.preventDefault(), e.stopPropagation(), f.popup.setOpen(!1), f.triggerRef.current?.focus()));
437
+ l?.(e), !e.defaultPrevented && (_(e), e.target.closest("[role=\"menu\"]") === e.currentTarget && i(e.key, e.currentTarget) === "ArrowLeft" && (e.preventDefault(), e.stopPropagation(), x()));
409
438
  },
410
439
  onPointerEnter: (e) => {
411
- c?.(e), f.stay();
440
+ u?.(e), m.stay();
412
441
  },
413
442
  onPointerLeave: (e) => {
414
- l?.(e), Q(e, f.triggerRef.current?.closest("[role=\"menu\"]") ?? null) && !f.triggerRef.current?.contains(e.relatedTarget) && f.hideSoon();
443
+ d?.(e), Q(e, m.triggerRef.current?.closest("[role=\"menu\"]") ?? null) && !m.triggerRef.current?.contains(e.relatedTarget) && !N(e.currentTarget) && m.hideSoon();
415
444
  },
416
445
  style: {
417
- ...p(f.popup.id, {
446
+ ...h(m.popup.id, {
418
447
  side: "beside",
419
- offset: e
448
+ offset: t
420
449
  }),
421
450
  marginBlock: -6,
422
- ...a
451
+ ...c
423
452
  },
424
- className: n("zen__popover glass glass-blur text-foreground min-w-44 rounded-xl p-1.5 outline-hidden", i),
425
- children: u
453
+ className: r("zen__popover glass glass-blur text-foreground min-w-44 rounded-xl p-1.5 outline-hidden", o),
454
+ children: [y && /* @__PURE__ */ E(w, { children: [
455
+ /* @__PURE__ */ T(B, {}),
456
+ /* @__PURE__ */ E("button", {
457
+ type: "button",
458
+ role: "menuitem",
459
+ tabIndex: -1,
460
+ "aria-label": b.back,
461
+ onClick: x,
462
+ className: r(K, "zen__sheet-only text-muted-foreground font-medium"),
463
+ children: [/* @__PURE__ */ T(n, {
464
+ "aria-hidden": !0,
465
+ className: "size-4 shrink-0 -scale-x-100 rtl:scale-x-100"
466
+ }), m.label]
467
+ }),
468
+ /* @__PURE__ */ T($, { className: "zen__sheet-only" })
469
+ ] }), f]
426
470
  });
427
471
  }
428
- function te({ ref: e, className: t, onKeyDown: r, children: i, ...a }) {
429
- let c = b(null), u = o(c, e), [d] = x(() => /* @__PURE__ */ new Map());
430
- return l(c, O), /* @__PURE__ */ C(D.Provider, {
472
+ function ce({ ref: e, className: t, onKeyDown: n, children: i, ...a }) {
473
+ let o = S(null), l = s(o, e), [d] = C(() => /* @__PURE__ */ new Map());
474
+ return u(o, A), /* @__PURE__ */ T(k.Provider, {
431
475
  value: d,
432
- children: /* @__PURE__ */ C("div", {
476
+ children: /* @__PURE__ */ T("div", {
433
477
  role: "menubar",
434
478
  ...a,
435
- ref: u,
479
+ ref: l,
436
480
  "data-zen-roving": "",
437
481
  onKeyDown: (e) => {
438
- r?.(e), s(e, O);
482
+ n?.(e), c(e, A);
439
483
  },
440
- className: n("zen__menubar glow-edge border-tint/10 bg-tint/[0.03] relative flex w-fit items-center gap-0.5 rounded-xl border p-1", t),
484
+ className: r("zen__menubar glow-edge border-tint/10 bg-tint/[0.03] relative flex w-fit items-center gap-0.5 rounded-xl border p-1", t),
441
485
  children: i
442
486
  })
443
487
  });
444
488
  }
445
- var ne = "text-muted-foreground hover:text-foreground focus-ring h-8 rounded-lg px-3 text-sm transition-colors outline-hidden data-popup-open:bg-tint/[0.07] data-popup-open:text-foreground";
446
- function re({ className: e }) {
447
- return /* @__PURE__ */ C("div", {
489
+ var le = "text-muted-foreground hover:text-foreground focus-ring h-8 rounded-lg px-3 text-sm transition-colors outline-hidden data-popup-open:bg-tint/[0.07] data-popup-open:text-foreground";
490
+ function $({ className: e }) {
491
+ return /* @__PURE__ */ T("div", {
448
492
  role: "separator",
449
- className: n("bg-tint/[0.07] mx-2 my-1 h-px", e)
493
+ className: r("bg-tint/[0.07] mx-2 my-1 h-px", e)
450
494
  });
451
495
  }
452
- function ie({ className: e, ...t }) {
453
- return /* @__PURE__ */ C("div", {
454
- className: n("flex items-center gap-3 px-3 py-2.5", e),
496
+ function ue({ className: e, ...t }) {
497
+ return /* @__PURE__ */ T("div", {
498
+ className: r("flex items-center gap-3 px-3 py-2.5", e),
455
499
  ...t
456
500
  });
457
501
  }
458
502
  //#endregion
459
- export { U as MenuCheckboxItem, P as MenuContent, L as MenuContextTrigger, ie as MenuHeader, V as MenuItem, G as MenuRadioGroup, K as MenuRadioItem, re as MenuSeparator, Z as MenuSub, ee as MenuSubContent, $ as MenuSubTrigger, N as MenuTrigger, te as Menubar, M as default };
503
+ export { ee as MenuCheckboxItem, z as MenuContent, U as MenuContextTrigger, ue as MenuHeader, q as MenuItem, te as MenuRadioGroup, ne as MenuRadioItem, $ as MenuSeparator, ae as MenuSub, se as MenuSubContent, oe as MenuSubTrigger, R as MenuTrigger, ce as Menubar, L as default };