@xeonr/platform-ui 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) 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 +24 -2
  6. package/dist/kit/Anchored.d.ts.map +1 -1
  7. package/dist/kit/Anchored.js +47 -3
  8. package/dist/kit/Anchored.js.map +1 -1
  9. package/dist/kit/Blocks.d.ts +6 -1
  10. package/dist/kit/Blocks.d.ts.map +1 -1
  11. package/dist/kit/Blocks.js +13 -2
  12. package/dist/kit/Blocks.js.map +1 -1
  13. package/dist/kit/Card.d.ts +6 -1
  14. package/dist/kit/Card.d.ts.map +1 -1
  15. package/dist/kit/Card.js +19 -4
  16. package/dist/kit/Card.js.map +1 -1
  17. package/dist/kit/Charts.d.ts +39 -3
  18. package/dist/kit/Charts.d.ts.map +1 -1
  19. package/dist/kit/Charts.js +70 -15
  20. package/dist/kit/Charts.js.map +1 -1
  21. package/dist/kit/CommandPalette.d.ts +47 -0
  22. package/dist/kit/CommandPalette.d.ts.map +1 -0
  23. package/dist/kit/CommandPalette.js +204 -0
  24. package/dist/kit/CommandPalette.js.map +1 -0
  25. package/dist/kit/DataTable.d.ts +18 -2
  26. package/dist/kit/DataTable.d.ts.map +1 -1
  27. package/dist/kit/DataTable.js +45 -6
  28. package/dist/kit/DataTable.js.map +1 -1
  29. package/dist/kit/Editable.d.ts +30 -0
  30. package/dist/kit/Editable.d.ts.map +1 -1
  31. package/dist/kit/Editable.js +150 -3
  32. package/dist/kit/Editable.js.map +1 -1
  33. package/dist/kit/EmptyState.d.ts +9 -2
  34. package/dist/kit/EmptyState.d.ts.map +1 -1
  35. package/dist/kit/EmptyState.js +16 -2
  36. package/dist/kit/EmptyState.js.map +1 -1
  37. package/dist/kit/Facet.d.ts.map +1 -1
  38. package/dist/kit/Facet.js +12 -2
  39. package/dist/kit/Facet.js.map +1 -1
  40. package/dist/kit/GroupedMultiSelect.d.ts +57 -0
  41. package/dist/kit/GroupedMultiSelect.d.ts.map +1 -0
  42. package/dist/kit/GroupedMultiSelect.js +219 -0
  43. package/dist/kit/GroupedMultiSelect.js.map +1 -0
  44. package/dist/kit/List.d.ts +18 -1
  45. package/dist/kit/List.d.ts.map +1 -1
  46. package/dist/kit/List.js +38 -10
  47. package/dist/kit/List.js.map +1 -1
  48. package/dist/kit/LogView.d.ts +39 -3
  49. package/dist/kit/LogView.d.ts.map +1 -1
  50. package/dist/kit/LogView.js +52 -10
  51. package/dist/kit/LogView.js.map +1 -1
  52. package/dist/kit/Marker.d.ts +19 -0
  53. package/dist/kit/Marker.d.ts.map +1 -1
  54. package/dist/kit/Marker.js +50 -0
  55. package/dist/kit/Marker.js.map +1 -1
  56. package/dist/kit/Modal.d.ts +13 -3
  57. package/dist/kit/Modal.d.ts.map +1 -1
  58. package/dist/kit/Modal.js +39 -9
  59. package/dist/kit/Modal.js.map +1 -1
  60. package/dist/kit/Panel.d.ts +21 -0
  61. package/dist/kit/Panel.d.ts.map +1 -1
  62. package/dist/kit/Panel.js +36 -0
  63. package/dist/kit/Panel.js.map +1 -1
  64. package/dist/kit/Picker.d.ts +7 -1
  65. package/dist/kit/Picker.d.ts.map +1 -1
  66. package/dist/kit/Picker.js +11 -2
  67. package/dist/kit/Picker.js.map +1 -1
  68. package/dist/kit/PipelineFlow.d.ts +44 -0
  69. package/dist/kit/PipelineFlow.d.ts.map +1 -0
  70. package/dist/kit/PipelineFlow.js +171 -0
  71. package/dist/kit/PipelineFlow.js.map +1 -0
  72. package/dist/kit/Popover.d.ts.map +1 -1
  73. package/dist/kit/Popover.js +4 -1
  74. package/dist/kit/Popover.js.map +1 -1
  75. package/dist/kit/Range.d.ts.map +1 -1
  76. package/dist/kit/Range.js +8 -2
  77. package/dist/kit/Range.js.map +1 -1
  78. package/dist/kit/Reorder.d.ts +54 -0
  79. package/dist/kit/Reorder.d.ts.map +1 -0
  80. package/dist/kit/Reorder.js +171 -0
  81. package/dist/kit/Reorder.js.map +1 -0
  82. package/dist/kit/Stat.d.ts +38 -5
  83. package/dist/kit/Stat.d.ts.map +1 -1
  84. package/dist/kit/Stat.js +99 -11
  85. package/dist/kit/Stat.js.map +1 -1
  86. package/dist/kit/Tooltip.d.ts.map +1 -1
  87. package/dist/kit/Tooltip.js +5 -2
  88. package/dist/kit/Tooltip.js.map +1 -1
  89. package/dist/theme/ThemeScope.d.ts +30 -0
  90. package/dist/theme/ThemeScope.d.ts.map +1 -0
  91. package/dist/theme/ThemeScope.js +61 -0
  92. package/dist/theme/ThemeScope.js.map +1 -0
  93. package/dist/theme/brand.d.ts +2 -1
  94. package/dist/theme/brand.d.ts.map +1 -1
  95. package/dist/theme/brand.js +10 -6
  96. package/dist/theme/brand.js.map +1 -1
  97. package/dist/theme/scope.d.ts +23 -0
  98. package/dist/theme/scope.d.ts.map +1 -0
  99. package/dist/theme/scope.js +32 -0
  100. package/dist/theme/scope.js.map +1 -0
  101. package/dist/theme/tokens.d.ts +2 -1
  102. package/dist/theme/tokens.d.ts.map +1 -1
  103. package/dist/theme/tokens.js +65 -100
  104. package/dist/theme/tokens.js.map +1 -1
  105. package/package.json +1 -1
@@ -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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"}
@@ -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
- /** Meter: value out of max as a bar; tone defaults from the ratio. */
27
- export declare function Meter({ value, max, tone, label, width }: {
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?: "ok" | "warn" | "crit" | "brand" | undefined;
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
- }): import("react").JSX.Element;
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
@@ -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;AA6BF,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,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;IAC9D,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;IACpD,4CAA4C;IAC5C,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,0EAA0E;IAC1E,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB,+BAeA;AAoCD,sEAAsE;AACtE,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAQA"}
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"}
package/dist/kit/Stat.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import styled, { css } from "styled-components";
2
+ import styled, { css, keyframes } from "styled-components";
3
3
  import { Link } from "react-router-dom";
4
4
  import { v } from "../theme/tokens.js";
5
5
  import { Panel } from "./Panel.js";
@@ -20,11 +20,17 @@ const tileCss = css `
20
20
  border-radius: ${v.rPanel};
21
21
  background: ${v.surface};
22
22
  `;
23
+ const washCss = (w) => w &&
24
+ css `
25
+ border-color: ${w === "ok" ? v.success : w === "warn" ? v.warning : w === "crit" ? v.danger : v.brand55};
26
+ background: ${w === "ok" ? v.successBg : w === "warn" ? v.warningBg : w === "crit" ? v.dangerBg : v.brand08};
27
+ `;
23
28
  const Tile = styled(Panel) `
24
29
  padding: 12px 14px;
25
30
  display: flex;
26
31
  flex-direction: column;
27
32
  gap: 6px;
33
+ ${(p) => washCss(p.$wash)}
28
34
  `;
29
35
  const Value = styled.span `
30
36
  font-size: 22px;
@@ -33,15 +39,19 @@ const Value = styled.span `
33
39
  font-variant-numeric: tabular-nums;
34
40
  color: ${(p) => (p.$tone === "ok" ? v.success : p.$tone === "warn" ? v.warning : p.$tone === "crit" ? v.danger : p.$tone === "brand" ? v.brand : v.text)};
35
41
  `;
36
- const Sub = styled.span `font-size: 11px; color: ${v.faint};`;
42
+ const Sub = styled.span `
43
+ font-size: 11px;
44
+ color: ${(p) => (p.$tone === "ok" ? v.success : p.$tone === "warn" ? v.warning : p.$tone === "crit" ? v.danger : v.faint)};
45
+ `;
37
46
  /** StatValue: label over a big number with no tile chrome (mini-stats inside a panel). */
38
47
  export function StatValue({ label, value, sub, tone }) {
39
48
  return (_jsxs("span", { style: { display: "flex", flexDirection: "column", gap: 4 }, children: [_jsx(MicroLabel, { children: label }), _jsx(Value, { "$tone": tone, children: value }), sub ? _jsx(Sub, { children: sub }) : null] }));
40
49
  }
41
50
  /** StatTile: label over a big number, with an optional subline. */
42
- export function StatTile({ label, value, sub, tone, icon, to }) {
43
- const body = (_jsxs(_Fragment, { children: [_jsxs(Head, { children: [_jsxs(MicroLabel, { children: [icon ? _jsx(Glyph, { children: _jsx(Icon, { name: icon }) }) : null, label] }), to ? _jsx(Go, { children: _jsx(Icon, { name: "arrow-right" }) }) : null] }), _jsx(Value, { "$tone": tone, children: value }), sub ? _jsx(Sub, { children: sub }) : null] }));
44
- return to ? _jsx(TileLink, { to: to, children: body }) : _jsx(Tile, { children: body });
51
+ export function StatTile({ label, value, sub, subTone, emphasis, tone, icon, to }) {
52
+ const body = (_jsxs(_Fragment, { children: [_jsxs(Head, { children: [_jsxs(MicroLabel, { children: [icon ? _jsx(Glyph, { children: _jsx(Icon, { name: icon }) }) : null, label] }), to ? _jsx(Go, { children: _jsx(Icon, { name: "arrow-right" }) }) : null] }), _jsx(Value, { "$tone": tone, children: value }), sub ? _jsx(Sub, { "$tone": subTone, children: sub }) : null] }));
53
+ const wash = emphasis ? (tone ?? "brand") : undefined;
54
+ return to ? _jsx(TileLink, { to: to, "$wash": wash, children: body }) : _jsx(Tile, { "$wash": wash, children: body });
45
55
  }
46
56
  const Head = styled.div `
47
57
  display: flex;
@@ -58,10 +68,13 @@ const TileLink = styled(Link) `
58
68
  color: inherit;
59
69
  transition: border-color 0.14s ease, background 0.14s ease;
60
70
  &:hover { border-color: ${v.line2}; background: ${v.surface2}; }
71
+ ${(p) => washCss(p.$wash)}
61
72
  `;
73
+ const meterFill = (t) => t === "ok" ? v.success : t === "warn" ? v.warning : t === "crit" ? v.danger : t === "info" ? v.info : t === "mut" ? v.faint : v.grad90;
62
74
  const Bar = styled.div `
75
+ position: relative;
63
76
  ${(p) => p.$w && css `width: ${p.$w}px;`}
64
- height: 6px;
77
+ height: ${(p) => (p.$tall ? "10px" : "6px")};
65
78
  border-radius: 999px;
66
79
  background: ${v.field};
67
80
  border: 1px solid ${v.fieldLine};
@@ -70,13 +83,88 @@ const Bar = styled.div `
70
83
  const Fill = styled.div `
71
84
  height: 100%;
72
85
  width: ${(p) => p.$pct}%;
73
- background: ${(p) => (p.$tone === "ok" ? v.success : p.$tone === "warn" ? v.warning : p.$tone === "crit" ? v.danger : v.grad90)};
86
+ background: ${(p) => meterFill(p.$tone)};
74
87
  transition: width 0.3s ease;
75
88
  `;
76
- /** Meter: value out of max as a bar; tone defaults from the ratio. */
77
- export function Meter({ value, max, tone, label, width }) {
78
- const pct = max > 0 ? Math.max(0, Math.min(100, (value / max) * 100)) : 0;
89
+ /* A segment is placed by its offset as well as its width: a nested one starts
90
+ where its parent does and is painted over it. */
91
+ const Seg = styled.i `
92
+ position: absolute;
93
+ top: 0;
94
+ bottom: 0;
95
+ left: ${(p) => p.$from}%;
96
+ width: ${(p) => p.$pct}%;
97
+ background: ${(p) => meterFill(p.$tone)};
98
+ transition: width 0.3s ease, left 0.3s ease;
99
+ `;
100
+ const meterSlide = keyframes `
101
+ from { transform: translateX(-100%); }
102
+ to { transform: translateX(400%); }
103
+ `;
104
+ const Sweep = styled.div `
105
+ height: 100%;
106
+ width: 25%;
107
+ background: ${v.grad90};
108
+ animation: ${meterSlide} 2.4s ease-in-out infinite;
109
+ @media (prefers-reduced-motion: reduce) { animation: none; }
110
+ `;
111
+ /** Where each segment starts: top-level ones follow on from the last, nested ones share their parent's start. */
112
+ function placeSegments(segments) {
113
+ const starts = [];
114
+ let cursor = 0;
115
+ let parent = 0;
116
+ for (const s of segments) {
117
+ if (s.nested) {
118
+ starts.push(parent);
119
+ continue;
120
+ }
121
+ parent = cursor;
122
+ starts.push(cursor);
123
+ cursor += s.value;
124
+ }
125
+ return starts;
126
+ }
127
+ const MeterCaption = styled.div `
128
+ display: flex; justify-content: space-between; gap: 8px;
129
+ font-size: 11px; color: ${v.muted}; font-variant-numeric: tabular-nums;
130
+ `;
131
+ const MeterStack = styled.div `
132
+ display: flex; flex-direction: column; gap: 4px;
133
+ ${(p) => p.$w && css `width: ${p.$w}px;`}
134
+ `;
135
+ /**
136
+ * Meter: value out of max as a bar; tone defaults from the ratio.
137
+ *
138
+ * `segments` replaces `value` with several spans that read left to right, each
139
+ * starting where the last top-level one ended. A `nested` segment is part of the
140
+ * span before it and is drawn as that span's leading part, over it — the way a
141
+ * "held" figure sits inside "committed" (stacking both from the left would paint
142
+ * the larger last and hide the smaller). `tall` is the detail-page height,
143
+ * `indeterminate` a sweeping bar for work with no figure yet. `head` and `foot`
144
+ * are captions above and below the bar; `label` stays its accessible name.
145
+ */
146
+ export function Meter({ head, foot, ...props }) {
147
+ if (head == null && foot == null)
148
+ return _jsx(MeterBar, { ...props });
149
+ return (_jsxs(MeterStack, { "$w": props.width, children: [head != null ? _jsx(MeterCaption, { children: head }) : null, _jsx(MeterBar, { ...props, width: undefined }), foot != null ? _jsx(MeterCaption, { children: foot }) : null] }));
150
+ }
151
+ function MeterBar({ value, max, tone, label, width, segments, tall, indeterminate }) {
152
+ const pctOf = (n) => (max > 0 ? Math.max(0, Math.min(100, (n / max) * 100)) : 0);
153
+ if (indeterminate) {
154
+ return (_jsx(Bar, { "$w": width, "$tall": tall, role: "progressbar", "aria-label": label, children: _jsx(Sweep, {}) }));
155
+ }
156
+ if (segments) {
157
+ const total = segments.filter((s) => !s.nested).reduce((a, s) => a + s.value, 0);
158
+ const placed = placeSegments(segments);
159
+ return (_jsx(Bar, { "$w": width, "$tall": tall, role: "meter", "aria-valuenow": total, "aria-valuemin": 0, "aria-valuemax": max, "aria-label": label, children: segments.map((s, i) => {
160
+ const f = pctOf(placed[i]);
161
+ const w = Math.min(pctOf(s.value), 100 - f);
162
+ return _jsx(Seg, { "$from": f, "$pct": Math.max(w, 0), "$tone": s.tone, title: s.label }, i);
163
+ }) }));
164
+ }
165
+ const n = value ?? 0;
166
+ const pct = pctOf(n);
79
167
  const t = tone ?? (pct >= 90 ? "crit" : pct >= 70 ? "warn" : "brand");
80
- return (_jsx(Bar, { "$w": width, role: "meter", "aria-valuenow": value, "aria-valuemin": 0, "aria-valuemax": max, "aria-label": label, children: _jsx(Fill, { "$pct": pct, "$tone": t }) }));
168
+ return (_jsx(Bar, { "$w": width, "$tall": tall, role: "meter", "aria-valuenow": n, "aria-valuemin": 0, "aria-valuemax": max, "aria-label": label, children: _jsx(Fill, { "$pct": pct, "$tone": t }) }));
81
169
  }
82
170
  //# sourceMappingURL=Stat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stat.js","sourceRoot":"","sources":["../../src/kit/Stat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Stat.js","sourceRoot":"","sources":["../../src/kit/Stat.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAY,CAAC;AAEjD,yDAAyD;AAEzD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAA+B;;mDAEd,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG;;CAEtE,CAAC;AAEF,MAAM,OAAO,GAAG,GAAG,CAAA;;;;;sBAKG,CAAC,CAAC,IAAI;mBACT,CAAC,CAAC,MAAM;gBACX,CAAC,CAAC,OAAO;CACxB,CAAC;AAGF,MAAM,OAAO,GAAG,CAAC,CAAO,EAAE,EAAE,CAC1B,CAAC;IACD,GAAG,CAAA;oBACe,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;kBACzF,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;GAC5G,CAAC;AAEJ,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAkB;;;;;IAKxC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;CAC1B,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAA0D;;;;;WAKxE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;CACzJ,CAAC;AAEF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAgD;;WAE5D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;CAC1H,CAAC;AAEF,0FAA0F;AAC1F,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAKlD;IACC,OAAO,CACL,gBAAM,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aAC/D,KAAC,UAAU,cAAE,KAAK,GAAc,EAChC,KAAC,KAAK,aAAQ,IAAI,YAAG,KAAK,GAAS,EAClC,GAAG,CAAC,CAAC,CAAC,KAAC,GAAG,cAAE,GAAG,GAAO,CAAC,CAAC,CAAC,IAAI,IACzB,CACR,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAc9E;IACC,MAAM,IAAI,GAAG,CACX,8BACE,MAAC,IAAI,eACH,MAAC,UAAU,eACR,IAAI,CAAC,CAAC,CAAC,KAAC,KAAK,cAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI,GAAQ,CAAC,CAAC,CAAC,IAAI,EACjD,KAAK,IACK,EACZ,EAAE,CAAC,CAAC,CAAC,KAAC,EAAE,cAAC,KAAC,IAAI,IAAC,IAAI,EAAC,aAAa,GAAG,GAAK,CAAC,CAAC,CAAC,IAAI,IAC5C,EACP,KAAC,KAAK,aAAQ,IAAI,YAAG,KAAK,GAAS,EAClC,GAAG,CAAC,CAAC,CAAC,KAAC,GAAG,aAAQ,OAAO,YAAG,GAAG,GAAO,CAAC,CAAC,CAAC,IAAI,IAC7C,CACJ,CAAC;IACF,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,OAAO,EAAE,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,EAAE,EAAE,EAAE,WAAS,IAAI,YAAG,IAAI,GAAY,CAAC,CAAC,CAAC,KAAC,IAAI,aAAQ,IAAI,YAAG,IAAI,GAAQ,CAAC;AAClG,CAAC;AAED,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;IAKnB,UAAU;CACb,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAA,UAAU,CAAC,CAAC,KAAK,kBAAkB,CAAC;AAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAA,UAAU,CAAC,CAAC,KAAK,mCAAmC,CAAC;AAE3E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAkB;IAC3C,OAAO;;;;4BAIiB,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,QAAQ;IAC1D,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;CAC1B,CAAC;AAIF,MAAM,SAAS,GAAG,CAAC,CAAY,EAAE,EAAE,CACjC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAEzI,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAA0D;;IAE5E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAA,UAAU,CAAC,CAAC,EAAE,KAAK;YAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;;gBAE7B,CAAC,CAAC,KAAK;sBACD,CAAC,CAAC,SAAS;;CAEhC,CAAC;AACF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAoC;;WAEhD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;gBACR,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;;CAExC,CAAC;AACF;mDACmD;AACnD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAmD;;;;UAI7D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;WACb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;gBACR,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;;CAExC,CAAC;AACF,MAAM,UAAU,GAAG,SAAS,CAAA;;;CAG3B,CAAC;AACF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAA;;;gBAGR,CAAC,CAAC,MAAM;eACT,UAAU;;CAExB,CAAC;AAWF,iHAAiH;AACjH,SAAS,aAAa,CAAC,QAAwB;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAChD,MAAM,GAAG,MAAM,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;4BAEH,CAAC,CAAC,KAAK;CAClC,CAAC;AACF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAA6B;;IAEtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAA,UAAU,CAAC,CAAC,EAAE,KAAK;CACxC,CAAC;AAkBF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAc;IACxD,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,KAAC,QAAQ,OAAK,KAAK,GAAI,CAAC;IACjE,OAAO,CACL,MAAC,UAAU,UAAK,KAAK,CAAC,KAAK,aACxB,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAC,YAAY,cAAE,IAAI,GAAgB,CAAC,CAAC,CAAC,IAAI,EAC1D,KAAC,QAAQ,OAAK,KAAK,EAAE,KAAK,EAAE,SAAS,GAAI,EACxC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAC,YAAY,cAAE,IAAI,GAAgB,CAAC,CAAC,CAAC,IAAI,IAC/C,CACd,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAc;IAC7F,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CACL,KAAC,GAAG,UAAK,KAAK,WAAS,IAAI,EAAE,IAAI,EAAC,aAAa,gBAAa,KAAK,YAAE,KAAC,KAAK,KAAG,GAAM,CACnF,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjF,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,OAAO,CACL,KAAC,GAAG,UAAK,KAAK,WAAS,IAAI,EAAE,IAAI,EAAC,OAAO,mBAAgB,KAAK,mBAAiB,CAAC,mBAAiB,GAAG,gBAAc,KAAK,YACpH,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;gBAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC5C,OAAO,KAAC,GAAG,aAAgB,CAAC,UAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,WAAS,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAhE,CAAC,CAAmE,CAAC;YACxF,CAAC,CAAC,GACE,CACP,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACtE,OAAO,CACL,KAAC,GAAG,UAAK,KAAK,WAAS,IAAI,EAAE,IAAI,EAAC,OAAO,mBAAgB,CAAC,mBAAiB,CAAC,mBAAiB,GAAG,gBAAc,KAAK,YACjH,KAAC,IAAI,YAAO,GAAG,WAAS,CAAC,GAAI,GACzB,CACP,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/kit/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyD,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAmDlH,KAAK,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AA8BhD,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,KAAK,EAAE,SAAS,CAAC;IACjB,oEAAoE;IACpE,QAAQ,EAAE,SAAS,CAAC;IACpB,iIAAiI;IACjI,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,iEAAiE;IACjE,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IAC/C,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAY,EAAE,KAAgB,EAAE,KAAK,EAAE,KAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,YAAY,+BAkFxI"}
1
+ {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/kit/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyD,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAoDlH,KAAK,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AA8BhD,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,KAAK,EAAE,SAAS,CAAC;IACjB,oEAAoE;IACpE,QAAQ,EAAE,SAAS,CAAC;IACpB,iIAAiI;IACjI,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,iEAAiE;IACjE,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IAC/C,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAY,EAAE,KAAgB,EAAE,KAAK,EAAE,KAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,YAAY,+BAoFxI"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useId, useLayoutEffect, useRef, useState } from "react";
3
3
  import { createPortal } from "react-dom";
4
+ import { usePortalTarget } from "../theme/ThemeScope.js";
4
5
  import styled, { keyframes } from "styled-components";
5
6
  import { v } from "../theme/tokens.js";
6
7
  // Tooltip — the hover/focus explanation a dense ops screen cannot do without.
@@ -81,6 +82,8 @@ function place(anchor, box, prefer, align) {
81
82
  */
82
83
  export function Tooltip({ label, children, side = "top", align = "center", width, delay = 180, disabled, style, className }) {
83
84
  const id = useId();
85
+ // the nearest ThemeScope's host, or body (CON-148)
86
+ const portalTarget = usePortalTarget();
84
87
  const ref = useRef(null);
85
88
  const bubble = useRef(null);
86
89
  const timer = useRef(undefined);
@@ -132,8 +135,8 @@ export function Tooltip({ label, children, side = "top", align = "center", width
132
135
  }, [anchor, close]);
133
136
  useLayoutEffect(() => () => window.clearTimeout(timer.current), []);
134
137
  const shown = !disabled && anchor !== null;
135
- return (_jsxs(_Fragment, { children: [_jsx(Anchor, { ref: ref, style: style, className: className, onMouseEnter: open, onMouseLeave: close, onFocus: open, onBlur: close, "aria-describedby": shown ? id : undefined, children: children }), shown && typeof document !== "undefined"
136
- ? createPortal(_jsx(Bubble, { ref: bubble, id: id, role: "tooltip", "$wide": width, style: pos ? { top: pos.top, left: pos.left } : { top: 0, left: 0, opacity: 0 }, children: label }), document.body)
138
+ return (_jsxs(_Fragment, { children: [_jsx(Anchor, { ref: ref, style: style, className: className, onMouseEnter: open, onMouseLeave: close, onFocus: open, onBlur: close, "aria-describedby": shown ? id : undefined, children: children }), shown && portalTarget
139
+ ? createPortal(_jsx(Bubble, { ref: bubble, id: id, role: "tooltip", "$wide": width, style: pos ? { top: pos.top, left: pos.left } : { top: 0, left: 0, opacity: 0 }, children: label }), portalTarget)
137
140
  : null] }));
138
141
  }
139
142
  //# sourceMappingURL=Tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../src/kit/Tooltip.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../src/kit/Tooltip.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type ReactNode } from "react";
2
+ export interface ThemeScopeProps {
3
+ /** The scope's name: the sheet hangs off `[data-x-scope="<name>"]`. */
4
+ name: string;
5
+ /** The brand colour for this scope (the derived ramp, scoped). */
6
+ brand?: string | null | undefined;
7
+ /** Follow the OS colour scheme when nothing explicit is set. Default true. */
8
+ systemScheme?: boolean | undefined;
9
+ /**
10
+ * Host CSS appended after the kit's sheets, for overrides. Write it against
11
+ * `scopeSelector(name)`; for a variable the brand ramp also sets, double the
12
+ * selector (the ramp's rules are doubled) and the later rule wins.
13
+ */
14
+ css?: string | undefined;
15
+ children: ReactNode;
16
+ }
17
+ /**
18
+ * Where the kit's overlays portal to: the nearest ThemeScope's host, or
19
+ * document.body outside one (and before the host is mounted). Null on the
20
+ * server, where nothing portals.
21
+ */
22
+ export declare function usePortalTarget(): HTMLElement | null;
23
+ /** The scope's sheets: the kit's tokens and ramp, the ink, then the host's own. */
24
+ export declare function themeScopeCss(name: string, opts?: {
25
+ brand?: string | null | undefined;
26
+ systemScheme?: boolean | undefined;
27
+ css?: string | undefined;
28
+ }): string;
29
+ export declare function ThemeScope({ name, brand, systemScheme, css, children }: ThemeScopeProps): import("react").JSX.Element;
30
+ //# sourceMappingURL=ThemeScope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeScope.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeScope.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA6BxG,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAOD;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAIpD;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,MAAM,CAe9J;AAQD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,eAAe,+BA0BvF"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useContext, useEffect, useLayoutEffect, useState } from "react";
3
+ import { createGlobalStyle } from "styled-components";
4
+ import { brandCss } from "./brand.js";
5
+ import { scopeSelector } from "./scope.js";
6
+ import { cssVariables, v } from "./tokens.js";
7
+ const hasDOM = typeof window !== "undefined" && typeof document !== "undefined";
8
+ const useIsoLayoutEffect = hasDOM ? useLayoutEffect : useEffect;
9
+ const PortalCtx = createContext(null);
10
+ /**
11
+ * Where the kit's overlays portal to: the nearest ThemeScope's host, or
12
+ * document.body outside one (and before the host is mounted). Null on the
13
+ * server, where nothing portals.
14
+ */
15
+ export function usePortalTarget() {
16
+ const scoped = useContext(PortalCtx);
17
+ if (scoped)
18
+ return scoped;
19
+ return hasDOM ? document.body : null;
20
+ }
21
+ /** The scope's sheets: the kit's tokens and ramp, the ink, then the host's own. */
22
+ export function themeScopeCss(name, opts) {
23
+ const sheet = { scope: name, systemScheme: opts?.systemScheme };
24
+ const s = scopeSelector(name);
25
+ return `
26
+ ${cssVariables(sheet)}
27
+ ${opts?.brand ? brandCss(opts.brand, sheet) : ""}
28
+ ${s} {
29
+ color: ${v.text};
30
+ font-family: ${v.font};
31
+ -webkit-font-smoothing: antialiased;
32
+ }
33
+ ${s} *, ${s} *::before, ${s} *::after { box-sizing: border-box; }
34
+ ${s} ::selection { background: ${v.brand22}; }
35
+ ${opts?.css ?? ""}
36
+ `;
37
+ }
38
+ const ScopeSheet = createGlobalStyle `
39
+ ${(p) => p.$css}
40
+ `;
41
+ const wrapperStyle = { display: "contents" };
42
+ export function ThemeScope({ name, brand, systemScheme, css, children }) {
43
+ // The portal host is made once the component is in the DOM, so a server
44
+ // render (and a hydrating one) never touches document. An overlay that is
45
+ // already open on the first client frame lands in body for that frame and
46
+ // moves into the host on the next.
47
+ const [host, setHost] = useState(null);
48
+ useIsoLayoutEffect(() => {
49
+ const el = document.createElement("div");
50
+ el.setAttribute("data-x-scope", name);
51
+ el.setAttribute("data-x-portal", "");
52
+ document.body.appendChild(el);
53
+ setHost(el);
54
+ return () => {
55
+ el.remove();
56
+ setHost(null);
57
+ };
58
+ }, [name]);
59
+ return (_jsxs(PortalCtx.Provider, { value: host, children: [_jsx(ScopeSheet, { "$css": themeScopeCss(name, { brand, systemScheme, css }) }), _jsx("div", { "data-x-scope": name, style: wrapperStyle, children: children })] }));
60
+ }
61
+ //# sourceMappingURL=ThemeScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeScope.js","sourceRoot":"","sources":["../../src/theme/ThemeScope.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAqB,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAyC9C,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,CAAC;AAChF,MAAM,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;AAEhE,MAAM,SAAS,GAAG,aAAa,CAAqB,IAAI,CAAC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,OAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAA0G;IACpJ,MAAM,KAAK,GAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAC9E,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO;EACP,YAAY,CAAC,KAAK,CAAC;EACnB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;EAC9C,CAAC;WACQ,CAAC,CAAC,IAAI;iBACA,CAAC,CAAC,IAAI;;;EAGrB,CAAC,OAAO,CAAC,eAAe,CAAC;EACzB,CAAC,8BAA8B,CAAC,CAAC,OAAO;EACxC,IAAI,EAAE,GAAG,IAAI,EAAE;CAChB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,GAAG,iBAAiB,CAAkB;IAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;CAChB,CAAC;AAEF,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,UAAU,EAAW,CAAC;AAEtD,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAmB;IACtF,wEAAwE;IACxE,0EAA0E;IAC1E,0EAA0E;IAC1E,mCAAmC;IACnC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAC;IAC3D,kBAAkB,CAAC,GAAG,EAAE;QACtB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACtC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,CAAC,CAAC;QACZ,OAAO,GAAG,EAAE;YACV,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,CACL,MAAC,SAAS,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,aAC7B,KAAC,UAAU,YAAO,aAAa,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,GAAI,EACvE,8BAAmB,IAAI,EAAE,KAAK,EAAE,YAAY,YACzC,QAAQ,GACL,IACa,CACtB,CAAC;AACJ,CAAC"}