@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
@@ -3,34 +3,52 @@ import { cx as e } from "../utils/cx.js";
3
3
  import { useTypeahead as t } from "../utils/typeahead.js";
4
4
  import { useGraphicsMode as n } from "../utils/graphics.js";
5
5
  import { Slot as r } from "../utils/slot.js";
6
- import { anchoredStyle as i, useAnchoredPopup as a } from "../utils/useAnchoredPopup.js";
7
- import { createContext as o, useContext as s, useId as c } from "react";
8
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
+ import { anchorFor as i, anchoredStyle as a, useAnchoredPopup as o } from "../utils/useAnchoredPopup.js";
7
+ import { createContext as s, useContext as c, useEffect as l, useId as u, useLayoutEffect as d, useRef as f, useState as p } from "react";
8
+ import { createPortal as m } from "react-dom";
9
+ import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
9
10
  //#region packages/menu/index.tsx
10
- var d = o(() => {}), f = o(null);
11
- function p(e) {
12
- let t = s(f);
11
+ var v = typeof window > "u" ? l : d, y = s(() => {}), b = s(null);
12
+ function x(e) {
13
+ let t = c(b);
13
14
  if (!t) throw Error(`<${e}> must be inside <Menu>`);
14
15
  return t;
15
16
  }
16
- function m({ onOpenChange: e, children: t }) {
17
+ function S({ onOpenChange: e, children: t }) {
17
18
  n();
18
- let r = c(), i = a({ onOpenChange: (t) => {
19
- t && i.popupRef.current?.focus(), e?.(t);
20
- } });
21
- return /* @__PURE__ */ l(f.Provider, {
19
+ let r = u(), [i, a] = p(null), s = f(null), c = f(!1), l = o({ onOpenChange: (t) => {
20
+ if (c.current = t, t ? l.popupRef.current?.focus() : d(), !t && s.current) {
21
+ let e = document.activeElement;
22
+ (!e || e === document.body || l.popupRef.current?.contains(e)) && s.current.focus(), s.current = null;
23
+ }
24
+ e?.(t);
25
+ } }), d = () => {
26
+ let e = l.popupRef.current?.getAnimations?.() ?? [];
27
+ Promise.allSettled(e.map((e) => e.finished)).then(() => {
28
+ c.current || a(null);
29
+ });
30
+ };
31
+ return v(() => {
32
+ if (i && (l.setOpen(!0), i.pointerId !== void 0)) try {
33
+ l.popupRef.current?.setPointerCapture(i.pointerId);
34
+ } catch {}
35
+ }, [i]), /* @__PURE__ */ g(b.Provider, {
22
36
  value: {
23
- popup: i,
24
- triggerId: r
37
+ popup: l,
38
+ triggerId: r,
39
+ point: i,
40
+ openAt: (e) => {
41
+ s.current = document.activeElement instanceof HTMLElement ? document.activeElement : null, a({ ...e });
42
+ }
25
43
  },
26
- children: /* @__PURE__ */ l(d.Provider, {
27
- value: () => i.setOpen(!1),
44
+ children: /* @__PURE__ */ g(y.Provider, {
45
+ value: () => l.setOpen(!1),
28
46
  children: t
29
47
  })
30
48
  });
31
49
  }
32
- function h({ asChild: t, style: n, children: i, ...a }) {
33
- let { popup: o, triggerId: s } = p("MenuTrigger"), c = {
50
+ function C({ asChild: t, style: n, children: i, ...a }) {
51
+ let { popup: o, triggerId: s } = x("MenuTrigger"), c = {
34
52
  id: s,
35
53
  "aria-haspopup": "menu",
36
54
  ...o.triggerProps,
@@ -40,19 +58,21 @@ function h({ asChild: t, style: n, children: i, ...a }) {
40
58
  ...n
41
59
  }
42
60
  };
43
- return t ? /* @__PURE__ */ l(r, {
61
+ return t ? /* @__PURE__ */ g(r, {
44
62
  ...c,
45
63
  children: i
46
- }) : /* @__PURE__ */ l("button", {
64
+ }) : /* @__PURE__ */ g("button", {
47
65
  type: "button",
48
66
  ...c,
49
67
  className: e("cursor-pointer", c.className),
50
68
  children: i
51
69
  });
52
70
  }
53
- function g({ align: n = "end", offset: r = 6, className: a, style: o, children: s, ...c }) {
54
- let { popup: u, triggerId: d } = p("MenuContent"), f = t(), m = (e) => {
55
- let t = Array.from(u.popupRef.current?.querySelectorAll("[role=\"menuitem\"]:not(:disabled)") ?? []), n = t.indexOf(document.activeElement), r = t.length - 1, i = f(e);
71
+ function w({ align: n, offset: r, className: i, style: o, children: s, ...c }) {
72
+ let { popup: l, triggerId: u, point: d } = x("MenuContent");
73
+ n ??= d ? "start" : "end", r ??= d ? 2 : 6;
74
+ let f = t(), p = (e) => {
75
+ let t = Array.from(l.popupRef.current?.querySelectorAll("[role=\"menuitem\"]:not(:disabled)") ?? []), n = t.indexOf(document.activeElement), r = t.length - 1, i = f(e);
56
76
  if (i) {
57
77
  t.find((e) => e.textContent?.trim().toLowerCase().startsWith(i))?.focus();
58
78
  return;
@@ -65,61 +85,128 @@ function g({ align: n = "end", offset: r = 6, className: a, style: o, children:
65
85
  }[e.key];
66
86
  a !== void 0 && (e.preventDefault(), t[(a + t.length) % t.length]?.focus());
67
87
  };
68
- return /* @__PURE__ */ l("div", {
69
- "aria-labelledby": d,
88
+ return /* @__PURE__ */ g("div", {
89
+ "aria-labelledby": d ? void 0 : u,
70
90
  ...c,
71
- ...u.popupProps,
91
+ ...l.popupProps,
72
92
  role: "menu",
73
93
  tabIndex: -1,
74
94
  onKeyDown: (e) => {
75
- c.onKeyDown?.(e), m(e);
95
+ c.onKeyDown?.(e), p(e);
76
96
  },
77
97
  style: {
78
- ...i(u.id, {
98
+ ...a(l.id, {
79
99
  align: n,
80
100
  offset: r
81
101
  }),
82
102
  ...o
83
103
  },
84
- className: e("zen__popover glass glass-blur text-foreground min-w-44 rounded-xl p-1.5 outline-hidden", a),
104
+ className: e("zen__popover glass glass-blur text-foreground min-w-44 rounded-xl p-1.5 outline-hidden", i),
85
105
  children: s
86
106
  });
87
107
  }
88
- var _ = "flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-left text-sm outline-hidden select-none hover:bg-tint/[0.07] focus:bg-tint/[0.07] disabled:cursor-not-allowed disabled:opacity-50";
89
- function v({ icon: t, destructive: n, onSelect: i, asChild: a, className: o, children: c, onClick: f, ...p }) {
90
- let m = s(d), h = {
108
+ var T = 500, E = 8;
109
+ function D({ asChild: t, disabled: n, className: a, onContextMenu: o, onPointerDown: s, onClickCapture: c, children: d, ...p }) {
110
+ let { popup: v, point: y, openAt: b } = x("MenuContextTrigger"), S = u(), C = y?.from === S, w = f(null), D = f(!1), O = () => {
111
+ w.current && clearTimeout(w.current.timer), w.current = null;
112
+ };
113
+ l(() => O, []);
114
+ let k = {
91
115
  ...p,
116
+ className: e("[-webkit-touch-callout:none]", a),
117
+ "data-popup-open": C && v.open || void 0,
118
+ onContextMenu: (e) => {
119
+ if (o?.(e), !(n || e.defaultPrevented) && (e.preventDefault(), O(), !v.open)) {
120
+ if (e.clientX === 0 && e.clientY === 0) {
121
+ let t = e.target.getBoundingClientRect();
122
+ b({
123
+ x: t.left,
124
+ y: t.bottom,
125
+ from: S
126
+ });
127
+ } else {
128
+ let t = e.nativeEvent, n = "pointerId" in t && e.buttons ? t.pointerId : void 0;
129
+ b({
130
+ x: e.clientX,
131
+ y: e.clientY,
132
+ from: S,
133
+ pointerId: n
134
+ });
135
+ }
136
+ }
137
+ },
138
+ onPointerDown: (e) => {
139
+ if (s?.(e), D.current = !1, n || e.pointerType !== "touch" || !e.isPrimary) return;
140
+ let t = {
141
+ x: e.clientX,
142
+ y: e.clientY,
143
+ from: S,
144
+ pointerId: e.pointerId
145
+ }, r = e.currentTarget, i = (e) => {
146
+ Math.hypot(e.clientX - t.x, e.clientY - t.y) > E && a();
147
+ }, a = () => {
148
+ O(), r.removeEventListener("pointermove", i), r.removeEventListener("pointerup", a), r.removeEventListener("pointercancel", a);
149
+ };
150
+ r.addEventListener("pointermove", i), r.addEventListener("pointerup", a), r.addEventListener("pointercancel", a), w.current = {
151
+ ...t,
152
+ timer: window.setTimeout(() => {
153
+ a(), D.current = !0, v.open || b(t);
154
+ }, T)
155
+ };
156
+ },
157
+ onClickCapture: (e) => {
158
+ c?.(e), D.current && (D.current = !1, e.preventDefault(), e.stopPropagation());
159
+ }
160
+ }, A = y && C && m(/* @__PURE__ */ g("span", {
161
+ "aria-hidden": !0,
162
+ ...i(v.id),
163
+ style: {
164
+ ...i(v.id).style,
165
+ position: "fixed",
166
+ left: y.x,
167
+ top: y.y
168
+ }
169
+ }), document.body);
170
+ return /* @__PURE__ */ _(h, { children: [g(t ? r : "div", {
171
+ ...k,
172
+ children: d
173
+ }), A] });
174
+ }
175
+ var O = "flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-left text-sm outline-hidden select-none hover:bg-tint/[0.07] focus:bg-tint/[0.07] disabled:cursor-not-allowed disabled:opacity-50";
176
+ function k({ icon: t, destructive: n, onSelect: i, asChild: a, className: o, children: s, onClick: l, ...u }) {
177
+ let d = c(y), f = {
178
+ ...u,
92
179
  role: "menuitem",
93
180
  tabIndex: -1,
94
- className: e(_, n && "text-destructive", o),
181
+ className: e(O, n && "text-destructive", o),
95
182
  onClick: (e) => {
96
- f?.(e), m(), i?.();
183
+ l?.(e), d(), i?.();
97
184
  }
98
185
  };
99
- return a ? /* @__PURE__ */ l(r, {
100
- ...h,
101
- children: c
102
- }) : /* @__PURE__ */ u("button", {
186
+ return a ? /* @__PURE__ */ g(r, {
187
+ ...f,
188
+ children: s
189
+ }) : /* @__PURE__ */ _("button", {
103
190
  type: "button",
104
- ...h,
105
- children: [t && /* @__PURE__ */ l("span", {
191
+ ...f,
192
+ children: [t && /* @__PURE__ */ g("span", {
106
193
  "aria-hidden": !0,
107
194
  className: e("flex shrink-0", !n && "text-muted-foreground"),
108
195
  children: t
109
- }), c]
196
+ }), s]
110
197
  });
111
198
  }
112
- function y({ className: t }) {
113
- return /* @__PURE__ */ l("div", {
199
+ function A({ className: t }) {
200
+ return /* @__PURE__ */ g("div", {
114
201
  role: "separator",
115
202
  className: e("bg-tint/[0.07] mx-2 my-1 h-px", t)
116
203
  });
117
204
  }
118
- function b({ className: t, ...n }) {
119
- return /* @__PURE__ */ l("div", {
205
+ function j({ className: t, ...n }) {
206
+ return /* @__PURE__ */ g("div", {
120
207
  className: e("flex items-center gap-3 px-3 py-2.5", t),
121
208
  ...n
122
209
  });
123
210
  }
124
211
  //#endregion
125
- export { g as MenuContent, b as MenuHeader, v as MenuItem, y as MenuSeparator, h as MenuTrigger, m as default };
212
+ export { w as MenuContent, D as MenuContextTrigger, j as MenuHeader, k as MenuItem, A as MenuSeparator, C as MenuTrigger, S as default };
@@ -4,7 +4,7 @@ import { ComponentProps, ReactNode } from 'react';
4
4
  * a figure and a note. Over the limit it turns red; near it, warm. Announced
5
5
  * as a meter, with `valueText` read out instead of the bare number.
6
6
  */
7
- export default function Meter({ value, max, label, detail, hint, valueText, tone, warnAt, className, ...rest }: MeterProps): import('react').JSX.Element;
7
+ export default function Meter({ value, max, label, detail, hint, valueText, tone, warnAt, marks, className, ...rest }: MeterProps): import('react').JSX.Element;
8
8
  /** Also takes the element's own props, e.g. `aria-label` when there's no visible label. */
9
9
  export interface MeterProps extends Omit<ComponentProps<'div'>, 'children'> {
10
10
  value: number;
@@ -21,6 +21,8 @@ export interface MeterProps extends Omit<ComponentProps<'div'>, 'children'> {
21
21
  tone?: 'auto' | 'default' | 'warning' | 'danger';
22
22
  /** Fraction of max where `auto` turns to warning (default 0.85). */
23
23
  warnAt?: number;
24
+ /** Milestones along the bar, in the same units as value: e.g. [2500, 5000, 7500] of 10000. */
25
+ marks?: number[];
24
26
  className?: string;
25
27
  }
26
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/meter/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAS,MAAM,OAAO,CAAC;AAEzD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC1B,KAAK,EACL,GAAS,EACT,KAAK,EACL,MAAM,EACN,IAAI,EACJ,SAAS,EACT,IAAa,EACb,MAAa,EACb,SAAS,EACT,GAAG,IAAI,EACV,EAAE,UAAU,+BAyDZ;AAED,2FAA2F;AAC3F,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yCAAyC;IACzC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACjD,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/meter/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAS,MAAM,OAAO,CAAC;AAEzD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC1B,KAAK,EACL,GAAS,EACT,KAAK,EACL,MAAM,EACN,IAAI,EACJ,SAAS,EACT,IAAa,EACb,MAAa,EACb,KAAK,EACL,SAAS,EACT,GAAG,IAAI,EACV,EAAE,UAAU,+BAkEZ;AAED,2FAA2F;AAC3F,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yCAAyC;IACzC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACjD,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -3,36 +3,41 @@ import { cx as e } from "../utils/cx.js";
3
3
  import { useId as t } from "react";
4
4
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
5
5
  //#region packages/meter/index.tsx
6
- function i({ value: i, max: a = 100, label: o, detail: s, hint: c, valueText: l, tone: u = "auto", warnAt: d = .85, className: f, ...p }) {
7
- let m = t(), h = i > a, g = a > 0 ? i / a : +(i > 0), _ = Math.min(100, Math.max(0, Math.round(g * 100))), v = u === "auto" ? h ? "danger" : g >= d ? "warning" : "default" : u;
6
+ function i({ value: i, max: a = 100, label: o, detail: s, hint: c, valueText: l, tone: u = "auto", warnAt: d = .85, marks: f, className: p, ...m }) {
7
+ let h = t(), g = i > a, _ = a > 0 ? i / a : +(i > 0), v = Math.min(100, Math.max(0, Math.round(_ * 100))), y = u === "auto" ? g ? "danger" : _ >= d ? "warning" : "default" : u;
8
8
  return /* @__PURE__ */ r("div", {
9
- ...p,
9
+ ...m,
10
10
  role: "meter",
11
- "aria-labelledby": o ? m : p["aria-labelledby"],
11
+ "aria-labelledby": o ? h : m["aria-labelledby"],
12
12
  "aria-valuemin": 0,
13
13
  "aria-valuemax": a,
14
14
  "aria-valuenow": Math.min(i, a),
15
15
  "aria-valuetext": l,
16
- className: e("zen__meter grid grid-cols-2 gap-y-1.5", f),
16
+ className: e("zen__meter grid grid-cols-2 gap-y-1.5", p),
17
17
  children: [
18
18
  o && /* @__PURE__ */ n("span", {
19
- id: m,
19
+ id: h,
20
20
  className: "text-sm font-medium",
21
21
  children: o
22
22
  }),
23
23
  s && /* @__PURE__ */ n("span", {
24
- className: e("col-start-2 text-right text-sm tabular-nums", v === "danger" ? "text-destructive" : "text-muted-foreground"),
24
+ className: e("col-start-2 text-right text-sm tabular-nums", y === "danger" ? "text-destructive" : "text-muted-foreground"),
25
25
  children: s
26
26
  }),
27
- /* @__PURE__ */ n("div", {
28
- className: "bg-muted col-span-2 h-2 overflow-hidden rounded-full",
29
- children: /* @__PURE__ */ n("div", {
30
- className: e("zen__meter-fill ease-out-soft h-full rounded-full transition-[width] duration-700", v === "danger" ? "bg-destructive shadow-[0_0_12px_oklch(var(--destructive)/calc(0.7*var(--glow-k)))]" : v === "warning" ? "bg-accent-foreground shadow-[0_0_12px_oklch(var(--accent-foreground)/calc(0.6*var(--glow-k)))]" : "from-primary to-glow-2 bg-gradient-to-r shadow-[0_0_12px_oklch(var(--glow)/calc(0.6*var(--glow-k)))]"),
31
- style: { width: `${_}%` }
32
- })
27
+ /* @__PURE__ */ r("div", {
28
+ className: "bg-muted relative col-span-2 h-2 overflow-hidden rounded-full",
29
+ children: [/* @__PURE__ */ n("div", {
30
+ className: e("zen__meter-fill ease-out-soft h-full rounded-full transition-[width] duration-700", y === "danger" ? "bg-destructive shadow-[0_0_12px_oklch(var(--destructive)/calc(0.7*var(--glow-k)))]" : y === "warning" ? "bg-accent-foreground shadow-[0_0_12px_oklch(var(--accent-foreground)/calc(0.6*var(--glow-k)))]" : "from-primary to-glow-2 bg-gradient-to-r shadow-[0_0_12px_oklch(var(--glow)/calc(0.6*var(--glow-k)))]"),
31
+ style: { width: `${v}%` }
32
+ }), f?.map((e) => /* @__PURE__ */ n("span", {
33
+ "aria-hidden": !0,
34
+ "data-reached": i >= e || void 0,
35
+ className: "zen__meter-mark bg-tint/25 data-reached:bg-background/70 absolute inset-y-0 w-0.5 -translate-x-1/2 transition-colors duration-700",
36
+ style: { left: `${a > 0 ? Math.min(100, e / a * 100) : 0}%` }
37
+ }, e))]
33
38
  }),
34
39
  c && /* @__PURE__ */ n("span", {
35
- className: e("col-span-2 text-xs", v === "danger" ? "text-destructive" : "text-muted-foreground"),
40
+ className: e("col-span-2 text-xs", y === "danger" ? "text-destructive" : "text-muted-foreground"),
36
41
  children: c
37
42
  })
38
43
  ]
@@ -3,9 +3,9 @@ import { Money } from '../utils/money';
3
3
  import { ChangeEvent, ComponentProps, KeyboardEvent, ReactNode } from 'react';
4
4
  /**
5
5
  * Amount input in one currency. Shows grouped digits for the locale (1,52,000
6
- * for en-IN) and accepts shorthand: 1.5L, 2cr, 10k, 1.2m. Commits on blur or
7
- * Enter; Escape reverts. Values are integer minor units (paise, cents), or null
8
- * when empty.
6
+ * for en-IN) and accepts shorthand: 1.5L, 2cr, 10k, 1.2m, and sums: 120+45.50,
7
+ * 3*12.99. Commits on blur or Enter; Escape reverts. Values are integer minor
8
+ * units (paise, cents), or null when empty.
9
9
  *
10
10
  * With `convert`, the symbol becomes a currency switch: type an amount in e.g.
11
11
  * USD and it's converted at the rates you load (in the browser; the amount is
@@ -0,0 +1,10 @@
1
+ import { ComponentProps } from 'react';
2
+ /**
3
+ * The page's content, which changes between pages: wrap your route's outlet in
4
+ * it, and when the router changes page in a view transition (React Router's
5
+ * `viewTransition`, or document.startViewTransition yourself) the old page
6
+ * fades out as the new one rises in, while everything outside (header, nav)
7
+ * stays still. One per page.
8
+ */
9
+ export default function PageTransition({ className, style, ...rest }: ComponentProps<'div'>): import('react').JSX.Element;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/page-transition/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,+BAQ1F"}
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { jsx as t } from "react/jsx-runtime";
4
+ //#region packages/page-transition/index.tsx
5
+ function n({ className: n, style: r, ...i }) {
6
+ return /* @__PURE__ */ t("div", {
7
+ className: e("zen__page-transition", n),
8
+ style: {
9
+ viewTransitionName: "zen-page",
10
+ ...r
11
+ },
12
+ ...i
13
+ });
14
+ }
15
+ //#endregion
16
+ export { n as default };
@@ -0,0 +1,26 @@
1
+ import { ComponentProps, ReactNode } from 'react';
2
+ /**
3
+ * The pages a long list is split into: previous and next, the first and last
4
+ * pages, and those around the current one (`page`, from 1). Pages are buttons
5
+ * calling `onPageChange`, or with `href`, links (render them with your router's
6
+ * Link through `renderLink`).
7
+ */
8
+ export default function Pagination({ page, count, onPageChange, href, renderLink, siblings, className, 'aria-label': label, }: PaginationProps): import('react').JSX.Element | null;
9
+ /** The pages to show: the first, the last, `siblings` either side of `page`, and a gap where pages are skipped. */
10
+ export declare function pageRange(page: number, count: number, siblings?: number): (number | 'gap')[];
11
+ export interface PaginationProps {
12
+ /** The current page, from 1. */
13
+ page: number;
14
+ /** How many pages there are. With fewer than 2, nothing is shown. */
15
+ count: number;
16
+ onPageChange?: (page: number) => void;
17
+ /** Pages as links: the URL of each. */
18
+ href?: (page: number) => string;
19
+ /** Renders a page link, e.g. with your router's Link. */
20
+ renderLink?: (props: ComponentProps<'a'>, page: number) => ReactNode;
21
+ /** Pages shown either side of the current one. */
22
+ siblings?: number;
23
+ className?: string;
24
+ 'aria-label'?: string;
25
+ }
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/pagination/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,IAAI,EACJ,UAAwC,EACxC,QAAY,EACZ,SAAS,EACT,YAAY,EAAE,KAAe,GAChC,EAAE,eAAe,sCA6CjB;AAED,mHAAmH;AACnH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAavF;AAED,MAAM,WAAW,eAAe;IAC5B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,uCAAuC;IACvC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,yDAAyD;IACzD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IACrE,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,62 @@
1
+ "use client";
2
+ import { cx as e } from "../utils/cx.js";
3
+ import { buttonVariants as t } from "../button/index.js";
4
+ import n from "../icons/chevron-left.js";
5
+ import r from "../icons/chevron-right.js";
6
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
7
+ //#region packages/pagination/index.tsx
8
+ function o({ page: o, count: c, onPageChange: l, href: u, renderLink: d = (e) => /* @__PURE__ */ i("a", { ...e }), siblings: f = 1, className: p, "aria-label": m = "Pages" }) {
9
+ if (c < 2) return null;
10
+ let h = (n, r, a) => {
11
+ let o = n < 1 || n > c, s = e(t({
12
+ variant: "ghost",
13
+ size: "icon"
14
+ }), "min-w-9 w-auto px-2 tabular-nums", a.current && "bg-primary/15 text-foreground shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.3),0_0_18px_-6px_oklch(var(--glow)/calc(0.6*var(--glow-k)))] hover:bg-primary/20"), f = {
15
+ "aria-label": a["aria-label"],
16
+ "aria-current": a.current ? "page" : void 0,
17
+ className: s
18
+ };
19
+ return u && !o ? d({
20
+ ...f,
21
+ href: u(n),
22
+ onClick: l && (() => l(n)),
23
+ children: r
24
+ }, n) : /* @__PURE__ */ i("button", {
25
+ type: "button",
26
+ ...f,
27
+ disabled: o,
28
+ onClick: () => !a.current && l?.(n),
29
+ children: r
30
+ });
31
+ };
32
+ return /* @__PURE__ */ i("nav", {
33
+ "aria-label": m,
34
+ className: e("zen__pagination", p),
35
+ children: /* @__PURE__ */ a("ul", {
36
+ className: "flex items-center gap-1",
37
+ children: [
38
+ /* @__PURE__ */ i("li", { children: h(o - 1, /* @__PURE__ */ i(n, { className: "size-4" }), { "aria-label": "Previous page" }) }),
39
+ s(o, c, f).map((e, t) => /* @__PURE__ */ i("li", { children: e === "gap" ? /* @__PURE__ */ i("span", {
40
+ "aria-hidden": !0,
41
+ className: "text-muted-foreground grid w-6 place-items-center",
42
+ children: "…"
43
+ }) : h(e, e, {
44
+ "aria-label": `Page ${e}`,
45
+ current: e === o
46
+ }) }, e === "gap" ? `gap${t}` : e)),
47
+ /* @__PURE__ */ i("li", { children: h(o + 1, /* @__PURE__ */ i(r, { className: "size-4" }), { "aria-label": "Next page" }) })
48
+ ]
49
+ })
50
+ });
51
+ }
52
+ function s(e, t, n = 1) {
53
+ let r = /* @__PURE__ */ new Set([1, t]);
54
+ for (let i = e - n; i <= e + n; i++) i >= 1 && i <= t && r.add(i);
55
+ let i = [...r].sort((e, t) => e - t), a = [];
56
+ return i.forEach((e, t) => {
57
+ let n = e - (i[t - 1] ?? e);
58
+ n === 2 ? a.push(e - 1) : n > 2 && a.push("gap"), a.push(e);
59
+ }), a;
60
+ }
61
+ //#endregion
62
+ export { o as default, s as pageRange };
@@ -1,5 +1,8 @@
1
1
  import { ReactNode } from 'react';
2
- /** Circular progress, 0–1, with optional content in the middle. */
2
+ /**
3
+ * Circular progress, 0–1, with optional content in the middle. Reaching 1
4
+ * while shown sends out a ring of glow, once.
5
+ */
3
6
  export default function ProgressRing({ value, size, stroke, label, children, className }: ProgressRingProps): import('react').JSX.Element;
4
7
  export interface ProgressRingProps {
5
8
  /** Progress from 0 to 1; values outside are clamped. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/progress-ring/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,mEAAmE;AACnE,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,IAAS,EAAE,MAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,iBAAiB,+BAsCnH;AAED,MAAM,WAAW,iBAAiB;IAC9B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/progress-ring/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,IAAS,EAAE,MAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,iBAAiB,+BAqDnH;AAED,MAAM,WAAW,iBAAiB;IAC9B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -1,49 +1,58 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ import { useState as t } from "react";
4
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
5
  //#region packages/progress-ring/index.tsx
5
- function r({ value: r, size: i = 84, stroke: a = 7, label: o, children: s, className: c }) {
6
- let l = (i - a) / 2, u = 2 * Math.PI * l, d = Math.min(Math.max(r, 0), 1);
7
- return /* @__PURE__ */ n("div", {
6
+ function i({ value: i, size: a = 84, stroke: o = 7, label: s, children: c, className: l }) {
7
+ let u = (a - o) / 2, d = 2 * Math.PI * u, f = Math.min(Math.max(i, 0), 1), [p, m] = t(f), [h, g] = t(0);
8
+ return f !== p && (m(f), p < 1 && f === 1 && g(h + 1)), /* @__PURE__ */ r("div", {
8
9
  role: "progressbar",
9
- "aria-label": o,
10
+ "aria-label": s,
10
11
  "aria-valuemin": 0,
11
12
  "aria-valuemax": 100,
12
- "aria-valuenow": Math.round(d * 100),
13
- className: e("zen__progress-ring relative grid shrink-0 place-items-center", c),
13
+ "aria-valuenow": Math.round(f * 100),
14
+ className: e("zen__progress-ring relative grid shrink-0 place-items-center", l),
14
15
  style: {
15
- width: i,
16
- height: i
16
+ width: a,
17
+ height: a
17
18
  },
18
- children: [/* @__PURE__ */ n("svg", {
19
- width: i,
20
- height: i,
21
- viewBox: `0 0 ${i} ${i}`,
22
- className: "-rotate-90",
23
- "aria-hidden": !0,
24
- children: [/* @__PURE__ */ t("circle", {
25
- cx: i / 2,
26
- cy: i / 2,
27
- r: l,
28
- fill: "none",
29
- strokeWidth: a,
30
- className: "stroke-tint/[0.07]"
31
- }), /* @__PURE__ */ t("circle", {
32
- cx: i / 2,
33
- cy: i / 2,
34
- r: l,
35
- fill: "none",
36
- strokeWidth: a,
37
- strokeLinecap: "round",
38
- strokeDasharray: u,
39
- strokeDashoffset: u * (1 - d),
40
- className: "zen__progress-ring-arc stroke-primary [filter:drop-shadow(0_0_6px_oklch(var(--glow)/calc(0.45*var(--glow-k))))] transition-[stroke-dashoffset] duration-700 ease-out"
41
- })]
42
- }), /* @__PURE__ */ t("div", {
43
- className: "absolute inset-0 grid place-items-center text-center",
44
- children: s
45
- })]
19
+ children: [
20
+ /* @__PURE__ */ r("svg", {
21
+ width: a,
22
+ height: a,
23
+ viewBox: `0 0 ${a} ${a}`,
24
+ className: "-rotate-90",
25
+ "aria-hidden": !0,
26
+ children: [/* @__PURE__ */ n("circle", {
27
+ cx: a / 2,
28
+ cy: a / 2,
29
+ r: u,
30
+ fill: "none",
31
+ strokeWidth: o,
32
+ className: "stroke-tint/[0.07]"
33
+ }), /* @__PURE__ */ n("circle", {
34
+ cx: a / 2,
35
+ cy: a / 2,
36
+ r: u,
37
+ fill: "none",
38
+ strokeWidth: o,
39
+ strokeLinecap: "round",
40
+ strokeDasharray: d,
41
+ strokeDashoffset: d * (1 - f),
42
+ className: "zen__progress-ring-arc stroke-primary [filter:drop-shadow(0_0_6px_oklch(var(--glow)/calc(0.45*var(--glow-k))))] transition-[stroke-dashoffset] duration-700 ease-out"
43
+ })]
44
+ }),
45
+ h > 0 && /* @__PURE__ */ n("span", {
46
+ "aria-hidden": !0,
47
+ className: "zen__ring-burst border-primary pointer-events-none absolute inset-0 rounded-full",
48
+ style: { borderWidth: o }
49
+ }, h),
50
+ /* @__PURE__ */ n("div", {
51
+ className: "absolute inset-0 grid place-items-center text-center",
52
+ children: c
53
+ })
54
+ ]
46
55
  });
47
56
  }
48
57
  //#endregion
49
- export { r as default };
58
+ export { i as default };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Two thumbs on one track, for a span such as an amount from $50 to $500:
3
+ * two native range inputs (keyboard, forms and screen readers work as on
4
+ * Slider), the span between them filled. The thumbs can meet but not cross.
5
+ */
6
+ export default function RangeSlider({ value: [low, high], min, max, step, onValueChange, onValueCommit, label, thumbLabels, valueText, disabled, className, }: RangeSliderProps): import('react').JSX.Element;
7
+ export interface RangeSliderProps {
8
+ /** The span, low then high. */
9
+ value: readonly [number, number];
10
+ min?: number;
11
+ max?: number;
12
+ step?: number;
13
+ /** While dragging (every step). */
14
+ onValueChange?: (value: [number, number]) => void;
15
+ /** Once the user lets go: the moment to save or filter. */
16
+ onValueCommit?: (value: [number, number]) => void;
17
+ /** Accessible name of the pair, e.g. "Amount". */
18
+ label: string;
19
+ /** Each thumb's name (default "Minimum", "Maximum"). */
20
+ thumbLabels?: readonly [string, string];
21
+ /** Spoken value of a thumb, e.g. (v) => `$${v}`. */
22
+ valueText?: (value: number) => string;
23
+ disabled?: boolean;
24
+ className?: string;
25
+ }
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/range-slider/index.tsx"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAChC,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,EAClB,GAAO,EACP,GAAS,EACT,IAAQ,EACR,aAAa,EACb,aAAa,EACb,KAAK,EACL,WAAoC,EACpC,SAAS,EACT,QAAQ,EACR,SAAS,GACZ,EAAE,gBAAgB,+BAiDlB;AAED,MAAM,WAAW,gBAAgB;IAC7B,+BAA+B;IAC/B,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,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,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAClD,2DAA2D;IAC3D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAClD,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,oDAAoD;IACpD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}