@tai42/studio-sdk 30.0.1 → 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 (215) 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/components.css +53 -0
  11. package/dist/components/explorer-body.d.ts +1 -0
  12. package/dist/components/explorer-body.d.ts.map +1 -1
  13. package/dist/components/explorer-body.js +6 -4
  14. package/dist/components/explorer-body.js.map +1 -1
  15. package/dist/components/explorer-view.d.ts +16 -7
  16. package/dist/components/explorer-view.d.ts.map +1 -1
  17. package/dist/components/explorer-view.js +27 -13
  18. package/dist/components/explorer-view.js.map +1 -1
  19. package/dist/components/extension-config-editor.js.map +1 -1
  20. package/dist/components/field.d.ts +6 -0
  21. package/dist/components/field.d.ts.map +1 -1
  22. package/dist/components/field.js +15 -2
  23. package/dist/components/field.js.map +1 -1
  24. package/dist/components/folder-actions.d.ts +51 -0
  25. package/dist/components/folder-actions.d.ts.map +1 -0
  26. package/dist/components/folder-actions.js +173 -0
  27. package/dist/components/folder-actions.js.map +1 -0
  28. package/dist/components/folder-filing.d.ts +32 -0
  29. package/dist/components/folder-filing.d.ts.map +1 -0
  30. package/dist/components/folder-filing.js +51 -0
  31. package/dist/components/folder-filing.js.map +1 -0
  32. package/dist/components/folder-nav.d.ts +9 -4
  33. package/dist/components/folder-nav.d.ts.map +1 -1
  34. package/dist/components/folder-nav.js +18 -22
  35. package/dist/components/folder-nav.js.map +1 -1
  36. package/dist/components/folder-occupancy.d.ts +27 -0
  37. package/dist/components/folder-occupancy.d.ts.map +1 -0
  38. package/dist/components/folder-occupancy.js +54 -0
  39. package/dist/components/folder-occupancy.js.map +1 -0
  40. package/dist/components/named-list-picker.d.ts +5 -3
  41. package/dist/components/named-list-picker.d.ts.map +1 -1
  42. package/dist/components/named-list-picker.js +7 -7
  43. package/dist/components/named-list-picker.js.map +1 -1
  44. package/dist/components/primitives.d.ts +2 -1
  45. package/dist/components/primitives.d.ts.map +1 -1
  46. package/dist/components/primitives.js +2 -1
  47. package/dist/components/primitives.js.map +1 -1
  48. package/dist/components/searchable-select-model.d.ts +40 -0
  49. package/dist/components/searchable-select-model.d.ts.map +1 -0
  50. package/dist/components/searchable-select-model.js +69 -0
  51. package/dist/components/searchable-select-model.js.map +1 -0
  52. package/dist/components/searchable-select.d.ts +38 -0
  53. package/dist/components/searchable-select.d.ts.map +1 -0
  54. package/dist/components/searchable-select.js +200 -0
  55. package/dist/components/searchable-select.js.map +1 -0
  56. package/dist/components/subject-section.d.ts.map +1 -1
  57. package/dist/components/subject-section.js +2 -2
  58. package/dist/components/subject-section.js.map +1 -1
  59. package/dist/components/table.d.ts +7 -1
  60. package/dist/components/table.d.ts.map +1 -1
  61. package/dist/components/table.js +2 -2
  62. package/dist/components/table.js.map +1 -1
  63. package/dist/components/tool-meta-access.d.ts +28 -0
  64. package/dist/components/tool-meta-access.d.ts.map +1 -0
  65. package/dist/components/tool-meta-access.js +65 -0
  66. package/dist/components/tool-meta-access.js.map +1 -0
  67. package/dist/components/tool-name-entry.d.ts +26 -0
  68. package/dist/components/tool-name-entry.d.ts.map +1 -0
  69. package/dist/components/tool-name-entry.js +43 -0
  70. package/dist/components/tool-name-entry.js.map +1 -0
  71. package/dist/components/tool-picker.d.ts +23 -18
  72. package/dist/components/tool-picker.d.ts.map +1 -1
  73. package/dist/components/tool-picker.js +51 -33
  74. package/dist/components/tool-picker.js.map +1 -1
  75. package/dist/components/tool-select.d.ts +6 -5
  76. package/dist/components/tool-select.d.ts.map +1 -1
  77. package/dist/components/tool-select.js +31 -14
  78. package/dist/components/tool-select.js.map +1 -1
  79. package/dist/hooks/useApi.d.ts +1 -0
  80. package/dist/hooks/useApi.d.ts.map +1 -1
  81. package/dist/hooks/useSystemKinds.d.ts +27 -12
  82. package/dist/hooks/useSystemKinds.d.ts.map +1 -1
  83. package/dist/hooks/useSystemKinds.js +56 -16
  84. package/dist/hooks/useSystemKinds.js.map +1 -1
  85. package/dist/index.d.ts +51 -49
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +34 -26
  88. package/dist/index.js.map +1 -1
  89. package/dist/marketplace-install/use-mount-install.d.ts +6 -6
  90. package/dist/plugin/version.d.ts +1 -1
  91. package/dist/plugin/version.js +1 -1
  92. package/dist/schema-editor/SchemaEditor.d.ts +7 -2
  93. package/dist/schema-editor/SchemaEditor.d.ts.map +1 -1
  94. package/dist/schema-editor/SchemaEditor.js +1 -1
  95. package/dist/schema-editor/SchemaEditor.js.map +1 -1
  96. package/dist/schema-editor/index.d.ts +2 -2
  97. package/dist/schema-editor/index.d.ts.map +1 -1
  98. package/dist/schema-form/array-field.d.ts.map +1 -1
  99. package/dist/schema-form/array-field.js +6 -2
  100. package/dist/schema-form/array-field.js.map +1 -1
  101. package/dist/schema-form/classify.d.ts +4 -1
  102. package/dist/schema-form/classify.d.ts.map +1 -1
  103. package/dist/schema-form/classify.js +36 -15
  104. package/dist/schema-form/classify.js.map +1 -1
  105. package/dist/schema-form/collapsed-object-field.d.ts +20 -0
  106. package/dist/schema-form/collapsed-object-field.d.ts.map +1 -0
  107. package/dist/schema-form/collapsed-object-field.js +14 -0
  108. package/dist/schema-form/collapsed-object-field.js.map +1 -0
  109. package/dist/schema-form/context.d.ts +27 -1
  110. package/dist/schema-form/context.d.ts.map +1 -1
  111. package/dist/schema-form/context.js +14 -0
  112. package/dist/schema-form/context.js.map +1 -1
  113. package/dist/schema-form/default-value.d.ts +21 -6
  114. package/dist/schema-form/default-value.d.ts.map +1 -1
  115. package/dist/schema-form/default-value.js +74 -15
  116. package/dist/schema-form/default-value.js.map +1 -1
  117. package/dist/schema-form/expression-field.d.ts +48 -0
  118. package/dist/schema-form/expression-field.d.ts.map +1 -0
  119. package/dist/schema-form/expression-field.js +88 -0
  120. package/dist/schema-form/expression-field.js.map +1 -0
  121. package/dist/schema-form/field-model.d.ts +23 -4
  122. package/dist/schema-form/field-model.d.ts.map +1 -1
  123. package/dist/schema-form/field-node.d.ts.map +1 -1
  124. package/dist/schema-form/field-node.js +16 -3
  125. package/dist/schema-form/field-node.js.map +1 -1
  126. package/dist/schema-form/index.d.ts +3 -3
  127. package/dist/schema-form/index.d.ts.map +1 -1
  128. package/dist/schema-form/index.js +2 -2
  129. package/dist/schema-form/index.js.map +1 -1
  130. package/dist/schema-form/object-fields.d.ts +6 -3
  131. package/dist/schema-form/object-fields.d.ts.map +1 -1
  132. package/dist/schema-form/object-fields.js +14 -3
  133. package/dist/schema-form/object-fields.js.map +1 -1
  134. package/dist/schema-form/record-field.d.ts.map +1 -1
  135. package/dist/schema-form/record-field.js +6 -2
  136. package/dist/schema-form/record-field.js.map +1 -1
  137. package/dist/schema-form/seeding-action.d.ts +15 -0
  138. package/dist/schema-form/seeding-action.d.ts.map +1 -0
  139. package/dist/schema-form/seeding-action.js +35 -0
  140. package/dist/schema-form/seeding-action.js.map +1 -0
  141. package/dist/schema-form/string-annotations.d.ts +22 -8
  142. package/dist/schema-form/string-annotations.d.ts.map +1 -1
  143. package/dist/schema-form/string-annotations.js +39 -14
  144. package/dist/schema-form/string-annotations.js.map +1 -1
  145. package/dist/schema-form/string-field.js +2 -84
  146. package/dist/schema-form/string-field.js.map +1 -1
  147. package/dist/schema-form/templated-field.d.ts +13 -0
  148. package/dist/schema-form/templated-field.d.ts.map +1 -0
  149. package/dist/schema-form/templated-field.js +43 -0
  150. package/dist/schema-form/templated-field.js.map +1 -0
  151. package/dist/schema-form/union-field.d.ts.map +1 -1
  152. package/dist/schema-form/union-field.js +6 -2
  153. package/dist/schema-form/union-field.js.map +1 -1
  154. package/dist/schema-form/union.d.ts +4 -4
  155. package/dist/schema-form/union.d.ts.map +1 -1
  156. package/dist/schema-form/union.js +8 -1
  157. package/dist/schema-form/union.js.map +1 -1
  158. package/dist/schema-form/validate.d.ts.map +1 -1
  159. package/dist/schema-form/validate.js +28 -0
  160. package/dist/schema-form/validate.js.map +1 -1
  161. package/dist/search-match.d.ts +29 -0
  162. package/dist/search-match.d.ts.map +1 -0
  163. package/dist/search-match.js +38 -0
  164. package/dist/search-match.js.map +1 -0
  165. package/dist/tool-organization.d.ts +15 -0
  166. package/dist/tool-organization.d.ts.map +1 -0
  167. package/dist/tool-organization.js +6 -0
  168. package/dist/tool-organization.js.map +1 -0
  169. package/package.json +3 -2
  170. package/src/components/agent-picker.tsx +2 -1
  171. package/src/components/channel-picker.tsx +2 -1
  172. package/src/components/components.css +53 -0
  173. package/src/components/explorer-body.tsx +29 -5
  174. package/src/components/explorer-view.tsx +48 -17
  175. package/src/components/extension-config-editor.tsx +3 -3
  176. package/src/components/field.tsx +18 -2
  177. package/src/components/folder-actions.tsx +341 -0
  178. package/src/components/folder-filing.tsx +109 -0
  179. package/src/components/folder-nav.tsx +26 -10
  180. package/src/components/folder-occupancy.ts +83 -0
  181. package/src/components/named-list-picker.tsx +11 -7
  182. package/src/components/primitives.tsx +2 -1
  183. package/src/components/searchable-select-model.ts +105 -0
  184. package/src/components/searchable-select.tsx +432 -0
  185. package/src/components/subject-section.tsx +3 -2
  186. package/src/components/table.tsx +12 -2
  187. package/src/components/tool-meta-access.tsx +101 -0
  188. package/src/components/tool-name-entry.tsx +77 -0
  189. package/src/components/tool-picker.tsx +83 -50
  190. package/src/components/tool-select.tsx +49 -38
  191. package/src/hooks/useSystemKinds.tsx +77 -17
  192. package/src/index.ts +98 -94
  193. package/src/plugin/version.ts +1 -1
  194. package/src/schema-editor/SchemaEditor.tsx +9 -3
  195. package/src/schema-editor/index.ts +2 -2
  196. package/src/schema-form/array-field.tsx +10 -2
  197. package/src/schema-form/classify.ts +41 -15
  198. package/src/schema-form/collapsed-object-field.tsx +56 -0
  199. package/src/schema-form/context.ts +33 -1
  200. package/src/schema-form/default-value.ts +89 -15
  201. package/src/schema-form/expression-field.tsx +162 -0
  202. package/src/schema-form/field-model.ts +27 -4
  203. package/src/schema-form/field-node.tsx +41 -2
  204. package/src/schema-form/index.ts +3 -2
  205. package/src/schema-form/object-fields.tsx +11 -4
  206. package/src/schema-form/record-field.tsx +10 -2
  207. package/src/schema-form/seeding-action.ts +44 -0
  208. package/src/schema-form/string-annotations.ts +40 -14
  209. package/src/schema-form/string-field.tsx +2 -147
  210. package/src/schema-form/templated-field.tsx +124 -0
  211. package/src/schema-form/union-field.tsx +11 -2
  212. package/src/schema-form/union.ts +12 -5
  213. package/src/schema-form/validate.ts +28 -0
  214. package/src/search-match.ts +41 -0
  215. package/src/tool-organization.ts +34 -0
@@ -0,0 +1,54 @@
1
+ const NOTHING = { own: false, any: false, drawn: false };
2
+ /**
3
+ * The folders a screen draws, in the input order.
4
+ *
5
+ * `rows` are the overlay rows (each tool's `folder_id`), `population` the tool names
6
+ * the screen lists. Linear in folders + rows; the subtree walk is cycle-guarded, so a
7
+ * malformed parent chain yields a bounded result rather than looping.
8
+ */
9
+ export function foldersForView(folders, rows, population) {
10
+ const direct = new Map();
11
+ for (const row of rows) {
12
+ if (row.folder_id === null)
13
+ continue;
14
+ const entry = direct.get(row.folder_id) ?? { own: false, any: false };
15
+ entry.any = true;
16
+ if (population.has(row.tool_name))
17
+ entry.own = true;
18
+ direct.set(row.folder_id, entry);
19
+ }
20
+ const childrenByParent = new Map();
21
+ for (const folder of folders) {
22
+ if (folder.parentId === null)
23
+ continue;
24
+ const siblings = childrenByParent.get(folder.parentId) ?? [];
25
+ siblings.push(folder.id);
26
+ childrenByParent.set(folder.parentId, siblings);
27
+ }
28
+ const settled = new Map();
29
+ const visiting = new Set();
30
+ const stateOf = (id) => {
31
+ const cached = settled.get(id);
32
+ if (cached !== undefined)
33
+ return cached;
34
+ if (visiting.has(id))
35
+ return NOTHING;
36
+ visiting.add(id);
37
+ const held = direct.get(id);
38
+ let own = held?.own ?? false;
39
+ let any = held?.any ?? false;
40
+ let childDrawn = false;
41
+ for (const childId of childrenByParent.get(id) ?? []) {
42
+ const child = stateOf(childId);
43
+ own = own || child.own;
44
+ any = any || child.any;
45
+ childDrawn = childDrawn || child.drawn;
46
+ }
47
+ visiting.delete(id);
48
+ const state = { own, any, drawn: own || !any || childDrawn };
49
+ settled.set(id, state);
50
+ return state;
51
+ };
52
+ return folders.filter((folder) => stateOf(folder.id).drawn);
53
+ }
54
+ //# sourceMappingURL=folder-occupancy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folder-occupancy.js","sourceRoot":"","sources":["../../src/components/folder-occupancy.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  /**
2
- * The single-select both `AgentPicker` and `ChannelPicker` render: one list read of
3
- * names, drawn in its own `Field` with the read's states (pending, error with Retry,
2
+ * The searchable single-select both `AgentPicker` and `ChannelPicker` render: one list
3
+ * read of names, drawn in its own `Field` with the read's states (pending, error with Retry,
4
4
  * refused on a 403, loaded and empty) and a stored value the loaded list does not
5
5
  * hold flagged with the picker's unlisted label. Each picker hands in its own copy.
6
6
  * The host's `error` shows, and the `Field` claims its control id, exactly while a
7
- * `Select` renders.
7
+ * select renders.
8
8
  */
9
9
  import { type ReactNode } from 'react';
10
10
  /** The flags of a list read; `data` is each picker's own. */
@@ -25,6 +25,8 @@ export interface NamedListCopy {
25
25
  readonly emptyNote: string;
26
26
  readonly emptyAction: ReactNode;
27
27
  readonly unlistedLabel: string;
28
+ /** Accessible name of the select's search box. */
29
+ readonly searchLabel: string;
28
30
  }
29
31
  export interface NamedListPickerProps {
30
32
  readonly query: ListReadFlags;
@@ -1 +1 @@
1
- {"version":3,"file":"named-list-picker.d.ts","sourceRoot":"","sources":["../../src/components/named-list-picker.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,OAAO,CAAC;AAU9C,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;CAC9B;AAwGD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,KAAK,EACL,aAAa,EACb,KAAK,EACL,IAAI,GACL,EAAE,oBAAoB,GAAG,SAAS,CAuBlC"}
1
+ {"version":3,"file":"named-list-picker.d.ts","sourceRoot":"","sources":["../../src/components/named-list-picker.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,OAAO,CAAC;AAW9C,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,kDAAkD;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;CAC9B;AAyGD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,KAAK,EACL,aAAa,EACb,KAAK,EACL,IAAI,GACL,EAAE,oBAAoB,GAAG,SAAS,CAuBlC"}
@@ -1,18 +1,18 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /**
3
- * The single-select both `AgentPicker` and `ChannelPicker` render: one list read of
4
- * names, drawn in its own `Field` with the read's states (pending, error with Retry,
3
+ * The searchable single-select both `AgentPicker` and `ChannelPicker` render: one list
4
+ * read of names, drawn in its own `Field` with the read's states (pending, error with Retry,
5
5
  * refused on a 403, loaded and empty) and a stored value the loaded list does not
6
6
  * hold flagged with the picker's unlisted label. Each picker hands in its own copy.
7
7
  * The host's `error` shows, and the `Field` claims its control id, exactly while a
8
- * `Select` renders.
8
+ * select renders.
9
9
  */
10
10
  import { useId } from 'react';
11
11
  import { errorMessage, isForbiddenError } from '../errors';
12
12
  import { Badge } from './badge';
13
13
  import { Field } from './field';
14
14
  import { ErrorState } from './primitives';
15
- import { Select } from './select';
15
+ import { SearchableSelect } from './searchable-select';
16
16
  const MUTED_LINE = { margin: 0, color: 'var(--tai-color-text-muted)' };
17
17
  function MutedLine({ text }) {
18
18
  return (_jsx("p", { role: "status", style: MUTED_LINE, children: text }));
@@ -44,15 +44,15 @@ function namedListView(query, names, value, unlistedLabel) {
44
44
  const selectRenders = pending || (refused ? stored !== null : !failed && (!empty || unlisted));
45
45
  return { refused, failed, pending, unlisted, empty, options, selectRenders };
46
46
  }
47
- /** The loaded, pending or refused body: the `Select` while one renders, then its notes. */
47
+ /** The loaded, pending or refused body: the select while one renders, then its notes. */
48
48
  function NamedListBody({ view, value, onValueChange, copy, }) {
49
49
  const unlistedId = useId();
50
- return (_jsxs(_Fragment, { children: [view.selectRenders ? (_jsx(Select, { options: view.options, value: value, placeholder: view.pending ? copy.loadingPlaceholder : copy.placeholder, disabled: view.pending, onValueChange: onValueChange, "aria-describedby": view.unlisted ? unlistedId : undefined })) : null, view.refused ? _jsx(MutedLine, { text: copy.forbiddenNote }) : null, view.empty && !view.refused ? (_jsxs(_Fragment, { children: [_jsx(MutedLine, { text: copy.emptyNote }), copy.emptyAction] })) : null, view.unlisted ? (_jsxs("p", { id: unlistedId, className: "tai-field-hint", style: { margin: 0 }, children: [_jsx(Badge, { variant: "warning", children: copy.unlistedLabel }), ' ', `${value} is ${copy.unlistedLabel}. Pick another, or saving is refused.`] })) : null] }));
50
+ return (_jsxs(_Fragment, { children: [view.selectRenders ? (_jsx(SearchableSelect, { options: view.options, value: value, placeholder: view.pending ? copy.loadingPlaceholder : copy.placeholder, disabled: view.pending, onValueChange: onValueChange, "aria-describedby": view.unlisted ? unlistedId : undefined, searchLabel: copy.searchLabel })) : null, view.refused ? _jsx(MutedLine, { text: copy.forbiddenNote }) : null, view.empty && !view.refused ? (_jsxs(_Fragment, { children: [_jsx(MutedLine, { text: copy.emptyNote }), copy.emptyAction] })) : null, view.unlisted ? (_jsxs("p", { id: unlistedId, className: "tai-field-hint", style: { margin: 0 }, children: [_jsx(Badge, { variant: "warning", children: copy.unlistedLabel }), ' ', `${value} is ${copy.unlistedLabel}. Pick another, or saving is refused.`] })) : null] }));
51
51
  }
52
52
  export function NamedListPicker({ query, names, value, onValueChange, error, copy, }) {
53
53
  const view = namedListView(query, names, value, copy.unlistedLabel);
54
54
  return (_jsx(Field, { label: copy.label, description: copy.description, error: view.selectRenders ? error : undefined,
55
- // Only the Select claims the field's control id; with nothing to hold no
55
+ // Only the select claims the field's control id; with nothing to hold no
56
56
  // labelable element renders, so `for` would dangle.
57
57
  group: !view.selectRenders, children: view.failed ? (_jsx(ErrorState, { message: errorMessage(query.error), onRetry: () => {
58
58
  query.refetch();
@@ -1 +1 @@
1
- {"version":3,"file":"named-list-picker.js","sourceRoot":"","sources":["../../src/components/named-list-picker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"named-list-picker.js","sourceRoot":"","sources":["../../src/components/named-list-picker.tsx"],"names":[],"mappings":"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"}
@@ -36,7 +36,8 @@ import type { AnchorHTMLAttributes, ButtonHTMLAttributes, CSSProperties, ReactNo
36
36
  * evil.com.
37
37
  *
38
38
  * Callers render the returned string rather than their input, so the URL that was
39
- * judged is always the URL that is navigated.
39
+ * judged is always the URL that is navigated. `isSafeHttpUrl` gives the yes/no
40
+ * answer for a caller that does not need the URL itself.
40
41
  */
41
42
  export declare function safeHttpUrl(href: string): string | undefined;
42
43
  /** True only for an absolute `http://`/`https://` URL. Everything else is unsafe. */
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/components/primitives.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/components/primitives.tsx"],"names":[],"mappings":"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"}
@@ -39,7 +39,8 @@ function normalizeHref(href) {
39
39
  * evil.com.
40
40
  *
41
41
  * Callers render the returned string rather than their input, so the URL that was
42
- * judged is always the URL that is navigated.
42
+ * judged is always the URL that is navigated. `isSafeHttpUrl` gives the yes/no
43
+ * answer for a caller that does not need the URL itself.
43
44
  */
44
45
  export function safeHttpUrl(href) {
45
46
  const normalized = normalizeHref(href);
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/components/primitives.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/components/primitives.tsx"],"names":[],"mappings":";AA6BA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,gFAAgF;AAEhF;;;;;;;;;GASG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,0EAA0E;IAC1E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,OAAO,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI;QAAE,KAAK,EAAE,CAAC;IAC/D,OAAO,GAAG,GAAG,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI;QAAE,GAAG,EAAE,CAAC;IAC/D,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,kEAAkE;QAClE,uEAAuE;QACvE,wDAAwD;QACxD,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE;YAAE,OAAO,SAAS,CAAC;QACjE,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,aAAa,GAAG,iCAAiC,CAAC;AAExD;;;;;GAKG;AACH,MAAM,kBAAkB,GACtB,qFAAqF,CAAC;AAExF;;;;GAIG;AACH,MAAM,sBAAsB,GAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,EAAE,EACF,KAAK,GAaN;IACC,OAAO,CACL,oCACmB,MAAM,mBACT,MAAM,EACpB,KAAK,EAAE,kBAAkB,EACzB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,EAAE,aAEL,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CACrB,QAAQ,CACT,CAAC,CAAC,CAAC,CACF,8BAAkB,MAAM,EAAC,KAAK,EAAE,sBAAsB,YACnD,QAAQ,GACJ,CACR,EAID,eAAM,SAAS,EAAC,qBAAqB,YAClC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,kBAAkB,EAAE,GACxE,IACF,CACR,CAAC;AACJ,CAAC;AAQD;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxE,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAClF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACvC,CAAC;AAeD,sFAAsF;AACtF,SAAS,YAAY,CAAC,IAAY,EAAE,SAA6B;IAC/D,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC;AACjE,CAAC;AAMD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAkB,WAAW,CAAC;AAEjE,MAAM,aAAa,GAAkC;IACnD,OAAO,EAAE,yBAAyB;IAClC,SAAS,EAAE,2BAA2B;IACtC,KAAK,EAAE,uBAAuB;IAC9B,MAAM,EAAE,wBAAwB;CACjC,CAAC;AAoEF,gFAAgF;AAChF,MAAM,UAAU,WAAW,CAAC,OAAsB,EAAE,SAA6B;IAC/E,OAAO,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAA0C;IAC/D,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,EAAE,OAAO,GAAG,sBAAsB,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;QACpF,OAAO,oBAAY,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,GAAI,CAAC;IAC1E,CAAC;IAED,MAAM,EAAE,OAAO,GAAG,sBAAsB,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC9F,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,4EAA4E;QAC5E,4EAA4E;QAC5E,sEAAsE;QACtE,6EAA6E;QAC7E,uEAAuE;QACvE,OAAO,CACL,KAAC,eAAe,IAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,YACtF,QAAQ,GACO,CACnB,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,CACL,eACM,IAAI,EACR,IAAI,EAAE,IAAI,CAAC,IAAI,KAGX,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACpE,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,KAAK,YAEX,QAAQ,GACP,CACL,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eACM,IAAI;QACR,2EAA2E;QAC3E,yEAAyE;QACzE,qEAAqE;QACrE,wEAAwE;QACxE,wEAAwE;QACxE,yCAAyC;QACzC,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,8BAA8B,EAClC,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,KAAK,YAEX,QAAQ,GACP,CACL,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,IAAI,CAAC,EAAE,QAAQ,EAAE,WAAW,GAAG,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAa;IACtF,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,UAAU,CAAC;IACxE,OAAO,CACL,cAAK,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,YAClE,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,QAAQ,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,SAAS,EAAE,KAAK,EAAiB;IACvF,8EAA8E;IAC9E,OAAO,CACL,6BACc,MAAM,EAClB,SAAS,EAAE,YAAY,CAAC,cAAc,EAAE,SAAS,CAAC,EAClD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAClC,CACH,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAmB;IAC1F,OAAO,CACL,eAAK,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,YAAY,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,aACpF,YAAG,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAK,EAC/C,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAClC,YAAG,KAAK,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,YAAG,WAAW,GAAK,CAClE,EACA,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7B,cAAK,KAAK,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,YAAG,MAAM,GAAO,CAChE,IACG,CACP,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAO3C,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAmB;IAChF,OAAO,CACL,eAAK,IAAI,EAAC,OAAO,EAAC,SAAS,EAAE,YAAY,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,aAInF,kBAAQ,SAAS,EAAC,uBAAuB,aACvC,KAAC,WAAW,KAAG,EACd,WAAW,IACL,EACT,YAAG,KAAK,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,UAAU,EAAE,UAAU,EAAE,YAAG,OAAO,GAAK,EACpF,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC9B,cAAK,KAAK,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,YAC7C,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,sBAE7B,GACL,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,SAAS,EAAE,KAAK,EAAgB;IAC3E,OAAO,CACL,eACE,IAAI,EAAC,QAAQ,gBACD,KAAK,EACjB,SAAS,EAAE,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC,EACjD,KAAK,EAAE,KAAK,GACZ,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { SelectGroup, SelectOption } from './select';
2
+ /** One option, with its position in the full list and its label in search form. */
3
+ export interface SearchEntry {
4
+ readonly option: SelectOption;
5
+ /** The option's position across every section; stable while the reader filters. */
6
+ readonly position: number;
7
+ readonly loweredLabel: string;
8
+ }
9
+ /** A run of entries under one group label, or under none for a flat list. */
10
+ export interface SearchSection {
11
+ readonly label: string | undefined;
12
+ readonly entries: readonly SearchEntry[];
13
+ }
14
+ /** What a query leaves: the non-empty sections and their entries in reading order. */
15
+ export interface VisibleOptions {
16
+ readonly sections: readonly SearchSection[];
17
+ readonly entries: readonly SearchEntry[];
18
+ }
19
+ /** Index the caller's options (a flat run, or labelled groups) for search. */
20
+ export declare function indexSections(options: readonly SelectOption[] | undefined, groups: readonly SelectGroup[] | undefined): SearchSection[];
21
+ /**
22
+ * The sections and entries whose label contains `query`. A blank query returns every
23
+ * section as indexed; either way each kept entry is the indexed object itself, so a
24
+ * row memoised on its entry does not re-render because the reader typed.
25
+ */
26
+ export declare function visibleOptions(sections: readonly SearchSection[], query: string): VisibleOptions;
27
+ /**
28
+ * The entry the keyboard highlight moves to from `current` by one step in
29
+ * `direction`, skipping disabled entries and stopping at either end. With no current
30
+ * highlight among `entries`, a step lands on the first (down) or last (up) one.
31
+ */
32
+ export declare function stepEntry(entries: readonly SearchEntry[], current: SearchEntry | undefined, direction: 1 | -1): SearchEntry | undefined;
33
+ /**
34
+ * The entry to draw highlighted: the choosable visible entry whose value is `wanted`,
35
+ * else the first choosable one. Keyed by value, so the highlight stays on its option
36
+ * when the list around it changes, and a query that filters it away moves it to the
37
+ * top of what is left instead of to nothing.
38
+ */
39
+ export declare function shownEntry(entries: readonly SearchEntry[], wanted: string | undefined): SearchEntry | undefined;
40
+ //# sourceMappingURL=searchable-select-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchable-select-model.d.ts","sourceRoot":"","sources":["../../src/components/searchable-select-model.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE1D,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;CAC1C;AAED,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;CAC1C;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,EAC5C,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,GACzC,aAAa,EAAE,CAcjB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAWhG;AAMD;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAChB,WAAW,GAAG,SAAS,CAQzB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,WAAW,GAAG,SAAS,CAMzB"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * The option model behind `SearchableSelect`: the caller's options indexed once for
3
+ * search, the sections a query leaves, and the keyboard's movement over them. Pure,
4
+ * so the component re-derives nothing per row and the filter is testable alone.
5
+ */
6
+ import { searchNeedle, textHasNeedle } from '../search-match';
7
+ /** Index the caller's options (a flat run, or labelled groups) for search. */
8
+ export function indexSections(options, groups) {
9
+ const runs = groups !== undefined
10
+ ? groups.map((group) => ({ label: group.label, options: group.options }))
11
+ : [{ label: undefined, options: options ?? [] }];
12
+ let position = 0;
13
+ return runs.map((run) => ({
14
+ label: run.label,
15
+ entries: run.options.map((option) => ({
16
+ option,
17
+ position: position++,
18
+ loweredLabel: option.label.toLowerCase(),
19
+ })),
20
+ }));
21
+ }
22
+ /**
23
+ * The sections and entries whose label contains `query`. A blank query returns every
24
+ * section as indexed; either way each kept entry is the indexed object itself, so a
25
+ * row memoised on its entry does not re-render because the reader typed.
26
+ */
27
+ export function visibleOptions(sections, query) {
28
+ const needle = searchNeedle(query);
29
+ const kept = needle === ''
30
+ ? sections
31
+ : sections.map((section) => ({
32
+ label: section.label,
33
+ entries: section.entries.filter((entry) => textHasNeedle(entry.loweredLabel, needle)),
34
+ }));
35
+ const nonEmpty = kept.filter((section) => section.entries.length > 0);
36
+ return { sections: nonEmpty, entries: nonEmpty.flatMap((section) => section.entries) };
37
+ }
38
+ function enabled(entry) {
39
+ return entry.option.disabled !== true;
40
+ }
41
+ /**
42
+ * The entry the keyboard highlight moves to from `current` by one step in
43
+ * `direction`, skipping disabled entries and stopping at either end. With no current
44
+ * highlight among `entries`, a step lands on the first (down) or last (up) one.
45
+ */
46
+ export function stepEntry(entries, current, direction) {
47
+ const at = current === undefined ? -1 : entries.indexOf(current);
48
+ if (at === -1)
49
+ return direction === 1 ? entries.find(enabled) : entries.findLast(enabled);
50
+ for (let index = at + direction; index >= 0 && index < entries.length; index += direction) {
51
+ const entry = entries[index];
52
+ if (entry !== undefined && enabled(entry))
53
+ return entry;
54
+ }
55
+ return current;
56
+ }
57
+ /**
58
+ * The entry to draw highlighted: the choosable visible entry whose value is `wanted`,
59
+ * else the first choosable one. Keyed by value, so the highlight stays on its option
60
+ * when the list around it changes, and a query that filters it away moves it to the
61
+ * top of what is left instead of to nothing.
62
+ */
63
+ export function shownEntry(entries, wanted) {
64
+ const kept = wanted === undefined
65
+ ? undefined
66
+ : entries.find((entry) => entry.option.value === wanted && enabled(entry));
67
+ return kept ?? entries.find(enabled);
68
+ }
69
+ //# sourceMappingURL=searchable-select-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchable-select-model.js","sourceRoot":"","sources":["../../src/components/searchable-select-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { SelectGroup, SelectOption } from './select';
3
+ /** Everything the two option shapes have in common. */
4
+ interface SearchableSelectSharedProps {
5
+ /**
6
+ * The chosen option's value; `''` for none (the placeholder shows). A value no option
7
+ * carries shows as itself on the trigger.
8
+ */
9
+ readonly value: string;
10
+ readonly onValueChange: (value: string) => void;
11
+ readonly placeholder?: string;
12
+ readonly disabled?: boolean;
13
+ /**
14
+ * Accessible name for the trigger, its popup and its listbox when it is not wired to
15
+ * an enclosing `Field`. A `Field` wins where both are given, as on `Select`.
16
+ */
17
+ readonly 'aria-label'?: string;
18
+ /** IDREFs describing the trigger, concatenated ahead of an enclosing `Field`'s own. */
19
+ readonly 'aria-describedby'?: string;
20
+ /** Accessible name of the search box (e.g. "Search tools"). */
21
+ readonly searchLabel: string;
22
+ }
23
+ /** The FLAT shape: one ungrouped run of options. */
24
+ export interface SearchableSelectProps extends SearchableSelectSharedProps {
25
+ readonly options: readonly SelectOption[];
26
+ }
27
+ /** The GROUPED shape: labelled clusters, each carrying its own options. */
28
+ export interface SearchableSelectGroupsProps extends SearchableSelectSharedProps {
29
+ readonly groups: readonly SelectGroup[];
30
+ }
31
+ type SearchableSelectArgs = (SearchableSelectProps & {
32
+ readonly groups?: undefined;
33
+ }) | (SearchableSelectGroupsProps & {
34
+ readonly options?: undefined;
35
+ });
36
+ export declare function SearchableSelect(props: SearchableSelectArgs): ReactNode;
37
+ export {};
38
+ //# sourceMappingURL=searchable-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchable-select.d.ts","sourceRoot":"","sources":["../../src/components/searchable-select.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAIL,KAAK,SAAS,EAQf,MAAM,OAAO,CAAC;AAaf,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE1D,uDAAuD;AACvD,UAAU,2BAA2B;IACnC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,uFAAuF;IACvF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,oDAAoD;AACpD,MAAM,WAAW,qBAAsB,SAAQ,2BAA2B;IACxE,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C;AAED,2EAA2E;AAC3E,MAAM,WAAW,2BAA4B,SAAQ,2BAA2B;IAC9E,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;CACzC;AAED,KAAK,oBAAoB,GACrB,CAAC,qBAAqB,GAAG;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,GACzD,CAAC,2BAA2B,GAAG;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAsLrE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAiJvE"}
@@ -0,0 +1,200 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * `SearchableSelect` — a single-choice select whose popup opens with a search box:
4
+ * typing narrows the options to those whose label contains the text (the SDK's one
5
+ * search rule, `matchesSearch`). It takes the same option shapes as `Select` — a flat
6
+ * `options` run or labelled `groups`, never both — and its trigger wears the same
7
+ * class, auto-wires to an enclosing `Field` the same way, and has the same
8
+ * `combobox` role, so the two read as one control with and without search.
9
+ *
10
+ * Keyboard: on the trigger, Enter, ArrowDown or ArrowUp opens the popup as the key goes
11
+ * down (as on `Select`), Space opens it as a button press, and a printable key opens it
12
+ * with that key already typed. In the search box ArrowDown
13
+ * and ArrowUp move the highlight, Enter chooses it, and Escape closes the popup and
14
+ * returns focus to the trigger. The highlight is exposed as the search box's
15
+ * `aria-activedescendant`, so focus never leaves the box while the reader moves.
16
+ *
17
+ * Large lists: the options are indexed once per options change, a keystroke runs one
18
+ * substring test per option against that index, and the list renders from a deferred
19
+ * copy of the query so typing stays responsive. Each row is memoised on its indexed
20
+ * entry, so a keystroke re-renders only the rows whose highlight or selection changed;
21
+ * the rest are kept or removed by React without rendering.
22
+ *
23
+ * The popup is a Radix Popover, so it shares the layer, focus and dismiss stack the
24
+ * design system's dialogs use: it opens above a dialog and closes on Escape or an
25
+ * outside press without closing the dialog under it.
26
+ */
27
+ import * as RadixPopover from '@radix-ui/react-popover';
28
+ import { memo, useCallback, useDeferredValue, useEffect, useId, useMemo, useRef, useState, } from 'react';
29
+ import { SELECT_TRIGGER_CLASS } from './control-styles';
30
+ import { useFieldControl, useFieldLabelId } from './field';
31
+ import { CheckIcon, ChevronDownIcon } from './icons';
32
+ import { indexSections, shownEntry, stepEntry, visibleOptions, } from './searchable-select-model';
33
+ /** One option. Pointer handling is delegated to the listbox, so a row is pure markup. */
34
+ const OptionRow = memo(function OptionRow({ entry, id, highlighted, selected }) {
35
+ const disabled = entry.option.disabled === true;
36
+ return (_jsxs("div", { id: id, role: "option", "aria-selected": selected, "aria-disabled": disabled ? true : undefined, className: "tai-select-item", "data-position": entry.position, "data-highlighted": highlighted ? '' : undefined, "data-disabled": disabled ? '' : undefined, children: [_jsx("span", { children: entry.option.label }), selected ? (_jsx("span", { className: "tai-select-item-indicator", "aria-hidden": "true", children: _jsx(CheckIcon, {}) })) : null] }));
37
+ });
38
+ /** The position of the option row an event happened in, or `undefined` outside one. */
39
+ function positionAt(target) {
40
+ if (!(target instanceof Element))
41
+ return undefined;
42
+ const row = target.closest('[role="option"]');
43
+ if (row === null || row.dataset.disabled !== undefined)
44
+ return undefined;
45
+ const position = Number(row.dataset.position);
46
+ return Number.isInteger(position) ? position : undefined;
47
+ }
48
+ /** A key that types a character (and so starts a search from the closed trigger). */
49
+ function isPrintable(event) {
50
+ return event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey;
51
+ }
52
+ /**
53
+ * The select's interaction state over its indexed `sections`: whether the popup is
54
+ * open, the query and what it leaves visible, the highlight, and the key and pointer
55
+ * handlers that move it and choose.
56
+ *
57
+ * The highlight is held as an option VALUE, so a list that changes while open keeps
58
+ * it on the same option. Choosing and the empty status read the live query; only the
59
+ * rendered rows trail it through `useDeferredValue`, so a fast type-and-Enter picks
60
+ * from what was typed.
61
+ */
62
+ function useSearchSelection(sections, value, onValueChange) {
63
+ const listboxId = useId();
64
+ const optionId = useCallback((position) => `${listboxId}-${String(position)}`, [listboxId]);
65
+ const inputRef = useRef(null);
66
+ const [open, setOpen] = useState(false);
67
+ const [query, setQuery] = useState('');
68
+ const [wanted, setWanted] = useState(undefined);
69
+ // Only a keyboard move scrolls the highlight into view; a pointer already sees it.
70
+ const scrollOnMove = useRef(false);
71
+ const indexed = useMemo(() => sections.flatMap((section) => section.entries), [sections]);
72
+ const selectedEntry = useMemo(() => indexed.find((entry) => entry.option.value === value), [indexed, value]);
73
+ const live = useMemo(() => visibleOptions(sections, query), [sections, query]);
74
+ const deferredQuery = useDeferredValue(query);
75
+ const rendered = useMemo(() => (deferredQuery === query ? live : visibleOptions(sections, deferredQuery)), [sections, deferredQuery, query, live]);
76
+ const highlightedEntry = shownEntry(live.entries, wanted);
77
+ const highlighted = highlightedEntry?.position;
78
+ const scrollToHighlight = useCallback((position) => {
79
+ if (position === undefined)
80
+ return;
81
+ document.getElementById(optionId(position))?.scrollIntoView({ block: 'nearest' });
82
+ }, [optionId]);
83
+ useEffect(() => {
84
+ if (!scrollOnMove.current)
85
+ return;
86
+ scrollOnMove.current = false;
87
+ scrollToHighlight(highlighted);
88
+ }, [highlighted, scrollToHighlight]);
89
+ const onOpenChange = (next) => {
90
+ setOpen(next);
91
+ if (!next)
92
+ setQuery('');
93
+ else
94
+ setWanted(selectedEntry?.option.value);
95
+ };
96
+ /** Runs once the popup's rows are mounted: focus goes to the search box, and the
97
+ * highlight (the chosen option on open) is brought into view. */
98
+ const onOpened = () => {
99
+ inputRef.current?.focus();
100
+ scrollToHighlight(highlighted);
101
+ };
102
+ const choose = (entry) => {
103
+ if (entry === undefined || entry.option.disabled === true)
104
+ return;
105
+ if (entry.option.value !== value)
106
+ onValueChange(entry.option.value);
107
+ onOpenChange(false);
108
+ };
109
+ const move = (to) => {
110
+ scrollOnMove.current = true;
111
+ setWanted(to?.option.value);
112
+ };
113
+ const onSearchKeyDown = (event) => {
114
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
115
+ event.preventDefault();
116
+ move(stepEntry(live.entries, highlightedEntry, event.key === 'ArrowDown' ? 1 : -1));
117
+ }
118
+ else if (event.key === 'Enter') {
119
+ // Enter chooses; it must never submit the form the select sits in.
120
+ event.preventDefault();
121
+ choose(highlightedEntry);
122
+ }
123
+ };
124
+ const onTriggerKeyDown = (event) => {
125
+ if (open)
126
+ return;
127
+ if (event.key === 'Enter' || event.key === 'ArrowDown' || event.key === 'ArrowUp') {
128
+ // Prevented, so a native button press does not follow and toggle it shut again.
129
+ event.preventDefault();
130
+ onOpenChange(true);
131
+ }
132
+ else if (isPrintable(event) && event.key !== ' ') {
133
+ event.preventDefault();
134
+ onOpenChange(true);
135
+ setQuery(event.key);
136
+ }
137
+ };
138
+ const entryAt = (target) => {
139
+ const position = positionAt(target);
140
+ return position === undefined ? undefined : indexed[position];
141
+ };
142
+ const onListClick = (event) => {
143
+ choose(entryAt(event.target));
144
+ };
145
+ const onListPointerMove = (event) => {
146
+ const entry = entryAt(event.target);
147
+ if (entry !== undefined && entry.option.value !== wanted)
148
+ setWanted(entry.option.value);
149
+ };
150
+ return {
151
+ listboxId,
152
+ optionId,
153
+ inputRef,
154
+ open,
155
+ onOpenChange,
156
+ onOpened,
157
+ query,
158
+ setQuery,
159
+ empty: live.entries.length === 0,
160
+ rendered,
161
+ highlighted,
162
+ selectedEntry,
163
+ onSearchKeyDown,
164
+ onTriggerKeyDown,
165
+ onListClick,
166
+ onListPointerMove,
167
+ };
168
+ }
169
+ export function SearchableSelect(props) {
170
+ const { value, onValueChange, placeholder = 'Select…', disabled, 'aria-label': ariaLabel, 'aria-describedby': ownDescribedBy, searchLabel, } = props;
171
+ // Untyped JavaScript is the only caller that reaches this; dropping one list would
172
+ // lose its every entry without a word.
173
+ if ((props.options === undefined) === (props.groups === undefined)) {
174
+ throw new Error('SearchableSelect renders exactly one of `options` or `groups`; it was given both, or neither.');
175
+ }
176
+ const field = useFieldControl();
177
+ const fieldLabelId = useFieldLabelId();
178
+ const sections = useMemo(() => indexSections(props.options, props.groups), [props.options, props.groups]);
179
+ const { listboxId, optionId, inputRef, open, onOpenChange, onOpened, query, setQuery, empty, rendered, highlighted, selectedEntry, onSearchKeyDown, onTriggerKeyDown, onListClick, onListPointerMove, } = useSearchSelection(sections, value, onValueChange);
180
+ // The popup and its listbox carry the control's own name: the Field's label, else
181
+ // the caller's `aria-label`. The search box is named apart by `searchLabel`.
182
+ const popupName = field.id !== undefined && fieldLabelId !== undefined
183
+ ? { 'aria-labelledby': fieldLabelId }
184
+ : { 'aria-label': ariaLabel };
185
+ const describedBy = [ownDescribedBy, field['aria-describedby']].filter((id) => id !== undefined);
186
+ const rows = (entries) => entries.map((entry) => (_jsx(OptionRow, { entry: entry, id: optionId(entry.position), highlighted: entry.position === highlighted, selected: entry === selectedEntry }, entry.position)));
187
+ return (_jsxs(RadixPopover.Root, { open: open, onOpenChange: onOpenChange, children: [_jsxs(RadixPopover.Trigger, { type: "button", role: "combobox", id: field.id, className: SELECT_TRIGGER_CLASS, disabled: disabled, "aria-label": field.id === undefined ? ariaLabel : undefined, "aria-describedby": describedBy.length > 0 ? describedBy.join(' ') : undefined, "aria-invalid": field['aria-invalid'], onKeyDown: onTriggerKeyDown, children: [_jsx("span", { children: selectedEntry?.option.label ?? (value === '' ? placeholder : value) }), _jsx(ChevronDownIcon, {})] }), _jsx(RadixPopover.Portal, { children: _jsxs(RadixPopover.Content, { className: "tai-select-content tai-search-select-content", align: "start", sideOffset: 4, ...popupName, onOpenAutoFocus: (event) => {
188
+ event.preventDefault();
189
+ onOpened();
190
+ }, children: [_jsx("div", { className: "tai-search-select-search", children: _jsx("input", { ref: inputRef, type: "text", role: "combobox", className: "tai-input", "aria-label": searchLabel, "aria-expanded": "true", "aria-controls": listboxId, "aria-autocomplete": "list", "aria-activedescendant": highlighted === undefined ? undefined : optionId(highlighted), autoComplete: "off", spellCheck: false, placeholder: searchLabel, value: query, onChange: (event) => {
191
+ setQuery(event.target.value);
192
+ }, onKeyDown: onSearchKeyDown }) }), _jsx("div", { id: listboxId, role: "listbox", ...popupName, tabIndex: -1, className: "tai-select-viewport tai-search-select-list", onMouseDown: (event) => {
193
+ event.preventDefault();
194
+ }, onClick: onListClick, onPointerMove: onListPointerMove, children: rendered.sections.map((section) => section.label === undefined ? (rows(section.entries)) : (_jsx(SectionGroup, { label: section.label, children: rows(section.entries) }, section.label))) }), empty ? (_jsx("p", { role: "status", className: "tai-status tai-search-select-empty", children: query.trim() === '' ? 'Nothing to choose.' : `Nothing matches “${query.trim()}”.` })) : null] }) })] }));
195
+ }
196
+ function SectionGroup({ label, children, }) {
197
+ const labelId = useId();
198
+ return (_jsxs("div", { role: "group", "aria-labelledby": labelId, children: [_jsx("div", { id: labelId, className: "tai-select-group-label tai-label", children: label }), children] }));
199
+ }
200
+ //# sourceMappingURL=searchable-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchable-select.js","sourceRoot":"","sources":["../../src/components/searchable-select.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAEL,IAAI,EAGJ,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EACL,aAAa,EAGb,UAAU,EACV,SAAS,EACT,cAAc,GACf,MAAM,2BAA2B,CAAC;AA6CnC,yFAAyF;AACzF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAkB;IAC5F,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;IAChD,OAAO,CACL,eACE,EAAE,EAAE,EAAE,EACN,IAAI,EAAC,QAAQ,mBACE,QAAQ,mBACR,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAC1C,SAAS,EAAC,iBAAiB,mBACZ,KAAK,CAAC,QAAQ,sBACX,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,mBAC/B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,aAExC,yBAAO,KAAK,CAAC,MAAM,CAAC,KAAK,GAAQ,EAChC,QAAQ,CAAC,CAAC,CAAC,CACV,eAAM,SAAS,EAAC,2BAA2B,iBAAa,MAAM,YAC5D,KAAC,SAAS,KAAG,GACR,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,uFAAuF;AACvF,SAAS,UAAU,CAAC,MAAmB;IACrC,IAAI,CAAC,CAAC,MAAM,YAAY,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAc,iBAAiB,CAAC,CAAC;IAC3D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,qFAAqF;AACrF,SAAS,WAAW,CAAC,KAAoB;IACvC,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACrF,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CACzB,QAAkC,EAClC,KAAa,EACb,aAAsC;IAEtC,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,QAAgB,EAAE,EAAE,CAAC,GAAG,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,EACxD,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IACpE,mFAAmF;IACnF,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,EAC3D,CAAC,OAAO,EAAE,KAAK,CAAC,CACjB,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,EAChF,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CACvC,CAAC;IACF,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,gBAAgB,EAAE,QAAQ,CAAC;IAE/C,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,QAA4B,EAAE,EAAE;QAC/B,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO;QACnC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACpF,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE,OAAO;QAClC,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;QAC7B,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,CAAC,IAAa,EAAQ,EAAE;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,CAAC,IAAI;YAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;;YACnB,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF;sEACkE;IAClE,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1B,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,KAA8B,EAAQ,EAAE;QACtD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO;QAClE,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK;YAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpE,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,EAA2B,EAAQ,EAAE;QACjD,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,KAAsC,EAAQ,EAAE;QACvE,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACzD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACjC,mEAAmE;YACnE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,KAAuC,EAAQ,EAAE;QACzE,IAAI,IAAI;YAAE,OAAO;QACjB,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAClF,gFAAgF;YAChF,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACnD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,MAAmB,EAA2B,EAAE;QAC/D,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,KAAiC,EAAQ,EAAE;QAC9D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,MAAM,iBAAiB,GAAG,CAAC,KAAiC,EAAQ,EAAE;QACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM;YAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1F,CAAC,CAAC;IAEF,OAAO;QACL,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,IAAI;QACJ,YAAY;QACZ,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAChC,QAAQ;QACR,WAAW;QACX,aAAa;QACb,eAAe;QACf,gBAAgB;QAChB,WAAW;QACX,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAA2B;IAC1D,MAAM,EACJ,KAAK,EACL,aAAa,EACb,WAAW,GAAG,SAAS,EACvB,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,kBAAkB,EAAE,cAAc,EAClC,WAAW,GACZ,GAAG,KAAK,CAAC;IACV,mFAAmF;IACnF,uCAAuC;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAChD,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAC9B,CAAC;IACF,MAAM,EACJ,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,GAClB,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACvD,kFAAkF;IAClF,6EAA6E;IAC7E,MAAM,SAAS,GACb,KAAK,CAAC,EAAE,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS;QAClD,CAAC,CAAC,EAAE,iBAAiB,EAAE,YAAY,EAAE;QACrC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CACpE,CAAC,EAAE,EAAgB,EAAE,CAAC,EAAE,KAAK,SAAS,CACvC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,OAA+B,EAAa,EAAE,CAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,KAAC,SAAS,IAER,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC5B,WAAW,EAAE,KAAK,CAAC,QAAQ,KAAK,WAAW,EAC3C,QAAQ,EAAE,KAAK,KAAK,aAAa,IAJ5B,KAAK,CAAC,QAAQ,CAKnB,CACH,CAAC,CAAC;IAEL,OAAO,CACL,MAAC,YAAY,CAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,aACvD,MAAC,YAAY,CAAC,OAAO,IACnB,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,UAAU,EACf,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,SAAS,EAAE,oBAAoB,EAC/B,QAAQ,EAAE,QAAQ,gBAGN,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,sBACxC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,kBAC9D,KAAK,CAAC,cAAc,CAAC,EACnC,SAAS,EAAE,gBAAgB,aAE3B,yBAAO,aAAa,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAQ,EAClF,KAAC,eAAe,KAAG,IACE,EACvB,KAAC,YAAY,CAAC,MAAM,cAClB,MAAC,YAAY,CAAC,OAAO,IACnB,SAAS,EAAC,8CAA8C,EACxD,KAAK,EAAC,OAAO,EACb,UAAU,EAAE,CAAC,KACT,SAAS,EACb,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;wBACzB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,QAAQ,EAAE,CAAC;oBACb,CAAC,aAED,cAAK,SAAS,EAAC,0BAA0B,YACvC,gBACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,WAAW,gBACT,WAAW,mBACT,MAAM,mBACL,SAAS,uBACN,MAAM,2BACD,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EACpF,YAAY,EAAC,KAAK,EAClB,UAAU,EAAE,KAAK,EACjB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oCAClB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCAC/B,CAAC,EACD,SAAS,EAAE,eAAe,GAC1B,GACE,EAIN,cACE,EAAE,EAAE,SAAS,EACb,IAAI,EAAC,SAAS,KACV,SAAS,EACb,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAC,4CAA4C,EACtD,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;gCACrB,KAAK,CAAC,cAAc,EAAE,CAAC;4BACzB,CAAC,EACD,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,iBAAiB,YAE/B,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACjC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CACtB,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IAAqB,KAAK,EAAE,OAAO,CAAC,KAAK,YACnD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IADL,OAAO,CAAC,KAAK,CAEjB,CAChB,CACF,GACG,EACL,KAAK,CAAC,CAAC,CAAC,CACP,YAAG,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,oCAAoC,YAC5D,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,KAAK,CAAC,IAAI,EAAE,IAAI,GAChF,CACL,CAAC,CAAC,CAAC,IAAI,IACa,GACH,IACJ,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,QAAQ,GAIT;IACC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;IACxB,OAAO,CACL,eAAK,IAAI,EAAC,OAAO,qBAAkB,OAAO,aACxC,cAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,kCAAkC,YAC3D,KAAK,GACF,EACL,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}