@tai42/studio-sdk 30.0.0 → 31.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 +98 -10
- package/dist/components/agent-picker.d.ts +1 -1
- package/dist/components/agent-picker.d.ts.map +1 -1
- package/dist/components/agent-picker.js +1 -0
- package/dist/components/agent-picker.js.map +1 -1
- package/dist/components/channel-picker.d.ts +1 -1
- package/dist/components/channel-picker.d.ts.map +1 -1
- package/dist/components/channel-picker.js +1 -0
- package/dist/components/channel-picker.js.map +1 -1
- 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/components.css +53 -0
- package/dist/components/explorer-body.d.ts +1 -0
- package/dist/components/explorer-body.d.ts.map +1 -1
- package/dist/components/explorer-body.js +6 -4
- package/dist/components/explorer-body.js.map +1 -1
- package/dist/components/explorer-view.d.ts +16 -7
- package/dist/components/explorer-view.d.ts.map +1 -1
- package/dist/components/explorer-view.js +27 -13
- package/dist/components/explorer-view.js.map +1 -1
- 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/extension-config-editor.js.map +1 -1
- package/dist/components/field.d.ts +6 -0
- package/dist/components/field.d.ts.map +1 -1
- package/dist/components/field.js +15 -2
- package/dist/components/field.js.map +1 -1
- package/dist/components/folder-actions.d.ts +51 -0
- package/dist/components/folder-actions.d.ts.map +1 -0
- package/dist/components/folder-actions.js +173 -0
- package/dist/components/folder-actions.js.map +1 -0
- package/dist/components/folder-filing.d.ts +32 -0
- package/dist/components/folder-filing.d.ts.map +1 -0
- package/dist/components/folder-filing.js +51 -0
- package/dist/components/folder-filing.js.map +1 -0
- package/dist/components/folder-nav.d.ts +9 -4
- package/dist/components/folder-nav.d.ts.map +1 -1
- package/dist/components/folder-nav.js +18 -22
- package/dist/components/folder-nav.js.map +1 -1
- package/dist/components/folder-occupancy.d.ts +27 -0
- package/dist/components/folder-occupancy.d.ts.map +1 -0
- package/dist/components/folder-occupancy.js +54 -0
- package/dist/components/folder-occupancy.js.map +1 -0
- package/dist/components/named-list-picker.d.ts +5 -3
- package/dist/components/named-list-picker.d.ts.map +1 -1
- package/dist/components/named-list-picker.js +7 -7
- package/dist/components/named-list-picker.js.map +1 -1
- package/dist/components/primitives.d.ts +2 -1
- package/dist/components/primitives.d.ts.map +1 -1
- package/dist/components/primitives.js +2 -1
- package/dist/components/primitives.js.map +1 -1
- package/dist/components/searchable-select-model.d.ts +40 -0
- package/dist/components/searchable-select-model.d.ts.map +1 -0
- package/dist/components/searchable-select-model.js +69 -0
- package/dist/components/searchable-select-model.js.map +1 -0
- package/dist/components/searchable-select.d.ts +38 -0
- package/dist/components/searchable-select.d.ts.map +1 -0
- package/dist/components/searchable-select.js +200 -0
- package/dist/components/searchable-select.js.map +1 -0
- 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/subject-section.d.ts.map +1 -1
- package/dist/components/subject-section.js +2 -2
- package/dist/components/subject-section.js.map +1 -1
- package/dist/components/table.d.ts +7 -1
- package/dist/components/table.d.ts.map +1 -1
- package/dist/components/table.js +2 -2
- package/dist/components/table.js.map +1 -1
- 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-meta-access.d.ts +28 -0
- package/dist/components/tool-meta-access.d.ts.map +1 -0
- package/dist/components/tool-meta-access.js +65 -0
- package/dist/components/tool-meta-access.js.map +1 -0
- package/dist/components/tool-name-entry.d.ts +26 -0
- package/dist/components/tool-name-entry.d.ts.map +1 -0
- package/dist/components/tool-name-entry.js +43 -0
- package/dist/components/tool-name-entry.js.map +1 -0
- package/dist/components/tool-picker.d.ts +24 -19
- package/dist/components/tool-picker.d.ts.map +1 -1
- package/dist/components/tool-picker.js +55 -35
- package/dist/components/tool-picker.js.map +1 -1
- package/dist/components/tool-select.d.ts +26 -0
- package/dist/components/tool-select.d.ts.map +1 -0
- package/dist/components/tool-select.js +82 -0
- 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/dist/hooks/useApi.d.ts +1 -0
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/hooks/useSystemKinds.d.ts +27 -12
- package/dist/hooks/useSystemKinds.d.ts.map +1 -1
- package/dist/hooks/useSystemKinds.js +56 -16
- package/dist/hooks/useSystemKinds.js.map +1 -1
- package/dist/index.d.ts +51 -49
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -26
- package/dist/index.js.map +1 -1
- package/dist/marketplace-install/use-mount-install.d.ts +6 -6
- package/dist/plugin/version.d.ts +1 -1
- package/dist/plugin/version.js +1 -1
- package/dist/schema-editor/SchemaEditor.d.ts +7 -2
- package/dist/schema-editor/SchemaEditor.d.ts.map +1 -1
- package/dist/schema-editor/SchemaEditor.js +1 -1
- package/dist/schema-editor/SchemaEditor.js.map +1 -1
- package/dist/schema-editor/index.d.ts +2 -2
- package/dist/schema-editor/index.d.ts.map +1 -1
- package/dist/schema-form/array-field.d.ts.map +1 -1
- package/dist/schema-form/array-field.js +6 -2
- package/dist/schema-form/array-field.js.map +1 -1
- package/dist/schema-form/classify.d.ts +4 -1
- package/dist/schema-form/classify.d.ts.map +1 -1
- package/dist/schema-form/classify.js +36 -15
- package/dist/schema-form/classify.js.map +1 -1
- package/dist/schema-form/collapsed-object-field.d.ts +20 -0
- package/dist/schema-form/collapsed-object-field.d.ts.map +1 -0
- package/dist/schema-form/collapsed-object-field.js +14 -0
- package/dist/schema-form/collapsed-object-field.js.map +1 -0
- package/dist/schema-form/context.d.ts +27 -1
- package/dist/schema-form/context.d.ts.map +1 -1
- package/dist/schema-form/context.js +14 -0
- package/dist/schema-form/context.js.map +1 -1
- package/dist/schema-form/default-value.d.ts +21 -6
- package/dist/schema-form/default-value.d.ts.map +1 -1
- package/dist/schema-form/default-value.js +74 -15
- package/dist/schema-form/default-value.js.map +1 -1
- package/dist/schema-form/expression-field.d.ts +48 -0
- package/dist/schema-form/expression-field.d.ts.map +1 -0
- package/dist/schema-form/expression-field.js +88 -0
- package/dist/schema-form/expression-field.js.map +1 -0
- package/dist/schema-form/field-model.d.ts +23 -4
- package/dist/schema-form/field-model.d.ts.map +1 -1
- package/dist/schema-form/field-node.d.ts.map +1 -1
- package/dist/schema-form/field-node.js +16 -3
- package/dist/schema-form/field-node.js.map +1 -1
- package/dist/schema-form/index.d.ts +3 -3
- package/dist/schema-form/index.d.ts.map +1 -1
- package/dist/schema-form/index.js +2 -2
- package/dist/schema-form/index.js.map +1 -1
- package/dist/schema-form/object-fields.d.ts +6 -3
- package/dist/schema-form/object-fields.d.ts.map +1 -1
- package/dist/schema-form/object-fields.js +14 -3
- package/dist/schema-form/object-fields.js.map +1 -1
- package/dist/schema-form/record-field.d.ts.map +1 -1
- package/dist/schema-form/record-field.js +6 -2
- package/dist/schema-form/record-field.js.map +1 -1
- package/dist/schema-form/seeding-action.d.ts +15 -0
- package/dist/schema-form/seeding-action.d.ts.map +1 -0
- package/dist/schema-form/seeding-action.js +35 -0
- package/dist/schema-form/seeding-action.js.map +1 -0
- package/dist/schema-form/string-annotations.d.ts +22 -8
- package/dist/schema-form/string-annotations.d.ts.map +1 -1
- package/dist/schema-form/string-annotations.js +39 -14
- package/dist/schema-form/string-annotations.js.map +1 -1
- package/dist/schema-form/string-field.js +2 -84
- package/dist/schema-form/string-field.js.map +1 -1
- package/dist/schema-form/templated-field.d.ts +13 -0
- package/dist/schema-form/templated-field.d.ts.map +1 -0
- package/dist/schema-form/templated-field.js +43 -0
- package/dist/schema-form/templated-field.js.map +1 -0
- package/dist/schema-form/union-field.d.ts.map +1 -1
- package/dist/schema-form/union-field.js +6 -2
- package/dist/schema-form/union-field.js.map +1 -1
- package/dist/schema-form/union.d.ts +4 -4
- package/dist/schema-form/union.d.ts.map +1 -1
- package/dist/schema-form/union.js +8 -1
- package/dist/schema-form/union.js.map +1 -1
- package/dist/schema-form/validate.d.ts.map +1 -1
- package/dist/schema-form/validate.js +28 -0
- package/dist/schema-form/validate.js.map +1 -1
- package/dist/search-match.d.ts +29 -0
- package/dist/search-match.d.ts.map +1 -0
- package/dist/search-match.js +38 -0
- package/dist/search-match.js.map +1 -0
- package/dist/tool-organization.d.ts +15 -0
- package/dist/tool-organization.d.ts.map +1 -0
- package/dist/tool-organization.js +6 -0
- package/dist/tool-organization.js.map +1 -0
- package/package.json +3 -2
- package/src/components/agent-picker.tsx +2 -1
- package/src/components/channel-picker.tsx +2 -1
- 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/components.css +53 -0
- package/src/components/explorer-body.tsx +29 -5
- package/src/components/explorer-view.tsx +48 -17
- package/src/components/extension-combo-builder.tsx +10 -10
- package/src/components/extension-config-editor.tsx +3 -3
- package/src/components/field.tsx +18 -2
- package/src/components/folder-actions.tsx +341 -0
- package/src/components/folder-filing.tsx +109 -0
- package/src/components/folder-nav.tsx +26 -10
- package/src/components/folder-occupancy.ts +83 -0
- package/src/components/named-list-picker.tsx +11 -7
- package/src/components/primitives.tsx +2 -1
- package/src/components/searchable-select-model.ts +105 -0
- package/src/components/searchable-select.tsx +432 -0
- package/src/components/selected-tool-badges.tsx +41 -0
- package/src/components/subject-section.tsx +3 -2
- package/src/components/table.tsx +12 -2
- package/src/components/tag-filter-field.tsx +37 -0
- package/src/components/tool-meta-access.tsx +101 -0
- package/src/components/tool-name-entry.tsx +77 -0
- package/src/components/tool-picker.tsx +87 -52
- package/src/components/tool-select.tsx +136 -0
- package/src/extension-combos.ts +15 -1
- package/src/hooks/useSystemKinds.tsx +77 -17
- package/src/index.ts +98 -94
- package/src/plugin/version.ts +1 -1
- package/src/schema-editor/SchemaEditor.tsx +9 -3
- package/src/schema-editor/index.ts +2 -2
- package/src/schema-form/array-field.tsx +10 -2
- package/src/schema-form/classify.ts +41 -15
- package/src/schema-form/collapsed-object-field.tsx +56 -0
- package/src/schema-form/context.ts +33 -1
- package/src/schema-form/default-value.ts +89 -15
- package/src/schema-form/expression-field.tsx +162 -0
- package/src/schema-form/field-model.ts +27 -4
- package/src/schema-form/field-node.tsx +41 -2
- package/src/schema-form/index.ts +3 -2
- package/src/schema-form/object-fields.tsx +11 -4
- package/src/schema-form/record-field.tsx +10 -2
- package/src/schema-form/seeding-action.ts +44 -0
- package/src/schema-form/string-annotations.ts +40 -14
- package/src/schema-form/string-field.tsx +2 -147
- package/src/schema-form/templated-field.tsx +124 -0
- package/src/schema-form/union-field.tsx +11 -2
- package/src/schema-form/union.ts +12 -5
- package/src/schema-form/validate.ts +28 -0
- package/src/search-match.ts +41 -0
- package/src/tool-organization.ts +34 -0
- 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 +0 -89
- package/dist/components/tool-picker-parts.js.map +0 -1
- package/src/components/tool-picker-parts.tsx +0 -195
package/README.md
CHANGED
|
@@ -51,8 +51,10 @@ resolves it through the served import map) imports the three stylesheets itself.
|
|
|
51
51
|
|
|
52
52
|
## Expression fields
|
|
53
53
|
|
|
54
|
-
A string field carrying the `x-tai42-expression` annotation
|
|
55
|
-
|
|
54
|
+
A string field carrying the `x-tai42-expression` annotation, or a templated-text
|
|
55
|
+
field (a property whose type carries `x-tai42-templated-text`) carrying it at the
|
|
56
|
+
property site, authors through a visual expression editor — but **only when the
|
|
57
|
+
host injects one**. The SDK owns
|
|
56
58
|
the injection point and nothing else:
|
|
57
59
|
|
|
58
60
|
- `ExpressionFieldContext` — the ambient door for a whole tree.
|
|
@@ -61,8 +63,46 @@ the injection point and nothing else:
|
|
|
61
63
|
the door contract, which MIRRORS jq-studio's field props without importing
|
|
62
64
|
them.
|
|
63
65
|
|
|
64
|
-
With no door, an annotated field renders the plain string input
|
|
65
|
-
module graph reaches no jq at all — no
|
|
66
|
+
With no door, an annotated field renders the plain string input (a templated-text
|
|
67
|
+
field, its plain inline text), and the SDK's module graph reaches no jq at all — no
|
|
68
|
+
editor, no Web Worker, no wasm.
|
|
69
|
+
|
|
70
|
+
## Templated-text fields
|
|
71
|
+
|
|
72
|
+
A property typed as the platform's templated text (its schema carries
|
|
73
|
+
`x-tai42-templated-text`) renders as the shared `TemplatedTextField`: inline content
|
|
74
|
+
or a stored template id, plus the render parameters. The stored-template choices
|
|
75
|
+
come from the host, which mounts a catalog hook once above its tree:
|
|
76
|
+
|
|
77
|
+
- `TemplatedTextCatalogContext` — the ambient source; its value is a stable hook
|
|
78
|
+
(`UseTemplatedTextCatalog`) returning a `TemplatedTextCatalog`, called only when a
|
|
79
|
+
templated-text field renders.
|
|
80
|
+
|
|
81
|
+
```tsx
|
|
82
|
+
import { useQuery } from '@tanstack/react-query';
|
|
83
|
+
import { TemplatedTextCatalogContext, templatedTextCatalog, useApi } from '@tai42/studio-sdk';
|
|
84
|
+
|
|
85
|
+
function useCatalog() {
|
|
86
|
+
const api = useApi();
|
|
87
|
+
const storage = useQuery({
|
|
88
|
+
queryKey: ['storage', 'info'],
|
|
89
|
+
queryFn: ({ signal }) => api.getStorageInfo(signal),
|
|
90
|
+
});
|
|
91
|
+
const templates = useQuery({
|
|
92
|
+
queryKey: ['templates', 'names'],
|
|
93
|
+
queryFn: ({ signal }) => api.listTemplates(signal),
|
|
94
|
+
enabled: storage.data?.present === true,
|
|
95
|
+
});
|
|
96
|
+
return templatedTextCatalog(storage, templates);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
<TemplatedTextCatalogContext.Provider value={useCatalog}>
|
|
100
|
+
{children}
|
|
101
|
+
</TemplatedTextCatalogContext.Provider>;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
With no catalog, the stored source offers no templates and inline content is
|
|
105
|
+
authored as usual.
|
|
66
106
|
|
|
67
107
|
The door itself is `JqField` from
|
|
68
108
|
[`@tai42/jq-studio`](https://www.npmjs.com/package/@tai42/jq-studio), imported
|
|
@@ -366,9 +406,9 @@ under its header (Settings, Dashboard, Marketplace, the Conversations landing)
|
|
|
366
406
|
takes a pattern per tab.
|
|
367
407
|
|
|
368
408
|
- **Browse and inspect.** A split list and detail (`.tai-split`), with the
|
|
369
|
-
selection held in the URL search. Tools, whose list
|
|
370
|
-
|
|
371
|
-
transcript.
|
|
409
|
+
selection held in the URL search. Tools and Presets, whose list panes are
|
|
410
|
+
`ExplorerView`s; States; Storage; a Conversations route, its threads beside the
|
|
411
|
+
open transcript.
|
|
372
412
|
- **Catalog.** A directory of cards with search and filters. Connectors and the
|
|
373
413
|
Tools card view, through `ExplorerView`; the Marketplace Browse tab, a card grid
|
|
374
414
|
with facet filters and Load more.
|
|
@@ -384,7 +424,8 @@ takes a pattern per tab.
|
|
|
384
424
|
- **Replaced detail.** A search param swaps the page or the tab for one item. The
|
|
385
425
|
Marketplace plugin page, a trace in the Dashboard Tracing tab, a state template
|
|
386
426
|
or a state's records.
|
|
387
|
-
- **Run surface.** A list, then the run view in its place. Agents
|
|
427
|
+
- **Run surface.** A list, then the run view in its place. Agents, whose list is
|
|
428
|
+
an `ExplorerView`.
|
|
388
429
|
- **Inbox.** Newest-first cards, the rest paged in by a button at the foot: Load
|
|
389
430
|
more where the server pages (Interactions), Show more where the whole feed is
|
|
390
431
|
already loaded (Notifications).
|
|
@@ -439,8 +480,17 @@ label. It reads a structural query interface
|
|
|
439
480
|
disabled with the placeholder "Loading <plural noun>…"; error is an `ErrorState`
|
|
440
481
|
with retry inside the field (`group` set); empty is a muted `role="status"` line
|
|
441
482
|
naming where to create one; no grant to read the list is the no-grant line in
|
|
442
|
-
place of the control.
|
|
443
|
-
|
|
483
|
+
place of the control. `ToolPicker` differs on a 403: the server checks a named
|
|
484
|
+
tool on save, so it draws a text input that takes the tool's exact name, with a
|
|
485
|
+
line under it saying the session cannot list tools (a host that draws the read's
|
|
486
|
+
failure elsewhere through `errorNote` keeps that line instead). Values render as text, never
|
|
487
|
+
HTML. A picker is composed outside `SchemaForm`. A picker whose list can grow long
|
|
488
|
+
(`ToolPicker`, `AgentPicker` and `ChannelPicker` are the cases the SDK ships) is built on
|
|
489
|
+
`SearchableSelect`, which opens with a search box over the option labels. Every
|
|
490
|
+
list searches by one rule, `matchesSearch(query, ...texts)`: the trimmed query,
|
|
491
|
+
ignoring case, inside any one of the texts a row is searched by. A filterable
|
|
492
|
+
checklist calls it over the label each row shows, and an `ExplorerView` search
|
|
493
|
+
names its texts per item (`texts`) and the view applies the rule. Two cases differ:
|
|
444
494
|
|
|
445
495
|
- A picker that is one control of a larger group on its host (a `fieldset` whose
|
|
446
496
|
`legend` names the group) takes no label of its own: its control carries an
|
|
@@ -452,6 +502,44 @@ outside `SchemaForm`. Two cases differ:
|
|
|
452
502
|
saying the list could not be read and where that error is shown, with no retry.
|
|
453
503
|
A surface shows one failure with retry once.
|
|
454
504
|
|
|
505
|
+
**Folders.** There is one folder tree for every tool, read with `listToolMeta`
|
|
506
|
+
and turned into the tree's folders by `toFolders`. A screen that lists only part
|
|
507
|
+
of the tools (presets, agents) draws the tree through `foldersForView`: a folder
|
|
508
|
+
shows when its subtree holds one of the screen's items or holds no tool at all,
|
|
509
|
+
and the folders above a shown folder show too, so a folder holding only other
|
|
510
|
+
tools stays on the screens that list those. Destinations (a move, a folder field) always offer
|
|
511
|
+
the FULL tree. `FolderActionsMenu` (Rename, Move, Delete) goes on each drawn
|
|
512
|
+
folder, `MoveToFolderDialog` files a single tool where the row has no edit dialog
|
|
513
|
+
of its own, and `useCreateFolder` backs a `FolderPicker`'s inline create. Each
|
|
514
|
+
takes the screen's `onFoldersChanged` refresh. A failed create or write is shown
|
|
515
|
+
in its dialog or picker.
|
|
516
|
+
|
|
517
|
+
Who may make each overlay write is `useToolMetaWriteAccess`: one flag per write
|
|
518
|
+
(`editTool` for `PATCH /api/tool-meta/tools/{tool_name}`, and `createFolder`,
|
|
519
|
+
`renameFolder`, `moveFolder`, `deleteFolder` for the folder routes), each true
|
|
520
|
+
only when the caller's projection reaches that route and method and the
|
|
521
|
+
`tool_meta` store is not known off. `FolderActionsMenu` shows only the actions the
|
|
522
|
+
caller has, and nothing when it has none, so a screen mounts it on every folder
|
|
523
|
+
once its overlay read has loaded. `useCreateFolder` returns `undefined` when the
|
|
524
|
+
caller may not create a folder; a `FolderPicker` without `onCreateFolder` offers
|
|
525
|
+
no create. The store is known off from the kind-status table or from a write's
|
|
526
|
+
501 `tool-meta-not-configured`: a screen hands every failed overlay write to
|
|
527
|
+
`useReportToolMetaRefusal`, which records the refusal app-wide (until the caller
|
|
528
|
+
signs out or in, or the `ApiProvider` client changes) so every screen withdraws
|
|
529
|
+
its overlay writes at once.
|
|
530
|
+
`ToolMetaWriteError` shows a failed write the way the folder dialogs do: the
|
|
531
|
+
muted off note with the server's message for that refusal, an `ErrorState` for
|
|
532
|
+
anything else.
|
|
533
|
+
|
|
534
|
+
**Explorer states and selection.** `ExplorerView` shows its `empty` state
|
|
535
|
+
whenever it has no items at all, whatever folders exist; `emptyFolder` is for an
|
|
536
|
+
open folder that holds nothing while items exist elsewhere. A hint in either
|
|
537
|
+
names an action only for a caller who has it. When `currentFolderId` names a
|
|
538
|
+
folder that is not drawn (deleted, or no longer holding the screen's items), the
|
|
539
|
+
explorer shows the root and calls `onNavigate(null)`. `selectedItemKey` gives the
|
|
540
|
+
selected item's row or card the shared selected look, the same on every
|
|
541
|
+
explorer screen; a table outside the explorer gets it from `TR selected`.
|
|
542
|
+
|
|
455
543
|
**Stepper.** An ordered list in a labelled `nav`, with `aria-current="step"` on
|
|
456
544
|
the current step and each step's status spoken in visually hidden text. Done,
|
|
457
545
|
current, upcoming and error are told apart by marker shape and icon as well as
|
|
@@ -15,7 +15,7 @@ export interface AgentPickerProps {
|
|
|
15
15
|
readonly query: AgentListQuery;
|
|
16
16
|
readonly value: string;
|
|
17
17
|
readonly onValueChange: (value: string) => void;
|
|
18
|
-
/** The host form's field error, shown under the control while
|
|
18
|
+
/** The host form's field error, shown under the control while the select renders. */
|
|
19
19
|
readonly error?: string | undefined;
|
|
20
20
|
}
|
|
21
21
|
export declare function AgentPicker({ query, value, onValueChange, error }: AgentPickerProps): ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-picker.d.ts","sourceRoot":"","sources":["../../src/components/agent-picker.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,KAAK,aAAa,EAAuC,MAAM,qBAAqB,CAAC;AAE9F,iGAAiG;AACjG,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;
|
|
1
|
+
{"version":3,"file":"agent-picker.d.ts","sourceRoot":"","sources":["../../src/components/agent-picker.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,KAAK,aAAa,EAAuC,MAAM,qBAAqB,CAAC;AAE9F,iGAAiG;AACjG,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAkBD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,gBAAgB,GAAG,SAAS,CAY/F"}
|
|
@@ -9,6 +9,7 @@ const COPY = {
|
|
|
9
9
|
emptyNote: 'No agents are registered on this deployment.',
|
|
10
10
|
emptyAction: (_jsx(AppLink, { to: "agents", className: "tai-link", children: "Open the Agents screen" })),
|
|
11
11
|
unlistedLabel: 'not registered',
|
|
12
|
+
searchLabel: 'Search agents',
|
|
12
13
|
};
|
|
13
14
|
export function AgentPicker({ query, value, onValueChange, error }) {
|
|
14
15
|
const names = (query.data?.items ?? []).map((item) => item.name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-picker.js","sourceRoot":"","sources":["../../src/components/agent-picker.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAA0C,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAe9F,MAAM,IAAI,GAAkB;IAC1B,KAAK,EAAE,OAAO;IACd,kBAAkB,EAAE,iBAAiB;IACrC,WAAW,EAAE,iBAAiB;IAC9B,aAAa,EACX,sHAAsH;IACxH,SAAS,EAAE,8CAA8C;IACzD,WAAW,EAAE,CACX,KAAC,OAAO,IAAC,EAAE,EAAC,QAAQ,EAAC,SAAS,EAAC,UAAU,uCAE/B,CACX;IACD,aAAa,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"agent-picker.js","sourceRoot":"","sources":["../../src/components/agent-picker.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAA0C,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAe9F,MAAM,IAAI,GAAkB;IAC1B,KAAK,EAAE,OAAO;IACd,kBAAkB,EAAE,iBAAiB;IACrC,WAAW,EAAE,iBAAiB;IAC9B,aAAa,EACX,sHAAsH;IACxH,SAAS,EAAE,8CAA8C;IACzD,WAAW,EAAE,CACX,KAAC,OAAO,IAAC,EAAE,EAAC,QAAQ,EAAC,SAAS,EAAC,UAAU,uCAE/B,CACX;IACD,aAAa,EAAE,gBAAgB;IAC/B,WAAW,EAAE,eAAe;CAC7B,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAoB;IAClF,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,OAAO,CACL,KAAC,eAAe,IACd,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,GACV,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -15,7 +15,7 @@ export interface ChannelPickerProps {
|
|
|
15
15
|
readonly query: ChannelListQuery;
|
|
16
16
|
readonly value: string;
|
|
17
17
|
readonly onValueChange: (value: string) => void;
|
|
18
|
-
/** The host form's field error, shown under the control while
|
|
18
|
+
/** The host form's field error, shown under the control while the select renders. */
|
|
19
19
|
readonly error?: string | undefined;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-picker.d.ts","sourceRoot":"","sources":["../../src/components/channel-picker.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,KAAK,aAAa,EAAuC,MAAM,qBAAqB,CAAC;AAE9F,mGAAmG;AACnG,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAG3F;
|
|
1
|
+
{"version":3,"file":"channel-picker.d.ts","sourceRoot":"","sources":["../../src/components/channel-picker.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,KAAK,aAAa,EAAuC,MAAM,qBAAqB,CAAC;AAE9F,mGAAmG;AACnG,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAG3F;AAmBD,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,aAAa,EACb,KAAK,GACN,EAAE,kBAAkB,GAAG,SAAS,CAYhC"}
|
|
@@ -18,6 +18,7 @@ const COPY = {
|
|
|
18
18
|
emptyNote: 'No channels are installed on this deployment.',
|
|
19
19
|
emptyAction: (_jsx(AppLink, { to: "marketplace", search: { kind: 'channel' }, className: "tai-link", children: "Browse channel plugins" })),
|
|
20
20
|
unlistedLabel: 'not installed',
|
|
21
|
+
searchLabel: 'Search channels',
|
|
21
22
|
};
|
|
22
23
|
export function ChannelPicker({ query, value, onValueChange, error, }) {
|
|
23
24
|
const names = (query.data?.channels ?? []).map((channel) => channel.name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-picker.js","sourceRoot":"","sources":["../../src/components/channel-picker.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAA0C,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAe9F;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAc,EAAE,IAAY;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;AAC/D,CAAC;AAED,MAAM,IAAI,GAAkB;IAC1B,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,wEAAwE;IACrF,kBAAkB,EAAE,mBAAmB;IACvC,WAAW,EAAE,kBAAkB;IAC/B,aAAa,EACX,0HAA0H;IAC5H,SAAS,EAAE,+CAA+C;IAC1D,WAAW,EAAE,CACX,KAAC,OAAO,IAAC,EAAE,EAAC,aAAa,EAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,EAAC,UAAU,uCAEjE,CACX;IACD,aAAa,EAAE,eAAe;CAC/B,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,aAAa,EACb,KAAK,GACc;IACnB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,CACL,KAAC,eAAe,IACd,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,GACV,CACH,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"channel-picker.js","sourceRoot":"","sources":["../../src/components/channel-picker.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAA0C,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAe9F;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAc,EAAE,IAAY;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;AAC/D,CAAC;AAED,MAAM,IAAI,GAAkB;IAC1B,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,wEAAwE;IACrF,kBAAkB,EAAE,mBAAmB;IACvC,WAAW,EAAE,kBAAkB;IAC/B,aAAa,EACX,0HAA0H;IAC5H,SAAS,EAAE,+CAA+C;IAC1D,WAAW,EAAE,CACX,KAAC,OAAO,IAAC,EAAE,EAAC,aAAa,EAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,EAAC,UAAU,uCAEjE,CACX;IACD,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,iBAAiB;CAC/B,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,aAAa,EACb,KAAK,GACc;IACnB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,CACL,KAAC,eAAe,IACd,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,GACV,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -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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"}
|
|
@@ -677,6 +677,39 @@
|
|
|
677
677
|
cursor: not-allowed;
|
|
678
678
|
}
|
|
679
679
|
|
|
680
|
+
/* The searchable select's popup is the select popup with a search box on top.
|
|
681
|
+
It is a column whose LIST alone scrolls, so the search box stays in view
|
|
682
|
+
however far the reader scrolls; the cap follows the space the Radix popover
|
|
683
|
+
publishes, as the select's follows its own. It is at least as wide as its
|
|
684
|
+
trigger, so the options line up under the field they fill. */
|
|
685
|
+
.tai-search-select-content {
|
|
686
|
+
display: flex;
|
|
687
|
+
flex-direction: column;
|
|
688
|
+
min-width: var(--radix-popover-trigger-width);
|
|
689
|
+
/* The fallback is the live viewport (`dvh`) after its `vh` line for browsers
|
|
690
|
+
below the `dvh` floor; Radix supplies the measured value either way. */
|
|
691
|
+
max-height: min(22rem, var(--radix-popover-content-available-height, 60vh));
|
|
692
|
+
max-height: min(22rem, var(--radix-popover-content-available-height, 60dvh));
|
|
693
|
+
overflow: hidden;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/* The search box's side and top inset is the option viewport's, which leaves the
|
|
697
|
+
shared focus ring the room it needs inside the popup's clipped box. */
|
|
698
|
+
.tai-search-select-search {
|
|
699
|
+
padding: var(--tai-space-2) var(--tai-space-2) 0;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
.tai-search-select-list {
|
|
703
|
+
flex: 1 1 auto;
|
|
704
|
+
min-height: 0;
|
|
705
|
+
overflow-y: auto;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
.tai-search-select-empty {
|
|
709
|
+
margin: 0;
|
|
710
|
+
padding: var(--tai-space-2) var(--tai-space-3);
|
|
711
|
+
}
|
|
712
|
+
|
|
680
713
|
/* -- Checkbox + radio ------------------------------------------------------ */
|
|
681
714
|
.tai-checkbox,
|
|
682
715
|
.tai-radio {
|
|
@@ -1330,6 +1363,19 @@
|
|
|
1330
1363
|
background: var(--tai-color-accent-tint);
|
|
1331
1364
|
}
|
|
1332
1365
|
|
|
1366
|
+
/* The selected row (`TR selected`) takes the look the nav gives its current item:
|
|
1367
|
+
the accent tint with an accent bar on the leading edge. The tint sits on the
|
|
1368
|
+
cells, over the row's own ground, so a hovered selected row shows the hover
|
|
1369
|
+
tint under it — the doubled tint the current nav item shows on hover — and a
|
|
1370
|
+
diff row keeps its meaning beneath. */
|
|
1371
|
+
.tai-table tbody tr[data-selected='true'] > td {
|
|
1372
|
+
background-image: linear-gradient(var(--tai-color-accent-tint), var(--tai-color-accent-tint));
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
.tai-table tbody tr[data-selected='true'] > td:first-child {
|
|
1376
|
+
box-shadow: inset 3px 0 0 0 var(--tai-color-accent);
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1333
1379
|
.tai-table td[data-numeric='true'],
|
|
1334
1380
|
.tai-table th[data-numeric='true'] {
|
|
1335
1381
|
text-align: right;
|
|
@@ -2237,6 +2283,13 @@
|
|
|
2237
2283
|
flex-direction: column;
|
|
2238
2284
|
}
|
|
2239
2285
|
|
|
2286
|
+
/* The selected card: the same accent tint the selected table row takes, edged by
|
|
2287
|
+
the accent border. */
|
|
2288
|
+
.tai-grid-cards > [role='listitem'][data-selected='true'] > .tai-card {
|
|
2289
|
+
border-color: var(--tai-color-accent);
|
|
2290
|
+
background-image: linear-gradient(var(--tai-color-accent-tint), var(--tai-color-accent-tint));
|
|
2291
|
+
}
|
|
2292
|
+
|
|
2240
2293
|
/* Card description clamp so grid rows stay uniform: two lines, then ellipsis. */
|
|
2241
2294
|
.tai-clamp-2 {
|
|
2242
2295
|
display: -webkit-box;
|
|
@@ -37,6 +37,7 @@ export interface ExplorerBodyProps<T> {
|
|
|
37
37
|
readonly columns: readonly ExplorerColumn[];
|
|
38
38
|
readonly pageEntries: readonly ExplorerEntry<T>[];
|
|
39
39
|
readonly getItemKey: (item: T) => string;
|
|
40
|
+
readonly selectedItemKey: string | undefined;
|
|
40
41
|
readonly renderRow: (item: T) => ReactNode;
|
|
41
42
|
readonly renderCard: (item: T) => ReactNode;
|
|
42
43
|
readonly openProps: (item: T) => OpenTargetProps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorer-body.d.ts","sourceRoot":"","sources":["../../src/components/explorer-body.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAKrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,mFAAmF;AACnF,MAAM,MAAM,aAAa,CAAC,CAAC,IACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC;AAqBhD,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AA8DD,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;sEACkE;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,eAAe,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAC1E,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;CACpC;
|
|
1
|
+
{"version":3,"file":"explorer-body.d.ts","sourceRoot":"","sources":["../../src/components/explorer-body.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAKrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,mFAAmF;AACnF,MAAM,MAAM,aAAa,CAAC,CAAC,IACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC;AAqBhD,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AA8DD,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;sEACkE;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,eAAe,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAC1E,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;CACpC;AA4ED,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,SAAS,CAkDtE"}
|
|
@@ -30,19 +30,21 @@ function ExplorerPager({ label, pageStart, pageSize, total, effectivePage, pageC
|
|
|
30
30
|
}
|
|
31
31
|
/** A card entry (folder card or item card) for the grid view. */
|
|
32
32
|
function CardEntry(props) {
|
|
33
|
-
const { entry, onNavigate, renderFolderActions, getItemKey, renderCard, openProps } = props;
|
|
33
|
+
const { entry, onNavigate, renderFolderActions, getItemKey, selectedItemKey, renderCard, openProps, } = props;
|
|
34
34
|
if (entry.kind === 'folder') {
|
|
35
35
|
return (_jsx("div", { role: "listitem", children: _jsx(Card, { interactive: true, children: _jsx(FolderEntry, { folder: entry.folder, onNavigate: onNavigate, renderFolderActions: renderFolderActions }) }) }, `folder:${entry.folder.id}`));
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
const key = getItemKey(entry.item);
|
|
38
|
+
return (_jsx("div", { role: "listitem", "data-selected": key === selectedItemKey ? 'true' : undefined, ...openProps(entry.item), children: renderCard(entry.item) }, `item:${key}`));
|
|
38
39
|
}
|
|
39
40
|
/** A table row (folder row spanning all columns, or item row) for the list view. */
|
|
40
41
|
function RowEntry(props) {
|
|
41
|
-
const { entry, columns, onNavigate, renderFolderActions, getItemKey, renderRow, openProps } = props;
|
|
42
|
+
const { entry, columns, onNavigate, renderFolderActions, getItemKey, selectedItemKey, renderRow, openProps, } = props;
|
|
42
43
|
if (entry.kind === 'folder') {
|
|
43
44
|
return (_jsx(TR, { children: _jsx(TD, { colSpan: columns.length, children: _jsx(FolderEntry, { folder: entry.folder, onNavigate: onNavigate, renderFolderActions: renderFolderActions }) }) }, `folder:${entry.folder.id}`));
|
|
44
45
|
}
|
|
45
|
-
|
|
46
|
+
const key = getItemKey(entry.item);
|
|
47
|
+
return (_jsx(TR, { selected: key === selectedItemKey, ...openProps(entry.item), children: renderRow(entry.item) }, `item:${key}`));
|
|
46
48
|
}
|
|
47
49
|
export function ExplorerBody(props) {
|
|
48
50
|
const { hasEntries, inFolderCount, emptyStates, viewMode, label, columns, pageEntries, pager } = props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorer-body.js","sourceRoot":"","sources":["../../src/components/explorer-body.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAe,SAAS,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAwB,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAQ1D;sFACsF;AACtF,SAAS,WAAW,CAAC,EACnB,MAAM,EACN,UAAU,EACV,mBAAmB,GAKpB;IACC,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAI,EAChD,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IACrD,CACP,CAAC;AACJ,CAAC;AAaD,SAAS,aAAa,CAAC,EACrB,KAAK,EACL,SAAS,EACT,QAAQ,EACR,KAAK,EACL,aAAa,EACb,SAAS,EACT,YAAY,EACZ,gBAAgB,GACG;IACnB,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,gBAAa,GAAG,KAAK,aAAa,aAKxE,eAAM,SAAS,EAAC,WAAW,YAAE,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,GAAQ,EAC5I,eAAK,SAAS,EAAC,SAAS,aACtB,KAAC,MAAM,kBACM,gBAAgB,EAC3B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EACvB,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;4BACvB,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBAClC,CAAC,EACD,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;4BACjC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;4BACnB,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW;yBAClC,CAAC,CAAC,GACH,EAIF,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,gBACJ,eAAe,mBACX,aAAa,IAAI,CAAC,EACjC,OAAO,EAAE,GAAG,EAAE;4BACZ,IAAI,aAAa,IAAI,CAAC;gCAAE,OAAO;4BAC/B,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;wBAClC,CAAC,qBAGM,EACT,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,gBACJ,WAAW,mBACP,aAAa,IAAI,SAAS,EACzC,OAAO,EAAE,GAAG,EAAE;4BACZ,IAAI,aAAa,IAAI,SAAS;gCAAE,OAAO;4BACvC,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;wBAClC,CAAC,qBAGM,EACT,eAAM,SAAS,EAAC,WAAW,YAAE,QAAQ,MAAM,CAAC,aAAa,CAAC,OAAO,MAAM,CAAC,SAAS,CAAC,EAAE,GAAQ,IACxF,IACF,CACP,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"explorer-body.js","sourceRoot":"","sources":["../../src/components/explorer-body.tsx"],"names":[],"mappings":"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"}
|
|
@@ -36,12 +36,13 @@ export interface ExplorerTags<T> {
|
|
|
36
36
|
* shows every chip. Selected chips always show. */
|
|
37
37
|
readonly maxVisibleTags?: number;
|
|
38
38
|
}
|
|
39
|
-
/** Controlled free-text search.
|
|
40
|
-
*
|
|
39
|
+
/** Controlled free-text search. The caller names the texts an item is searched by;
|
|
40
|
+
* the explorer matches them with the SDK's one search rule (`matchesSearch`). */
|
|
41
41
|
export interface ExplorerSearch<T> {
|
|
42
42
|
readonly value: string;
|
|
43
43
|
readonly onChange: (value: string) => void;
|
|
44
|
-
|
|
44
|
+
/** The texts the reader sees for `item` (its name, display name, description…). */
|
|
45
|
+
readonly texts: (item: T) => readonly string[];
|
|
45
46
|
/** The input's accessible name. */
|
|
46
47
|
readonly label: string;
|
|
47
48
|
readonly placeholder?: string;
|
|
@@ -53,10 +54,11 @@ export interface ExplorerEmptyState {
|
|
|
53
54
|
}
|
|
54
55
|
/** The folder-aware empty-state ladder — every label caller-supplied. */
|
|
55
56
|
export interface ExplorerEmptyStates {
|
|
56
|
-
/** No items
|
|
57
|
+
/** No item exists at all. Folders are places for items, so with no item there is
|
|
58
|
+
* nothing to browse: this state shows whatever folders exist. */
|
|
57
59
|
readonly empty: ExplorerEmptyState;
|
|
58
|
-
/** The current folder holds nothing — no items, no subfolders —
|
|
59
|
-
*
|
|
60
|
+
/** The current folder holds nothing — no items, no subfolders — while items
|
|
61
|
+
* exist elsewhere. */
|
|
60
62
|
readonly emptyFolder: ExplorerEmptyState;
|
|
61
63
|
/** The current folder has items but the active tag/search filter excludes
|
|
62
64
|
* every one, and it has no subfolders to show. */
|
|
@@ -68,6 +70,8 @@ export interface ExplorerViewProps<T> {
|
|
|
68
70
|
/** The folder an item is filed in (`null` = the root directory). */
|
|
69
71
|
readonly getFolderId: (item: T) => string | null;
|
|
70
72
|
readonly folders: readonly Folder[];
|
|
73
|
+
/** The open folder. One that is not among `folders` (deleted, or no longer drawn
|
|
74
|
+
* on this screen) shows as the root, and the explorer asks `onNavigate(null)`. */
|
|
71
75
|
readonly currentFolderId: string | null;
|
|
72
76
|
readonly onNavigate: (folderId: string | null) => void;
|
|
73
77
|
readonly rootLabel: string;
|
|
@@ -85,11 +89,16 @@ export interface ExplorerViewProps<T> {
|
|
|
85
89
|
* the cell (the name link), so the row is never a focusable button; a click
|
|
86
90
|
* originating on a nested control is left to that control. */
|
|
87
91
|
readonly onOpenItem?: (item: T) => void;
|
|
92
|
+
/** The key (as `getItemKey` gives it) of the item the screen has selected. Its
|
|
93
|
+
* row/card carries `data-selected="true"`, which the stylesheet draws as the one
|
|
94
|
+
* selected look every explorer shares. The screen still marks the item's name
|
|
95
|
+
* link `aria-current`, which is what assistive tech reads. */
|
|
96
|
+
readonly selectedItemKey?: string;
|
|
88
97
|
readonly tags?: ExplorerTags<T>;
|
|
89
98
|
readonly search?: ExplorerSearch<T>;
|
|
90
99
|
/** Per-folder actions rendered on the folder's row/card (e.g. a kebab). */
|
|
91
100
|
readonly renderFolderActions?: (folder: Folder) => ReactNode;
|
|
92
101
|
readonly emptyStates: ExplorerEmptyStates;
|
|
93
102
|
}
|
|
94
|
-
export declare function ExplorerView<T>({ items, getItemKey, getFolderId, folders, currentFolderId, onNavigate, rootLabel, viewSurface, label, columns, renderRow, renderCard, onOpenItem, tags, search, renderFolderActions, emptyStates, }: ExplorerViewProps<T>): ReactNode;
|
|
103
|
+
export declare function ExplorerView<T>({ items, getItemKey, getFolderId, folders, currentFolderId, onNavigate, rootLabel, viewSurface, label, columns, renderRow, renderCard, onOpenItem, selectedItemKey, tags, search, renderFolderActions, emptyStates, }: ExplorerViewProps<T>): ReactNode;
|
|
95
104
|
//# sourceMappingURL=explorer-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorer-view.d.ts","sourceRoot":"","sources":["../../src/components/explorer-view.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"explorer-view.d.ts","sourceRoot":"","sources":["../../src/components/explorer-view.tsx"],"names":[],"mappings":"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"}
|