@tai42/studio-sdk 30.0.0 → 30.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/combo-draft-editor.d.ts +31 -0
- package/dist/components/combo-draft-editor.d.ts.map +1 -0
- package/dist/components/combo-draft-editor.js +16 -0
- package/dist/components/combo-draft-editor.js.map +1 -0
- package/dist/components/committed-combo-list.d.ts +17 -0
- package/dist/components/committed-combo-list.d.ts.map +1 -0
- package/dist/components/{extension-combo-parts.js → committed-combo-list.js} +2 -22
- package/dist/components/committed-combo-list.js.map +1 -0
- package/dist/components/extension-combo-builder.d.ts +4 -4
- package/dist/components/extension-combo-builder.js +3 -2
- package/dist/components/extension-combo-builder.js.map +1 -1
- package/dist/components/selected-tool-badges.d.ts +13 -0
- package/dist/components/selected-tool-badges.d.ts.map +1 -0
- package/dist/components/selected-tool-badges.js +14 -0
- package/dist/components/selected-tool-badges.js.map +1 -0
- package/dist/components/tag-filter-field.d.ts +11 -0
- package/dist/components/tag-filter-field.d.ts.map +1 -0
- package/dist/components/tag-filter-field.js +15 -0
- package/dist/components/tag-filter-field.js.map +1 -0
- package/dist/components/tool-picker.d.ts +1 -1
- package/dist/components/tool-picker.d.ts.map +1 -1
- package/dist/components/tool-picker.js +4 -2
- package/dist/components/tool-picker.js.map +1 -1
- package/dist/components/tool-select.d.ts +25 -0
- package/dist/components/tool-select.d.ts.map +1 -0
- package/dist/components/{tool-picker-parts.js → tool-select.js} +1 -25
- package/dist/components/tool-select.js.map +1 -0
- package/dist/extension-combos.d.ts +6 -1
- package/dist/extension-combos.d.ts.map +1 -1
- package/dist/extension-combos.js +8 -0
- package/dist/extension-combos.js.map +1 -1
- package/package.json +2 -2
- package/src/components/combo-draft-editor.tsx +96 -0
- package/src/components/{extension-combo-parts.tsx → committed-combo-list.tsx} +4 -105
- package/src/components/extension-combo-builder.tsx +10 -10
- package/src/components/selected-tool-badges.tsx +41 -0
- package/src/components/tag-filter-field.tsx +37 -0
- package/src/components/tool-picker.tsx +4 -2
- package/src/components/{tool-picker-parts.tsx → tool-select.tsx} +2 -72
- package/src/extension-combos.ts +15 -1
- package/dist/components/extension-combo-parts.d.ts +0 -46
- package/dist/components/extension-combo-parts.d.ts.map +0 -1
- package/dist/components/extension-combo-parts.js.map +0 -1
- package/dist/components/tool-picker-parts.d.ts +0 -43
- package/dist/components/tool-picker-parts.d.ts.map +0 -1
- package/dist/components/tool-picker-parts.js.map +0 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ExtensionComboBuilder`'s editor for the combo under construction: the extension
|
|
3
|
+
* picker, a settings form per configurable drafted extension, and the commit actions.
|
|
4
|
+
*/
|
|
5
|
+
import type { Extension } from '@tai42/api-client';
|
|
6
|
+
import type { ReactNode } from 'react';
|
|
7
|
+
import type { JsonSchema } from '../schema-form/types';
|
|
8
|
+
import { type ExtensionConfigChange } from './extension-config-editor';
|
|
9
|
+
/** A drafted extension whose catalog entry declares a settings schema. */
|
|
10
|
+
export interface ConfigurableExtension {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly schema: JsonSchema;
|
|
13
|
+
}
|
|
14
|
+
/** The combo under construction: the extension picker, one settings form per drafted
|
|
15
|
+
* configurable extension, the duplicate note, and the Add/Update + Cancel actions. */
|
|
16
|
+
export declare function ComboDraftEditor({ available, draft, onDraftChange, configurable, draftConfigs, onDraftConfigChange, isDuplicate, canAdd, editing, disabled, idPrefix, onCommit, onReset, }: {
|
|
17
|
+
readonly available: readonly Extension[];
|
|
18
|
+
readonly draft: string[];
|
|
19
|
+
readonly onDraftChange: (draft: string[]) => void;
|
|
20
|
+
readonly configurable: readonly ConfigurableExtension[];
|
|
21
|
+
readonly draftConfigs: Readonly<Record<string, Record<string, unknown> | undefined>>;
|
|
22
|
+
readonly onDraftConfigChange: (name: string, change: ExtensionConfigChange) => void;
|
|
23
|
+
readonly isDuplicate: boolean;
|
|
24
|
+
readonly canAdd: boolean;
|
|
25
|
+
readonly editing: number | null;
|
|
26
|
+
readonly disabled: boolean | undefined;
|
|
27
|
+
readonly idPrefix: string;
|
|
28
|
+
readonly onCommit: () => void;
|
|
29
|
+
readonly onReset: () => void;
|
|
30
|
+
}): ReactNode;
|
|
31
|
+
//# sourceMappingURL=combo-draft-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combo-draft-editor.d.ts","sourceRoot":"","sources":["../../src/components/combo-draft-editor.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,qBAAqB,EAAyB,MAAM,2BAA2B,CAAC;AAK9F,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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ExtensionConfigEditor } from './extension-config-editor';
|
|
3
|
+
import { ExtensionPicker } from './extension-picker';
|
|
4
|
+
import { XCircleIcon } from './icons';
|
|
5
|
+
import { Button } from './primitives';
|
|
6
|
+
/** The combo under construction: the extension picker, one settings form per drafted
|
|
7
|
+
* configurable extension, the duplicate note, and the Add/Update + Cancel actions. */
|
|
8
|
+
export function ComboDraftEditor({ available, draft, onDraftChange, configurable, draftConfigs, onDraftConfigChange, isDuplicate, canAdd, editing, disabled, idPrefix, onCommit, onReset, }) {
|
|
9
|
+
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
|
|
10
|
+
// Re-seed the form when the draft target changes (a new draft vs a
|
|
11
|
+
// specific combo pulled in for edit).
|
|
12
|
+
, { name: name, schema: schema, value: draftConfigs[name], onChange: (change) => {
|
|
13
|
+
onDraftConfigChange(name, change);
|
|
14
|
+
}, 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] })] }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=combo-draft-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combo-draft-editor.js","sourceRoot":"","sources":["../../src/components/combo-draft-editor.tsx"],"names":[],"mappings":";AAQA,OAAO,EAA8B,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC;uFACuF;AACvF,MAAM,UAAU,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,GAeR;IACC,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,eAAe,IACd,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,GAAG,QAAQ,QAAQ,GAC7B,EAED,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CACtC,KAAC,qBAAqB;YACpB,mEAAmE;YACnE,sCAAsC;gBAEtC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;oBACnB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACpC,CAAC,EACD,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,GAAG,QAAQ,aAAa,IAAI,EAAE,IARnC,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAS5D,CACH,CAAC,EAED,WAAW,CAAC,CAAC,CAAC,CACb,aAAG,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,iBAAiB,aACzC,KAAC,WAAW,KAAG,4CAEb,CACL,CAAC,CAAC,CAAC,IAAI,EAER,eAAK,SAAS,EAAC,SAAS,aACtB,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,MAAM,YACzE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,sBAAsB,GACzD,EACR,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAClB,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,4BAEjD,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ExtensionComboBuilder`'s list of committed combos: one row of name badges per
|
|
3
|
+
* combo, with per-combo Edit and Remove and an inline unknown-name note.
|
|
4
|
+
*/
|
|
5
|
+
import type { PresetExtensionElement } from '@tai42/api-client';
|
|
6
|
+
import { type ReactNode } from 'react';
|
|
7
|
+
/** The current combos, each a row of name badges with per-combo Edit and Remove. */
|
|
8
|
+
export declare function CommittedComboList({ value, availableReady, availableNames, editing, disabled, onEdit, onRemove, }: {
|
|
9
|
+
readonly value: readonly PresetExtensionElement[][];
|
|
10
|
+
readonly availableReady: boolean;
|
|
11
|
+
readonly availableNames: ReadonlySet<string>;
|
|
12
|
+
readonly editing: number | null;
|
|
13
|
+
readonly disabled: boolean | undefined;
|
|
14
|
+
readonly onEdit: (index: number) => void;
|
|
15
|
+
readonly onRemove: (index: number) => void;
|
|
16
|
+
}): ReactNode;
|
|
17
|
+
//# sourceMappingURL=committed-combo-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"committed-combo-list.d.ts","sourceRoot":"","sources":["../../src/components/committed-combo-list.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAiFjD,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"}
|
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Fragment } from 'react';
|
|
3
|
-
import { comboElementNames } from '../extension-combos';
|
|
3
|
+
import { comboElementNames, unknownNames } from '../extension-combos';
|
|
4
4
|
import { Badge } from './badge';
|
|
5
|
-
import { ExtensionConfigEditor } from './extension-config-editor';
|
|
6
|
-
import { ExtensionPicker } from './extension-picker';
|
|
7
5
|
import { CloseIcon, XCircleIcon } from './icons';
|
|
8
6
|
import { Button } from './primitives';
|
|
9
|
-
/** Two combos are equal when their NAME sequences match (config is not part of identity). */
|
|
10
|
-
export function sameNames(a, b) {
|
|
11
|
-
return a.length === b.length && a.every((name, index) => name === b[index]);
|
|
12
|
-
}
|
|
13
|
-
/** The element names in a combo that are absent from the known catalog. */
|
|
14
|
-
export function unknownNames(combo, availableNames) {
|
|
15
|
-
return comboElementNames(combo).filter((name) => !availableNames.has(name));
|
|
16
|
-
}
|
|
17
7
|
/** One committed combo's row: its name badges and the Edit / Remove pair, with an
|
|
18
8
|
* inline unknown-name note. */
|
|
19
9
|
function CommittedComboRow({ combo, index, editing, disabled, unknown, onEdit, onRemove, }) {
|
|
@@ -30,14 +20,4 @@ export function CommittedComboList({ value, availableReady, availableNames, edit
|
|
|
30
20
|
return _jsx("p", { className: "tai-muted", children: "No extension sets." });
|
|
31
21
|
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))) }));
|
|
32
22
|
}
|
|
33
|
-
|
|
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] })] }));
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=extension-combo-parts.js.map
|
|
23
|
+
//# sourceMappingURL=committed-combo-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"committed-combo-list.js","sourceRoot":"","sources":["../../src/components/committed-combo-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
* preset/tool extensions wire carries. It is PRESENTATIONAL: the caller fetches the
|
|
7
7
|
* extension catalog (`available`) and owns the `value`; this component fetches nothing.
|
|
8
8
|
*
|
|
9
|
-
* The surface has two
|
|
10
|
-
* - the current combos, each an ordered row of name `Badge`s
|
|
11
|
-
* (pull it back into the draft) and Remove;
|
|
12
|
-
* - a combo UNDER CONSTRUCTION, authored with the shared `ExtensionPicker` (grouped
|
|
9
|
+
* The surface has two sections:
|
|
10
|
+
* - the current combos (`CommittedComboList`), each an ordered row of name `Badge`s
|
|
11
|
+
* with a per-combo Edit (pull it back into the draft) and Remove;
|
|
12
|
+
* - a combo UNDER CONSTRUCTION (`ComboDraftEditor`), authored with the shared `ExtensionPicker` (grouped
|
|
13
13
|
* by kind, single-select for the non-stackable `backend` kind). An extension whose
|
|
14
14
|
* catalog entry declares a `config_schema` is authored as `{ name, config }` through
|
|
15
15
|
* its settings form; any other name stays a bare element, or the edited combo's own
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
|
-
import { comboElementNames, extensionElementName } from '../extension-combos';
|
|
4
|
-
import { ComboDraftEditor
|
|
3
|
+
import { comboElementNames, extensionElementName, sameNames, unknownNames, } from '../extension-combos';
|
|
4
|
+
import { ComboDraftEditor } from './combo-draft-editor';
|
|
5
|
+
import { CommittedComboList } from './committed-combo-list';
|
|
5
6
|
export function ExtensionComboBuilder({ available, value, onChange, disabled, idPrefix = 'extension-combo-builder', onValidityChange, availableReady = true, }) {
|
|
6
7
|
const [draft, setDraft] = useState([]);
|
|
7
8
|
// The settings each drafted configurable extension's form last reported.
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"extension-combo-builder.js","sourceRoot":"","sources":["../../src/components/extension-combo-builder.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** `ToolPicker`'s capability badges for the selected tool, and the note every badge
|
|
2
|
+
* surface carries. */
|
|
3
|
+
import type { ReactNode } from 'react';
|
|
4
|
+
/** The shared informational note every badge surface carries: declared, never enforced. */
|
|
5
|
+
export declare const BADGES_NOTE = "Declared capability labels \u2014 informational only. They describe what the tool touches; the server never enforces them.";
|
|
6
|
+
/** The selected tool's DECLARED capability badges, read-only and informational.
|
|
7
|
+
* Renders nothing unless the selected tool carries badges. */
|
|
8
|
+
export declare function SelectedToolBadges({ value, badgesByTool, idPrefix, }: {
|
|
9
|
+
readonly value: string | null;
|
|
10
|
+
readonly badgesByTool: Readonly<Record<string, readonly string[]>> | undefined;
|
|
11
|
+
readonly idPrefix: string;
|
|
12
|
+
}): ReactNode;
|
|
13
|
+
//# sourceMappingURL=selected-tool-badges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selected-tool-badges.d.ts","sourceRoot":"","sources":["../../src/components/selected-tool-badges.tsx"],"names":[],"mappings":"AAAA;uBACuB;AACvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,2FAA2F;AAC3F,eAAO,MAAM,WAAW,+HACiG,CAAC;AAE1H;+DAC+D;AAC/D,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,GAAG,SAAS,CAmBZ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Badge } from './badge';
|
|
3
|
+
import { Tooltip } from './tooltip';
|
|
4
|
+
/** The shared informational note every badge surface carries: declared, never enforced. */
|
|
5
|
+
export const BADGES_NOTE = 'Declared capability labels — informational only. They describe what the tool touches; the server never enforces them.';
|
|
6
|
+
/** The selected tool's DECLARED capability badges, read-only and informational.
|
|
7
|
+
* Renders nothing unless the selected tool carries badges. */
|
|
8
|
+
export function SelectedToolBadges({ value, badgesByTool, idPrefix, }) {
|
|
9
|
+
if (value === null || badgesByTool === undefined || (badgesByTool[value]?.length ?? 0) === 0) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return (_jsx(Tooltip, { content: BADGES_NOTE, children: _jsx("span", { className: "tai-row", "data-testid": `${idPrefix}-badges`, style: { gap: 'var(--tai-space-1)' }, children: (badgesByTool[value] ?? []).map((badge) => (_jsx(Badge, { variant: "neutral", children: badge }, badge))) }) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=selected-tool-badges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selected-tool-badges.js","sourceRoot":"","sources":["../../src/components/selected-tool-badges.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,WAAW,GACtB,uHAAuH,CAAC;AAE1H;+DAC+D;AAC/D,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,YAAY,EACZ,QAAQ,GAKT;IACC,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CACL,KAAC,OAAO,IAAC,OAAO,EAAE,WAAW,YAC3B,eACE,SAAS,EAAC,SAAS,iBACN,GAAG,QAAQ,SAAS,EACjC,KAAK,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,YAEnC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1C,KAAC,KAAK,IAAa,OAAO,EAAC,SAAS,YACjC,KAAK,IADI,KAAK,CAET,CACT,CAAC,GACG,GACC,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** `ToolPicker`'s tag filter field and its "no filter" sentinel value. */
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
export declare const ALL_TAGS = "__all_tags__";
|
|
4
|
+
/** The tag filter: an "All tags" sentinel plus one option per distinct tag. */
|
|
5
|
+
export declare function TagFilterField({ allTags, tagFilter, onTagFilterChange, disabled, }: {
|
|
6
|
+
readonly allTags: readonly string[];
|
|
7
|
+
readonly tagFilter: string;
|
|
8
|
+
readonly onTagFilterChange: (value: string) => void;
|
|
9
|
+
readonly disabled: boolean | undefined;
|
|
10
|
+
}): ReactNode;
|
|
11
|
+
//# sourceMappingURL=tag-filter-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-filter-field.d.ts","sourceRoot":"","sources":["../../src/components/tag-filter-field.tsx"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,eAAO,MAAM,QAAQ,iBAAiB,CAAC;AAEvC,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CACxC,GAAG,SAAS,CAcZ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Field } from './field';
|
|
3
|
+
import { Select } from './select';
|
|
4
|
+
// Radix `Select.Item` forbids an empty-string value, so the "no filter" choice
|
|
5
|
+
// uses a sentinel rather than ''. A tool literally tagged this string would just
|
|
6
|
+
// never be filtered out — harmless for a UI convenience whose authority is the server.
|
|
7
|
+
export const ALL_TAGS = '__all_tags__';
|
|
8
|
+
/** The tag filter: an "All tags" sentinel plus one option per distinct tag. */
|
|
9
|
+
export function TagFilterField({ allTags, tagFilter, onTagFilterChange, disabled, }) {
|
|
10
|
+
return (_jsx(Field, { label: "Filter by tag", children: _jsx(Select, { options: [
|
|
11
|
+
{ value: ALL_TAGS, label: 'All tags' },
|
|
12
|
+
...allTags.map((tag) => ({ value: tag, label: tag })),
|
|
13
|
+
], value: tagFilter, onValueChange: onTagFilterChange, disabled: disabled }) }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=tag-filter-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-filter-field.js","sourceRoot":"","sources":["../../src/components/tag-filter-field.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,+EAA+E;AAC/E,iFAAiF;AACjF,uFAAuF;AACvF,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC;AAEvC,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,QAAQ,GAMT;IACC,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAC,eAAe,YAC1B,KAAC,MAAM,IACL,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;gBACtC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;aACtD,EACD,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,iBAAiB,EAChC,QAAQ,EAAE,QAAQ,GAClB,GACI,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
* every one renders as TEXT (React escapes it) — never an HTML sink. Pinned by a test.
|
|
42
42
|
*/
|
|
43
43
|
import { type ReactNode } from 'react';
|
|
44
|
-
export { BADGES_NOTE } from './tool-
|
|
44
|
+
export { BADGES_NOTE } from './selected-tool-badges';
|
|
45
45
|
/**
|
|
46
46
|
* The subset of a tool list read this picker reads: `data` is the names the host
|
|
47
47
|
* offers. A caller's TanStack `UseQueryResult<readonly string[]>` satisfies it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-picker.d.ts","sourceRoot":"","sources":["../../src/components/tool-picker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-picker.d.ts","sourceRoot":"","sources":["../../src/components/tool-picker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,OAAO,CAAC;AAWxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAIrD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,sGAAsG;IACtG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,iFAAiF;IACjF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,+FAA+F;IAC/F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,sFAAsF;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAClE,wFAAwF;IACxF,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CACrE;AA6FD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,aAAa,EACb,QAAQ,EACR,WAA8B,EAC9B,QAAwB,EACxB,KAAK,EACL,WAAW,EACX,KAAK,EACL,YAAY,EAAE,SAAS,EACvB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,GACb,EAAE,eAAe,+BAuFjB"}
|
|
@@ -46,8 +46,10 @@ import { errorMessage, isForbiddenError } from '../errors';
|
|
|
46
46
|
import { Badge } from './badge';
|
|
47
47
|
import { Field } from './field';
|
|
48
48
|
import { ErrorState } from './primitives';
|
|
49
|
-
import {
|
|
50
|
-
|
|
49
|
+
import { SelectedToolBadges } from './selected-tool-badges';
|
|
50
|
+
import { ALL_TAGS, TagFilterField } from './tag-filter-field';
|
|
51
|
+
import { ToolSelect } from './tool-select';
|
|
52
|
+
export { BADGES_NOTE } from './selected-tool-badges';
|
|
51
53
|
const MUTED_LINE = { margin: 0, color: 'var(--tai-color-text-muted)' };
|
|
52
54
|
function phaseOf(refused, failed, unlisted, empty) {
|
|
53
55
|
if (refused)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-picker.js","sourceRoot":"","sources":["../../src/components/tool-picker.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAkB,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tool-picker.js","sourceRoot":"","sources":["../../src/components/tool-picker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ToolPicker`'s tool `Select`: grouped by tag or flat, with the option-label and
|
|
3
|
+
* grouping helpers it renders from.
|
|
4
|
+
*/
|
|
5
|
+
import type { ReactNode } from 'react';
|
|
6
|
+
import { type SelectOption } from './select';
|
|
7
|
+
interface ToolSelectProps {
|
|
8
|
+
readonly tagsByTool: Readonly<Record<string, readonly string[]>> | undefined;
|
|
9
|
+
readonly filtered: readonly string[];
|
|
10
|
+
readonly value: string | null;
|
|
11
|
+
readonly onChange: (toolName: string) => void;
|
|
12
|
+
readonly placeholder: string;
|
|
13
|
+
readonly ariaLabel: string | undefined;
|
|
14
|
+
readonly disabled: boolean | undefined;
|
|
15
|
+
readonly displayNames: Readonly<Record<string, string>> | undefined;
|
|
16
|
+
readonly agentToolNames: ReadonlySet<string> | undefined;
|
|
17
|
+
/** An option drawn ahead of the list's own (a stored value the list does not carry). */
|
|
18
|
+
readonly leading: SelectOption | undefined;
|
|
19
|
+
readonly ariaDescribedBy: string | undefined;
|
|
20
|
+
}
|
|
21
|
+
/** The tool select: grouped by tag when `tagsByTool` is present, else a flat list.
|
|
22
|
+
* Either branch is a `Select`, which claims the enclosing `Field`'s control id. */
|
|
23
|
+
export declare function ToolSelect({ tagsByTool, filtered, value, onChange, placeholder, ariaLabel, disabled, displayNames, agentToolNames, leading, ariaDescribedBy, }: ToolSelectProps): ReactNode;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=tool-select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-select.d.ts","sourceRoot":"","sources":["../../src/components/tool-select.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAqDvE,UAAU,eAAe;IACvB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAC7E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACpE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACzD,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED;oFACoF;AACpF,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,OAAO,EACP,eAAe,GAChB,EAAE,eAAe,GAAG,SAAS,CAmC7B"}
|
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { toolDisplayLabel } from '../hooks/useToolDisplayNames';
|
|
3
|
-
import { Badge } from './badge';
|
|
4
|
-
import { Field } from './field';
|
|
5
3
|
import { Select } from './select';
|
|
6
|
-
import { Tooltip } from './tooltip';
|
|
7
|
-
/** The shared informational note every badge surface carries: declared, never enforced. */
|
|
8
|
-
export const BADGES_NOTE = 'Declared capability labels — informational only. They describe what the tool touches; the server never enforces them.';
|
|
9
4
|
const NO_DISPLAY_NAMES = {};
|
|
10
5
|
const UNTAGGED = 'Untagged';
|
|
11
|
-
// Radix `Select.Item` forbids an empty-string value, so the "no filter" choice
|
|
12
|
-
// uses a sentinel rather than ''. A tool literally tagged this string would just
|
|
13
|
-
// never be filtered out — harmless for a UI convenience whose authority is the server.
|
|
14
|
-
export const ALL_TAGS = '__all_tags__';
|
|
15
6
|
/** The group a tool sorts into: its alphabetically-first tag, else "Untagged". */
|
|
16
7
|
function groupFor(name, tagsByTool) {
|
|
17
8
|
const tags = [...(tagsByTool[name] ?? [])].sort((a, b) => a.localeCompare(b));
|
|
@@ -71,19 +62,4 @@ export function ToolSelect({ tagsByTool, filtered, value, onChange, placeholder,
|
|
|
71
62
|
// a subsequent selection would otherwise trigger.
|
|
72
63
|
options: leading === undefined ? options : [leading, ...options], value: value ?? '', onValueChange: onChange, placeholder: placeholder, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, disabled: disabled }));
|
|
73
64
|
}
|
|
74
|
-
|
|
75
|
-
export function TagFilterField({ allTags, tagFilter, onTagFilterChange, disabled, }) {
|
|
76
|
-
return (_jsx(Field, { label: "Filter by tag", children: _jsx(Select, { options: [
|
|
77
|
-
{ value: ALL_TAGS, label: 'All tags' },
|
|
78
|
-
...allTags.map((tag) => ({ value: tag, label: tag })),
|
|
79
|
-
], value: tagFilter, onValueChange: onTagFilterChange, disabled: disabled }) }));
|
|
80
|
-
}
|
|
81
|
-
/** The selected tool's DECLARED capability badges, read-only and informational.
|
|
82
|
-
* Renders nothing unless the selected tool carries badges. */
|
|
83
|
-
export function SelectedToolBadges({ value, badgesByTool, idPrefix, }) {
|
|
84
|
-
if (value === null || badgesByTool === undefined || (badgesByTool[value]?.length ?? 0) === 0) {
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
return (_jsx(Tooltip, { content: BADGES_NOTE, children: _jsx("span", { className: "tai-row", "data-testid": `${idPrefix}-badges`, style: { gap: 'var(--tai-space-1)' }, children: (badgesByTool[value] ?? []).map((badge) => (_jsx(Badge, { variant: "neutral", children: badge }, badge))) }) }));
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=tool-picker-parts.js.map
|
|
65
|
+
//# sourceMappingURL=tool-select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-select.js","sourceRoot":"","sources":["../../src/components/tool-select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,16 @@
|
|
|
3
3
|
* author `config` (`{ name, config }`) alongside bare-name elements. The editors
|
|
4
4
|
* hold the full config-bearing elements as their value, so config rides through an
|
|
5
5
|
* edit directly; these helpers project a combo to its bare extension names where a
|
|
6
|
-
* name-only view is needed (a picker's selection, a branch-tool name, a badge row)
|
|
6
|
+
* name-only view is needed (a picker's selection, a branch-tool name, a badge row)
|
|
7
|
+
* and compare or check combos by those names.
|
|
7
8
|
*/
|
|
8
9
|
import type { PresetExtensionElement } from '@tai42/api-client';
|
|
9
10
|
/** The bare extension name of one combo element (drops any `config`). */
|
|
10
11
|
export declare function extensionElementName(element: PresetExtensionElement): string;
|
|
11
12
|
/** Project a combo's elements to their bare extension names (drops any `config`). */
|
|
12
13
|
export declare function comboElementNames(combo: readonly PresetExtensionElement[]): string[];
|
|
14
|
+
/** Two combos are equal when their NAME sequences match (config is not part of identity). */
|
|
15
|
+
export declare function sameNames(a: readonly string[], b: readonly string[]): boolean;
|
|
16
|
+
/** The element names in a combo that are absent from the known catalog. */
|
|
17
|
+
export declare function unknownNames(combo: readonly PresetExtensionElement[], availableNames: ReadonlySet<string>): string[];
|
|
13
18
|
//# sourceMappingURL=extension-combos.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-combos.d.ts","sourceRoot":"","sources":["../src/extension-combos.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"extension-combos.d.ts","sourceRoot":"","sources":["../src/extension-combos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAE5E;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,sBAAsB,EAAE,GAAG,MAAM,EAAE,CAEpF;AAED,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"}
|
package/dist/extension-combos.js
CHANGED
|
@@ -6,4 +6,12 @@ export function extensionElementName(element) {
|
|
|
6
6
|
export function comboElementNames(combo) {
|
|
7
7
|
return combo.map(extensionElementName);
|
|
8
8
|
}
|
|
9
|
+
/** Two combos are equal when their NAME sequences match (config is not part of identity). */
|
|
10
|
+
export function sameNames(a, b) {
|
|
11
|
+
return a.length === b.length && a.every((name, index) => name === b[index]);
|
|
12
|
+
}
|
|
13
|
+
/** The element names in a combo that are absent from the known catalog. */
|
|
14
|
+
export function unknownNames(combo, availableNames) {
|
|
15
|
+
return comboElementNames(combo).filter((name) => !availableNames.has(name));
|
|
16
|
+
}
|
|
9
17
|
//# sourceMappingURL=extension-combos.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-combos.js","sourceRoot":"","sources":["../src/extension-combos.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extension-combos.js","sourceRoot":"","sources":["../src/extension-combos.ts"],"names":[],"mappings":"AAUA,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,OAA+B;IAClE,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,iBAAiB,CAAC,KAAwC;IACxE,OAAO,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzC,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,SAAS,CAAC,CAAoB,EAAE,CAAoB;IAClE,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,YAAY,CAC1B,KAAwC,EACxC,cAAmC;IAEnC,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tai42/studio-sdk",
|
|
3
|
-
"version": "30.0.
|
|
3
|
+
"version": "30.0.1",
|
|
4
4
|
"description": "The Studio plugin contract, shared UI components, and hooks that every feature builds on.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "tai42 <oss@tai42.ai>",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"@radix-ui/react-select": "^2.3.8",
|
|
97
97
|
"@radix-ui/react-tabs": "^1.1.22",
|
|
98
98
|
"@radix-ui/react-tooltip": "^1.3.0",
|
|
99
|
-
"@tai42/api-client": "30.0.
|
|
99
|
+
"@tai42/api-client": "30.0.1"
|
|
100
100
|
},
|
|
101
101
|
"scripts": {
|
|
102
102
|
"build": "tsc -b tsconfig.build.json && node scripts/copy-assets.mjs",
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ExtensionComboBuilder`'s editor for the combo under construction: the extension
|
|
3
|
+
* picker, a settings form per configurable drafted extension, and the commit actions.
|
|
4
|
+
*/
|
|
5
|
+
import type { Extension } from '@tai42/api-client';
|
|
6
|
+
import type { ReactNode } from 'react';
|
|
7
|
+
|
|
8
|
+
import type { JsonSchema } from '../schema-form/types';
|
|
9
|
+
import { type ExtensionConfigChange, ExtensionConfigEditor } from './extension-config-editor';
|
|
10
|
+
import { ExtensionPicker } from './extension-picker';
|
|
11
|
+
import { XCircleIcon } from './icons';
|
|
12
|
+
import { Button } from './primitives';
|
|
13
|
+
|
|
14
|
+
/** A drafted extension whose catalog entry declares a settings schema. */
|
|
15
|
+
export interface ConfigurableExtension {
|
|
16
|
+
readonly name: string;
|
|
17
|
+
readonly schema: JsonSchema;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** The combo under construction: the extension picker, one settings form per drafted
|
|
21
|
+
* configurable extension, the duplicate note, and the Add/Update + Cancel actions. */
|
|
22
|
+
export function ComboDraftEditor({
|
|
23
|
+
available,
|
|
24
|
+
draft,
|
|
25
|
+
onDraftChange,
|
|
26
|
+
configurable,
|
|
27
|
+
draftConfigs,
|
|
28
|
+
onDraftConfigChange,
|
|
29
|
+
isDuplicate,
|
|
30
|
+
canAdd,
|
|
31
|
+
editing,
|
|
32
|
+
disabled,
|
|
33
|
+
idPrefix,
|
|
34
|
+
onCommit,
|
|
35
|
+
onReset,
|
|
36
|
+
}: {
|
|
37
|
+
readonly available: readonly Extension[];
|
|
38
|
+
readonly draft: string[];
|
|
39
|
+
readonly onDraftChange: (draft: string[]) => void;
|
|
40
|
+
readonly configurable: readonly ConfigurableExtension[];
|
|
41
|
+
readonly draftConfigs: Readonly<Record<string, Record<string, unknown> | undefined>>;
|
|
42
|
+
readonly onDraftConfigChange: (name: string, change: ExtensionConfigChange) => void;
|
|
43
|
+
readonly isDuplicate: boolean;
|
|
44
|
+
readonly canAdd: boolean;
|
|
45
|
+
readonly editing: number | null;
|
|
46
|
+
readonly disabled: boolean | undefined;
|
|
47
|
+
readonly idPrefix: string;
|
|
48
|
+
readonly onCommit: () => void;
|
|
49
|
+
readonly onReset: () => void;
|
|
50
|
+
}): ReactNode {
|
|
51
|
+
return (
|
|
52
|
+
<div className="tai-stack tai-stack-2">
|
|
53
|
+
<ExtensionPicker
|
|
54
|
+
available={available}
|
|
55
|
+
value={draft}
|
|
56
|
+
onChange={onDraftChange}
|
|
57
|
+
disabled={disabled}
|
|
58
|
+
idPrefix={`${idPrefix}-draft`}
|
|
59
|
+
/>
|
|
60
|
+
|
|
61
|
+
{configurable.map(({ name, schema }) => (
|
|
62
|
+
<ExtensionConfigEditor
|
|
63
|
+
// Re-seed the form when the draft target changes (a new draft vs a
|
|
64
|
+
// specific combo pulled in for edit).
|
|
65
|
+
key={`${editing === null ? 'new' : String(editing)}-${name}`}
|
|
66
|
+
name={name}
|
|
67
|
+
schema={schema}
|
|
68
|
+
value={draftConfigs[name]}
|
|
69
|
+
onChange={(change) => {
|
|
70
|
+
onDraftConfigChange(name, change);
|
|
71
|
+
}}
|
|
72
|
+
disabled={disabled}
|
|
73
|
+
idPrefix={`${idPrefix}-settings-${name}`}
|
|
74
|
+
/>
|
|
75
|
+
))}
|
|
76
|
+
|
|
77
|
+
{isDuplicate ? (
|
|
78
|
+
<p role="alert" className="tai-field-error">
|
|
79
|
+
<XCircleIcon />
|
|
80
|
+
This extension set is already added.
|
|
81
|
+
</p>
|
|
82
|
+
) : null}
|
|
83
|
+
|
|
84
|
+
<div className="tai-row">
|
|
85
|
+
<Button type="button" variant="primary" onClick={onCommit} disabled={!canAdd}>
|
|
86
|
+
{editing === null ? 'Add extension set' : 'Update extension set'}
|
|
87
|
+
</Button>
|
|
88
|
+
{editing !== null ? (
|
|
89
|
+
<Button type="button" onClick={onReset} disabled={disabled}>
|
|
90
|
+
Cancel edit
|
|
91
|
+
</Button>
|
|
92
|
+
) : null}
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
@@ -1,32 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* and the shared combo helpers. The builder owns the state and composes these.
|
|
2
|
+
* `ExtensionComboBuilder`'s list of committed combos: one row of name badges per
|
|
3
|
+
* combo, with per-combo Edit and Remove and an inline unknown-name note.
|
|
5
4
|
*/
|
|
6
|
-
import type {
|
|
5
|
+
import type { PresetExtensionElement } from '@tai42/api-client';
|
|
7
6
|
import { Fragment, type ReactNode } from 'react';
|
|
8
7
|
|
|
9
|
-
import { comboElementNames } from '../extension-combos';
|
|
10
|
-
import type { JsonSchema } from '../schema-form/types';
|
|
8
|
+
import { comboElementNames, unknownNames } from '../extension-combos';
|
|
11
9
|
import { Badge } from './badge';
|
|
12
|
-
import { type ExtensionConfigChange, ExtensionConfigEditor } from './extension-config-editor';
|
|
13
|
-
import { ExtensionPicker } from './extension-picker';
|
|
14
10
|
import { CloseIcon, XCircleIcon } from './icons';
|
|
15
11
|
import { Button } from './primitives';
|
|
16
12
|
|
|
17
|
-
/** Two combos are equal when their NAME sequences match (config is not part of identity). */
|
|
18
|
-
export function sameNames(a: readonly string[], b: readonly string[]): boolean {
|
|
19
|
-
return a.length === b.length && a.every((name, index) => name === b[index]);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/** The element names in a combo that are absent from the known catalog. */
|
|
23
|
-
export function unknownNames(
|
|
24
|
-
combo: readonly PresetExtensionElement[],
|
|
25
|
-
availableNames: ReadonlySet<string>,
|
|
26
|
-
): string[] {
|
|
27
|
-
return comboElementNames(combo).filter((name) => !availableNames.has(name));
|
|
28
|
-
}
|
|
29
|
-
|
|
30
13
|
/** One committed combo's row: its name badges and the Edit / Remove pair, with an
|
|
31
14
|
* inline unknown-name note. */
|
|
32
15
|
function CommittedComboRow({
|
|
@@ -140,87 +123,3 @@ export function CommittedComboList({
|
|
|
140
123
|
</ul>
|
|
141
124
|
);
|
|
142
125
|
}
|
|
143
|
-
|
|
144
|
-
/** A drafted extension whose catalog entry declares a settings schema. */
|
|
145
|
-
export interface ConfigurableExtension {
|
|
146
|
-
readonly name: string;
|
|
147
|
-
readonly schema: JsonSchema;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/** The combo under construction: the extension picker, one settings form per drafted
|
|
151
|
-
* configurable extension, the duplicate note, and the Add/Update + Cancel actions. */
|
|
152
|
-
export function ComboDraftEditor({
|
|
153
|
-
available,
|
|
154
|
-
draft,
|
|
155
|
-
onDraftChange,
|
|
156
|
-
configurable,
|
|
157
|
-
draftConfigs,
|
|
158
|
-
onDraftConfigChange,
|
|
159
|
-
isDuplicate,
|
|
160
|
-
canAdd,
|
|
161
|
-
editing,
|
|
162
|
-
disabled,
|
|
163
|
-
idPrefix,
|
|
164
|
-
onCommit,
|
|
165
|
-
onReset,
|
|
166
|
-
}: {
|
|
167
|
-
readonly available: readonly Extension[];
|
|
168
|
-
readonly draft: string[];
|
|
169
|
-
readonly onDraftChange: (draft: string[]) => void;
|
|
170
|
-
readonly configurable: readonly ConfigurableExtension[];
|
|
171
|
-
readonly draftConfigs: Readonly<Record<string, Record<string, unknown> | undefined>>;
|
|
172
|
-
readonly onDraftConfigChange: (name: string, change: ExtensionConfigChange) => void;
|
|
173
|
-
readonly isDuplicate: boolean;
|
|
174
|
-
readonly canAdd: boolean;
|
|
175
|
-
readonly editing: number | null;
|
|
176
|
-
readonly disabled: boolean | undefined;
|
|
177
|
-
readonly idPrefix: string;
|
|
178
|
-
readonly onCommit: () => void;
|
|
179
|
-
readonly onReset: () => void;
|
|
180
|
-
}): ReactNode {
|
|
181
|
-
return (
|
|
182
|
-
<div className="tai-stack tai-stack-2">
|
|
183
|
-
<ExtensionPicker
|
|
184
|
-
available={available}
|
|
185
|
-
value={draft}
|
|
186
|
-
onChange={onDraftChange}
|
|
187
|
-
disabled={disabled}
|
|
188
|
-
idPrefix={`${idPrefix}-draft`}
|
|
189
|
-
/>
|
|
190
|
-
|
|
191
|
-
{configurable.map(({ name, schema }) => (
|
|
192
|
-
<ExtensionConfigEditor
|
|
193
|
-
// Re-seed the form when the draft target changes (a new draft vs a
|
|
194
|
-
// specific combo pulled in for edit).
|
|
195
|
-
key={`${editing === null ? 'new' : String(editing)}-${name}`}
|
|
196
|
-
name={name}
|
|
197
|
-
schema={schema}
|
|
198
|
-
value={draftConfigs[name]}
|
|
199
|
-
onChange={(change) => {
|
|
200
|
-
onDraftConfigChange(name, change);
|
|
201
|
-
}}
|
|
202
|
-
disabled={disabled}
|
|
203
|
-
idPrefix={`${idPrefix}-settings-${name}`}
|
|
204
|
-
/>
|
|
205
|
-
))}
|
|
206
|
-
|
|
207
|
-
{isDuplicate ? (
|
|
208
|
-
<p role="alert" className="tai-field-error">
|
|
209
|
-
<XCircleIcon />
|
|
210
|
-
This extension set is already added.
|
|
211
|
-
</p>
|
|
212
|
-
) : null}
|
|
213
|
-
|
|
214
|
-
<div className="tai-row">
|
|
215
|
-
<Button type="button" variant="primary" onClick={onCommit} disabled={!canAdd}>
|
|
216
|
-
{editing === null ? 'Add extension set' : 'Update extension set'}
|
|
217
|
-
</Button>
|
|
218
|
-
{editing !== null ? (
|
|
219
|
-
<Button type="button" onClick={onReset} disabled={disabled}>
|
|
220
|
-
Cancel edit
|
|
221
|
-
</Button>
|
|
222
|
-
) : null}
|
|
223
|
-
</div>
|
|
224
|
-
</div>
|
|
225
|
-
);
|
|
226
|
-
}
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
* preset/tool extensions wire carries. It is PRESENTATIONAL: the caller fetches the
|
|
7
7
|
* extension catalog (`available`) and owns the `value`; this component fetches nothing.
|
|
8
8
|
*
|
|
9
|
-
* The surface has two
|
|
10
|
-
* - the current combos, each an ordered row of name `Badge`s
|
|
11
|
-
* (pull it back into the draft) and Remove;
|
|
12
|
-
* - a combo UNDER CONSTRUCTION, authored with the shared `ExtensionPicker` (grouped
|
|
9
|
+
* The surface has two sections:
|
|
10
|
+
* - the current combos (`CommittedComboList`), each an ordered row of name `Badge`s
|
|
11
|
+
* with a per-combo Edit (pull it back into the draft) and Remove;
|
|
12
|
+
* - a combo UNDER CONSTRUCTION (`ComboDraftEditor`), authored with the shared `ExtensionPicker` (grouped
|
|
13
13
|
* by kind, single-select for the non-stackable `backend` kind). An extension whose
|
|
14
14
|
* catalog entry declares a `config_schema` is authored as `{ name, config }` through
|
|
15
15
|
* its settings form; any other name stays a bare element, or the edited combo's own
|
|
@@ -38,15 +38,15 @@
|
|
|
38
38
|
import type { Extension, PresetExtensionElement } from '@tai42/api-client';
|
|
39
39
|
import { type ReactNode, useEffect, useState } from 'react';
|
|
40
40
|
|
|
41
|
-
import { comboElementNames, extensionElementName } from '../extension-combos';
|
|
42
|
-
import type { JsonSchema } from '../schema-form/types';
|
|
43
41
|
import {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
type ConfigurableExtension,
|
|
42
|
+
comboElementNames,
|
|
43
|
+
extensionElementName,
|
|
47
44
|
sameNames,
|
|
48
45
|
unknownNames,
|
|
49
|
-
} from '
|
|
46
|
+
} from '../extension-combos';
|
|
47
|
+
import type { JsonSchema } from '../schema-form/types';
|
|
48
|
+
import { ComboDraftEditor, type ConfigurableExtension } from './combo-draft-editor';
|
|
49
|
+
import { CommittedComboList } from './committed-combo-list';
|
|
50
50
|
import type { ExtensionConfigChange } from './extension-config-editor';
|
|
51
51
|
|
|
52
52
|
type Seeds = Readonly<Record<string, Record<string, unknown> | undefined>>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** `ToolPicker`'s capability badges for the selected tool, and the note every badge
|
|
2
|
+
* surface carries. */
|
|
3
|
+
import type { ReactNode } from 'react';
|
|
4
|
+
|
|
5
|
+
import { Badge } from './badge';
|
|
6
|
+
import { Tooltip } from './tooltip';
|
|
7
|
+
|
|
8
|
+
/** The shared informational note every badge surface carries: declared, never enforced. */
|
|
9
|
+
export const BADGES_NOTE =
|
|
10
|
+
'Declared capability labels — informational only. They describe what the tool touches; the server never enforces them.';
|
|
11
|
+
|
|
12
|
+
/** The selected tool's DECLARED capability badges, read-only and informational.
|
|
13
|
+
* Renders nothing unless the selected tool carries badges. */
|
|
14
|
+
export function SelectedToolBadges({
|
|
15
|
+
value,
|
|
16
|
+
badgesByTool,
|
|
17
|
+
idPrefix,
|
|
18
|
+
}: {
|
|
19
|
+
readonly value: string | null;
|
|
20
|
+
readonly badgesByTool: Readonly<Record<string, readonly string[]>> | undefined;
|
|
21
|
+
readonly idPrefix: string;
|
|
22
|
+
}): ReactNode {
|
|
23
|
+
if (value === null || badgesByTool === undefined || (badgesByTool[value]?.length ?? 0) === 0) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return (
|
|
27
|
+
<Tooltip content={BADGES_NOTE}>
|
|
28
|
+
<span
|
|
29
|
+
className="tai-row"
|
|
30
|
+
data-testid={`${idPrefix}-badges`}
|
|
31
|
+
style={{ gap: 'var(--tai-space-1)' }}
|
|
32
|
+
>
|
|
33
|
+
{(badgesByTool[value] ?? []).map((badge) => (
|
|
34
|
+
<Badge key={badge} variant="neutral">
|
|
35
|
+
{badge}
|
|
36
|
+
</Badge>
|
|
37
|
+
))}
|
|
38
|
+
</span>
|
|
39
|
+
</Tooltip>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** `ToolPicker`'s tag filter field and its "no filter" sentinel value. */
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
import { Field } from './field';
|
|
5
|
+
import { Select } from './select';
|
|
6
|
+
|
|
7
|
+
// Radix `Select.Item` forbids an empty-string value, so the "no filter" choice
|
|
8
|
+
// uses a sentinel rather than ''. A tool literally tagged this string would just
|
|
9
|
+
// never be filtered out — harmless for a UI convenience whose authority is the server.
|
|
10
|
+
export const ALL_TAGS = '__all_tags__';
|
|
11
|
+
|
|
12
|
+
/** The tag filter: an "All tags" sentinel plus one option per distinct tag. */
|
|
13
|
+
export function TagFilterField({
|
|
14
|
+
allTags,
|
|
15
|
+
tagFilter,
|
|
16
|
+
onTagFilterChange,
|
|
17
|
+
disabled,
|
|
18
|
+
}: {
|
|
19
|
+
readonly allTags: readonly string[];
|
|
20
|
+
readonly tagFilter: string;
|
|
21
|
+
readonly onTagFilterChange: (value: string) => void;
|
|
22
|
+
readonly disabled: boolean | undefined;
|
|
23
|
+
}): ReactNode {
|
|
24
|
+
return (
|
|
25
|
+
<Field label="Filter by tag">
|
|
26
|
+
<Select
|
|
27
|
+
options={[
|
|
28
|
+
{ value: ALL_TAGS, label: 'All tags' },
|
|
29
|
+
...allTags.map((tag) => ({ value: tag, label: tag })),
|
|
30
|
+
]}
|
|
31
|
+
value={tagFilter}
|
|
32
|
+
onValueChange={onTagFilterChange}
|
|
33
|
+
disabled={disabled}
|
|
34
|
+
/>
|
|
35
|
+
</Field>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
@@ -47,9 +47,11 @@ import { Badge } from './badge';
|
|
|
47
47
|
import { Field } from './field';
|
|
48
48
|
import { ErrorState } from './primitives';
|
|
49
49
|
import type { SelectOption } from './select';
|
|
50
|
-
import {
|
|
50
|
+
import { SelectedToolBadges } from './selected-tool-badges';
|
|
51
|
+
import { ALL_TAGS, TagFilterField } from './tag-filter-field';
|
|
52
|
+
import { ToolSelect } from './tool-select';
|
|
51
53
|
|
|
52
|
-
export { BADGES_NOTE } from './tool-
|
|
54
|
+
export { BADGES_NOTE } from './selected-tool-badges';
|
|
53
55
|
|
|
54
56
|
const MUTED_LINE = { margin: 0, color: 'var(--tai-color-text-muted)' } as const;
|
|
55
57
|
|
|
@@ -1,26 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* state and composes these; the option-label and grouping helpers live here too.
|
|
2
|
+
* `ToolPicker`'s tool `Select`: grouped by tag or flat, with the option-label and
|
|
3
|
+
* grouping helpers it renders from.
|
|
5
4
|
*/
|
|
6
5
|
import type { ReactNode } from 'react';
|
|
7
6
|
|
|
8
7
|
import { toolDisplayLabel } from '../hooks/useToolDisplayNames';
|
|
9
|
-
import { Badge } from './badge';
|
|
10
|
-
import { Field } from './field';
|
|
11
8
|
import { Select, type SelectGroup, type SelectOption } from './select';
|
|
12
|
-
import { Tooltip } from './tooltip';
|
|
13
|
-
|
|
14
|
-
/** The shared informational note every badge surface carries: declared, never enforced. */
|
|
15
|
-
export const BADGES_NOTE =
|
|
16
|
-
'Declared capability labels — informational only. They describe what the tool touches; the server never enforces them.';
|
|
17
9
|
|
|
18
10
|
const NO_DISPLAY_NAMES: Readonly<Record<string, string>> = {};
|
|
19
11
|
const UNTAGGED = 'Untagged';
|
|
20
|
-
// Radix `Select.Item` forbids an empty-string value, so the "no filter" choice
|
|
21
|
-
// uses a sentinel rather than ''. A tool literally tagged this string would just
|
|
22
|
-
// never be filtered out — harmless for a UI convenience whose authority is the server.
|
|
23
|
-
export const ALL_TAGS = '__all_tags__';
|
|
24
12
|
|
|
25
13
|
/** The group a tool sorts into: its alphabetically-first tag, else "Untagged". */
|
|
26
14
|
function groupFor(name: string, tagsByTool: Readonly<Record<string, readonly string[]>>): string {
|
|
@@ -135,61 +123,3 @@ export function ToolSelect({
|
|
|
135
123
|
/>
|
|
136
124
|
);
|
|
137
125
|
}
|
|
138
|
-
|
|
139
|
-
/** The tag filter: an "All tags" sentinel plus one option per distinct tag. */
|
|
140
|
-
export function TagFilterField({
|
|
141
|
-
allTags,
|
|
142
|
-
tagFilter,
|
|
143
|
-
onTagFilterChange,
|
|
144
|
-
disabled,
|
|
145
|
-
}: {
|
|
146
|
-
readonly allTags: readonly string[];
|
|
147
|
-
readonly tagFilter: string;
|
|
148
|
-
readonly onTagFilterChange: (value: string) => void;
|
|
149
|
-
readonly disabled: boolean | undefined;
|
|
150
|
-
}): ReactNode {
|
|
151
|
-
return (
|
|
152
|
-
<Field label="Filter by tag">
|
|
153
|
-
<Select
|
|
154
|
-
options={[
|
|
155
|
-
{ value: ALL_TAGS, label: 'All tags' },
|
|
156
|
-
...allTags.map((tag) => ({ value: tag, label: tag })),
|
|
157
|
-
]}
|
|
158
|
-
value={tagFilter}
|
|
159
|
-
onValueChange={onTagFilterChange}
|
|
160
|
-
disabled={disabled}
|
|
161
|
-
/>
|
|
162
|
-
</Field>
|
|
163
|
-
);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/** The selected tool's DECLARED capability badges, read-only and informational.
|
|
167
|
-
* Renders nothing unless the selected tool carries badges. */
|
|
168
|
-
export function SelectedToolBadges({
|
|
169
|
-
value,
|
|
170
|
-
badgesByTool,
|
|
171
|
-
idPrefix,
|
|
172
|
-
}: {
|
|
173
|
-
readonly value: string | null;
|
|
174
|
-
readonly badgesByTool: Readonly<Record<string, readonly string[]>> | undefined;
|
|
175
|
-
readonly idPrefix: string;
|
|
176
|
-
}): ReactNode {
|
|
177
|
-
if (value === null || badgesByTool === undefined || (badgesByTool[value]?.length ?? 0) === 0) {
|
|
178
|
-
return null;
|
|
179
|
-
}
|
|
180
|
-
return (
|
|
181
|
-
<Tooltip content={BADGES_NOTE}>
|
|
182
|
-
<span
|
|
183
|
-
className="tai-row"
|
|
184
|
-
data-testid={`${idPrefix}-badges`}
|
|
185
|
-
style={{ gap: 'var(--tai-space-1)' }}
|
|
186
|
-
>
|
|
187
|
-
{(badgesByTool[value] ?? []).map((badge) => (
|
|
188
|
-
<Badge key={badge} variant="neutral">
|
|
189
|
-
{badge}
|
|
190
|
-
</Badge>
|
|
191
|
-
))}
|
|
192
|
-
</span>
|
|
193
|
-
</Tooltip>
|
|
194
|
-
);
|
|
195
|
-
}
|
package/src/extension-combos.ts
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* author `config` (`{ name, config }`) alongside bare-name elements. The editors
|
|
4
4
|
* hold the full config-bearing elements as their value, so config rides through an
|
|
5
5
|
* edit directly; these helpers project a combo to its bare extension names where a
|
|
6
|
-
* name-only view is needed (a picker's selection, a branch-tool name, a badge row)
|
|
6
|
+
* name-only view is needed (a picker's selection, a branch-tool name, a badge row)
|
|
7
|
+
* and compare or check combos by those names.
|
|
7
8
|
*/
|
|
8
9
|
import type { PresetExtensionElement } from '@tai42/api-client';
|
|
9
10
|
|
|
@@ -16,3 +17,16 @@ export function extensionElementName(element: PresetExtensionElement): string {
|
|
|
16
17
|
export function comboElementNames(combo: readonly PresetExtensionElement[]): string[] {
|
|
17
18
|
return combo.map(extensionElementName);
|
|
18
19
|
}
|
|
20
|
+
|
|
21
|
+
/** Two combos are equal when their NAME sequences match (config is not part of identity). */
|
|
22
|
+
export function sameNames(a: readonly string[], b: readonly string[]): boolean {
|
|
23
|
+
return a.length === b.length && a.every((name, index) => name === b[index]);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** The element names in a combo that are absent from the known catalog. */
|
|
27
|
+
export function unknownNames(
|
|
28
|
+
combo: readonly PresetExtensionElement[],
|
|
29
|
+
availableNames: ReadonlySet<string>,
|
|
30
|
+
): string[] {
|
|
31
|
+
return comboElementNames(combo).filter((name) => !availableNames.has(name));
|
|
32
|
+
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The pieces of `ExtensionComboBuilder`: the committed-combo list
|
|
3
|
-
* (`CommittedComboList`), the under-construction combo editor (`ComboDraftEditor`),
|
|
4
|
-
* and the shared combo helpers. The builder owns the state and composes these.
|
|
5
|
-
*/
|
|
6
|
-
import type { Extension, PresetExtensionElement } from '@tai42/api-client';
|
|
7
|
-
import { type ReactNode } from 'react';
|
|
8
|
-
import type { JsonSchema } from '../schema-form/types';
|
|
9
|
-
import { type ExtensionConfigChange } from './extension-config-editor';
|
|
10
|
-
/** Two combos are equal when their NAME sequences match (config is not part of identity). */
|
|
11
|
-
export declare function sameNames(a: readonly string[], b: readonly string[]): boolean;
|
|
12
|
-
/** The element names in a combo that are absent from the known catalog. */
|
|
13
|
-
export declare function unknownNames(combo: readonly PresetExtensionElement[], availableNames: ReadonlySet<string>): string[];
|
|
14
|
-
/** The current combos, each a row of name badges with per-combo Edit and Remove. */
|
|
15
|
-
export declare function CommittedComboList({ value, availableReady, availableNames, editing, disabled, onEdit, onRemove, }: {
|
|
16
|
-
readonly value: readonly PresetExtensionElement[][];
|
|
17
|
-
readonly availableReady: boolean;
|
|
18
|
-
readonly availableNames: ReadonlySet<string>;
|
|
19
|
-
readonly editing: number | null;
|
|
20
|
-
readonly disabled: boolean | undefined;
|
|
21
|
-
readonly onEdit: (index: number) => void;
|
|
22
|
-
readonly onRemove: (index: number) => void;
|
|
23
|
-
}): ReactNode;
|
|
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, }: {
|
|
32
|
-
readonly available: readonly Extension[];
|
|
33
|
-
readonly draft: string[];
|
|
34
|
-
readonly onDraftChange: (draft: string[]) => void;
|
|
35
|
-
readonly configurable: readonly ConfigurableExtension[];
|
|
36
|
-
readonly draftConfigs: Readonly<Record<string, Record<string, unknown> | undefined>>;
|
|
37
|
-
readonly onDraftConfigChange: (name: string, change: ExtensionConfigChange) => void;
|
|
38
|
-
readonly isDuplicate: boolean;
|
|
39
|
-
readonly canAdd: boolean;
|
|
40
|
-
readonly editing: number | null;
|
|
41
|
-
readonly disabled: boolean | undefined;
|
|
42
|
-
readonly idPrefix: string;
|
|
43
|
-
readonly onCommit: () => void;
|
|
44
|
-
readonly onReset: () => void;
|
|
45
|
-
}): ReactNode;
|
|
46
|
-
//# sourceMappingURL=extension-combo-parts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extension-combo-parts.js","sourceRoot":"","sources":["../../src/components/extension-combo-parts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The pieces of `ToolPicker`: the tool `Select` itself (grouped or flat), the tag
|
|
3
|
-
* filter field, and the selected tool's capability badges. The picker owns the
|
|
4
|
-
* state and composes these; the option-label and grouping helpers live here too.
|
|
5
|
-
*/
|
|
6
|
-
import type { ReactNode } from 'react';
|
|
7
|
-
import { type SelectOption } from './select';
|
|
8
|
-
/** The shared informational note every badge surface carries: declared, never enforced. */
|
|
9
|
-
export declare const BADGES_NOTE = "Declared capability labels \u2014 informational only. They describe what the tool touches; the server never enforces them.";
|
|
10
|
-
export declare const ALL_TAGS = "__all_tags__";
|
|
11
|
-
interface ToolSelectProps {
|
|
12
|
-
readonly tagsByTool: Readonly<Record<string, readonly string[]>> | undefined;
|
|
13
|
-
readonly filtered: readonly string[];
|
|
14
|
-
readonly value: string | null;
|
|
15
|
-
readonly onChange: (toolName: string) => void;
|
|
16
|
-
readonly placeholder: string;
|
|
17
|
-
readonly ariaLabel: string | undefined;
|
|
18
|
-
readonly disabled: boolean | undefined;
|
|
19
|
-
readonly displayNames: Readonly<Record<string, string>> | undefined;
|
|
20
|
-
readonly agentToolNames: ReadonlySet<string> | undefined;
|
|
21
|
-
/** An option drawn ahead of the list's own (a stored value the list does not carry). */
|
|
22
|
-
readonly leading: SelectOption | undefined;
|
|
23
|
-
readonly ariaDescribedBy: string | undefined;
|
|
24
|
-
}
|
|
25
|
-
/** The tool select: grouped by tag when `tagsByTool` is present, else a flat list.
|
|
26
|
-
* Either branch is a `Select`, which claims the enclosing `Field`'s control id. */
|
|
27
|
-
export declare function ToolSelect({ tagsByTool, filtered, value, onChange, placeholder, ariaLabel, disabled, displayNames, agentToolNames, leading, ariaDescribedBy, }: ToolSelectProps): ReactNode;
|
|
28
|
-
/** The tag filter: an "All tags" sentinel plus one option per distinct tag. */
|
|
29
|
-
export declare function TagFilterField({ allTags, tagFilter, onTagFilterChange, disabled, }: {
|
|
30
|
-
readonly allTags: readonly string[];
|
|
31
|
-
readonly tagFilter: string;
|
|
32
|
-
readonly onTagFilterChange: (value: string) => void;
|
|
33
|
-
readonly disabled: boolean | undefined;
|
|
34
|
-
}): ReactNode;
|
|
35
|
-
/** The selected tool's DECLARED capability badges, read-only and informational.
|
|
36
|
-
* Renders nothing unless the selected tool carries badges. */
|
|
37
|
-
export declare function SelectedToolBadges({ value, badgesByTool, idPrefix, }: {
|
|
38
|
-
readonly value: string | null;
|
|
39
|
-
readonly badgesByTool: Readonly<Record<string, readonly string[]>> | undefined;
|
|
40
|
-
readonly idPrefix: string;
|
|
41
|
-
}): ReactNode;
|
|
42
|
-
export {};
|
|
43
|
-
//# sourceMappingURL=tool-picker-parts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-picker-parts.d.ts","sourceRoot":"","sources":["../../src/components/tool-picker-parts.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAGvE,2FAA2F;AAC3F,eAAO,MAAM,WAAW,+HACiG,CAAC;AAO1H,eAAO,MAAM,QAAQ,iBAAiB,CAAC;AAkDvC,UAAU,eAAe;IACvB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAC7E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACpE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACzD,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED;oFACoF;AACpF,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,OAAO,EACP,eAAe,GAChB,EAAE,eAAe,GAAG,SAAS,CAmC7B;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CACxC,GAAG,SAAS,CAcZ;AAED;+DAC+D;AAC/D,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,GAAG,SAAS,CAmBZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-picker-parts.js","sourceRoot":"","sources":["../../src/components/tool-picker-parts.tsx"],"names":[],"mappings":"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"}
|