@fiestaboard/ui 5.1.0 → 5.3.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/dist/components/board/board-display.d.ts +13 -1
- package/dist/components/board/board-display.js +103 -101
- package/dist/components/board/board-display.js.map +1 -1
- package/dist/components/board/static-board-display.d.ts +6 -1
- package/dist/components/board/static-board-display.js +36 -34
- package/dist/components/board/static-board-display.js.map +1 -1
- package/dist/components/chrome/breadcrumb.d.ts +43 -0
- package/dist/components/chrome/breadcrumb.js +76 -0
- package/dist/components/chrome/breadcrumb.js.map +1 -0
- package/dist/components/containment/media-frame.d.ts +28 -0
- package/dist/components/containment/media-frame.js +40 -0
- package/dist/components/containment/media-frame.js.map +1 -0
- package/dist/components/data/bar-list.d.ts +81 -0
- package/dist/components/data/bar-list.js +54 -0
- package/dist/components/data/bar-list.js.map +1 -0
- package/dist/components/feedback/chip.d.ts +28 -0
- package/dist/components/feedback/chip.js +29 -0
- package/dist/components/feedback/chip.js.map +1 -0
- package/dist/components/forms/toggle.d.ts +56 -0
- package/dist/components/forms/toggle.js +97 -0
- package/dist/components/forms/toggle.js.map +1 -0
- package/dist/components/overlays/lightbox.d.ts +37 -0
- package/dist/components/overlays/lightbox.js +54 -0
- package/dist/components/overlays/lightbox.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +99 -93
- package/dist/lib/board-characters.d.ts +33 -7
- package/dist/lib/board-characters.js +14 -11
- package/dist/lib/board-characters.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,61 +7,63 @@ import { isNoteArray as d, resolveDimensions as f } from "../../lib/board-dimens
|
|
|
7
7
|
import { memo as p, useMemo as m } from "react";
|
|
8
8
|
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
9
9
|
//#region src/components/board/static-board-display.tsx
|
|
10
|
-
var _ = (e) => `Board preview: ${e}`, v = "Board preview", y = p(function({ message: p, size: y = "sm", boardType: b = "black", deviceType: x = "flagship",
|
|
11
|
-
let
|
|
10
|
+
var _ = (e) => `Board preview: ${e}`, v = "Board preview", y = p(function({ message: p, size: y = "sm", boardType: b = "black", deviceType: x = "flagship", code62Glyph: S, className: C = "", notesWide: w = 1, notesTall: T = 1, previewLabel: E, messageLabel: D = _, emptyLabel: O = "Empty board display" }) {
|
|
11
|
+
let k = f(x, w, T), A = d(x), j = b === "white", M = j ? "var(--color-board-surface-light)" : "var(--color-board-surface-dark)", N = j ? "var(--color-board-text-on-light)" : "var(--color-board-text-on-dark)", P = m(() => t(p ?? "", k.rows, k.cols, x, S), [
|
|
12
12
|
p,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
x
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
k.rows,
|
|
14
|
+
k.cols,
|
|
15
|
+
x,
|
|
16
|
+
S
|
|
17
|
+
]), F = m(() => {
|
|
18
|
+
if (!p) return O;
|
|
19
|
+
if (E !== void 0) return E;
|
|
20
|
+
let e = n(p, x, S);
|
|
21
|
+
return e ? D(e) : v;
|
|
21
22
|
}, [
|
|
22
23
|
p,
|
|
23
24
|
x,
|
|
24
|
-
|
|
25
|
+
S,
|
|
25
26
|
E,
|
|
26
|
-
D
|
|
27
|
-
|
|
27
|
+
D,
|
|
28
|
+
O
|
|
29
|
+
]), I = y === "sm" ? "6px" : y === "md" ? "8px" : "10px", L = j ? "var(--color-board-bezel-light)" : "var(--color-board-bezel-dark)", R = j ? "var(--color-board-bezel-border-light)" : "var(--color-board-bezel-border-dark)", z = y === "sm" ? j ? "0 2px 8px rgba(0,0,0,0.1), inset 0 1px 2px rgba(255,255,255,0.9)" : "0 2px 8px rgba(0,0,0,0.4), inset 0 1px 1px rgba(255,255,255,0.06)" : j ? "0 8px 32px rgba(0,0,0,0.12), 0 4px 16px rgba(0,0,0,0.08), inset 0 1px 2px rgba(255,255,255,0.9), inset 0 0 0 1px rgba(255,255,255,0.5)" : "0 8px 32px rgba(0,0,0,0.6), 0 4px 16px rgba(0,0,0,0.4), inset 0 1px 1px rgba(255,255,255,0.08), inset 0 0 0 1px rgba(255,255,255,0.03)", B = y === "sm" ? j ? "0 1px 2px rgba(0,0,0,0.15)" : "0 1px 2px rgba(0,0,0,0.4)" : j ? "0 2px 4px rgba(0,0,0,0.2), inset 0 1px 2px rgba(0,0,0,0.1), inset 0 -1px 2px rgba(255,255,255,0.5), inset 1px 0 1px rgba(0,0,0,0.08), inset -1px 0 1px rgba(255,255,255,0.4)" : "0 2px 4px rgba(0,0,0,0.5), inset 0 1px 2px rgba(0,0,0,0.8), inset 0 -1px 1px rgba(255,255,255,0.08), inset 1px 0 1px rgba(0,0,0,0.5), inset -1px 0 1px rgba(255,255,255,0.05)";
|
|
28
30
|
return /* @__PURE__ */ h("div", {
|
|
29
31
|
className: "w-full flex justify-center",
|
|
30
32
|
children: /* @__PURE__ */ h("div", {
|
|
31
33
|
role: "img",
|
|
32
|
-
"aria-label":
|
|
34
|
+
"aria-label": F,
|
|
33
35
|
"data-slot": "static-board-display",
|
|
34
|
-
className: `${y === "sm" ? "rounded-lg border-[3px]" : "rounded-lg sm:rounded-xl border-[3px] sm:border-[4px] lg:border-[5px]"} ${
|
|
36
|
+
className: `${y === "sm" ? "rounded-lg border-[3px]" : "rounded-lg sm:rounded-xl border-[3px] sm:border-[4px] lg:border-[5px]"} ${C}`,
|
|
35
37
|
style: {
|
|
36
|
-
backgroundColor:
|
|
37
|
-
borderColor:
|
|
38
|
-
boxShadow:
|
|
38
|
+
backgroundColor: L,
|
|
39
|
+
borderColor: R,
|
|
40
|
+
boxShadow: z,
|
|
39
41
|
width: "fit-content"
|
|
40
42
|
},
|
|
41
43
|
children: /* @__PURE__ */ h("div", {
|
|
42
44
|
className: `${i[y]} relative`,
|
|
43
45
|
"aria-hidden": "true",
|
|
44
|
-
style: { background:
|
|
46
|
+
style: { background: j ? "linear-gradient(135deg, var(--color-board-surface-light) 0%, var(--color-board-bezel-border-light) 100%)" : "linear-gradient(135deg, var(--color-board-surface-dark) 0%, var(--color-board-black) 100%)" },
|
|
45
47
|
children: /* @__PURE__ */ h("div", {
|
|
46
48
|
className: `flex flex-col ${r[y]}`,
|
|
47
|
-
children:
|
|
48
|
-
let i =
|
|
49
|
+
children: P.map((t, n) => {
|
|
50
|
+
let i = A && n > 0 && n % 3 == 0;
|
|
49
51
|
return /* @__PURE__ */ h("div", {
|
|
50
52
|
"data-note-row": "",
|
|
51
53
|
...i ? { "data-note-row-seam": "true" } : {},
|
|
52
54
|
className: `flex ${r[y]} justify-center`,
|
|
53
|
-
style: i ? { marginTop:
|
|
55
|
+
style: i ? { marginTop: I } : void 0,
|
|
54
56
|
children: t.map((t, n) => {
|
|
55
|
-
let r =
|
|
57
|
+
let r = A && n > 0 && n % 15 == 0, i = r ? { marginLeft: I } : void 0, d = r ? { "data-note-col-seam": "true" } : {};
|
|
56
58
|
if (t.type === "color") {
|
|
57
|
-
let r = e(t.code,
|
|
59
|
+
let r = e(t.code, j);
|
|
58
60
|
return y === "sm" ? /* @__PURE__ */ h("div", {
|
|
59
61
|
"data-note-tile": "",
|
|
60
62
|
...d,
|
|
61
63
|
className: `${o[y]} ${a[y]} shrink-0`,
|
|
62
64
|
style: {
|
|
63
65
|
backgroundColor: r,
|
|
64
|
-
boxShadow:
|
|
66
|
+
boxShadow: B,
|
|
65
67
|
contain: "layout style paint",
|
|
66
68
|
...i
|
|
67
69
|
}
|
|
@@ -70,8 +72,8 @@ var _ = (e) => `Board preview: ${e}`, v = "Board preview", y = p(function({ mess
|
|
|
70
72
|
...d,
|
|
71
73
|
className: `relative ${o[y]} ${a[y]} shrink-0 overflow-hidden`,
|
|
72
74
|
style: {
|
|
73
|
-
backgroundColor:
|
|
74
|
-
boxShadow:
|
|
75
|
+
backgroundColor: M,
|
|
76
|
+
boxShadow: B,
|
|
75
77
|
contain: "layout style paint",
|
|
76
78
|
...i
|
|
77
79
|
},
|
|
@@ -98,14 +100,14 @@ var _ = (e) => `Board preview: ${e}`, v = "Board preview", y = p(function({ mess
|
|
|
98
100
|
...d,
|
|
99
101
|
className: `${o[y]} ${a[y]} flex shrink-0 items-center justify-center`,
|
|
100
102
|
style: {
|
|
101
|
-
backgroundColor:
|
|
102
|
-
boxShadow:
|
|
103
|
+
backgroundColor: M,
|
|
104
|
+
boxShadow: B,
|
|
103
105
|
contain: "layout style paint",
|
|
104
106
|
...i
|
|
105
107
|
},
|
|
106
108
|
children: f !== " " && /* @__PURE__ */ h("span", {
|
|
107
109
|
className: `${s[y]} font-mono font-semibold select-none leading-none`,
|
|
108
|
-
style: { color: p ? "#eb4034" :
|
|
110
|
+
style: { color: p ? "#eb4034" : N },
|
|
109
111
|
children: f
|
|
110
112
|
})
|
|
111
113
|
}, n) : /* @__PURE__ */ g("div", {
|
|
@@ -113,8 +115,8 @@ var _ = (e) => `Board preview: ${e}`, v = "Board preview", y = p(function({ mess
|
|
|
113
115
|
...d,
|
|
114
116
|
className: `relative ${o[y]} ${a[y]} shrink-0 overflow-hidden`,
|
|
115
117
|
style: {
|
|
116
|
-
backgroundColor:
|
|
117
|
-
boxShadow:
|
|
118
|
+
backgroundColor: M,
|
|
119
|
+
boxShadow: B,
|
|
118
120
|
contain: "layout style paint",
|
|
119
121
|
...i
|
|
120
122
|
},
|
|
@@ -127,7 +129,7 @@ var _ = (e) => `Board preview: ${e}`, v = "Board preview", y = p(function({ mess
|
|
|
127
129
|
},
|
|
128
130
|
children: f !== " " && /* @__PURE__ */ h("span", {
|
|
129
131
|
className: `${s[y]} font-mono font-semibold select-none leading-none`,
|
|
130
|
-
style: { color: p ? "#eb4034" :
|
|
132
|
+
style: { color: p ? "#eb4034" : N },
|
|
131
133
|
children: f
|
|
132
134
|
})
|
|
133
135
|
}),
|
|
@@ -139,7 +141,7 @@ var _ = (e) => `Board preview: ${e}`, v = "Board preview", y = p(function({ mess
|
|
|
139
141
|
className: "absolute inset-0 pointer-events-none",
|
|
140
142
|
style: {
|
|
141
143
|
zIndex: 1,
|
|
142
|
-
background:
|
|
144
|
+
background: j ? "linear-gradient(180deg, rgba(255,255,255,0.3) 0%, transparent 50%, rgba(0,0,0,0.05) 100%)" : "linear-gradient(180deg, rgba(255,255,255,0.05) 0%, transparent 50%, rgba(0,0,0,0.2) 100%)"
|
|
143
145
|
}
|
|
144
146
|
})
|
|
145
147
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-board-display.js","names":[],"sources":["../../../src/components/board/static-board-display.tsx"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"static-board-display.js","names":[],"sources":["../../../src/components/board/static-board-display.tsx"],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
declare function Breadcrumb({ className, ...props }: Omit<React.ComponentProps<"nav">, "aria-label"> & {
|
|
3
|
+
/**
|
|
4
|
+
* Localized accessible name for the landmark (e.g. "Breadcrumb"). Required:
|
|
5
|
+
* an unnamed nav is indistinguishable from the site nav in a landmark list,
|
|
6
|
+
* and the repo does not ship English defaults for consumers to forget.
|
|
7
|
+
*/
|
|
8
|
+
"aria-label": string;
|
|
9
|
+
}): React.JSX.Element;
|
|
10
|
+
declare function BreadcrumbList({ className, ...props }: React.ComponentProps<"ol">): React.JSX.Element;
|
|
11
|
+
declare function BreadcrumbItem({ className, ...props }: React.ComponentProps<"li">): React.JSX.Element;
|
|
12
|
+
/**
|
|
13
|
+
* A crumb that navigates. `asChild` (same useRender mechanics as Badge) lets
|
|
14
|
+
* the docs site pass Docusaurus's `<Link>` — router-aware prefetch and
|
|
15
|
+
* base-path handling — while this component keeps owning the look.
|
|
16
|
+
*/
|
|
17
|
+
declare function BreadcrumbLink({ className, asChild, children, ref, ...props }: React.ComponentProps<"a"> & {
|
|
18
|
+
asChild?: boolean;
|
|
19
|
+
}): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
|
|
20
|
+
/** The trail's final entry: where you are, so it announces but never navigates. */
|
|
21
|
+
declare function BreadcrumbPage({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
|
|
22
|
+
/**
|
|
23
|
+
* Visual divider between crumbs. Children override the glyph (the docs site
|
|
24
|
+
* may want `/`); the default chevron reads as "descends into" in LTR.
|
|
25
|
+
*/
|
|
26
|
+
declare function BreadcrumbSeparator({ children, className, ...props }: React.ComponentProps<"li">): React.JSX.Element;
|
|
27
|
+
/**
|
|
28
|
+
* Collapsed-middle marker for deep trails. Static by design: expand/collapse
|
|
29
|
+
* behaviour belongs to the consumer (wrap it in a DropdownMenu trigger via
|
|
30
|
+
* that component's own mechanics); baking a disclosure in here would force a
|
|
31
|
+
* hook — and "use client" — onto every static docs page for a control most
|
|
32
|
+
* trails never show.
|
|
33
|
+
*/
|
|
34
|
+
declare function BreadcrumbEllipsis({ label, className, ...props }: Omit<React.ComponentProps<"span">, "children"> & {
|
|
35
|
+
/**
|
|
36
|
+
* Localized sr-only announcement (e.g. "More pages"). Required, and NOT
|
|
37
|
+
* `aria-hidden` on the wrapper like shadcn's version — hiding the whole
|
|
38
|
+
* span silences the sr-only text inside it, leaving AT users with no hint
|
|
39
|
+
* that levels were elided. Only the glyph is hidden.
|
|
40
|
+
*/
|
|
41
|
+
label: string;
|
|
42
|
+
}): React.JSX.Element;
|
|
43
|
+
export { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.js";
|
|
2
|
+
import { ChevronRight as t, MoreHorizontal as n } from "lucide-react";
|
|
3
|
+
import * as r from "react";
|
|
4
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
+
import { useRender as o } from "@base-ui/react/use-render";
|
|
6
|
+
//#region src/components/chrome/breadcrumb.tsx
|
|
7
|
+
function s({ className: e, ...t }) {
|
|
8
|
+
return /* @__PURE__ */ i("nav", {
|
|
9
|
+
"data-slot": "breadcrumb",
|
|
10
|
+
className: e,
|
|
11
|
+
...t
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function c({ className: t, ...n }) {
|
|
15
|
+
return /* @__PURE__ */ i("ol", {
|
|
16
|
+
"data-slot": "breadcrumb-list",
|
|
17
|
+
className: e("text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5", t),
|
|
18
|
+
...n
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function l({ className: t, ...n }) {
|
|
22
|
+
return /* @__PURE__ */ i("li", {
|
|
23
|
+
"data-slot": "breadcrumb-item",
|
|
24
|
+
className: e("inline-flex items-center gap-1.5", t),
|
|
25
|
+
...n
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function u({ className: t, asChild: n = !1, children: i, ref: a, ...s }) {
|
|
29
|
+
return o({
|
|
30
|
+
defaultTagName: "a",
|
|
31
|
+
ref: a,
|
|
32
|
+
render: n ? r.Children.only(i) : void 0,
|
|
33
|
+
props: {
|
|
34
|
+
"data-slot": "breadcrumb-link",
|
|
35
|
+
className: e("focus-ring rounded-sm transition-colors hover:text-foreground", t),
|
|
36
|
+
...n ? {} : { children: i },
|
|
37
|
+
...s
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function d({ className: t, ...n }) {
|
|
42
|
+
return /* @__PURE__ */ i("span", {
|
|
43
|
+
"data-slot": "breadcrumb-page",
|
|
44
|
+
"aria-current": "page",
|
|
45
|
+
className: e("text-foreground font-normal", t),
|
|
46
|
+
...n
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function f({ children: n, className: r, ...a }) {
|
|
50
|
+
return /* @__PURE__ */ i("li", {
|
|
51
|
+
"data-slot": "breadcrumb-separator",
|
|
52
|
+
role: "presentation",
|
|
53
|
+
"aria-hidden": "true",
|
|
54
|
+
className: e("[&>svg]:size-3.5", r),
|
|
55
|
+
...a,
|
|
56
|
+
children: n ?? /* @__PURE__ */ i(t, {})
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function p({ label: t, className: r, ...o }) {
|
|
60
|
+
return /* @__PURE__ */ a("span", {
|
|
61
|
+
"data-slot": "breadcrumb-ellipsis",
|
|
62
|
+
className: e("flex items-center justify-center", r),
|
|
63
|
+
...o,
|
|
64
|
+
children: [/* @__PURE__ */ i(n, {
|
|
65
|
+
className: "size-4",
|
|
66
|
+
"aria-hidden": "true"
|
|
67
|
+
}), /* @__PURE__ */ i("span", {
|
|
68
|
+
className: "sr-only",
|
|
69
|
+
children: t
|
|
70
|
+
})]
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { s as Breadcrumb, p as BreadcrumbEllipsis, l as BreadcrumbItem, u as BreadcrumbLink, c as BreadcrumbList, d as BreadcrumbPage, f as BreadcrumbSeparator };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=breadcrumb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumb.js","names":[],"sources":["../../../src/components/chrome/breadcrumb.tsx"],"mappings":";;;;;;AAoCA,SAAS,EAAW,EAClB,cACA,GAAG,KAQF;CACD,OAAO,kBAAC,OAAD;EAAK,aAAU;EAAwB;EAAW,GAAI;CAAQ,CAAA;AACvE;AAEA,SAAS,EAAe,EAAE,cAAW,GAAG,KAAqC;CAC3E,OACE,kBAAC,MAAD;EACE,aAAU;EACV,WAAW,EAGT,4FACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAe,EAAE,cAAW,GAAG,KAAqC;CAC3E,OAAO,kBAAC,MAAD;EAAI,aAAU;EAAkB,WAAW,EAAG,oCAAoC,CAAS;EAAG,GAAI;CAAQ,CAAA;AACnH;AAOA,SAAS,EAAe,EACtB,cACA,aAAU,IACV,aACA,QACA,GAAG,KACiD;CACpD,OAAO,EAAU;EACf,gBAAgB;EACX;EACL,QAAQ,IAAW,EAAM,SAAS,KAAK,CAAQ,IAA2B,KAAA;EAC1E,OAAO;GACL,aAAa;GAOb,WAAW,EAAG,iEAAiE,CAAS;GACxF,GAAI,IAAU,CAAC,IAAI,EAAE,YAAS;GAC9B,GAAG;EACL;CACF,CAAC;AACH;AAGA,SAAS,EAAe,EAAE,cAAW,GAAG,KAAuC;CAC7E,OACE,kBAAC,QAAD;EACE,aAAU;EACV,gBAAa;EACb,WAAW,EAAG,+BAA+B,CAAS;EACtD,GAAI;CACL,CAAA;AAEL;AAMA,SAAS,EAAoB,EAAE,aAAU,cAAW,GAAG,KAAqC;CAC1F,OAKE,kBAAC,MAAD;EACE,aAAU;EACV,MAAK;EACL,eAAY;EACZ,WAAW,EAAG,oBAAoB,CAAS;EAC3C,GAAI;EAEH,UAAA,KAAY,kBAAC,GAAD,CAAe,CAAA;CAC1B,CAAA;AAER;AASA,SAAS,EAAmB,EAC1B,UACA,cACA,GAAG,KASF;CACD,OACE,kBAAC,QAAD;EAAM,aAAU;EAAsB,WAAW,EAAG,oCAAoC,CAAS;EAAG,GAAI;EAAxG,UAAA,CACE,kBAAC,GAAD;GAAgB,WAAU;GAAS,eAAY;EAAQ,CAAA,GACvD,kBAAC,QAAD;GAAM,WAAU;GAAW,UAAA;EAAY,CAAA,CACnC;;AAEV"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* MediaFrame — a framed figure for screenshots and other media.
|
|
4
|
+
*
|
|
5
|
+
* Promoted from the docs site's BoardScreenshot/ThemedScreenshot pair
|
|
6
|
+
* (issue #229 item 4), which shipped two structurally identical CSS modules.
|
|
7
|
+
* The frame is the shared shell: media on a card surface with a hairline
|
|
8
|
+
* border, plus an optional bar for a caption or a toolbar (the docs put a
|
|
9
|
+
* black/white toggle there). The bar renders whatever the consumer passes —
|
|
10
|
+
* the toggle itself belongs to ToggleGroup (#218), not here.
|
|
11
|
+
*
|
|
12
|
+
* Zooming is composition, not a built-in: wrap `MediaFrameMedia` in a
|
|
13
|
+
* `LightboxTrigger asChild` (see overlays/lightbox.tsx), or pass `onZoom`
|
|
14
|
+
* for a hand-rolled handler. Either way the media becomes a real `<button>`,
|
|
15
|
+
* so the affordance is keyboard-operable for free.
|
|
16
|
+
*/
|
|
17
|
+
declare function MediaFrame({ className, ...props }: React.ComponentProps<"figure">): React.JSX.Element;
|
|
18
|
+
interface MediaFrameMediaProps extends React.ComponentProps<"button"> {
|
|
19
|
+
/**
|
|
20
|
+
* Zoom-affordance handler. Setting it (or `onClick`, which a
|
|
21
|
+
* `LightboxTrigger asChild` injects) switches the media well from a plain
|
|
22
|
+
* `<div>` to a `<button>` with a zoom cursor and focus ring.
|
|
23
|
+
*/
|
|
24
|
+
onZoom?: React.MouseEventHandler<HTMLButtonElement>;
|
|
25
|
+
}
|
|
26
|
+
declare function MediaFrameMedia({ className, onZoom, onClick, type, children, ...props }: MediaFrameMediaProps): React.JSX.Element;
|
|
27
|
+
declare function MediaFrameBar({ className, ...props }: React.ComponentProps<"figcaption">): React.JSX.Element;
|
|
28
|
+
export { MediaFrame, MediaFrameBar, MediaFrameMedia };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/containment/media-frame.tsx
|
|
5
|
+
function n({ className: n, ...r }) {
|
|
6
|
+
return /* @__PURE__ */ t("figure", {
|
|
7
|
+
"data-slot": "media-frame",
|
|
8
|
+
className: e("flex flex-col overflow-hidden rounded-xl border bg-card text-card-foreground shadow-card", n),
|
|
9
|
+
...r
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
var r = "block w-full [&_img]:block [&_img]:h-auto [&_img]:w-full [&_video]:block [&_video]:h-auto [&_video]:w-full";
|
|
13
|
+
function i({ className: n, onZoom: i, onClick: a, type: o, children: s, ...c }) {
|
|
14
|
+
return i == null && a == null ? /* @__PURE__ */ t("div", {
|
|
15
|
+
"data-slot": "media-frame-media",
|
|
16
|
+
className: e(r, n),
|
|
17
|
+
...c,
|
|
18
|
+
children: s
|
|
19
|
+
}) : /* @__PURE__ */ t("button", {
|
|
20
|
+
type: o ?? "button",
|
|
21
|
+
"data-slot": "media-frame-media",
|
|
22
|
+
className: e(r, "cursor-zoom-in outline-none focus-visible:ring-[3px] focus-visible:ring-inset focus-visible:ring-ring/50", n),
|
|
23
|
+
onClick: (e) => {
|
|
24
|
+
a?.(e), i?.(e);
|
|
25
|
+
},
|
|
26
|
+
...c,
|
|
27
|
+
children: s
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function a({ className: n, ...r }) {
|
|
31
|
+
return /* @__PURE__ */ t("figcaption", {
|
|
32
|
+
"data-slot": "media-frame-bar",
|
|
33
|
+
className: e("flex flex-wrap items-center justify-center gap-2 border-t px-3 py-2 text-sm text-muted-foreground", n),
|
|
34
|
+
...r
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { n as MediaFrame, a as MediaFrameBar, i as MediaFrameMedia };
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=media-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-frame.js","names":[],"sources":["../../../src/components/containment/media-frame.tsx"],"mappings":";;;;AAoBA,SAAS,EAAW,EAAE,cAAW,GAAG,KAAyC;CAC3E,OACE,kBAAC,UAAD;EACE,aAAU;EAKV,WAAW,EACT,4FACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAMA,IAAM,IACJ;AAWF,SAAS,EAAgB,EAAE,cAAW,WAAQ,YAAS,SAAM,aAAU,GAAG,KAA+B;CA8BvG,OAtBoB,KAAU,QAAQ,KAAW,OAI7C,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,GAAkB,CAAS;EACzC,GAAK;EAEJ;CACE,CAAA,IAaP,kBAAC,UAAD;EAEE,MAAM,KAAQ;EACd,aAAU;EAIV,WAAW,EACT,GACA,4GACA,CACF;EACA,UArB6D,MAAU;GAKzE,AADA,IAAU,CAAK,GACf,IAAS,CAAK;EAChB;EAgBI,GAAI;EAEH;CACK,CAAA;AAEZ;AAEA,SAAS,EAAc,EAAE,cAAW,GAAG,KAA6C;CAClF,OACE,kBAAC,cAAD;EACE,aAAU;EAMV,WAAW,EACT,qGACA,CACF;EACA,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Ranked horizontal bar list — label / track / fill / value rows. A thin
|
|
4
|
+
* cousin of a meter, not a chart library: no axes, no legend, no scales,
|
|
5
|
+
* just rows sorted by whoever calls it. Promoted from the docs site's
|
|
6
|
+
* "Popularity ranking" (issue #229), which hand-mixed a brand fill on an
|
|
7
|
+
* emphasis track once per page.
|
|
8
|
+
*
|
|
9
|
+
* This starts the `data` family: quantitative READOUTS (BarList, StatStrip).
|
|
10
|
+
* They are not `feedback` (no system status), not `containment` (no
|
|
11
|
+
* surface/box), not `typography` (the number is the point, not the prose) —
|
|
12
|
+
* they exist to show measured values, which no existing family owns.
|
|
13
|
+
*
|
|
14
|
+
* FILL COLOR — measured, not inherited (SC 1.4.11 wants 3:1 for meaningful
|
|
15
|
+
* graphics). The docs site used its brand orange; in this palette that forks
|
|
16
|
+
* into two tokens and only one of them survives measurement:
|
|
17
|
+
*
|
|
18
|
+
* vs light bg vs light muted vs dark bg vs dark muted
|
|
19
|
+
* --brand (hue-orange) 5.09:1 4.65:1 9.63:1 8.11:1
|
|
20
|
+
* --primary (#f5a623 tile) 1.83:1 1.67:1 9.77:1 8.23:1
|
|
21
|
+
*
|
|
22
|
+
* --primary is the literal tile and theme.css already rules it "legal as a
|
|
23
|
+
* field, illegal as a link" at 1.83:1 on a light page — a fill whose painted
|
|
24
|
+
* edge IS the datum is closer to a link than to a button face, so the tile
|
|
25
|
+
* fails here. --brand is the same hue at the ink plateau and clears 3:1
|
|
26
|
+
* against both the track and every surface in both themes, so a bar stays
|
|
27
|
+
* meaningful even before the reader finds the number. Strictly the value
|
|
28
|
+
* text makes the graphic redundant (see below) and 1.4.11 would exempt it,
|
|
29
|
+
* but passing outright beats litigating the exemption.
|
|
30
|
+
*
|
|
31
|
+
* The TRACK is --muted (1.09:1 light / 1.19:1 dark vs the page) — that low
|
|
32
|
+
* ratio is deliberate and mirrors the --border rationale in theme.css: the
|
|
33
|
+
* track is decoration marking where 100% would land, the fill and the text
|
|
34
|
+
* carry the information, so 1.4.11 does not apply to it.
|
|
35
|
+
*
|
|
36
|
+
* SEMANTICS — a plain list, no role="meter". Each row already renders its
|
|
37
|
+
* value as literal text beside the bar, so assistive tech hears
|
|
38
|
+
* "label, 943" with zero extra wiring; a meter role would announce the same
|
|
39
|
+
* number a second time and demand aria-valuemin/max/now plumbing to say
|
|
40
|
+
* nothing new. The track and fill are aria-hidden because they are that
|
|
41
|
+
* redundant graphic. role="list" is set explicitly: `list-none` (needed
|
|
42
|
+
* because rows are grid cells, not bullets) makes Safari/VoiceOver drop the
|
|
43
|
+
* implicit list role.
|
|
44
|
+
*/
|
|
45
|
+
export interface BarListItem {
|
|
46
|
+
key: string;
|
|
47
|
+
/** Row label. Any ReactNode — pass an anchor/Link element directly, or use `renderLabel`. */
|
|
48
|
+
label: React.ReactNode;
|
|
49
|
+
value: number;
|
|
50
|
+
/**
|
|
51
|
+
* Renders the label cell — inject your router's Link here, same contract
|
|
52
|
+
* as PluginCard's `renderLink`/Sidebar's `renderLink` (the house pattern
|
|
53
|
+
* for router-agnostic links). `className` carries the truncation and type
|
|
54
|
+
* styles and MUST land on the returned element, so the ellipsis clips the
|
|
55
|
+
* link itself rather than a wrapper. There is deliberately no `href`
|
|
56
|
+
* shortcut: a bare string href renders a plain <a> that full-page-reloads
|
|
57
|
+
* inside SPA consumers, which is exactly the trap `renderLink` exists to
|
|
58
|
+
* avoid — same reasoning as PluginCard.
|
|
59
|
+
*/
|
|
60
|
+
renderLabel?: (props: {
|
|
61
|
+
className: string;
|
|
62
|
+
children: React.ReactNode;
|
|
63
|
+
}) => React.ReactNode;
|
|
64
|
+
}
|
|
65
|
+
export interface BarListProps extends React.ComponentProps<"ul"> {
|
|
66
|
+
items: BarListItem[];
|
|
67
|
+
/**
|
|
68
|
+
* The value that fills the track completely. Defaults to the largest item
|
|
69
|
+
* value — the natural scale for a ranking, where the leader spans full
|
|
70
|
+
* width. Pass explicitly when rows share an external scale (a total, a
|
|
71
|
+
* quota) so bars stay comparable across lists.
|
|
72
|
+
*/
|
|
73
|
+
max?: number;
|
|
74
|
+
/**
|
|
75
|
+
* Formats the visible value. Defaults to `toLocaleString()` — what the
|
|
76
|
+
* docs ranking shipped — so thousands read as "5,612" not "5612".
|
|
77
|
+
*/
|
|
78
|
+
formatValue?: (value: number) => string;
|
|
79
|
+
}
|
|
80
|
+
declare function BarList({ items, max, formatValue, className, ...props }: BarListProps): React.JSX.Element;
|
|
81
|
+
export { BarList };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.js";
|
|
2
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
|
+
//#region src/components/data/bar-list.tsx
|
|
4
|
+
var r = "min-w-0 truncate text-sm";
|
|
5
|
+
function i(e, t) {
|
|
6
|
+
return t <= 0 ? 0 : Math.min(100, Math.max(0, e / t * 100));
|
|
7
|
+
}
|
|
8
|
+
function a({ items: a, max: o, formatValue: s = (e) => e.toLocaleString(), className: c, ...l }) {
|
|
9
|
+
let u = o ?? Math.max(0, ...a.map((e) => e.value));
|
|
10
|
+
return /* @__PURE__ */ t("ul", {
|
|
11
|
+
role: "list",
|
|
12
|
+
"data-slot": "bar-list",
|
|
13
|
+
className: e("grid w-full list-none grid-cols-[fit-content(40%)_minmax(0,1fr)_max-content] items-center gap-x-3 gap-y-2 p-0", c),
|
|
14
|
+
...l,
|
|
15
|
+
children: a.map((e) => {
|
|
16
|
+
let a = i(e.value, u);
|
|
17
|
+
return /* @__PURE__ */ n("li", {
|
|
18
|
+
"data-slot": "bar-list-item",
|
|
19
|
+
className: "col-span-3 grid grid-cols-subgrid items-center",
|
|
20
|
+
children: [
|
|
21
|
+
e.renderLabel ? e.renderLabel({
|
|
22
|
+
className: r,
|
|
23
|
+
children: e.label
|
|
24
|
+
}) : /* @__PURE__ */ t("span", {
|
|
25
|
+
className: r,
|
|
26
|
+
children: e.label
|
|
27
|
+
}),
|
|
28
|
+
/* @__PURE__ */ t("div", {
|
|
29
|
+
"data-slot": "bar-list-track",
|
|
30
|
+
"aria-hidden": "true",
|
|
31
|
+
className: "h-4.5 overflow-hidden rounded-sm bg-muted",
|
|
32
|
+
children: /* @__PURE__ */ t("div", {
|
|
33
|
+
"data-slot": "bar-list-fill",
|
|
34
|
+
className: "h-full rounded-sm bg-brand",
|
|
35
|
+
style: a > 0 ? {
|
|
36
|
+
width: `${a}%`,
|
|
37
|
+
minWidth: "2px"
|
|
38
|
+
} : { width: 0 }
|
|
39
|
+
})
|
|
40
|
+
}),
|
|
41
|
+
/* @__PURE__ */ t("span", {
|
|
42
|
+
"data-slot": "bar-list-value",
|
|
43
|
+
className: "text-right text-sm tabular-nums text-muted-foreground",
|
|
44
|
+
children: s(e.value)
|
|
45
|
+
})
|
|
46
|
+
]
|
|
47
|
+
}, e.key);
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { a as BarList };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=bar-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bar-list.js","names":[],"sources":["../../../src/components/data/bar-list.tsx"],"mappings":";;;AAkFA,IAAM,IAAc;AASpB,SAAS,EAAY,GAAe,GAAqB;CAEvD,OADI,KAAO,IAAU,IACd,KAAK,IAAI,KAAK,KAAK,IAAI,GAAI,IAAQ,IAAO,GAAG,CAAC;AACvD;AAEA,SAAS,EAAQ,EAAE,UAAO,QAAK,kBAAe,MAAM,EAAE,eAAe,GAAG,cAAW,GAAG,KAAuB;CAG3G,IAAM,IAAQ,KAAO,KAAK,IAAI,GAAG,GAAG,EAAM,KAAK,MAAS,EAAK,KAAK,CAAC;CACnE,OAeE,kBAAC,MAAD;EACE,MAAK;EACL,aAAU;EACV,WAAW,EACT,iHACA,CACF;EACA,GAAI;EAEH,UAAA,EAAM,KAAK,MAAS;GACnB,IAAM,IAAM,EAAY,EAAK,OAAO,CAAK;GACzC,OACE,kBAAC,MAAD;IAAmB,aAAU;IAAgB,WAAU;IAAvD,UAAA;KACG,EAAK,cACJ,EAAK,YAAY;MAAE,WAAW;MAAa,UAAU,EAAK;KAAM,CAAC,IAEjE,kBAAC,QAAD;MAAM,WAAW;MAAc,UAAA,EAAK;KAAY,CAAA;KAElD,kBAAC,OAAD;MAAK,aAAU;MAAiB,eAAY;MAAO,WAAU;MAC3D,UAAA,kBAAC,OAAD;OACE,aAAU;OACV,WAAU;OAIV,OAAO,IAAM,IAAI;QAAE,OAAO,GAAG,EAAI;QAAI,UAAU;OAAM,IAAI,EAAE,OAAO,EAAE;MACrE,CAAA;KACE,CAAA;KACL,kBAAC,QAAD;MAAM,aAAU;MAAiB,WAAU;MACxC,UAAA,EAAY,EAAK,KAAK;KACnB,CAAA;IACJ;GAnBK,GAAA,EAAK,GAmBV;EAER,CAAC;CACC,CAAA;AAER"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Chip — the OPERABLE counterpart to {@link Badge} (#229).
|
|
5
|
+
*
|
|
6
|
+
* Badge is deliberately non-interactive content, which is why its comments
|
|
7
|
+
* wave off SC 1.4.11. Chip is a link or button wearing the same outline
|
|
8
|
+
* vocabulary, so 1.4.11 (3:1 non-text contrast for component/state visuals)
|
|
9
|
+
* DOES reach it, and every state below is measured. Selection is explicitly
|
|
10
|
+
* out of scope — a Chip never carries `aria-pressed`; that job belongs to
|
|
11
|
+
* ToggleGroup (#218).
|
|
12
|
+
*/
|
|
13
|
+
declare const chipVariants: (props?: ({
|
|
14
|
+
mono?: boolean | null | undefined;
|
|
15
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
16
|
+
/**
|
|
17
|
+
* A link/button-shaped tag: archived-version links, blog tags.
|
|
18
|
+
*
|
|
19
|
+
* The primary usage is `asChild` around a real anchor —
|
|
20
|
+
* `<Chip asChild><a href=…>5.11</a></Chip>` — so navigation keeps native
|
|
21
|
+
* link semantics. Without `asChild` it renders a real `<button>`, never a
|
|
22
|
+
* styled span: a Chip is operable by definition, and a span default would
|
|
23
|
+
* hand every bare `<Chip onClick>` call site a focus/keyboard/AT bug.
|
|
24
|
+
*/
|
|
25
|
+
declare function Chip({ className, mono, asChild, children, ref, ...props }: React.ComponentProps<"button"> & VariantProps<typeof chipVariants> & {
|
|
26
|
+
asChild?: boolean;
|
|
27
|
+
}): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
|
|
28
|
+
export { Chip, chipVariants };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.js";
|
|
2
|
+
import * as t from "react";
|
|
3
|
+
import { cva as n } from "class-variance-authority";
|
|
4
|
+
import { useRender as r } from "@base-ui/react/use-render";
|
|
5
|
+
//#region src/components/feedback/chip.tsx
|
|
6
|
+
var i = n("inline-flex items-center justify-center rounded-full border px-2.5 py-1 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none text-foreground no-underline hover:bg-accent hover:text-accent-foreground hover:border-brand active:bg-secondary focus-ring transition-[color,background-color,border-color,box-shadow] duration-control disabled:pointer-events-none disabled:opacity-50", {
|
|
7
|
+
variants: { mono: {
|
|
8
|
+
true: "font-mono",
|
|
9
|
+
false: ""
|
|
10
|
+
} },
|
|
11
|
+
defaultVariants: { mono: !1 }
|
|
12
|
+
});
|
|
13
|
+
function a({ className: n, mono: a, asChild: o = !1, children: s, ref: c, ...l }) {
|
|
14
|
+
return r({
|
|
15
|
+
defaultTagName: "button",
|
|
16
|
+
ref: c,
|
|
17
|
+
render: o ? t.Children.only(s) : void 0,
|
|
18
|
+
props: {
|
|
19
|
+
"data-slot": "chip",
|
|
20
|
+
className: e(i({ mono: a }), n),
|
|
21
|
+
...o ? {} : { children: s },
|
|
22
|
+
...l
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { a as Chip, i as chipVariants };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=chip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chip.js","names":[],"sources":["../../../src/components/feedback/chip.tsx"],"mappings":";;;;;AAgBA,IAAM,IAAe,EA0CnB,2aACA;CACE,UAAU,EAMR,MAAM;EACJ,MAAM;EACN,OAAO;CACT,EACF;CACA,iBAAiB,EACf,MAAM,GACR;AACF,CACF;AAWA,SAAS,EAAK,EACZ,cACA,SACA,aAAU,IACV,aACA,QACA,GAAG,KAC0F;CAC7F,OAAO,EAAU;EACf,gBAAgB;EACX;EACL,QAAQ,IAAW,EAAM,SAAS,KAAK,CAAQ,IAA2B,KAAA;EAC1E,OAAO;GACL,aAAa;GACb,WAAW,EAAG,EAAa,EAAE,QAAK,CAAC,GAAG,CAAS;GAC/C,GAAI,IAAU,CAAC,IAAI,EAAE,YAAS;GAC9B,GAAG;EACL;CACF,CAAC;AACH"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
|
|
2
|
+
import { ToggleGroup as ToggleGroupPrimitive } from "@base-ui/react/toggle-group";
|
|
3
|
+
import { type VariantProps } from "class-variance-authority";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import type { SelectionGroupNameProps } from "./toggle-card";
|
|
6
|
+
declare const toggleVariants: (props?: ({
|
|
7
|
+
variant?: "default" | "outline" | null | undefined;
|
|
8
|
+
size?: "default" | "icon" | "sm" | "lg" | "icon-sm" | null | undefined;
|
|
9
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
10
|
+
export type ToggleProps = Omit<React.ComponentProps<typeof TogglePrimitive>, "onPressedChange"> & VariantProps<typeof toggleVariants> & {
|
|
11
|
+
/**
|
|
12
|
+
* Fired with the next pressed state. Base UI passes `(pressed,
|
|
13
|
+
* eventDetails)`; the extra argument is dropped here for the same
|
|
14
|
+
* reason toggle-card.tsx drops it — it leaks into
|
|
15
|
+
* `onPressedChange={setState}` call sites.
|
|
16
|
+
*/
|
|
17
|
+
onPressedChange?: (pressed: boolean) => void;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* A two-state button — `aria-pressed`, pressed fill and focus ring included,
|
|
21
|
+
* so none of them can be forgotten at a call site (#218).
|
|
22
|
+
*
|
|
23
|
+
* Standalone it owns its pressed state (`pressed`/`defaultPressed`); inside a
|
|
24
|
+
* {@link ToggleGroup} it is driven by the group's `value` and MUST carry a
|
|
25
|
+
* `value` prop of its own (Base UI warns in dev if it doesn't).
|
|
26
|
+
*/
|
|
27
|
+
declare function Toggle({ className, variant, size, onPressedChange, ...props }: ToggleProps): React.JSX.Element;
|
|
28
|
+
declare const toggleGroupVariants: (props?: ({
|
|
29
|
+
segmented?: boolean | null | undefined;
|
|
30
|
+
orientation?: "horizontal" | "vertical" | null | undefined;
|
|
31
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
32
|
+
export type ToggleGroupProps = Omit<React.ComponentProps<typeof ToggleGroupPrimitive>, "onValueChange"> & SelectionGroupNameProps & VariantProps<typeof toggleGroupVariants> & {
|
|
33
|
+
/** Fired with the values of all pressed items (eventDetails dropped). */
|
|
34
|
+
onValueChange?: (groupValue: string[]) => void;
|
|
35
|
+
/**
|
|
36
|
+
* Joined toolbar look: one shared border, hairline dividers, items
|
|
37
|
+
* stripped of their own chrome. Off, items sit loose with a small gap.
|
|
38
|
+
*/
|
|
39
|
+
segmented?: boolean;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Shared state for a set of {@link Toggle}s — one tab stop, roving focus.
|
|
43
|
+
*
|
|
44
|
+
* The value model is Base UI's: always an array of the pressed items'
|
|
45
|
+
* values, single-select by default (`multiple` opts into any-of-N). The
|
|
46
|
+
* issue sketched Radix's `type="single" | "multiple"` with a
|
|
47
|
+
* `string | string[]` value instead; that union forks every controlled call
|
|
48
|
+
* site into runtime narrowing, and the empty single-selection ("none of
|
|
49
|
+
* these") falls out of the array shape for free, so Base UI's model stands.
|
|
50
|
+
*
|
|
51
|
+
* Single-select here CAN be emptied by pressing the pressed item again. If
|
|
52
|
+
* your group must always have a selection, that is a radiogroup — use
|
|
53
|
+
* SegmentedControl (toggle-card.tsx).
|
|
54
|
+
*/
|
|
55
|
+
declare function ToggleGroup({ className, segmented, orientation, onValueChange, ...props }: ToggleGroupProps): React.JSX.Element;
|
|
56
|
+
export { Toggle, ToggleGroup, toggleGroupVariants, toggleVariants };
|