@crewlethq/ui 0.60.0 → 0.62.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 (35) hide show
  1. package/README.md +8 -0
  2. package/dist/Combobox/index.js +1 -1
  3. package/dist/PrincipalPicker/index.js +2 -2
  4. package/dist/Prose/Prose.d.ts +5 -2
  5. package/dist/Prose/index.js +1 -1
  6. package/dist/{Prose-BTXNFT2Q.css → Prose-OMV2T6NT.css} +19 -2
  7. package/dist/RichEditor/index.js +1 -1
  8. package/dist/SendButton/SendButton.d.ts +25 -11
  9. package/dist/SendButton/index.d.ts +1 -0
  10. package/dist/SendButton/index.js +1 -1
  11. package/dist/SendButton-L4UX54XS.css +173 -0
  12. package/dist/ThinkingIndicator/ThinkingIndicator.d.ts +37 -0
  13. package/dist/ThinkingIndicator/index.d.ts +3 -0
  14. package/dist/ThinkingIndicator/index.js +3 -0
  15. package/dist/ThinkingIndicator-QJMX2TXC.css +122 -0
  16. package/dist/ValueField/ValueField.d.ts +117 -0
  17. package/dist/ValueField/index.d.ts +10 -0
  18. package/dist/ValueField/index.js +15 -0
  19. package/dist/ValueField/references.d.ts +66 -0
  20. package/dist/ValueField-EIBD6RYS.css +13 -0
  21. package/dist/{chunk-V57TGM2L.js → chunk-5MN2HISF.js} +1 -1
  22. package/dist/{chunk-JCSA3XVH.js → chunk-DVVP27OD.js} +1 -1
  23. package/dist/chunk-E2MIUNUU.js +19 -0
  24. package/dist/{chunk-RPHQNXE5.js → chunk-IOZFPFQS.js} +1 -1
  25. package/dist/chunk-OD3Z6QKN.js +237 -0
  26. package/dist/chunk-PBR5C5MX.js +33 -0
  27. package/dist/{chunk-VC2M2E7N.js → chunk-PK2P2QH6.js} +4 -3
  28. package/dist/generated/index.d.ts +2 -0
  29. package/dist/generated/index.js +15 -13
  30. package/dist/index.js +15 -13
  31. package/dist/styles.css +337 -3
  32. package/package.json +3 -3
  33. package/dist/chunk-XN5L5E5D.js +0 -27
  34. package/dist/{Editor-EQBOZPXS.js → Editor-DM7X24B7.js} +1 -1
  35. /package/dist/{chunk-DJV2FVD2.js → chunk-UOTNQV6D.js} +0 -0
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Completing a `${NAME}` reference from a list of stored entry names.
3
+ *
4
+ * A value field takes either a value or a reference to one, and the reference
5
+ * has to be typed exactly: a name off by a character resolves to nothing,
6
+ * which reads as configured on every surface while whatever it feeds refuses
7
+ * every use. These helpers are what lets a field offer the names it knows
8
+ * rather than leaving the reader to copy one across from another screen.
9
+ */
10
+ /** The shape of a reference's name: a letter or underscore, then letters, digits and underscores. */
11
+ export declare const REFERENCE_NAME_PATTERN = "[A-Za-z_][A-Za-z0-9_]*";
12
+ /**
13
+ * Whether a value is exactly one `${NAME}` reference, trimmed first.
14
+ *
15
+ * This is the default a [ValueField] asks when deciding whether a secret's
16
+ * value is a name (readable) or a credential (masked). A product whose
17
+ * reference grammar is stricter passes its own predicate as `isReference`.
18
+ */
19
+ export declare function isWholeReference(value: string): boolean;
20
+ /** Where a reference is being typed, and what has been typed of it. */
21
+ export interface ReferenceQuery {
22
+ /** Index of the `$` that opens it. */
23
+ start: number;
24
+ /** What follows the `$`, with any `{` stripped. */
25
+ query: string;
26
+ }
27
+ /**
28
+ * The `${...}` under the caret, or null.
29
+ *
30
+ * IT SCANS BACK FROM THE CARET rather than matching the whole value, because
31
+ * a field can hold a reference among other text and the one being edited is
32
+ * the one being completed. The scan stops at whitespace and at a `}`: the
33
+ * first because no name contains one, the second because a reference that is
34
+ * already closed is finished, and offering to complete it again would replace
35
+ * a name somebody had chosen.
36
+ */
37
+ export declare function referenceAt(value: string, caret: number): ReferenceQuery | null;
38
+ /**
39
+ * The names ordered by how closely they match what has been typed.
40
+ *
41
+ * Three tiers, in the order somebody means them: a name that STARTS with the
42
+ * query, then one that CONTAINS it, then one whose letters appear in order.
43
+ * Case is ignored, because a name is upper snake case and nobody holds shift
44
+ * to filter a list. An empty query keeps every name in the order given: the
45
+ * point of typing `$` alone is to see what there is.
46
+ */
47
+ export declare function rankReferences(names: readonly string[], query: string): string[];
48
+ /**
49
+ * The value with the chosen name written in as a whole `${NAME}`, and where
50
+ * the caret goes.
51
+ *
52
+ * CLOSED BRACES, always, and the caret lands after them: a reference resolves
53
+ * only when it is whole, and a half-written one is a literal that reaches its
54
+ * destination as the characters somebody typed.
55
+ */
56
+ export declare function completeReference(value: string, caret: number, at: ReferenceQuery, name: string): {
57
+ value: string;
58
+ caret: number;
59
+ };
60
+ /**
61
+ * The scheme a value already carries, `https://`, `http://` or empty.
62
+ *
63
+ * Matched without regard to case, because a pasted address is whatever the
64
+ * address bar had.
65
+ */
66
+ export declare function urlSchemeOf(value: string): '' | 'https://' | 'http://';
@@ -0,0 +1,13 @@
1
+ /*
2
+ * ValueField: a labelled value with the control its kind needs.
3
+ *
4
+ * The row is FormField's and every control is the package's own; what is
5
+ * drawn here is the mark a label may carry, such as a third party's logo,
6
+ * set on the label's line ahead of its words.
7
+ */
8
+
9
+ .crewlet-value-field__label {
10
+ display: inline-flex;
11
+ align-items: center;
12
+ gap: var(--spacing-1);
13
+ }
@@ -9,7 +9,7 @@ import { jsx } from 'react/jsx-runtime';
9
9
  var engine = null;
10
10
  var loading = null;
11
11
  function loadEngine() {
12
- loading ??= import('./Editor-EQBOZPXS.js').then(
12
+ loading ??= import('./Editor-DM7X24B7.js').then(
13
13
  (module) => {
14
14
  engine = module.Editor;
15
15
  return engine;
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './Prose-BTXNFT2Q.css';
2
+ import './Prose-OMV2T6NT.css';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
5
5
  function Prose({
@@ -0,0 +1,19 @@
1
+ import { VisuallyHidden } from './chunk-UT6CW3C7.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './ThinkingIndicator-QJMX2TXC.css';
4
+ import { ProductMark } from '@crewlethq/icons/product-mark';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ function ThinkingIndicator({ status, label = "Thinking", className, ...rest }) {
8
+ return /* @__PURE__ */ jsxs("div", { ...rest, className: cx("crewlet-thinking", className), children: [
9
+ /* @__PURE__ */ jsx(ProductMark, { product: "assistant", size: "md", className: "crewlet-thinking__mark" }),
10
+ status === void 0 || status === "" ? null : (
11
+ // Keyed by its words, so a new step's line fades in rather than
12
+ // swapping in place mid shimmer.
13
+ /* @__PURE__ */ jsx("span", { className: "crewlet-thinking__status", "aria-hidden": "true", children: status }, status)
14
+ ),
15
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: /* @__PURE__ */ jsx("span", { role: "status", children: label }) })
16
+ ] });
17
+ }
18
+
19
+ export { ThinkingIndicator };
@@ -1,4 +1,4 @@
1
- import { Combobox } from './chunk-VC2M2E7N.js';
1
+ import { Combobox } from './chunk-PK2P2QH6.js';
2
2
  import { PRINCIPAL_KINDS, PrincipalAvatar } from './chunk-CI3VPIJN.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './PrincipalPicker-7NNZTGUP.css';
@@ -0,0 +1,237 @@
1
+ import { Select } from './chunk-XQZ6EWOE.js';
2
+ import { Combobox } from './chunk-PK2P2QH6.js';
3
+ import { FormField, Textarea, InputAffix } from './chunk-TLIJG4TP.js';
4
+ import './Input-GMOWHZRG.css';
5
+ import './VisuallyHidden-AOEXU5EB.css';
6
+ import './HitArea-QUOS6ZDJ.css';
7
+ import './Combobox-GBCWXWEB.css';
8
+ import './Select-F526HLNR.css';
9
+ import './ValueField-EIBD6RYS.css';
10
+ import { useId, useRef, useState } from 'react';
11
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
12
+
13
+ // src/ValueField/references.ts
14
+ var REFERENCE_NAME_PATTERN = "[A-Za-z_][A-Za-z0-9_]*";
15
+ var WHOLE_REFERENCE = new RegExp(`^\\$\\{${REFERENCE_NAME_PATTERN}\\}$`);
16
+ function isWholeReference(value) {
17
+ return WHOLE_REFERENCE.test(value.trim());
18
+ }
19
+ function referenceAt(value, caret) {
20
+ const head = value.slice(0, caret);
21
+ for (let i = head.length - 1; i >= 0; i--) {
22
+ const ch = head.charAt(i);
23
+ if (ch === "$") {
24
+ const rest = head.slice(i + 1);
25
+ const name = rest.startsWith("{") ? rest.slice(1) : rest;
26
+ if (!/^[A-Za-z0-9_]*$/.test(name)) return null;
27
+ return { start: i, query: name };
28
+ }
29
+ if (/\s/.test(ch) || ch === "}") return null;
30
+ }
31
+ return null;
32
+ }
33
+ function rankReferences(names, query) {
34
+ const q = query.toLowerCase();
35
+ if (q === "") return [...names];
36
+ const scored = [];
37
+ names.forEach((name, index) => {
38
+ const lower = name.toLowerCase();
39
+ if (lower.startsWith(q)) scored.push({ name, tier: 0, index });
40
+ else if (lower.includes(q)) scored.push({ name, tier: 1, index });
41
+ else if (isSubsequence(lower, q)) scored.push({ name, tier: 2, index });
42
+ });
43
+ return scored.sort((a, b) => a.tier - b.tier || a.index - b.index).map((s) => s.name);
44
+ }
45
+ function isSubsequence(s, q) {
46
+ let at = 0;
47
+ for (const ch of q) {
48
+ at = s.indexOf(ch, at);
49
+ if (at < 0) return false;
50
+ at += 1;
51
+ }
52
+ return true;
53
+ }
54
+ function completeReference(value, caret, at, name) {
55
+ const written = "${" + name + "}";
56
+ const head = value.slice(0, at.start);
57
+ const tail = value.slice(caret).replace(/^\}/, "");
58
+ return { value: head + written + tail, caret: head.length + written.length };
59
+ }
60
+ function urlSchemeOf(value) {
61
+ const lower = value.toLowerCase();
62
+ if (lower.startsWith("https://")) return "https://";
63
+ if (lower.startsWith("http://")) return "http://";
64
+ return "";
65
+ }
66
+ var DEFAULT_LABELS = {
67
+ references: "Secrets",
68
+ choose: "Choose one"
69
+ };
70
+ function ValueField({
71
+ label,
72
+ mark,
73
+ kind = "text",
74
+ value,
75
+ onChange,
76
+ help,
77
+ error,
78
+ placeholder,
79
+ choices,
80
+ disabled,
81
+ required,
82
+ markRequired,
83
+ autoFocus,
84
+ references,
85
+ onReferencesNeeded,
86
+ isReference = isWholeReference,
87
+ rows = 3,
88
+ helperOnFocus,
89
+ labels,
90
+ className
91
+ }) {
92
+ const words = { ...DEFAULT_LABELS, ...labels };
93
+ const id = useId();
94
+ const affixId = `${id}-affix`;
95
+ const picker = kind === "choice" || kind === "handle";
96
+ const reference = isReference(value);
97
+ const masked = kind === "secret" && !reference;
98
+ const tight = kind === "url" || kind === "id" || kind === "email";
99
+ const own = kind === "url" ? urlSchemeOf(value) : "";
100
+ const referenceBase = own === "" && value.trimStart().startsWith("$");
101
+ const affix = kind === "url" && own !== "http://" && !referenceBase ? "https://" : "";
102
+ const shown = affix ? value.slice(own.length) : value;
103
+ const box = useRef(null);
104
+ const [typing, setTyping] = useState(null);
105
+ const offered = typing && references?.length ? rankReferences(references, typing.query) : [];
106
+ function reconsider(text, caretAt) {
107
+ if (affix) return;
108
+ const caret = masked || caretAt === null ? text.length : caretAt;
109
+ const next = referenceAt(text, caret);
110
+ if (next && !typing) onReferencesNeeded?.();
111
+ setTyping(next);
112
+ }
113
+ function reconsiderFrom(input) {
114
+ reconsider(input.value, masked ? null : input.selectionStart);
115
+ }
116
+ function choose(name) {
117
+ const input = box.current;
118
+ if (!input || !typing) return;
119
+ const caret = masked ? input.value.length : input.selectionStart ?? input.value.length;
120
+ const next = completeReference(input.value, caret, typing, name);
121
+ setTyping(null);
122
+ onChange(next.value);
123
+ queueMicrotask(() => {
124
+ input.setSelectionRange(next.caret, next.caret);
125
+ input.focus();
126
+ });
127
+ }
128
+ function changed(raw) {
129
+ const typed = tight ? raw.replace(/\s+/g, "") : raw;
130
+ let next = typed;
131
+ if (affix) {
132
+ const carried = urlSchemeOf(typed);
133
+ const escapes = carried === "http://" || own === "" && typed.trimStart().startsWith("$");
134
+ next = escapes ? typed : affix + typed.slice(carried.length);
135
+ }
136
+ onChange(next);
137
+ return next;
138
+ }
139
+ const options = picker ? choiceOptions(choices, value) : [];
140
+ const chosen = picker ? choices?.find((choice) => choice.value === value) : void 0;
141
+ const helper = chosen?.hint && help ? /* @__PURE__ */ jsxs(Fragment, { children: [
142
+ help,
143
+ " ",
144
+ chosen.hint
145
+ ] }) : chosen?.hint ?? help;
146
+ return /* @__PURE__ */ jsx(
147
+ FormField,
148
+ {
149
+ htmlFor: id,
150
+ className,
151
+ label: mark ? /* @__PURE__ */ jsxs("span", { className: "crewlet-value-field__label", children: [
152
+ mark,
153
+ label
154
+ ] }) : label,
155
+ optional: required === false,
156
+ requiredNews: required === true && markRequired === true,
157
+ helper,
158
+ helperOnFocus,
159
+ error,
160
+ describedBy: affix ? affixId : void 0,
161
+ children: (field) => picker ? /* @__PURE__ */ jsx(
162
+ Select,
163
+ {
164
+ id: field.id,
165
+ value,
166
+ onChange: (next) => onChange(String(next)),
167
+ options,
168
+ placeholder: words.choose,
169
+ disabled: disabled === true,
170
+ autoFocus,
171
+ error: field.invalid,
172
+ required: required === true,
173
+ "aria-describedby": field.describedBy
174
+ }
175
+ ) : kind === "multiline" ? /* @__PURE__ */ jsx(
176
+ Textarea,
177
+ {
178
+ id: field.id,
179
+ rows,
180
+ value,
181
+ placeholder,
182
+ disabled,
183
+ autoComplete: "off",
184
+ spellCheck: true,
185
+ autoFocus,
186
+ "aria-describedby": field.describedBy,
187
+ "aria-required": required === true || void 0,
188
+ error: field.invalid,
189
+ onChange: (event) => onChange(event.target.value)
190
+ }
191
+ ) : /* @__PURE__ */ jsx(
192
+ Combobox,
193
+ {
194
+ id: field.id,
195
+ ref: box,
196
+ appearance: reference ? "reference" : "default",
197
+ type: masked ? "password" : "text",
198
+ inputMode: kind === "email" ? "email" : kind === "url" ? "url" : void 0,
199
+ value: shown,
200
+ placeholder,
201
+ disabled,
202
+ autoFocus,
203
+ error: field.invalid,
204
+ "aria-describedby": field.describedBy,
205
+ "aria-required": required === true || void 0,
206
+ leading: affix ? /* @__PURE__ */ jsx(InputAffix, { text: affix, id: affixId }) : void 0,
207
+ label: words.references,
208
+ mono: true,
209
+ tabCommits: true,
210
+ options: offered.map((name) => ({ value: name })),
211
+ onCommit: (option) => choose(option.value),
212
+ open: offered.length > 0,
213
+ onOpenChange: (open) => {
214
+ if (!open) setTyping(null);
215
+ },
216
+ onValueChange: (raw) => {
217
+ const next = changed(raw);
218
+ reconsider(next, box.current?.selectionStart ?? null);
219
+ },
220
+ onKeyUp: (event) => reconsiderFrom(event.currentTarget),
221
+ onClick: (event) => reconsiderFrom(event.currentTarget),
222
+ onBlur: () => setTyping(null)
223
+ }
224
+ )
225
+ }
226
+ );
227
+ }
228
+ function choiceOptions(choices, value) {
229
+ const all = choices ?? [];
230
+ const rows = all.map((choice) => ({ value: choice.value, label: choice.label, description: choice.hint }));
231
+ if (value !== "" && !all.some((choice) => choice.value === value)) {
232
+ return [{ value, label: value }, ...rows];
233
+ }
234
+ return rows;
235
+ }
236
+
237
+ export { REFERENCE_NAME_PATTERN, ValueField, completeReference, isWholeReference, rankReferences, referenceAt, urlSchemeOf };
@@ -0,0 +1,33 @@
1
+ import { IconButton } from './chunk-2XWFWNDT.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './SendButton-L4UX54XS.css';
4
+ import { forwardRef } from 'react';
5
+ import { ArrowUpGlyph, SquareGlyph } from '@crewlethq/icons/glyphs';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ var SEND_BUTTON_LABELS = { send: "Send", stop: "Stop" };
9
+ var SendButton = forwardRef(function SendButton2({ mode, onPress, disabledReason, labels: overrides, className, title, ...rest }, ref) {
10
+ const labels = overrides ? { ...SEND_BUTTON_LABELS, ...overrides } : SEND_BUTTON_LABELS;
11
+ const stopping = mode === "stop";
12
+ const name = stopping ? labels.stop : labels.send;
13
+ return /* @__PURE__ */ jsx(
14
+ IconButton,
15
+ {
16
+ ...rest,
17
+ ref,
18
+ size: "md",
19
+ variant: stopping ? "secondary" : "primary",
20
+ label: name,
21
+ title: disabledReason ?? title ?? name,
22
+ icon: /* @__PURE__ */ jsxs("span", { className: "crewlet-send-button__glyphs", "aria-hidden": "true", children: [
23
+ /* @__PURE__ */ jsx(ArrowUpGlyph, { className: "crewlet-send-button__glyph crewlet-send-button__glyph--send" }),
24
+ /* @__PURE__ */ jsx(SquareGlyph, { filled: true, className: "crewlet-send-button__glyph crewlet-send-button__glyph--stop" })
25
+ ] }),
26
+ disabledReason,
27
+ className: cx("crewlet-send-button", `crewlet-send-button--${mode}`, className),
28
+ onClick: onPress
29
+ }
30
+ );
31
+ });
32
+
33
+ export { SEND_BUTTON_LABELS, SendButton };
@@ -160,6 +160,7 @@ var Combobox = forwardRef(function Combobox2({
160
160
  ] })
161
161
  ] });
162
162
  }
163
+ const announcesRole = rest.type !== "password" || lists;
163
164
  return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-combobox", containerClassName), ref: listbox.anchorRef, children: [
164
165
  /* @__PURE__ */ jsx(
165
166
  Input,
@@ -169,9 +170,9 @@ var Combobox = forwardRef(function Combobox2({
169
170
  id: fieldId,
170
171
  className,
171
172
  value,
172
- role: "combobox",
173
- "aria-autocomplete": "list",
174
- "aria-expanded": lists,
173
+ role: announcesRole ? "combobox" : void 0,
174
+ "aria-autocomplete": announcesRole ? "list" : void 0,
175
+ "aria-expanded": announcesRole ? lists : void 0,
175
176
  "aria-controls": lists ? listbox.listId : void 0,
176
177
  "aria-activedescendant": lists && offered.length > 0 ? listbox.optionId(listbox.active) : void 0,
177
178
  autoComplete: "off",
@@ -207,6 +207,7 @@ export * from '../ThemeGallery/index.js';
207
207
  export * from '../ThemeSwatch/index.js';
208
208
  export * from '../ThemeSwitcher/index.js';
209
209
  export * from '../ThemeToggle/index.js';
210
+ export * from '../ThinkingIndicator/index.js';
210
211
  export * from '../TileGrid/index.js';
211
212
  export * from '../TimeRangePicker/index.js';
212
213
  export * from '../TimeWindowPicker/index.js';
@@ -218,6 +219,7 @@ export * from '../Tree/index.js';
218
219
  export * from '../TreeCanvas/index.js';
219
220
  export * from '../TreeGrid/index.js';
220
221
  export * from '../TypeSpecimen/index.js';
222
+ export * from '../ValueField/index.js';
221
223
  export * from '../VersionCompare/index.js';
222
224
  export * from '../VersionTimeline/index.js';
223
225
  export * from '../VisuallyHidden/index.js';
@@ -1,13 +1,15 @@
1
- import '../chunk-DJV2FVD2.js';
1
+ import '../chunk-UOTNQV6D.js';
2
+ export { VersionTimeline } from '../chunk-TUNEMQXF.js';
2
3
  export { WidgetFrame } from '../chunk-3DMPZZQ6.js';
3
4
  export { ElementToPngError, elementToPng, parseCsv, serializeElement, toCsv } from '../chunk-FEJANUZK.js';
4
5
  export { TreeCanvas } from '../chunk-5NJ4BIUA.js';
5
6
  export { TypeSpecimen } from '../chunk-JKAFEFFC.js';
6
7
  export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-NL72YZWF.js';
7
- export { VersionTimeline } from '../chunk-TUNEMQXF.js';
8
+ export { REFERENCE_NAME_PATTERN, ValueField, completeReference, isWholeReference, rankReferences, referenceAt, urlSchemeOf } from '../chunk-OD3Z6QKN.js';
8
9
  export { DensitySwitcher, ThemeSwitcher } from '../chunk-53NTMTRM.js';
9
10
  export { ThemeToggle } from '../chunk-RLFPBRN4.js';
10
11
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from '../chunk-Z24ZUSTX.js';
12
+ export { ThinkingIndicator } from '../chunk-E2MIUNUU.js';
11
13
  export { TileGrid } from '../chunk-Q6CQMS6R.js';
12
14
  export { TIME_RANGE_CUSTOM, TIME_RANGE_PICKER_LABELS, TimeRangePicker, timeRangeFieldKey, timeRangeProblem } from '../chunk-LND6XSXN.js';
13
15
  export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-SG2375ZY.js';
@@ -32,16 +34,16 @@ import '../chunk-73GUXYYE.js';
32
34
  export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-W2Q5DZJB.js';
33
35
  export { SegmentedMeter, segmentedMeterLabel } from '../chunk-4AK52VHB.js';
34
36
  export { SelectionBar } from '../chunk-6Z4JZHRB.js';
35
- export { SEND_BUTTON_LABELS, SendButton } from '../chunk-XN5L5E5D.js';
36
- export { SettingsTable, SettingsTableRow } from '../chunk-4RKTZSEW.js';
37
+ export { SEND_BUTTON_LABELS, SendButton } from '../chunk-PBR5C5MX.js';
37
38
  export { SetupWizard } from '../chunk-T4THNJ6E.js';
39
+ export { SettingsTable, SettingsTableRow } from '../chunk-4RKTZSEW.js';
38
40
  export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-B5ZHJWAZ.js';
39
41
  export { Select } from '../chunk-XQZ6EWOE.js';
40
42
  export { ReviewList } from '../chunk-OJ2QULVH.js';
43
+ export { RichEditor, preloadRichEditor } from '../chunk-5MN2HISF.js';
44
+ export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
41
45
  export { canonicalMarkdown, roundTripMarkdown } from '../chunk-SWD4QBL6.js';
42
46
  import '../chunk-QH6VYJ3X.js';
43
- export { RichEditor, preloadRichEditor } from '../chunk-V57TGM2L.js';
44
- export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
45
47
  export { RUN_STATES, RunChip } from '../chunk-75QASA62.js';
46
48
  export { STEP_STATES, STEP_STATE_LABELS, StepList, StepStateMark, Stepper, stepDetailPieces } from '../chunk-Z4EKUMZW.js';
47
49
  export { FRAME_HELLO_TIMEOUT_MS, FRAME_LOAD_GRACE_MS, SandboxedFrame, SandboxedFrameNotice, SandboxedFramePlaceholder } from '../chunk-WR7UDG7U.js';
@@ -56,14 +58,14 @@ export { Text } from '../chunk-QP2P6GDQ.js';
56
58
  export { RESULT_TABLE_CARD_LABELS, RESULT_TABLE_COLLAPSED_ROWS, RESULT_TABLE_MAX_ROWS, ResultTableCard } from '../chunk-OM6CPZB7.js';
57
59
  export { Table } from '../chunk-5DJMFRSZ.js';
58
60
  export { PresenceStack } from '../chunk-FGRJXZUU.js';
61
+ export { PricingCard } from '../chunk-U3ILLCR2.js';
59
62
  export { PresenterView, formatStopwatch } from '../chunk-P5S2SPTK.js';
60
63
  export { SLIDE_NAV_LABELS, SlideNav } from '../chunk-DEAFAK3U.js';
61
64
  export { SLIDE_HEIGHT, SLIDE_WIDTH, SlideStage, useSlideKeys } from '../chunk-RMEBFYL7.js';
62
- export { PricingCard } from '../chunk-U3ILLCR2.js';
63
- export { PrincipalPicker } from '../chunk-RPHQNXE5.js';
65
+ export { PrincipalPicker } from '../chunk-IOZFPFQS.js';
64
66
  export { PropertyList } from '../chunk-VBYRA3W6.js';
65
67
  export { PROPOSAL_CARD_LABELS, PROPOSAL_FAILURE_OUTCOMES, PROPOSAL_STATES, ProposalCard } from '../chunk-PFXUEEHT.js';
66
- export { Prose } from '../chunk-JCSA3XVH.js';
68
+ export { Prose } from '../chunk-DVVP27OD.js';
67
69
  export { PageNote } from '../chunk-CV4NES3P.js';
68
70
  export { PEEK_RAIL_LABELS, PEEK_RAIL_MAX_WIDTH, PEEK_RAIL_MIN_WIDTH, PEEK_RAIL_WIDTH, PeekHost, PeekNeighbours, PeekRail, isPlainPress, peekClickHandler, peekRowActivation, usePeekNeighbours, usePeekOrder, usePeekStep } from '../chunk-VBO2GYWX.js';
69
71
  export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-EFIURN3U.js';
@@ -96,8 +98,8 @@ export { AutoGrid, Inline, Spacer, Stack } from '../chunk-ZAC7SKUN.js';
96
98
  export { Link } from '../chunk-HOP3J622.js';
97
99
  export { LinkInterstitial, openExternal } from '../chunk-EQHJTGLY.js';
98
100
  import '../chunk-FFMCMSJB.js';
99
- export { ImageUpload } from '../chunk-PPVWWJIB.js';
100
101
  export { IconTile } from '../chunk-3LI4TRUR.js';
102
+ export { ImageUpload } from '../chunk-PPVWWJIB.js';
101
103
  export { InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from '../chunk-5KEVSZ4K.js';
102
104
  export { IndicatorAnchor } from '../chunk-27MJPU7G.js';
103
105
  export { INLINE_EDITOR_LABELS, InlineEditor } from '../chunk-46VE5TVS.js';
@@ -111,9 +113,9 @@ export { IDLE_AFTER_MS, useFullscreen, useIdle } from '../chunk-W5XCNEZC.js';
111
113
  export { Highlight, highlightRanges, highlightTerms } from '../chunk-H6VKCIWV.js';
112
114
  import '../chunk-MICRGE3J.js';
113
115
  export { EntityChip } from '../chunk-OSKJZNBT.js';
114
- export { ErrorBoundary } from '../chunk-ZEPUKRO7.js';
115
116
  export { EntityList } from '../chunk-OB5N3FV2.js';
116
117
  export { StatusCard } from '../chunk-WW4E5EUS.js';
118
+ export { ErrorBoundary } from '../chunk-ZEPUKRO7.js';
117
119
  export { Eyebrow } from '../chunk-RK4XPHVG.js';
118
120
  export { FactList } from '../chunk-HACEB6L4.js';
119
121
  export { FileDrop, FilePickButton, droppedFiles, pickedFiles } from '../chunk-2JHGPXYG.js';
@@ -147,7 +149,7 @@ export { ColorSwatch } from '../chunk-KA2GAB3N.js';
147
149
  export { CopyButton, Copyable } from '../chunk-IOTN23FZ.js';
148
150
  export { useClipboard, writeClipboard } from '../chunk-STJ7QBC3.js';
149
151
  export { useOutcome } from '../chunk-DTIW4CHZ.js';
150
- export { Combobox } from '../chunk-VC2M2E7N.js';
152
+ export { Combobox } from '../chunk-PK2P2QH6.js';
151
153
  export { CommandPalette } from '../chunk-I74C4TM6.js';
152
154
  export { ConfirmModal, Modal } from '../chunk-KVWZDCTQ.js';
153
155
  export { HIGHLIGHT_REST_MS, TYPE_AHEAD_WINDOW, useHighlightRest, useListbox, useOptionKeys } from '../chunk-7KHM2FZH.js';
@@ -221,6 +223,7 @@ export { ARTIFACT_KINDS, ArtifactKindGlyph } from '../chunk-RSKW25Y5.js';
221
223
  export { ACCESS_DENIED_REASONS, AccessDeniedCard } from '../chunk-QTMUKRTN.js';
222
224
  export { EmptyState } from '../chunk-PPUR46MK.js';
223
225
  export { Accordion, AccordionItem } from '../chunk-K4U2VDOJ.js';
226
+ export { ADD_PILL_MS, AddPill } from '../chunk-QC2DEQCN.js';
224
227
  export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-5UPWU6ZJ.js';
225
228
  export { Timeline, TimelineItem } from '../chunk-Z6X3F4H6.js';
226
229
  export { Section } from '../chunk-JQ7IFSF6.js';
@@ -234,7 +237,6 @@ export { CHARACTER_COUNT_LABELS, CHARACTER_COUNT_NEAR, CharacterCount, character
234
237
  export { DisclosureAnatomy } from '../chunk-ZYO2QFU6.js';
235
238
  export { Count } from '../chunk-5KRRJNQO.js';
236
239
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from '../chunk-PQADV6P6.js';
237
- export { ADD_PILL_MS, AddPill } from '../chunk-QC2DEQCN.js';
238
240
  export { Announcer, announce, useAnnouncer } from '../chunk-2G355KDJ.js';
239
241
  export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useStoredWidth } from '../chunk-7SRSPU4O.js';
240
242
  export { useMediaMatch } from '../chunk-RTPQDNW3.js';
package/dist/index.js CHANGED
@@ -1,13 +1,15 @@
1
- import './chunk-DJV2FVD2.js';
1
+ import './chunk-UOTNQV6D.js';
2
+ export { VersionTimeline } from './chunk-TUNEMQXF.js';
2
3
  export { WidgetFrame } from './chunk-3DMPZZQ6.js';
3
4
  export { ElementToPngError, elementToPng, parseCsv, serializeElement, toCsv } from './chunk-FEJANUZK.js';
4
5
  export { TreeCanvas } from './chunk-5NJ4BIUA.js';
5
6
  export { TypeSpecimen } from './chunk-JKAFEFFC.js';
6
7
  export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from './chunk-NL72YZWF.js';
7
- export { VersionTimeline } from './chunk-TUNEMQXF.js';
8
+ export { REFERENCE_NAME_PATTERN, ValueField, completeReference, isWholeReference, rankReferences, referenceAt, urlSchemeOf } from './chunk-OD3Z6QKN.js';
8
9
  export { DensitySwitcher, ThemeSwitcher } from './chunk-53NTMTRM.js';
9
10
  export { ThemeToggle } from './chunk-RLFPBRN4.js';
10
11
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from './chunk-Z24ZUSTX.js';
12
+ export { ThinkingIndicator } from './chunk-E2MIUNUU.js';
11
13
  export { TileGrid } from './chunk-Q6CQMS6R.js';
12
14
  export { TIME_RANGE_CUSTOM, TIME_RANGE_PICKER_LABELS, TimeRangePicker, timeRangeFieldKey, timeRangeProblem } from './chunk-LND6XSXN.js';
13
15
  export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-SG2375ZY.js';
@@ -32,16 +34,16 @@ import './chunk-73GUXYYE.js';
32
34
  export { SLIDE_COMPARE_LABELS, SlideCompare } from './chunk-W2Q5DZJB.js';
33
35
  export { SegmentedMeter, segmentedMeterLabel } from './chunk-4AK52VHB.js';
34
36
  export { SelectionBar } from './chunk-6Z4JZHRB.js';
35
- export { SEND_BUTTON_LABELS, SendButton } from './chunk-XN5L5E5D.js';
36
- export { SettingsTable, SettingsTableRow } from './chunk-4RKTZSEW.js';
37
+ export { SEND_BUTTON_LABELS, SendButton } from './chunk-PBR5C5MX.js';
37
38
  export { SetupWizard } from './chunk-T4THNJ6E.js';
39
+ export { SettingsTable, SettingsTableRow } from './chunk-4RKTZSEW.js';
38
40
  export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from './chunk-B5ZHJWAZ.js';
39
41
  export { Select } from './chunk-XQZ6EWOE.js';
40
42
  export { ReviewList } from './chunk-OJ2QULVH.js';
43
+ export { RichEditor, preloadRichEditor } from './chunk-5MN2HISF.js';
44
+ export { RICH_EDITOR_LABELS, richEditorLabels } from './chunk-CSQTDGTS.js';
41
45
  export { canonicalMarkdown, roundTripMarkdown } from './chunk-SWD4QBL6.js';
42
46
  import './chunk-QH6VYJ3X.js';
43
- export { RichEditor, preloadRichEditor } from './chunk-V57TGM2L.js';
44
- export { RICH_EDITOR_LABELS, richEditorLabels } from './chunk-CSQTDGTS.js';
45
47
  export { RUN_STATES, RunChip } from './chunk-75QASA62.js';
46
48
  export { STEP_STATES, STEP_STATE_LABELS, StepList, StepStateMark, Stepper, stepDetailPieces } from './chunk-Z4EKUMZW.js';
47
49
  export { FRAME_HELLO_TIMEOUT_MS, FRAME_LOAD_GRACE_MS, SandboxedFrame, SandboxedFrameNotice, SandboxedFramePlaceholder } from './chunk-WR7UDG7U.js';
@@ -56,14 +58,14 @@ export { Text } from './chunk-QP2P6GDQ.js';
56
58
  export { RESULT_TABLE_CARD_LABELS, RESULT_TABLE_COLLAPSED_ROWS, RESULT_TABLE_MAX_ROWS, ResultTableCard } from './chunk-OM6CPZB7.js';
57
59
  export { Table } from './chunk-5DJMFRSZ.js';
58
60
  export { PresenceStack } from './chunk-FGRJXZUU.js';
61
+ export { PricingCard } from './chunk-U3ILLCR2.js';
59
62
  export { PresenterView, formatStopwatch } from './chunk-P5S2SPTK.js';
60
63
  export { SLIDE_NAV_LABELS, SlideNav } from './chunk-DEAFAK3U.js';
61
64
  export { SLIDE_HEIGHT, SLIDE_WIDTH, SlideStage, useSlideKeys } from './chunk-RMEBFYL7.js';
62
- export { PricingCard } from './chunk-U3ILLCR2.js';
63
- export { PrincipalPicker } from './chunk-RPHQNXE5.js';
65
+ export { PrincipalPicker } from './chunk-IOZFPFQS.js';
64
66
  export { PropertyList } from './chunk-VBYRA3W6.js';
65
67
  export { PROPOSAL_CARD_LABELS, PROPOSAL_FAILURE_OUTCOMES, PROPOSAL_STATES, ProposalCard } from './chunk-PFXUEEHT.js';
66
- export { Prose } from './chunk-JCSA3XVH.js';
68
+ export { Prose } from './chunk-DVVP27OD.js';
67
69
  export { PageNote } from './chunk-CV4NES3P.js';
68
70
  export { PEEK_RAIL_LABELS, PEEK_RAIL_MAX_WIDTH, PEEK_RAIL_MIN_WIDTH, PEEK_RAIL_WIDTH, PeekHost, PeekNeighbours, PeekRail, isPlainPress, peekClickHandler, peekRowActivation, usePeekNeighbours, usePeekOrder, usePeekStep } from './chunk-VBO2GYWX.js';
69
71
  export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from './chunk-EFIURN3U.js';
@@ -96,8 +98,8 @@ export { AutoGrid, Inline, Spacer, Stack } from './chunk-ZAC7SKUN.js';
96
98
  export { Link } from './chunk-HOP3J622.js';
97
99
  export { LinkInterstitial, openExternal } from './chunk-EQHJTGLY.js';
98
100
  import './chunk-FFMCMSJB.js';
99
- export { ImageUpload } from './chunk-PPVWWJIB.js';
100
101
  export { IconTile } from './chunk-3LI4TRUR.js';
102
+ export { ImageUpload } from './chunk-PPVWWJIB.js';
101
103
  export { InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from './chunk-5KEVSZ4K.js';
102
104
  export { IndicatorAnchor } from './chunk-27MJPU7G.js';
103
105
  export { INLINE_EDITOR_LABELS, InlineEditor } from './chunk-46VE5TVS.js';
@@ -111,9 +113,9 @@ export { IDLE_AFTER_MS, useFullscreen, useIdle } from './chunk-W5XCNEZC.js';
111
113
  export { Highlight, highlightRanges, highlightTerms } from './chunk-H6VKCIWV.js';
112
114
  import './chunk-MICRGE3J.js';
113
115
  export { EntityChip } from './chunk-OSKJZNBT.js';
114
- export { ErrorBoundary } from './chunk-ZEPUKRO7.js';
115
116
  export { EntityList } from './chunk-OB5N3FV2.js';
116
117
  export { StatusCard } from './chunk-WW4E5EUS.js';
118
+ export { ErrorBoundary } from './chunk-ZEPUKRO7.js';
117
119
  export { Eyebrow } from './chunk-RK4XPHVG.js';
118
120
  export { FactList } from './chunk-HACEB6L4.js';
119
121
  export { FileDrop, FilePickButton, droppedFiles, pickedFiles } from './chunk-2JHGPXYG.js';
@@ -147,7 +149,7 @@ export { ColorSwatch } from './chunk-KA2GAB3N.js';
147
149
  export { CopyButton, Copyable } from './chunk-IOTN23FZ.js';
148
150
  export { useClipboard, writeClipboard } from './chunk-STJ7QBC3.js';
149
151
  export { useOutcome } from './chunk-DTIW4CHZ.js';
150
- export { Combobox } from './chunk-VC2M2E7N.js';
152
+ export { Combobox } from './chunk-PK2P2QH6.js';
151
153
  export { CommandPalette } from './chunk-I74C4TM6.js';
152
154
  export { ConfirmModal, Modal } from './chunk-KVWZDCTQ.js';
153
155
  export { HIGHLIGHT_REST_MS, TYPE_AHEAD_WINDOW, useHighlightRest, useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
@@ -221,6 +223,7 @@ export { ARTIFACT_KINDS, ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
221
223
  export { ACCESS_DENIED_REASONS, AccessDeniedCard } from './chunk-QTMUKRTN.js';
222
224
  export { EmptyState } from './chunk-PPUR46MK.js';
223
225
  export { Accordion, AccordionItem } from './chunk-K4U2VDOJ.js';
226
+ export { ADD_PILL_MS, AddPill } from './chunk-QC2DEQCN.js';
224
227
  export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from './chunk-5UPWU6ZJ.js';
225
228
  export { Timeline, TimelineItem } from './chunk-Z6X3F4H6.js';
226
229
  export { Section } from './chunk-JQ7IFSF6.js';
@@ -234,7 +237,6 @@ export { CHARACTER_COUNT_LABELS, CHARACTER_COUNT_NEAR, CharacterCount, character
234
237
  export { DisclosureAnatomy } from './chunk-ZYO2QFU6.js';
235
238
  export { Count } from './chunk-5KRRJNQO.js';
236
239
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from './chunk-PQADV6P6.js';
237
- export { ADD_PILL_MS, AddPill } from './chunk-QC2DEQCN.js';
238
240
  export { Announcer, announce, useAnnouncer } from './chunk-2G355KDJ.js';
239
241
  export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useStoredWidth } from './chunk-7SRSPU4O.js';
240
242
  export { useMediaMatch } from './chunk-RTPQDNW3.js';