@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
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":"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"}
|
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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export type PipelineState = "pending" | "running" | "done" | "failed" | "skipped";
|
|
3
|
+
export interface PipelineStep {
|
|
4
|
+
/** unique within its group (a fan-out repeats the same ids in every group) */
|
|
5
|
+
id: string;
|
|
6
|
+
label: ReactNode;
|
|
7
|
+
state: PipelineState;
|
|
8
|
+
/** the line under the label: counters, a duration, why it was skipped */
|
|
9
|
+
meta?: ReactNode | undefined;
|
|
10
|
+
/** 0..1 for a determinate bar under the step; "indeterminate" for work that cannot know its total. Shown only while running */
|
|
11
|
+
progress?: number | "indeterminate" | undefined;
|
|
12
|
+
/** which fan-out group this step belongs to; omit for a trunk step */
|
|
13
|
+
group?: string | undefined;
|
|
14
|
+
}
|
|
15
|
+
export interface PipelineSplit {
|
|
16
|
+
before: PipelineStep[];
|
|
17
|
+
lanes: {
|
|
18
|
+
key: string;
|
|
19
|
+
steps: PipelineStep[];
|
|
20
|
+
}[];
|
|
21
|
+
after: PipelineStep[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Cuts the steps into those before the fan-out, one lane per group, and those
|
|
25
|
+
* after. Lanes are keyed rather than adjacent, so a producer that emits
|
|
26
|
+
* position-major (group A's step 1, group B's step 1, A's step 2…) still gets a
|
|
27
|
+
* row per group; lane order follows first appearance. The grouped block is
|
|
28
|
+
* assumed contiguous — slicing rather than filtering keeps that visible.
|
|
29
|
+
*/
|
|
30
|
+
export declare function splitPipeline(steps: PipelineStep[]): PipelineSplit;
|
|
31
|
+
/**
|
|
32
|
+
* PipelineFlow: ordered steps with a state each, drawn as a connected row (a
|
|
33
|
+
* stack when narrow). A step's `meta` is the line under it and `progress` the
|
|
34
|
+
* bar under a running step (`"indeterminate"` sweeps, for work that finds out
|
|
35
|
+
* its size by finishing). Steps carrying a `group` are lifted into a row per
|
|
36
|
+
* group between the trunk steps that bracket them; `groups` names the lanes.
|
|
37
|
+
*/
|
|
38
|
+
export declare function PipelineFlow({ steps, groups, label }: {
|
|
39
|
+
steps: PipelineStep[];
|
|
40
|
+
/** lane titles by group key; a lane without one shows its key */
|
|
41
|
+
groups?: Record<string, ReactNode> | undefined;
|
|
42
|
+
label?: string | undefined;
|
|
43
|
+
}): import("react").JSX.Element | null;
|
|
44
|
+
//# sourceMappingURL=PipelineFlow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PipelineFlow.d.ts","sourceRoot":"","sources":["../../src/kit/PipelineFlow.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA8E,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AAkBnI,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElF,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,yEAAyE;IACzE,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,+HAA+H;IAC/H,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IAChD,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,EAAE,CAAA;KAAE,EAAE,CAAC;IAChD,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,CAoBlE;AA6MD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAkB,EAAE,EAAE;IAClE,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,sCAiBA"}
|