@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,8 +1,10 @@
1
1
  import { VariantProps } from '../utils/cva';
2
2
  import { ComponentProps } from 'react';
3
- export default function Badge({ variant, className, ...rest }: BadgeProps): import('react').JSX.Element;
3
+ /** A small label for status, counts and tags; `tone="negative"` for bad news. */
4
+ export default function Badge({ variant, tone, className, ...rest }: BadgeProps): import('react').JSX.Element;
4
5
  declare const badgeVariants: (props?: ({
5
- variant?: "outline" | "default" | "destructive" | "secondary" | null | undefined;
6
+ variant?: "outline" | "default" | "secondary" | null | undefined;
7
+ tone?: "default" | "negative" | null | undefined;
6
8
  } & ({
7
9
  class: import('../utils/cx').ClassValue;
8
10
  className?: never;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/badge/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAO,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,UAAU,+BAExE;AACD,QAAA,MAAM,aAAa;;;;;;;;;;;0BAgBlB,CAAC;AACF,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/badge/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAO,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,iFAAiF;AACjF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,UAAU,+BAE9E;AACD,QAAA,MAAM,aAAa;;;;;;;;;;;;0BAoBlB,CAAC;AACF,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG"}
@@ -2,23 +2,32 @@
2
2
  import { cva as e } from "../utils/cva.js";
3
3
  import { jsx as t } from "react/jsx-runtime";
4
4
  //#region packages/badge/index.tsx
5
- function n({ variant: e, className: n, ...i }) {
5
+ function n({ variant: e, tone: n, className: i, ...a }) {
6
6
  return /* @__PURE__ */ t("span", {
7
- ...i,
7
+ ...a,
8
8
  className: r({
9
9
  variant: e,
10
- className: n
10
+ tone: n,
11
+ className: i
11
12
  })
12
13
  });
13
14
  }
14
- var r = e("zen__badge inline-flex items-center rounded-md border px-1.5 py-0.5 text-xs font-medium whitespace-nowrap focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-glow/50", {
15
- variants: { variant: {
16
- default: "border-glow/30 bg-glow/10 text-primary",
17
- secondary: "border-tint/10 bg-tint/[0.06] text-foreground",
18
- destructive: "border-destructive/40 bg-destructive/10 text-destructive",
19
- outline: "border-tint/10 text-foreground"
20
- } },
21
- defaultVariants: { variant: "default" }
15
+ var r = e("zen__badge inline-flex items-center rounded-md border px-1.5 py-0.5 text-xs font-medium whitespace-nowrap focus-ring", {
16
+ variants: {
17
+ variant: {
18
+ default: "border-glow/30 bg-glow/10 text-primary",
19
+ secondary: "border-tint/10 bg-tint/[0.06] text-foreground",
20
+ outline: "border-tint/10 text-foreground"
21
+ },
22
+ tone: {
23
+ default: "",
24
+ negative: "border-destructive/40 bg-destructive/10 text-destructive"
25
+ }
26
+ },
27
+ defaultVariants: {
28
+ variant: "default",
29
+ tone: "default"
30
+ }
22
31
  });
23
32
  //#endregion
24
33
  export { n as default };
package/dist/base.css CHANGED
@@ -10,6 +10,10 @@
10
10
  /* Room for the scrollbar is always kept, so the page doesn't jump when one appears. */
11
11
  scrollbar-gutter: stable;
12
12
  }
13
+ /* Nothing painted behind the content, for pages composited over something else (an OBS overlay). */
14
+ html[data-zen-page='transparent'] {
15
+ background: transparent;
16
+ }
13
17
  body {
14
18
  /* Transparent: an opaque body would paint over the z-index −1 <Backdrop>. */
15
19
  background: transparent;
@@ -1,6 +1,6 @@
1
1
  import { ComponentProps } from 'react';
2
2
  /** Where a page sits: its parents as links, then the page itself. Give the last crumb `current`. */
3
- export default function Breadcrumbs({ className, children, 'aria-label': label, ...rest }: ComponentProps<'nav'>): import('react').JSX.Element;
3
+ export default function Breadcrumbs({ className, children, 'aria-label': labelProp, ...rest }: ComponentProps<'nav'>): import('react').JSX.Element;
4
4
  /**
5
5
  * One crumb: a link, or with `current`, the page you're on (not a link). With
6
6
  * `asChild`, the styles go onto your own link element (a router's Link).
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/breadcrumbs/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAY,cAAc,EAA4B,MAAM,OAAO,CAAC;AAE3E,oGAAoG;AACpG,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAChC,SAAS,EACT,QAAQ,EACR,YAAY,EAAE,KAAoB,EAClC,GAAG,IAAI,EACV,EAAE,cAAc,CAAC,KAAK,CAAC,+BAkBvB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,eAAe,+BAQnF;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc,CAAC,GAAG,CAAC;IACxD,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/breadcrumbs/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAY,cAAc,EAA4B,MAAM,OAAO,CAAC;AAE3E,oGAAoG;AACpG,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,+BAoBnH;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,eAAe,+BAQnF;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc,CAAC,GAAG,CAAC;IACxD,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}
@@ -1,39 +1,40 @@
1
1
  "use client";
2
- import { cx as e } from "../utils/cx.js";
3
- import { Slot as t } from "../utils/slot.js";
4
- import n from "../icons/micro/chevron-right.js";
5
- import { Children as r, Fragment as i, isValidElement as a } from "react";
6
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
2
+ import e from "../icons/micro/chevron-right.js";
3
+ import { cx as t } from "../utils/cx.js";
4
+ import { Slot as n } from "../utils/slot.js";
5
+ import { useMessages as r } from "../locale-provider/index.js";
6
+ import { Children as i, Fragment as a, isValidElement as o } from "react";
7
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
7
8
  //#region packages/breadcrumbs/index.tsx
8
- function c({ className: t, children: c, "aria-label": l = "Breadcrumb", ...u }) {
9
- let d = r.toArray(c).filter(a);
10
- return /* @__PURE__ */ o("nav", {
11
- "aria-label": l,
12
- className: e("zen__breadcrumbs", t),
13
- ...u,
14
- children: /* @__PURE__ */ o("ol", {
9
+ function l({ className: n, children: l, "aria-label": u, ...d }) {
10
+ let f = r(), p = u ?? f.breadcrumb, m = i.toArray(l).filter(o);
11
+ return /* @__PURE__ */ s("nav", {
12
+ "aria-label": p,
13
+ className: t("zen__breadcrumbs", n),
14
+ ...d,
15
+ children: /* @__PURE__ */ s("ol", {
15
16
  className: "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm",
16
- children: d.map((e, t) => /* @__PURE__ */ s(i, { children: [t > 0 && /* @__PURE__ */ o("li", {
17
+ children: m.map((t, n) => /* @__PURE__ */ c(a, { children: [n > 0 && /* @__PURE__ */ s("li", {
17
18
  "aria-hidden": !0,
18
19
  className: "text-muted-foreground/60 flex",
19
- children: /* @__PURE__ */ o(n, { className: "size-3.5" })
20
- }), /* @__PURE__ */ o("li", {
20
+ children: /* @__PURE__ */ s(e, { className: "size-3.5 rtl:-scale-x-100" })
21
+ }), /* @__PURE__ */ s("li", {
21
22
  className: "flex min-w-0",
22
- children: e
23
- })] }, e.key ?? t))
23
+ children: t
24
+ })] }, t.key ?? n))
24
25
  })
25
26
  });
26
27
  }
27
- function l({ current: n, asChild: r, className: i, ...a }) {
28
- let s = e("truncate rounded-sm outline-hidden transition-colors focus-visible:ring-2 focus-visible:ring-ring/50", n ? "text-foreground font-medium" : "hover:text-foreground touch-target", i);
29
- return n ? /* @__PURE__ */ o("span", {
28
+ function u({ current: e, asChild: r, className: i, ...a }) {
29
+ let o = t("truncate rounded-sm outline-hidden transition-colors focus-ring", e ? "text-foreground font-medium" : "hover:text-foreground touch-target", i);
30
+ return e ? /* @__PURE__ */ s("span", {
30
31
  "aria-current": "page",
31
- className: s,
32
+ className: o,
32
33
  ...a
33
- }) : o(r ? t : "a", {
34
- className: s,
34
+ }) : s(r ? n : "a", {
35
+ className: o,
35
36
  ...a
36
37
  });
37
38
  }
38
39
  //#endregion
39
- export { l as Breadcrumb, c as default };
40
+ export { u as Breadcrumb, l as default };
@@ -7,9 +7,9 @@ import { ComponentProps } from 'react';
7
7
  */
8
8
  export default function Button({ className, variant, size, tone, loading, disabled, type, asChild, children, ...rest }: ButtonProps): import('react').JSX.Element;
9
9
  export declare const buttonVariants: (props?: ({
10
- variant?: "outline" | "link" | "default" | "icon" | "destructive" | "secondary" | "ghost" | null | undefined;
11
- size?: "default" | "icon" | "sm" | "lg" | "icon-sm" | null | undefined;
12
- tone?: "inherit" | "default" | "destructive" | "muted" | null | undefined;
10
+ variant?: "link" | "outline" | "default" | "secondary" | "ghost" | null | undefined;
11
+ size?: "icon" | "default" | "sm" | "lg" | "icon-sm" | "icon-lg" | "icon-xs" | null | undefined;
12
+ tone?: "inherit" | "default" | "negative" | "muted" | null | undefined;
13
13
  } & ({
14
14
  class: import('../utils/cx').ClassValue;
15
15
  className?: never;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/button/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAO,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAe,EACf,QAAQ,EACR,IAAe,EACf,OAAe,EACf,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,WAAW,+BAqBb;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;0BAwD1B,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,OAAO,cAAc,CAAC;IAC9F,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+FAA+F;IAC/F,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/button/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAO,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAe,EACf,QAAQ,EACR,IAAe,EACf,OAAe,EACf,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,WAAW,+BAqBb;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;0BA4D1B,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,OAAO,cAAc,CAAC;IAC9F,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+FAA+F;IAC/F,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}
@@ -28,32 +28,37 @@ function a({ className: t, variant: a, size: s, tone: c, loading: l = !1, disabl
28
28
  children: [l && /* @__PURE__ */ r(n, {}), p]
29
29
  });
30
30
  }
31
- var o = t("zen__button inline-flex cursor-pointer items-center justify-center gap-2 rounded-lg text-sm font-medium whitespace-nowrap outline-hidden select-none transition-[background-color,border-color,box-shadow,color,transform] duration-200 ease-out active:scale-[0.97] focus-visible:ring-2 focus-visible:ring-glow/50 disabled:pointer-events-none disabled:opacity-50", {
31
+ var o = t("zen__button inline-flex cursor-pointer items-center justify-center gap-2 rounded-lg text-sm font-medium whitespace-nowrap outline-hidden select-none transition-[background-color,border-color,box-shadow,color,transform] duration-200 ease-out active:scale-[0.97] focus-ring disabled:pointer-events-none disabled:opacity-50", {
32
32
  variants: {
33
33
  variant: {
34
34
  default: "bg-primary bg-[linear-gradient(to_bottom,oklch(1_0_0/0.16),transparent)] text-primary-foreground shadow-[0_0_0_1px_oklch(var(--glow)/0.55),0_0_22px_-6px_oklch(var(--glow)/calc(0.7*var(--glow-k))),inset_0_1px_0_hsl(0_0%_100%/0.3)] hover:shadow-[0_0_0_1px_oklch(var(--glow)/0.8),0_0_28px_-4px_oklch(var(--glow)/calc(0.85*var(--glow-k))),inset_0_1px_0_hsl(0_0%_100%/0.35)]",
35
35
  secondary: "bg-primary/15 text-foreground shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.25)] hover:bg-primary/25",
36
36
  outline: "glow-edge border border-tint/10 bg-tint/[0.03] text-foreground hover:border-tint/20 hover:bg-tint/[0.07]",
37
37
  ghost: "text-muted-foreground hover:bg-tint/[0.06] hover:text-foreground",
38
- destructive: "bg-destructive/90 text-destructive-foreground shadow-[0_0_0_1px_oklch(var(--destructive)/0.6),0_0_22px_-8px_oklch(var(--destructive)/calc(0.7*var(--glow-k)))] hover:bg-destructive",
39
- link: "inline-block h-auto! max-w-full truncate rounded-sm px-0! text-left align-bottom text-[length:inherit] text-primary underline-offset-4 hover:underline active:scale-100",
40
- icon: "text-muted-foreground hover:bg-tint/[0.06] hover:text-foreground"
38
+ link: "inline-block h-auto! max-w-full truncate rounded-sm px-0! text-start align-bottom text-[length:inherit] text-primary underline-offset-4 hover:underline active:scale-100"
41
39
  },
42
40
  size: {
43
41
  default: "h-10 px-4",
44
42
  sm: "h-8 px-3 text-xs",
45
43
  lg: "h-11 px-6",
46
- icon: "size-9",
47
- "icon-sm": "size-6 rounded-md"
44
+ icon: "size-10",
45
+ "icon-sm": "size-8",
46
+ "icon-lg": "size-11",
47
+ "icon-xs": "size-6 rounded-md"
48
48
  },
49
49
  tone: {
50
50
  default: "",
51
51
  muted: "",
52
52
  inherit: "",
53
- destructive: ""
53
+ negative: ""
54
54
  }
55
55
  },
56
56
  compoundVariants: [
57
+ {
58
+ variant: "default",
59
+ tone: "negative",
60
+ class: "bg-destructive/90 bg-none text-destructive-foreground shadow-[0_0_0_1px_oklch(var(--destructive)/0.6),0_0_22px_-8px_oklch(var(--destructive)/calc(0.7*var(--glow-k)))] hover:bg-destructive hover:shadow-[0_0_0_1px_oklch(var(--destructive)/0.6),0_0_22px_-8px_oklch(var(--destructive)/calc(0.7*var(--glow-k)))]"
61
+ },
57
62
  {
58
63
  variant: "link",
59
64
  tone: "muted",
@@ -66,13 +71,13 @@ var o = t("zen__button inline-flex cursor-pointer items-center justify-center ga
66
71
  },
67
72
  {
68
73
  variant: "link",
69
- tone: "destructive",
74
+ tone: "negative",
70
75
  class: "text-destructive"
71
76
  },
72
77
  {
73
- variant: ["ghost", "icon"],
74
- tone: "destructive",
75
- class: "hover:bg-destructive/10 hover:text-destructive focus-visible:ring-destructive/40"
78
+ variant: "ghost",
79
+ tone: "negative",
80
+ class: "hover:bg-destructive/10 hover:text-destructive"
76
81
  }
77
82
  ],
78
83
  defaultVariants: {
@@ -0,0 +1,13 @@
1
+ import { ComponentProps } from 'react';
2
+ /**
3
+ * Buttons joined into one: shared edges, rounded only at the ends, e.g. a
4
+ * split button (an action and a menu of others) or Previous / Today / Next.
5
+ * Best with `outline` buttons, whose hairlines meet. Upright with
6
+ * `orientation="vertical"`. Give it an aria-label when the buttons' names
7
+ * don't say what they're for together.
8
+ */
9
+ export default function ButtonGroup({ orientation, className, ...rest }: ButtonGroupProps): import('react').JSX.Element;
10
+ export interface ButtonGroupProps extends ComponentProps<'div'> {
11
+ orientation?: 'horizontal' | 'vertical';
12
+ }
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/button-group/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,WAA0B,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,gBAAgB,+BAkBvG;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC3D,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;CAC3C"}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { jsx as t } from "react/jsx-runtime";
4
+ //#region packages/button-group/index.tsx
5
+ function n({ orientation: n = "horizontal", className: r, ...i }) {
6
+ return /* @__PURE__ */ t("div", {
7
+ role: "group",
8
+ "data-orientation": n,
9
+ className: e("zen__button-group isolate inline-flex w-fit", "[&>:not([popover])]:rounded-none [&>:focus-visible]:z-10 [&>:hover]:z-10", n === "horizontal" ? "[&>:nth-child(1_of_:not([popover]))]:rounded-s-lg [&>:nth-last-child(1_of_:not([popover]))]:rounded-e-lg [&>:not([popover]):not(:nth-child(1_of_:not([popover])))]:-ms-px" : "flex-col [&>:nth-child(1_of_:not([popover]))]:rounded-t-lg [&>:nth-last-child(1_of_:not([popover]))]:rounded-b-lg [&>:not([popover]):not(:nth-child(1_of_:not([popover])))]:-mt-px", r),
10
+ ...i
11
+ });
12
+ }
13
+ //#endregion
14
+ export { n as default };
@@ -1,5 +1,6 @@
1
1
  import { DateRange, DateString } from '../utils/date';
2
2
  import { Month } from '../utils/month';
3
+ import { ComponentProps } from 'react';
3
4
  /**
4
5
  * A month grid to pick a date, or a range of dates, fully keyboard-driven:
5
6
  * arrows move by day and week, Home and End to the week's ends, Page Up and
@@ -8,9 +9,10 @@ import { Month } from '../utils/month';
8
9
  * time zones. Inline on a page, or in a popup with DatePicker.
9
10
  */
10
11
  export default function Calendar(props: CalendarProps): import('react').JSX.Element;
11
- interface CalendarBaseProps {
12
- /** Decides month and weekday names, and the first day of the week, e.g. "en-IN". */
13
- locale: string;
12
+ /** Other props (aria-*, data-*, an id) go on the calendar's outer element. */
13
+ interface CalendarBaseProps extends Omit<ComponentProps<'div'>, 'defaultValue' | 'onKeyDown' | 'children'> {
14
+ /** Decides month and weekday names, and the first day of the week, e.g. "en-IN". Defaults to the LocaleProvider's. */
15
+ locale?: string;
14
16
  /** Earliest date that can be picked ("YYYY-MM-DD"). */
15
17
  min?: DateString;
16
18
  /** Latest date that can be picked. */
@@ -29,15 +31,20 @@ interface CalendarBaseProps {
29
31
  }
30
32
  export interface CalendarSingleProps extends CalendarBaseProps {
31
33
  mode?: 'single';
32
- /** "YYYY-MM-DD", or null for none. */
33
- value: DateString | null;
34
- onChange: (date: DateString) => void;
34
+ /** "YYYY-MM-DD", or null for none, when you keep it. */
35
+ value?: DateString | null;
36
+ /** The first date, when the calendar keeps its own. */
37
+ defaultValue?: DateString | null;
38
+ onValueChange?: (date: DateString) => void;
35
39
  }
36
40
  export interface CalendarRangeProps extends CalendarBaseProps {
37
41
  /** Pick a start and then an end; the days between are highlighted, previewed while pointing. */
38
42
  mode: 'range';
39
- value: DateRange | null;
40
- onChange: (range: DateRange) => void;
43
+ /** The range when you keep it; `end` is null while only the start is picked. */
44
+ value?: DateRange | null;
45
+ /** The first range, when the calendar keeps its own. */
46
+ defaultValue?: DateRange | null;
47
+ onValueChange?: (range: DateRange) => void;
41
48
  }
42
49
  export type CalendarProps = CalendarSingleProps | CalendarRangeProps;
43
50
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/calendar/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAGH,KAAK,SAAS,EACd,KAAK,UAAU,EAOlB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA0B,KAAK,KAAK,EAA6B,MAAM,kBAAkB,CAAC;AAGjG;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAkRpD;AAKD,UAAU,iBAAiB;IACvB,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,sCAAsC;IACtC,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAC3C,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC1D,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,sCAAsC;IACtC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IACzD,gGAAgG;IAChG,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/calendar/index.tsx"],"names":[],"mappings":"AAMA,OAAO,EAGH,KAAK,SAAS,EACd,KAAK,UAAU,EAOlB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA0B,KAAK,KAAK,EAA6B,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,cAAc,EAAqD,MAAM,OAAO,CAAC;AAI1F;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAgSpD;AAKD,8EAA8E;AAC9E,UAAU,iBAAkB,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;IACtG,sHAAsH;IACtH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,sCAAsC;IACtC,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAC3C,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC1D,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,wDAAwD;IACxD,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,uDAAuD;IACvD,YAAY,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IACzD,gGAAgG;IAChG,IAAI,EAAE,OAAO,CAAC;IACd,gFAAgF;IAChF,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,wDAAwD;IACxD,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CAC9C;AAED,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,CAAC"}
@@ -1,155 +1,161 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { PICKER_MONTH as t, PICKER_NAV as n } from "../utils/styles.js";
4
- import r from "../icons/chevron-left.js";
5
- import i from "../icons/chevron-right.js";
6
- import { addMonths as a, formatMonth as o, monthNames as s, monthsBetween as c } from "../utils/month.js";
7
- import { addDays as l, addMonthsToDate as u, dayOfWeek as d, daysInMonth as f, formatDate as ee, today as p, weekStart as m, weekdayNames as h } from "../utils/date.js";
8
- import { useEffect as g, useId as te, useRef as _, useState as v } from "react";
3
+ import { readingKey as t } from "../utils/direction.js";
4
+ import { useControllable as n } from "../utils/useControllable.js";
5
+ import { useLocale as r, useMessages as i } from "../locale-provider/index.js";
6
+ import { PICKER_MONTH as a, PICKER_NAV as o } from "../utils/styles.js";
7
+ import s from "../icons/chevron-left.js";
8
+ import c from "../icons/chevron-right.js";
9
+ import { addMonths as l, formatMonth as u, monthNames as d, monthsBetween as f } from "../utils/month.js";
10
+ import { addDays as p, addMonthsToDate as m, dayOfWeek as h, daysInMonth as ee, formatDate as te, today as ne, weekStart as re, weekdayNames as g } from "../utils/date.js";
11
+ import { useHydrated as ie } from "../utils/useHydrated.js";
12
+ import { useEffect as ae, useId as oe, useRef as _, useState as v } from "react";
9
13
  import { jsx as y, jsxs as b } from "react/jsx-runtime";
10
14
  //#region packages/calendar/index.tsx
11
- function x(x) {
12
- let { locale: S, min: C, max: w, isDisabled: re, weekStartsOn: T = m(S), months: E = 1, defaultMonth: ie, className: D, autoFocus: ae } = x, O = x.mode === "range" ? x.value : null, k = x.mode === "range" ? null : x.value, A = k ?? O?.start ?? null, j = p(), [M, N] = v(() => ie ?? (A ?? j).slice(0, 7)), [P, F] = v(() => A ?? j), [I, L] = v(null), [R, z] = v("days"), [B, V] = v(() => Number(M.slice(0, 4))), H = _(null), U = _(ae ?? !1), W = te(), G = a(M, E - 1), K = (e) => e.slice(0, 7) >= M && e.slice(0, 7) <= G, q = (e) => !!C && e < C || !!w && e > w || !!re?.(e), J = K(P) ? P : u(P, c(P.slice(0, 7), M));
13
- g(() => {
14
- U.current && (U.current = !1, H.current?.querySelector(`[data-date="${J}"]`)?.focus());
15
- }, [J, R]);
16
- let oe = (e) => {
17
- C && e < C && (e = C), w && e > w && (e = w), U.current = !0, F(e), K(e) || N(e < M ? e.slice(0, 7) : a(e.slice(0, 7), -(E - 1)));
18
- }, se = (e) => {
19
- if (!q(e)) {
20
- if (F(e), x.mode === "range") {
21
- let t = x.value;
22
- !t || t.end !== null ? x.onChange({
15
+ function se(se) {
16
+ let { locale: le, min: x, max: S, isDisabled: ue, weekStartsOn: de, months: C = 1, defaultMonth: fe, className: w, autoFocus: pe, mode: T, value: me, defaultValue: he = null, onValueChange: ge, ...E } = se, D = r(le), _e = new Intl.NumberFormat(D), O = i(), k = de ?? re(D), [A, j] = n(me, he, ge), M = T === "range" ? A : null, N = T === "range" ? null : A, P = N ?? M?.start ?? null, F = ne(), I = ie() ? F : null, [L, R] = v(() => fe ?? (P ?? F).slice(0, 7)), [z, B] = v(() => P ?? F), [V, H] = v(null), [U, W] = v("days"), [G, K] = v(() => Number(L.slice(0, 4))), q = _(null), J = _(pe ?? !1), ve = oe(), ye = l(L, C - 1), be = (e) => e.slice(0, 7) >= L && e.slice(0, 7) <= ye, xe = (e) => !!x && e < x || !!S && e > S || !!ue?.(e), Y = be(z) ? z : m(z, f(z.slice(0, 7), L));
17
+ ae(() => {
18
+ J.current && (J.current = !1, q.current?.querySelector(`[data-date="${Y}"]`)?.focus());
19
+ }, [Y, U]);
20
+ let Se = (e) => {
21
+ x && e < x && (e = x), S && e > S && (e = S), J.current = !0, B(e), be(e) || R(e < L ? e.slice(0, 7) : l(e.slice(0, 7), -(C - 1)));
22
+ }, Ce = (e) => {
23
+ if (!xe(e)) {
24
+ if (B(e), T === "range") {
25
+ let t = M;
26
+ !t || t.end !== null ? j({
23
27
  start: e,
24
28
  end: null
25
- }) : x.onChange(e < t.start ? {
29
+ }) : j(e < t.start ? {
26
30
  start: e,
27
31
  end: t.start
28
32
  } : {
29
33
  start: t.start,
30
34
  end: e
31
35
  });
32
- } else x.onChange(e);
36
+ } else j(e);
33
37
  }
34
- }, ce = (e) => {
35
- let t = J, n = (d(t) - T + 7) % 7, r = {
36
- ArrowLeft: l(t, -1),
37
- ArrowRight: l(t, 1),
38
- ArrowUp: l(t, -7),
39
- ArrowDown: l(t, 7),
40
- Home: l(t, -n),
41
- End: l(t, 6 - n),
42
- PageUp: u(t, e.shiftKey ? -12 : -1),
43
- PageDown: u(t, e.shiftKey ? 12 : 1)
44
- }[e.key];
45
- r && (e.preventDefault(), oe(r));
46
- }, Y = O && O.end === null ? O.start : null, le = Y && I ? I < Y ? [I, Y] : [Y, I] : null, [X, Z] = O?.end ? [O.start, O.end] : le ?? [null, null], Q = (e) => {
47
- N((t) => a(t, e));
38
+ }, we = (e) => {
39
+ let n = Y, r = (h(n) - k + 7) % 7, i = {
40
+ ArrowLeft: p(n, -1),
41
+ ArrowRight: p(n, 1),
42
+ ArrowUp: p(n, -7),
43
+ ArrowDown: p(n, 7),
44
+ Home: p(n, -r),
45
+ End: p(n, 6 - r),
46
+ PageUp: m(n, e.shiftKey ? -12 : -1),
47
+ PageDown: m(n, e.shiftKey ? 12 : 1)
48
+ }[t(e.key, e.currentTarget)];
49
+ i && (e.preventDefault(), Se(i));
50
+ }, X = M && M.end === null ? M.start : null, Te = X && V ? V < X ? [V, X] : [X, V] : null, [Z, Q] = M?.end ? [M.start, M.end] : Te ?? [null, null], Ee = (e) => {
51
+ R((t) => l(t, e));
48
52
  }, $ = /* @__PURE__ */ b("div", {
49
53
  className: "mb-2 flex items-center justify-between gap-2",
50
54
  children: [
51
55
  /* @__PURE__ */ y("button", {
52
56
  type: "button",
53
- "aria-label": R === "days" ? "Previous month" : "Previous year",
54
- onClick: () => R === "days" ? Q(-1) : V((e) => e - 1),
55
- className: n,
56
- children: /* @__PURE__ */ y(r, { className: "size-4" })
57
+ "aria-label": U === "days" ? O.previousMonth : O.previousYear,
58
+ onClick: () => U === "days" ? Ee(-1) : K((e) => e - 1),
59
+ className: o,
60
+ children: /* @__PURE__ */ y(s, { className: "size-4 rtl:-scale-x-100" })
57
61
  }),
58
62
  /* @__PURE__ */ y("button", {
59
63
  type: "button",
60
- id: W,
64
+ id: ve,
61
65
  "aria-live": "polite",
62
- "aria-label": R === "days" ? `${o(M, S, "long")}, choose month and year` : `${B}, back to days`,
66
+ "aria-label": U === "days" ? O.chooseMonthAndYear(u(L, D, "long")) : O.backToDays(G),
63
67
  onClick: () => {
64
- V(Number(M.slice(0, 4))), z((e) => e === "days" ? "months" : "days");
68
+ K(Number(L.slice(0, 4))), W((e) => e === "days" ? "months" : "days");
65
69
  },
66
- className: "hover:bg-tint/[0.07] focus-visible:ring-ring/50 cursor-pointer rounded-md px-2 py-1 text-sm font-semibold tabular-nums outline-hidden transition-colors focus-visible:ring-2",
67
- children: R === "days" ? E === 1 ? o(M, S, "long") : `${o(M, S)} – ${o(G, S)}` : B
70
+ className: "hover:bg-tint/[0.07] focus-ring cursor-pointer rounded-md px-2 py-1 text-sm font-semibold tabular-nums outline-hidden transition-colors",
71
+ children: U === "days" ? C === 1 ? u(L, D, "long") : `${u(L, D)} – ${u(ye, D)}` : G
68
72
  }),
69
73
  /* @__PURE__ */ y("button", {
70
74
  type: "button",
71
- "aria-label": R === "days" ? "Next month" : "Next year",
72
- onClick: () => R === "days" ? Q(1) : V((e) => e + 1),
73
- className: n,
74
- children: /* @__PURE__ */ y(i, { className: "size-4" })
75
+ "aria-label": U === "days" ? O.nextMonth : O.nextYear,
76
+ onClick: () => U === "days" ? Ee(1) : K((e) => e + 1),
77
+ className: o,
78
+ children: /* @__PURE__ */ y(c, { className: "size-4 rtl:-scale-x-100" })
75
79
  })
76
80
  ]
77
81
  });
78
- if (R === "months") {
79
- let n = s(S);
82
+ if (U === "months") {
83
+ let t = d(D);
80
84
  return /* @__PURE__ */ b("div", {
81
- className: e("zen__calendar w-fit", D),
85
+ className: e("zen__calendar w-fit", w),
86
+ ...E,
82
87
  children: [$, /* @__PURE__ */ y("div", {
83
88
  className: "grid w-64 grid-cols-3 gap-1",
84
89
  role: "group",
85
- "aria-labelledby": W,
86
- children: n.map((n, r) => {
87
- let i = `${B}-${String(r + 1).padStart(2, "0")}`, a = !!C && i < C.slice(0, 7) || !!w && i > w.slice(0, 7);
90
+ "aria-labelledby": ve,
91
+ children: t.map((t, n) => {
92
+ let r = `${G}-${String(n + 1).padStart(2, "0")}`, i = !!x && r < x.slice(0, 7) || !!S && r > S.slice(0, 7);
88
93
  return /* @__PURE__ */ y("button", {
89
94
  type: "button",
90
- disabled: a,
91
- "aria-pressed": i === M,
92
- "aria-label": o(i, S, "long"),
95
+ disabled: i,
96
+ "aria-pressed": r === L,
97
+ "aria-label": u(r, D, "long"),
93
98
  onClick: () => {
94
- N(i), U.current = !0, F(u(P, c(P.slice(0, 7), i))), z("days");
99
+ R(r), J.current = !0, B(m(z, f(z.slice(0, 7), r))), W("days");
95
100
  },
96
- className: e(t, i === M && "bg-primary text-primary-foreground hover:bg-primary"),
97
- children: n
98
- }, i);
101
+ className: e(a, r === L && "bg-primary text-primary-foreground hover:bg-primary"),
102
+ children: t
103
+ }, r);
99
104
  })
100
105
  })]
101
106
  });
102
107
  }
103
- let ue = h(S, "narrow"), de = h(S, "long"), fe = Array.from({ length: 7 }, (e, t) => (T + t) % 7);
108
+ let De = g(D, "narrow"), Oe = g(D, "long"), ke = Array.from({ length: 7 }, (e, t) => (k + t) % 7);
104
109
  return /* @__PURE__ */ b("div", {
105
- className: e("zen__calendar w-fit", D),
110
+ className: e("zen__calendar w-fit", w),
111
+ ...E,
106
112
  children: [$, /* @__PURE__ */ y("div", {
107
- ref: H,
113
+ ref: q,
108
114
  className: "flex gap-4",
109
- onKeyDown: ce,
110
- onMouseLeave: () => L(null),
111
- children: Array.from({ length: E }, (t, n) => {
112
- let r = a(M, n), i = `${r}-01`, s = `${r}-${f(r)}`, c = l(i, -((d(i) - T + 7) % 7));
115
+ onKeyDown: we,
116
+ onMouseLeave: () => H(null),
117
+ children: Array.from({ length: C }, (t, n) => {
118
+ let r = l(L, n), i = `${r}-01`, a = `${r}-${ee(r)}`, o = p(i, -((h(i) - k + 7) % 7));
113
119
  return /* @__PURE__ */ b("table", {
114
120
  role: "grid",
115
- "aria-label": o(r, S, "long"),
121
+ "aria-label": u(r, D, "long"),
116
122
  className: "border-separate border-spacing-x-0 border-spacing-y-0.5",
117
123
  children: [
118
- E > 1 && /* @__PURE__ */ y("caption", {
124
+ C > 1 && /* @__PURE__ */ y("caption", {
119
125
  className: "text-muted-foreground pb-1 text-xs font-medium",
120
- children: o(r, S, "long")
126
+ children: u(r, D, "long")
121
127
  }),
122
- /* @__PURE__ */ y("thead", { children: /* @__PURE__ */ y("tr", { children: fe.map((e) => /* @__PURE__ */ y("th", {
128
+ /* @__PURE__ */ y("thead", { children: /* @__PURE__ */ y("tr", { children: ke.map((e) => /* @__PURE__ */ y("th", {
123
129
  scope: "col",
124
- abbr: de[e],
130
+ abbr: Oe[e],
125
131
  className: "text-muted-foreground size-9 text-xs font-medium",
126
- children: ue[e]
132
+ children: De[e]
127
133
  }, e)) }) }),
128
- /* @__PURE__ */ y("tbody", { children: Array.from({ length: 6 }, (t, n) => /* @__PURE__ */ y("tr", { children: Array.from({ length: 7 }, (t, a) => {
129
- let o = l(c, n * 7 + a), u = o.slice(0, 7) === r;
130
- if (!u && E > 1) return /* @__PURE__ */ y("td", { role: "gridcell" }, o);
131
- let d = o === X, f = o === Z, p = !!X && !!Z && o > X && o < Z, m = o === k || o === O?.start || o === O?.end, h = q(o);
134
+ /* @__PURE__ */ y("tbody", { children: Array.from({ length: 6 }, (t, n) => /* @__PURE__ */ y("tr", { children: Array.from({ length: 7 }, (t, s) => {
135
+ let c = p(o, n * 7 + s), l = c.slice(0, 7) === r;
136
+ if (!l && C > 1) return /* @__PURE__ */ y("td", { role: "gridcell" }, c);
137
+ let u = c === Z, d = c === Q, f = !!Z && !!Q && c > Z && c < Q, m = c === N || c === M?.start || c === M?.end, h = xe(c);
132
138
  return /* @__PURE__ */ y("td", {
133
139
  role: "gridcell",
134
- "aria-selected": m || p || void 0,
135
- className: e("p-0", (p || (d || f) && X !== Z) && "bg-primary/15", d && "rounded-l-lg", f && "rounded-r-lg", p && (a === 0 || E > 1 && o === i) && "rounded-l-lg", p && (a === 6 || E > 1 && o === s) && "rounded-r-lg"),
140
+ "aria-selected": m || f || void 0,
141
+ className: e("p-0", (f || (u || d) && Z !== Q) && "bg-primary/15", u && "rounded-s-lg", d && "rounded-e-lg", f && (s === 0 || C > 1 && c === i) && "rounded-s-lg", f && (s === 6 || C > 1 && c === a) && "rounded-e-lg"),
136
142
  children: /* @__PURE__ */ y("button", {
137
143
  type: "button",
138
- "data-date": o,
139
- tabIndex: o === J ? 0 : -1,
140
- "aria-label": ee(o, S, "full"),
144
+ "data-date": c,
145
+ tabIndex: c === Y ? 0 : -1,
146
+ "aria-label": te(c, D, "full"),
141
147
  "aria-pressed": m,
142
148
  "aria-disabled": h || void 0,
143
- "aria-current": o === j ? "date" : void 0,
144
- onClick: () => se(o),
149
+ "aria-current": c === I ? "date" : void 0,
150
+ onClick: () => Ce(c),
145
151
  onFocus: () => {
146
- F(o), Y && L(o);
152
+ B(c), X && H(c);
147
153
  },
148
- onMouseEnter: () => Y && L(o),
149
- className: e(ne, !u && "text-muted-foreground", h && "cursor-not-allowed opacity-35", m ? "bg-primary text-primary-foreground shadow-[0_0_20px_-4px_oklch(var(--glow)/calc(0.8*var(--glow-k)))]" : !h && "hover:bg-tint/[0.08]", o === j && "after:bg-primary after:absolute after:bottom-1 after:left-1/2 after:size-1 after:-translate-x-1/2 after:rounded-full", o === j && m && "after:bg-primary-foreground"),
150
- children: Number(o.slice(8))
154
+ onMouseEnter: () => X && H(c),
155
+ className: e(ce, !l && "text-muted-foreground", h && "cursor-not-allowed opacity-35", m ? "bg-primary text-primary-foreground shadow-[0_0_20px_-4px_oklch(var(--glow)/calc(0.8*var(--glow-k)))]" : !h && "hover:bg-tint/[0.08]", c === I && "after:bg-primary after:absolute after:bottom-1 after:left-1/2 after:size-1 after:-translate-x-1/2 after:rounded-full", c === I && m && "after:bg-primary-foreground"),
156
+ children: _e.format(Number(c.slice(8)))
151
157
  })
152
- }, o);
158
+ }, c);
153
159
  }) }, n)) })
154
160
  ]
155
161
  }, r);
@@ -157,6 +163,6 @@ function x(x) {
157
163
  })]
158
164
  });
159
165
  }
160
- var ne = "relative grid size-9 cursor-pointer place-items-center rounded-lg text-sm tabular-nums outline-hidden transition-[background-color,color,box-shadow] duration-150 focus-visible:ring-2 focus-visible:ring-ring/60";
166
+ var ce = "relative grid size-9 cursor-pointer place-items-center rounded-lg text-sm tabular-nums outline-hidden transition-[background-color,color,box-shadow] duration-150 focus-ring";
161
167
  //#endregion
162
- export { x as default };
168
+ export { se as default };