@xeonr/platform-ui 1.5.0 → 1.6.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 +12 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/kit/Anchored.d.ts +24 -2
- package/dist/kit/Anchored.d.ts.map +1 -1
- package/dist/kit/Anchored.js +47 -3
- package/dist/kit/Anchored.js.map +1 -1
- package/dist/kit/Blocks.d.ts +6 -1
- package/dist/kit/Blocks.d.ts.map +1 -1
- package/dist/kit/Blocks.js +13 -2
- package/dist/kit/Blocks.js.map +1 -1
- package/dist/kit/Card.d.ts +6 -1
- package/dist/kit/Card.d.ts.map +1 -1
- package/dist/kit/Card.js +19 -4
- package/dist/kit/Card.js.map +1 -1
- package/dist/kit/Charts.d.ts +39 -3
- package/dist/kit/Charts.d.ts.map +1 -1
- package/dist/kit/Charts.js +70 -15
- package/dist/kit/Charts.js.map +1 -1
- package/dist/kit/CommandPalette.d.ts +47 -0
- package/dist/kit/CommandPalette.d.ts.map +1 -0
- package/dist/kit/CommandPalette.js +204 -0
- package/dist/kit/CommandPalette.js.map +1 -0
- package/dist/kit/DataTable.d.ts +18 -2
- package/dist/kit/DataTable.d.ts.map +1 -1
- package/dist/kit/DataTable.js +45 -6
- package/dist/kit/DataTable.js.map +1 -1
- package/dist/kit/Editable.d.ts +30 -0
- package/dist/kit/Editable.d.ts.map +1 -1
- package/dist/kit/Editable.js +150 -3
- package/dist/kit/Editable.js.map +1 -1
- package/dist/kit/EmptyState.d.ts +9 -2
- package/dist/kit/EmptyState.d.ts.map +1 -1
- package/dist/kit/EmptyState.js +16 -2
- package/dist/kit/EmptyState.js.map +1 -1
- package/dist/kit/Facet.d.ts.map +1 -1
- package/dist/kit/Facet.js +12 -2
- package/dist/kit/Facet.js.map +1 -1
- package/dist/kit/GroupedMultiSelect.d.ts +57 -0
- package/dist/kit/GroupedMultiSelect.d.ts.map +1 -0
- package/dist/kit/GroupedMultiSelect.js +219 -0
- package/dist/kit/GroupedMultiSelect.js.map +1 -0
- package/dist/kit/List.d.ts +18 -1
- package/dist/kit/List.d.ts.map +1 -1
- package/dist/kit/List.js +38 -10
- package/dist/kit/List.js.map +1 -1
- package/dist/kit/LogView.d.ts +39 -3
- package/dist/kit/LogView.d.ts.map +1 -1
- package/dist/kit/LogView.js +52 -10
- package/dist/kit/LogView.js.map +1 -1
- package/dist/kit/Marker.d.ts +19 -0
- package/dist/kit/Marker.d.ts.map +1 -1
- package/dist/kit/Marker.js +50 -0
- package/dist/kit/Marker.js.map +1 -1
- package/dist/kit/Modal.d.ts +13 -3
- package/dist/kit/Modal.d.ts.map +1 -1
- package/dist/kit/Modal.js +39 -9
- package/dist/kit/Modal.js.map +1 -1
- package/dist/kit/Panel.d.ts +21 -0
- package/dist/kit/Panel.d.ts.map +1 -1
- package/dist/kit/Panel.js +36 -0
- package/dist/kit/Panel.js.map +1 -1
- package/dist/kit/Picker.d.ts +7 -1
- package/dist/kit/Picker.d.ts.map +1 -1
- package/dist/kit/Picker.js +11 -2
- package/dist/kit/Picker.js.map +1 -1
- package/dist/kit/PipelineFlow.d.ts +44 -0
- package/dist/kit/PipelineFlow.d.ts.map +1 -0
- package/dist/kit/PipelineFlow.js +171 -0
- package/dist/kit/PipelineFlow.js.map +1 -0
- package/dist/kit/Popover.d.ts.map +1 -1
- package/dist/kit/Popover.js +4 -1
- package/dist/kit/Popover.js.map +1 -1
- package/dist/kit/Range.d.ts.map +1 -1
- package/dist/kit/Range.js +8 -2
- package/dist/kit/Range.js.map +1 -1
- package/dist/kit/Reorder.d.ts +54 -0
- package/dist/kit/Reorder.d.ts.map +1 -0
- package/dist/kit/Reorder.js +171 -0
- package/dist/kit/Reorder.js.map +1 -0
- package/dist/kit/Stat.d.ts +38 -5
- package/dist/kit/Stat.d.ts.map +1 -1
- package/dist/kit/Stat.js +99 -11
- package/dist/kit/Stat.js.map +1 -1
- package/dist/kit/Tooltip.d.ts.map +1 -1
- package/dist/kit/Tooltip.js +5 -2
- package/dist/kit/Tooltip.js.map +1 -1
- package/dist/theme/ThemeScope.d.ts +30 -0
- package/dist/theme/ThemeScope.d.ts.map +1 -0
- package/dist/theme/ThemeScope.js +61 -0
- package/dist/theme/ThemeScope.js.map +1 -0
- package/dist/theme/brand.d.ts +2 -1
- package/dist/theme/brand.d.ts.map +1 -1
- package/dist/theme/brand.js +10 -6
- package/dist/theme/brand.js.map +1 -1
- package/dist/theme/scope.d.ts +23 -0
- package/dist/theme/scope.d.ts.map +1 -0
- package/dist/theme/scope.js +32 -0
- package/dist/theme/scope.js.map +1 -0
- package/dist/theme/tokens.d.ts +2 -1
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +65 -100
- package/dist/theme/tokens.js.map +1 -1
- package/package.json +1 -1
package/dist/kit/LogView.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, 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";
|
|
6
6
|
import { AppButton } from "./Button.js";
|
|
7
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
8
|
+
function fmtAt(at) {
|
|
9
|
+
if (typeof at === "string")
|
|
10
|
+
return at;
|
|
11
|
+
const d = at instanceof Date ? at : new Date(at);
|
|
12
|
+
if (Number.isNaN(d.getTime()))
|
|
13
|
+
return "";
|
|
14
|
+
return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
|
|
15
|
+
}
|
|
7
16
|
const Sur = styled.pre `
|
|
8
17
|
margin: 0;
|
|
9
18
|
padding: 12px 16px;
|
|
@@ -12,12 +21,14 @@ const Sur = styled.pre `
|
|
|
12
21
|
font-family: ${v.mono};
|
|
13
22
|
font-size: 11.5px;
|
|
14
23
|
line-height: 1.75;
|
|
15
|
-
overflow: auto;
|
|
16
|
-
height: ${(p) => p.$h ?? 420}px;
|
|
24
|
+
${(p) => (p.$flow ? "" : `overflow: auto; height: ${p.$h ?? 420}px;`)}
|
|
17
25
|
white-space: pre-wrap;
|
|
18
26
|
word-break: break-word;
|
|
19
27
|
`;
|
|
20
28
|
const Ts = styled.span `color: ${v.logDim}; user-select: none;`;
|
|
29
|
+
const levelColor = (l) => (l === "error" ? v.danger : l === "warn" ? v.warning : l === "info" ? v.info : v.logDim);
|
|
30
|
+
const Lvl = styled.span `color: ${(p) => levelColor(p.$l)}; text-transform: uppercase; font-size: 10.5px; letter-spacing: 0.04em;`;
|
|
31
|
+
const Src = styled.span `color: ${v.logDim};`;
|
|
21
32
|
const Err = styled.span `color: ${v.danger};`;
|
|
22
33
|
const Rule = styled.div `
|
|
23
34
|
display: flex; align-items: center; gap: 8px;
|
|
@@ -25,17 +36,48 @@ const Rule = styled.div `
|
|
|
25
36
|
margin: 4px 0;
|
|
26
37
|
&::before, &::after { content: ""; flex: 1 1 auto; border-top: 1px dashed ${v.logDim}; opacity: 0.6; }
|
|
27
38
|
`;
|
|
28
|
-
|
|
39
|
+
const Boot = styled.div `
|
|
40
|
+
margin: 6px -16px;
|
|
41
|
+
padding: 3px 16px;
|
|
42
|
+
border-top: 1px solid ${v.logDim};
|
|
43
|
+
border-bottom: 1px solid ${v.logDim};
|
|
44
|
+
color: ${v.logDim};
|
|
45
|
+
font-size: 10.5px;
|
|
46
|
+
letter-spacing: 0.1em;
|
|
47
|
+
text-transform: uppercase;
|
|
48
|
+
`;
|
|
49
|
+
const Fields = styled.span `margin-left: 8px; color: ${v.logDim}; font-size: 10.5px; overflow-wrap: anywhere;`;
|
|
50
|
+
const Older = styled.button `
|
|
51
|
+
display: block;
|
|
52
|
+
width: 100%;
|
|
53
|
+
margin: 0 0 8px;
|
|
54
|
+
padding: 5px;
|
|
55
|
+
border: 1px solid ${v.logDim};
|
|
56
|
+
border-radius: ${v.rCtl};
|
|
57
|
+
background: transparent;
|
|
58
|
+
color: ${v.logText};
|
|
59
|
+
font: inherit;
|
|
60
|
+
font-size: 11px;
|
|
61
|
+
cursor: pointer;
|
|
62
|
+
&:hover:not(:disabled) { background: ${v.hover}; }
|
|
63
|
+
&:disabled { cursor: default; opacity: 0.6; }
|
|
64
|
+
`;
|
|
65
|
+
const Foot = styled.div `margin-top: 8px; color: ${v.logDim}; font-size: 10.5px; text-align: center;`;
|
|
66
|
+
export function LogSurface({ lines, height, flow, order = "oldest-first", follow = true, placeholder = "waiting for output…", onLoadOlder, loadingOlder, olderLabel = "Load older", footer }) {
|
|
29
67
|
const ref = useRef(null);
|
|
68
|
+
const newest = order === "newest-first";
|
|
69
|
+
const shown = newest ? [...lines].reverse() : lines;
|
|
70
|
+
const older = onLoadOlder ? _jsx(Older, { type: "button", disabled: loadingOlder, onClick: onLoadOlder, style: newest ? { margin: "8px 0 0" } : undefined, children: loadingOlder ? "Loading…" : olderLabel }) : null;
|
|
30
71
|
useEffect(() => {
|
|
31
|
-
if (follow && ref.current)
|
|
32
|
-
ref.current.scrollTop = ref.current.scrollHeight;
|
|
33
|
-
}, [lines, follow]);
|
|
34
|
-
return (_jsxs(Sur, { ref: ref, "$h": height, children: [lines.length === 0 ? _jsx(Ts, { children: placeholder }) : null,
|
|
72
|
+
if (follow && !flow && ref.current)
|
|
73
|
+
ref.current.scrollTop = newest ? 0 : ref.current.scrollHeight;
|
|
74
|
+
}, [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) :
|
|
76
|
+
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] }));
|
|
35
77
|
}
|
|
36
78
|
/** LogPanel: LogSurface inside a Panel with a follow toggle and status slot. */
|
|
37
|
-
export function LogPanel({ title, lines, status, height, actions, placeholder }) {
|
|
79
|
+
export function LogPanel({ title, lines, status, height, flow, order, actions, placeholder, onLoadOlder, loadingOlder, olderLabel, footer }) {
|
|
38
80
|
const [follow, setFollow] = useState(true);
|
|
39
|
-
return (_jsxs(Panel, { children: [_jsxs(PanelHead, { children: [_jsx(PanelTitle, { children: title }), status, _jsxs(PanelActions, { children: [actions, _jsx(AppButton, { size: "xs", variant: follow ? "quiet" : "ghost", onClick: () => setFollow(!follow), children: follow ? "Following" : "Follow" })] })] }), _jsx(LogSurface, { lines: lines, height: height, follow: follow, ...(placeholder !== undefined ? { placeholder } : {}) })] }));
|
|
81
|
+
return (_jsxs(Panel, { children: [_jsxs(PanelHead, { children: [_jsx(PanelTitle, { children: title }), status, _jsxs(PanelActions, { children: [actions, flow ? null : (_jsx(AppButton, { size: "xs", variant: follow ? "quiet" : "ghost", onClick: () => setFollow(!follow), children: follow ? "Following" : "Follow" }))] })] }), _jsx(LogSurface, { lines: lines, height: height, follow: follow, ...(flow !== undefined ? { flow } : {}), ...(order !== undefined ? { order } : {}), ...(placeholder !== undefined ? { placeholder } : {}), onLoadOlder: onLoadOlder, loadingOlder: loadingOlder, ...(olderLabel !== undefined ? { olderLabel } : {}), footer: footer })] }));
|
|
40
82
|
}
|
|
41
83
|
//# sourceMappingURL=LogView.js.map
|
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;AACpD,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAa,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"LogView.js","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"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"}
|
package/dist/kit/Marker.d.ts
CHANGED
|
@@ -39,4 +39,23 @@ export declare function PersonChip({ name, email, avatarUrl, size, nameless, emp
|
|
|
39
39
|
}): import("react").JSX.Element;
|
|
40
40
|
/** initials: the one or two letters that stand in for a name or an address. */
|
|
41
41
|
export declare function initials(name: string): string;
|
|
42
|
+
export interface AvatarStackPerson {
|
|
43
|
+
name?: string | undefined;
|
|
44
|
+
email?: string | undefined;
|
|
45
|
+
avatarUrl?: string | undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* AvatarStack: who, several at once — overlapping avatars (picture, else
|
|
49
|
+
* initials) with the surplus past `max` folded into a "+N". It is a single
|
|
50
|
+
* image to assistive tech, labelled with the names (or `label`); hovering an
|
|
51
|
+
* avatar shows that person.
|
|
52
|
+
*/
|
|
53
|
+
export declare function AvatarStack({ people, max, size, label }: {
|
|
54
|
+
people: AvatarStackPerson[];
|
|
55
|
+
/** avatars shown before the rest become "+N" */
|
|
56
|
+
max?: number | undefined;
|
|
57
|
+
size?: number | undefined;
|
|
58
|
+
/** the accessible label; defaults to the names, "Ann, Bo and 3 more" */
|
|
59
|
+
label?: string | undefined;
|
|
60
|
+
}): import("react").JSX.Element | null;
|
|
42
61
|
//# sourceMappingURL=Marker.d.ts.map
|
package/dist/kit/Marker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Marker.d.ts","sourceRoot":"","sources":["../../src/kit/Marker.tsx"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,IAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAEA;AAmBD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAU,EAAE,KAAK,EAAE,EAAE;IACtD,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAQA;AA2BD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAS,EAAE,QAAQ,EAAE,KAAoB,EAAE,EAAE;IAChG,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAgBA;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7C"}
|
|
1
|
+
{"version":3,"file":"Marker.d.ts","sourceRoot":"","sources":["../../src/kit/Marker.tsx"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,IAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAEA;AAmBD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAU,EAAE,KAAK,EAAE,EAAE;IACtD,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAQA;AA2BD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAS,EAAE,QAAQ,EAAE,KAAoB,EAAE,EAAE;IAChG,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAgBA;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAiCD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,GAAO,EAAE,IAAS,EAAE,KAAK,EAAE,EAAE;IACjE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,sCAuBA"}
|
package/dist/kit/Marker.js
CHANGED
|
@@ -96,4 +96,54 @@ export function initials(name) {
|
|
|
96
96
|
return parts[0].slice(0, 2).toUpperCase();
|
|
97
97
|
return (parts[0][0] + parts[1][0]).toUpperCase();
|
|
98
98
|
}
|
|
99
|
+
const StackWrap = styled.span `
|
|
100
|
+
display: inline-flex;
|
|
101
|
+
align-items: center;
|
|
102
|
+
flex: none;
|
|
103
|
+
> .slot {
|
|
104
|
+
display: inline-grid;
|
|
105
|
+
border-radius: 50%;
|
|
106
|
+
/* opaque ground and a ring, so the translucent avatar fill does not show
|
|
107
|
+
the one underneath and neighbours read as separate */
|
|
108
|
+
background: ${v.surface};
|
|
109
|
+
box-shadow: 0 0 0 2px ${v.surface};
|
|
110
|
+
& + .slot { margin-left: -${(p) => Math.round(p.$size * 0.3)}px; }
|
|
111
|
+
}
|
|
112
|
+
> .more {
|
|
113
|
+
display: inline-grid;
|
|
114
|
+
place-items: center;
|
|
115
|
+
height: ${(p) => p.$size}px;
|
|
116
|
+
min-width: ${(p) => p.$size}px;
|
|
117
|
+
padding: 0 4px;
|
|
118
|
+
box-sizing: border-box;
|
|
119
|
+
margin-left: -${(p) => Math.round(p.$size * 0.3)}px;
|
|
120
|
+
border-radius: 999px;
|
|
121
|
+
background: ${v.hover};
|
|
122
|
+
color: ${v.muted};
|
|
123
|
+
box-shadow: 0 0 0 2px ${v.surface};
|
|
124
|
+
font-size: ${(p) => Math.max(9, Math.round(p.$size * 0.42))}px;
|
|
125
|
+
font-weight: 700;
|
|
126
|
+
font-variant-numeric: tabular-nums;
|
|
127
|
+
}
|
|
128
|
+
`;
|
|
129
|
+
/**
|
|
130
|
+
* AvatarStack: who, several at once — overlapping avatars (picture, else
|
|
131
|
+
* initials) with the surplus past `max` folded into a "+N". It is a single
|
|
132
|
+
* image to assistive tech, labelled with the names (or `label`); hovering an
|
|
133
|
+
* avatar shows that person.
|
|
134
|
+
*/
|
|
135
|
+
export function AvatarStack({ people, max = 4, size = 24, label }) {
|
|
136
|
+
if (people.length === 0)
|
|
137
|
+
return null;
|
|
138
|
+
const names = people.map((p) => p.name || p.email || "Unknown");
|
|
139
|
+
const shown = people.slice(0, Math.max(1, max));
|
|
140
|
+
const rest = people.length - shown.length;
|
|
141
|
+
const auto = rest > 0
|
|
142
|
+
? `${names.slice(0, shown.length).join(", ")} and ${rest} more`
|
|
143
|
+
: names.length > 1 ? `${names.slice(0, -1).join(", ")} and ${names[names.length - 1]}` : names[0];
|
|
144
|
+
return (_jsxs(StackWrap, { "$size": size, role: "img", "aria-label": label ?? auto, children: [shown.map((p, i) => {
|
|
145
|
+
const n = p.name || p.email || "";
|
|
146
|
+
return (_jsx("span", { className: "slot", title: p.email || n || undefined, "aria-hidden": "true", children: _jsx(Avatar, { "$size": size, "$empty": !n, children: !n ? _jsx(Icon, { name: "user", size: Math.round(size * 0.5) }) : p.avatarUrl ? _jsx("img", { src: p.avatarUrl, alt: "" }) : initials(n) }) }, i));
|
|
147
|
+
}), rest > 0 ? _jsxs("span", { className: "more", "aria-hidden": "true", title: names.slice(shown.length).join(", "), children: ["+", rest] }) : null] }));
|
|
148
|
+
}
|
|
99
149
|
//# sourceMappingURL=Marker.js.map
|
package/dist/kit/Marker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Marker.js","sourceRoot":"","sources":["../../src/kit/Marker.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Marker.js","sourceRoot":"","sources":["../../src/kit/Marker.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAY,CAAC;AAElC,8EAA8E;AAC9E,wEAAwE;AACxE,+EAA+E;AAC/E,8DAA8D;AAE9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAgE;;WAEhF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;YACb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;;;IAGtB,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,OAAO;IACP,CAAC,CAAC,GAAG,CAAA,qBAAqB,CAAC,CAAC,IAAI,4BAA4B;IAC5D,CAAC,CAAC,GAAG,CAAA,eAAe,CAAC,CAAC,IAAI,GAAG;CAClC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAKrD;IACC,OAAO,KAAC,OAAO,YAAO,MAAM,IAAI,CAAC,CAAC,KAAK,WAAS,IAAI,aAAW,MAAM,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAC1F,CAAC;AAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAqB;;;;;WAKtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;CAC/C,CAAC;AAEF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAA8B;;;YAGtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;;;aAGV,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;CACrC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,EAKnD;IACC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CACL,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAU,EAAE,KAAK,CAAC,YACrC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAC,GAAG,UAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,SAAO,CAAC,GAAG,EAAE,IAA5C,CAAC,CAA+C,CAAC,GAC5F,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAiD;;;WAGhE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;YACb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;;gBAEV,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;WAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;eACjC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;;;;;CAK5D,CAAC;AAEF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAkC;;;;;;WAMrD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;CAE9C,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,GAAG,YAAY,EAQ7F;IACC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CACL,MAAC,UAAU,oBAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,aACpD,KAAC,MAAM,aAAQ,IAAI,4BAAS,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAI,GAAS,EACtF,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAO,KAAK,GAAQ,IAC5B,CACd,CAAC;IACJ,CAAC;IACD,OAAO,CACL,MAAC,UAAU,IAAC,KAAK,EAAE,KAAK,IAAI,KAAK,aAC/B,KAAC,MAAM,aAAQ,IAAI,YAAG,SAAS,CAAC,CAAC,CAAC,cAAK,GAAG,EAAE,SAAS,EAAE,GAAG,EAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAU,EAC3F,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAO,KAAK,GAAQ,IAC5B,CACd,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACvD,CAAC;AAQD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAmB;;;;;;;;;kBAS9B,CAAC,CAAC,OAAO;4BACC,CAAC,CAAC,OAAO;gCACL,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC;;;;;cAKlD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;iBACX,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;;;oBAGX,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC;;kBAElC,CAAC,CAAC,KAAK;aACZ,CAAC,CAAC,KAAK;4BACQ,CAAC,CAAC,OAAO;iBACpB,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;;;;CAI9D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAO9D;IACC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;QACnB,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO;QAC/D,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;IACrG,OAAO,CACL,MAAC,SAAS,aAAQ,IAAI,EAAE,IAAI,EAAC,KAAK,gBAAa,KAAK,IAAI,IAAI,aACzD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAClB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAClC,OAAO,CACL,eAAc,SAAS,EAAC,MAAM,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,SAAS,iBAAc,MAAM,YACjF,KAAC,MAAM,aAAQ,IAAI,YAAU,CAAC,CAAC,YAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAK,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAChH,IAHA,CAAC,CAIL,CACR,CAAC;YACJ,CAAC,CAAC,EACD,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAM,SAAS,EAAC,MAAM,iBAAa,MAAM,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAI,IAAI,IAAQ,CAAC,CAAC,CAAC,IAAI,IAC9G,CACb,CAAC;AACJ,CAAC"}
|
package/dist/kit/Modal.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ReactNode } from "react";
|
|
1
|
+
import { type FormEvent, type ReactNode } from "react";
|
|
2
2
|
import { type IconName } from "./Icon.tsx";
|
|
3
3
|
declare const sizes: {
|
|
4
4
|
readonly sm: 420;
|
|
@@ -8,7 +8,7 @@ declare const sizes: {
|
|
|
8
8
|
readonly full: 0;
|
|
9
9
|
};
|
|
10
10
|
export type EntityModalSize = keyof typeof sizes;
|
|
11
|
-
export declare function EntityModal({ title, sub, icon, size, onClose, dismissable, footer, flush, head, portal, children }: {
|
|
11
|
+
export declare function EntityModal({ title, sub, icon, size, onClose, dismissable, footer, flush, head, portal, onSubmit, children }: {
|
|
12
12
|
title: string;
|
|
13
13
|
/** the line under the title: what is being created, or the entity acted on */
|
|
14
14
|
sub?: ReactNode | undefined;
|
|
@@ -36,7 +36,8 @@ export declare function EntityModal({ title, sub, icon, size, onClose, dismissab
|
|
|
36
36
|
*/
|
|
37
37
|
head?: boolean | undefined;
|
|
38
38
|
/**
|
|
39
|
-
* Render into document.body
|
|
39
|
+
* Render into document.body (inside a ThemeScope, into the scope's host in
|
|
40
|
+
* body, so it keeps the scope's tokens) rather than in place. Rendered in place, a
|
|
40
41
|
* modal opened from inside a transformed element (a draggable card, an
|
|
41
42
|
* animated list) is positioned against that element, not the viewport, and
|
|
42
43
|
* a card with `overflow: hidden` can clip it. Opt-in (1.4) so a modal that
|
|
@@ -46,6 +47,15 @@ export declare function EntityModal({ title, sub, icon, size, onClose, dismissab
|
|
|
46
47
|
* mounted, so a modal open on first load hydrates without a mismatch.
|
|
47
48
|
*/
|
|
48
49
|
portal?: boolean | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Wrap the body and the footer in a <form> with this as its submit (1.5,
|
|
52
|
+
* CON-132), so Enter in a field submits. Give the footer's primary action
|
|
53
|
+
* `type="submit"`: a click then goes through the browser's field validation
|
|
54
|
+
* too, and disabling it disables Enter with it. The default is prevented and
|
|
55
|
+
* the event stops here, so a modal opened from inside another form never
|
|
56
|
+
* submits that one. Without it there is no form, as before.
|
|
57
|
+
*/
|
|
58
|
+
onSubmit?: ((e: FormEvent<HTMLFormElement>) => void) | undefined;
|
|
49
59
|
children: ReactNode;
|
|
50
60
|
}): import("react").JSX.Element;
|
|
51
61
|
/**
|
package/dist/kit/Modal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"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"}
|
package/dist/kit/Modal.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef, useState, useSyncExternalStore } from "react";
|
|
3
3
|
import { createPortal } from "react-dom";
|
|
4
|
+
import { usePortalTarget } from "../theme/ThemeScope.js";
|
|
4
5
|
import styled, { css, keyframes } from "styled-components";
|
|
5
6
|
import { v } from "../theme/tokens.js";
|
|
6
7
|
import { Icon } from "./Icon.js";
|
|
@@ -78,14 +79,39 @@ const Body = styled.div `
|
|
|
78
79
|
> * { flex: 1 1 auto; min-height: 0; }
|
|
79
80
|
`}
|
|
80
81
|
`;
|
|
81
|
-
|
|
82
|
+
// The form `onSubmit` wraps the body and footer in: it takes the card's place
|
|
83
|
+
// in the column, so the body still scrolls under a pinned footer.
|
|
84
|
+
const ModalForm = styled.form `
|
|
85
|
+
flex: 1 1 auto;
|
|
86
|
+
min-height: 0;
|
|
87
|
+
display: flex;
|
|
88
|
+
flex-direction: column;
|
|
89
|
+
`;
|
|
90
|
+
// Enter in a field submits the form natively only when the form has a submit
|
|
91
|
+
// button (or a lone text field). A footer whose primary is still type=button
|
|
92
|
+
// would leave Enter dead, so in that case the modal submits it itself.
|
|
93
|
+
const ENTER_SUBMITS = /^(text|search|email|url|tel|password|number|date|datetime-local|month|time|week)$/;
|
|
94
|
+
function submitOnEnter(e) {
|
|
95
|
+
const t = e.target;
|
|
96
|
+
if (e.key !== "Enter" || e.defaultPrevented || e.nativeEvent.isComposing)
|
|
97
|
+
return;
|
|
98
|
+
if (!(t instanceof HTMLInputElement) || !ENTER_SUBMITS.test(t.type))
|
|
99
|
+
return;
|
|
100
|
+
if (e.currentTarget.querySelector('button[type="submit"], input[type="submit"]'))
|
|
101
|
+
return;
|
|
102
|
+
e.preventDefault();
|
|
103
|
+
e.currentTarget.requestSubmit();
|
|
104
|
+
}
|
|
105
|
+
export function EntityModal({ title, sub, icon, size = "md", onClose, dismissable = true, footer, flush, head = true, portal, onSubmit, children }) {
|
|
82
106
|
const ref = useRef(null);
|
|
83
107
|
// Portal only on the client: the server has no document.body, so it renders
|
|
84
108
|
// in place, and a hydrating render must match it or hydration fails. The
|
|
85
109
|
// server snapshot (false) is what hydration renders with; React re-renders
|
|
86
110
|
// with the client's (true) straight after. A plain client render portals at once.
|
|
87
111
|
const mounted = useSyncExternalStore(noSubscribe, () => true, () => false);
|
|
88
|
-
|
|
112
|
+
// into the nearest ThemeScope's host, so a scoped theme reaches it (CON-148)
|
|
113
|
+
const target = usePortalTarget();
|
|
114
|
+
const portalled = !!portal && mounted && !!target;
|
|
89
115
|
// Always a layer, so Escape never reaches the drawer under a non-dismissable modal.
|
|
90
116
|
useEscapeLayer(true, dismissable ? onClose : undefined);
|
|
91
117
|
// focus goes back to what had it when the modal closes
|
|
@@ -98,10 +124,10 @@ export function EntityModal({ title, sub, icon, size = "md", onClose, dismissabl
|
|
|
98
124
|
ref.current?.focus();
|
|
99
125
|
}, [portalled]);
|
|
100
126
|
const node = (_jsx(Backdrop, { "$full": size === "full", onMouseDown: (e) => { if (dismissable && e.target === e.currentTarget)
|
|
101
|
-
onClose(); }, children: _jsxs(Card, { "$size": size, ref: ref, tabIndex: -1, role: "dialog", "aria-modal": "true", "aria-label": title, children: [head ? (_jsxs(Head, { children: [icon ? _jsx(HeadIcon, { children: _jsx(Icon, { name: icon }) }) : null, _jsxs("div", { style: { minWidth: 0 }, children: [_jsx(Title, { children: title }), sub ? _jsx(Sub, { children: sub }) : null] }), dismissable ? (_jsx(IconButton, { onClick: onClose, "aria-label": "Close", style: { marginLeft: "auto" }, children: _jsx(Icon, { name: "close" }) })) : null] })) : null, _jsx(Body, { "$flush": flush, children: children }), footer ? _jsx(Foot, { children: footer }) : null] }) }));
|
|
127
|
+
onClose(); }, children: _jsxs(Card, { "$size": size, ref: ref, tabIndex: -1, role: "dialog", "aria-modal": "true", "aria-label": title, children: [head ? (_jsxs(Head, { children: [icon ? _jsx(HeadIcon, { children: _jsx(Icon, { name: icon }) }) : null, _jsxs("div", { style: { minWidth: 0 }, children: [_jsx(Title, { children: title }), sub ? _jsx(Sub, { children: sub }) : null] }), dismissable ? (_jsx(IconButton, { onClick: onClose, "aria-label": "Close", style: { marginLeft: "auto" }, children: _jsx(Icon, { name: "close" }) })) : null] })) : null, onSubmit ? (_jsxs(ModalForm, { onSubmit: (e) => { e.preventDefault(); e.stopPropagation(); onSubmit(e); }, onKeyDown: submitOnEnter, children: [_jsx(Body, { "$flush": flush, children: children }), footer ? _jsx(Foot, { children: footer }) : null] })) : (_jsxs(_Fragment, { children: [_jsx(Body, { "$flush": flush, children: children }), footer ? _jsx(Foot, { children: footer }) : null] }))] }) }));
|
|
102
128
|
// in place on the server and the first client render (so hydration matches),
|
|
103
129
|
// portalled from the effect after mount on
|
|
104
|
-
return portalled ? createPortal(node,
|
|
130
|
+
return portalled && target ? createPortal(node, target) : node;
|
|
105
131
|
}
|
|
106
132
|
const HeadIcon = styled.span `
|
|
107
133
|
width: 34px; height: 34px; flex: none;
|
|
@@ -136,7 +162,12 @@ const ConfirmText = styled.p `
|
|
|
136
162
|
export function ConfirmDialog({ title, body, actionLabel, typedValue, danger = true, busy, extra, portal, onConfirm, onClose }) {
|
|
137
163
|
const [typed, setTyped] = useState("");
|
|
138
164
|
const armed = !typedValue || typed === typedValue;
|
|
139
|
-
|
|
165
|
+
// With a typed name, Enter in that field confirms once it matches, as the
|
|
166
|
+
// button does. Without one there is no field of ours to press it in, and a
|
|
167
|
+
// field a caller put in `extra` must not confirm a destructive action.
|
|
168
|
+
const submit = typedValue ? () => { if (armed && !busy)
|
|
169
|
+
onConfirm(); } : undefined;
|
|
170
|
+
return (_jsxs(EntityModal, { title: title, size: "sm", onClose: onClose, portal: portal, onSubmit: submit, children: [_jsx(ConfirmText, { children: body }), extra, typedValue ? (_jsxs("div", { style: { margin: "0 0 14px" }, children: [_jsxs(ConfirmText, { style: { marginBottom: 6 }, children: ["Type ", _jsx("b", { children: typedValue }), " to confirm."] }), _jsx(MonoInput, { autoFocus: true, value: typed, onChange: (e) => setTyped(e.target.value), placeholder: typedValue })] })) : null, _jsxs(ButtonRow, { style: { justifyContent: "flex-end" }, children: [_jsx(AppButton, { variant: "quiet", onClick: onClose, children: "Cancel" }), _jsx(AppButton, { type: submit ? "submit" : "button", variant: danger ? "danger" : "grad", disabled: !armed, loading: busy, onClick: submit ? undefined : onConfirm, children: actionLabel })] })] }));
|
|
140
171
|
}
|
|
141
172
|
/**
|
|
142
173
|
* PromptDialog: a one-field modal for naming things (new file, rename) — the
|
|
@@ -152,11 +183,10 @@ export function PromptDialog({ title, sub, body, label, initial = "", value: con
|
|
|
152
183
|
const setValue = (next) => { setLocal(next); onChange?.(next); };
|
|
153
184
|
const problem = validate ? validate(value) : null;
|
|
154
185
|
const submit = () => {
|
|
155
|
-
if (!value.trim() || problem)
|
|
186
|
+
if (!value.trim() || problem || busy)
|
|
156
187
|
return;
|
|
157
188
|
onSubmit(value.trim());
|
|
158
189
|
};
|
|
159
|
-
return (_jsxs(EntityModal, { title: title, sub: sub, size: "sm", onClose: onClose, portal: portal, children: [body ? _jsx(ConfirmText, { children: body }) : null, extra ? _jsx("div", { style: { margin: "0 0 12px" }, children: extra }) : null, _jsxs("div", { style: { margin: "0 0 6px" }, children: [_jsx(ConfirmText, { style: { marginBottom: 6 }, children: label }), _jsx(MonoInput, { ref: inputRef, autoFocus: !readOnly, value: value, readOnly: readOnly, onChange: (e) => setValue(e.target.value),
|
|
160
|
-
submit(); }, ...(placeholder !== undefined ? { placeholder } : {}) }), problem && value ? _jsx(ConfirmText, { style: { margin: "6px 0 0", color: "var(--x-danger)" }, children: problem }) : null, hint && !(problem && value) ? _jsx(Hint, { style: { margin: "6px 0 0" }, children: hint }) : null] }), _jsxs(ButtonRow, { style: { justifyContent: "flex-end", marginTop: 12 }, children: [_jsx(AppButton, { variant: "quiet", onClick: onClose, children: "Cancel" }), _jsx(AppButton, { variant: "grad", icon: actionIcon, disabled: !value.trim() || !!problem, loading: busy, onClick: submit, children: actionLabel })] })] }));
|
|
190
|
+
return (_jsxs(EntityModal, { title: title, sub: sub, size: "sm", onClose: onClose, portal: portal, onSubmit: submit, children: [body ? _jsx(ConfirmText, { children: body }) : null, extra ? _jsx("div", { style: { margin: "0 0 12px" }, children: extra }) : null, _jsxs("div", { style: { margin: "0 0 6px" }, children: [_jsx(ConfirmText, { style: { marginBottom: 6 }, children: label }), _jsx(MonoInput, { ref: inputRef, autoFocus: !readOnly, value: value, readOnly: readOnly, onChange: (e) => setValue(e.target.value), ...(placeholder !== undefined ? { placeholder } : {}) }), problem && value ? _jsx(ConfirmText, { style: { margin: "6px 0 0", color: "var(--x-danger)" }, children: problem }) : null, hint && !(problem && value) ? _jsx(Hint, { style: { margin: "6px 0 0" }, children: hint }) : null] }), _jsxs(ButtonRow, { style: { justifyContent: "flex-end", marginTop: 12 }, children: [_jsx(AppButton, { variant: "quiet", onClick: onClose, children: "Cancel" }), _jsx(AppButton, { type: "submit", variant: "grad", icon: actionIcon, disabled: !value.trim() || !!problem, loading: busy, children: actionLabel })] })] }));
|
|
161
191
|
}
|
|
162
192
|
//# sourceMappingURL=Modal.js.map
|
package/dist/kit/Modal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"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"}
|
package/dist/kit/Panel.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
1
2
|
/** Panel: the standard bordered surface; brand-tinted inset on the top edge. */
|
|
2
3
|
export declare const Panel: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, "style"> & {
|
|
3
4
|
style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
|
@@ -16,6 +17,26 @@ export declare const PanelBody: import("styled-components/dist/types").IStyledCo
|
|
|
16
17
|
}, {
|
|
17
18
|
$pad?: boolean | undefined;
|
|
18
19
|
}>> & string;
|
|
20
|
+
/**
|
|
21
|
+
* PanelFooter: the band under a panel's body — a quiet line on the left saying
|
|
22
|
+
* what will happen (`PanelFooter` children), the buttons on the right
|
|
23
|
+
* (`PanelActions`, which pushes itself to the end).
|
|
24
|
+
*/
|
|
25
|
+
export declare const PanelFooter: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, "style"> & {
|
|
26
|
+
style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
|
27
|
+
}> & string;
|
|
28
|
+
/**
|
|
29
|
+
* PanelSettingRow: one independent fact and its control inside a settings
|
|
30
|
+
* panel — label and description on the left, the control (a Toggle, a Select,
|
|
31
|
+
* a button) on the right. Rows hairline-separate themselves; put them in a
|
|
32
|
+
* `PanelBody $pad={false}` so they sit flush to the panel's edges.
|
|
33
|
+
*/
|
|
34
|
+
export declare function PanelSettingRow({ label, description, children }: {
|
|
35
|
+
label: ReactNode;
|
|
36
|
+
description?: ReactNode | undefined;
|
|
37
|
+
/** the control */
|
|
38
|
+
children?: ReactNode | undefined;
|
|
39
|
+
}): import("react").JSX.Element;
|
|
19
40
|
/** MicroLabel: uppercase mono kicker used for section heads and field labels. */
|
|
20
41
|
export declare const MicroLabel: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "style"> & {
|
|
21
42
|
style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
package/dist/kit/Panel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,gFAAgF;AAChF,eAAO,MAAM,KAAK;;WAMjB,CAAC;AAEF,eAAO,MAAM,SAAS;;WAQrB,CAAC;AAEF,eAAO,MAAM,UAAU;;WAItB,CAAC;AAEF,eAAO,MAAM,YAAY;;WAKxB,CAAC;AAEF,eAAO,MAAM,SAAS;;;WAAuB,OAAO,GAAG,SAAS;YAE/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW;;WAQvB,CAAC;AAeF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE;IAChE,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,kBAAkB;IAClB,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC,+BAUA;AAED,iFAAiF;AACjF,eAAO,MAAM,UAAU;;WAQtB,CAAC;AAEF;;uBAEuB;AACvB,eAAO,MAAM,WAAW;;WAavB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;gBAA2B,OAAO,GAAG,SAAS;YAIlE,CAAC"}
|
package/dist/kit/Panel.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
2
|
import styled from "styled-components";
|
|
2
3
|
import { v } from "../theme/tokens.js";
|
|
3
4
|
/** Panel: the standard bordered surface; brand-tinted inset on the top edge. */
|
|
@@ -31,6 +32,41 @@ export const PanelActions = styled.div `
|
|
|
31
32
|
export const PanelBody = styled.div `
|
|
32
33
|
padding: ${(p) => (p.$pad === false ? 0 : "14px 16px")};
|
|
33
34
|
`;
|
|
35
|
+
/**
|
|
36
|
+
* PanelFooter: the band under a panel's body — a quiet line on the left saying
|
|
37
|
+
* what will happen (`PanelFooter` children), the buttons on the right
|
|
38
|
+
* (`PanelActions`, which pushes itself to the end).
|
|
39
|
+
*/
|
|
40
|
+
export const PanelFooter = styled.footer `
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
gap: 10px;
|
|
44
|
+
padding: 10px 16px;
|
|
45
|
+
border-top: 1px solid ${v.line};
|
|
46
|
+
font-size: 11.5px;
|
|
47
|
+
color: ${v.faint};
|
|
48
|
+
`;
|
|
49
|
+
const SettingRow = styled.div `
|
|
50
|
+
display: flex;
|
|
51
|
+
align-items: center;
|
|
52
|
+
justify-content: space-between;
|
|
53
|
+
gap: 16px;
|
|
54
|
+
padding: 12px 16px;
|
|
55
|
+
& + & { border-top: 1px solid ${v.line}; }
|
|
56
|
+
.text { min-width: 0; flex: 1 1 auto; }
|
|
57
|
+
.label { font-size: 12.5px; font-weight: 600; }
|
|
58
|
+
.desc { margin-top: 2px; font-size: 11.5px; color: ${v.faint}; line-height: 1.45; }
|
|
59
|
+
.control { flex: none; display: flex; align-items: center; gap: 8px; }
|
|
60
|
+
`;
|
|
61
|
+
/**
|
|
62
|
+
* PanelSettingRow: one independent fact and its control inside a settings
|
|
63
|
+
* panel — label and description on the left, the control (a Toggle, a Select,
|
|
64
|
+
* a button) on the right. Rows hairline-separate themselves; put them in a
|
|
65
|
+
* `PanelBody $pad={false}` so they sit flush to the panel's edges.
|
|
66
|
+
*/
|
|
67
|
+
export function PanelSettingRow({ label, description, children }) {
|
|
68
|
+
return (_jsxs(SettingRow, { children: [_jsxs("div", { className: "text", children: [_jsx("div", { className: "label", children: label }), description ? _jsx("div", { className: "desc", children: description }) : null] }), children ? _jsx("div", { className: "control", children: children }) : null] }));
|
|
69
|
+
}
|
|
34
70
|
/** MicroLabel: uppercase mono kicker used for section heads and field labels. */
|
|
35
71
|
export const MicroLabel = styled.span `
|
|
36
72
|
display: block;
|
package/dist/kit/Panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,gFAAgF;AAChF,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAA;gBACnB,CAAC,CAAC,OAAO;sBACH,CAAC,CAAC,IAAI;mBACT,CAAC,CAAC,MAAM;gCACK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI;;CAEnD,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;6BAKT,CAAC,CAAC,IAAI;;;CAGlC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAA;;;;CAIlC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;CAKrC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAgC;aACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;CACvD,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;0BAKd,CAAC,CAAC,IAAI;;WAErB,CAAC,CAAC,KAAK;CACjB,CAAC;AAEF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;kCAMK,CAAC,CAAC,IAAI;;;uDAGe,CAAC,CAAC,KAAK;;CAE7D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAK7D;IACC,OAAO,CACL,MAAC,UAAU,eACT,eAAK,SAAS,EAAC,MAAM,aACnB,cAAK,SAAS,EAAC,OAAO,YAAE,KAAK,GAAO,EACnC,WAAW,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,MAAM,YAAE,WAAW,GAAO,CAAC,CAAC,CAAC,IAAI,IAC3D,EACL,QAAQ,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,SAAS,YAAE,QAAQ,GAAO,CAAC,CAAC,CAAC,IAAI,IACjD,CACd,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAA;;iBAEpB,CAAC,CAAC,IAAI;;;;;WAKZ,CAAC,CAAC,KAAK;CACjB,CAAC;AAEF;;uBAEuB;AACvB,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAA;;;;WAIzB,CAAC,CAAC,KAAK;;;;;;;;;CASjB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAqC;;;IAGlE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,IAAI,gDAAgD,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,GAAG,CAAC;CAC/I,CAAC"}
|
package/dist/kit/Picker.d.ts
CHANGED
|
@@ -37,11 +37,17 @@ export interface PickerProps<T> {
|
|
|
37
37
|
* (between Button `sm` 30 and `xs` 26); `md` (default) is the 32px field.
|
|
38
38
|
*/
|
|
39
39
|
size?: "sm" | "md" | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Below 700px the list is a bottom sheet across the screen rather than a
|
|
42
|
+
* dropdown hung from the control (default true). Turn it off for a Picker
|
|
43
|
+
* already inside a bottom sheet of its own.
|
|
44
|
+
*/
|
|
45
|
+
sheet?: boolean | undefined;
|
|
40
46
|
}
|
|
41
47
|
/**
|
|
42
48
|
* Picker: choose one from a list whose options can say more than a word.
|
|
43
49
|
* The kit's replacement for `Select`. Options are `ComboOption`s, so a list
|
|
44
50
|
* built for Combobox works here unchanged.
|
|
45
51
|
*/
|
|
46
|
-
export declare function Picker<T>({ options, value, onChange, placeholder, label, id, disabled, searchable, loading, emptyNote, name, width, size, }: PickerProps<T>): import("react").JSX.Element;
|
|
52
|
+
export declare function Picker<T>({ options, value, onChange, placeholder, label, id, disabled, searchable, loading, emptyNote, name, width, size, sheet, }: PickerProps<T>): import("react").JSX.Element;
|
|
47
53
|
//# sourceMappingURL=Picker.d.ts.map
|
package/dist/kit/Picker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Picker.d.ts","sourceRoot":"","sources":["../../src/kit/Picker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAO/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AASlD,MAAM,WAAW,YAAY,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IACrD,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,sEAAsE;IACtE,cAAc,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACvC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"Picker.d.ts","sourceRoot":"","sources":["../../src/kit/Picker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAO/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AASlD,MAAM,WAAW,YAAY,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IACrD,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,sEAAsE;IACtE,cAAc,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACvC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAsFD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,gDAAgD;IAChD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC1C,oCAAoC;IACpC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,kEAAkE;IAClE,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/B;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B;AAKD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,EACxB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAW,EAAE,KAAY,GAC/I,EAAE,WAAW,CAAC,CAAC,CAAC,+BAmMhB"}
|
package/dist/kit/Picker.js
CHANGED
|
@@ -30,6 +30,15 @@ const List = styled.div `
|
|
|
30
30
|
border-radius: ${v.rCard};
|
|
31
31
|
box-shadow: ${v.elev};
|
|
32
32
|
overflow: hidden;
|
|
33
|
+
${(p) => p.$sheet &&
|
|
34
|
+
css `
|
|
35
|
+
@media (max-width: 700px) {
|
|
36
|
+
width: 100% !important;
|
|
37
|
+
max-height: 70vh;
|
|
38
|
+
border-radius: ${v.rCard} ${v.rCard} 0 0;
|
|
39
|
+
border-bottom: none;
|
|
40
|
+
}
|
|
41
|
+
`}
|
|
33
42
|
`;
|
|
34
43
|
const Rows = styled.div `
|
|
35
44
|
overflow-y: auto;
|
|
@@ -79,7 +88,7 @@ const enabled = (o) => !!o && !o.disabled;
|
|
|
79
88
|
* The kit's replacement for `Select`. Options are `ComboOption`s, so a list
|
|
80
89
|
* built for Combobox works here unchanged.
|
|
81
90
|
*/
|
|
82
|
-
export function Picker({ options, value, onChange, placeholder = "Choose…", label, id, disabled, searchable, loading, emptyNote, name, width, size = "md", }) {
|
|
91
|
+
export function Picker({ options, value, onChange, placeholder = "Choose…", label, id, disabled, searchable, loading, emptyNote, name, width, size = "md", sheet = true, }) {
|
|
83
92
|
const field = useField();
|
|
84
93
|
const [open, setOpen] = useState(false);
|
|
85
94
|
const [query, setQuery] = useState("");
|
|
@@ -220,7 +229,7 @@ export function Picker({ options, value, onChange, placeholder = "Choose…", la
|
|
|
220
229
|
// keep focus on the trigger or search box, so the keyboard carries on
|
|
221
230
|
onMouseDown: (e) => e.preventDefault(), onClick: () => pick(i), children: [_jsx("span", { className: "tick", children: isPicked ? _jsx(Icon, { name: "check" }) : null }), _jsxs("span", { className: "body", children: [_jsx("span", { children: o.render }), o.hint ? _jsx("span", { className: "hint", children: o.hint }) : null] })] }, o.key));
|
|
222
231
|
});
|
|
223
|
-
return (_jsxs(Wrap, { ref: wrap, children: [_jsxs(Trigger, { ref: trigger, type: "button", id: id, role: "combobox", "aria-label": label, "aria-labelledby": labelledBy, "aria-haspopup": "listbox", "aria-expanded": open, "aria-controls": open ? listId : undefined, "aria-activedescendant": open && !searchable && active >= 0 ? optId(active) : undefined, "aria-invalid": field?.invalid || undefined, "aria-describedby": field?.describedBy, disabled: disabled, "$placeholder": !picked, "$size": size, onClick: () => (open ? close(false) : openAt()), onKeyDown: onKey, children: [_jsx("span", { className: "val", children: picked ? (picked.selectedRender ?? picked.render) : placeholder }), _jsx("span", { className: "caret", children: loading ? _jsx(Icon, { name: "spinner", spin: true }) : _jsx(Icon, { name: "chevron-down" }) })] }), name !== undefined ? _jsx("input", { type: "hidden", name: name, value: value ?? "" }) : null, open ? (_jsx(Anchored, { anchor: wrap, align: width ? "left" : "stretch", gap: 5, layerRef: layer, children: _jsxs(List, { style: width ? { width } : undefined, children: [searchable ? (_jsx(Find, { ref: find, value: query, placeholder: "Search\u2026", "aria-label": "Search options", "aria-controls": listId, "aria-activedescendant": active >= 0 ? optId(active) : undefined, autoComplete: "off", onChange: (e) => {
|
|
232
|
+
return (_jsxs(Wrap, { ref: wrap, children: [_jsxs(Trigger, { ref: trigger, type: "button", id: id, role: "combobox", "aria-label": label, "aria-labelledby": labelledBy, "aria-haspopup": "listbox", "aria-expanded": open, "aria-controls": open ? listId : undefined, "aria-activedescendant": open && !searchable && active >= 0 ? optId(active) : undefined, "aria-invalid": field?.invalid || undefined, "aria-describedby": field?.describedBy, disabled: disabled, "$placeholder": !picked, "$size": size, onClick: () => (open ? close(false) : openAt()), onKeyDown: onKey, children: [_jsx("span", { className: "val", children: picked ? (picked.selectedRender ?? picked.render) : placeholder }), _jsx("span", { className: "caret", children: loading ? _jsx(Icon, { name: "spinner", spin: true }) : _jsx(Icon, { name: "chevron-down" }) })] }), name !== undefined ? _jsx("input", { type: "hidden", name: name, value: value ?? "" }) : null, open ? (_jsx(Anchored, { anchor: wrap, align: width ? "left" : "stretch", gap: 5, layerRef: layer, sheet: sheet, children: _jsxs(List, { "$sheet": sheet, style: width ? { width } : undefined, children: [searchable ? (_jsx(Find, { ref: find, value: query, placeholder: "Search\u2026", "aria-label": "Search options", "aria-controls": listId, "aria-activedescendant": active >= 0 ? optId(active) : undefined, autoComplete: "off", onChange: (e) => {
|
|
224
233
|
setQuery(e.target.value);
|
|
225
234
|
const nq = e.target.value.trim().toLowerCase();
|
|
226
235
|
const next = nq ? options.filter((o) => textOf(o).includes(nq)) : options;
|