@rinzai/zen 0.8.6 → 0.10.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 (168) hide show
  1. package/dist/animated-number/index.d.ts +6 -2
  2. package/dist/animated-number/index.d.ts.map +1 -1
  3. package/dist/animated-number/index.js +69 -17
  4. package/dist/breadcrumbs/index.d.ts +15 -0
  5. package/dist/breadcrumbs/index.d.ts.map +1 -0
  6. package/dist/breadcrumbs/index.js +39 -0
  7. package/dist/calendar-heatmap/index.d.ts +25 -0
  8. package/dist/calendar-heatmap/index.d.ts.map +1 -0
  9. package/dist/calendar-heatmap/index.js +48 -0
  10. package/dist/card/index.d.ts +3 -1
  11. package/dist/card/index.d.ts.map +1 -1
  12. package/dist/card/index.js +3 -2
  13. package/dist/chart/allocation.d.ts +30 -0
  14. package/dist/chart/allocation.d.ts.map +1 -0
  15. package/dist/chart/allocation.js +69 -0
  16. package/dist/chart/donut.d.ts.map +1 -1
  17. package/dist/chart/donut.js +72 -70
  18. package/dist/chart/index.d.ts +1 -0
  19. package/dist/chart/index.d.ts.map +1 -1
  20. package/dist/chart/index.js +182 -178
  21. package/dist/code-block/index.d.ts +1 -1
  22. package/dist/code-block/index.d.ts.map +1 -1
  23. package/dist/code-block/index.js +31 -22
  24. package/dist/code-input/index.d.ts +20 -0
  25. package/dist/code-input/index.d.ts.map +1 -0
  26. package/dist/code-input/index.js +44 -0
  27. package/dist/collapse/index.d.ts +3 -2
  28. package/dist/collapse/index.d.ts.map +1 -1
  29. package/dist/collapse/index.js +1 -1
  30. package/dist/command-palette/index.d.ts +37 -0
  31. package/dist/command-palette/index.d.ts.map +1 -0
  32. package/dist/command-palette/index.js +120 -0
  33. package/dist/date-picker/index.d.ts +10 -2
  34. package/dist/date-picker/index.d.ts.map +1 -1
  35. package/dist/date-picker/index.js +43 -21
  36. package/dist/dialog/index.d.ts +13 -3
  37. package/dist/dialog/index.d.ts.map +1 -1
  38. package/dist/dialog/index.js +84 -44
  39. package/dist/editable-cell/index.d.ts +2 -1
  40. package/dist/editable-cell/index.d.ts.map +1 -1
  41. package/dist/editable-cell/index.js +24 -17
  42. package/dist/empty-state/index.d.ts +14 -0
  43. package/dist/empty-state/index.d.ts.map +1 -0
  44. package/dist/empty-state/index.js +31 -0
  45. package/dist/file-drop/index.d.ts +18 -0
  46. package/dist/file-drop/index.d.ts.map +1 -0
  47. package/dist/file-drop/index.js +49 -0
  48. package/dist/filter-bar/index.d.ts +21 -0
  49. package/dist/filter-bar/index.d.ts.map +1 -0
  50. package/dist/filter-bar/index.js +90 -0
  51. package/dist/icon-picker/index.d.ts +38 -0
  52. package/dist/icon-picker/index.d.ts.map +1 -0
  53. package/dist/icon-picker/index.js +112 -0
  54. package/dist/icons/arrow-left.js +23 -0
  55. package/dist/icons/micro/arrow-trending-down.d.ts +3 -0
  56. package/dist/icons/micro/arrow-trending-down.d.ts.map +1 -0
  57. package/dist/icons/micro/arrow-trending-down.js +21 -0
  58. package/dist/icons/micro/arrow-trending-up.d.ts +3 -0
  59. package/dist/icons/micro/arrow-trending-up.d.ts.map +1 -0
  60. package/dist/icons/micro/arrow-trending-up.js +21 -0
  61. package/dist/index.d.ts +30 -6
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/kbd/index.d.ts +4 -0
  64. package/dist/kbd/index.d.ts.map +1 -0
  65. package/dist/kbd/index.js +12 -0
  66. package/dist/keypad/index.d.ts +20 -0
  67. package/dist/keypad/index.d.ts.map +1 -0
  68. package/dist/keypad/index.js +42 -0
  69. package/dist/lib.js +92 -65
  70. package/dist/load-more/index.d.ts +19 -0
  71. package/dist/load-more/index.d.ts.map +1 -0
  72. package/dist/load-more/index.js +37 -0
  73. package/dist/menu/index.d.ts +22 -3
  74. package/dist/menu/index.d.ts.map +1 -1
  75. package/dist/menu/index.js +132 -45
  76. package/dist/meter/index.d.ts +3 -1
  77. package/dist/meter/index.d.ts.map +1 -1
  78. package/dist/meter/index.js +19 -14
  79. package/dist/money-input/index.d.ts +3 -3
  80. package/dist/page-transition/index.d.ts +10 -0
  81. package/dist/page-transition/index.d.ts.map +1 -0
  82. package/dist/page-transition/index.js +16 -0
  83. package/dist/pagination/index.d.ts +26 -0
  84. package/dist/pagination/index.d.ts.map +1 -0
  85. package/dist/pagination/index.js +62 -0
  86. package/dist/progress-ring/index.d.ts +4 -1
  87. package/dist/progress-ring/index.d.ts.map +1 -1
  88. package/dist/progress-ring/index.js +47 -38
  89. package/dist/range-slider/index.d.ts +26 -0
  90. package/dist/range-slider/index.d.ts.map +1 -0
  91. package/dist/range-slider/index.js +44 -0
  92. package/dist/repeat-picker/index.d.ts +22 -0
  93. package/dist/repeat-picker/index.d.ts.map +1 -0
  94. package/dist/repeat-picker/index.js +115 -0
  95. package/dist/skeleton/index.d.ts +12 -2
  96. package/dist/skeleton/index.d.ts.map +1 -1
  97. package/dist/skeleton/index.js +11 -5
  98. package/dist/slider/index.d.ts +2 -0
  99. package/dist/slider/index.d.ts.map +1 -1
  100. package/dist/slider/index.js +19 -18
  101. package/dist/sortable/index.d.ts +33 -0
  102. package/dist/sortable/index.d.ts.map +1 -0
  103. package/dist/sortable/index.js +147 -0
  104. package/dist/sparkline/index.d.ts +15 -0
  105. package/dist/sparkline/index.d.ts.map +1 -0
  106. package/dist/sparkline/index.js +56 -0
  107. package/dist/stepper/index.d.ts +19 -0
  108. package/dist/stepper/index.d.ts.map +1 -0
  109. package/dist/stepper/index.js +53 -0
  110. package/dist/table/index.d.ts +11 -2
  111. package/dist/table/index.d.ts.map +1 -1
  112. package/dist/table/index.js +117 -53
  113. package/dist/table/selection.d.ts +55 -0
  114. package/dist/table/selection.d.ts.map +1 -0
  115. package/dist/table/selection.js +83 -0
  116. package/dist/table/swipe.d.ts +18 -0
  117. package/dist/table/swipe.d.ts.map +1 -0
  118. package/dist/table/swipe.js +53 -0
  119. package/dist/table-of-contents/index.d.ts +1 -0
  120. package/dist/table-of-contents/index.d.ts.map +1 -1
  121. package/dist/table-of-contents/index.js +25 -23
  122. package/dist/tabs/index.d.ts.map +1 -1
  123. package/dist/tabs/index.js +101 -51
  124. package/dist/tag-input/index.d.ts +19 -0
  125. package/dist/tag-input/index.d.ts.map +1 -0
  126. package/dist/tag-input/index.js +61 -0
  127. package/dist/theme-toggle/index.js +6 -6
  128. package/dist/theme.css +340 -8
  129. package/dist/timeline/index.d.ts +18 -0
  130. package/dist/timeline/index.d.ts.map +1 -0
  131. package/dist/timeline/index.js +45 -0
  132. package/dist/toast/index.js +25 -25
  133. package/dist/toggle/index.d.ts.map +1 -1
  134. package/dist/toggle/index.js +1 -1
  135. package/dist/tree/index.d.ts.map +1 -1
  136. package/dist/tree/index.js +68 -67
  137. package/dist/trend/index.d.ts +19 -0
  138. package/dist/trend/index.d.ts.map +1 -0
  139. package/dist/trend/index.js +27 -0
  140. package/dist/utils/date.d.ts +34 -0
  141. package/dist/utils/date.d.ts.map +1 -1
  142. package/dist/utils/date.js +45 -12
  143. package/dist/utils/indicator.d.ts.map +1 -1
  144. package/dist/utils/indicator.js +1 -1
  145. package/dist/utils/money.d.ts +3 -1
  146. package/dist/utils/money.d.ts.map +1 -1
  147. package/dist/utils/money.js +24 -1
  148. package/dist/utils/motion.d.ts +3 -0
  149. package/dist/utils/motion.d.ts.map +1 -0
  150. package/dist/utils/motion.js +7 -0
  151. package/dist/utils/repeat.d.ts +17 -0
  152. package/dist/utils/repeat.d.ts.map +1 -0
  153. package/dist/utils/repeat.js +38 -0
  154. package/dist/utils/section-link.d.ts +9 -0
  155. package/dist/utils/section-link.d.ts.map +1 -0
  156. package/dist/utils/section-link.js +10 -0
  157. package/dist/utils/swipe.d.ts +29 -0
  158. package/dist/utils/swipe.d.ts.map +1 -0
  159. package/dist/utils/swipe.js +85 -0
  160. package/dist/utils/theme-wave.d.ts.map +1 -1
  161. package/dist/utils/theme-wave.js +72 -71
  162. package/dist/utils/useAnchoredPopup.d.ts.map +1 -1
  163. package/dist/utils/useAnchoredPopup.js +3 -4
  164. package/dist/utils/useSeen.d.ts +4 -0
  165. package/dist/utils/useSeen.d.ts.map +1 -0
  166. package/dist/utils/useSeen.js +17 -0
  167. package/dist/zen.css +1 -1
  168. package/package.json +3 -1
@@ -2,9 +2,11 @@ import { Money } from '../utils/money';
2
2
  /**
3
3
  * A number that counts smoothly to each new value (and up from zero when it
4
4
  * first appears). Rounds to whole numbers while moving, so money in minor
5
- * units never shows fractions. Instant with reduced motion.
5
+ * units never shows fractions. With `roll`, each digit rolls to its new one
6
+ * instead, like an odometer: easier to read when a total changes. Instant
7
+ * with reduced motion.
6
8
  */
7
- export default function AnimatedNumber({ value, format, duration, fromZero, className, }: AnimatedNumberProps): import('react').JSX.Element;
9
+ export default function AnimatedNumber({ value, format, duration, fromZero, roll, className, }: AnimatedNumberProps): import('react').JSX.Element;
8
10
  /** An amount of money (minor units) that counts to each new value. */
9
11
  export declare function AnimatedMoney({ value, currency, locale, showDecimals, ...rest }: Omit<AnimatedNumberProps, 'format' | 'value'> & {
10
12
  value: Money;
@@ -20,6 +22,8 @@ export interface AnimatedNumberProps {
20
22
  duration?: number;
21
23
  /** Count up from zero when first shown (default), or start at the value. */
22
24
  fromZero?: boolean;
25
+ /** Roll each digit to its new one, like an odometer, instead of counting. */
26
+ roll?: boolean;
23
27
  className?: string;
24
28
  }
25
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/animated-number/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAM3D;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACnC,KAAK,EACL,MAAe,EACf,QAAc,EACd,QAAe,EACf,SAAS,GACZ,EAAE,mBAAmB,+BA0BrB;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,YAAoB,EACpB,GAAG,IAAI,EACV,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG;IAC/C,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,+BAIA;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/animated-number/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAO3D;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACnC,KAAK,EACL,MAAe,EACf,QAAc,EACd,QAAe,EACf,IAAY,EACZ,SAAS,GACZ,EAAE,mBAAmB,+BAiDrB;AAoBD,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,YAAoB,EACpB,GAAG,IAAI,EACV,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG;IAC/C,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,+BAIA;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -1,33 +1,85 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
3
  import { formatMoney as t } from "../utils/money.js";
4
- import { useEffect as n, useLayoutEffect as r, useRef as i, useState as a } from "react";
5
- import { jsx as o } from "react/jsx-runtime";
4
+ import { reducedMotion as n } from "../utils/motion.js";
5
+ import { useEffect as r, useLayoutEffect as i, useRef as a, useState as o } from "react";
6
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
7
  //#region packages/animated-number/index.tsx
7
- var s = typeof window > "u" ? n : r, c = (e) => 1 - (1 - e) ** 3;
8
- function l({ value: t, format: n = String, duration: r = 650, fromZero: l = !0, className: u }) {
9
- let [d, f] = a(l ? 0 : t), p = i(l ? 0 : t);
10
- return s(() => {
11
- if (window.matchMedia?.("(prefers-reduced-motion: reduce)").matches || document.documentElement.classList.contains("reduce-motion") || r <= 0) {
12
- p.current = t, f(t);
8
+ var l = typeof window > "u" ? r : i, u = (e) => 1 - (1 - e) ** 3;
9
+ function d({ value: t, format: i = String, duration: d = 650, fromZero: f = !0, roll: m = !1, className: h }) {
10
+ let [g, _] = o(f ? 0 : t), v = a(f ? 0 : t), [y, b] = o(!f);
11
+ if (r(() => {
12
+ if (!m || y) return;
13
+ let e = requestAnimationFrame(() => b(!0));
14
+ return () => cancelAnimationFrame(e);
15
+ }, [m, y]), l(() => {
16
+ if (m) return;
17
+ if (n() || d <= 0) {
18
+ v.current = t, _(t);
13
19
  return;
14
20
  }
15
- let e = p.current, n = performance.now(), i = requestAnimationFrame(function a(o) {
16
- let s = Math.min(1, (o - n) / r), l = Math.round(e + (t - e) * c(s));
17
- p.current = l, f(l), s < 1 && (i = requestAnimationFrame(a));
21
+ let e = v.current, r = performance.now(), i = requestAnimationFrame(function n(a) {
22
+ let o = Math.min(1, (a - r) / d), s = Math.round(e + (t - e) * u(o));
23
+ v.current = s, _(s), o < 1 && (i = requestAnimationFrame(n));
18
24
  });
19
25
  return () => cancelAnimationFrame(i);
20
- }, [t, r]), /* @__PURE__ */ o("span", {
21
- className: e("zen__animated-number tabular-nums", u),
22
- children: n(d)
26
+ }, [
27
+ t,
28
+ d,
29
+ m
30
+ ]), m) {
31
+ let n = i(t);
32
+ return /* @__PURE__ */ c("span", {
33
+ className: e("zen__animated-number inline-flex items-start tabular-nums", h),
34
+ children: [/* @__PURE__ */ s("span", {
35
+ className: "sr-only",
36
+ children: n
37
+ }), /* @__PURE__ */ s("span", {
38
+ "aria-hidden": !0,
39
+ className: "inline-flex items-start",
40
+ children: n.split("").map((e, t) => /\d/.test(e) ? /* @__PURE__ */ s(p, {
41
+ digit: y ? Number(e) : 0,
42
+ duration: d
43
+ }, n.length - t) : /* @__PURE__ */ s("span", { children: e }, n.length - t))
44
+ })]
45
+ });
46
+ }
47
+ return /* @__PURE__ */ s("span", {
48
+ className: e("zen__animated-number tabular-nums", h),
49
+ children: i(g)
50
+ });
51
+ }
52
+ var f = [
53
+ 0,
54
+ 1,
55
+ 2,
56
+ 3,
57
+ 4,
58
+ 5,
59
+ 6,
60
+ 7,
61
+ 8,
62
+ 9
63
+ ];
64
+ function p({ digit: e, duration: t }) {
65
+ return /* @__PURE__ */ s("span", {
66
+ className: "inline-block h-[1lh] overflow-hidden",
67
+ children: /* @__PURE__ */ s("span", {
68
+ className: "zen__digit ease-out-soft flex flex-col transition-[translate]",
69
+ style: {
70
+ translate: `0 ${-e * 10}%`,
71
+ transitionDuration: `${t}ms`
72
+ },
73
+ children: f.map((e) => /* @__PURE__ */ s("span", { children: e }, e))
74
+ })
23
75
  });
24
76
  }
25
- function u({ value: e, currency: n, locale: r, showDecimals: i = !1, ...a }) {
26
- return /* @__PURE__ */ o(l, {
77
+ function m({ value: e, currency: n, locale: r, showDecimals: i = !1, ...a }) {
78
+ return /* @__PURE__ */ s(d, {
27
79
  value: e,
28
80
  format: (e) => t(e, n, r, { showDecimals: i }),
29
81
  ...a
30
82
  });
31
83
  }
32
84
  //#endregion
33
- export { u as AnimatedMoney, l as default };
85
+ export { m as AnimatedMoney, d as default };
@@ -0,0 +1,15 @@
1
+ import { ComponentProps } from 'react';
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;
4
+ /**
5
+ * One crumb: a link, or with `current`, the page you're on (not a link). With
6
+ * `asChild`, the styles go onto your own link element (a router's Link).
7
+ */
8
+ export declare function Breadcrumb({ current, asChild, className, ...rest }: BreadcrumbProps): import('react').JSX.Element;
9
+ export interface BreadcrumbProps extends ComponentProps<'a'> {
10
+ /** The page you're on: the last crumb. */
11
+ current?: boolean;
12
+ /** Style the single child element (e.g. a router link) instead of rendering an <a>. */
13
+ asChild?: boolean;
14
+ }
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,39 @@
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";
7
+ //#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", {
15
+ 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
+ "aria-hidden": !0,
18
+ className: "text-muted-foreground/60 flex",
19
+ children: /* @__PURE__ */ o(n, { className: "size-3.5" })
20
+ }), /* @__PURE__ */ o("li", {
21
+ className: "flex min-w-0",
22
+ children: e
23
+ })] }, e.key ?? t))
24
+ })
25
+ });
26
+ }
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", {
30
+ "aria-current": "page",
31
+ className: s,
32
+ ...a
33
+ }) : o(r ? t : "a", {
34
+ className: s,
35
+ ...a
36
+ });
37
+ }
38
+ //#endregion
39
+ export { l as Breadcrumb, c as default };
@@ -0,0 +1,25 @@
1
+ import { DateString } from '../utils/date';
2
+ import { Month } from '../utils/month';
3
+ /**
4
+ * A month as a grid of days, each shaded by its value (e.g. what was spent
5
+ * that day): busy days stand out at a glance. Hover a day for its figure;
6
+ * with `onSelect`, days are buttons.
7
+ */
8
+ export default function CalendarHeatmap({ month, values, locale, format, weekStartsOn, onSelect, selected, label, className, }: CalendarHeatmapProps): import('react').JSX.Element;
9
+ export interface CalendarHeatmapProps {
10
+ month: Month;
11
+ /** Each day's value, by date ("2026-09-03"); days missing have none. */
12
+ values: Partial<Record<DateString, number>>;
13
+ locale: string;
14
+ /** Turns a value into text for its label, e.g. as money. */
15
+ format?: (value: number) => string;
16
+ /** 0 for Sunday … 6 for Saturday (default: the locale's). */
17
+ weekStartsOn?: number;
18
+ /** Makes the days buttons. */
19
+ onSelect?: (day: DateString) => void;
20
+ selected?: DateString | null;
21
+ /** Accessible name (default: the month, e.g. "September 2026"). */
22
+ label?: string;
23
+ className?: string;
24
+ }
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/calendar-heatmap/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAA+D,MAAM,iBAAiB,CAAC;AAC/G,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACpC,KAAK,EACL,MAAM,EACN,MAAM,EACN,MAAe,EACf,YAAgC,EAChC,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,SAAS,GACZ,EAAE,oBAAoB,+BAsFtB;AAED,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,wEAAwE;IACxE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { formatMonth as t } from "../utils/month.js";
4
+ import { dayOfWeek as n, daysInMonth as r, formatDate as i, weekStart as a, weekdayNames as o } from "../utils/date.js";
5
+ import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
6
+ //#region packages/calendar-heatmap/index.tsx
7
+ function u({ month: u, values: d, locale: f, format: p = String, weekStartsOn: m = a(f), onSelect: h, selected: g, label: _, className: v }) {
8
+ let y = r(u), b = Array.from({ length: y }, (e, t) => `${u}-${String(t + 1).padStart(2, "0")}`), x = (n(b[0]) - m + 7) % 7, S = [...Array(x).fill(null), ...b];
9
+ for (; S.length % 7;) S.push(null);
10
+ let C = Array.from({ length: S.length / 7 }, (e, t) => S.slice(t * 7, t * 7 + 7)), w = o(f, "narrow"), T = o(f, "long"), E = Array.from({ length: 7 }, (e, t) => (m + t) % 7), D = Math.max(0, ...b.map((e) => d[e] ?? 0));
11
+ return /* @__PURE__ */ l("table", {
12
+ "aria-label": _ ?? t(u, f, "long"),
13
+ className: e("zen__calendar-heatmap w-full table-fixed border-separate border-spacing-1", v),
14
+ children: [/* @__PURE__ */ c("thead", { children: /* @__PURE__ */ c("tr", { children: E.map((e) => /* @__PURE__ */ c("th", {
15
+ scope: "col",
16
+ abbr: T[e],
17
+ className: "text-muted-foreground pb-1 text-xs font-normal",
18
+ children: w[e]
19
+ }, e)) }) }), /* @__PURE__ */ c("tbody", { children: C.map((t, n) => /* @__PURE__ */ c("tr", { children: t.map((t, n) => {
20
+ if (!t) return /* @__PURE__ */ c("td", {}, n);
21
+ let r = d[t], a = D > 0 && r ? Math.sqrt(r / D) : 0, o = `${i(t, f, "day")}: ${p(r || 0)}`, u = e("relative grid aspect-square w-full place-items-center rounded-md text-[0.65rem] tabular-nums transition-[box-shadow]", a ? a > .6 ? "text-primary-foreground" : "text-foreground/80" : "bg-tint/[0.04] text-muted-foreground", t === g && "ring-ring ring-2"), m = a ? { background: `oklch(var(--primary) / ${+(.14 + .81 * a).toFixed(2)})` } : void 0, _ = /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c("span", {
22
+ "aria-hidden": !0,
23
+ children: Number(t.slice(8))
24
+ }), /* @__PURE__ */ c("span", {
25
+ className: "sr-only",
26
+ children: o
27
+ })] });
28
+ return /* @__PURE__ */ c("td", {
29
+ title: o,
30
+ className: "p-0",
31
+ children: h ? /* @__PURE__ */ c("button", {
32
+ type: "button",
33
+ "aria-pressed": t === g,
34
+ onClick: () => h(t),
35
+ className: e(u, "focus-visible:ring-ring/60 cursor-pointer outline-hidden hover:shadow-[0_0_0_1px_oklch(var(--tint)/0.3)] focus-visible:ring-2"),
36
+ style: m,
37
+ children: _
38
+ }) : /* @__PURE__ */ c("span", {
39
+ className: u,
40
+ style: m,
41
+ children: _
42
+ })
43
+ }, t);
44
+ }) }, n)) })]
45
+ });
46
+ }
47
+ //#endregion
48
+ export { u as default };
@@ -11,7 +11,7 @@ export declare function CardDescription({ className, ...rest }: ComponentProps<'
11
11
  /** The card's title: an h4 by default; with `asChild`, your own heading (an h2, say) gets its look. */
12
12
  export declare function CardTitle({ asChild, className, children, ...rest }: CardTitleProps): import('react').JSX.Element;
13
13
  /** A single figure with a label, e.g. "Revenue $12,400". */
14
- export declare function Stat({ label, value, hint, tone, className }: StatProps): import('react').JSX.Element;
14
+ export declare function Stat({ label, value, hint, tone, className, children }: StatProps): import('react').JSX.Element;
15
15
  /** Row of stats: two columns on phones (an odd last one spans both), three from `sm` up. */
16
16
  export declare function StatRow({ children, className }: {
17
17
  children: ReactNode;
@@ -28,5 +28,7 @@ export interface StatProps {
28
28
  hint?: ReactNode;
29
29
  tone?: 'default' | 'positive' | 'negative';
30
30
  className?: string;
31
+ /** Under the figure: how it got there, like a Sparkline. */
32
+ children?: ReactNode;
31
33
  }
32
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/card/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,+BAO7D;AAED,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,+BAE1E;AAED,6GAA6G;AAC7G,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,GAAG,CAAC,+BAE1E;AAED,uGAAuG;AACvG,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,+BAIlF;AAED,6DAA6D;AAC7D,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAgB,EAAE,SAAS,EAAE,EAAE,SAAS,+BAkBlF;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAY3F;AAED,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;AAElD,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,IAAI,CAAC;IACxD,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/card/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,+BAO7D;AAED,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,+BAE1E;AAED,6GAA6G;AAC7G,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,GAAG,CAAC,+BAE1E;AAED,uGAAuG;AACvG,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,+BAIlF;AAED,6DAA6D;AAC7D,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,SAAS,+BAmB5F;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAY3F;AAED,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;AAElD,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,IAAI,CAAC;IACxD,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB"}
@@ -31,7 +31,7 @@ function s({ asChild: r, className: i, children: a, ...o }) {
31
31
  children: a
32
32
  });
33
33
  }
34
- function c({ label: t, value: i, hint: a, tone: o = "default", className: s }) {
34
+ function c({ label: t, value: i, hint: a, tone: o = "default", className: s, children: c }) {
35
35
  return /* @__PURE__ */ r("div", {
36
36
  className: e("zen__stat glass glow-edge flex flex-col gap-1 rounded-xl p-3.5 md:p-4", s),
37
37
  children: [
@@ -46,7 +46,8 @@ function c({ label: t, value: i, hint: a, tone: o = "default", className: s }) {
46
46
  a && /* @__PURE__ */ n("span", {
47
47
  className: "text-muted-foreground text-xs",
48
48
  children: a
49
- })
49
+ }),
50
+ c
50
51
  ]
51
52
  });
52
53
  }
@@ -0,0 +1,30 @@
1
+ import { ChartPalette } from './palette';
2
+ /**
3
+ * Where a whole went, as one bar split into its parts (e.g. income across
4
+ * spending, savings and bills), with a legend of each part's value and share.
5
+ * Pointing at a part, in the bar or the legend, picks it out; screen readers
6
+ * hear every part's value and share from the bar's label. Sweeps in from
7
+ * the start the first time it's seen. Colours default to the chart palette in
8
+ * order, like DonutChart's.
9
+ */
10
+ export default function AllocationBar({ items, label, palette, formatValue, locale, legend, className, }: AllocationBarProps): import('react').JSX.Element;
11
+ export interface AllocationItem {
12
+ key: string;
13
+ label: string;
14
+ value: number;
15
+ color?: string;
16
+ }
17
+ export interface AllocationBarProps {
18
+ items: AllocationItem[];
19
+ /** What the whole is, e.g. "Income in September", for screen readers. */
20
+ label: string;
21
+ /** Colours for items that don't give their own: the categorical palette (default), or shades of the theme's glow. */
22
+ palette?: ChartPalette;
23
+ formatValue?: (value: number) => string;
24
+ /** For the shares' percent format. */
25
+ locale?: string;
26
+ /** The list of parts under the bar (default on). */
27
+ legend?: boolean;
28
+ className?: string;
29
+ }
30
+ //# sourceMappingURL=allocation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allocation.d.ts","sourceRoot":"","sources":["../../packages/chart/allocation.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,WAAW,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAClC,KAAK,EACL,KAAK,EACL,OAAiB,EACjB,WAAoB,EACpB,MAAM,EACN,MAAa,EACb,SAAS,GACZ,EAAE,kBAAkB,+BAuEpB;AAED,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,qHAAqH;IACrH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,69 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { useSeen as t } from "../utils/useSeen.js";
4
+ import { paletteColor as n } from "./palette.js";
5
+ import { useRef as r, useState as i } from "react";
6
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
7
+ //#region packages/chart/allocation.tsx
8
+ function s({ items: s, label: c, palette: l = "chart", formatValue: u = String, locale: d, legend: f = !0, className: p }) {
9
+ let [m, h] = i(null), g = r(null), _ = t(g), v = s.filter((e) => e.value > 0), y = v.reduce((e, t) => e + t.value, 0), b = (e) => {
10
+ let t = s.findIndex((t) => t.key === e);
11
+ return s[t].color ?? n(l, t, s.length);
12
+ }, x = new Intl.NumberFormat(d, {
13
+ style: "percent",
14
+ maximumFractionDigits: 0
15
+ });
16
+ return /* @__PURE__ */ o("div", {
17
+ ref: g,
18
+ "data-zen-unseen": _ ? void 0 : "",
19
+ className: e("zen__allocation flex flex-col gap-3", p),
20
+ children: [/* @__PURE__ */ a("div", {
21
+ role: "img",
22
+ "aria-label": `${c}. ${v.map((e) => `${e.label}: ${u(e.value)}, ${x.format(y ? e.value / y : 0)}`).join("; ")}`,
23
+ className: "zen__chart-sweep flex h-3 gap-0.5 overflow-hidden rounded-full",
24
+ children: v.map((e) => /* @__PURE__ */ a("span", {
25
+ "data-active": m === e.key || void 0,
26
+ "data-dimmed": m !== null && m !== e.key || void 0,
27
+ onPointerEnter: () => h(e.key),
28
+ onPointerLeave: () => h(null),
29
+ className: "min-w-1 transition-[opacity,filter] duration-200 first:rounded-s-full last:rounded-e-full data-active:[filter:drop-shadow(0_0_8px_var(--part))] data-dimmed:opacity-35",
30
+ style: {
31
+ flexGrow: e.value,
32
+ flexBasis: 0,
33
+ background: b(e.key),
34
+ "--part": b(e.key)
35
+ }
36
+ }, e.key))
37
+ }), f && /* @__PURE__ */ a("ul", {
38
+ "aria-hidden": !0,
39
+ className: "grid gap-x-6 gap-y-1.5 text-sm sm:grid-cols-2",
40
+ children: s.map((e) => /* @__PURE__ */ o("li", {
41
+ onPointerEnter: () => h(e.key),
42
+ onPointerLeave: () => h(null),
43
+ "data-dimmed": m !== null && m !== e.key || void 0,
44
+ className: "flex items-center gap-2 transition-opacity duration-200 data-dimmed:opacity-50",
45
+ children: [
46
+ /* @__PURE__ */ a("span", {
47
+ "aria-hidden": !0,
48
+ className: "size-2.5 shrink-0 rounded-full",
49
+ style: { background: b(e.key) }
50
+ }),
51
+ /* @__PURE__ */ a("span", {
52
+ className: "min-w-0 flex-1 truncate",
53
+ children: e.label
54
+ }),
55
+ /* @__PURE__ */ a("span", {
56
+ className: "tabular-nums",
57
+ children: u(e.value)
58
+ }),
59
+ /* @__PURE__ */ a("span", {
60
+ className: "text-muted-foreground w-10 text-end tabular-nums",
61
+ children: x.format(y ? Math.max(0, e.value) / y : 0)
62
+ })
63
+ ]
64
+ }, e.key))
65
+ })]
66
+ });
67
+ }
68
+ //#endregion
69
+ export { s as default };
@@ -1 +1 @@
1
- {"version":3,"file":"donut.d.ts","sourceRoot":"","sources":["../../packages/chart/donut.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAqC,MAAM,OAAO,CAAC;AAErE,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,WAAW,CAAC;AAG5D;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,IAAU,EACV,SAAgB,EAChB,OAAiB,EACjB,WAAoB,EACpB,QAAQ,EACR,SAAS,GACZ,EAAE,eAAe,+BAiIjB;AA+FD,MAAM,WAAW,eAAe;IAC5B,0DAA0D;IAC1D,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvE,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,qHAAqH;IACrH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"donut.d.ts","sourceRoot":"","sources":["../../packages/chart/donut.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAqC,MAAM,OAAO,CAAC;AAErE,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,WAAW,CAAC;AAG5D;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,IAAU,EACV,SAAgB,EAChB,OAAiB,EACjB,WAAoB,EACpB,QAAQ,EACR,SAAS,GACZ,EAAE,eAAe,+BAuIjB;AA+FD,MAAM,WAAW,eAAe;IAC5B,0DAA0D;IAC1D,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvE,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,qHAAqH;IACrH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}