@xeonr/platform-ui 1.5.1 → 1.6.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 +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.map +1 -1
- package/dist/kit/Anchored.js +4 -1
- 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/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/PipelineFlow.d.ts +44 -0
- package/dist/kit/PipelineFlow.d.ts.map +1 -0
- package/dist/kit/PipelineFlow.js +215 -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/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
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
3
|
+
import styled, { css, keyframes } from "styled-components";
|
|
4
|
+
import { v } from "../theme/tokens.js";
|
|
5
|
+
/**
|
|
6
|
+
* Cuts the steps into those before the fan-out, one lane per group, and those
|
|
7
|
+
* after. Lanes are keyed rather than adjacent, so a producer that emits
|
|
8
|
+
* position-major (group A's step 1, group B's step 1, A's step 2…) still gets a
|
|
9
|
+
* row per group; lane order follows first appearance. The grouped block is
|
|
10
|
+
* assumed contiguous — slicing rather than filtering keeps that visible.
|
|
11
|
+
*/
|
|
12
|
+
export function splitPipeline(steps) {
|
|
13
|
+
const first = steps.findIndex((s) => s.group);
|
|
14
|
+
if (first < 0)
|
|
15
|
+
return { before: steps, lanes: [], after: [] };
|
|
16
|
+
let last = first;
|
|
17
|
+
for (let i = steps.length - 1; i > first; i -= 1) {
|
|
18
|
+
if (steps[i].group) {
|
|
19
|
+
last = i;
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const lanes = [];
|
|
24
|
+
const byKey = new Map();
|
|
25
|
+
for (const s of steps) {
|
|
26
|
+
if (!s.group)
|
|
27
|
+
continue;
|
|
28
|
+
let lane = byKey.get(s.group);
|
|
29
|
+
if (!lane) {
|
|
30
|
+
lane = { key: s.group, steps: [] };
|
|
31
|
+
byKey.set(s.group, lane);
|
|
32
|
+
lanes.push(lane);
|
|
33
|
+
}
|
|
34
|
+
lane.steps.push(s);
|
|
35
|
+
}
|
|
36
|
+
return { before: steps.slice(0, first), lanes, after: steps.slice(last + 1) };
|
|
37
|
+
}
|
|
38
|
+
const tone = {
|
|
39
|
+
pending: v.faint,
|
|
40
|
+
running: v.running,
|
|
41
|
+
done: v.success,
|
|
42
|
+
failed: v.danger,
|
|
43
|
+
skipped: v.faint,
|
|
44
|
+
};
|
|
45
|
+
const Wrap = styled.div `
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-direction: column;
|
|
48
|
+
gap: 12px;
|
|
49
|
+
min-width: 0;
|
|
50
|
+
`;
|
|
51
|
+
const Lane = styled.div `
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
gap: 6px;
|
|
55
|
+
min-width: 0;
|
|
56
|
+
padding-left: 14px;
|
|
57
|
+
border-left: 1px solid ${v.line2};
|
|
58
|
+
`;
|
|
59
|
+
const LaneLabel = styled.span `
|
|
60
|
+
font-size: 11px;
|
|
61
|
+
font-weight: 600;
|
|
62
|
+
color: ${v.muted};
|
|
63
|
+
`;
|
|
64
|
+
const Row = styled.ol `
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: flex-start;
|
|
67
|
+
margin: 0;
|
|
68
|
+
padding: 0;
|
|
69
|
+
list-style: none;
|
|
70
|
+
min-width: 0;
|
|
71
|
+
${(p) => p.$stacked && css `
|
|
72
|
+
flex-direction: column;
|
|
73
|
+
gap: 8px;
|
|
74
|
+
`}
|
|
75
|
+
`;
|
|
76
|
+
/* The rule between two steps takes the colour of the step behind it, so a
|
|
77
|
+
completed run reads as one continuous line. Hidden once stacked: the gap
|
|
78
|
+
already says the same thing. */
|
|
79
|
+
const Link = styled.li `
|
|
80
|
+
flex: 1 1 14px;
|
|
81
|
+
min-width: 14px;
|
|
82
|
+
height: 1px;
|
|
83
|
+
margin-top: 8px;
|
|
84
|
+
list-style: none;
|
|
85
|
+
background: ${(p) => (p.$state === "pending" || p.$state === "skipped" ? v.line2 : tone[p.$state])};
|
|
86
|
+
${(p) => p.$stacked && css `display: none;`}
|
|
87
|
+
`;
|
|
88
|
+
const Step = styled.li `
|
|
89
|
+
display: block;
|
|
90
|
+
min-width: 0;
|
|
91
|
+
flex: ${(p) => (p.$state === "running" ? "1 1 auto" : "0 1 auto")};
|
|
92
|
+
max-width: ${(p) => (p.$stacked ? "100%" : p.$state === "running" ? "32rem" : "14rem")};
|
|
93
|
+
${(p) => p.$state === "skipped" && css `opacity: 0.6;`}
|
|
94
|
+
`;
|
|
95
|
+
const Head = styled.span `
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
gap: 8px;
|
|
99
|
+
min-width: 0;
|
|
100
|
+
`;
|
|
101
|
+
/* Filled once the step has happened, hollow while it is merely expected: a
|
|
102
|
+
step that is ahead must not read as a step that is done. */
|
|
103
|
+
const Dot = styled.span `
|
|
104
|
+
flex: none;
|
|
105
|
+
width: 15px;
|
|
106
|
+
height: 15px;
|
|
107
|
+
border-radius: 50%;
|
|
108
|
+
border: 2px solid ${(p) => tone[p.$state]};
|
|
109
|
+
background: ${(p) => (p.$state === "pending" ? "transparent" : tone[p.$state])};
|
|
110
|
+
`;
|
|
111
|
+
const Label = styled.span `
|
|
112
|
+
font-size: 13px;
|
|
113
|
+
font-weight: ${(p) => (p.$state === "running" ? 650 : 400)};
|
|
114
|
+
color: ${(p) => (p.$state === "pending" || p.$state === "skipped" ? v.faint : v.text)};
|
|
115
|
+
min-width: 0;
|
|
116
|
+
/* a label that cannot fit is cut short (its whole text is the title), never
|
|
117
|
+
drawn over its neighbour */
|
|
118
|
+
overflow: hidden;
|
|
119
|
+
text-overflow: ellipsis;
|
|
120
|
+
white-space: nowrap;
|
|
121
|
+
`;
|
|
122
|
+
const Meta = styled.span `
|
|
123
|
+
display: block;
|
|
124
|
+
margin: 2px 0 0 23px;
|
|
125
|
+
font-size: 11px;
|
|
126
|
+
color: ${v.faint};
|
|
127
|
+
overflow: hidden;
|
|
128
|
+
text-overflow: ellipsis;
|
|
129
|
+
white-space: nowrap;
|
|
130
|
+
`;
|
|
131
|
+
const slide = keyframes `
|
|
132
|
+
from { transform: translateX(-100%); }
|
|
133
|
+
to { transform: translateX(400%); }
|
|
134
|
+
`;
|
|
135
|
+
const Bar = styled.span `
|
|
136
|
+
display: block;
|
|
137
|
+
margin: 5px 0 0 23px;
|
|
138
|
+
max-width: 192px;
|
|
139
|
+
height: 3px;
|
|
140
|
+
overflow: hidden;
|
|
141
|
+
border-radius: 999px;
|
|
142
|
+
background: ${v.field};
|
|
143
|
+
|
|
144
|
+
&::after {
|
|
145
|
+
content: "";
|
|
146
|
+
display: block;
|
|
147
|
+
height: 100%;
|
|
148
|
+
border-radius: 999px;
|
|
149
|
+
background: ${v.grad90};
|
|
150
|
+
/* the figure arrives as a custom property, so a poll does not mint a class per value */
|
|
151
|
+
width: ${(p) => (p.$indeterminate ? "25%" : "clamp(0%, calc(var(--value, 0) * 100%), 100%)")};
|
|
152
|
+
${(p) => p.$indeterminate && css `animation: ${slide} 2.4s ease-in-out infinite;`}
|
|
153
|
+
}
|
|
154
|
+
@media (prefers-reduced-motion: reduce) { &::after { animation: none; } }
|
|
155
|
+
`;
|
|
156
|
+
const useIsoLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
157
|
+
/** A step's dot and the gap after it, and the shortest rule between two steps. */
|
|
158
|
+
const DOT_AND_GAP = 23;
|
|
159
|
+
const LINK_MIN = 14;
|
|
160
|
+
/**
|
|
161
|
+
* A row stacks when its steps, at their natural width, would not fit across
|
|
162
|
+
* it. The labels' scrollWidth is their natural width whether they are drawn
|
|
163
|
+
* cut short (in a row) or whole (stacked), so the decision does not flip-flop
|
|
164
|
+
* as the layout changes under it.
|
|
165
|
+
*/
|
|
166
|
+
function StepRow({ steps, width }) {
|
|
167
|
+
const row = useRef(null);
|
|
168
|
+
const [need, setNeed] = useState(null);
|
|
169
|
+
useIsoLayoutEffect(() => {
|
|
170
|
+
const el = row.current;
|
|
171
|
+
if (!el)
|
|
172
|
+
return;
|
|
173
|
+
let total = (steps.length - 1) * LINK_MIN;
|
|
174
|
+
el.querySelectorAll("[data-pipeline-label]").forEach((l) => { total += l.scrollWidth + DOT_AND_GAP; });
|
|
175
|
+
setNeed(total);
|
|
176
|
+
}, [steps, width]);
|
|
177
|
+
const stacked = width !== null && need !== null && width < need;
|
|
178
|
+
return (_jsx(Row, { ref: row, "$stacked": stacked, "data-stacked": stacked || undefined, children: steps.map((s, i) => (_jsxs(Fragment, { children: [i > 0 ? _jsx(Link, { "$state": steps[i - 1].state, "$stacked": stacked, "aria-hidden": true }) : null, _jsxs(Step, { "$state": s.state, "$stacked": stacked, "data-state": s.state, "aria-current": s.state === "running" ? "step" : undefined, children: [_jsxs(Head, { children: [_jsx(Dot, { "$state": s.state, "aria-hidden": true }), _jsx(Label, { "$state": s.state, "data-pipeline-label": true, title: typeof s.label === "string" ? s.label : undefined, children: s.label }), _jsx("span", { style: SR_ONLY, children: `, ${s.state}` })] }), s.meta ? _jsx(Meta, { title: typeof s.meta === "string" ? s.meta : undefined, children: s.meta }) : null, s.state === "running" && s.progress !== undefined ? (_jsx(Bar, { role: "progressbar", "aria-valuemin": 0, "aria-valuemax": 100, ...(s.progress === "indeterminate" ? {} : { "aria-valuenow": Math.round(s.progress * 100) }), "$indeterminate": s.progress === "indeterminate", style: s.progress === "indeterminate" ? undefined : { "--value": s.progress } })) : null] })] }, s.id))) }));
|
|
179
|
+
}
|
|
180
|
+
/** The element's content width, followed as it changes; null until measured (and on the server). */
|
|
181
|
+
function useWidth(ref, mounted) {
|
|
182
|
+
const [width, setWidth] = useState(null);
|
|
183
|
+
useIsoLayoutEffect(() => {
|
|
184
|
+
const el = ref.current;
|
|
185
|
+
if (!el)
|
|
186
|
+
return;
|
|
187
|
+
const read = () => setWidth(el.clientWidth);
|
|
188
|
+
read();
|
|
189
|
+
if (typeof ResizeObserver === "undefined")
|
|
190
|
+
return;
|
|
191
|
+
const ro = new ResizeObserver(read);
|
|
192
|
+
ro.observe(el);
|
|
193
|
+
return () => ro.disconnect();
|
|
194
|
+
}, [ref, mounted]);
|
|
195
|
+
return width;
|
|
196
|
+
}
|
|
197
|
+
const SR_ONLY = {
|
|
198
|
+
position: "absolute", width: 1, height: 1, overflow: "hidden", clip: "rect(0 0 0 0)", whiteSpace: "nowrap",
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* PipelineFlow: ordered steps with a state each, drawn as a connected row (a
|
|
202
|
+
* stack when narrow). A step's `meta` is the line under it and `progress` the
|
|
203
|
+
* bar under a running step (`"indeterminate"` sweeps, for work that finds out
|
|
204
|
+
* its size by finishing). Steps carrying a `group` are lifted into a row per
|
|
205
|
+
* group between the trunk steps that bracket them; `groups` names the lanes.
|
|
206
|
+
*/
|
|
207
|
+
export function PipelineFlow({ steps, groups, label = "Pipeline" }) {
|
|
208
|
+
const ref = useRef(null);
|
|
209
|
+
const width = useWidth(ref, steps.length > 0);
|
|
210
|
+
if (steps.length === 0)
|
|
211
|
+
return null;
|
|
212
|
+
const { before, lanes, after } = splitPipeline(steps);
|
|
213
|
+
return (_jsxs(Wrap, { ref: ref, role: "group", "aria-label": label, children: [before.length > 0 ? _jsx(StepRow, { steps: before, width: width }) : null, lanes.map((l) => (_jsxs(Lane, { children: [_jsx(LaneLabel, { children: groups?.[l.key] ?? l.key }), _jsx(StepRow, { steps: l.steps, width: width })] }, l.key))), after.length > 0 ? _jsx(StepRow, { steps: after, width: width }) : null] }));
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=PipelineFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PipelineFlow.js","sourceRoot":"","sources":["../../src/kit/PipelineFlow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../src/kit/Popover.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../src/kit/Popover.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA2CrF,eAAO,MAAM,WAAW;;WAgBvB,CAAC;AAEF,eAAO,MAAM,WAAW;;;aAAyB,OAAO,GAAG,SAAS;YAMnE,CAAC;AAEF,eAAO,MAAM,WAAW;;WAKvB,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,YAAY;;WAIxB,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,uEAAuE;IACvE,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/C,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAW,EAAE,IAAW,EAAE,KAAK,EAAE,IAAe,EAAE,KAAe,EAAE,QAAQ,EAAE,EAAE,YAAY,+BAmE5I"}
|
package/dist/kit/Popover.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
3
3
|
import { createPortal } from "react-dom";
|
|
4
|
+
import { usePortalTarget } from "../theme/ThemeScope.js";
|
|
4
5
|
import styled from "styled-components";
|
|
5
6
|
import { v } from "../theme/tokens.js";
|
|
6
7
|
import { useEscapeLayer } from "./layers.js";
|
|
@@ -75,6 +76,8 @@ export const PopoverGroup = styled.div `
|
|
|
75
76
|
`;
|
|
76
77
|
export function Popover({ anchor, onClose, label, width = 268, flip = true, sheet, side = "bottom", align = "start", children }) {
|
|
77
78
|
const ref = useRef(null);
|
|
79
|
+
// the nearest ThemeScope's host, or body (CON-148)
|
|
80
|
+
const portalTarget = usePortalTarget();
|
|
78
81
|
const [pos, setPos] = useState({ top: anchor.bottom + 4, left: anchor.left });
|
|
79
82
|
// Escape closes this before any drawer or modal it sits in (CON-59)
|
|
80
83
|
useEscapeLayer(true, onClose);
|
|
@@ -130,6 +133,6 @@ export function Popover({ anchor, onClose, label, width = 268, flip = true, shee
|
|
|
130
133
|
window.clearTimeout(id);
|
|
131
134
|
};
|
|
132
135
|
}, [onClose]);
|
|
133
|
-
return createPortal(_jsx(Sheet, { ref: ref, "$width": width, "$sheet": sheet, "$raised": raised, style: { top: pos.top, left: pos.left }, role: "dialog", "aria-label": label, children: children }), document.body);
|
|
136
|
+
return createPortal(_jsx(Sheet, { ref: ref, "$width": width, "$sheet": sheet, "$raised": raised, style: { top: pos.top, left: pos.left }, role: "dialog", "aria-label": label, children: children }), portalTarget ?? document.body);
|
|
134
137
|
}
|
|
135
138
|
//# sourceMappingURL=Popover.js.map
|
package/dist/kit/Popover.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../src/kit/Popover.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../src/kit/Popover.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAyB,CAAC;AAC1D,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,yCAAyC;AACzC,EAAE;AACF,6EAA6E;AAC7E,0EAA0E;AAC1E,8BAA8B;AAE9B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAiF;;;aAG5F,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;WACvD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;;;;mBAIP,CAAC,CAAC,KAAK;sBACJ,CAAC,CAAC,KAAK;gBACb,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,IAAI;;;;IAIlB,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,MAAM;IACR;;;;;uBAKmB,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK;;GAEtC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;6BAKR,CAAC,CAAC,IAAI;iBAClB,CAAC,CAAC,IAAI;;WAEZ,CAAC,CAAC,IAAI;;;;mBAIE,CAAC,CAAC,IAAI;;aAEZ,CAAC,CAAC,KAAK;;CAEnB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAkC;;aAE1D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;;SAG7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;CACvC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA;;;;0BAIX,CAAC,CAAC,IAAI;CAC/B,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;6BAET,CAAC,CAAC,IAAI;;CAElC,CAAC;AA4BF,MAAM,UAAU,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,QAAQ,EAAE,KAAK,GAAG,OAAO,EAAE,QAAQ,EAAgB;IAC3I,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,mDAAmD;IACnD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9E,oEAAoE;IACpE,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,mFAAmF;IACnF,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAEpH,2EAA2E;IAC3E,mDAAmD;IACnD,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC;QACjD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC;QACZ,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAE5E,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;YACzC,MAAM,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACjI,MAAM,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3I,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,2EAA2E;QAC3E,mDAAmD;QACnD,MAAM,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACzI,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAW,CAAC;QAChB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClG,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,CAAC,CAAa,EAAE,EAAE;YAC/B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC;gBAAE,OAAO,EAAE,CAAC;QAC1D,CAAC,CAAC;QACF,wEAAwE;QACxE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACtF,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,YAAY,CACjB,KAAC,KAAK,IAAC,GAAG,EAAE,GAAG,YAAU,KAAK,YAAU,KAAK,aAAW,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAC,QAAQ,gBAAa,KAAK,YACrI,QAAQ,GACH,EACR,YAAY,IAAI,QAAQ,CAAC,IAAI,CAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
type MarkerTone = "brand" | "info" | "warn";
|
|
3
|
+
/** The line between two rows, and how it moves. */
|
|
4
|
+
export type ReorderMarker<T> = {
|
|
5
|
+
/** the index of the row the line sits under; null draws no line */
|
|
6
|
+
after: number | null;
|
|
7
|
+
/** the line moved (to under row `after`) or, with null, was cleared */
|
|
8
|
+
onMove: (after: number | null) => void;
|
|
9
|
+
/** what the line says */
|
|
10
|
+
label: ReactNode;
|
|
11
|
+
/** the line's name in button labels and announcements, e.g. "Cutoff" */
|
|
12
|
+
name: string;
|
|
13
|
+
tone?: MarkerTone | undefined;
|
|
14
|
+
/** which rows can hold the line (default: every row) */
|
|
15
|
+
canHold?: ((item: T, index: number) => boolean) | undefined;
|
|
16
|
+
/** the offer, revealed on a row's hover or focus, to put the line under it; omit for none */
|
|
17
|
+
placeLabel?: ReactNode | undefined;
|
|
18
|
+
/** whether the line has a clear button */
|
|
19
|
+
clearable?: boolean | undefined;
|
|
20
|
+
};
|
|
21
|
+
export type ReorderListProps<T> = {
|
|
22
|
+
items: T[];
|
|
23
|
+
/** the whole list in its new order; `from` and `to` are the moved row's indexes */
|
|
24
|
+
onReorder: (next: T[], move: {
|
|
25
|
+
from: number;
|
|
26
|
+
to: number;
|
|
27
|
+
}) => void;
|
|
28
|
+
/** a stable key per item — React keeps a moved row's DOM, so its fields keep focus */
|
|
29
|
+
itemKey: (item: T, index: number) => string;
|
|
30
|
+
/** the row's name in plain text, for button labels and announcements */
|
|
31
|
+
itemLabel: (item: T, index: number) => string;
|
|
32
|
+
/** the row's content */
|
|
33
|
+
render: (item: T, index: number) => ReactNode;
|
|
34
|
+
/** an inline field after the content — a ceiling, a weight, a toggle */
|
|
35
|
+
field?: ((item: T, index: number) => ReactNode) | undefined;
|
|
36
|
+
/** trailing actions (remove, overflow menu) */
|
|
37
|
+
actions?: ((item: T, index: number) => ReactNode) | undefined;
|
|
38
|
+
/** dim a row that is in the list but out of play (excluded, disabled) */
|
|
39
|
+
dim?: ((item: T, index: number) => boolean) | undefined;
|
|
40
|
+
marker?: ReorderMarker<T> | undefined;
|
|
41
|
+
/** reveal the move buttons only on hover or focus — for a long list where they would crowd it */
|
|
42
|
+
quiet?: boolean | undefined;
|
|
43
|
+
disabled?: boolean | undefined;
|
|
44
|
+
"aria-label"?: string | undefined;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* ReorderList: a controlled, keyboard-accessible ordered list. Each row has
|
|
48
|
+
* up/down buttons (and Alt+↑/↓ from anywhere in the row); every move is
|
|
49
|
+
* announced. Optionally a marker line between rows that moves on its own, an
|
|
50
|
+
* inline field per row, and trailing actions.
|
|
51
|
+
*/
|
|
52
|
+
export declare function ReorderList<T>({ items, onReorder, itemKey, itemLabel, render, field, actions, dim, marker, quiet, disabled, "aria-label": ariaLabel, }: ReorderListProps<T>): import("react").JSX.Element;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=Reorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Reorder.d.ts","sourceRoot":"","sources":["../../src/kit/Reorder.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA8D9F,KAAK,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAiC5C,mDAAmD;AACnD,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAC7B,mEAAmE;IACnE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,uEAAuE;IACvE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvC,yBAAyB;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B,wDAAwD;IACxD,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAC5D,6FAA6F;IAC7F,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACnC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,mFAAmF;IACnF,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,sFAAsF;IACtF,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,wEAAwE;IACxE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,wBAAwB;IACxB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAC9C,wEAAwE;IACxE,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAC5D,+CAA+C;IAC/C,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAC9D,yEAAyE;IACzE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACxD,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACtC,iGAAiG;IACjG,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,EAC7B,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,GACpH,EAAE,gBAAgB,CAAC,CAAC,CAAC,+BAiIrB"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useLayoutEffect, useRef, useState } from "react";
|
|
3
|
+
import styled, { css } from "styled-components";
|
|
4
|
+
import { v } from "../theme/tokens.js";
|
|
5
|
+
import { IconButton } from "./Button.js";
|
|
6
|
+
import { Icon } from "./Icon.js";
|
|
7
|
+
// An ordered list whose order is the setting: a quality ladder, a provider
|
|
8
|
+
// preference, a fallback chain. RepeaterRows adds and removes; this moves.
|
|
9
|
+
// Up/down buttons rather than drag — they work from the keyboard and on a
|
|
10
|
+
// phone, and a list of three to ten rows is a click or two either way. Alt+↑/↓
|
|
11
|
+
// moves the row that holds focus without leaving the field it is in.
|
|
12
|
+
//
|
|
13
|
+
// The marker is a line between two rows that moves on its own — XMB's
|
|
14
|
+
// "upgrade until here" cutoff. It names a position, not an item: the caller
|
|
15
|
+
// decides what it means and whether it follows an item when rows move.
|
|
16
|
+
const Wrap = styled.div `
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
border: 1px solid ${v.line};
|
|
20
|
+
border-radius: ${v.rCard};
|
|
21
|
+
background: ${v.surface};
|
|
22
|
+
`;
|
|
23
|
+
const Item = styled.div `
|
|
24
|
+
border-bottom: 1px solid ${v.line};
|
|
25
|
+
&:last-of-type { border-bottom: none; }
|
|
26
|
+
`;
|
|
27
|
+
const RowEl = styled.div `
|
|
28
|
+
display: flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
gap: 10px;
|
|
31
|
+
padding: 6px 12px 6px 6px;
|
|
32
|
+
font-size: 12.5px;
|
|
33
|
+
color: ${(p) => (p.$dim ? v.faint : v.text)};
|
|
34
|
+
&:hover .reorder-reveal, &:focus-within .reorder-reveal { opacity: 1; }
|
|
35
|
+
`;
|
|
36
|
+
const Moves = styled.div `
|
|
37
|
+
flex: none;
|
|
38
|
+
display: grid;
|
|
39
|
+
gap: 1px;
|
|
40
|
+
${(p) => p.$quiet && css `opacity: 0; transition: opacity 0.14s ease; &:focus-within { opacity: 1; }`}
|
|
41
|
+
> button { width: 26px; height: 18px; font-size: 11px; }
|
|
42
|
+
> button:disabled { opacity: 0.35; cursor: default; }
|
|
43
|
+
`;
|
|
44
|
+
const Body = styled.div `flex: 1 1 auto; min-width: 0;`;
|
|
45
|
+
const Slot = styled.div `flex: none; display: flex; align-items: center; gap: 6px;`;
|
|
46
|
+
const Place = styled.button `
|
|
47
|
+
flex: none;
|
|
48
|
+
/* every row keeps the slot, so the fields after it line up down the list */
|
|
49
|
+
${(p) => p.$held && css `visibility: hidden;`}
|
|
50
|
+
font-size: 11.5px;
|
|
51
|
+
color: ${v.faint};
|
|
52
|
+
opacity: 0;
|
|
53
|
+
transition: opacity 0.14s ease;
|
|
54
|
+
&:hover, &:focus-visible { opacity: 1; color: ${v.brand}; }
|
|
55
|
+
`;
|
|
56
|
+
const markerTones = {
|
|
57
|
+
brand: { ink: v.brand, bg: v.brand08 },
|
|
58
|
+
info: { ink: v.info, bg: v.infoBg },
|
|
59
|
+
warn: { ink: v.warning, bg: v.warningBg },
|
|
60
|
+
};
|
|
61
|
+
const MarkerEl = styled.div `
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
gap: 10px;
|
|
65
|
+
margin: 6px 8px;
|
|
66
|
+
padding: 4px 8px 4px 0;
|
|
67
|
+
border: 1px dashed ${(p) => markerTones[p.$tone].ink};
|
|
68
|
+
border-radius: ${v.rCtl};
|
|
69
|
+
background: ${(p) => markerTones[p.$tone].bg};
|
|
70
|
+
color: ${(p) => markerTones[p.$tone].ink};
|
|
71
|
+
font-size: 12px;
|
|
72
|
+
> ${Moves} { padding-left: 4px; }
|
|
73
|
+
> ${Moves} > button, > .marker-clear { color: inherit; }
|
|
74
|
+
`;
|
|
75
|
+
// Visually hidden, read by assistive tech: the sentence a sighted person gets
|
|
76
|
+
// from watching the row jump.
|
|
77
|
+
const Announce = styled.span `
|
|
78
|
+
position: absolute;
|
|
79
|
+
width: 1px;
|
|
80
|
+
height: 1px;
|
|
81
|
+
overflow: hidden;
|
|
82
|
+
clip: rect(0 0 0 0);
|
|
83
|
+
white-space: nowrap;
|
|
84
|
+
`;
|
|
85
|
+
/**
|
|
86
|
+
* ReorderList: a controlled, keyboard-accessible ordered list. Each row has
|
|
87
|
+
* up/down buttons (and Alt+↑/↓ from anywhere in the row); every move is
|
|
88
|
+
* announced. Optionally a marker line between rows that moves on its own, an
|
|
89
|
+
* inline field per row, and trailing actions.
|
|
90
|
+
*/
|
|
91
|
+
export function ReorderList({ items, onReorder, itemKey, itemLabel, render, field, actions, dim, marker, quiet, disabled, "aria-label": ariaLabel, }) {
|
|
92
|
+
const [said, setSaid] = useState("");
|
|
93
|
+
const rows = useRef(new Map());
|
|
94
|
+
const markerEl = useRef(null);
|
|
95
|
+
// A moved row can lose focus when React re-inserts it, the button that
|
|
96
|
+
// moved it to the top is now disabled, and the marker's buttons remount
|
|
97
|
+
// under another row. Put focus back after the commit.
|
|
98
|
+
const refocus = useRef(null);
|
|
99
|
+
useLayoutEffect(() => {
|
|
100
|
+
const pending = refocus.current;
|
|
101
|
+
if (!pending)
|
|
102
|
+
return;
|
|
103
|
+
refocus.current = null;
|
|
104
|
+
const el = pending.el;
|
|
105
|
+
if (el && el.isConnected && !el.disabled) {
|
|
106
|
+
if (document.activeElement !== el)
|
|
107
|
+
el.focus();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// the same direction's button if it can still move, else the other's
|
|
111
|
+
const box = pending.within();
|
|
112
|
+
const same = box?.querySelector(`[data-move="${pending.dir === -1 ? "up" : "down"}"]`);
|
|
113
|
+
const other = box?.querySelector(`[data-move="${pending.dir === -1 ? "down" : "up"}"]`);
|
|
114
|
+
(same && !same.disabled ? same : other)?.focus();
|
|
115
|
+
});
|
|
116
|
+
const n = items.length;
|
|
117
|
+
const holds = (i) => i >= 0 && i < n && (marker?.canHold ? marker.canHold(items[i], i) : true);
|
|
118
|
+
const move = (from, dir) => {
|
|
119
|
+
const to = from + dir;
|
|
120
|
+
if (disabled || to < 0 || to >= n)
|
|
121
|
+
return;
|
|
122
|
+
const next = items.slice();
|
|
123
|
+
const [it] = next.splice(from, 1);
|
|
124
|
+
next.splice(to, 0, it);
|
|
125
|
+
const key = itemKey(it, from);
|
|
126
|
+
refocus.current = { el: document.activeElement, within: () => rows.current.get(key), dir };
|
|
127
|
+
setSaid(`${itemLabel(it, from)} moved to position ${to + 1} of ${n}.`);
|
|
128
|
+
onReorder(next, { from, to });
|
|
129
|
+
};
|
|
130
|
+
// The marker steps to the next row that can hold it.
|
|
131
|
+
const markerStep = (dir) => {
|
|
132
|
+
if (marker?.after == null)
|
|
133
|
+
return null;
|
|
134
|
+
for (let i = marker.after + dir; i >= 0 && i < n; i += dir)
|
|
135
|
+
if (holds(i))
|
|
136
|
+
return i;
|
|
137
|
+
return null;
|
|
138
|
+
};
|
|
139
|
+
const placeMarker = (after, dir) => {
|
|
140
|
+
if (!marker || disabled)
|
|
141
|
+
return;
|
|
142
|
+
if (dir)
|
|
143
|
+
refocus.current = { el: null, within: () => markerEl.current, dir };
|
|
144
|
+
setSaid(after === null ? `${marker.name} removed.` : `${marker.name} moved under ${itemLabel(items[after], after)}.`);
|
|
145
|
+
marker.onMove(after);
|
|
146
|
+
};
|
|
147
|
+
const onRowKey = (i) => (e) => {
|
|
148
|
+
if (!e.altKey || (e.key !== "ArrowUp" && e.key !== "ArrowDown"))
|
|
149
|
+
return;
|
|
150
|
+
e.preventDefault();
|
|
151
|
+
move(i, e.key === "ArrowUp" ? -1 : 1);
|
|
152
|
+
};
|
|
153
|
+
const markerRow = () => {
|
|
154
|
+
if (!marker || marker.after === null)
|
|
155
|
+
return null;
|
|
156
|
+
const up = markerStep(-1);
|
|
157
|
+
const down = markerStep(1);
|
|
158
|
+
return (_jsxs(MarkerEl, { ref: markerEl, "$tone": marker.tone ?? "brand", role: "separator", "aria-label": marker.name, children: [_jsxs(Moves, { "$quiet": false, children: [_jsx(IconButton, { "data-move": "up", "aria-label": `Move ${marker.name} up`, disabled: disabled || up === null, onClick: () => placeMarker(up, -1), children: _jsx(Icon, { name: "chevron-up" }) }), _jsx(IconButton, { "data-move": "down", "aria-label": `Move ${marker.name} down`, disabled: disabled || down === null, onClick: () => placeMarker(down, 1), children: _jsx(Icon, { name: "chevron-down" }) })] }), _jsx(Body, { children: marker.label }), marker.clearable ? (_jsx(IconButton, { className: "marker-clear", "$size": 24, "aria-label": `Remove ${marker.name}`, disabled: disabled, onClick: () => placeMarker(null), children: _jsx(Icon, { name: "close" }) })) : null] }));
|
|
159
|
+
};
|
|
160
|
+
return (_jsxs(Wrap, { role: "list", "aria-label": ariaLabel, children: [items.map((item, i) => {
|
|
161
|
+
const key = itemKey(item, i);
|
|
162
|
+
const label = itemLabel(item, i);
|
|
163
|
+
const offer = marker?.placeLabel !== undefined && marker.after !== i && holds(i);
|
|
164
|
+
const offerSlot = marker?.placeLabel !== undefined;
|
|
165
|
+
return (_jsxs(Item, { role: "listitem", children: [_jsxs(RowEl, { ref: (el) => { if (el)
|
|
166
|
+
rows.current.set(key, el);
|
|
167
|
+
else
|
|
168
|
+
rows.current.delete(key); }, "$dim": dim?.(item, i), onKeyDown: onRowKey(i), children: [_jsxs(Moves, { "$quiet": quiet, className: quiet ? "reorder-reveal" : undefined, children: [_jsx(IconButton, { "data-move": "up", "aria-label": `Move ${label} up`, disabled: disabled || i === 0, onClick: () => move(i, -1), children: _jsx(Icon, { name: "chevron-up" }) }), _jsx(IconButton, { "data-move": "down", "aria-label": `Move ${label} down`, disabled: disabled || i === n - 1, onClick: () => move(i, 1), children: _jsx(Icon, { name: "chevron-down" }) })] }), _jsx(Body, { children: render(item, i) }), field ? _jsx(Slot, { children: field(item, i) }) : null, offerSlot ? (_jsx(Place, { type: "button", className: "reorder-reveal", "$held": !offer, "aria-hidden": offer ? undefined : true, tabIndex: offer ? undefined : -1, disabled: disabled || !offer, onClick: () => placeMarker(i), children: marker?.placeLabel })) : null, actions ? _jsx(Slot, { children: actions(item, i) }) : null] }), marker?.after === i ? markerRow() : null] }, key));
|
|
169
|
+
}), _jsx(Announce, { role: "status", "aria-live": "polite", children: said })] }));
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=Reorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Reorder.js","sourceRoot":"","sources":["../../src/kit/Reorder.tsx"],"names":[],"mappings":"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"}
|
package/dist/kit/Stat.d.ts
CHANGED
|
@@ -13,23 +13,56 @@ export declare function StatValue({ label, value, sub, tone }: {
|
|
|
13
13
|
tone?: "ok" | "warn" | "crit" | "brand" | undefined;
|
|
14
14
|
}): import("react").JSX.Element;
|
|
15
15
|
/** StatTile: label over a big number, with an optional subline. */
|
|
16
|
-
export declare function StatTile({ label, value, sub, tone, icon, to }: {
|
|
16
|
+
export declare function StatTile({ label, value, sub, subTone, emphasis, tone, icon, to }: {
|
|
17
17
|
label: ReactNode;
|
|
18
18
|
value: ReactNode;
|
|
19
19
|
sub?: ReactNode | undefined;
|
|
20
|
+
/** tints the subline — the footnote that is the bad news ("3 need attention") */
|
|
21
|
+
subTone?: "ok" | "warn" | "crit" | undefined;
|
|
22
|
+
/** washes the whole tile (border and ground) in the accent, or in `tone`'s
|
|
23
|
+
* colour when it has one — the tile that needs looking at */
|
|
24
|
+
emphasis?: boolean | undefined;
|
|
20
25
|
tone?: "ok" | "warn" | "crit" | "brand" | undefined;
|
|
21
26
|
/** a brand-tinted glyph beside the label */
|
|
22
27
|
icon?: IconName | undefined;
|
|
23
28
|
/** the tile is also the way in: a router link to the section it counts */
|
|
24
29
|
to?: string | undefined;
|
|
25
30
|
}): import("react").JSX.Element;
|
|
26
|
-
|
|
27
|
-
export
|
|
31
|
+
type MeterTone = "ok" | "warn" | "crit" | "brand" | "info" | "mut";
|
|
32
|
+
export interface MeterSegment {
|
|
28
33
|
value: number;
|
|
34
|
+
tone: MeterTone;
|
|
35
|
+
/** accessible name of the segment (also its tooltip) */
|
|
36
|
+
label?: string | undefined;
|
|
37
|
+
/** part of the previous top-level segment: drawn as the leading part of that span, over it, rather than after it */
|
|
38
|
+
nested?: boolean | undefined;
|
|
39
|
+
}
|
|
40
|
+
export interface MeterProps {
|
|
41
|
+
value?: number | undefined;
|
|
29
42
|
max: number;
|
|
30
|
-
tone?:
|
|
43
|
+
tone?: MeterTone | undefined;
|
|
31
44
|
label?: string | undefined;
|
|
32
45
|
/** fixed width in px (inside a table cell); fills the container otherwise */
|
|
33
46
|
width?: number | undefined;
|
|
34
|
-
|
|
47
|
+
segments?: MeterSegment[] | undefined;
|
|
48
|
+
tall?: boolean | undefined;
|
|
49
|
+
indeterminate?: boolean | undefined;
|
|
50
|
+
/** a caption above the bar ("/data"); `label` stays the accessible name */
|
|
51
|
+
head?: ReactNode | undefined;
|
|
52
|
+
/** a caption below the bar ("312 GB of 500 GB used") */
|
|
53
|
+
foot?: ReactNode | undefined;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Meter: value out of max as a bar; tone defaults from the ratio.
|
|
57
|
+
*
|
|
58
|
+
* `segments` replaces `value` with several spans that read left to right, each
|
|
59
|
+
* starting where the last top-level one ended. A `nested` segment is part of the
|
|
60
|
+
* span before it and is drawn as that span's leading part, over it — the way a
|
|
61
|
+
* "held" figure sits inside "committed" (stacking both from the left would paint
|
|
62
|
+
* the larger last and hide the smaller). `tall` is the detail-page height,
|
|
63
|
+
* `indeterminate` a sweeping bar for work with no figure yet. `head` and `foot`
|
|
64
|
+
* are captions above and below the bar; `label` stays its accessible name.
|
|
65
|
+
*/
|
|
66
|
+
export declare function Meter({ head, foot, ...props }: MeterProps): import("react").JSX.Element;
|
|
67
|
+
export {};
|
|
35
68
|
//# sourceMappingURL=Stat.d.ts.map
|
package/dist/kit/Stat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stat.d.ts","sourceRoot":"","sources":["../../src/kit/Stat.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIjD,eAAO,MAAM,QAAQ;;;WAAuB,MAAM,GAAG,SAAS;YAI7D,CAAC;
|
|
1
|
+
{"version":3,"file":"Stat.d.ts","sourceRoot":"","sources":["../../src/kit/Stat.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIjD,eAAO,MAAM,QAAQ;;;WAAuB,MAAM,GAAG,SAAS;YAI7D,CAAC;AAyCF,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACrD,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACrD,+BAQA;AAED,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;IACjF,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,iFAAiF;IACjF,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7C;kEAC8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,4CAA4C;IAC5C,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,0EAA0E;IAC1E,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB,+BAgBA;AAsBD,KAAK,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AA2CnE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,oHAAoH;IACpH,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAyBD,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IACtC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,wDAAwD;IACxD,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BASzD"}
|