@xeonr/platform-ui 1.6.2 → 1.7.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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/kit/Anchored.d.ts.map +1 -1
- package/dist/kit/Anchored.js +4 -1
- package/dist/kit/Anchored.js.map +1 -1
- package/dist/kit/Badge.d.ts +23 -0
- package/dist/kit/Badge.d.ts.map +1 -1
- package/dist/kit/Badge.js +53 -0
- package/dist/kit/Badge.js.map +1 -1
- package/dist/kit/Button.d.ts +13 -0
- package/dist/kit/Button.d.ts.map +1 -1
- package/dist/kit/Button.js +7 -3
- package/dist/kit/Button.js.map +1 -1
- package/dist/kit/Checkbox.d.ts +34 -0
- package/dist/kit/Checkbox.d.ts.map +1 -0
- package/dist/kit/Checkbox.js +52 -0
- package/dist/kit/Checkbox.js.map +1 -0
- package/dist/kit/Color.d.ts +8 -1
- package/dist/kit/Color.d.ts.map +1 -1
- package/dist/kit/Color.js +14 -5
- package/dist/kit/Color.js.map +1 -1
- package/dist/kit/Controls.d.ts +2 -33
- package/dist/kit/Controls.d.ts.map +1 -1
- package/dist/kit/Controls.js +3 -44
- package/dist/kit/Controls.js.map +1 -1
- package/dist/kit/DataGrid.d.ts +42 -2
- package/dist/kit/DataGrid.d.ts.map +1 -1
- package/dist/kit/DataGrid.js +98 -7
- package/dist/kit/DataGrid.js.map +1 -1
- package/dist/kit/Form.d.ts +7 -1
- package/dist/kit/Form.d.ts.map +1 -1
- package/dist/kit/Form.js +7 -4
- package/dist/kit/Form.js.map +1 -1
- package/dist/kit/Menu.d.ts +13 -2
- package/dist/kit/Menu.d.ts.map +1 -1
- package/dist/kit/Menu.js +32 -6
- package/dist/kit/Menu.js.map +1 -1
- package/dist/kit/Spectrum.d.ts +40 -0
- package/dist/kit/Spectrum.d.ts.map +1 -0
- package/dist/kit/Spectrum.js +235 -0
- package/dist/kit/Spectrum.js.map +1 -0
- package/dist/kit/SplitButton.d.ts +43 -0
- package/dist/kit/SplitButton.d.ts.map +1 -0
- package/dist/kit/SplitButton.js +34 -0
- package/dist/kit/SplitButton.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +21 -2
- package/dist/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/theme/ThemeProvider.js +21 -5
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/package.json +2 -2
package/dist/kit/Menu.d.ts
CHANGED
|
@@ -31,7 +31,12 @@ export declare function MenuItem({ icon, to, href, target, rel, external, downlo
|
|
|
31
31
|
meta?: ReactNode | undefined;
|
|
32
32
|
onClick?: (() => void) | undefined;
|
|
33
33
|
danger?: boolean | undefined;
|
|
34
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Off: drawn dimmed, announced as disabled, skipped by the arrow keys, and a
|
|
36
|
+
* click on it does nothing (the menu stays open). A string is the reason,
|
|
37
|
+
* shown as a tooltip on the item — "Only one mipmap level" (1.7).
|
|
38
|
+
*/
|
|
39
|
+
disabled?: boolean | string | undefined;
|
|
35
40
|
children: ReactNode;
|
|
36
41
|
}): import("react").JSX.Element;
|
|
37
42
|
export interface MenuProps {
|
|
@@ -55,6 +60,12 @@ export interface MenuProps {
|
|
|
55
60
|
label?: string | undefined;
|
|
56
61
|
/** told whenever it opens or closes — a rail that stays expanded while its menu is open */
|
|
57
62
|
onOpenChange?: ((open: boolean) => void) | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* The menu cannot open: a click or ArrowDown on the trigger does nothing,
|
|
65
|
+
* and an open menu closes (1.7). Disable the trigger itself as well — this
|
|
66
|
+
* is what stops the menu, that is what shows it.
|
|
67
|
+
*/
|
|
68
|
+
disabled?: boolean | undefined;
|
|
58
69
|
}
|
|
59
70
|
/**
|
|
60
71
|
* Menu: click-to-open popover anchored to its trigger. It portals to
|
|
@@ -65,7 +76,7 @@ export interface MenuProps {
|
|
|
65
76
|
* one outcome" is always the right behaviour. Arrow keys, Home and End move
|
|
66
77
|
* between items.
|
|
67
78
|
*/
|
|
68
|
-
export declare function Menu({ trigger, children, align, side, width, label, onOpenChange }: MenuProps): import("react").JSX.Element;
|
|
79
|
+
export declare function Menu({ trigger, children, align, side, width, label, onOpenChange, disabled }: MenuProps): import("react").JSX.Element;
|
|
69
80
|
/**
|
|
70
81
|
* OverflowMenu: the ⋯ button on a row or a card and the menu it opens.
|
|
71
82
|
*
|
package/dist/kit/Menu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/kit/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAI1H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAY,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAkBjF,eAAO,MAAM,SAAS;;WAQrB,CAAC;AAEF,eAAO,MAAM,WAAW;;WAGvB,CAAC;AA+CF,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IACvH,2FAA2F;IAC3F,IAAI,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,cAAc,GAAG,SAAS,CAAC;IAC7D,yBAAyB;IACzB,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/kit/Menu.tsx"],"names":[],"mappings":"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"}
|
package/dist/kit/Menu.js
CHANGED
|
@@ -50,7 +50,7 @@ const RowButton = styled.button `
|
|
|
50
50
|
${rowCss}
|
|
51
51
|
color: ${(p) => (p.$danger ? v.danger : v.muted)};
|
|
52
52
|
&:hover { background: ${(p) => (p.$danger ? v.dangerBg : v.hover)}; color: ${(p) => (p.$danger ? v.danger : v.text)}; }
|
|
53
|
-
&:disabled { opacity: 0.45; cursor: not-allowed; background: none; }
|
|
53
|
+
&:disabled, &[aria-disabled="true"] { opacity: 0.45; cursor: not-allowed; background: none; }
|
|
54
54
|
`;
|
|
55
55
|
const RowLink = styled(Link) `
|
|
56
56
|
${rowCss}
|
|
@@ -81,9 +81,20 @@ export function MenuItem({ icon, to, href, target, rel, external, download, meta
|
|
|
81
81
|
? _jsx(Icon, { name: icon })
|
|
82
82
|
: _jsx(FontAwesomeIcon, { icon: icon, style: { width: "1em", height: "1em" } });
|
|
83
83
|
const inner = _jsxs(_Fragment, { children: [glyph, children, trail] });
|
|
84
|
+
const why = typeof disabled === "string" && disabled ? disabled : undefined;
|
|
85
|
+
// swallowed, and kept from the panel, whose own click would close the menu
|
|
86
|
+
const swallow = (e) => { e.preventDefault(); e.stopPropagation(); };
|
|
84
87
|
if ((to || href) && disabled) {
|
|
85
88
|
// A link has no :disabled; off, it is a link to nowhere that says so.
|
|
86
|
-
|
|
89
|
+
const off = _jsx(RowAnchor, { role: "menuitem", "aria-disabled": "true", "aria-description": why, tabIndex: -1, "$danger": danger, onClick: swallow, children: inner });
|
|
90
|
+
return why ? _jsx(Tooltip, { label: why, side: "right", style: REASON_ANCHOR, children: off }) : off;
|
|
91
|
+
}
|
|
92
|
+
if (why) {
|
|
93
|
+
// A native disabled button gets no pointer events, so its tooltip could
|
|
94
|
+
// never open: with a reason it is aria-disabled instead, out of the tab
|
|
95
|
+
// order and the arrow keys, and its click goes nowhere. The reason is also
|
|
96
|
+
// its aria-description, for a screen reader that never hovers.
|
|
97
|
+
return (_jsx(Tooltip, { label: why, side: "right", style: REASON_ANCHOR, children: _jsx(RowButton, { role: "menuitem", type: "button", "aria-disabled": "true", "aria-description": why, tabIndex: -1, "$danger": danger, onClick: swallow, children: inner }) }));
|
|
87
98
|
}
|
|
88
99
|
if (to) {
|
|
89
100
|
return (_jsx(RowLink, { role: "menuitem", to: to, "$danger": danger, target: tgt, rel: linkRel, onClick: onClick, children: inner }));
|
|
@@ -91,8 +102,10 @@ export function MenuItem({ icon, to, href, target, rel, external, download, meta
|
|
|
91
102
|
if (href) {
|
|
92
103
|
return (_jsx(RowAnchor, { role: "menuitem", href: href, "$danger": danger, target: tgt, rel: linkRel, download: download === true ? "" : download || undefined, onClick: onClick, children: inner }));
|
|
93
104
|
}
|
|
94
|
-
return _jsx(RowButton, { role: "menuitem", type: "button", "$danger": danger, disabled: disabled, onClick: onClick, children: inner });
|
|
105
|
+
return _jsx(RowButton, { role: "menuitem", type: "button", "$danger": danger, disabled: !!disabled, onClick: onClick, children: inner });
|
|
95
106
|
}
|
|
107
|
+
// the tooltip's anchor takes the row's full width, as the row did
|
|
108
|
+
const REASON_ANCHOR = { display: "flex", width: "100%" };
|
|
96
109
|
const ITEMS = '[role="menuitem"]:not(:disabled):not([aria-disabled="true"])';
|
|
97
110
|
/**
|
|
98
111
|
* Menu: click-to-open popover anchored to its trigger. It portals to
|
|
@@ -103,7 +116,7 @@ const ITEMS = '[role="menuitem"]:not(:disabled):not([aria-disabled="true"])';
|
|
|
103
116
|
* one outcome" is always the right behaviour. Arrow keys, Home and End move
|
|
104
117
|
* between items.
|
|
105
118
|
*/
|
|
106
|
-
export function Menu({ trigger, children, align = "right", side = "bottom", width = 220, label, onOpenChange }) {
|
|
119
|
+
export function Menu({ trigger, children, align = "right", side = "bottom", width = 220, label, onOpenChange, disabled }) {
|
|
107
120
|
const [open, setOpenState] = useState(false);
|
|
108
121
|
const ref = useRef(null);
|
|
109
122
|
const layer = useRef(null);
|
|
@@ -126,6 +139,16 @@ export function Menu({ trigger, children, align = "right", side = "bottom", widt
|
|
|
126
139
|
setOpen(false);
|
|
127
140
|
ref.current?.querySelector("button, a, [tabindex]")?.focus();
|
|
128
141
|
});
|
|
142
|
+
// Disabled while open: shut it, as if the outside had been clicked. The
|
|
143
|
+
// state is dropped during render; the listener is told after it.
|
|
144
|
+
if (disabled && open)
|
|
145
|
+
setOpenState(false);
|
|
146
|
+
useEffect(() => {
|
|
147
|
+
if (disabled && told.current) {
|
|
148
|
+
told.current = false;
|
|
149
|
+
changed.current?.(false);
|
|
150
|
+
}
|
|
151
|
+
}, [disabled]);
|
|
129
152
|
useEffect(() => {
|
|
130
153
|
if (!open)
|
|
131
154
|
return;
|
|
@@ -162,7 +185,10 @@ export function Menu({ trigger, children, align = "right", side = "bottom", widt
|
|
|
162
185
|
e.preventDefault();
|
|
163
186
|
items[next].focus();
|
|
164
187
|
};
|
|
165
|
-
return (_jsxs(Wrap, { ref: ref, children: [_jsx("div", { onClick: () =>
|
|
188
|
+
return (_jsxs(Wrap, { ref: ref, children: [_jsx("div", { onClick: () => { if (!disabled)
|
|
189
|
+
setOpen(!open); }, onKeyDown: (e) => {
|
|
190
|
+
if (disabled)
|
|
191
|
+
return;
|
|
166
192
|
// ArrowDown on the trigger opens the menu with the first item focused
|
|
167
193
|
if (e.key === "ArrowDown" && !open) {
|
|
168
194
|
e.preventDefault();
|
|
@@ -171,7 +197,7 @@ export function Menu({ trigger, children, align = "right", side = "bottom", widt
|
|
|
171
197
|
}
|
|
172
198
|
else if (open)
|
|
173
199
|
move(e);
|
|
174
|
-
}, style: { display: "contents" }, children: trigger(open) }), open ? (_jsx(Anchored, { anchor: ref, align: align, side: side, layerRef: layer, children: _jsx(Dropdown, { role: "menu", "aria-label": label, "$width": width, onClick: () => setOpen(false), onKeyDown: move, children: children }) })) : null] }));
|
|
200
|
+
}, style: { display: "contents" }, children: trigger(open) }), open && !disabled ? (_jsx(Anchored, { anchor: ref, align: align, side: side, layerRef: layer, children: _jsx(Dropdown, { role: "menu", "aria-label": label, "$width": width, onClick: () => setOpen(false), onKeyDown: move, children: children }) })) : null] }));
|
|
175
201
|
}
|
|
176
202
|
const Isolate = styled.span `display: inline-flex;`;
|
|
177
203
|
/**
|
package/dist/kit/Menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../src/kit/Menu.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../src/kit/Menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type CSSProperties } from "react";
|
|
2
|
+
/** Hue 0–360, saturation and value 0–1. */
|
|
3
|
+
export interface Hsv {
|
|
4
|
+
h: number;
|
|
5
|
+
s: number;
|
|
6
|
+
v: number;
|
|
7
|
+
}
|
|
8
|
+
/** `#rgb`, `#rrggbb`, with or without the `#`, any case → `#rrggbb`; anything else → null. */
|
|
9
|
+
export declare function normaliseHex(raw: string): string | null;
|
|
10
|
+
export declare function hsvToHex({ h, s, v: val }: Hsv): string;
|
|
11
|
+
/** A hex the picker can read, as HSV; null for anything else. */
|
|
12
|
+
export declare function hexToHsv(hex: string): Hsv | null;
|
|
13
|
+
export interface SpectrumPickerProps {
|
|
14
|
+
/** the colour, `#rrggbb` (a `#rgb` is read too); anything else shows the last colour picked */
|
|
15
|
+
value: string;
|
|
16
|
+
/** every change, as `#rrggbb` lower case — while dragging too */
|
|
17
|
+
onChange: (hex: string) => void;
|
|
18
|
+
/** once a drag or a key press ends: for an undo step or a save */
|
|
19
|
+
onCommit?: ((hex: string) => void) | undefined;
|
|
20
|
+
/** accessible name of the whole picker (default "Colour") */
|
|
21
|
+
label?: string | undefined;
|
|
22
|
+
/** show the hex field and preview under the strip (default true) */
|
|
23
|
+
hexInput?: boolean | undefined;
|
|
24
|
+
/** px (default 220) */
|
|
25
|
+
width?: number | undefined;
|
|
26
|
+
disabled?: boolean | undefined;
|
|
27
|
+
className?: string | undefined;
|
|
28
|
+
style?: CSSProperties | undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* SpectrumPicker: pick any colour inline. Drag (or click) the square for
|
|
32
|
+
* saturation (across) and brightness (up), the strip for hue, or type the hex.
|
|
33
|
+
* Keyboard: in the square the arrows move saturation and brightness, in the
|
|
34
|
+
* strip they move hue; Shift moves ten times as far, Home/End go to the ends.
|
|
35
|
+
* Reach for it where the colour is the person's own (a paint, a label colour);
|
|
36
|
+
* for a choice from a fixed set use `ColorPicker`, which can offer this too
|
|
37
|
+
* (`spectrum`).
|
|
38
|
+
*/
|
|
39
|
+
export declare function SpectrumPicker({ value, onChange, onCommit, label, hexInput, width, disabled, className, style, }: SpectrumPickerProps): import("react").JSX.Element;
|
|
40
|
+
//# sourceMappingURL=Spectrum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spectrum.d.ts","sourceRoot":"","sources":["../../src/kit/Spectrum.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,aAAa,EAAyC,MAAM,OAAO,CAAC;AAc/G,2CAA2C;AAC3C,MAAM,WAAW,GAAG;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AAIxD,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvD;AAED,wBAAgB,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,MAAM,CAOtD;AAED,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAiBhD;AAiED,MAAM,WAAW,mBAAmB;IAClC,+FAA+F;IAC/F,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAgB,EAAE,QAAe,EAAE,KAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,GACtG,EAAE,mBAAmB,+BAyKrB"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import styled, { css } from "styled-components";
|
|
4
|
+
import { v } from "../theme/tokens.js";
|
|
5
|
+
import { MonoInput } from "./Form.js";
|
|
6
|
+
const clamp = (n, lo, hi) => Math.min(hi, Math.max(lo, n));
|
|
7
|
+
/** `#rgb`, `#rrggbb`, with or without the `#`, any case → `#rrggbb`; anything else → null. */
|
|
8
|
+
export function normaliseHex(raw) {
|
|
9
|
+
const m = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(raw.trim());
|
|
10
|
+
if (!m)
|
|
11
|
+
return null;
|
|
12
|
+
const d = m[1].toLowerCase();
|
|
13
|
+
return `#${d.length === 3 ? d.split("").map((c) => c + c).join("") : d}`;
|
|
14
|
+
}
|
|
15
|
+
export function hsvToHex({ h, s, v: val }) {
|
|
16
|
+
const f = (n) => {
|
|
17
|
+
const k = (n + h / 60) % 6;
|
|
18
|
+
const c = val - val * s * Math.max(0, Math.min(k, 4 - k, 1));
|
|
19
|
+
return Math.round(c * 255).toString(16).padStart(2, "0");
|
|
20
|
+
};
|
|
21
|
+
return `#${f(5)}${f(3)}${f(1)}`;
|
|
22
|
+
}
|
|
23
|
+
/** A hex the picker can read, as HSV; null for anything else. */
|
|
24
|
+
export function hexToHsv(hex) {
|
|
25
|
+
const n = normaliseHex(hex);
|
|
26
|
+
if (!n)
|
|
27
|
+
return null;
|
|
28
|
+
const r = parseInt(n.slice(1, 3), 16) / 255;
|
|
29
|
+
const g = parseInt(n.slice(3, 5), 16) / 255;
|
|
30
|
+
const b = parseInt(n.slice(5, 7), 16) / 255;
|
|
31
|
+
const max = Math.max(r, g, b);
|
|
32
|
+
const d = max - Math.min(r, g, b);
|
|
33
|
+
let h = 0;
|
|
34
|
+
if (d) {
|
|
35
|
+
if (max === r)
|
|
36
|
+
h = ((g - b) / d) % 6;
|
|
37
|
+
else if (max === g)
|
|
38
|
+
h = (b - r) / d + 2;
|
|
39
|
+
else
|
|
40
|
+
h = (r - g) / d + 4;
|
|
41
|
+
h *= 60;
|
|
42
|
+
if (h < 0)
|
|
43
|
+
h += 360;
|
|
44
|
+
}
|
|
45
|
+
return { h, s: max ? d / max : 0, v: max };
|
|
46
|
+
}
|
|
47
|
+
// the ends of the square, computed rather than written down
|
|
48
|
+
const WHITE = hsvToHex({ h: 0, s: 0, v: 1 });
|
|
49
|
+
const BLACK = hsvToHex({ h: 0, s: 0, v: 0 });
|
|
50
|
+
const RAINBOW = [0, 60, 120, 180, 240, 300, 360].map((h) => hsvToHex({ h, s: 1, v: 1 })).join(", ");
|
|
51
|
+
const Root = styled.div `
|
|
52
|
+
display: grid;
|
|
53
|
+
gap: 10px;
|
|
54
|
+
width: ${(p) => p.$width}px;
|
|
55
|
+
max-width: 100%;
|
|
56
|
+
${(p) => p.$disabled && css `opacity: 0.5; pointer-events: none;`}
|
|
57
|
+
`;
|
|
58
|
+
const Area = styled.div `
|
|
59
|
+
position: relative;
|
|
60
|
+
aspect-ratio: 4 / 3;
|
|
61
|
+
border-radius: ${v.rCtl};
|
|
62
|
+
border: 1px solid ${v.line2};
|
|
63
|
+
cursor: crosshair;
|
|
64
|
+
touch-action: none;
|
|
65
|
+
user-select: none;
|
|
66
|
+
`;
|
|
67
|
+
const Strip = styled.div `
|
|
68
|
+
position: relative;
|
|
69
|
+
height: 12px;
|
|
70
|
+
border-radius: 6px;
|
|
71
|
+
border: 1px solid ${v.line2};
|
|
72
|
+
cursor: pointer;
|
|
73
|
+
touch-action: none;
|
|
74
|
+
user-select: none;
|
|
75
|
+
`;
|
|
76
|
+
const thumb = css `
|
|
77
|
+
position: absolute;
|
|
78
|
+
width: 14px;
|
|
79
|
+
height: 14px;
|
|
80
|
+
border-radius: 50%;
|
|
81
|
+
transform: translate(-50%, -50%);
|
|
82
|
+
background: var(--x-swatch);
|
|
83
|
+
/* the ring is surface then ink, so it reads on any colour under it */
|
|
84
|
+
box-shadow: 0 0 0 2px ${v.surface}, 0 0 0 3px ${v.text};
|
|
85
|
+
outline: none;
|
|
86
|
+
&:focus-visible { box-shadow: 0 0 0 2px ${v.surface}, 0 0 0 3px ${v.text}, ${v.ring}; }
|
|
87
|
+
`;
|
|
88
|
+
const AreaThumb = styled.div `${thumb}`;
|
|
89
|
+
const StripThumb = styled.div `${thumb} top: 50%;`;
|
|
90
|
+
const HexRow = styled.div `
|
|
91
|
+
display: flex;
|
|
92
|
+
align-items: center;
|
|
93
|
+
gap: 8px;
|
|
94
|
+
> .preview {
|
|
95
|
+
flex: none;
|
|
96
|
+
width: 26px;
|
|
97
|
+
height: 26px;
|
|
98
|
+
border-radius: 50%;
|
|
99
|
+
border: 1px solid ${v.line2};
|
|
100
|
+
background: var(--x-swatch);
|
|
101
|
+
}
|
|
102
|
+
`;
|
|
103
|
+
/**
|
|
104
|
+
* SpectrumPicker: pick any colour inline. Drag (or click) the square for
|
|
105
|
+
* saturation (across) and brightness (up), the strip for hue, or type the hex.
|
|
106
|
+
* Keyboard: in the square the arrows move saturation and brightness, in the
|
|
107
|
+
* strip they move hue; Shift moves ten times as far, Home/End go to the ends.
|
|
108
|
+
* Reach for it where the colour is the person's own (a paint, a label colour);
|
|
109
|
+
* for a choice from a fixed set use `ColorPicker`, which can offer this too
|
|
110
|
+
* (`spectrum`).
|
|
111
|
+
*/
|
|
112
|
+
export function SpectrumPicker({ value, onChange, onCommit, label = "Colour", hexInput = true, width = 220, disabled, className, style, }) {
|
|
113
|
+
// HSV is kept here rather than derived from the hex each render: a grey
|
|
114
|
+
// has no hue and black has no saturation, and the square should not jump
|
|
115
|
+
// back to red the moment the person drags through either.
|
|
116
|
+
const [hsv, setHsv] = useState(() => hexToHsv(value) ?? { h: 0, s: 0, v: 0 });
|
|
117
|
+
const hex = hsvToHex(hsv);
|
|
118
|
+
const [seen, setSeen] = useState(value);
|
|
119
|
+
if (seen !== value) {
|
|
120
|
+
setSeen(value);
|
|
121
|
+
const next = hexToHsv(value);
|
|
122
|
+
if (next && normaliseHex(value) !== hex)
|
|
123
|
+
setHsv(next);
|
|
124
|
+
}
|
|
125
|
+
const [draft, setDraft] = useState(null);
|
|
126
|
+
const latest = useRef(hex);
|
|
127
|
+
useEffect(() => { latest.current = hex; });
|
|
128
|
+
const set = (next) => {
|
|
129
|
+
const n = { h: clamp(next.h, 0, 360), s: clamp(next.s, 0, 1), v: clamp(next.v, 0, 1) };
|
|
130
|
+
setHsv(n);
|
|
131
|
+
const out = hsvToHex(n);
|
|
132
|
+
latest.current = out;
|
|
133
|
+
if (out !== hex)
|
|
134
|
+
onChange(out);
|
|
135
|
+
};
|
|
136
|
+
const area = useRef(null);
|
|
137
|
+
const strip = useRef(null);
|
|
138
|
+
const areaThumb = useRef(null);
|
|
139
|
+
const stripThumb = useRef(null);
|
|
140
|
+
const partOf = (el) => (el.dataset.part === "hue" ? "hue" : "area");
|
|
141
|
+
const fromPointer = (part, e) => {
|
|
142
|
+
const r = (part === "hue" ? strip : area).current.getBoundingClientRect();
|
|
143
|
+
if (part === "hue") {
|
|
144
|
+
if (r.width)
|
|
145
|
+
set({ ...hsv, h: ((e.clientX - r.left) / r.width) * 360 });
|
|
146
|
+
}
|
|
147
|
+
else if (r.width && r.height) {
|
|
148
|
+
set({ h: hsv.h, s: (e.clientX - r.left) / r.width, v: 1 - (e.clientY - r.top) / r.height });
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
const onPointerDown = (e) => {
|
|
152
|
+
if (disabled || e.button !== 0)
|
|
153
|
+
return;
|
|
154
|
+
e.preventDefault();
|
|
155
|
+
e.currentTarget.setPointerCapture?.(e.pointerId);
|
|
156
|
+
const part = partOf(e.currentTarget);
|
|
157
|
+
(part === "hue" ? stripThumb : areaThumb).current?.focus();
|
|
158
|
+
fromPointer(part, e);
|
|
159
|
+
};
|
|
160
|
+
const onPointerMove = (e) => {
|
|
161
|
+
if (e.currentTarget.hasPointerCapture?.(e.pointerId))
|
|
162
|
+
fromPointer(partOf(e.currentTarget), e);
|
|
163
|
+
};
|
|
164
|
+
const onPointerUp = (e) => {
|
|
165
|
+
if (!e.currentTarget.hasPointerCapture?.(e.pointerId))
|
|
166
|
+
return;
|
|
167
|
+
e.currentTarget.releasePointerCapture?.(e.pointerId);
|
|
168
|
+
onCommit?.(latest.current);
|
|
169
|
+
};
|
|
170
|
+
const pointer = { onPointerDown, onPointerMove, onPointerUp };
|
|
171
|
+
const onKeyDown = (e) => {
|
|
172
|
+
if (disabled)
|
|
173
|
+
return;
|
|
174
|
+
const hue = partOf(e.currentTarget) === "hue";
|
|
175
|
+
const big = e.shiftKey ? 10 : 1;
|
|
176
|
+
const d = hue ? big : big / 100;
|
|
177
|
+
let next = null;
|
|
178
|
+
if (hue) {
|
|
179
|
+
if (e.key === "ArrowRight" || e.key === "ArrowUp")
|
|
180
|
+
next = { ...hsv, h: hsv.h + d };
|
|
181
|
+
else if (e.key === "ArrowLeft" || e.key === "ArrowDown")
|
|
182
|
+
next = { ...hsv, h: hsv.h - d };
|
|
183
|
+
else if (e.key === "Home")
|
|
184
|
+
next = { ...hsv, h: 0 };
|
|
185
|
+
else if (e.key === "End")
|
|
186
|
+
next = { ...hsv, h: 360 };
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
if (e.key === "ArrowRight")
|
|
190
|
+
next = { ...hsv, s: hsv.s + d };
|
|
191
|
+
else if (e.key === "ArrowLeft")
|
|
192
|
+
next = { ...hsv, s: hsv.s - d };
|
|
193
|
+
else if (e.key === "ArrowUp")
|
|
194
|
+
next = { ...hsv, v: hsv.v + d };
|
|
195
|
+
else if (e.key === "ArrowDown")
|
|
196
|
+
next = { ...hsv, v: hsv.v - d };
|
|
197
|
+
else if (e.key === "Home")
|
|
198
|
+
next = { ...hsv, s: 0 };
|
|
199
|
+
else if (e.key === "End")
|
|
200
|
+
next = { ...hsv, s: 1 };
|
|
201
|
+
}
|
|
202
|
+
if (!next)
|
|
203
|
+
return;
|
|
204
|
+
e.preventDefault();
|
|
205
|
+
set(next);
|
|
206
|
+
};
|
|
207
|
+
const commitKey = () => onCommit?.(latest.current);
|
|
208
|
+
const commitHex = () => {
|
|
209
|
+
if (draft === null)
|
|
210
|
+
return;
|
|
211
|
+
const n = normaliseHex(draft);
|
|
212
|
+
setDraft(null);
|
|
213
|
+
const next = n ? hexToHsv(n) : null;
|
|
214
|
+
if (n && next && n !== hex) {
|
|
215
|
+
setHsv(next);
|
|
216
|
+
latest.current = n;
|
|
217
|
+
onChange(n);
|
|
218
|
+
onCommit?.(n);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
const pct = (n) => `${Math.round(n * 100)}%`;
|
|
222
|
+
const hueHex = hsvToHex({ h: hsv.h, s: 1, v: 1 });
|
|
223
|
+
const swatch = { "--x-swatch": hex };
|
|
224
|
+
return (_jsxs(Root, { role: "group", "aria-label": label, "$width": width, "$disabled": !!disabled, className: className, style: style, children: [_jsx(Area, { ref: area, style: { background: `linear-gradient(to top, ${BLACK}, transparent), linear-gradient(to right, ${WHITE}, transparent), ${hueHex}` }, "data-part": "area", ...pointer, children: _jsx(AreaThumb, { ref: areaThumb, role: "slider", tabIndex: disabled ? -1 : 0, "aria-label": `${label}: saturation and brightness`, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(hsv.s * 100), "aria-valuetext": `Saturation ${pct(hsv.s)}, brightness ${pct(hsv.v)}`, "aria-disabled": disabled || undefined, "data-part": "area", onKeyDown: onKeyDown, onKeyUp: commitKey, style: { ...swatch, left: pct(hsv.s), top: pct(1 - hsv.v) } }) }), _jsx(Strip, { ref: strip, style: { background: `linear-gradient(to right, ${RAINBOW})` }, "data-part": "hue", ...pointer, children: _jsx(StripThumb, { ref: stripThumb, role: "slider", tabIndex: disabled ? -1 : 0, "aria-label": `${label}: hue`, "aria-valuemin": 0, "aria-valuemax": 360, "aria-valuenow": Math.round(hsv.h), "aria-disabled": disabled || undefined, "data-part": "hue", onKeyDown: onKeyDown, onKeyUp: commitKey, style: { "--x-swatch": hueHex, left: `${(hsv.h / 360) * 100}%` } }) }), hexInput ? (_jsxs(HexRow, { children: [_jsx("span", { className: "preview", style: swatch, "aria-hidden": true }), _jsx(MonoInput, { "aria-label": `${label}: hex`, value: draft ?? hex, disabled: disabled, spellCheck: false, maxLength: 7, onChange: (e) => setDraft(e.target.value), onBlur: commitHex, onKeyDown: (e) => {
|
|
225
|
+
if (e.key === "Enter") {
|
|
226
|
+
e.preventDefault();
|
|
227
|
+
commitHex();
|
|
228
|
+
}
|
|
229
|
+
else if (e.key === "Escape" && draft !== null) {
|
|
230
|
+
e.stopPropagation();
|
|
231
|
+
setDraft(null);
|
|
232
|
+
}
|
|
233
|
+
} })] })) : null] }));
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=Spectrum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spectrum.js","sourceRoot":"","sources":["../../src/kit/Spectrum.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { MouseEvent, ReactNode } from "react";
|
|
2
|
+
import { type AppButtonProps } from "./Button.tsx";
|
|
3
|
+
import { type IconName } from "./Icon.tsx";
|
|
4
|
+
import type { AnchoredAlign, AnchoredSide } from "./Anchored.tsx";
|
|
5
|
+
export interface SplitButtonProps {
|
|
6
|
+
/** the primary action's label */
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
/** the primary action */
|
|
9
|
+
onClick?: ((e: MouseEvent<HTMLElement>) => void) | undefined;
|
|
10
|
+
/** the primary action is a link instead (an anchor; `download` saves it) */
|
|
11
|
+
href?: string | undefined;
|
|
12
|
+
download?: boolean | string | undefined;
|
|
13
|
+
target?: string | undefined;
|
|
14
|
+
rel?: string | undefined;
|
|
15
|
+
/** MenuItem, MenuLabel and MenuDivider: the action's variants */
|
|
16
|
+
menu: ReactNode;
|
|
17
|
+
/** the menu trigger's accessible name (default "More options") */
|
|
18
|
+
menuLabel?: string | undefined;
|
|
19
|
+
variant?: AppButtonProps["variant"];
|
|
20
|
+
size?: AppButtonProps["size"];
|
|
21
|
+
icon?: IconName | (string & {}) | undefined;
|
|
22
|
+
loading?: boolean | undefined;
|
|
23
|
+
/** both halves off */
|
|
24
|
+
disabled?: boolean | undefined;
|
|
25
|
+
/** only the menu off — the primary action still works */
|
|
26
|
+
menuDisabled?: boolean | undefined;
|
|
27
|
+
/** the menu's alignment against the group (default "right") */
|
|
28
|
+
align?: AnchoredAlign | undefined;
|
|
29
|
+
side?: AnchoredSide | undefined;
|
|
30
|
+
width?: number | undefined;
|
|
31
|
+
onOpenChange?: ((open: boolean) => void) | undefined;
|
|
32
|
+
fullWidth?: boolean | undefined;
|
|
33
|
+
title?: string | undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* SplitButton: a primary action with a ▾ beside it that opens a `Menu` of
|
|
37
|
+
* alternatives. Reach for it when one choice is the obvious one and the
|
|
38
|
+
* others are its variants (a format, a scope); when no option is the default,
|
|
39
|
+
* use a plain `Menu` behind an `AppButton`, and when the options are peers
|
|
40
|
+
* shown all the time, `Segmented`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function SplitButton({ children, onClick, href, download, target, rel, menu, menuLabel, variant, size, icon, loading, disabled, menuDisabled, align, side, width, onOpenChange, fullWidth, title, }: SplitButtonProps): import("react").JSX.Element;
|
|
43
|
+
//# sourceMappingURL=SplitButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplitButton.d.ts","sourceRoot":"","sources":["../../src/kit/SplitButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAqBlE,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,yBAAyB;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7D,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,iEAAiE;IACjE,IAAI,EAAE,SAAS,CAAC;IAChB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;IAC5C,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrD,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAA0B,EAChF,OAAiB,EAAE,IAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EACrE,KAAe,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,GAC7D,EAAE,gBAAgB,+BA8BlB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import styled from "styled-components";
|
|
3
|
+
import { AppButton } from "./Button.js";
|
|
4
|
+
import { Icon } from "./Icon.js";
|
|
5
|
+
import { Menu } from "./Menu.js";
|
|
6
|
+
// SplitButton: one action, and the menu of its variants beside it — "Export
|
|
7
|
+
// PNG ▾ → PNG / BMP". Added for upl.im's gta-viewer (1.7, UPL-242), which had
|
|
8
|
+
// composed it from an AppButton and a Menu with a narrow trigger.
|
|
9
|
+
const Group = styled.span `
|
|
10
|
+
display: ${(p) => (p.$full ? "flex" : "inline-flex")};
|
|
11
|
+
align-items: stretch;
|
|
12
|
+
> :first-child { flex: 1 1 auto; border-top-right-radius: 0; border-bottom-right-radius: 0; }
|
|
13
|
+
/* the menu's trigger: square on the joined side, and a seam in the
|
|
14
|
+
button's own ink so it reads on every variant */
|
|
15
|
+
> :last-child button {
|
|
16
|
+
border-top-left-radius: 0;
|
|
17
|
+
border-bottom-left-radius: 0;
|
|
18
|
+
margin-left: -1px;
|
|
19
|
+
padding: 0 8px;
|
|
20
|
+
border-left-color: color-mix(in srgb, currentColor 28%, transparent);
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
/**
|
|
24
|
+
* SplitButton: a primary action with a ▾ beside it that opens a `Menu` of
|
|
25
|
+
* alternatives. Reach for it when one choice is the obvious one and the
|
|
26
|
+
* others are its variants (a format, a scope); when no option is the default,
|
|
27
|
+
* use a plain `Menu` behind an `AppButton`, and when the options are peers
|
|
28
|
+
* shown all the time, `Segmented`.
|
|
29
|
+
*/
|
|
30
|
+
export function SplitButton({ children, onClick, href, download, target, rel, menu, menuLabel = "More options", variant = "ghost", size = "sm", icon, loading, disabled, menuDisabled, align = "right", side, width, onOpenChange, fullWidth, title, }) {
|
|
31
|
+
const menuOff = !!(disabled || menuDisabled || loading);
|
|
32
|
+
return (_jsxs(Group, { "$full": fullWidth, children: [href ? (_jsx(AppButton, { as: "a", href: href, download: download, target: target, rel: rel, variant: variant, size: size, icon: icon, loading: loading, disabled: disabled, title: title, onClick: onClick, children: children })) : (_jsx(AppButton, { variant: variant, size: size, icon: icon, loading: loading, disabled: disabled, title: title, onClick: onClick, children: children })), _jsx(Menu, { align: align, side: side, width: width, label: menuLabel, disabled: menuOff, onOpenChange: onOpenChange, trigger: (open) => (_jsx(AppButton, { variant: variant, size: size, disabled: menuOff, "aria-label": menuLabel, "aria-haspopup": "menu", "aria-expanded": open, children: _jsx(Icon, { name: open ? "chevron-up" : "chevron-down" }) })), children: menu })] }));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=SplitButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplitButton.js","sourceRoot":"","sources":["../../src/kit/SplitButton.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAuB,MAAM,aAAc,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAY,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAY,CAAC;AAGlC,4EAA4E;AAC5E,8EAA8E;AAC9E,kEAAkE;AAElE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAiC;aAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;;;;;;;;;;;;CAYrD,CAAC;AAiCF;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,GAAG,cAAc,EAChF,OAAO,GAAG,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EACrE,KAAK,GAAG,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,GAC3C;IACjB,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,YAAY,IAAI,OAAO,CAAC,CAAC;IACxD,OAAO,CACL,MAAC,KAAK,aAAQ,SAAS,aACpB,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,SAAS,IAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,YACvL,QAAQ,GACC,CACb,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,YACtH,QAAQ,GACC,CACb,EACD,KAAC,IAAI,IACH,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CACjB,KAAC,SAAS,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,gBAAc,SAAS,mBAAgB,MAAM,mBAAgB,IAAI,YACzH,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,GAAI,GAC1C,CACb,YAEA,IAAI,GACA,IACD,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -28,8 +28,27 @@ export interface AppThemeProviderProps {
|
|
|
28
28
|
* explicit localStorage choice on this host still wins.
|
|
29
29
|
*/
|
|
30
30
|
initialPref?: ThemePref | undefined;
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Called when the person changes the preference (`setPref`, `cycle`), for a
|
|
33
|
+
* host that mirrors it into a cookie — or, with `pref`, for the host that
|
|
34
|
+
* owns it. Never called because the `pref` prop changed.
|
|
35
|
+
*/
|
|
32
36
|
onPrefChange?: ((pref: ThemePref) => void) | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Controlled mode (1.7): the preference is the host's, not the provider's.
|
|
39
|
+
* For a surface that is TOLD its theme — a renderer in a sandboxed iframe
|
|
40
|
+
* following its host's `uplim:theme`, a thumbnail page captured light then
|
|
41
|
+
* dark, an embed whose parent page owns the toggle.
|
|
42
|
+
*
|
|
43
|
+
* While `pref` is given the provider touches no storage at all: it neither
|
|
44
|
+
* reads its key on mount (so a stale stored value cannot win a frame) nor
|
|
45
|
+
* writes it, ignores other tabs' changes, and does not remember the brand
|
|
46
|
+
* either (`brand` and `setBrand` still apply, in memory). Every render uses
|
|
47
|
+
* the prop, from the first one. `setPref`/`cycle` call `onPrefChange` and
|
|
48
|
+
* change nothing themselves; the host decides and passes the new `pref` back.
|
|
49
|
+
* Pass `"system"` to follow the device's scheme under the host's control.
|
|
50
|
+
*/
|
|
51
|
+
pref?: ThemePref | undefined;
|
|
33
52
|
/** false when the host inlines `globalCss()` itself (SSR without a styled sheet). */
|
|
34
53
|
globalStyle?: boolean | undefined;
|
|
35
54
|
/**
|
|
@@ -42,7 +61,7 @@ export interface AppThemeProviderProps {
|
|
|
42
61
|
*/
|
|
43
62
|
brand?: string | null | undefined;
|
|
44
63
|
}
|
|
45
|
-
export declare function AppThemeProvider({ children, storageKey, initialPref, onPrefChange, globalStyle, brand: initialBrand, }: AppThemeProviderProps): import("react").JSX.Element;
|
|
64
|
+
export declare function AppThemeProvider({ children, storageKey, initialPref, onPrefChange, globalStyle, brand: initialBrand, pref: controlledPref, }: AppThemeProviderProps): import("react").JSX.Element;
|
|
46
65
|
export declare function useTheme(): ThemeCtx;
|
|
47
66
|
/** Null outside a provider — for a component that may render in either place. */
|
|
48
67
|
export declare function useThemeMaybe(): ThemeCtx | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiG,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAoBtI,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAMpD,UAAU,QAAQ;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC;AAkDD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,qFAAqF;IACrF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,UAAgC,EAChC,WAAW,EACX,YAAY,EACZ,WAAkB,EAClB,KAAK,EAAE,YAAmB,EAC1B,IAAI,EAAE,cAAc,GACrB,EAAE,qBAAqB,+BAiHvB;AAED,wBAAgB,QAAQ,IAAI,QAAQ,CAInC;AAED,iFAAiF;AACjF,wBAAgB,aAAa,IAAI,QAAQ,GAAG,IAAI,CAE/C"}
|