@rinzai/zen 0.13.0 → 0.15.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.
- package/CHANGELOG.md +138 -0
- package/README.md +16 -1
- package/dist/carousel/index.d.ts.map +1 -1
- package/dist/carousel/index.js +5 -5
- package/dist/docs/README.md +205 -0
- package/dist/docs/accordion.md +122 -0
- package/dist/docs/alert.md +69 -0
- package/dist/docs/animated-number.md +105 -0
- package/dist/docs/avatar.md +91 -0
- package/dist/docs/backdrop.md +94 -0
- package/dist/docs/badge.md +37 -0
- package/dist/docs/breadcrumbs.md +44 -0
- package/dist/docs/button-group.md +76 -0
- package/dist/docs/button.md +131 -0
- package/dist/docs/calendar-heatmap.md +73 -0
- package/dist/docs/calendar.md +101 -0
- package/dist/docs/canvas.md +584 -0
- package/dist/docs/card.md +180 -0
- package/dist/docs/carousel.md +162 -0
- package/dist/docs/chart.md +325 -0
- package/dist/docs/checkbox.md +88 -0
- package/dist/docs/chip.md +52 -0
- package/dist/docs/code-block.md +116 -0
- package/dist/docs/code-input.md +52 -0
- package/dist/docs/collapse.md +46 -0
- package/dist/docs/color-picker.md +145 -0
- package/dist/docs/combobox.md +208 -0
- package/dist/docs/command-palette.md +65 -0
- package/dist/docs/date-picker.md +167 -0
- package/dist/docs/dialog.md +271 -0
- package/dist/docs/disclosure.md +88 -0
- package/dist/docs/editable-cell.md +90 -0
- package/dist/docs/empty-state.md +46 -0
- package/dist/docs/field.md +82 -0
- package/dist/docs/file-drop.md +44 -0
- package/dist/docs/filter-bar.md +66 -0
- package/dist/docs/header.md +51 -0
- package/dist/docs/hover-card.md +110 -0
- package/dist/docs/icon-picker.md +65 -0
- package/dist/docs/input-group.md +89 -0
- package/dist/docs/input.md +33 -0
- package/dist/docs/inset.md +57 -0
- package/dist/docs/kbd.md +34 -0
- package/dist/docs/keypad.md +51 -0
- package/dist/docs/load-more.md +66 -0
- package/dist/docs/locale-provider.md +99 -0
- package/dist/docs/marquee.md +86 -0
- package/dist/docs/menu.md +403 -0
- package/dist/docs/meter.md +102 -0
- package/dist/docs/money-input.md +169 -0
- package/dist/docs/month-picker.md +80 -0
- package/dist/docs/navigation-menu.md +157 -0
- package/dist/docs/number-field.md +129 -0
- package/dist/docs/page-header.md +44 -0
- package/dist/docs/page-transition.md +93 -0
- package/dist/docs/pagination.md +42 -0
- package/dist/docs/pills.md +85 -0
- package/dist/docs/player-bar.md +158 -0
- package/dist/docs/popover.md +200 -0
- package/dist/docs/progress-ring.md +70 -0
- package/dist/docs/radio-cards.md +82 -0
- package/dist/docs/radio-group.md +86 -0
- package/dist/docs/range-slider.md +64 -0
- package/dist/docs/repeat-picker.md +44 -0
- package/dist/docs/resizable.md +107 -0
- package/dist/docs/seek-bar.md +68 -0
- package/dist/docs/segmented.md +89 -0
- package/dist/docs/select.md +148 -0
- package/dist/docs/separator.md +76 -0
- package/dist/docs/side-nav.md +75 -0
- package/dist/docs/skeleton.md +89 -0
- package/dist/docs/slider.md +87 -0
- package/dist/docs/sortable.md +182 -0
- package/dist/docs/sparkline.md +56 -0
- package/dist/docs/spinner.md +69 -0
- package/dist/docs/status-pill.md +81 -0
- package/dist/docs/stepper.md +59 -0
- package/dist/docs/tab-bar.md +78 -0
- package/dist/docs/table-of-contents.md +43 -0
- package/dist/docs/table.md +714 -0
- package/dist/docs/tabs.md +140 -0
- package/dist/docs/tag-input.md +45 -0
- package/dist/docs/textarea.md +25 -0
- package/dist/docs/theme-toggle.md +85 -0
- package/dist/docs/theming.md +193 -0
- package/dist/docs/time-field.md +71 -0
- package/dist/docs/timeline.md +50 -0
- package/dist/docs/toast.md +53 -0
- package/dist/docs/toggle-group.md +83 -0
- package/dist/docs/toggle.md +38 -0
- package/dist/docs/toolbar.md +97 -0
- package/dist/docs/tooltip.md +60 -0
- package/dist/docs/tree.md +295 -0
- package/dist/docs/trend.md +50 -0
- package/dist/icons/arrow-path.d.ts +3 -0
- package/dist/icons/arrow-path.d.ts.map +1 -0
- package/dist/icons/arrows-right-left.d.ts +3 -0
- package/dist/icons/arrows-right-left.d.ts.map +1 -0
- package/dist/icons/backward.d.ts +3 -0
- package/dist/icons/backward.d.ts.map +1 -0
- package/dist/icons/forward.d.ts +3 -0
- package/dist/icons/forward.d.ts.map +1 -0
- package/dist/icons/heart-solid.d.ts +3 -0
- package/dist/icons/heart-solid.d.ts.map +1 -0
- package/dist/icons/heart.d.ts +3 -0
- package/dist/icons/heart.d.ts.map +1 -0
- package/dist/icons/musical-note.d.ts +3 -0
- package/dist/icons/musical-note.d.ts.map +1 -0
- package/dist/icons/pause.d.ts +3 -0
- package/dist/icons/pause.d.ts.map +1 -0
- package/dist/icons/play.d.ts +3 -0
- package/dist/icons/play.d.ts.map +1 -0
- package/dist/icons/queue-list.d.ts +3 -0
- package/dist/icons/queue-list.d.ts.map +1 -0
- package/dist/icons/speaker-wave.d.ts +3 -0
- package/dist/icons/speaker-wave.d.ts.map +1 -0
- package/dist/icons/speaker-x-mark.d.ts +3 -0
- package/dist/icons/speaker-x-mark.d.ts.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/lib.js +80 -74
- package/dist/marquee/index.d.ts +15 -0
- package/dist/marquee/index.d.ts.map +1 -0
- package/dist/marquee/index.js +90 -0
- package/dist/menu/index.d.ts.map +1 -1
- package/dist/menu/index.js +7 -6
- package/dist/number-field/index.d.ts +18 -2
- package/dist/number-field/index.d.ts.map +1 -1
- package/dist/number-field/index.js +65 -51
- package/dist/player-bar/index.d.ts +11 -0
- package/dist/player-bar/index.d.ts.map +1 -0
- package/dist/player-bar/index.js +17 -0
- package/dist/radio-cards/index.d.ts +2 -1
- package/dist/radio-cards/index.d.ts.map +1 -1
- package/dist/radio-cards/index.js +3 -3
- package/dist/seek-bar/index.d.ts +24 -0
- package/dist/seek-bar/index.d.ts.map +1 -0
- package/dist/seek-bar/index.js +120 -0
- package/dist/segmented/index.d.ts +3 -2
- package/dist/segmented/index.d.ts.map +1 -1
- package/dist/segmented/index.js +19 -18
- package/dist/slider/index.d.ts +2 -1
- package/dist/slider/index.d.ts.map +1 -1
- package/dist/tab-bar/index.d.ts +4 -2
- package/dist/tab-bar/index.d.ts.map +1 -1
- package/dist/tab-bar/index.js +24 -19
- package/dist/textarea/index.d.ts +6 -2
- package/dist/textarea/index.d.ts.map +1 -1
- package/dist/textarea/index.js +2 -1
- package/dist/theme.css +40 -0
- package/dist/utils/duration.d.ts +3 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +7 -0
- package/dist/utils/messages.d.ts +2 -0
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +3 -1
- package/dist/utils/slot.d.ts +5 -2
- package/dist/utils/slot.d.ts.map +1 -1
- package/dist/utils/slot.js +16 -11
- package/dist/utils/useAnchoredPopup.d.ts.map +1 -1
- package/dist/utils/useAnchoredPopup.js +3 -2
- package/dist/utils/useHeightVar.d.ts +7 -0
- package/dist/utils/useHeightVar.d.ts.map +1 -0
- package/dist/utils/useHeightVar.js +17 -0
- package/dist/utils/useMediaPlayer.d.ts +38 -0
- package/dist/utils/useMediaPlayer.d.ts.map +1 -0
- package/dist/utils/useMediaPlayer.js +91 -0
- package/dist/utils/useMediaSession.d.ts +24 -0
- package/dist/utils/useMediaSession.d.ts.map +1 -0
- package/dist/utils/useMediaSession.js +76 -0
- package/dist/zen.css +1 -1
- package/package.json +4 -2
|
@@ -7,77 +7,91 @@ import a, { InputGroupAddon as o, InputGroupInput as s } from "../input-group/in
|
|
|
7
7
|
import c from "../icons/micro/minus.js";
|
|
8
8
|
import { plainSpaces as l } from "../utils/date.js";
|
|
9
9
|
import u from "../icons/micro/plus.js";
|
|
10
|
-
import { useMemo as d,
|
|
11
|
-
import { jsx as
|
|
10
|
+
import { useMemo as d, useRef as f, useState as p } from "react";
|
|
11
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
12
12
|
//#region packages/number-field/index.tsx
|
|
13
|
-
function
|
|
14
|
-
let
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
function g({ value: l, defaultValue: g = null, onValueChange: b, onValueCommit: x, min: S, max: C, step: w = 1, largeStep: T = w * 10, formatOptions: E, locale: D, name: O, size: k = "default", invalid: A, disabled: j, className: M, onFocus: N, onBlur: P, onKeyDown: F, ...I }) {
|
|
14
|
+
let L = r(), R = n(D), [z, B, V] = t(l, g, void 0), H = d(() => new y(R, E), [R, E]), [U, W] = p(null), G = f(!1), K = (e) => Math.min(C ?? Infinity, Math.max(S ?? -Infinity, e)), q = (e, t) => {
|
|
15
|
+
B(e), b?.(e, t);
|
|
16
|
+
}, J = (e, t) => {
|
|
17
|
+
q(e, t), x?.(e, t), G.current = !1, W(null);
|
|
18
|
+
}, Y = () => {
|
|
19
|
+
if (!G.current) return;
|
|
20
|
+
let e = U === null ? void 0 : H.parse(U), t = e === void 0 ? z : e, n = t === null ? null : K(t);
|
|
21
|
+
n !== z && q(n, { reason: "input" }), x?.(n, { reason: "input" }), G.current = !1;
|
|
22
|
+
}, X = (e) => {
|
|
23
|
+
let t = z ?? (e > 0 ? (S ?? 0) - e : (C ?? 0) - e), n = S ?? 0, r = K(n + Math.round((t + e - n) / w) * w), i = Math.max(v(w), v(n));
|
|
24
|
+
J(Number(r.toFixed(i)), {
|
|
25
|
+
reason: "step",
|
|
26
|
+
delta: e
|
|
27
|
+
});
|
|
28
|
+
}, Z = U ?? (z === null ? "" : H.format(z));
|
|
29
|
+
return /* @__PURE__ */ h(a, {
|
|
30
|
+
size: k,
|
|
31
|
+
invalid: A,
|
|
32
|
+
className: e("zen__number-field px-1", M),
|
|
22
33
|
children: [
|
|
23
|
-
/* @__PURE__ */
|
|
24
|
-
label:
|
|
25
|
-
disabled:
|
|
26
|
-
onStep: () =>
|
|
27
|
-
children: /* @__PURE__ */
|
|
34
|
+
/* @__PURE__ */ m(o, { children: /* @__PURE__ */ m(_, {
|
|
35
|
+
label: L.decrease,
|
|
36
|
+
disabled: j || z !== null && S !== void 0 && z <= S,
|
|
37
|
+
onStep: () => X(-w),
|
|
38
|
+
children: /* @__PURE__ */ m(c, {})
|
|
28
39
|
}) }),
|
|
29
|
-
/* @__PURE__ */
|
|
40
|
+
/* @__PURE__ */ m(s, {
|
|
30
41
|
role: "spinbutton",
|
|
31
|
-
inputMode: (
|
|
42
|
+
inputMode: (E?.maximumFractionDigits ?? 1) > 0 || (S ?? -1) < 0 ? "decimal" : "numeric",
|
|
32
43
|
autoComplete: "off",
|
|
33
|
-
"aria-valuenow":
|
|
34
|
-
"aria-valuemin":
|
|
35
|
-
"aria-valuemax":
|
|
36
|
-
"aria-valuetext":
|
|
37
|
-
disabled:
|
|
38
|
-
...
|
|
39
|
-
value:
|
|
44
|
+
"aria-valuenow": z ?? void 0,
|
|
45
|
+
"aria-valuemin": S,
|
|
46
|
+
"aria-valuemax": C,
|
|
47
|
+
"aria-valuetext": z === null ? void 0 : H.format(z),
|
|
48
|
+
disabled: j,
|
|
49
|
+
...I,
|
|
50
|
+
value: Z,
|
|
40
51
|
onFocus: (e) => {
|
|
41
|
-
|
|
52
|
+
N?.(e), W(Z);
|
|
42
53
|
},
|
|
43
54
|
onChange: (e) => {
|
|
44
|
-
|
|
45
|
-
let t =
|
|
46
|
-
t !== void 0 &&
|
|
55
|
+
W(e.target.value), G.current = !0;
|
|
56
|
+
let t = H.parse(e.target.value);
|
|
57
|
+
t !== void 0 && q(t, { reason: "input" });
|
|
47
58
|
},
|
|
48
59
|
onBlur: (e) => {
|
|
49
|
-
|
|
60
|
+
P?.(e), W(null), Y();
|
|
50
61
|
},
|
|
51
62
|
onKeyDown: (e) => {
|
|
52
|
-
|
|
63
|
+
if (F?.(e), e.key === "Enter" && !e.defaultPrevented) {
|
|
64
|
+
Y(), W(null);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
53
67
|
let t = {
|
|
54
|
-
ArrowUp: () =>
|
|
55
|
-
ArrowDown: () =>
|
|
56
|
-
PageUp: () =>
|
|
57
|
-
PageDown: () =>
|
|
58
|
-
Home:
|
|
59
|
-
End:
|
|
68
|
+
ArrowUp: () => X(w),
|
|
69
|
+
ArrowDown: () => X(-w),
|
|
70
|
+
PageUp: () => X(T),
|
|
71
|
+
PageDown: () => X(-T),
|
|
72
|
+
Home: S === void 0 ? void 0 : () => J(S, { reason: "limit" }),
|
|
73
|
+
End: C === void 0 ? void 0 : () => J(C, { reason: "limit" })
|
|
60
74
|
}[e.key];
|
|
61
|
-
t && !e.defaultPrevented && (e.preventDefault(), t()
|
|
75
|
+
t && !e.defaultPrevented && (e.preventDefault(), t());
|
|
62
76
|
},
|
|
63
77
|
className: "text-center tabular-nums"
|
|
64
78
|
}),
|
|
65
|
-
/* @__PURE__ */
|
|
66
|
-
label:
|
|
67
|
-
disabled:
|
|
68
|
-
onStep: () =>
|
|
69
|
-
children: /* @__PURE__ */
|
|
79
|
+
/* @__PURE__ */ m(o, { children: /* @__PURE__ */ m(_, {
|
|
80
|
+
label: L.increase,
|
|
81
|
+
disabled: j || z !== null && C !== void 0 && z >= C,
|
|
82
|
+
onStep: () => X(w),
|
|
83
|
+
children: /* @__PURE__ */ m(u, {})
|
|
70
84
|
}) }),
|
|
71
|
-
/* @__PURE__ */
|
|
72
|
-
name:
|
|
73
|
-
value:
|
|
74
|
-
onReset:
|
|
85
|
+
/* @__PURE__ */ m(i, {
|
|
86
|
+
name: O,
|
|
87
|
+
value: z === null ? "" : String(z),
|
|
88
|
+
onReset: V
|
|
75
89
|
})
|
|
76
90
|
]
|
|
77
91
|
});
|
|
78
92
|
}
|
|
79
|
-
function
|
|
80
|
-
return /* @__PURE__ */
|
|
93
|
+
function _({ label: e, disabled: t, onStep: n, children: r }) {
|
|
94
|
+
return /* @__PURE__ */ m("button", {
|
|
81
95
|
type: "button",
|
|
82
96
|
tabIndex: -1,
|
|
83
97
|
"aria-label": e,
|
|
@@ -88,7 +102,7 @@ function g({ label: e, disabled: t, onStep: n, children: r }) {
|
|
|
88
102
|
children: r
|
|
89
103
|
});
|
|
90
104
|
}
|
|
91
|
-
var
|
|
105
|
+
var v = (e) => (String(e).split(".")[1] ?? "").length, y = class {
|
|
92
106
|
formatter;
|
|
93
107
|
decimal;
|
|
94
108
|
digits;
|
|
@@ -116,4 +130,4 @@ var _ = (e) => (String(e).split(".")[1] ?? "").length, v = class {
|
|
|
116
130
|
}
|
|
117
131
|
};
|
|
118
132
|
//#endregion
|
|
119
|
-
export {
|
|
133
|
+
export { g as default };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ComponentProps } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* What's playing, along the bottom of the screen: a glass bar for the cover,
|
|
4
|
+
* the title, the controls and a SeekBar, laid out as you like. It sits on a
|
|
5
|
+
* TabBar beside it (in the same parent), and clears the home indicator where
|
|
6
|
+
* there's none. Its height is kept in `--zen-player-bar-height` on that
|
|
7
|
+
* parent, for the page to pad its end by. Name it with an aria-label ("Now playing"). Drive it with useMediaPlayer.
|
|
8
|
+
*/
|
|
9
|
+
export default function PlayerBar({ className, ref, ...rest }: PlayerBarProps): import('react').JSX.Element;
|
|
10
|
+
export type PlayerBarProps = ComponentProps<'section'>;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/player-bar/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAU,MAAM,OAAO,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,+BAe5E;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cx as e } from "../utils/cx.js";
|
|
3
|
+
import { useMergedRefs as t } from "../utils/refs.js";
|
|
4
|
+
import { useHeightVar as n } from "../utils/useHeightVar.js";
|
|
5
|
+
import { useRef as r } from "react";
|
|
6
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
7
|
+
//#region packages/player-bar/index.tsx
|
|
8
|
+
function a({ className: a, ref: o, ...s }) {
|
|
9
|
+
let c = r(null);
|
|
10
|
+
return n(c, "--zen-player-bar-height"), /* @__PURE__ */ i("section", {
|
|
11
|
+
ref: t(c, o),
|
|
12
|
+
className: e("zen__player-bar glass glass-blur glow-edge fixed inset-x-0 bottom-[var(--zen-tab-bar-height,0px)] z-40 flex items-center gap-4 rounded-none border-x-0! border-b-0! px-4 pt-3", "pb-[calc(0.75rem_+_max(0px,_env(safe-area-inset-bottom)_-_var(--zen-tab-bar-height,_0px)))]", a),
|
|
13
|
+
...s
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { a as default };
|
|
@@ -14,7 +14,8 @@ export default function RadioCards<V extends string>({ label, value: valueProp,
|
|
|
14
14
|
export declare function RadioCard({ value, disabled, className, style, children }: RadioCardProps): import('react').JSX.Element;
|
|
15
15
|
/** Other props (aria-*, data-*, an id) go on the cards' container, the radiogroup. */
|
|
16
16
|
export interface RadioCardsProps<V extends string> extends Omit<ComponentProps<'div'>, 'defaultValue' | 'children'> {
|
|
17
|
-
label
|
|
17
|
+
/** Shown above the cards, naming the group. Without it, give the group an aria-label or aria-labelledby. */
|
|
18
|
+
label?: string;
|
|
18
19
|
/** The chosen card, when you keep it. */
|
|
19
20
|
value?: V;
|
|
20
21
|
/** The first chosen card, when the group keeps its own. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/radio-cards/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAiB,aAAa,EAAE,SAAS,EAAqB,MAAM,OAAO,CAAC;AAUnG;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,EACjD,KAAK,EACL,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,aAAa,EACb,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,eAAe,CAAC,CAAC,CAAC,+
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/radio-cards/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAiB,aAAa,EAAE,SAAS,EAAqB,MAAM,OAAO,CAAC;AAUnG;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,EACjD,KAAK,EACL,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,aAAa,EACb,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,eAAe,CAAC,CAAC,CAAC,+BAmBpB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,cAAc,+BAyBxF;AAED,sFAAsF;AACtF,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC;IAC/G,4GAA4G;IAC5G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,2DAA2D;IAC3D,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACnC,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;CACvB"}
|
|
@@ -9,13 +9,13 @@ function c({ label: e, value: n, defaultValue: r, onValueChange: c, name: l, cla
|
|
|
9
9
|
let [p, m] = t(n, r, c), h = i();
|
|
10
10
|
return /* @__PURE__ */ o("div", {
|
|
11
11
|
className: "zen__radio-cards flex flex-col gap-2",
|
|
12
|
-
children: [/* @__PURE__ */ a("span", {
|
|
12
|
+
children: [e && /* @__PURE__ */ a("span", {
|
|
13
13
|
id: h,
|
|
14
14
|
className: "text-sm font-medium",
|
|
15
15
|
children: e
|
|
16
16
|
}), /* @__PURE__ */ a("div", {
|
|
17
17
|
role: "radiogroup",
|
|
18
|
-
"aria-labelledby": h,
|
|
18
|
+
"aria-labelledby": e ? h : void 0,
|
|
19
19
|
className: u,
|
|
20
20
|
...f,
|
|
21
21
|
children: /* @__PURE__ */ a(s.Provider, {
|
|
@@ -34,7 +34,7 @@ function l({ value: t, disabled: n, className: i, style: c, children: l }) {
|
|
|
34
34
|
if (!u) throw Error("<RadioCard> must be inside <RadioCards>");
|
|
35
35
|
return /* @__PURE__ */ o("label", {
|
|
36
36
|
style: c,
|
|
37
|
-
className: e("zen__radio-card border-tint/10 relative flex items-center gap-3 rounded-xl border p-2.5 text-start text-sm transition-[border-color,box-shadow] duration-200", "hover:has-enabled:border-tint/20 has-checked:border-primary/60 has-checked:shadow-[0_0_0_3px_oklch(var(--primary)/0.15)]", "has-
|
|
37
|
+
className: e("zen__radio-card border-tint/10 relative flex items-center gap-3 rounded-xl border p-2.5 text-start text-sm transition-[border-color,box-shadow] duration-200", "hover:has-enabled:border-tint/20 has-checked:border-primary/60 has-checked:shadow-[0_0_0_3px_oklch(var(--primary)/0.15)]", "has-focus-ring has-disabled:opacity-60", i),
|
|
38
38
|
children: [/* @__PURE__ */ a("input", {
|
|
39
39
|
type: "radio",
|
|
40
40
|
name: u.name,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SliderProps } from '../slider';
|
|
2
|
+
/**
|
|
3
|
+
* Where playback is in a track, and the way to move it: filled up to the
|
|
4
|
+
* current time, shaded on to what's loaded, between the time played and the
|
|
5
|
+
* length. While playing it glides, run by the browser's compositor between
|
|
6
|
+
* the player's time updates. While dragging, the time follows the thumb and
|
|
7
|
+
* the track keeps playing; letting go seeks. The arrow keys seek 5 seconds.
|
|
8
|
+
*/
|
|
9
|
+
export default function SeekBar({ currentTime, duration, buffered, playing, playbackRate, onSeek, onKeyDown, disabled, className, ...rest }: SeekBarProps): import('react').JSX.Element;
|
|
10
|
+
export interface SeekBarProps extends Omit<SliderProps, 'value' | 'defaultValue' | 'min' | 'max' | 'step' | 'onValueChange' | 'onValueCommit' | 'trackBackground'> {
|
|
11
|
+
/** Seconds played. */
|
|
12
|
+
currentTime: number;
|
|
13
|
+
/** Seconds long; 0 while unknown (the bar is disabled). */
|
|
14
|
+
duration: number;
|
|
15
|
+
/** Seconds loaded, shaded on the track past the time played. */
|
|
16
|
+
buffered?: number;
|
|
17
|
+
/** While the time is running (playing, not waiting for data): the bar glides on between time updates. */
|
|
18
|
+
playing?: boolean;
|
|
19
|
+
/** How fast it moves on while playing (default 1). */
|
|
20
|
+
playbackRate?: number;
|
|
21
|
+
/** When the user lets go, or steps with the keys: the time to play from. */
|
|
22
|
+
onSeek: (time: number) => void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/seek-bar/index.tsx"],"names":[],"mappings":"AACA,OAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQlD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC5B,WAAW,EACX,QAAQ,EACR,QAAY,EACZ,OAAe,EACf,YAAgB,EAChB,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACV,EAAE,YAAY,+BA6Gd;AAED,MAAM,WAAW,YAAa,SAAQ,IAAI,CACtC,WAAW,EACX,OAAO,GAAG,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,eAAe,GAAG,eAAe,GAAG,iBAAiB,CAC5G;IACG,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cx as e } from "../utils/cx.js";
|
|
3
|
+
import { useMessages as t } from "../locale-provider/index.js";
|
|
4
|
+
import n from "../slider/index.js";
|
|
5
|
+
import { formatDuration as r } from "../utils/duration.js";
|
|
6
|
+
import { useLayoutEffect as i, useRef as a, useState as o } from "react";
|
|
7
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
8
|
+
//#region packages/seek-bar/index.tsx
|
|
9
|
+
var l = 5;
|
|
10
|
+
function u({ currentTime: u, duration: d, buffered: f = 0, playing: p = !1, playbackRate: m = 1, onSeek: h, onKeyDown: g, disabled: _, className: v, ...y }) {
|
|
11
|
+
let b = t(), [x, S] = o(null), [C, w] = o(null), T = C && C.from === u ? C.at : null, E = Math.max(0, Math.min(x ?? T ?? u, d)), D = a(null), O = a(null), k = p && x === null && T === null && d > 0 && E < d, A = a(null);
|
|
12
|
+
i(() => {
|
|
13
|
+
let e = [D.current, O.current].filter((e) => e !== null);
|
|
14
|
+
if (!e.length) return;
|
|
15
|
+
let t = A.current;
|
|
16
|
+
if (k && t && t.rate === m && t.duration === d) {
|
|
17
|
+
let e = Number(t.animations[0].currentTime ?? 0) / 1e3;
|
|
18
|
+
if (Math.abs(t.from + e * m - E) < .15) return;
|
|
19
|
+
}
|
|
20
|
+
t?.animations.forEach((e) => e.cancel()), A.current = null;
|
|
21
|
+
let n = getComputedStyle(e[0]).direction === "rtl" ? -1 : 1, r = (e) => `${d > 0 ? n * e * 100 / d : 0}cqw`;
|
|
22
|
+
for (let t of e) t.style.translate = r(E);
|
|
23
|
+
if (!k) return;
|
|
24
|
+
let i = e.map((e) => e.animate([{ translate: r(E) }, { translate: r(d) }], {
|
|
25
|
+
duration: (d - E) / m * 1e3,
|
|
26
|
+
easing: "linear",
|
|
27
|
+
fill: "forwards"
|
|
28
|
+
}));
|
|
29
|
+
A.current = {
|
|
30
|
+
animations: i,
|
|
31
|
+
from: E,
|
|
32
|
+
rate: m,
|
|
33
|
+
duration: d
|
|
34
|
+
};
|
|
35
|
+
}, [
|
|
36
|
+
E,
|
|
37
|
+
d,
|
|
38
|
+
k,
|
|
39
|
+
m
|
|
40
|
+
]), i(() => () => A.current?.animations.forEach((e) => e.cancel()), []);
|
|
41
|
+
let j = (e) => {
|
|
42
|
+
if (g?.(e), e.defaultPrevented) return;
|
|
43
|
+
let t = getComputedStyle(e.currentTarget).direction === "rtl", n = {
|
|
44
|
+
ArrowUp: 1,
|
|
45
|
+
ArrowDown: -1,
|
|
46
|
+
ArrowRight: t ? -1 : 1,
|
|
47
|
+
ArrowLeft: t ? 1 : -1
|
|
48
|
+
}[e.key];
|
|
49
|
+
if (!n) return;
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
let r = Math.max(0, Math.min(E + n * l, d));
|
|
52
|
+
w({
|
|
53
|
+
at: r,
|
|
54
|
+
from: u
|
|
55
|
+
}), h(r);
|
|
56
|
+
}, M = _ || d <= 0, N = d > 0 ? Math.min(f, d) / d * 100 : 0, P = { width: `${r(d).length}ch` };
|
|
57
|
+
return /* @__PURE__ */ c("div", {
|
|
58
|
+
className: e("zen__seek-bar flex items-center gap-3", v),
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ s("span", {
|
|
61
|
+
className: "text-muted-foreground shrink-0 text-end text-xs tabular-nums",
|
|
62
|
+
style: P,
|
|
63
|
+
children: r(E)
|
|
64
|
+
}),
|
|
65
|
+
/* @__PURE__ */ c("div", {
|
|
66
|
+
className: e("group relative h-5 min-w-0 flex-1", M && "opacity-50"),
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ s(n, {
|
|
69
|
+
"aria-label": b.seek,
|
|
70
|
+
min: 0,
|
|
71
|
+
max: d || 1,
|
|
72
|
+
step: "any",
|
|
73
|
+
value: E,
|
|
74
|
+
disabled: M,
|
|
75
|
+
valueText: () => b.timeOf(r(E), r(d)),
|
|
76
|
+
className: "absolute inset-0 z-10 h-full opacity-0",
|
|
77
|
+
onKeyDown: j,
|
|
78
|
+
onValueChange: S,
|
|
79
|
+
onValueCommit: (e) => {
|
|
80
|
+
S(null), w({
|
|
81
|
+
at: e,
|
|
82
|
+
from: u
|
|
83
|
+
}), h(e);
|
|
84
|
+
},
|
|
85
|
+
...y
|
|
86
|
+
}),
|
|
87
|
+
/* @__PURE__ */ c("div", {
|
|
88
|
+
"aria-hidden": !0,
|
|
89
|
+
className: "absolute inset-x-0 top-1/2 h-2.5 -translate-y-1/2 overflow-hidden rounded-full bg-[oklch(var(--muted))]",
|
|
90
|
+
children: [/* @__PURE__ */ s("div", {
|
|
91
|
+
className: "absolute inset-y-0 start-0 bg-[oklch(var(--tint)/0.22)] transition-[width] duration-300",
|
|
92
|
+
style: { width: `${N}%` }
|
|
93
|
+
}), /* @__PURE__ */ s("div", {
|
|
94
|
+
className: "[container-type:inline-size] absolute inset-x-2.5 inset-y-0",
|
|
95
|
+
children: /* @__PURE__ */ s("div", {
|
|
96
|
+
ref: D,
|
|
97
|
+
className: "bg-primary absolute inset-y-0 end-full w-[calc(100%+0.625rem)]"
|
|
98
|
+
})
|
|
99
|
+
})]
|
|
100
|
+
}),
|
|
101
|
+
/* @__PURE__ */ s("div", {
|
|
102
|
+
"aria-hidden": !0,
|
|
103
|
+
className: "[container-type:inline-size] pointer-events-none absolute inset-x-2.5 inset-y-0",
|
|
104
|
+
children: /* @__PURE__ */ s("div", {
|
|
105
|
+
ref: O,
|
|
106
|
+
className: "bg-primary group-has-[input:focus-visible]:ring-ring/40 absolute start-0 top-1/2 -ms-2.5 -mt-2.5 size-5 rounded-full border-2 border-white shadow-[0_0_0_1px_oklch(0_0_0/0.3),0_0_16px_oklch(var(--glow)/calc(0.8*var(--glow-k)))] group-has-[input:focus-visible]:ring-4"
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
]
|
|
110
|
+
}),
|
|
111
|
+
/* @__PURE__ */ s("span", {
|
|
112
|
+
className: "text-muted-foreground shrink-0 text-xs tabular-nums",
|
|
113
|
+
style: P,
|
|
114
|
+
children: r(d)
|
|
115
|
+
})
|
|
116
|
+
]
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
//#endregion
|
|
120
|
+
export { u as default };
|
|
@@ -5,11 +5,12 @@ import { ComponentProps, ReactNode } from 'react';
|
|
|
5
5
|
* selection slides between options, like Pills. Fill it with
|
|
6
6
|
* SegmentedItem (any content: text, icons, a disabled option).
|
|
7
7
|
*/
|
|
8
|
-
export default function Segmented<V extends string>({ label, value: valueProp, defaultValue, onValueChange, name, className, children, ...rest }: SegmentedProps<V>): import('react').JSX.Element;
|
|
8
|
+
export default function Segmented<V extends string>({ label, value: valueProp, defaultValue, onValueChange, name, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, className, children, ...rest }: SegmentedProps<V>): import('react').JSX.Element;
|
|
9
9
|
/** One option of a Segmented: a native radio covering whatever you put inside. */
|
|
10
10
|
export declare function SegmentedItem({ value, disabled, className, children }: SegmentedItemProps): import('react').JSX.Element;
|
|
11
11
|
export interface SegmentedProps<V extends string> extends Omit<ComponentProps<'div'>, 'defaultValue' | 'children'> {
|
|
12
|
-
label
|
|
12
|
+
/** Shown above the options, naming the group. Without it, give the group an aria-label or aria-labelledby. */
|
|
13
|
+
label?: ReactNode;
|
|
13
14
|
/** The chosen option, when you keep it. */
|
|
14
15
|
value?: V;
|
|
15
16
|
/** The first chosen option, when the control keeps its own. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/segmented/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAiB,SAAS,EAA6B,MAAM,OAAO,CAAC;AAY5F;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,EAChD,KAAK,EACL,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,aAAa,EACb,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,cAAc,CAAC,CAAC,CAAC,+
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/segmented/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAiB,SAAS,EAA6B,MAAM,OAAO,CAAC;AAY5F;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,EAChD,KAAK,EACL,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,aAAa,EACb,IAAI,EACJ,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,cAAc,CAAC,CAAC,CAAC,+BA2CnB;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BA4BzF;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC;IAC9G,8GAA8G;IAC9G,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,+DAA+D;IAC/D,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACnC,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,QAAQ,EAAE,SAAS,CAAC;CACvB"}
|
package/dist/segmented/index.js
CHANGED
|
@@ -6,36 +6,37 @@ import { createContext as r, useContext as i, useId as a, useRef as o } from "re
|
|
|
6
6
|
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
7
7
|
//#region packages/segmented/index.tsx
|
|
8
8
|
var l = r(null);
|
|
9
|
-
function u({ label: r, value: i, defaultValue: u, onValueChange: d, name: f,
|
|
10
|
-
let [
|
|
9
|
+
function u({ label: r, value: i, defaultValue: u, onValueChange: d, name: f, "aria-label": p, "aria-labelledby": m, className: h, children: g, ..._ }) {
|
|
10
|
+
let [v, y] = t(i, u, d), b = a(), x = o(null), S = n(x, "label:has(input:checked)", [v, g]);
|
|
11
11
|
return /* @__PURE__ */ c("div", {
|
|
12
|
-
className: e("zen__segmented flex flex-col gap-2",
|
|
13
|
-
...
|
|
14
|
-
children: [/* @__PURE__ */ s("span", {
|
|
15
|
-
id:
|
|
12
|
+
className: e("zen__segmented flex flex-col gap-2", h),
|
|
13
|
+
..._,
|
|
14
|
+
children: [r && /* @__PURE__ */ s("span", {
|
|
15
|
+
id: b,
|
|
16
16
|
className: "text-sm font-medium",
|
|
17
17
|
children: r
|
|
18
18
|
}), /* @__PURE__ */ c("div", {
|
|
19
|
-
ref:
|
|
19
|
+
ref: x,
|
|
20
20
|
role: "radiogroup",
|
|
21
|
-
"aria-
|
|
21
|
+
"aria-label": p,
|
|
22
|
+
"aria-labelledby": r ? b : m,
|
|
22
23
|
className: "glow-edge border-tint/10 bg-tint/[0.03] relative inline-flex w-fit flex-wrap gap-1 rounded-xl border p-1",
|
|
23
|
-
children: [
|
|
24
|
+
children: [S && /* @__PURE__ */ s("span", {
|
|
24
25
|
"aria-hidden": !0,
|
|
25
26
|
className: "zen__segmented-indicator bg-primary/15 ease-out-soft absolute top-0 left-0 rounded-lg shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.4)] transition-[translate,width,height] duration-500",
|
|
26
27
|
style: {
|
|
27
|
-
translate: `${
|
|
28
|
-
width:
|
|
29
|
-
height:
|
|
28
|
+
translate: `${S.x}px ${S.y}px`,
|
|
29
|
+
width: S.w,
|
|
30
|
+
height: S.h
|
|
30
31
|
}
|
|
31
32
|
}), /* @__PURE__ */ s(l.Provider, {
|
|
32
33
|
value: {
|
|
33
|
-
name: f ??
|
|
34
|
-
value:
|
|
35
|
-
select:
|
|
36
|
-
measured:
|
|
34
|
+
name: f ?? b,
|
|
35
|
+
value: v,
|
|
36
|
+
select: y,
|
|
37
|
+
measured: S !== null
|
|
37
38
|
},
|
|
38
|
-
children:
|
|
39
|
+
children: g
|
|
39
40
|
})]
|
|
40
41
|
})]
|
|
41
42
|
});
|
|
@@ -44,7 +45,7 @@ function d({ value: t, disabled: n, className: r, children: a }) {
|
|
|
44
45
|
let o = i(l);
|
|
45
46
|
if (!o) throw Error("SegmentedItem must be inside a Segmented");
|
|
46
47
|
return /* @__PURE__ */ c("label", {
|
|
47
|
-
className: e("text-muted-foreground relative cursor-pointer rounded-lg px-3 py-1.5 text-sm transition-colors duration-300", "hover:text-foreground has-checked:text-foreground has-
|
|
48
|
+
className: e("text-muted-foreground relative inline-flex cursor-pointer items-center gap-1.5 rounded-lg px-3 py-1.5 text-sm transition-colors duration-300", "hover:text-foreground has-checked:text-foreground has-focus-ring", "has-disabled:hover:text-muted-foreground has-disabled:cursor-not-allowed has-disabled:opacity-50", !o.measured && "has-checked:bg-primary/15 has-checked:shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.4)]", r),
|
|
48
49
|
children: [/* @__PURE__ */ s("input", {
|
|
49
50
|
type: "radio",
|
|
50
51
|
className: "absolute inset-0 z-10 m-0 size-full cursor-pointer appearance-none rounded-[inherit] opacity-0 disabled:cursor-not-allowed",
|
package/dist/slider/index.d.ts
CHANGED
|
@@ -15,7 +15,8 @@ export interface SliderProps extends Omit<ComponentProps<'input'>, 'type' | 'val
|
|
|
15
15
|
defaultValue?: number;
|
|
16
16
|
min?: number;
|
|
17
17
|
max?: number;
|
|
18
|
-
|
|
18
|
+
/** `'any'` for no snapping; the arrow keys then move by the browser's own amount. */
|
|
19
|
+
step?: number | 'any';
|
|
19
20
|
/** While dragging (every step). */
|
|
20
21
|
onValueChange?: (value: number) => void;
|
|
21
22
|
/** Once the user lets go: the moment to save. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/slider/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAoC,MAAM,OAAO,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,GAAO,EACP,GAAS,EACT,IAAQ,EACR,aAAa,EACb,aAAa,EACb,eAAe,EACf,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,WAAW,+BAmDb;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,cAAc,CAC7D;IACG,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/slider/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAoC,MAAM,OAAO,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,GAAO,EACP,GAAS,EACT,IAAQ,EACR,aAAa,EACb,aAAa,EACb,eAAe,EACf,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,WAAW,+BAmDb;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,cAAc,CAC7D;IACG,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,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"}
|
package/dist/tab-bar/index.d.ts
CHANGED
|
@@ -2,11 +2,13 @@ import { ComponentProps, ReactNode } from 'react';
|
|
|
2
2
|
/**
|
|
3
3
|
* Phone navigation: a glass bar fixed to the bottom, clear of the home
|
|
4
4
|
* indicator, hidden from `hideFrom` up (default md). Fill it with TabBarItems.
|
|
5
|
+
* Its height is kept in `--zen-tab-bar-height` on its parent (0px while
|
|
6
|
+
* hidden): a PlayerBar beside it sits on it, and the page can pad its end by it.
|
|
5
7
|
* Inside a rounded frame, round the bar to match (className, e.g.
|
|
6
8
|
* rounded-b-[15px]): with GPU compositing, Chrome doesn't clip a blurred
|
|
7
9
|
* backdrop to an ancestor's rounded corners, only to the element's own.
|
|
8
10
|
*/
|
|
9
|
-
export default function TabBar({ hideFrom, className, children, ...rest }: TabBarProps): import('react').JSX.Element;
|
|
11
|
+
export default function TabBar({ hideFrom, className, children, ref, ...rest }: TabBarProps): import('react').JSX.Element;
|
|
10
12
|
/**
|
|
11
13
|
* One destination: an icon over a label. `active` marks the current page; with
|
|
12
14
|
* `asChild`, the styles go onto your own link (e.g. a router's NavLink, which
|
|
@@ -20,7 +22,7 @@ export interface TabBarProps extends ComponentProps<'nav'> {
|
|
|
20
22
|
export interface TabBarItemProps extends ComponentProps<'a'> {
|
|
21
23
|
icon?: ReactNode;
|
|
22
24
|
active?: boolean;
|
|
23
|
-
/** Style the single child element (a router link holding the
|
|
25
|
+
/** Style the single child element (a router link holding the label) instead of rendering an <a>; `icon` goes inside it. */
|
|
24
26
|
asChild?: boolean;
|
|
25
27
|
}
|
|
26
28
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/tab-bar/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/tab-bar/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAY,cAAc,EAAE,SAAS,EAAU,MAAM,OAAO,CAAC;AAEpE;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,QAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAoBjG;AAOD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,eAAe,+BAgBlG;AAED,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,KAAK,CAAC;IACtD,iEAAiE;IACjE,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;CACzC;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc,CAAC,GAAG,CAAC;IACxD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2HAA2H;IAC3H,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
package/dist/tab-bar/index.js
CHANGED
|
@@ -1,34 +1,39 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cx as e } from "../utils/cx.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { useMergedRefs as t } from "../utils/refs.js";
|
|
4
|
+
import { Slot as n } from "../utils/slot.js";
|
|
5
|
+
import { useHeightVar as r } from "../utils/useHeightVar.js";
|
|
6
|
+
import { Children as i, useRef as a } from "react";
|
|
7
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
6
8
|
//#region packages/tab-bar/index.tsx
|
|
7
|
-
function
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
function c({ hideFrom: n = "md", className: s, children: c, ref: l, ...u }) {
|
|
10
|
+
let d = a(null);
|
|
11
|
+
return r(d, "--zen-tab-bar-height"), /* @__PURE__ */ o("nav", {
|
|
12
|
+
ref: t(d, l),
|
|
13
|
+
className: e("zen__tab-bar glass glass-blur glow-edge fixed inset-x-0 bottom-0 z-40 rounded-none border-x-0! border-b-0! pb-[env(safe-area-inset-bottom)]", n === "sm" && "sm:hidden", n === "md" && "md:hidden", n === "lg" && "lg:hidden", s),
|
|
14
|
+
...u,
|
|
15
|
+
children: /* @__PURE__ */ o("div", {
|
|
12
16
|
className: "grid",
|
|
13
|
-
style: { gridTemplateColumns: `repeat(${
|
|
14
|
-
children:
|
|
17
|
+
style: { gridTemplateColumns: `repeat(${i.count(c)}, 1fr)` },
|
|
18
|
+
children: c
|
|
15
19
|
})
|
|
16
20
|
});
|
|
17
21
|
}
|
|
18
|
-
var
|
|
19
|
-
function
|
|
22
|
+
var l = e("flex flex-col items-center gap-1 py-2.5 text-2xs outline-hidden transition-colors duration-200 focus-ring focus-visible:ring-inset", "text-muted-foreground aria-[current=page]:text-primary [&_svg]:size-5 aria-[current=page]:[&_svg]:drop-shadow-[0_0_8px_oklch(var(--glow)/calc(0.8*var(--glow-k)))]");
|
|
23
|
+
function u({ icon: t, active: r, asChild: i, className: a, children: c, ...u }) {
|
|
20
24
|
let d = {
|
|
21
25
|
...u,
|
|
22
|
-
"aria-current":
|
|
23
|
-
className: e(
|
|
26
|
+
"aria-current": r ? "page" : void 0,
|
|
27
|
+
className: e(l, a)
|
|
24
28
|
};
|
|
25
|
-
return
|
|
29
|
+
return i ? (r || delete d["aria-current"], /* @__PURE__ */ o(n, {
|
|
26
30
|
...d,
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
before: t,
|
|
32
|
+
children: c
|
|
33
|
+
})) : /* @__PURE__ */ s("a", {
|
|
29
34
|
...d,
|
|
30
|
-
children: [
|
|
35
|
+
children: [t, c]
|
|
31
36
|
});
|
|
32
37
|
}
|
|
33
38
|
//#endregion
|
|
34
|
-
export {
|
|
39
|
+
export { u as TabBarItem, c as default };
|
package/dist/textarea/index.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { ComponentProps } from 'react';
|
|
2
|
-
export default function Textarea(props:
|
|
3
|
-
export type
|
|
2
|
+
export default function Textarea(props: TextareaProps): import('react').JSX.Element;
|
|
3
|
+
export type TextareaProps = ComponentProps<'textarea'>;
|
|
4
|
+
/** @deprecated Renamed Textarea, like the element. */
|
|
5
|
+
export declare const TextArea: typeof Textarea;
|
|
6
|
+
/** @deprecated Renamed TextareaProps. */
|
|
7
|
+
export type TextAreaProps = TextareaProps;
|
|
4
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/textarea/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAiBpD;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/textarea/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAiBpD;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AAEvD,sDAAsD;AACtD,eAAO,MAAM,QAAQ,iBAAW,CAAC;AACjC,yCAAyC;AACzC,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC"}
|