@xeonr/platform-ui 1.6.2 → 1.7.1
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/LogView.d.ts.map +1 -1
- package/dist/kit/LogView.js +45 -6
- package/dist/kit/LogView.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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogView.d.ts","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,OAAO;IACtB,oGAAoG;IACpG,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sEAAsE;IACtE,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IACzC;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAClF,yGAAyG;IACzG,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"LogView.d.ts","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"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"}
|
package/dist/kit/LogView.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useRef, useState } from "react";
|
|
2
|
+
import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
3
3
|
import styled from "styled-components";
|
|
4
4
|
import { v } from "../theme/tokens.js";
|
|
5
5
|
import { PanelHead, PanelTitle, PanelActions, Panel } from "./Panel.js";
|
|
@@ -63,16 +63,55 @@ const Older = styled.button `
|
|
|
63
63
|
&:disabled { cursor: default; opacity: 0.6; }
|
|
64
64
|
`;
|
|
65
65
|
const Foot = styled.div `margin-top: 8px; color: ${v.logDim}; font-size: 10.5px; text-align: center;`;
|
|
66
|
+
const useIsoLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
67
|
+
/** How close to the tail still counts as "at the tail", in px. */
|
|
68
|
+
const TAIL_SLACK = 24;
|
|
66
69
|
export function LogSurface({ lines, height, flow, order = "oldest-first", follow = true, placeholder = "waiting for output…", onLoadOlder, loadingOlder, olderLabel = "Load older", footer }) {
|
|
67
70
|
const ref = useRef(null);
|
|
68
71
|
const newest = order === "newest-first";
|
|
69
72
|
const shown = newest ? [...lines].reverse() : lines;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
// Following means "stay at the tail", not "go to the tail whenever anything
|
|
74
|
+
// changes": a reader who has scrolled away is reading, and new lines must
|
|
75
|
+
// not pull them back. And "Load older" grows the log at the far end from
|
|
76
|
+
// the tail, so the reader is held where they were rather than thrown to the
|
|
77
|
+
// tail (oldest-first) by the lines landing above them.
|
|
78
|
+
const pinned = useRef(true);
|
|
79
|
+
/** Set when older lines were asked for: the reader's distance from the bottom, to hold. */
|
|
80
|
+
const anchor = useRef(null);
|
|
81
|
+
const firstLine = useRef(undefined);
|
|
82
|
+
const wasFollowing = useRef(follow);
|
|
83
|
+
const onScroll = () => {
|
|
84
|
+
const el = ref.current;
|
|
85
|
+
if (!el)
|
|
86
|
+
return;
|
|
87
|
+
pinned.current = newest ? el.scrollTop <= TAIL_SLACK : el.scrollHeight - el.scrollTop - el.clientHeight <= TAIL_SLACK;
|
|
88
|
+
};
|
|
89
|
+
const loadOlder = () => {
|
|
90
|
+
const el = ref.current;
|
|
91
|
+
if (el && !newest && !flow)
|
|
92
|
+
anchor.current = el.scrollHeight - el.scrollTop;
|
|
93
|
+
onLoadOlder?.();
|
|
94
|
+
};
|
|
95
|
+
const older = onLoadOlder ? _jsx(Older, { type: "button", disabled: loadingOlder, onClick: loadOlder, style: newest ? { margin: "8px 0 0" } : undefined, children: loadingOlder ? "Loading…" : olderLabel }) : null;
|
|
96
|
+
useIsoLayoutEffect(() => {
|
|
97
|
+
const el = ref.current;
|
|
98
|
+
const prepended = firstLine.current !== undefined && lines[0] !== firstLine.current;
|
|
99
|
+
firstLine.current = lines[0];
|
|
100
|
+
// turning following back on is asking to be taken to the tail
|
|
101
|
+
if (follow && !wasFollowing.current)
|
|
102
|
+
pinned.current = true;
|
|
103
|
+
wasFollowing.current = follow;
|
|
104
|
+
if (!el || flow)
|
|
105
|
+
return;
|
|
106
|
+
if (anchor.current !== null && prepended) {
|
|
107
|
+
el.scrollTop = el.scrollHeight - anchor.current;
|
|
108
|
+
anchor.current = null;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (follow && pinned.current)
|
|
112
|
+
el.scrollTop = newest ? 0 : el.scrollHeight;
|
|
74
113
|
}, [lines, follow, flow, newest]);
|
|
75
|
-
return (_jsxs(Sur, { ref: ref, "$h": height, "$flow": flow, children: [newest ? null : older, lines.length === 0 ? _jsx(Ts, { children: placeholder }) : null, shown.map((l, i) => (l.boot ? _jsx(Boot, { children: l.text }, i) :
|
|
114
|
+
return (_jsxs(Sur, { ref: ref, "$h": height, "$flow": flow, onScroll: flow ? undefined : onScroll, children: [newest ? null : older, lines.length === 0 ? _jsx(Ts, { children: placeholder }) : null, shown.map((l, i) => (l.boot ? _jsx(Boot, { children: l.text }, i) :
|
|
76
115
|
l.divider ? _jsx(Rule, { "$tone": l.tone, children: l.text }, i) : (_jsxs("div", { children: [l.at != null && l.at !== "" ? _jsxs(Ts, { children: [fmtAt(l.at), " "] }) : null, l.level ? _jsxs(_Fragment, { children: [_jsx(Lvl, { "$l": l.level, children: l.level }), " "] }) : null, l.source ? _jsxs(_Fragment, { children: [_jsx(Src, { children: l.source }), " "] }) : null, l.stderr ? _jsx(Err, { children: l.text }) : l.text, l.fields ? _jsx(Fields, { children: Object.entries(l.fields).filter(([, val]) => val != null).map(([k, val]) => `${k}=${String(val)}`).join(" ") }) : null] }, i)))), newest ? older : null, footer ? _jsx(Foot, { children: footer }) : null] }));
|
|
77
116
|
}
|
|
78
117
|
/** LogPanel: LogSurface inside a Panel with a follow toggle and status slot. */
|
package/dist/kit/LogView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogView.js","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"LogView.js","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"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"}
|
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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"}
|