@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
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { THUMB as t } from "../slider/index.js";
4
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
5
+ //#region packages/range-slider/index.tsx
6
+ function i({ value: [i, a], min: o = 0, max: s = 100, step: c = 1, onValueChange: l, onValueCommit: u, label: d, thumbLabels: f = ["Minimum", "Maximum"], valueText: p, disabled: m, className: h }) {
7
+ let g = (e) => s > o ? (e - o) / (s - o) * 100 : 0, _ = [{
8
+ value: i,
9
+ set: (e) => [Math.min(e, a), a]
10
+ }, {
11
+ value: a,
12
+ set: (e) => [i, Math.max(e, i)]
13
+ }];
14
+ return /* @__PURE__ */ r("div", {
15
+ role: "group",
16
+ "aria-label": d,
17
+ className: e("zen__range-slider relative h-5 w-full", m && "opacity-50", h),
18
+ style: { "--zen-thumb": "oklch(var(--primary))" },
19
+ children: [/* @__PURE__ */ n("div", {
20
+ "aria-hidden": !0,
21
+ className: "absolute inset-x-0 top-1/2 h-2.5 -translate-y-1/2 rounded-full",
22
+ style: { background: `linear-gradient(to right, oklch(var(--muted)) ${g(i)}%, oklch(var(--primary)) ${g(i)}% ${g(a)}%, oklch(var(--muted)) ${g(a)}%)` }
23
+ }), _.map((r, d) => /* @__PURE__ */ n("input", {
24
+ type: "range",
25
+ min: o,
26
+ max: s,
27
+ step: c,
28
+ value: r.value,
29
+ disabled: m,
30
+ "aria-label": f[d],
31
+ "aria-valuetext": p?.(r.value),
32
+ onChange: (e) => {
33
+ let [t, n] = r.set(Number(e.target.value));
34
+ l?.([t, n]);
35
+ },
36
+ onPointerUp: () => u?.([i, a]),
37
+ onKeyUp: () => u?.([i, a]),
38
+ style: { zIndex: d === 0 && i > (o + s) / 2 ? 2 : 1 },
39
+ className: e("pointer-events-none absolute inset-0 h-5 w-full cursor-pointer appearance-none bg-transparent outline-hidden disabled:cursor-not-allowed", "[&::-webkit-slider-runnable-track]:h-2.5 [&::-moz-range-track]:h-2.5 [&::-moz-range-track]:bg-transparent", "[&::-webkit-slider-thumb]:pointer-events-auto [&::-moz-range-thumb]:pointer-events-auto", t)
40
+ }, d))]
41
+ });
42
+ }
43
+ //#endregion
44
+ export { i as default };
@@ -0,0 +1,22 @@
1
+ import { DateString } from '../utils/date';
2
+ import { Repeat } from '../utils/repeat';
3
+ /**
4
+ * How often something recurs, e.g. a bill: every n days, weeks, months or
5
+ * years, on chosen weekdays or a day of the month. Says what it means in
6
+ * words, and with a `start` date, the next few dates it falls on.
7
+ */
8
+ export default function RepeatPicker({ value, onChange, locale, start, weekStartsOn, label, className, }: RepeatPickerProps): import('react').JSX.Element;
9
+ export interface RepeatPickerProps {
10
+ value: Repeat;
11
+ onChange: (value: Repeat) => void;
12
+ /** For weekday and date names, and the week's first day. */
13
+ locale: string;
14
+ /** When it starts: its weekday and day of the month are the defaults, and the next dates are shown. */
15
+ start?: DateString;
16
+ /** 0 for Sunday … 6. Defaults to the locale's. */
17
+ weekStartsOn?: number;
18
+ /** The group's name for screen readers (default "Repeats"). */
19
+ label?: string;
20
+ className?: string;
21
+ }
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/repeat-picker/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAkD,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAmC,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKjF;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,YAAgC,EAChC,KAAiB,EACjB,SAAS,GACZ,EAAE,iBAAiB,+BA4FnB;AAED,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,uGAAuG;IACvG,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,115 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import t from "../chip/index.js";
4
+ import n from "../input/index.js";
5
+ import { dayOfWeek as r, formatDate as i, weekStart as a, weekdayNames as o } from "../utils/date.js";
6
+ import s, { SelectItem as c } from "../select/index.js";
7
+ import { describeRepeat as l, nextOccurrences as u } from "../utils/repeat.js";
8
+ import { useState as d } from "react";
9
+ import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
10
+ //#region packages/repeat-picker/index.tsx
11
+ var h = [
12
+ "day",
13
+ "week",
14
+ "month",
15
+ "year"
16
+ ];
17
+ function g({ value: g, onChange: _, locale: v, start: y, weekStartsOn: b = a(v), label: x = "Repeats", className: S }) {
18
+ let [C, w] = d(String(g.every));
19
+ Number(C) !== g.every && C !== "" && w(String(g.every));
20
+ let T = o(v), E = Array.from({ length: 7 }, (e, t) => (b + t) % 7), D = g.weekdays ?? (y ? [r(y)] : []), O = g.every !== 1;
21
+ return /* @__PURE__ */ m("fieldset", {
22
+ className: e("zen__repeat-picker flex flex-col gap-3", S),
23
+ children: [
24
+ /* @__PURE__ */ p("legend", {
25
+ className: "sr-only",
26
+ children: x
27
+ }),
28
+ /* @__PURE__ */ m("div", {
29
+ className: "flex items-center gap-2 text-sm",
30
+ children: [
31
+ /* @__PURE__ */ p("span", {
32
+ className: "text-muted-foreground",
33
+ children: "Every"
34
+ }),
35
+ /* @__PURE__ */ p(n, {
36
+ "aria-label": "How many",
37
+ inputMode: "numeric",
38
+ value: C,
39
+ onChange: (e) => {
40
+ let t = e.target.value.replace(/\D/g, "").slice(0, 3);
41
+ w(t), Number(t) >= 1 && _({
42
+ ...g,
43
+ every: Number(t)
44
+ });
45
+ },
46
+ onBlur: () => w(String(g.every)),
47
+ className: "w-16 text-center tabular-nums"
48
+ }),
49
+ /* @__PURE__ */ p(s, {
50
+ "aria-label": "Unit",
51
+ value: g.unit,
52
+ onChange: (e) => {
53
+ let t = {
54
+ every: g.every,
55
+ unit: e
56
+ };
57
+ e === "week" && y && (t.weekdays = [r(y)]), e === "month" && (t.day = y ? Number(y.slice(8)) : 1), _(t);
58
+ },
59
+ className: "w-32",
60
+ children: h.map((e) => /* @__PURE__ */ p(c, {
61
+ value: e,
62
+ children: O ? `${e}s` : e
63
+ }, e))
64
+ })
65
+ ]
66
+ }),
67
+ g.unit === "week" && /* @__PURE__ */ p("div", {
68
+ role: "group",
69
+ "aria-label": "On",
70
+ className: "flex flex-wrap gap-1.5",
71
+ children: E.map((e) => {
72
+ let n = D.includes(e);
73
+ return /* @__PURE__ */ p(t, {
74
+ pressed: n,
75
+ onClick: () => {
76
+ n && D.length === 1 || _({
77
+ ...g,
78
+ weekdays: n ? D.filter((t) => t !== e) : [...D, e]
79
+ });
80
+ },
81
+ children: T[e]
82
+ }, e);
83
+ })
84
+ }),
85
+ g.unit === "month" && /* @__PURE__ */ m(s, {
86
+ "aria-label": "On",
87
+ value: String(g.day ?? (y ? Number(y.slice(8)) : 1)),
88
+ onChange: (e) => _({
89
+ ...g,
90
+ day: Number(e)
91
+ }),
92
+ className: "w-40",
93
+ children: [Array.from({ length: 31 }, (e, t) => /* @__PURE__ */ m(c, {
94
+ value: String(t + 1),
95
+ children: ["Day ", t + 1]
96
+ }, t + 1)), /* @__PURE__ */ p(c, {
97
+ value: "-1",
98
+ children: "Last day"
99
+ })]
100
+ }),
101
+ /* @__PURE__ */ m("p", {
102
+ "aria-live": "polite",
103
+ className: "text-muted-foreground text-sm",
104
+ children: [l(g, v, y), y && /* @__PURE__ */ m(f, { children: [
105
+ /* @__PURE__ */ p("br", {}),
106
+ "Next:",
107
+ " ",
108
+ u(g, y, 3).map((e) => i(e, v)).join(", ")
109
+ ] })]
110
+ })
111
+ ]
112
+ });
113
+ }
114
+ //#endregion
115
+ export { g as default };
@@ -1,6 +1,16 @@
1
- /** Shimmering placeholder in the shape of content that's on its way. Size it with className. */
2
- export default function Skeleton({ className }: SkeletonProps): import('react').JSX.Element;
1
+ import { ReactElement } from 'react';
2
+ /**
3
+ * Shimmering placeholder in the shape of content that's on its way. Size it with className.
4
+ *
5
+ * Give it the content as its child and `loading`: the placeholder shows while
6
+ * loading, then the content fades in where it was.
7
+ */
8
+ export default function Skeleton({ className, loading, children }: SkeletonProps): import('react').JSX.Element;
3
9
  export interface SkeletonProps {
4
10
  className?: string;
11
+ /** With children: show the placeholder instead of them while true. */
12
+ loading?: boolean;
13
+ /** The content this stands in for, a single element. */
14
+ children?: ReactElement;
5
15
  }
6
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/skeleton/index.tsx"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE,aAAa,+BAE5D;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/skeleton/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAY,MAAM,OAAO,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,aAAa,+BAK/E;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,YAAY,CAAC;CAC3B"}
@@ -1,12 +1,18 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { jsx as t } from "react/jsx-runtime";
3
+ import { Slot as t } from "../utils/slot.js";
4
+ import { useState as n } from "react";
5
+ import { jsx as r } from "react/jsx-runtime";
4
6
  //#region packages/skeleton/index.tsx
5
- function n({ className: n }) {
6
- return /* @__PURE__ */ t("span", {
7
+ function i({ className: i, loading: a, children: o }) {
8
+ let [s, c] = n(!!a);
9
+ return a && !s && c(!0), o && !a ? s ? /* @__PURE__ */ r(t, {
10
+ className: "zen__reveal",
11
+ children: o
12
+ }) : o : /* @__PURE__ */ r("span", {
7
13
  "aria-hidden": !0,
8
- className: e("zen__skeleton block rounded-md", n)
14
+ className: e("zen__skeleton block rounded-md", i)
9
15
  });
10
16
  }
11
17
  //#endregion
12
- export { n as default };
18
+ export { i as default };
@@ -6,6 +6,8 @@ import { ComponentProps } from 'react';
6
6
  * gradient), and a glowing thumb.
7
7
  */
8
8
  export default function Slider({ value, min, max, step, onValueChange, onValueCommit, trackBackground, thumbColor, valueText, className, style, ...rest }: SliderProps): import('react').JSX.Element;
9
+ /** The glowing thumb, with its focus ring: Slider's and RangeSlider's. */
10
+ export declare const THUMB: string;
9
11
  export interface SliderProps extends Omit<ComponentProps<'input'>, 'type' | 'value' | 'min' | 'max' | 'step' | 'onChange' | 'defaultValue'> {
10
12
  value: number;
11
13
  min?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/slider/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAoC,MAAM,OAAO,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,KAAK,EACL,GAAO,EACP,GAAS,EACT,IAAQ,EACR,aAAa,EACb,aAAa,EACb,eAAe,EACf,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACV,EAAE,WAAW,+BAkDb;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CACrC,cAAc,CAAC,OAAO,CAAC,EACvB,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,cAAc,CAC1E;IACG,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iDAAiD;IACjD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/slider/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAoC,MAAM,OAAO,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,KAAK,EACL,GAAO,EACP,GAAS,EACT,IAAQ,EACR,aAAa,EACb,aAAa,EACb,eAAe,EACf,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACV,EAAE,WAAW,+BA6Cb;AAED,0EAA0E;AAC1E,eAAO,MAAM,KAAK,QAI+E,CAAC;AAElG,MAAM,WAAW,WAAY,SAAQ,IAAI,CACrC,cAAc,CAAC,OAAO,CAAC,EACvB,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,cAAc,CAC1E;IACG,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iDAAiD;IACjD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC"}
@@ -3,32 +3,33 @@ import { cx as e } from "../utils/cx.js";
3
3
  import { useEffect as t, useRef as n } from "react";
4
4
  import { jsx as r } from "react/jsx-runtime";
5
5
  //#region packages/slider/index.tsx
6
- function i({ value: i, min: a = 0, max: o = 100, step: s = 1, onValueChange: c, onValueCommit: l, trackBackground: u, thumbColor: d, valueText: f, className: p, style: m, ...h }) {
7
- let g = n(null), _ = n(l);
8
- _.current = l, t(() => {
9
- let e = g.current;
6
+ function i({ value: i, min: o = 0, max: s = 100, step: c = 1, onValueChange: l, onValueCommit: u, trackBackground: d, thumbColor: f, valueText: p, className: m, style: h, ...g }) {
7
+ let _ = n(null), v = n(u);
8
+ v.current = u, t(() => {
9
+ let e = _.current;
10
10
  if (!e) return;
11
- let t = () => _.current?.(Number(e.value));
11
+ let t = () => v.current?.(Number(e.value));
12
12
  return e.addEventListener("change", t), () => e.removeEventListener("change", t);
13
13
  }, []);
14
- let v = o > a ? (i - a) / (o - a) * 100 : 0, y = u ?? `linear-gradient(to right, oklch(var(--primary)) ${v}%, oklch(var(--muted)) ${v}%)`;
14
+ let y = s > o ? (i - o) / (s - o) * 100 : 0, b = d ?? `linear-gradient(to right, oklch(var(--primary)) ${y}%, oklch(var(--muted)) ${y}%)`;
15
15
  return /* @__PURE__ */ r("input", {
16
- ref: g,
16
+ ref: _,
17
17
  type: "range",
18
- min: a,
19
- max: o,
20
- step: s,
18
+ min: o,
19
+ max: s,
20
+ step: c,
21
21
  value: i,
22
- "aria-valuetext": f?.(i),
23
- onChange: (e) => c?.(Number(e.target.value)),
22
+ "aria-valuetext": p?.(i),
23
+ onChange: (e) => l?.(Number(e.target.value)),
24
24
  style: {
25
- ...m,
26
- "--zen-track": y,
27
- "--zen-thumb": d ?? "oklch(var(--primary))"
25
+ ...h,
26
+ "--zen-track": b,
27
+ "--zen-thumb": f ?? "oklch(var(--primary))"
28
28
  },
29
- className: e("zen__slider h-5 w-full cursor-pointer appearance-none bg-transparent outline-hidden disabled:cursor-not-allowed disabled:opacity-50", "[&::-webkit-slider-runnable-track]:h-2.5 [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:[background:var(--zen-track)]", "[&::-moz-range-track]:h-2.5 [&::-moz-range-track]:rounded-full [&::-moz-range-track]:[background:var(--zen-track)]", "[&::-webkit-slider-thumb]:-mt-[5px] [&::-webkit-slider-thumb]:size-5 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-white [&::-webkit-slider-thumb]:shadow-[0_0_0_1px_oklch(0_0_0/0.3),0_0_16px_oklch(var(--glow)/calc(0.8*var(--glow-k)))] [&::-webkit-slider-thumb]:[background:var(--zen-thumb)]", "[&::-moz-range-thumb]:size-5 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-white [&::-moz-range-thumb]:shadow-[0_0_0_1px_oklch(0_0_0/0.3),0_0_16px_oklch(var(--glow)/calc(0.8*var(--glow-k)))] [&::-moz-range-thumb]:[background:var(--zen-thumb)]", "focus-visible:[&::-webkit-slider-thumb]:ring-ring/40 focus-visible:[&::-webkit-slider-thumb]:ring-4", "focus-visible:[&::-moz-range-thumb]:ring-ring/40 focus-visible:[&::-moz-range-thumb]:ring-4", p),
30
- ...h
29
+ className: e("zen__slider h-5 w-full cursor-pointer appearance-none bg-transparent outline-hidden disabled:cursor-not-allowed disabled:opacity-50", "[&::-webkit-slider-runnable-track]:h-2.5 [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:[background:var(--zen-track)]", "[&::-moz-range-track]:h-2.5 [&::-moz-range-track]:rounded-full [&::-moz-range-track]:[background:var(--zen-track)]", a, m),
30
+ ...g
31
31
  });
32
32
  }
33
+ var a = "[&::-webkit-slider-thumb]:-mt-[5px] [&::-webkit-slider-thumb]:size-5 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-white [&::-webkit-slider-thumb]:shadow-[0_0_0_1px_oklch(0_0_0/0.3),0_0_16px_oklch(var(--glow)/calc(0.8*var(--glow-k)))] [&::-webkit-slider-thumb]:[background:var(--zen-thumb)] [&::-moz-range-thumb]:size-5 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-white [&::-moz-range-thumb]:shadow-[0_0_0_1px_oklch(0_0_0/0.3),0_0_16px_oklch(var(--glow)/calc(0.8*var(--glow-k)))] [&::-moz-range-thumb]:[background:var(--zen-thumb)] focus-visible:[&::-webkit-slider-thumb]:ring-ring/40 focus-visible:[&::-webkit-slider-thumb]:ring-4 focus-visible:[&::-moz-range-thumb]:ring-ring/40 focus-visible:[&::-moz-range-thumb]:ring-4";
33
34
  //#endregion
34
- export { i as default };
35
+ export { a as THUMB, i as default };
@@ -0,0 +1,33 @@
1
+ import { ComponentProps } from 'react';
2
+ /**
3
+ * A list put in order by dragging, e.g. budget categories: drag an item by its
4
+ * SortableHandle and the others make way (a phone taps lightly at each new
5
+ * place); it settles into place when let go.
6
+ * From the keyboard, Space or Enter on a handle picks the item up, the arrow
7
+ * keys move it, Space or Enter drops it and Escape puts it back; each step is
8
+ * announced. `value` is the ids in order; render a SortableItem for each.
9
+ */
10
+ export declare function SortableList({ value, onChange, className, children, ...rest }: SortableListProps): import('react').JSX.Element;
11
+ /** One item in a SortableList; give it the `id` it has in the list's value. */
12
+ export declare function SortableItem({ id, className, ...rest }: SortableItemProps): import('react').JSX.Element;
13
+ /**
14
+ * What an item is dragged by: a grip button. `label` names the item ("Rent");
15
+ * the button reads "Reorder Rent". It takes no scroll gestures, so dragging it
16
+ * never scrolls the page.
17
+ */
18
+ export declare function SortableHandle({ id, label, className, children, ...rest }: SortableHandleProps): import('react').JSX.Element;
19
+ export interface SortableListProps extends Omit<ComponentProps<'ul'>, 'onChange'> {
20
+ /** The items' ids, in order. */
21
+ value: readonly string[];
22
+ onChange: (value: string[]) => void;
23
+ }
24
+ export interface SortableItemProps extends ComponentProps<'li'> {
25
+ id: string;
26
+ }
27
+ export interface SortableHandleProps extends Omit<ComponentProps<'button'>, 'id'> {
28
+ /** The item's id, as in the list's value. */
29
+ id: string;
30
+ /** The item's name, e.g. "Rent". */
31
+ label: string;
32
+ }
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/sortable/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,cAAc,EASjB,MAAM,OAAO,CAAC;AA2Bf;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,+BAuJhG;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,+BAazE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,mBAAmB,+BAwB9F;AAUD,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC7E,gCAAgC;IAChC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,IAAI,CAAC;IAC3D,EAAE,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAC7E,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,147 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { reducedMotion as t } from "../utils/motion.js";
4
+ import { createContext as n, useContext as r, useEffect as i, useLayoutEffect as a, useRef as o, useState as s } from "react";
5
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
+ //#region packages/sortable/index.tsx
7
+ var u = typeof window > "u" ? i : a, d = {
8
+ duration: 220,
9
+ easing: "cubic-bezier(0.2, 0.8, 0.2, 1)"
10
+ }, f = 48, p = n(null);
11
+ function m(e) {
12
+ let t = r(p);
13
+ if (!t) throw Error(`<${e}> must be inside <SortableList>`);
14
+ return t;
15
+ }
16
+ var h = (e, t, n) => {
17
+ let r = [...e];
18
+ return r.splice(n, 0, ...r.splice(t, 1)), r;
19
+ };
20
+ function g({ value: n, onChange: r, className: i, children: a, ...m }) {
21
+ let g = o(null), [_, v] = s(null), [b, x] = s(""), S = o(null), C = o(null), w = () => [...g.current?.querySelectorAll(":scope > [data-sortable-id]") ?? []], T = () => new Map(w().map((e) => [e.dataset.sortableId, e.getBoundingClientRect().top])), E = (e) => {
22
+ S.current = T(), r(e);
23
+ };
24
+ return u(() => {
25
+ let e = S.current;
26
+ if (S.current = null, e) for (let n of w()) {
27
+ n.style.removeProperty("translate");
28
+ let r = e.get(n.dataset.sortableId), i = r === void 0 ? 0 : r - n.getBoundingClientRect().top;
29
+ i && !t() && n.animate?.({ translate: [`0 ${i}px`, "0 0"] }, d);
30
+ }
31
+ }, [n]), /* @__PURE__ */ l(p.Provider, {
32
+ value: {
33
+ grab: (e, r) => {
34
+ if (e.button !== 0 || _) return;
35
+ let i = w(), a = i.findIndex((e) => e.dataset.sortableId === r), o = i[a];
36
+ if (!o) return;
37
+ e.preventDefault();
38
+ let s = e.currentTarget;
39
+ s.setPointerCapture?.(e.pointerId);
40
+ let c = y(g.current), l = c.scrollTop, u = e.clientY, p = i.map((e) => e.getBoundingClientRect()), m = p.length > 1 ? p[1].top - p[0].bottom : 0, v = p[a].height + m, b = p.map((e) => e.top + e.height / 2), x = a, C = e.clientY, D = 0;
41
+ o.dataset.dragging = "", g.current.dataset.sorting = "";
42
+ let O = () => {
43
+ let e = C - u + c.scrollTop - l;
44
+ o.style.translate = `0 ${e}px`;
45
+ let t = b[a] + e, n = x;
46
+ for (x = a; x < i.length - 1 && t > b[x + 1];) x++;
47
+ for (; x > 0 && t < b[x - 1];) x--;
48
+ x !== n && navigator.vibrate?.(5), i.forEach((e, t) => {
49
+ if (t === a) return;
50
+ let n = a < t && t <= x ? -v : x <= t && t < a ? v : 0;
51
+ e.style.translate = n ? `0 ${n}px` : "";
52
+ });
53
+ }, k = () => {
54
+ D = 0;
55
+ let e = c === document.scrollingElement ? {
56
+ top: 0,
57
+ bottom: innerHeight
58
+ } : c.getBoundingClientRect(), t = C < e.top + f ? -(e.top + f - C) : C > e.bottom - f ? C - (e.bottom - f) : 0;
59
+ t && (c.scrollTop += t / 3, O(), D = requestAnimationFrame(k));
60
+ }, A = (t) => {
61
+ t.pointerId === e.pointerId && (C = t.clientY, O(), D ||= requestAnimationFrame(k));
62
+ }, j = (r) => {
63
+ if (r.pointerId === e.pointerId) {
64
+ if (s.removeEventListener("pointermove", A), s.removeEventListener("pointerup", j), s.removeEventListener("pointercancel", j), cancelAnimationFrame(D), delete o.dataset.dragging, delete g.current?.dataset.sorting, r.type === "pointerup" && x !== a) E(h(n, a, x));
65
+ else {
66
+ S.current = T();
67
+ for (let e of i) e.style.removeProperty("translate");
68
+ for (let e of i) {
69
+ let n = S.current.get(e.dataset.sortableId) - e.getBoundingClientRect().top;
70
+ n && !t() && e.animate?.({ translate: [`0 ${n}px`, "0 0"] }, d);
71
+ }
72
+ S.current = null;
73
+ }
74
+ }
75
+ };
76
+ s.addEventListener("pointermove", A), s.addEventListener("pointerup", j), s.addEventListener("pointercancel", j);
77
+ },
78
+ key: (e, t, r) => {
79
+ let i = n.indexOf(t), a = `${i + 1} of ${n.length}`;
80
+ if (e.key === " " || e.key === "Enter") e.preventDefault(), _ === t ? (v(null), C.current = null, x(`${r} dropped, ${a}.`)) : _ || (v(t), C.current = n, x(`${r} picked up, ${a}. Arrow keys move it, Space drops it, Escape puts it back.`));
81
+ else if (_ === t && (e.key === "ArrowUp" || e.key === "ArrowDown")) {
82
+ e.preventDefault();
83
+ let t = i + (e.key === "ArrowUp" ? -1 : 1);
84
+ if (t < 0 || t >= n.length) return;
85
+ E(h(n, i, t)), x(`${r}, ${t + 1} of ${n.length}.`);
86
+ } else if (_ === t && e.key === "Escape") {
87
+ e.preventDefault();
88
+ let i = C.current ?? n;
89
+ v(null), C.current = null, i !== n && E([...i]), x(`${r} put back, ${i.indexOf(t) + 1} of ${i.length}.`);
90
+ }
91
+ },
92
+ lifted: _
93
+ },
94
+ children: [/* @__PURE__ */ c("ul", {
95
+ ref: g,
96
+ className: e("zen__sortable relative flex flex-col", i),
97
+ ...m,
98
+ children: a
99
+ }), /* @__PURE__ */ c("span", {
100
+ "aria-live": "assertive",
101
+ className: "sr-only",
102
+ children: b
103
+ })]
104
+ });
105
+ }
106
+ function _({ id: t, className: n, ...r }) {
107
+ let { lifted: i } = m("SortableItem");
108
+ return /* @__PURE__ */ c("li", {
109
+ "data-sortable-id": t,
110
+ "data-lifted": i === t || void 0,
111
+ className: e("zen__sortable-item relative transition-[box-shadow,scale] duration-200 data-dragging:z-10 data-dragging:scale-[1.02] data-dragging:shadow-[0_12px_32px_-12px_oklch(0_0_0/0.6)] data-lifted:z-10 data-lifted:shadow-[0_0_0_2px_oklch(var(--primary)/0.6)]", n),
112
+ ...r
113
+ });
114
+ }
115
+ function v({ id: t, label: n, className: r, children: i, ...a }) {
116
+ let { grab: o, key: s, lifted: l } = m("SortableHandle");
117
+ return /* @__PURE__ */ c("button", {
118
+ type: "button",
119
+ "aria-label": `Reorder ${n}`,
120
+ "aria-pressed": l === t,
121
+ onPointerDown: (e) => o(e, t),
122
+ onKeyDown: (e) => s(e, t, n),
123
+ className: e("text-muted-foreground hover:text-foreground focus-visible:ring-ring/50 grid size-8 shrink-0 cursor-grab touch-none place-items-center rounded-md outline-hidden select-none focus-visible:ring-2 active:cursor-grabbing", r),
124
+ ...a,
125
+ children: i ?? /* @__PURE__ */ c("svg", {
126
+ "aria-hidden": !0,
127
+ viewBox: "0 0 16 16",
128
+ fill: "currentColor",
129
+ className: "size-4",
130
+ children: [
131
+ 4,
132
+ 8,
133
+ 12
134
+ ].flatMap((e) => [5.5, 10.5].map((t) => /* @__PURE__ */ c("circle", {
135
+ cx: t,
136
+ cy: e,
137
+ r: "1.25"
138
+ }, `${t}${e}`)))
139
+ })
140
+ });
141
+ }
142
+ function y(e) {
143
+ for (let t = e.parentElement; t; t = t.parentElement) if (/auto|scroll/.test(getComputedStyle(t).overflowY) && t.scrollHeight > t.clientHeight) return t;
144
+ return document.scrollingElement ?? document.documentElement;
145
+ }
146
+ //#endregion
147
+ export { v as SortableHandle, _ as SortableItem, g as SortableList };
@@ -0,0 +1,15 @@
1
+ import { ComponentProps } from 'react';
2
+ /**
3
+ * A small line of how a number has moved (a balance over a month, spending by
4
+ * week), with no axes: for beside a figure in a Stat or a table row. It takes
5
+ * its size from className (e.g. h-8 w-24) and draws itself in.
6
+ */
7
+ export default function Sparkline({ values, area, tone, className, ref, ...rest }: SparklineProps): import('react').JSX.Element | null;
8
+ export interface SparklineProps extends Omit<ComponentProps<'svg'>, 'values'> {
9
+ values: number[];
10
+ /** A soft fill under the line. */
11
+ area?: boolean;
12
+ /** The accent (`primary`), red (`negative`), or grey (`muted`). */
13
+ tone?: 'primary' | 'negative' | 'muted';
14
+ }
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/sparkline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAiB,MAAM,OAAO,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,MAAM,EAAE,IAAW,EAAE,IAAgB,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,sCA0DnH;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IACzE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kCAAkC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mEAAmE;IACnE,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;CAC3C"}
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { useSeen as t } from "../utils/useSeen.js";
4
+ import { useId as n, useRef as r } from "react";
5
+ import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
6
+ //#region packages/sparkline/index.tsx
7
+ function s({ values: s, area: c = !0, tone: l = "primary", className: u, ref: d, ...f }) {
8
+ let p = n(), m = r(null), h = t(m);
9
+ if (s.length < 2) return null;
10
+ let g = Math.min(...s), _ = Math.max(...s) - g || 1, v = s.map((e, t) => [t / (s.length - 1) * 100, 38 - (e - g) / _ * 36]).map(([e, t], n) => `${n ? "L" : "M"}${e.toFixed(2)},${t.toFixed(2)}`).join(""), y = l === "primary" ? "var(--color-primary)" : l === "negative" ? "var(--color-destructive)" : "var(--color-muted-foreground)", b = s[0], x = s[s.length - 1];
11
+ return /* @__PURE__ */ o("svg", {
12
+ ref: (e) => {
13
+ if (m.current = e, typeof d == "function") return d(e);
14
+ d && (d.current = e);
15
+ },
16
+ "data-zen-unseen": h ? void 0 : "",
17
+ role: "img",
18
+ "aria-label": `From ${b} to ${x}`,
19
+ viewBox: "0 0 100 40",
20
+ preserveAspectRatio: "none",
21
+ className: e("zen__sparkline h-8 w-24 overflow-visible", u),
22
+ style: { color: y },
23
+ ...f,
24
+ children: [c && /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ a("defs", { children: /* @__PURE__ */ o("linearGradient", {
25
+ id: p,
26
+ x1: "0",
27
+ y1: "0",
28
+ x2: "0",
29
+ y2: "1",
30
+ children: [/* @__PURE__ */ a("stop", {
31
+ offset: "0",
32
+ stopColor: "currentColor",
33
+ stopOpacity: "0.25"
34
+ }), /* @__PURE__ */ a("stop", {
35
+ offset: "1",
36
+ stopColor: "currentColor",
37
+ stopOpacity: "0"
38
+ })]
39
+ }) }), /* @__PURE__ */ a("path", {
40
+ className: "zen__chart-fade",
41
+ d: `${v}L100,40L0,40Z`,
42
+ fill: `url(#${p})`
43
+ })] }), /* @__PURE__ */ a("path", {
44
+ className: "zen__sparkline-draw",
45
+ d: v,
46
+ fill: "none",
47
+ stroke: "currentColor",
48
+ strokeWidth: 2,
49
+ strokeLinecap: "round",
50
+ strokeLinejoin: "round",
51
+ vectorEffect: "non-scaling-stroke"
52
+ })]
53
+ });
54
+ }
55
+ //#endregion
56
+ export { s as default };
@@ -0,0 +1,19 @@
1
+ import { ComponentProps, ReactNode } from 'react';
2
+ /**
3
+ * The steps of a flow (sign-up, checkout, import), with where you are: steps
4
+ * before `value` (from 0) are done, the one at it is current. The line between
5
+ * them fills in as you go.
6
+ */
7
+ export default function Stepper({ value, className, children, 'aria-label': label, ...rest }: StepperProps): import('react').JSX.Element;
8
+ /** One step's label, and optionally a line under it (`description`). */
9
+ export declare function Step({ description, className, children }: StepProps): import('react').JSX.Element;
10
+ export interface StepperProps extends ComponentProps<'ol'> {
11
+ /** The current step, from 0. Steps before it are done; past the last, all are. */
12
+ value: number;
13
+ }
14
+ export interface StepProps {
15
+ children: ReactNode;
16
+ description?: ReactNode;
17
+ className?: string;
18
+ }
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/stepper/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,cAAc,EAAkB,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5E;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC5B,KAAK,EACL,SAAS,EACT,QAAQ,EACR,YAAY,EAAE,KAAkB,EAChC,GAAG,IAAI,EACV,EAAE,YAAY,+BAgDd;AAED,wEAAwE;AACxE,wBAAgB,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,SAAS,+BASnE;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,IAAI,CAAC;IACtD,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}