@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.
Files changed (252) hide show
  1. package/README.md +98 -10
  2. package/dist/components/agent-picker.d.ts +1 -1
  3. package/dist/components/agent-picker.d.ts.map +1 -1
  4. package/dist/components/agent-picker.js +1 -0
  5. package/dist/components/agent-picker.js.map +1 -1
  6. package/dist/components/channel-picker.d.ts +1 -1
  7. package/dist/components/channel-picker.d.ts.map +1 -1
  8. package/dist/components/channel-picker.js +1 -0
  9. package/dist/components/channel-picker.js.map +1 -1
  10. package/dist/components/combo-draft-editor.d.ts +31 -0
  11. package/dist/components/combo-draft-editor.d.ts.map +1 -0
  12. package/dist/components/combo-draft-editor.js +16 -0
  13. package/dist/components/combo-draft-editor.js.map +1 -0
  14. package/dist/components/committed-combo-list.d.ts +17 -0
  15. package/dist/components/committed-combo-list.d.ts.map +1 -0
  16. package/dist/components/{extension-combo-parts.js → committed-combo-list.js} +2 -22
  17. package/dist/components/committed-combo-list.js.map +1 -0
  18. package/dist/components/components.css +53 -0
  19. package/dist/components/explorer-body.d.ts +1 -0
  20. package/dist/components/explorer-body.d.ts.map +1 -1
  21. package/dist/components/explorer-body.js +6 -4
  22. package/dist/components/explorer-body.js.map +1 -1
  23. package/dist/components/explorer-view.d.ts +16 -7
  24. package/dist/components/explorer-view.d.ts.map +1 -1
  25. package/dist/components/explorer-view.js +27 -13
  26. package/dist/components/explorer-view.js.map +1 -1
  27. package/dist/components/extension-combo-builder.d.ts +4 -4
  28. package/dist/components/extension-combo-builder.js +3 -2
  29. package/dist/components/extension-combo-builder.js.map +1 -1
  30. package/dist/components/extension-config-editor.js.map +1 -1
  31. package/dist/components/field.d.ts +6 -0
  32. package/dist/components/field.d.ts.map +1 -1
  33. package/dist/components/field.js +15 -2
  34. package/dist/components/field.js.map +1 -1
  35. package/dist/components/folder-actions.d.ts +51 -0
  36. package/dist/components/folder-actions.d.ts.map +1 -0
  37. package/dist/components/folder-actions.js +173 -0
  38. package/dist/components/folder-actions.js.map +1 -0
  39. package/dist/components/folder-filing.d.ts +32 -0
  40. package/dist/components/folder-filing.d.ts.map +1 -0
  41. package/dist/components/folder-filing.js +51 -0
  42. package/dist/components/folder-filing.js.map +1 -0
  43. package/dist/components/folder-nav.d.ts +9 -4
  44. package/dist/components/folder-nav.d.ts.map +1 -1
  45. package/dist/components/folder-nav.js +18 -22
  46. package/dist/components/folder-nav.js.map +1 -1
  47. package/dist/components/folder-occupancy.d.ts +27 -0
  48. package/dist/components/folder-occupancy.d.ts.map +1 -0
  49. package/dist/components/folder-occupancy.js +54 -0
  50. package/dist/components/folder-occupancy.js.map +1 -0
  51. package/dist/components/named-list-picker.d.ts +5 -3
  52. package/dist/components/named-list-picker.d.ts.map +1 -1
  53. package/dist/components/named-list-picker.js +7 -7
  54. package/dist/components/named-list-picker.js.map +1 -1
  55. package/dist/components/primitives.d.ts +2 -1
  56. package/dist/components/primitives.d.ts.map +1 -1
  57. package/dist/components/primitives.js +2 -1
  58. package/dist/components/primitives.js.map +1 -1
  59. package/dist/components/searchable-select-model.d.ts +40 -0
  60. package/dist/components/searchable-select-model.d.ts.map +1 -0
  61. package/dist/components/searchable-select-model.js +69 -0
  62. package/dist/components/searchable-select-model.js.map +1 -0
  63. package/dist/components/searchable-select.d.ts +38 -0
  64. package/dist/components/searchable-select.d.ts.map +1 -0
  65. package/dist/components/searchable-select.js +200 -0
  66. package/dist/components/searchable-select.js.map +1 -0
  67. package/dist/components/selected-tool-badges.d.ts +13 -0
  68. package/dist/components/selected-tool-badges.d.ts.map +1 -0
  69. package/dist/components/selected-tool-badges.js +14 -0
  70. package/dist/components/selected-tool-badges.js.map +1 -0
  71. package/dist/components/subject-section.d.ts.map +1 -1
  72. package/dist/components/subject-section.js +2 -2
  73. package/dist/components/subject-section.js.map +1 -1
  74. package/dist/components/table.d.ts +7 -1
  75. package/dist/components/table.d.ts.map +1 -1
  76. package/dist/components/table.js +2 -2
  77. package/dist/components/table.js.map +1 -1
  78. package/dist/components/tag-filter-field.d.ts +11 -0
  79. package/dist/components/tag-filter-field.d.ts.map +1 -0
  80. package/dist/components/tag-filter-field.js +15 -0
  81. package/dist/components/tag-filter-field.js.map +1 -0
  82. package/dist/components/tool-meta-access.d.ts +28 -0
  83. package/dist/components/tool-meta-access.d.ts.map +1 -0
  84. package/dist/components/tool-meta-access.js +65 -0
  85. package/dist/components/tool-meta-access.js.map +1 -0
  86. package/dist/components/tool-name-entry.d.ts +26 -0
  87. package/dist/components/tool-name-entry.d.ts.map +1 -0
  88. package/dist/components/tool-name-entry.js +43 -0
  89. package/dist/components/tool-name-entry.js.map +1 -0
  90. package/dist/components/tool-picker.d.ts +24 -19
  91. package/dist/components/tool-picker.d.ts.map +1 -1
  92. package/dist/components/tool-picker.js +55 -35
  93. package/dist/components/tool-picker.js.map +1 -1
  94. package/dist/components/tool-select.d.ts +26 -0
  95. package/dist/components/tool-select.d.ts.map +1 -0
  96. package/dist/components/tool-select.js +82 -0
  97. package/dist/components/tool-select.js.map +1 -0
  98. package/dist/extension-combos.d.ts +6 -1
  99. package/dist/extension-combos.d.ts.map +1 -1
  100. package/dist/extension-combos.js +8 -0
  101. package/dist/extension-combos.js.map +1 -1
  102. package/dist/hooks/useApi.d.ts +1 -0
  103. package/dist/hooks/useApi.d.ts.map +1 -1
  104. package/dist/hooks/useSystemKinds.d.ts +27 -12
  105. package/dist/hooks/useSystemKinds.d.ts.map +1 -1
  106. package/dist/hooks/useSystemKinds.js +56 -16
  107. package/dist/hooks/useSystemKinds.js.map +1 -1
  108. package/dist/index.d.ts +51 -49
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +34 -26
  111. package/dist/index.js.map +1 -1
  112. package/dist/marketplace-install/use-mount-install.d.ts +6 -6
  113. package/dist/plugin/version.d.ts +1 -1
  114. package/dist/plugin/version.js +1 -1
  115. package/dist/schema-editor/SchemaEditor.d.ts +7 -2
  116. package/dist/schema-editor/SchemaEditor.d.ts.map +1 -1
  117. package/dist/schema-editor/SchemaEditor.js +1 -1
  118. package/dist/schema-editor/SchemaEditor.js.map +1 -1
  119. package/dist/schema-editor/index.d.ts +2 -2
  120. package/dist/schema-editor/index.d.ts.map +1 -1
  121. package/dist/schema-form/array-field.d.ts.map +1 -1
  122. package/dist/schema-form/array-field.js +6 -2
  123. package/dist/schema-form/array-field.js.map +1 -1
  124. package/dist/schema-form/classify.d.ts +4 -1
  125. package/dist/schema-form/classify.d.ts.map +1 -1
  126. package/dist/schema-form/classify.js +36 -15
  127. package/dist/schema-form/classify.js.map +1 -1
  128. package/dist/schema-form/collapsed-object-field.d.ts +20 -0
  129. package/dist/schema-form/collapsed-object-field.d.ts.map +1 -0
  130. package/dist/schema-form/collapsed-object-field.js +14 -0
  131. package/dist/schema-form/collapsed-object-field.js.map +1 -0
  132. package/dist/schema-form/context.d.ts +27 -1
  133. package/dist/schema-form/context.d.ts.map +1 -1
  134. package/dist/schema-form/context.js +14 -0
  135. package/dist/schema-form/context.js.map +1 -1
  136. package/dist/schema-form/default-value.d.ts +21 -6
  137. package/dist/schema-form/default-value.d.ts.map +1 -1
  138. package/dist/schema-form/default-value.js +74 -15
  139. package/dist/schema-form/default-value.js.map +1 -1
  140. package/dist/schema-form/expression-field.d.ts +48 -0
  141. package/dist/schema-form/expression-field.d.ts.map +1 -0
  142. package/dist/schema-form/expression-field.js +88 -0
  143. package/dist/schema-form/expression-field.js.map +1 -0
  144. package/dist/schema-form/field-model.d.ts +23 -4
  145. package/dist/schema-form/field-model.d.ts.map +1 -1
  146. package/dist/schema-form/field-node.d.ts.map +1 -1
  147. package/dist/schema-form/field-node.js +16 -3
  148. package/dist/schema-form/field-node.js.map +1 -1
  149. package/dist/schema-form/index.d.ts +3 -3
  150. package/dist/schema-form/index.d.ts.map +1 -1
  151. package/dist/schema-form/index.js +2 -2
  152. package/dist/schema-form/index.js.map +1 -1
  153. package/dist/schema-form/object-fields.d.ts +6 -3
  154. package/dist/schema-form/object-fields.d.ts.map +1 -1
  155. package/dist/schema-form/object-fields.js +14 -3
  156. package/dist/schema-form/object-fields.js.map +1 -1
  157. package/dist/schema-form/record-field.d.ts.map +1 -1
  158. package/dist/schema-form/record-field.js +6 -2
  159. package/dist/schema-form/record-field.js.map +1 -1
  160. package/dist/schema-form/seeding-action.d.ts +15 -0
  161. package/dist/schema-form/seeding-action.d.ts.map +1 -0
  162. package/dist/schema-form/seeding-action.js +35 -0
  163. package/dist/schema-form/seeding-action.js.map +1 -0
  164. package/dist/schema-form/string-annotations.d.ts +22 -8
  165. package/dist/schema-form/string-annotations.d.ts.map +1 -1
  166. package/dist/schema-form/string-annotations.js +39 -14
  167. package/dist/schema-form/string-annotations.js.map +1 -1
  168. package/dist/schema-form/string-field.js +2 -84
  169. package/dist/schema-form/string-field.js.map +1 -1
  170. package/dist/schema-form/templated-field.d.ts +13 -0
  171. package/dist/schema-form/templated-field.d.ts.map +1 -0
  172. package/dist/schema-form/templated-field.js +43 -0
  173. package/dist/schema-form/templated-field.js.map +1 -0
  174. package/dist/schema-form/union-field.d.ts.map +1 -1
  175. package/dist/schema-form/union-field.js +6 -2
  176. package/dist/schema-form/union-field.js.map +1 -1
  177. package/dist/schema-form/union.d.ts +4 -4
  178. package/dist/schema-form/union.d.ts.map +1 -1
  179. package/dist/schema-form/union.js +8 -1
  180. package/dist/schema-form/union.js.map +1 -1
  181. package/dist/schema-form/validate.d.ts.map +1 -1
  182. package/dist/schema-form/validate.js +28 -0
  183. package/dist/schema-form/validate.js.map +1 -1
  184. package/dist/search-match.d.ts +29 -0
  185. package/dist/search-match.d.ts.map +1 -0
  186. package/dist/search-match.js +38 -0
  187. package/dist/search-match.js.map +1 -0
  188. package/dist/tool-organization.d.ts +15 -0
  189. package/dist/tool-organization.d.ts.map +1 -0
  190. package/dist/tool-organization.js +6 -0
  191. package/dist/tool-organization.js.map +1 -0
  192. package/package.json +3 -2
  193. package/src/components/agent-picker.tsx +2 -1
  194. package/src/components/channel-picker.tsx +2 -1
  195. package/src/components/combo-draft-editor.tsx +96 -0
  196. package/src/components/{extension-combo-parts.tsx → committed-combo-list.tsx} +4 -105
  197. package/src/components/components.css +53 -0
  198. package/src/components/explorer-body.tsx +29 -5
  199. package/src/components/explorer-view.tsx +48 -17
  200. package/src/components/extension-combo-builder.tsx +10 -10
  201. package/src/components/extension-config-editor.tsx +3 -3
  202. package/src/components/field.tsx +18 -2
  203. package/src/components/folder-actions.tsx +341 -0
  204. package/src/components/folder-filing.tsx +109 -0
  205. package/src/components/folder-nav.tsx +26 -10
  206. package/src/components/folder-occupancy.ts +83 -0
  207. package/src/components/named-list-picker.tsx +11 -7
  208. package/src/components/primitives.tsx +2 -1
  209. package/src/components/searchable-select-model.ts +105 -0
  210. package/src/components/searchable-select.tsx +432 -0
  211. package/src/components/selected-tool-badges.tsx +41 -0
  212. package/src/components/subject-section.tsx +3 -2
  213. package/src/components/table.tsx +12 -2
  214. package/src/components/tag-filter-field.tsx +37 -0
  215. package/src/components/tool-meta-access.tsx +101 -0
  216. package/src/components/tool-name-entry.tsx +77 -0
  217. package/src/components/tool-picker.tsx +87 -52
  218. package/src/components/tool-select.tsx +136 -0
  219. package/src/extension-combos.ts +15 -1
  220. package/src/hooks/useSystemKinds.tsx +77 -17
  221. package/src/index.ts +98 -94
  222. package/src/plugin/version.ts +1 -1
  223. package/src/schema-editor/SchemaEditor.tsx +9 -3
  224. package/src/schema-editor/index.ts +2 -2
  225. package/src/schema-form/array-field.tsx +10 -2
  226. package/src/schema-form/classify.ts +41 -15
  227. package/src/schema-form/collapsed-object-field.tsx +56 -0
  228. package/src/schema-form/context.ts +33 -1
  229. package/src/schema-form/default-value.ts +89 -15
  230. package/src/schema-form/expression-field.tsx +162 -0
  231. package/src/schema-form/field-model.ts +27 -4
  232. package/src/schema-form/field-node.tsx +41 -2
  233. package/src/schema-form/index.ts +3 -2
  234. package/src/schema-form/object-fields.tsx +11 -4
  235. package/src/schema-form/record-field.tsx +10 -2
  236. package/src/schema-form/seeding-action.ts +44 -0
  237. package/src/schema-form/string-annotations.ts +40 -14
  238. package/src/schema-form/string-field.tsx +2 -147
  239. package/src/schema-form/templated-field.tsx +124 -0
  240. package/src/schema-form/union-field.tsx +11 -2
  241. package/src/schema-form/union.ts +12 -5
  242. package/src/schema-form/validate.ts +28 -0
  243. package/src/search-match.ts +41 -0
  244. package/src/tool-organization.ts +34 -0
  245. package/dist/components/extension-combo-parts.d.ts +0 -46
  246. package/dist/components/extension-combo-parts.d.ts.map +0 -1
  247. package/dist/components/extension-combo-parts.js.map +0 -1
  248. package/dist/components/tool-picker-parts.d.ts +0 -43
  249. package/dist/components/tool-picker-parts.d.ts.map +0 -1
  250. package/dist/components/tool-picker-parts.js +0 -89
  251. package/dist/components/tool-picker-parts.js.map +0 -1
  252. 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 authors through a
55
- visual expression editor — but **only when the host injects one**. The SDK owns
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, and the SDK's
65
- module graph reaches no jq at all — no editor, no Web Worker, no wasm.
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 pane is an `ExplorerView`;
370
- Presets; States; Storage; a Conversations route, its threads beside the open
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. Values render as text, never HTML. A picker is composed
443
- outside `SchemaForm`. Two cases differ:
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 a `Select` renders. */
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;AAiBD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,gBAAgB,GAAG,SAAS,CAY/F"}
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;CAChC,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"}
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 a `Select` renders. */
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;AAkBD,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,aAAa,EACb,KAAK,GACN,EAAE,kBAAkB,GAAG,SAAS,CAYhC"}
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
- /** The combo under construction: the extension picker, one settings form per drafted
34
- * configurable extension, the duplicate note, and the Add/Update + Cancel actions. */
35
- export function ComboDraftEditor({ available, draft, onDraftChange, configurable, draftConfigs, onDraftConfigChange, isDuplicate, canAdd, editing, disabled, idPrefix, onCommit, onReset, }) {
36
- return (_jsxs("div", { className: "tai-stack tai-stack-2", children: [_jsx(ExtensionPicker, { available: available, value: draft, onChange: onDraftChange, disabled: disabled, idPrefix: `${idPrefix}-draft` }), configurable.map(({ name, schema }) => (_jsx(ExtensionConfigEditor
37
- // Re-seed the form when the draft target changes (a new draft vs a
38
- // specific combo pulled in for edit).
39
- , { name: name, schema: schema, value: draftConfigs[name], onChange: (change) => {
40
- onDraftConfigChange(name, change);
41
- }, disabled: disabled, idPrefix: `${idPrefix}-settings-${name}` }, `${editing === null ? 'new' : String(editing)}-${name}`))), isDuplicate ? (_jsxs("p", { role: "alert", className: "tai-field-error", children: [_jsx(XCircleIcon, {}), "This extension set is already added."] })) : null, _jsxs("div", { className: "tai-row", children: [_jsx(Button, { type: "button", variant: "primary", onClick: onCommit, disabled: !canAdd, children: editing === null ? 'Add extension set' : 'Update extension set' }), editing !== null ? (_jsx(Button, { type: "button", onClick: onReset, disabled: disabled, children: "Cancel edit" })) : null] })] }));
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;AAqDD,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,SAAS,CAkDtE"}
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
- return (_jsx("div", { role: "listitem", ...openProps(entry.item), children: renderCard(entry.item) }, `item:${getItemKey(entry.item)}`));
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
- return (_jsx(TR, { ...openProps(entry.item), children: renderRow(entry.item) }, `item:${getItemKey(entry.item)}`));
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":"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"}
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;AAsBD,iEAAiE;AACjE,SAAS,SAAS,CAChB,KAAkE;IAElE,MAAM,EACJ,KAAK,EACL,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,UAAU,EACV,SAAS,GACV,GAAG,KAAK,CAAC;IACV,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,CACL,cAAK,IAAI,EAAC,UAAU,YAClB,KAAC,IAAI,IAAC,WAAW,kBACf,KAAC,WAAW,IACV,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,UAAU,EAAE,UAAU,EACtB,mBAAmB,EAAE,mBAAmB,GACxC,GACG,IAPiB,UAAU,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAQ/C,CACP,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,CACL,cACE,IAAI,EAAC,UAAU,mBAEA,GAAG,KAAK,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KACvD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAExB,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAJlB,QAAQ,GAAG,EAAE,CAKd,CACP,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,SAAS,QAAQ,CACf,KAAkE;IAElE,MAAM,EACJ,KAAK,EACL,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,SAAS,EACT,SAAS,GACV,GAAG,KAAK,CAAC;IACV,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,CACL,KAAC,EAAE,cACD,KAAC,EAAE,IAAC,OAAO,EAAE,OAAO,CAAC,MAAM,YACzB,KAAC,WAAW,IACV,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,UAAU,EAAE,UAAU,EACtB,mBAAmB,EAAE,mBAAmB,GACxC,GACC,IAPE,UAAU,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAQ/B,CACN,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,CACL,KAAC,EAAE,IAAqB,QAAQ,EAAE,GAAG,KAAK,eAAe,KAAM,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YACjF,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IADf,QAAQ,GAAG,EAAE,CAEjB,CACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,KAA2B;IACzD,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,GAC5F,KAAK,CAAC;IAER,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,gFAAgF;QAChF,+EAA+E;QAC/E,4CAA4C;QAC5C,OAAO,KAAC,UAAU,OAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,GAAI,CAAC;IACjG,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,CACL,8BACE,KAAC,cAAc,kBAAa,KAAK,YAC9B,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1B,KAAC,SAAS,OAA6C,KAAK,EAAE,KAAK,EAAE,KAAK,IAA1D,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAA6B,CAC/E,CAAC,GACa,EACjB,KAAC,aAAa,OAAK,KAAK,GAAI,IAC3B,CACJ,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,8EAA8E;IAC9E,6EAA6E;IAC7E,OAAO,CACL,8BACE,KAAC,YAAY,IAAC,KAAK,EAAE,KAAK,YACxB,MAAC,KAAK,eACJ,KAAC,KAAK,cACJ,KAAC,EAAE,cACA,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,EAAE,IAAkB,OAAO,EAAE,MAAM,CAAC,OAAO,YACzC,MAAM,CAAC,MAAM,IADP,MAAM,CAAC,GAAG,CAEd,CACN,CAAC,GACC,GACC,EACR,KAAC,KAAK,cACH,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1B,KAAC,QAAQ,OAA6C,KAAK,EAAE,KAAK,EAAE,KAAK,IAA1D,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAA6B,CAC9E,CAAC,GACI,IACF,GACK,EACf,KAAC,aAAa,OAAK,KAAK,GAAI,IAC3B,CACJ,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,SAAS,QAAQ,CAAI,KAAuB,EAAE,UAA+B;IAC3E,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAClG,CAAC"}
@@ -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. `matches` owns the item shape and casing; it is
40
- * called only with a non-empty, already-trimmed query. */
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
- readonly matches: (item: T, query: string) => boolean;
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 and no folders exist at all. */
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 — yet the
59
- * entity set is not globally empty. */
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":"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"}
1
+ {"version":3,"file":"explorer-view.d.ts","sourceRoot":"","sources":["../../src/components/explorer-view.tsx"],"names":[],"mappings":"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"}