@tai42/studio-sdk 25.0.0 → 26.0.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.
- package/README.md +143 -26
- package/dist/components/action-menu.d.ts +30 -0
- package/dist/components/action-menu.d.ts.map +1 -0
- package/dist/components/action-menu.js +101 -0
- package/dist/components/action-menu.js.map +1 -0
- package/dist/components/agent-picker.d.ts +22 -0
- package/dist/components/agent-picker.d.ts.map +1 -0
- package/dist/components/agent-picker.js +17 -0
- package/dist/components/agent-picker.js.map +1 -0
- package/dist/components/channel-picker.d.ts +27 -0
- package/dist/components/channel-picker.d.ts.map +1 -0
- package/dist/components/channel-picker.js +26 -0
- package/dist/components/channel-picker.js.map +1 -0
- package/dist/components/components.css +226 -8
- package/dist/components/confirm-dialog.d.ts +3 -1
- package/dist/components/confirm-dialog.d.ts.map +1 -1
- package/dist/components/confirm-dialog.js +2 -2
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/execution-key-picker.d.ts +26 -10
- package/dist/components/execution-key-picker.d.ts.map +1 -1
- package/dist/components/execution-key-picker.js +134 -15
- package/dist/components/execution-key-picker.js.map +1 -1
- package/dist/components/extension-combo-builder.d.ts +7 -7
- package/dist/components/extension-combo-builder.d.ts.map +1 -1
- package/dist/components/extension-combo-builder.js +42 -16
- package/dist/components/extension-combo-builder.js.map +1 -1
- package/dist/components/extension-combo-parts.d.ts +13 -11
- package/dist/components/extension-combo-parts.d.ts.map +1 -1
- package/dist/components/extension-combo-parts.js +10 -19
- package/dist/components/extension-combo-parts.js.map +1 -1
- package/dist/components/extension-config-editor.d.ts +33 -0
- package/dist/components/extension-config-editor.d.ts.map +1 -0
- package/dist/components/extension-config-editor.js +190 -0
- package/dist/components/extension-config-editor.js.map +1 -0
- package/dist/components/extension-grouping.d.ts +4 -41
- package/dist/components/extension-grouping.d.ts.map +1 -1
- package/dist/components/extension-grouping.js +1 -48
- package/dist/components/extension-grouping.js.map +1 -1
- package/dist/components/extension-picker.d.ts +4 -3
- package/dist/components/extension-picker.d.ts.map +1 -1
- package/dist/components/extension-picker.js +6 -6
- package/dist/components/extension-picker.js.map +1 -1
- package/dist/components/fleet-report.d.ts +8 -3
- package/dist/components/fleet-report.d.ts.map +1 -1
- package/dist/components/fleet-report.js +12 -2
- package/dist/components/fleet-report.js.map +1 -1
- package/dist/components/holder-kinds.d.ts +18 -0
- package/dist/components/holder-kinds.d.ts.map +1 -0
- package/dist/components/holder-kinds.js +41 -0
- package/dist/components/holder-kinds.js.map +1 -0
- package/dist/components/holder-list.d.ts +58 -0
- package/dist/components/holder-list.d.ts.map +1 -0
- package/dist/components/holder-list.js +77 -0
- package/dist/components/holder-list.js.map +1 -0
- package/dist/components/icons/index.d.ts +1 -1
- package/dist/components/icons/index.d.ts.map +1 -1
- package/dist/components/icons/index.js +1 -1
- package/dist/components/icons/index.js.map +1 -1
- package/dist/components/icons/nav-map.d.ts.map +1 -1
- package/dist/components/icons/nav-map.js +1 -3
- package/dist/components/icons/nav-map.js.map +1 -1
- package/dist/components/icons/nav-marks.d.ts +0 -4
- package/dist/components/icons/nav-marks.d.ts.map +1 -1
- package/dist/components/icons/nav-marks.js +0 -4
- package/dist/components/icons/nav-marks.js.map +1 -1
- package/dist/components/named-list-picker.d.ts +39 -0
- package/dist/components/named-list-picker.d.ts.map +1 -0
- package/dist/components/named-list-picker.js +61 -0
- package/dist/components/named-list-picker.js.map +1 -0
- package/dist/components/named-list-test-utils.d.ts +23 -0
- package/dist/components/named-list-test-utils.d.ts.map +1 -0
- package/dist/components/named-list-test-utils.js +33 -0
- package/dist/components/named-list-test-utils.js.map +1 -0
- package/dist/components/recycle-roll.d.ts +23 -0
- package/dist/components/recycle-roll.d.ts.map +1 -0
- package/dist/components/recycle-roll.js +47 -0
- package/dist/components/recycle-roll.js.map +1 -0
- package/dist/components/stepper.d.ts +28 -0
- package/dist/components/stepper.d.ts.map +1 -0
- package/dist/components/stepper.js +33 -0
- package/dist/components/stepper.js.map +1 -0
- package/dist/components/subject-section.d.ts +2 -1
- package/dist/components/subject-section.d.ts.map +1 -1
- package/dist/components/subject-section.js +10 -5
- package/dist/components/subject-section.js.map +1 -1
- package/dist/components/tokens.css +31 -41
- package/dist/components/tokens.d.ts +3 -4
- package/dist/components/tokens.d.ts.map +1 -1
- package/dist/components/tokens.js +5 -13
- package/dist/components/tokens.js.map +1 -1
- package/dist/components/tool-picker-parts.d.ts +5 -1
- package/dist/components/tool-picker-parts.d.ts.map +1 -1
- package/dist/components/tool-picker-parts.js +8 -6
- package/dist/components/tool-picker-parts.js.map +1 -1
- package/dist/components/tool-picker.d.ts +77 -2
- package/dist/components/tool-picker.d.ts.map +1 -1
- package/dist/components/tool-picker.js +87 -29
- package/dist/components/tool-picker.js.map +1 -1
- package/dist/components/version-history-panel.d.ts +7 -1
- package/dist/components/version-history-panel.d.ts.map +1 -1
- package/dist/components/version-history-panel.js +2 -2
- package/dist/components/version-history-panel.js.map +1 -1
- package/dist/components/version-history-rows.d.ts +4 -2
- package/dist/components/version-history-rows.d.ts.map +1 -1
- package/dist/components/version-history-rows.js +14 -2
- package/dist/components/version-history-rows.js.map +1 -1
- package/dist/errors.d.ts +5 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +7 -0
- package/dist/errors.js.map +1 -1
- package/dist/hooks/useApi.d.ts +524 -197
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/hooks/useCapabilities.d.ts +43 -10
- package/dist/hooks/useCapabilities.d.ts.map +1 -1
- package/dist/hooks/useCapabilities.js +39 -10
- package/dist/hooks/useCapabilities.js.map +1 -1
- package/dist/index.d.ts +25 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -6
- package/dist/index.js.map +1 -1
- package/dist/marketplace-install/env-var-fields.d.ts +17 -0
- package/dist/marketplace-install/env-var-fields.d.ts.map +1 -0
- package/dist/marketplace-install/env-var-fields.js +22 -0
- package/dist/marketplace-install/env-var-fields.js.map +1 -0
- package/dist/marketplace-install/index.d.ts +18 -0
- package/dist/marketplace-install/index.d.ts.map +1 -0
- package/dist/marketplace-install/index.js +8 -0
- package/dist/marketplace-install/index.js.map +1 -0
- package/dist/marketplace-install/install-env.d.ts +21 -0
- package/dist/marketplace-install/install-env.d.ts.map +1 -0
- package/dist/marketplace-install/install-env.js +22 -0
- package/dist/marketplace-install/install-env.js.map +1 -0
- package/dist/marketplace-install/install-mount.d.ts +42 -0
- package/dist/marketplace-install/install-mount.d.ts.map +1 -0
- package/dist/marketplace-install/install-mount.js +62 -0
- package/dist/marketplace-install/install-mount.js.map +1 -0
- package/dist/marketplace-install/install-report.d.ts +14 -0
- package/dist/marketplace-install/install-report.d.ts.map +1 -0
- package/dist/marketplace-install/install-report.js +19 -0
- package/dist/marketplace-install/install-report.js.map +1 -0
- package/dist/marketplace-install/install-shell.d.ts +34 -0
- package/dist/marketplace-install/install-shell.d.ts.map +1 -0
- package/dist/marketplace-install/install-shell.js +32 -0
- package/dist/marketplace-install/install-shell.js.map +1 -0
- package/dist/marketplace-install/mount-install.d.ts +41 -0
- package/dist/marketplace-install/mount-install.d.ts.map +1 -0
- package/dist/marketplace-install/mount-install.js +90 -0
- package/dist/marketplace-install/mount-install.js.map +1 -0
- package/dist/marketplace-install/plugin-detail.d.ts +17 -0
- package/dist/marketplace-install/plugin-detail.d.ts.map +1 -0
- package/dist/marketplace-install/plugin-detail.js +41 -0
- package/dist/marketplace-install/plugin-detail.js.map +1 -0
- package/dist/marketplace-install/plugin-install.d.ts +27 -0
- package/dist/marketplace-install/plugin-install.d.ts.map +1 -0
- package/dist/marketplace-install/plugin-install.js +89 -0
- package/dist/marketplace-install/plugin-install.js.map +1 -0
- package/dist/marketplace-install/route-items.d.ts +14 -0
- package/dist/marketplace-install/route-items.d.ts.map +1 -0
- package/dist/marketplace-install/route-items.js +11 -0
- package/dist/marketplace-install/route-items.js.map +1 -0
- package/dist/marketplace-install/use-debounced-value.d.ts +6 -0
- package/dist/marketplace-install/use-debounced-value.d.ts.map +1 -0
- package/dist/marketplace-install/use-debounced-value.js +18 -0
- package/dist/marketplace-install/use-debounced-value.js.map +1 -0
- package/dist/marketplace-install/use-install-action.d.ts +26 -0
- package/dist/marketplace-install/use-install-action.d.ts.map +1 -0
- package/dist/marketplace-install/use-install-action.js +35 -0
- package/dist/marketplace-install/use-install-action.js.map +1 -0
- package/dist/marketplace-install/use-install-preview.d.ts +33 -0
- package/dist/marketplace-install/use-install-preview.d.ts.map +1 -0
- package/dist/marketplace-install/use-install-preview.js +44 -0
- package/dist/marketplace-install/use-install-preview.js.map +1 -0
- package/dist/marketplace-install/use-mount-install.d.ts +80 -0
- package/dist/marketplace-install/use-mount-install.d.ts.map +1 -0
- package/dist/marketplace-install/use-mount-install.js +75 -0
- package/dist/marketplace-install/use-mount-install.js.map +1 -0
- package/dist/navigation/index.d.ts +1 -1
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/navigation/types.d.ts +23 -7
- package/dist/navigation/types.d.ts.map +1 -1
- package/dist/plugin/registry.d.ts +0 -8
- package/dist/plugin/registry.d.ts.map +1 -1
- package/dist/plugin/registry.js +25 -1
- package/dist/plugin/registry.js.map +1 -1
- package/dist/plugin/types.d.ts +36 -12
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/version.d.ts +6 -4
- package/dist/plugin/version.d.ts.map +1 -1
- package/dist/plugin/version.js +6 -4
- package/dist/plugin/version.js.map +1 -1
- package/dist/query-keys.d.ts +45 -4
- package/dist/query-keys.d.ts.map +1 -1
- package/dist/query-keys.js +52 -4
- package/dist/query-keys.js.map +1 -1
- package/dist/schema-form/json-schema-meta.d.ts +3 -0
- package/dist/schema-form/json-schema-meta.d.ts.map +1 -0
- package/dist/schema-form/json-schema-meta.js +3 -0
- package/dist/schema-form/json-schema-meta.js.map +1 -0
- package/dist/testing.d.ts +2 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +2 -0
- package/dist/testing.js.map +1 -1
- package/dist/token-rules.d.ts +26 -0
- package/dist/token-rules.d.ts.map +1 -0
- package/dist/token-rules.js +64 -0
- package/dist/token-rules.js.map +1 -0
- package/package.json +7 -7
- package/src/components/action-menu.tsx +160 -0
- package/src/components/agent-picker.tsx +53 -0
- package/src/components/channel-picker.tsx +68 -0
- package/src/components/components.css +226 -8
- package/src/components/confirm-dialog.tsx +4 -1
- package/src/components/execution-key-picker.tsx +252 -36
- package/src/components/extension-combo-builder.tsx +61 -29
- package/src/components/extension-combo-parts.tsx +28 -38
- package/src/components/extension-config-editor.tsx +307 -0
- package/src/components/extension-grouping.ts +4 -73
- package/src/components/extension-picker.tsx +13 -13
- package/src/components/fleet-report.tsx +38 -4
- package/src/components/holder-kinds.ts +60 -0
- package/src/components/holder-list.tsx +163 -0
- package/src/components/icons/index.ts +0 -2
- package/src/components/icons/nav-map.ts +0 -4
- package/src/components/icons/nav-marks.tsx +0 -15
- package/src/components/named-list-picker.tsx +182 -0
- package/src/components/named-list-test-utils.tsx +47 -0
- package/src/components/recycle-roll.tsx +120 -0
- package/src/components/stepper.tsx +111 -0
- package/src/components/subject-section.tsx +10 -5
- package/src/components/tokens.css +31 -41
- package/src/components/tokens.ts +5 -13
- package/src/components/tool-picker-parts.tsx +17 -6
- package/src/components/tool-picker.tsx +215 -41
- package/src/components/version-history-panel.tsx +8 -0
- package/src/components/version-history-rows.tsx +14 -2
- package/src/errors.ts +10 -0
- package/src/hooks/useCapabilities.ts +59 -10
- package/src/index.ts +54 -14
- package/src/marketplace-install/env-var-fields.tsx +59 -0
- package/src/marketplace-install/index.ts +17 -0
- package/src/marketplace-install/install-env.ts +39 -0
- package/src/marketplace-install/install-mount.ts +96 -0
- package/src/marketplace-install/install-report.tsx +54 -0
- package/src/marketplace-install/install-shell.tsx +99 -0
- package/src/marketplace-install/mount-install.tsx +290 -0
- package/src/marketplace-install/plugin-detail.ts +60 -0
- package/src/marketplace-install/plugin-install.tsx +221 -0
- package/src/marketplace-install/route-items.ts +20 -0
- package/src/marketplace-install/use-debounced-value.ts +18 -0
- package/src/marketplace-install/use-install-action.ts +60 -0
- package/src/marketplace-install/use-install-preview.ts +74 -0
- package/src/marketplace-install/use-mount-install.ts +116 -0
- package/src/navigation/index.ts +1 -0
- package/src/navigation/types.ts +27 -7
- package/src/plugin/registry.ts +19 -1
- package/src/plugin/types.ts +40 -12
- package/src/plugin/version.ts +6 -4
- package/src/query-keys.ts +71 -4
- package/src/schema-form/json-schema-meta.ts +2 -0
- package/src/testing.ts +2 -0
- package/src/token-rules.ts +66 -0
|
@@ -1,17 +1,28 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
3
|
import { comboElementNames, extensionElementName } from '../extension-combos';
|
|
4
|
-
import {} from '
|
|
5
|
-
import { ComboDraftEditor, CommittedComboList, OUTPUT_SCHEMA, outputSchemaConfig, sameNames, unknownNames, } from './extension-combo-parts';
|
|
4
|
+
import { ComboDraftEditor, CommittedComboList, sameNames, unknownNames, } from './extension-combo-parts';
|
|
6
5
|
export function ExtensionComboBuilder({ available, value, onChange, disabled, idPrefix = 'extension-combo-builder', onValidityChange, availableReady = true, }) {
|
|
7
6
|
const [draft, setDraft] = useState([]);
|
|
8
|
-
|
|
7
|
+
// The settings each drafted configurable extension's form last reported.
|
|
8
|
+
const [draftConfigs, setDraftConfigs] = useState({});
|
|
9
|
+
// The stored settings the forms seed from when a combo is pulled in for edit.
|
|
10
|
+
const [draftSeeds, setDraftSeeds] = useState({});
|
|
9
11
|
// The index of the combo being edited (pulled into the draft), or `null` for a new one.
|
|
10
12
|
const [editing, setEditing] = useState(null);
|
|
11
|
-
const
|
|
13
|
+
const settingsSchemas = new Map();
|
|
14
|
+
for (const extension of available) {
|
|
15
|
+
if (extension.config_schema !== null) {
|
|
16
|
+
settingsSchemas.set(extension.name, extension.config_schema);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const configurable = draft.flatMap((name) => {
|
|
20
|
+
const schema = settingsSchemas.get(name);
|
|
21
|
+
return schema === undefined ? [] : [{ name, schema }];
|
|
22
|
+
});
|
|
12
23
|
const isDuplicate = draft.length > 0 &&
|
|
13
24
|
value.some((combo, index) => index !== editing && sameNames(comboElementNames(combo), draft));
|
|
14
|
-
const configInvalid =
|
|
25
|
+
const configInvalid = configurable.some(({ name }) => draftConfigs[name]?.valid !== true);
|
|
15
26
|
const canAdd = !disabled && draft.length > 0 && !isDuplicate && !configInvalid;
|
|
16
27
|
// Unknown-name validation over the EXISTING combos. Until the catalog is ready the
|
|
17
28
|
// builder reports VALID and suppresses the notes (no flash on a stale-seeded combo).
|
|
@@ -23,15 +34,15 @@ export function ExtensionComboBuilder({ available, value, onChange, disabled, id
|
|
|
23
34
|
}, [onValidityChange, valid]);
|
|
24
35
|
const resetDraft = () => {
|
|
25
36
|
setDraft([]);
|
|
26
|
-
|
|
37
|
+
setDraftConfigs({});
|
|
38
|
+
setDraftSeeds({});
|
|
27
39
|
setEditing(null);
|
|
28
40
|
};
|
|
29
41
|
/**
|
|
30
|
-
* Compose the draft names into
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* name becomes a bare-name element.
|
|
42
|
+
* Compose the draft names into elements. An extension whose catalog entry declares
|
|
43
|
+
* a `config_schema` is authored as `{ name, config }` through its settings form;
|
|
44
|
+
* any other name stays a bare element, or the edited combo's own element when it
|
|
45
|
+
* survives the edit.
|
|
35
46
|
*/
|
|
36
47
|
const composeCombo = () => {
|
|
37
48
|
const source = editing === null ? undefined : value[editing];
|
|
@@ -40,9 +51,10 @@ export function ExtensionComboBuilder({ available, value, onChange, disabled, id
|
|
|
40
51
|
for (const element of source)
|
|
41
52
|
byName.set(extensionElementName(element), element);
|
|
42
53
|
}
|
|
43
|
-
return draft.map((name) =>
|
|
44
|
-
|
|
45
|
-
|
|
54
|
+
return draft.map((name) => {
|
|
55
|
+
const report = settingsSchemas.has(name) ? draftConfigs[name] : undefined;
|
|
56
|
+
return report === undefined ? (byName.get(name) ?? name) : { name, config: report.config };
|
|
57
|
+
});
|
|
46
58
|
};
|
|
47
59
|
const commitCombo = () => {
|
|
48
60
|
if (!canAdd)
|
|
@@ -60,16 +72,30 @@ export function ExtensionComboBuilder({ available, value, onChange, disabled, id
|
|
|
60
72
|
const combo = value[index];
|
|
61
73
|
if (combo === undefined)
|
|
62
74
|
return;
|
|
75
|
+
const seeds = {};
|
|
76
|
+
for (const element of combo) {
|
|
77
|
+
if (typeof element !== 'string')
|
|
78
|
+
seeds[element.name] = element.config;
|
|
79
|
+
}
|
|
63
80
|
setDraft(comboElementNames(combo));
|
|
64
|
-
|
|
81
|
+
setDraftConfigs({});
|
|
82
|
+
setDraftSeeds(seeds);
|
|
65
83
|
setEditing(index);
|
|
66
84
|
};
|
|
85
|
+
const changeDraft = (next) => {
|
|
86
|
+
setDraft(next);
|
|
87
|
+
// An unticked extension's settings report goes with it.
|
|
88
|
+
setDraftConfigs((current) => Object.fromEntries(Object.entries(current).filter(([name]) => next.includes(name))));
|
|
89
|
+
};
|
|
90
|
+
const changeDraftConfig = (name, change) => {
|
|
91
|
+
setDraftConfigs((current) => ({ ...current, [name]: change }));
|
|
92
|
+
};
|
|
67
93
|
const removeCombo = (index) => {
|
|
68
94
|
onChange(value.filter((_, i) => i !== index).map((combo) => [...combo]));
|
|
69
95
|
// Removing the row under edit (or one before it) invalidates the draft target.
|
|
70
96
|
if (editing !== null && (editing === index || editing > index))
|
|
71
97
|
resetDraft();
|
|
72
98
|
};
|
|
73
|
-
return (_jsxs("div", { "data-testid": idPrefix, className: "tai-stack", children: [_jsx(CommittedComboList, { value: value, availableReady: availableReady, availableNames: availableNames, editing: editing, disabled: disabled, onEdit: startEdit, onRemove: removeCombo }), _jsx(ComboDraftEditor, { available: available, draft: draft, onDraftChange:
|
|
99
|
+
return (_jsxs("div", { "data-testid": idPrefix, className: "tai-stack", children: [_jsx(CommittedComboList, { value: value, availableReady: availableReady, availableNames: availableNames, editing: editing, disabled: disabled, onEdit: startEdit, onRemove: removeCombo }), _jsx(ComboDraftEditor, { available: available, draft: draft, onDraftChange: changeDraft, configurable: configurable, draftConfigs: draftSeeds, onDraftConfigChange: changeDraftConfig, isDuplicate: isDuplicate, canAdd: canAdd, editing: editing, disabled: disabled, idPrefix: idPrefix, onCommit: commitCombo, onReset: resetDraft })] }));
|
|
74
100
|
}
|
|
75
101
|
//# sourceMappingURL=extension-combo-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-combo-builder.js","sourceRoot":"","sources":["../../src/components/extension-combo-builder.tsx"],"names":[],"mappings":";AAsCA,OAAO,EAAkB,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"extension-combo-builder.js","sourceRoot":"","sources":["../../src/components/extension-combo-builder.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,10 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { Extension, PresetExtensionElement } from '@tai42/api-client';
|
|
7
7
|
import { type ReactNode } from 'react';
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
export declare const OUTPUT_SCHEMA = "output_schema";
|
|
8
|
+
import type { JsonSchema } from '../schema-form/types';
|
|
9
|
+
import { type ExtensionConfigChange } from './extension-config-editor';
|
|
11
10
|
/** Two combos are equal when their NAME sequences match (config is not part of identity). */
|
|
12
11
|
export declare function sameNames(a: readonly string[], b: readonly string[]): boolean;
|
|
13
|
-
/** The stored `output_schema` config schema for a combo, if it carries one. */
|
|
14
|
-
export declare function outputSchemaConfig(combo: readonly PresetExtensionElement[]): Record<string, unknown> | null;
|
|
15
12
|
/** The element names in a combo that are absent from the known catalog. */
|
|
16
13
|
export declare function unknownNames(combo: readonly PresetExtensionElement[], availableNames: ReadonlySet<string>): string[];
|
|
17
14
|
/** The current combos, each a row of name badges with per-combo Edit and Remove. */
|
|
@@ -24,15 +21,20 @@ export declare function CommittedComboList({ value, availableReady, availableNam
|
|
|
24
21
|
readonly onEdit: (index: number) => void;
|
|
25
22
|
readonly onRemove: (index: number) => void;
|
|
26
23
|
}): ReactNode;
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
/** A drafted extension whose catalog entry declares a settings schema. */
|
|
25
|
+
export interface ConfigurableExtension {
|
|
26
|
+
readonly name: string;
|
|
27
|
+
readonly schema: JsonSchema;
|
|
28
|
+
}
|
|
29
|
+
/** The combo under construction: the extension picker, one settings form per drafted
|
|
30
|
+
* configurable extension, the duplicate note, and the Add/Update + Cancel actions. */
|
|
31
|
+
export declare function ComboDraftEditor({ available, draft, onDraftChange, configurable, draftConfigs, onDraftConfigChange, isDuplicate, canAdd, editing, disabled, idPrefix, onCommit, onReset, }: {
|
|
30
32
|
readonly available: readonly Extension[];
|
|
31
33
|
readonly draft: string[];
|
|
32
34
|
readonly onDraftChange: (draft: string[]) => void;
|
|
33
|
-
readonly
|
|
34
|
-
readonly
|
|
35
|
-
readonly onDraftConfigChange: (change:
|
|
35
|
+
readonly configurable: readonly ConfigurableExtension[];
|
|
36
|
+
readonly draftConfigs: Readonly<Record<string, Record<string, unknown> | undefined>>;
|
|
37
|
+
readonly onDraftConfigChange: (name: string, change: ExtensionConfigChange) => void;
|
|
36
38
|
readonly isDuplicate: boolean;
|
|
37
39
|
readonly canAdd: boolean;
|
|
38
40
|
readonly editing: number | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-combo-parts.d.ts","sourceRoot":"","sources":["../../src/components/extension-combo-parts.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAO,
|
|
1
|
+
{"version":3,"file":"extension-combo-parts.d.ts","sourceRoot":"","sources":["../../src/components/extension-combo-parts.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,KAAK,qBAAqB,EAAyB,MAAM,2BAA2B,CAAC;AAK9F,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE7E;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,sBAAsB,EAAE,EACxC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,MAAM,EAAE,CAEV;AA4ED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,cAAc,EACd,cAAc,EACd,OAAO,EACP,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,SAAS,sBAAsB,EAAE,EAAE,CAAC;IACpD,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C,GAAG,SAAS,CAqBZ;AAED,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAED;uFACuF;AACvF,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,KAAK,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,GACR,EAAE;IACD,QAAQ,CAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACxD,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IACrF,QAAQ,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACpF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,GAAG,SAAS,CA8CZ"}
|
|
@@ -1,29 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Fragment } from 'react';
|
|
3
3
|
import { comboElementNames } from '../extension-combos';
|
|
4
|
-
import { SchemaEditor } from '../schema-editor';
|
|
5
4
|
import { Badge } from './badge';
|
|
5
|
+
import { ExtensionConfigEditor } from './extension-config-editor';
|
|
6
6
|
import { ExtensionPicker } from './extension-picker';
|
|
7
7
|
import { CloseIcon, XCircleIcon } from './icons';
|
|
8
8
|
import { Button } from './primitives';
|
|
9
|
-
/** The one config-taking extension this builder authors inline. */
|
|
10
|
-
export const OUTPUT_SCHEMA = 'output_schema';
|
|
11
9
|
/** Two combos are equal when their NAME sequences match (config is not part of identity). */
|
|
12
10
|
export function sameNames(a, b) {
|
|
13
11
|
return a.length === b.length && a.every((name, index) => name === b[index]);
|
|
14
12
|
}
|
|
15
|
-
/** The stored `output_schema` config schema for a combo, if it carries one. */
|
|
16
|
-
export function outputSchemaConfig(combo) {
|
|
17
|
-
for (const element of combo) {
|
|
18
|
-
if (typeof element !== 'string' && element.name === OUTPUT_SCHEMA) {
|
|
19
|
-
const schema = element.config.schema;
|
|
20
|
-
return typeof schema === 'object' && schema !== null && !Array.isArray(schema)
|
|
21
|
-
? schema
|
|
22
|
-
: {};
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
13
|
/** The element names in a combo that are absent from the known catalog. */
|
|
28
14
|
export function unknownNames(combo, availableNames) {
|
|
29
15
|
return comboElementNames(combo).filter((name) => !availableNames.has(name));
|
|
@@ -44,9 +30,14 @@ export function CommittedComboList({ value, availableReady, availableNames, edit
|
|
|
44
30
|
return _jsx("p", { className: "tai-muted", children: "No extension sets." });
|
|
45
31
|
return (_jsx("ul", { className: "tai-stack tai-stack-2", children: value.map((combo, index) => (_jsx(CommittedComboRow, { combo: combo, index: index, editing: editing, disabled: disabled, unknown: availableReady ? unknownNames(combo, availableNames) : [], onEdit: onEdit, onRemove: onRemove }, index))) }));
|
|
46
32
|
}
|
|
47
|
-
/** The combo under construction: the extension picker,
|
|
48
|
-
*
|
|
49
|
-
export function ComboDraftEditor({ available, draft, onDraftChange,
|
|
50
|
-
return (_jsxs("div", { className: "tai-stack tai-stack-2", children: [_jsx(ExtensionPicker, { available: available, value: draft, onChange: onDraftChange, disabled: disabled, idPrefix: `${idPrefix}-draft` }),
|
|
33
|
+
/** The combo under construction: the extension picker, one settings form per drafted
|
|
34
|
+
* configurable extension, the duplicate note, and the Add/Update + Cancel actions. */
|
|
35
|
+
export function ComboDraftEditor({ available, draft, onDraftChange, configurable, draftConfigs, onDraftConfigChange, isDuplicate, canAdd, editing, disabled, idPrefix, onCommit, onReset, }) {
|
|
36
|
+
return (_jsxs("div", { className: "tai-stack tai-stack-2", children: [_jsx(ExtensionPicker, { available: available, value: draft, onChange: onDraftChange, disabled: disabled, idPrefix: `${idPrefix}-draft` }), configurable.map(({ name, schema }) => (_jsx(ExtensionConfigEditor
|
|
37
|
+
// Re-seed the form when the draft target changes (a new draft vs a
|
|
38
|
+
// specific combo pulled in for edit).
|
|
39
|
+
, { name: name, schema: schema, value: draftConfigs[name], onChange: (change) => {
|
|
40
|
+
onDraftConfigChange(name, change);
|
|
41
|
+
}, disabled: disabled, idPrefix: `${idPrefix}-settings-${name}` }, `${editing === null ? 'new' : String(editing)}-${name}`))), isDuplicate ? (_jsxs("p", { role: "alert", className: "tai-field-error", children: [_jsx(XCircleIcon, {}), "This extension set is already added."] })) : null, _jsxs("div", { className: "tai-row", children: [_jsx(Button, { type: "button", variant: "primary", onClick: onCommit, disabled: !canAdd, children: editing === null ? 'Add extension set' : 'Update extension set' }), editing !== null ? (_jsx(Button, { type: "button", onClick: onReset, disabled: disabled, children: "Cancel edit" })) : null] })] }));
|
|
51
42
|
}
|
|
52
43
|
//# sourceMappingURL=extension-combo-parts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-combo-parts.js","sourceRoot":"","sources":["../../src/components/extension-combo-parts.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"extension-combo-parts.js","sourceRoot":"","sources":["../../src/components/extension-combo-parts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ExtensionConfigEditor` — the settings form of one drafted extension, driven by
|
|
3
|
+
* the extension's declared `config_schema`.
|
|
4
|
+
*
|
|
5
|
+
* The schema's top-level properties split in two: a property whose node `$ref`s the
|
|
6
|
+
* JSON Schema meta-schema holds a JSON Schema and is authored with a `SchemaEditor`;
|
|
7
|
+
* every other property is authored by one `SchemaForm`. A top-level setting whose
|
|
8
|
+
* seeded value holds an `!ENV` marker is sealed: it renders as a read-only row naming
|
|
9
|
+
* the variables, is emitted exactly as seeded, and counts as valid (the server checks
|
|
10
|
+
* the resolved value). A schema this editor cannot render — a meta-schema `$ref` below
|
|
11
|
+
* the top level, or a `$ref` outside the document — shows an error and reports invalid.
|
|
12
|
+
*
|
|
13
|
+
* It reports `{ config, valid }` through `onChange` on mount and on every edit.
|
|
14
|
+
*/
|
|
15
|
+
import { type ReactNode } from 'react';
|
|
16
|
+
import type { JsonSchema } from '../schema-form/types';
|
|
17
|
+
export interface ExtensionConfigChange {
|
|
18
|
+
readonly config: Record<string, unknown>;
|
|
19
|
+
readonly valid: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface ExtensionConfigEditorProps {
|
|
22
|
+
/** The extension's name; it names the settings group. */
|
|
23
|
+
readonly name: string;
|
|
24
|
+
/** The extension's declared `config_schema`. */
|
|
25
|
+
readonly schema: JsonSchema;
|
|
26
|
+
/** The element's stored settings when editing, else `undefined`. Read once, on mount. */
|
|
27
|
+
readonly value: Record<string, unknown> | undefined;
|
|
28
|
+
readonly onChange: (next: ExtensionConfigChange) => void;
|
|
29
|
+
readonly disabled?: boolean;
|
|
30
|
+
readonly idPrefix: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function ExtensionConfigEditor({ name, schema, value, onChange, disabled, idPrefix, }: ExtensionConfigEditorProps): ReactNode;
|
|
33
|
+
//# sourceMappingURL=extension-config-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-config-editor.d.ts","sourceRoot":"","sources":["../../src/components/extension-config-editor.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAOpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIvD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAyID,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,EAAE,0BAA0B,GAAG,SAAS,CAexC"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* `ExtensionConfigEditor` — the settings form of one drafted extension, driven by
|
|
4
|
+
* the extension's declared `config_schema`.
|
|
5
|
+
*
|
|
6
|
+
* The schema's top-level properties split in two: a property whose node `$ref`s the
|
|
7
|
+
* JSON Schema meta-schema holds a JSON Schema and is authored with a `SchemaEditor`;
|
|
8
|
+
* every other property is authored by one `SchemaForm`. A top-level setting whose
|
|
9
|
+
* seeded value holds an `!ENV` marker is sealed: it renders as a read-only row naming
|
|
10
|
+
* the variables, is emitted exactly as seeded, and counts as valid (the server checks
|
|
11
|
+
* the resolved value). A schema this editor cannot render — a meta-schema `$ref` below
|
|
12
|
+
* the top level, or a `$ref` outside the document — shows an error and reports invalid.
|
|
13
|
+
*
|
|
14
|
+
* It reports `{ config, valid }` through `onChange` on mount and on every edit.
|
|
15
|
+
*/
|
|
16
|
+
import { useEffect, useRef, useState } from 'react';
|
|
17
|
+
import { collectEnvRefs } from '../env-markers';
|
|
18
|
+
import { SchemaEditor } from '../schema-editor';
|
|
19
|
+
import { defaultValueForSchema } from '../schema-form/default-value';
|
|
20
|
+
import { JSON_SCHEMA_META_URI } from '../schema-form/json-schema-meta';
|
|
21
|
+
import { SchemaForm } from '../schema-form/SchemaForm';
|
|
22
|
+
import { validateAgainstSchema } from '../schema-form/validate';
|
|
23
|
+
import { ErrorState } from './primitives';
|
|
24
|
+
const isMetaRef = (node) => node.$ref === JSON_SCHEMA_META_URI;
|
|
25
|
+
function isRecord(value) {
|
|
26
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
27
|
+
}
|
|
28
|
+
/** The sub-schemas of a node, each with its path. */
|
|
29
|
+
function childNodes(node, path) {
|
|
30
|
+
const children = [];
|
|
31
|
+
for (const [key, child] of Object.entries(node.properties ?? {})) {
|
|
32
|
+
children.push([child, `${path}.${key}`]);
|
|
33
|
+
}
|
|
34
|
+
if (node.items !== undefined)
|
|
35
|
+
children.push([node.items, `${path}[]`]);
|
|
36
|
+
if (isRecord(node.additionalProperties)) {
|
|
37
|
+
children.push([node.additionalProperties, `${path}.*`]);
|
|
38
|
+
}
|
|
39
|
+
for (const keyword of ['anyOf', 'oneOf', 'allOf']) {
|
|
40
|
+
(node[keyword] ?? []).forEach((child, index) => {
|
|
41
|
+
children.push([child, `${path}.${keyword}[${String(index)}]`]);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
for (const keyword of ['$defs', 'definitions']) {
|
|
45
|
+
for (const [key, child] of Object.entries(node[keyword] ?? {})) {
|
|
46
|
+
children.push([child, `${path}.${keyword}.${key}`]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return children;
|
|
50
|
+
}
|
|
51
|
+
/** Why a (non top-level-setting) node cannot be rendered here, or `null`. */
|
|
52
|
+
function nestedReason(node, path) {
|
|
53
|
+
if (isMetaRef(node))
|
|
54
|
+
return `a JSON Schema setting is nested at ${path}`;
|
|
55
|
+
if (node.$ref !== undefined && !node.$ref.startsWith('#')) {
|
|
56
|
+
return `the reference ${node.$ref} at ${path} is outside this schema`;
|
|
57
|
+
}
|
|
58
|
+
for (const [child, childPath] of childNodes(node, path)) {
|
|
59
|
+
const reason = nestedReason(child, childPath);
|
|
60
|
+
if (reason !== null)
|
|
61
|
+
return reason;
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/** Why the declared schema cannot be rendered here, or `null` when it can. A
|
|
66
|
+
* meta-schema `$ref` is accepted only as a top-level property's own node. */
|
|
67
|
+
function unrenderableReason(schema) {
|
|
68
|
+
if (isMetaRef(schema))
|
|
69
|
+
return 'the whole settings value is a JSON Schema';
|
|
70
|
+
if (schema.$ref !== undefined && !schema.$ref.startsWith('#')) {
|
|
71
|
+
return `the reference ${schema.$ref} at $ is outside this schema`;
|
|
72
|
+
}
|
|
73
|
+
const topProperties = schema.properties ?? {};
|
|
74
|
+
for (const [child, childPath] of childNodes(schema, '$')) {
|
|
75
|
+
const key = childPath.slice(2);
|
|
76
|
+
if (topProperties[key] === child && isMetaRef(child))
|
|
77
|
+
continue;
|
|
78
|
+
const reason = nestedReason(child, childPath);
|
|
79
|
+
if (reason !== null)
|
|
80
|
+
return reason;
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
function splitSchema(schema, seed) {
|
|
85
|
+
const properties = schema.properties ?? {};
|
|
86
|
+
const sealed = {};
|
|
87
|
+
if (seed !== undefined) {
|
|
88
|
+
for (const key of Object.keys(properties)) {
|
|
89
|
+
if (key in seed && collectEnvRefs(seed[key]).size > 0)
|
|
90
|
+
sealed[key] = seed[key];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const schemaKeys = [];
|
|
94
|
+
const rest = {};
|
|
95
|
+
for (const [key, node] of Object.entries(properties)) {
|
|
96
|
+
if (key in sealed)
|
|
97
|
+
continue;
|
|
98
|
+
if (isMetaRef(node))
|
|
99
|
+
schemaKeys.push(key);
|
|
100
|
+
else
|
|
101
|
+
rest[key] = node;
|
|
102
|
+
}
|
|
103
|
+
const formSchema = {
|
|
104
|
+
...schema,
|
|
105
|
+
properties: rest,
|
|
106
|
+
required: (schema.required ?? []).filter((key) => key in rest),
|
|
107
|
+
};
|
|
108
|
+
return { formSchema, schemaKeys, sealed };
|
|
109
|
+
}
|
|
110
|
+
function settingLabel(schema, key) {
|
|
111
|
+
return schema.properties?.[key]?.title ?? key;
|
|
112
|
+
}
|
|
113
|
+
/** The read-only row of a sealed setting: its label and the env variables it names. */
|
|
114
|
+
function SealedRow({ label, value }) {
|
|
115
|
+
const names = [...collectEnvRefs(value)].join(', ');
|
|
116
|
+
return (_jsxs("div", { className: "tai-stack tai-stack-1", children: [_jsx("span", { className: "tai-field-label", children: label }), _jsx("span", { className: "tai-muted", children: `Env reference ${names}, kept as written.` })] }));
|
|
117
|
+
}
|
|
118
|
+
function SettingsGroup({ name, disabled, children, }) {
|
|
119
|
+
return (_jsxs("fieldset", { className: "tai-stack tai-stack-2", style: { border: 'none', margin: 0, padding: 0 }, disabled: disabled, children: [_jsx("legend", { className: "tai-field-label", children: `${name} settings` }), children] }));
|
|
120
|
+
}
|
|
121
|
+
/** Keeps the latest `onChange` so the report effect runs on value changes only. */
|
|
122
|
+
function useLatest(current) {
|
|
123
|
+
const ref = useRef(current);
|
|
124
|
+
useEffect(() => {
|
|
125
|
+
ref.current = current;
|
|
126
|
+
});
|
|
127
|
+
return ref;
|
|
128
|
+
}
|
|
129
|
+
export function ExtensionConfigEditor({ name, schema, value, onChange, disabled, idPrefix, }) {
|
|
130
|
+
const [reason] = useState(() => unrenderableReason(schema));
|
|
131
|
+
if (reason !== null) {
|
|
132
|
+
return _jsx(UnrenderableSettings, { name: name, reason: reason, value: value, onChange: onChange });
|
|
133
|
+
}
|
|
134
|
+
return (_jsx(RenderableSettings, { name: name, schema: schema, value: value, onChange: onChange, disabled: disabled, idPrefix: idPrefix }));
|
|
135
|
+
}
|
|
136
|
+
function UnrenderableSettings({ name, reason, value, onChange, }) {
|
|
137
|
+
const latest = useLatest(onChange);
|
|
138
|
+
useEffect(() => {
|
|
139
|
+
latest.current({ config: value ?? {}, valid: false });
|
|
140
|
+
}, [latest, value]);
|
|
141
|
+
return (_jsx(SettingsGroup, { name: name, children: _jsx(ErrorState, { message: `The settings of ${name} cannot be edited here: ${reason}.` }) }));
|
|
142
|
+
}
|
|
143
|
+
function RenderableSettings({ name, schema, value, onChange, disabled, idPrefix, }) {
|
|
144
|
+
const [split] = useState(() => splitSchema(schema, value));
|
|
145
|
+
const { formSchema, schemaKeys, sealed } = split;
|
|
146
|
+
const [formValue, setFormValue] = useState(() => {
|
|
147
|
+
if (value === undefined)
|
|
148
|
+
return defaultValueForSchema(formSchema);
|
|
149
|
+
const seeded = {};
|
|
150
|
+
for (const [key, stored] of Object.entries(value)) {
|
|
151
|
+
if (!schemaKeys.includes(key) && !(key in sealed))
|
|
152
|
+
seeded[key] = stored;
|
|
153
|
+
}
|
|
154
|
+
return seeded;
|
|
155
|
+
});
|
|
156
|
+
const [schemaSettings, setSchemaSettings] = useState(() => {
|
|
157
|
+
const seeded = {};
|
|
158
|
+
for (const key of schemaKeys) {
|
|
159
|
+
const stored = value?.[key];
|
|
160
|
+
seeded[key] = { schema: isRecord(stored) ? stored : null, valid: true };
|
|
161
|
+
}
|
|
162
|
+
return seeded;
|
|
163
|
+
});
|
|
164
|
+
const formErrors = validateAgainstSchema(formSchema, formValue);
|
|
165
|
+
const required = new Set(schema.required ?? []);
|
|
166
|
+
const valid = Object.keys(formErrors).length === 0 &&
|
|
167
|
+
schemaKeys.every((key) => {
|
|
168
|
+
const setting = schemaSettings[key];
|
|
169
|
+
return (setting !== undefined && setting.valid && (!required.has(key) || setting.schema !== null));
|
|
170
|
+
});
|
|
171
|
+
const latest = useLatest(onChange);
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
const config = { ...(isRecord(formValue) ? formValue : {}) };
|
|
174
|
+
for (const key of schemaKeys) {
|
|
175
|
+
const setting = schemaSettings[key]?.schema;
|
|
176
|
+
if (setting !== null && setting !== undefined)
|
|
177
|
+
config[key] = setting;
|
|
178
|
+
}
|
|
179
|
+
Object.assign(config, sealed);
|
|
180
|
+
latest.current({ config, valid });
|
|
181
|
+
}, [latest, formValue, schemaSettings, schemaKeys, sealed, valid]);
|
|
182
|
+
const hasFormFields = Object.keys(formSchema.properties ?? {}).length > 0;
|
|
183
|
+
return (_jsxs(SettingsGroup, { name: name, disabled: disabled, children: [Object.entries(sealed).map(([key, sealedValue]) => (_jsx(SealedRow, { label: settingLabel(schema, key), value: sealedValue }, key))), hasFormFields ? (_jsx(SchemaForm, { schema: formSchema, value: formValue, onChange: setFormValue, errors: formErrors, idPrefix: `${idPrefix}-form` })) : null, schemaKeys.map((key) => {
|
|
184
|
+
const node = schema.properties?.[key];
|
|
185
|
+
return (_jsx(SchemaEditor, { value: schemaSettings[key]?.schema ?? null, onChange: (change) => {
|
|
186
|
+
setSchemaSettings((current) => ({ ...current, [key]: change }));
|
|
187
|
+
}, requireTitle: false, label: settingLabel(schema, key), description: node?.description, disabled: disabled, idPrefix: `${idPrefix}-${key}` }, key));
|
|
188
|
+
})] }));
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=extension-config-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-config-editor.js","sourceRoot":"","sources":["../../src/components/extension-config-editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Pure catalog-shaping helpers for the
|
|
3
|
-
*
|
|
4
|
-
* `
|
|
5
|
-
* directly.
|
|
6
|
-
*
|
|
7
|
-
* The `/api/extensions` catalog is a flat list of `{ name, kind, multiple }` entries. Two
|
|
8
|
-
* independent groupings live here:
|
|
9
|
-
* - `groupIntoFamilies` groups a tool's composed branch VARIANTS (which share a
|
|
10
|
-
* base tool name and append underscore suffixes — `tool`, `tool_a`, `tool_a_b`)
|
|
11
|
-
* back into one FAMILY keyed by that base name (the catalog view);
|
|
12
|
-
* - `groupByKind` groups the catalog by extension KIND (the picker view), each
|
|
13
|
-
* group carrying the served `multiple` flag of its kind.
|
|
14
|
-
* `kindVariant` maps each serialized `kind` value to a design-system Badge variant.
|
|
2
|
+
* Pure catalog-shaping helpers for the extension catalog: `groupByKind` groups the flat
|
|
3
|
+
* `{ name, kind, multiple }` list by kind, each group carrying its kind's served
|
|
4
|
+
* `multiple` flag. Kept free of React so it is unit-tested directly.
|
|
15
5
|
*/
|
|
16
6
|
import type { Extension } from '@tai42/api-client';
|
|
17
|
-
import type { BadgeProps } from './badge';
|
|
18
|
-
/** One base tool and every extension entry that branches from it. */
|
|
19
|
-
export interface ExtensionFamily {
|
|
20
|
-
/** The base tool name (the segment before the first underscore). */
|
|
21
|
-
readonly base: string;
|
|
22
|
-
/** The family's entries, ordered by full name. */
|
|
23
|
-
readonly members: readonly Extension[];
|
|
24
|
-
}
|
|
25
7
|
/** One extension `kind` and every catalog entry of that kind. */
|
|
26
8
|
export interface ExtensionKindGroup {
|
|
27
9
|
/** The serialized kind value (`wrapper` / `transformer` / `backend`). */
|
|
@@ -33,29 +15,10 @@ export interface ExtensionKindGroup {
|
|
|
33
15
|
readonly members: readonly Extension[];
|
|
34
16
|
}
|
|
35
17
|
/**
|
|
36
|
-
*
|
|
37
|
-
* underscore, or the whole name when it has none. `tool`, `tool_a`, `tool_a_b`
|
|
38
|
-
* all resolve to `tool`; `x_chain` and `x_batch` both resolve to `x`.
|
|
39
|
-
*/
|
|
40
|
-
export declare function baseNameOf(name: string): string;
|
|
41
|
-
/**
|
|
42
|
-
* Group a flat extension list into families keyed by base tool name. Families
|
|
43
|
-
* are ordered by base name and each family's members by full name, so the render
|
|
44
|
-
* order is stable regardless of the server's list order.
|
|
45
|
-
*/
|
|
46
|
-
export declare function groupIntoFamilies(extensions: readonly Extension[]): ExtensionFamily[];
|
|
47
|
-
/**
|
|
48
|
-
* Group a flat extension list by `kind`, for the picker. Groups are ordered by
|
|
18
|
+
* Group a flat extension list by `kind`. Groups are ordered by
|
|
49
19
|
* kind and each group's members by name, so the render order is stable regardless
|
|
50
20
|
* of the server's list order. Each group carries its kind's served `multiple`; a kind
|
|
51
21
|
* whose entries disagree is a catalog fault and throws.
|
|
52
22
|
*/
|
|
53
23
|
export declare function groupByKind(extensions: readonly Extension[]): ExtensionKindGroup[];
|
|
54
|
-
/**
|
|
55
|
-
* Map a serialized extension `kind` to a Badge variant. Known skeleton kinds get
|
|
56
|
-
* a themed color; any unrecognized kind falls back to the neutral variant (the
|
|
57
|
-
* Badge itself also neutral-fallbacks, but choosing here keeps the mapping
|
|
58
|
-
* explicit and testable).
|
|
59
|
-
*/
|
|
60
|
-
export declare function kindVariant(kind: string): NonNullable<BadgeProps['variant']>;
|
|
61
24
|
//# sourceMappingURL=extension-grouping.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-grouping.d.ts","sourceRoot":"","sources":["../../src/components/extension-grouping.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"extension-grouping.d.ts","sourceRoot":"","sources":["../../src/components/extension-grouping.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;yDACqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,kBAAkB,EAAE,CAsBlF"}
|