@xeonr/platform-ui 1.5.1 → 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.
Files changed (94) hide show
  1. package/dist/index.d.ts +12 -5
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +12 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/kit/Anchored.d.ts.map +1 -1
  6. package/dist/kit/Anchored.js +4 -1
  7. package/dist/kit/Anchored.js.map +1 -1
  8. package/dist/kit/Blocks.d.ts +6 -1
  9. package/dist/kit/Blocks.d.ts.map +1 -1
  10. package/dist/kit/Blocks.js +13 -2
  11. package/dist/kit/Blocks.js.map +1 -1
  12. package/dist/kit/Card.d.ts +6 -1
  13. package/dist/kit/Card.d.ts.map +1 -1
  14. package/dist/kit/Card.js +19 -4
  15. package/dist/kit/Card.js.map +1 -1
  16. package/dist/kit/Charts.d.ts +39 -3
  17. package/dist/kit/Charts.d.ts.map +1 -1
  18. package/dist/kit/Charts.js +70 -15
  19. package/dist/kit/Charts.js.map +1 -1
  20. package/dist/kit/CommandPalette.d.ts +47 -0
  21. package/dist/kit/CommandPalette.d.ts.map +1 -0
  22. package/dist/kit/CommandPalette.js +204 -0
  23. package/dist/kit/CommandPalette.js.map +1 -0
  24. package/dist/kit/DataTable.d.ts +18 -2
  25. package/dist/kit/DataTable.d.ts.map +1 -1
  26. package/dist/kit/DataTable.js +45 -6
  27. package/dist/kit/DataTable.js.map +1 -1
  28. package/dist/kit/Editable.d.ts +30 -0
  29. package/dist/kit/Editable.d.ts.map +1 -1
  30. package/dist/kit/Editable.js +150 -3
  31. package/dist/kit/Editable.js.map +1 -1
  32. package/dist/kit/EmptyState.d.ts +9 -2
  33. package/dist/kit/EmptyState.d.ts.map +1 -1
  34. package/dist/kit/EmptyState.js +16 -2
  35. package/dist/kit/EmptyState.js.map +1 -1
  36. package/dist/kit/GroupedMultiSelect.d.ts +57 -0
  37. package/dist/kit/GroupedMultiSelect.d.ts.map +1 -0
  38. package/dist/kit/GroupedMultiSelect.js +219 -0
  39. package/dist/kit/GroupedMultiSelect.js.map +1 -0
  40. package/dist/kit/List.d.ts +18 -1
  41. package/dist/kit/List.d.ts.map +1 -1
  42. package/dist/kit/List.js +38 -10
  43. package/dist/kit/List.js.map +1 -1
  44. package/dist/kit/LogView.d.ts +39 -3
  45. package/dist/kit/LogView.d.ts.map +1 -1
  46. package/dist/kit/LogView.js +52 -10
  47. package/dist/kit/LogView.js.map +1 -1
  48. package/dist/kit/Marker.d.ts +19 -0
  49. package/dist/kit/Marker.d.ts.map +1 -1
  50. package/dist/kit/Marker.js +50 -0
  51. package/dist/kit/Marker.js.map +1 -1
  52. package/dist/kit/Modal.d.ts +13 -3
  53. package/dist/kit/Modal.d.ts.map +1 -1
  54. package/dist/kit/Modal.js +39 -9
  55. package/dist/kit/Modal.js.map +1 -1
  56. package/dist/kit/Panel.d.ts +21 -0
  57. package/dist/kit/Panel.d.ts.map +1 -1
  58. package/dist/kit/Panel.js +36 -0
  59. package/dist/kit/Panel.js.map +1 -1
  60. package/dist/kit/PipelineFlow.d.ts +44 -0
  61. package/dist/kit/PipelineFlow.d.ts.map +1 -0
  62. package/dist/kit/PipelineFlow.js +171 -0
  63. package/dist/kit/PipelineFlow.js.map +1 -0
  64. package/dist/kit/Popover.d.ts.map +1 -1
  65. package/dist/kit/Popover.js +4 -1
  66. package/dist/kit/Popover.js.map +1 -1
  67. package/dist/kit/Reorder.d.ts +54 -0
  68. package/dist/kit/Reorder.d.ts.map +1 -0
  69. package/dist/kit/Reorder.js +171 -0
  70. package/dist/kit/Reorder.js.map +1 -0
  71. package/dist/kit/Stat.d.ts +38 -5
  72. package/dist/kit/Stat.d.ts.map +1 -1
  73. package/dist/kit/Stat.js +99 -11
  74. package/dist/kit/Stat.js.map +1 -1
  75. package/dist/kit/Tooltip.d.ts.map +1 -1
  76. package/dist/kit/Tooltip.js +5 -2
  77. package/dist/kit/Tooltip.js.map +1 -1
  78. package/dist/theme/ThemeScope.d.ts +30 -0
  79. package/dist/theme/ThemeScope.d.ts.map +1 -0
  80. package/dist/theme/ThemeScope.js +61 -0
  81. package/dist/theme/ThemeScope.js.map +1 -0
  82. package/dist/theme/brand.d.ts +2 -1
  83. package/dist/theme/brand.d.ts.map +1 -1
  84. package/dist/theme/brand.js +10 -6
  85. package/dist/theme/brand.js.map +1 -1
  86. package/dist/theme/scope.d.ts +23 -0
  87. package/dist/theme/scope.d.ts.map +1 -0
  88. package/dist/theme/scope.js +32 -0
  89. package/dist/theme/scope.js.map +1 -0
  90. package/dist/theme/tokens.d.ts +2 -1
  91. package/dist/theme/tokens.d.ts.map +1 -1
  92. package/dist/theme/tokens.js +65 -100
  93. package/dist/theme/tokens.js.map +1 -1
  94. package/package.json +1 -1
@@ -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
@@ -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"}
@@ -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
@@ -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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"}
@@ -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 rather than in place. Rendered in place, a
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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"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"}
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
- export function EntityModal({ title, sub, icon, size = "md", onClose, dismissable = true, footer, flush, head = true, portal, children }) {
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
- const portalled = !!portal && mounted;
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, document.body) : 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
- return (_jsxs(EntityModal, { title: title, size: "sm", onClose: onClose, portal: portal, 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, { variant: danger ? "danger" : "grad", disabled: !armed, loading: busy, onClick: onConfirm, children: actionLabel })] })] }));
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), onKeyDown: (e) => { if (e.key === "Enter")
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
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"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"}
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"AAGA,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,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"}
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;
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"AAAA,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,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"}
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,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgBrE,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;AAmKD;;;;;;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,sCAeA"}
@@ -0,0 +1,171 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Fragment } 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
+
72
+ @media (max-width: 720px) {
73
+ flex-direction: column;
74
+ gap: 8px;
75
+ }
76
+ `;
77
+ /* The rule between two steps takes the colour of the step behind it, so a
78
+ completed run reads as one continuous line. Hidden once stacked: the gap
79
+ already says the same thing. */
80
+ const Link = styled.li `
81
+ flex: 1 1 14px;
82
+ min-width: 14px;
83
+ height: 1px;
84
+ margin-top: 8px;
85
+ list-style: none;
86
+ background: ${(p) => (p.$state === "pending" || p.$state === "skipped" ? v.line2 : tone[p.$state])};
87
+ @media (max-width: 720px) { display: none; }
88
+ `;
89
+ const Step = styled.li `
90
+ display: block;
91
+ min-width: 0;
92
+ flex: ${(p) => (p.$state === "running" ? "1 1 auto" : "0 1 auto")};
93
+ max-width: ${(p) => (p.$state === "running" ? "32rem" : "14rem")};
94
+ ${(p) => p.$state === "skipped" && css `opacity: 0.6;`}
95
+ `;
96
+ const Head = styled.span `
97
+ display: flex;
98
+ align-items: center;
99
+ gap: 8px;
100
+ min-width: 0;
101
+ `;
102
+ /* Filled once the step has happened, hollow while it is merely expected: a
103
+ step that is ahead must not read as a step that is done. */
104
+ const Dot = styled.span `
105
+ flex: none;
106
+ width: 15px;
107
+ height: 15px;
108
+ border-radius: 50%;
109
+ border: 2px solid ${(p) => tone[p.$state]};
110
+ background: ${(p) => (p.$state === "pending" ? "transparent" : tone[p.$state])};
111
+ `;
112
+ const Label = styled.span `
113
+ font-size: 13px;
114
+ font-weight: ${(p) => (p.$state === "running" ? 650 : 400)};
115
+ color: ${(p) => (p.$state === "pending" || p.$state === "skipped" ? v.faint : v.text)};
116
+ white-space: nowrap;
117
+ `;
118
+ const Meta = styled.span `
119
+ display: block;
120
+ margin: 2px 0 0 23px;
121
+ font-size: 11px;
122
+ color: ${v.faint};
123
+ overflow: hidden;
124
+ text-overflow: ellipsis;
125
+ white-space: nowrap;
126
+ `;
127
+ const slide = keyframes `
128
+ from { transform: translateX(-100%); }
129
+ to { transform: translateX(400%); }
130
+ `;
131
+ const Bar = styled.span `
132
+ display: block;
133
+ margin: 5px 0 0 23px;
134
+ max-width: 192px;
135
+ height: 3px;
136
+ overflow: hidden;
137
+ border-radius: 999px;
138
+ background: ${v.field};
139
+
140
+ &::after {
141
+ content: "";
142
+ display: block;
143
+ height: 100%;
144
+ border-radius: 999px;
145
+ background: ${v.grad90};
146
+ /* the figure arrives as a custom property, so a poll does not mint a class per value */
147
+ width: ${(p) => (p.$indeterminate ? "25%" : "clamp(0%, calc(var(--value, 0) * 100%), 100%)")};
148
+ ${(p) => p.$indeterminate && css `animation: ${slide} 2.4s ease-in-out infinite;`}
149
+ }
150
+ @media (prefers-reduced-motion: reduce) { &::after { animation: none; } }
151
+ `;
152
+ function StepRow({ steps }) {
153
+ return (_jsx(Row, { children: steps.map((s, i) => (_jsxs(Fragment, { children: [i > 0 ? _jsx(Link, { "$state": steps[i - 1].state, "aria-hidden": true }) : null, _jsxs(Step, { "$state": s.state, "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, 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))) }));
154
+ }
155
+ const SR_ONLY = {
156
+ position: "absolute", width: 1, height: 1, overflow: "hidden", clip: "rect(0 0 0 0)", whiteSpace: "nowrap",
157
+ };
158
+ /**
159
+ * PipelineFlow: ordered steps with a state each, drawn as a connected row (a
160
+ * stack when narrow). A step's `meta` is the line under it and `progress` the
161
+ * bar under a running step (`"indeterminate"` sweeps, for work that finds out
162
+ * its size by finishing). Steps carrying a `group` are lifted into a row per
163
+ * group between the trunk steps that bracket them; `groups` names the lanes.
164
+ */
165
+ export function PipelineFlow({ steps, groups, label = "Pipeline" }) {
166
+ if (steps.length === 0)
167
+ return null;
168
+ const { before, lanes, after } = splitPipeline(steps);
169
+ return (_jsxs(Wrap, { role: "group", "aria-label": label, children: [before.length > 0 ? _jsx(StepRow, { steps: before }) : null, lanes.map((l) => (_jsxs(Lane, { children: [_jsx(LaneLabel, { children: groups?.[l.key] ?? l.key }), _jsx(StepRow, { steps: l.steps })] }, l.key))), after.length > 0 ? _jsx(StepRow, { steps: after }) : null] }));
170
+ }
171
+ //# sourceMappingURL=PipelineFlow.js.map