@flanksource/clicky-ui 0.3.9 → 0.3.11

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 (1216) hide show
  1. package/NOTICE.md +89 -0
  2. package/README.md +33 -2
  3. package/dist/ai.cjs +71 -5
  4. package/dist/ai.cjs.map +1 -1
  5. package/dist/ai.js +71 -5
  6. package/dist/ai.js.map +1 -1
  7. package/dist/chat.cjs +17 -13
  8. package/dist/chat.cjs.map +1 -1
  9. package/dist/chat.js +8 -4
  10. package/dist/clicky.d.ts +1 -1
  11. package/dist/clicky.d.ts.map +1 -1
  12. package/dist/comments/CommentCard.cjs +84 -38
  13. package/dist/comments/CommentCard.cjs.map +1 -1
  14. package/dist/comments/CommentCard.d.ts +1 -1
  15. package/dist/comments/CommentCard.d.ts.map +1 -1
  16. package/dist/comments/CommentCard.js +85 -39
  17. package/dist/comments/CommentCard.js.map +1 -1
  18. package/dist/comments/CommentComposer.cjs +21 -11
  19. package/dist/comments/CommentComposer.cjs.map +1 -1
  20. package/dist/comments/CommentComposer.d.ts.map +1 -1
  21. package/dist/comments/CommentComposer.js +21 -11
  22. package/dist/comments/CommentComposer.js.map +1 -1
  23. package/dist/comments/CommentProvider.cjs +84 -12
  24. package/dist/comments/CommentProvider.cjs.map +1 -1
  25. package/dist/comments/CommentProvider.d.ts +4 -2
  26. package/dist/comments/CommentProvider.d.ts.map +1 -1
  27. package/dist/comments/CommentProvider.js +86 -14
  28. package/dist/comments/CommentProvider.js.map +1 -1
  29. package/dist/comments/CommentSidePanel.cjs +116 -38
  30. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  31. package/dist/comments/CommentSidePanel.d.ts +2 -0
  32. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  33. package/dist/comments/CommentSidePanel.js +117 -39
  34. package/dist/comments/CommentSidePanel.js.map +1 -1
  35. package/dist/comments/CommentThread.cjs +4 -0
  36. package/dist/comments/CommentThread.cjs.map +1 -1
  37. package/dist/comments/CommentThread.d.ts +5 -1
  38. package/dist/comments/CommentThread.d.ts.map +1 -1
  39. package/dist/comments/CommentThread.js +4 -0
  40. package/dist/comments/CommentThread.js.map +1 -1
  41. package/dist/comments/CommentThreadList.cjs +17 -5
  42. package/dist/comments/CommentThreadList.cjs.map +1 -1
  43. package/dist/comments/CommentThreadList.d.ts +3 -1
  44. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  45. package/dist/comments/CommentThreadList.js +18 -6
  46. package/dist/comments/CommentThreadList.js.map +1 -1
  47. package/dist/comments/comment-context.cjs +88 -0
  48. package/dist/comments/comment-context.cjs.map +1 -1
  49. package/dist/comments/comment-context.d.ts +26 -0
  50. package/dist/comments/comment-context.d.ts.map +1 -1
  51. package/dist/comments/comment-context.js +89 -1
  52. package/dist/comments/comment-context.js.map +1 -1
  53. package/dist/comments.cjs +3 -0
  54. package/dist/comments.cjs.map +1 -1
  55. package/dist/comments.d.ts +1 -1
  56. package/dist/comments.d.ts.map +1 -1
  57. package/dist/comments.js +4 -1
  58. package/dist/components/Combobox.cjs +145 -34
  59. package/dist/components/Combobox.cjs.map +1 -1
  60. package/dist/components/Combobox.d.ts +24 -1
  61. package/dist/components/Combobox.d.ts.map +1 -1
  62. package/dist/components/Combobox.js +147 -36
  63. package/dist/components/Combobox.js.map +1 -1
  64. package/dist/components/DatePicker.cjs +1 -1
  65. package/dist/components/DatePicker.cjs.map +1 -1
  66. package/dist/components/DatePicker.js +1 -1
  67. package/dist/components/DatePicker.js.map +1 -1
  68. package/dist/components/DateTimePicker.cjs +1 -1
  69. package/dist/components/DateTimePicker.cjs.map +1 -1
  70. package/dist/components/DateTimePicker.js +1 -1
  71. package/dist/components/DateTimePicker.js.map +1 -1
  72. package/dist/components/FilterBar.cjs +41 -459
  73. package/dist/components/FilterBar.cjs.map +1 -1
  74. package/dist/components/FilterBar.d.ts +4 -62
  75. package/dist/components/FilterBar.d.ts.map +1 -1
  76. package/dist/components/FilterBar.js +13 -430
  77. package/dist/components/FilterBar.js.map +1 -1
  78. package/dist/components/InputField.cjs +97 -0
  79. package/dist/components/InputField.cjs.map +1 -0
  80. package/dist/components/InputField.d.ts +42 -0
  81. package/dist/components/InputField.d.ts.map +1 -0
  82. package/dist/components/InputField.js +97 -0
  83. package/dist/components/InputField.js.map +1 -0
  84. package/dist/components/JsonSchemaForm.cjs +90 -15
  85. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  86. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  87. package/dist/components/JsonSchemaForm.js +92 -17
  88. package/dist/components/JsonSchemaForm.js.map +1 -1
  89. package/dist/components/MdxEditorField.cjs.map +1 -1
  90. package/dist/components/MdxEditorField.d.ts +1 -1
  91. package/dist/components/MdxEditorField.d.ts.map +1 -1
  92. package/dist/components/MdxEditorField.js.map +1 -1
  93. package/dist/components/MdxEditorToolbar.cjs +6 -1
  94. package/dist/components/MdxEditorToolbar.cjs.map +1 -1
  95. package/dist/components/MdxEditorToolbar.d.ts.map +1 -1
  96. package/dist/components/MdxEditorToolbar.js +6 -1
  97. package/dist/components/MdxEditorToolbar.js.map +1 -1
  98. package/dist/components/MultiSelect.cjs +0 -1
  99. package/dist/components/MultiSelect.cjs.map +1 -1
  100. package/dist/components/MultiSelect.d.ts.map +1 -1
  101. package/dist/components/MultiSelect.js +0 -1
  102. package/dist/components/MultiSelect.js.map +1 -1
  103. package/dist/components/SearchInput.cjs +14 -43
  104. package/dist/components/SearchInput.cjs.map +1 -1
  105. package/dist/components/SearchInput.d.ts +6 -5
  106. package/dist/components/SearchInput.d.ts.map +1 -1
  107. package/dist/components/SearchInput.js +15 -44
  108. package/dist/components/SearchInput.js.map +1 -1
  109. package/dist/components/SecretKeySelector.cjs +155 -67
  110. package/dist/components/SecretKeySelector.cjs.map +1 -1
  111. package/dist/components/SecretKeySelector.d.ts +34 -16
  112. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  113. package/dist/components/SecretKeySelector.js +158 -70
  114. package/dist/components/SecretKeySelector.js.map +1 -1
  115. package/dist/components/SecretKeySelector.model.cjs +32 -0
  116. package/dist/components/SecretKeySelector.model.cjs.map +1 -0
  117. package/dist/components/SecretKeySelector.model.d.ts +4 -0
  118. package/dist/components/SecretKeySelector.model.d.ts.map +1 -0
  119. package/dist/components/SecretKeySelector.model.js +32 -0
  120. package/dist/components/SecretKeySelector.model.js.map +1 -0
  121. package/dist/components/SegmentedControl.cjs +41 -6
  122. package/dist/components/SegmentedControl.cjs.map +1 -1
  123. package/dist/components/SegmentedControl.d.ts +7 -3
  124. package/dist/components/SegmentedControl.d.ts.map +1 -1
  125. package/dist/components/SegmentedControl.js +41 -6
  126. package/dist/components/SegmentedControl.js.map +1 -1
  127. package/dist/components/filter-bar-context.cjs +10 -0
  128. package/dist/components/filter-bar-context.cjs.map +1 -0
  129. package/dist/components/filter-bar-context.d.ts +5 -0
  130. package/dist/components/filter-bar-context.d.ts.map +1 -0
  131. package/dist/components/filter-bar-context.js +10 -0
  132. package/dist/components/filter-bar-context.js.map +1 -0
  133. package/dist/components/filter-bar-field-utils.cjs +119 -0
  134. package/dist/components/filter-bar-field-utils.cjs.map +1 -0
  135. package/dist/components/filter-bar-field-utils.d.ts +21 -0
  136. package/dist/components/filter-bar-field-utils.d.ts.map +1 -0
  137. package/dist/components/filter-bar-field-utils.js +119 -0
  138. package/dist/components/filter-bar-field-utils.js.map +1 -0
  139. package/dist/components/filter-bar-multi.cjs +193 -0
  140. package/dist/components/filter-bar-multi.cjs.map +1 -0
  141. package/dist/components/filter-bar-multi.d.ts +74 -0
  142. package/dist/components/filter-bar-multi.d.ts.map +1 -0
  143. package/dist/components/filter-bar-multi.js +193 -0
  144. package/dist/components/filter-bar-multi.js.map +1 -0
  145. package/dist/components/json-schema-form-array.cjs +81 -10
  146. package/dist/components/json-schema-form-array.cjs.map +1 -1
  147. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  148. package/dist/components/json-schema-form-array.js +82 -11
  149. package/dist/components/json-schema-form-array.js.map +1 -1
  150. package/dist/components/json-schema-form-fields.cjs +156 -24
  151. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  152. package/dist/components/json-schema-form-fields.d.ts +9 -1
  153. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  154. package/dist/components/json-schema-form-fields.js +156 -24
  155. package/dist/components/json-schema-form-fields.js.map +1 -1
  156. package/dist/components/json-schema-form-object.cjs +35 -12
  157. package/dist/components/json-schema-form-object.cjs.map +1 -1
  158. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  159. package/dist/components/json-schema-form-object.js +37 -14
  160. package/dist/components/json-schema-form-object.js.map +1 -1
  161. package/dist/components/json-schema-form-render.cjs +21 -3
  162. package/dist/components/json-schema-form-render.cjs.map +1 -1
  163. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  164. package/dist/components/json-schema-form-render.js +22 -4
  165. package/dist/components/json-schema-form-render.js.map +1 -1
  166. package/dist/components/json-schema-form-resolve.cjs +123 -13
  167. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  168. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  169. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  170. package/dist/components/json-schema-form-resolve.js +123 -13
  171. package/dist/components/json-schema-form-resolve.js.map +1 -1
  172. package/dist/components/json-schema-form-types.d.ts +30 -1
  173. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  174. package/dist/components/json-schema-form-utils.cjs +19 -0
  175. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  176. package/dist/components/json-schema-form-utils.d.ts +3 -0
  177. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  178. package/dist/components/json-schema-form-utils.js +19 -0
  179. package/dist/components/json-schema-form-utils.js.map +1 -1
  180. package/dist/components/loading.cjs +17 -0
  181. package/dist/components/loading.cjs.map +1 -1
  182. package/dist/components/loading.d.ts +9 -0
  183. package/dist/components/loading.d.ts.map +1 -1
  184. package/dist/components/loading.js +17 -0
  185. package/dist/components/loading.js.map +1 -1
  186. package/dist/components/mdx-editor-field-plugins.cjs +28 -4
  187. package/dist/components/mdx-editor-field-plugins.cjs.map +1 -1
  188. package/dist/components/mdx-editor-field-plugins.d.ts.map +1 -1
  189. package/dist/components/mdx-editor-field-plugins.js +28 -4
  190. package/dist/components/mdx-editor-field-plugins.js.map +1 -1
  191. package/dist/components/mdx-editor-options.d.ts +23 -1
  192. package/dist/components/mdx-editor-options.d.ts.map +1 -1
  193. package/dist/components.cjs +13 -1
  194. package/dist/components.cjs.map +1 -1
  195. package/dist/components.d.ts +20 -16
  196. package/dist/components.d.ts.map +1 -1
  197. package/dist/components.js +14 -2
  198. package/dist/components.js.map +1 -1
  199. package/dist/data/Clicky.cjs +301 -51
  200. package/dist/data/Clicky.cjs.map +1 -1
  201. package/dist/data/Clicky.d.ts +21 -3
  202. package/dist/data/Clicky.d.ts.map +1 -1
  203. package/dist/data/Clicky.js +301 -51
  204. package/dist/data/Clicky.js.map +1 -1
  205. package/dist/data/CodeBlock.cjs +100 -20
  206. package/dist/data/CodeBlock.cjs.map +1 -1
  207. package/dist/data/CodeBlock.d.ts +18 -1
  208. package/dist/data/CodeBlock.d.ts.map +1 -1
  209. package/dist/data/CodeBlock.js +101 -21
  210. package/dist/data/CodeBlock.js.map +1 -1
  211. package/dist/data/CodeDiff.cjs +221 -0
  212. package/dist/data/CodeDiff.cjs.map +1 -0
  213. package/dist/data/CodeDiff.d.ts +24 -0
  214. package/dist/data/CodeDiff.d.ts.map +1 -0
  215. package/dist/data/CodeDiff.js +221 -0
  216. package/dist/data/CodeDiff.js.map +1 -0
  217. package/dist/data/DataTable.cjs +359 -219
  218. package/dist/data/DataTable.cjs.map +1 -1
  219. package/dist/data/DataTable.d.ts +12 -0
  220. package/dist/data/DataTable.d.ts.map +1 -1
  221. package/dist/data/DataTable.js +353 -213
  222. package/dist/data/DataTable.js.map +1 -1
  223. package/dist/data/FilterPill.cjs +43 -35
  224. package/dist/data/FilterPill.cjs.map +1 -1
  225. package/dist/data/FilterPill.d.ts +9 -1
  226. package/dist/data/FilterPill.d.ts.map +1 -1
  227. package/dist/data/FilterPill.js +43 -35
  228. package/dist/data/FilterPill.js.map +1 -1
  229. package/dist/data/FixtureEditor/FenceForm.cjs +123 -0
  230. package/dist/data/FixtureEditor/FenceForm.cjs.map +1 -0
  231. package/dist/data/FixtureEditor/FenceForm.d.ts +14 -0
  232. package/dist/data/FixtureEditor/FenceForm.d.ts.map +1 -0
  233. package/dist/data/FixtureEditor/FenceForm.js +123 -0
  234. package/dist/data/FixtureEditor/FenceForm.js.map +1 -0
  235. package/dist/data/FixtureEditor/FixtureEditor.cjs +236 -0
  236. package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -0
  237. package/dist/data/FixtureEditor/FixtureEditor.d.ts +3 -0
  238. package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -0
  239. package/dist/data/FixtureEditor/FixtureEditor.js +236 -0
  240. package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -0
  241. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.cjs +128 -0
  242. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.cjs.map +1 -0
  243. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.d.ts +8 -0
  244. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.d.ts.map +1 -0
  245. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.js +128 -0
  246. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.js.map +1 -0
  247. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs +148 -0
  248. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs.map +1 -0
  249. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.d.ts +11 -0
  250. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.d.ts.map +1 -0
  251. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js +148 -0
  252. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js.map +1 -0
  253. package/dist/data/FixtureEditor/RawFenceEditor.cjs +35 -0
  254. package/dist/data/FixtureEditor/RawFenceEditor.cjs.map +1 -0
  255. package/dist/data/FixtureEditor/RawFenceEditor.d.ts +11 -0
  256. package/dist/data/FixtureEditor/RawFenceEditor.d.ts.map +1 -0
  257. package/dist/data/FixtureEditor/RawFenceEditor.js +35 -0
  258. package/dist/data/FixtureEditor/RawFenceEditor.js.map +1 -0
  259. package/dist/data/FixtureEditor/fixture-blocks.cjs +130 -0
  260. package/dist/data/FixtureEditor/fixture-blocks.cjs.map +1 -0
  261. package/dist/data/FixtureEditor/fixture-blocks.d.ts +26 -0
  262. package/dist/data/FixtureEditor/fixture-blocks.d.ts.map +1 -0
  263. package/dist/data/FixtureEditor/fixture-blocks.js +130 -0
  264. package/dist/data/FixtureEditor/fixture-blocks.js.map +1 -0
  265. package/dist/data/FixtureEditor/fixture-code-block-model.cjs +17 -0
  266. package/dist/data/FixtureEditor/fixture-code-block-model.cjs.map +1 -0
  267. package/dist/data/FixtureEditor/fixture-code-block-model.d.ts +3 -0
  268. package/dist/data/FixtureEditor/fixture-code-block-model.d.ts.map +1 -0
  269. package/dist/data/FixtureEditor/fixture-code-block-model.js +17 -0
  270. package/dist/data/FixtureEditor/fixture-code-block-model.js.map +1 -0
  271. package/dist/data/FixtureEditor/fixture-frontmatter.cjs +300 -0
  272. package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -0
  273. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts +32 -0
  274. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -0
  275. package/dist/data/FixtureEditor/fixture-frontmatter.js +300 -0
  276. package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -0
  277. package/dist/data/FixtureEditor/index.d.ts +5 -0
  278. package/dist/data/FixtureEditor/index.d.ts.map +1 -0
  279. package/dist/data/FixtureEditor/types.d.ts +44 -0
  280. package/dist/data/FixtureEditor/types.d.ts.map +1 -0
  281. package/dist/data/LogDetails.cjs +4 -4
  282. package/dist/data/LogDetails.cjs.map +1 -1
  283. package/dist/data/LogDetails.js +4 -4
  284. package/dist/data/LogDetails.js.map +1 -1
  285. package/dist/data/Markdown.cjs +29 -1
  286. package/dist/data/Markdown.cjs.map +1 -1
  287. package/dist/data/Markdown.d.ts +3 -2
  288. package/dist/data/Markdown.d.ts.map +1 -1
  289. package/dist/data/Markdown.js +30 -2
  290. package/dist/data/Markdown.js.map +1 -1
  291. package/dist/data/Properties.cjs +160 -40
  292. package/dist/data/Properties.cjs.map +1 -1
  293. package/dist/data/Properties.d.ts +8 -2
  294. package/dist/data/Properties.d.ts.map +1 -1
  295. package/dist/data/Properties.js +160 -40
  296. package/dist/data/Properties.js.map +1 -1
  297. package/dist/data/SchemaViewer.cjs +1 -1
  298. package/dist/data/SchemaViewer.cjs.map +1 -1
  299. package/dist/data/SchemaViewer.js +2 -2
  300. package/dist/data/SchemaViewer.js.map +1 -1
  301. package/dist/data/ai/ChatWindow.cjs +336 -18
  302. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  303. package/dist/data/ai/ChatWindow.d.ts +13 -4
  304. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  305. package/dist/data/ai/ChatWindow.js +336 -18
  306. package/dist/data/ai/ChatWindow.js.map +1 -1
  307. package/dist/data/ai/ChatWindow.test-utils.d.ts +12 -0
  308. package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -0
  309. package/dist/data/ai/PolicyTree.cjs +265 -0
  310. package/dist/data/ai/PolicyTree.cjs.map +1 -0
  311. package/dist/data/ai/PolicyTree.d.ts +33 -0
  312. package/dist/data/ai/PolicyTree.d.ts.map +1 -0
  313. package/dist/data/ai/PolicyTree.js +265 -0
  314. package/dist/data/ai/PolicyTree.js.map +1 -0
  315. package/dist/data/ai/PromptPicker/PromptPicker.cjs +251 -0
  316. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -0
  317. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +31 -0
  318. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -0
  319. package/dist/data/ai/PromptPicker/PromptPicker.js +251 -0
  320. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -0
  321. package/dist/data/ai/PromptPicker/index.d.ts +4 -0
  322. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -0
  323. package/dist/data/ai/PromptPicker/prompt-runtime.cjs +39 -0
  324. package/dist/data/ai/PromptPicker/prompt-runtime.cjs.map +1 -0
  325. package/dist/data/ai/PromptPicker/prompt-runtime.d.ts +9 -0
  326. package/dist/data/ai/PromptPicker/prompt-runtime.d.ts.map +1 -0
  327. package/dist/data/ai/PromptPicker/prompt-runtime.js +39 -0
  328. package/dist/data/ai/PromptPicker/prompt-runtime.js.map +1 -0
  329. package/dist/data/ai/PromptPicker/types.d.ts +25 -0
  330. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -0
  331. package/dist/data/ai/PromptRunEditor/index.cjs +242 -0
  332. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -0
  333. package/dist/data/ai/PromptRunEditor/index.d.ts +42 -0
  334. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -0
  335. package/dist/data/ai/PromptRunEditor/index.js +242 -0
  336. package/dist/data/ai/PromptRunEditor/index.js.map +1 -0
  337. package/dist/data/ai/RuntimeModePicker.cjs +61 -0
  338. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -0
  339. package/dist/data/ai/RuntimeModePicker.d.ts +12 -0
  340. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -0
  341. package/dist/data/ai/RuntimeModePicker.js +61 -0
  342. package/dist/data/ai/RuntimeModePicker.js.map +1 -0
  343. package/dist/data/ai/SessionInspector.cjs +432 -0
  344. package/dist/data/ai/SessionInspector.cjs.map +1 -0
  345. package/dist/data/ai/SessionInspector.d.ts +11 -0
  346. package/dist/data/ai/SessionInspector.d.ts.map +1 -0
  347. package/dist/data/ai/SessionInspector.js +432 -0
  348. package/dist/data/ai/SessionInspector.js.map +1 -0
  349. package/dist/data/ai/SessionViewer.cjs +208 -196
  350. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  351. package/dist/data/ai/SessionViewer.d.ts +39 -3
  352. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  353. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
  354. package/dist/data/ai/SessionViewer.grouping.cjs +44 -0
  355. package/dist/data/ai/SessionViewer.grouping.cjs.map +1 -0
  356. package/dist/data/ai/SessionViewer.grouping.d.ts +17 -0
  357. package/dist/data/ai/SessionViewer.grouping.d.ts.map +1 -0
  358. package/dist/data/ai/SessionViewer.grouping.js +44 -0
  359. package/dist/data/ai/SessionViewer.grouping.js.map +1 -0
  360. package/dist/data/ai/SessionViewer.input.cjs +219 -0
  361. package/dist/data/ai/SessionViewer.input.cjs.map +1 -0
  362. package/dist/data/ai/SessionViewer.input.d.ts +44 -0
  363. package/dist/data/ai/SessionViewer.input.d.ts.map +1 -0
  364. package/dist/data/ai/SessionViewer.input.js +219 -0
  365. package/dist/data/ai/SessionViewer.input.js.map +1 -0
  366. package/dist/data/ai/SessionViewer.js +209 -197
  367. package/dist/data/ai/SessionViewer.js.map +1 -1
  368. package/dist/data/ai/SessionViewer.model.cjs +203 -105
  369. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  370. package/dist/data/ai/SessionViewer.model.d.ts +45 -7
  371. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  372. package/dist/data/ai/SessionViewer.model.js +203 -105
  373. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  374. package/dist/data/ai/SessionViewer.rows.cjs +751 -0
  375. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -0
  376. package/dist/data/ai/SessionViewer.rows.d.ts +20 -0
  377. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -0
  378. package/dist/data/ai/SessionViewer.rows.js +751 -0
  379. package/dist/data/ai/SessionViewer.rows.js.map +1 -0
  380. package/dist/data/ai/SessionViewer.unified.d.ts +193 -0
  381. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -0
  382. package/dist/data/ai/SessionViewerMenu.cjs +57 -68
  383. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  384. package/dist/data/ai/SessionViewerMenu.d.ts +3 -3
  385. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  386. package/dist/data/ai/SessionViewerMenu.js +58 -69
  387. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  388. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.cjs +25 -0
  389. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.cjs.map +1 -0
  390. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.d.ts +12 -0
  391. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.d.ts.map +1 -0
  392. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.js +25 -0
  393. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.js.map +1 -0
  394. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +44 -0
  395. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -0
  396. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +6 -0
  397. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -0
  398. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +44 -0
  399. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -0
  400. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs +137 -0
  401. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs.map +1 -0
  402. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts +12 -0
  403. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts.map +1 -0
  404. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js +137 -0
  405. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js.map +1 -0
  406. package/dist/data/ai/SpecRuntimeEditor/Footer.cjs +29 -0
  407. package/dist/data/ai/SpecRuntimeEditor/Footer.cjs.map +1 -0
  408. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +8 -0
  409. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts.map +1 -0
  410. package/dist/data/ai/SpecRuntimeEditor/Footer.js +29 -0
  411. package/dist/data/ai/SpecRuntimeEditor/Footer.js.map +1 -0
  412. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +481 -0
  413. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -0
  414. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +16 -0
  415. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -0
  416. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +481 -0
  417. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -0
  418. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs +421 -0
  419. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs.map +1 -0
  420. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts +17 -0
  421. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts.map +1 -0
  422. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js +421 -0
  423. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js.map +1 -0
  424. package/dist/data/ai/SpecRuntimeEditor/PresetCards.d.ts +8 -0
  425. package/dist/data/ai/SpecRuntimeEditor/PresetCards.d.ts.map +1 -0
  426. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +98 -0
  427. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -0
  428. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts +10 -0
  429. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -0
  430. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +98 -0
  431. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -0
  432. package/dist/data/ai/SpecRuntimeEditor/Rail.cjs +23 -0
  433. package/dist/data/ai/SpecRuntimeEditor/Rail.cjs.map +1 -0
  434. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +7 -0
  435. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts.map +1 -0
  436. package/dist/data/ai/SpecRuntimeEditor/Rail.js +23 -0
  437. package/dist/data/ai/SpecRuntimeEditor/Rail.js.map +1 -0
  438. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs +77 -0
  439. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs.map +1 -0
  440. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +14 -0
  441. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts.map +1 -0
  442. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js +77 -0
  443. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js.map +1 -0
  444. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +65 -0
  445. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -0
  446. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +12 -0
  447. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -0
  448. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +65 -0
  449. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -0
  450. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +227 -0
  451. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -0
  452. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts +8 -0
  453. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -0
  454. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +227 -0
  455. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -0
  456. package/dist/data/ai/SpecRuntimeEditor/env-model.cjs +45 -0
  457. package/dist/data/ai/SpecRuntimeEditor/env-model.cjs.map +1 -0
  458. package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts +7 -0
  459. package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts.map +1 -0
  460. package/dist/data/ai/SpecRuntimeEditor/env-model.js +45 -0
  461. package/dist/data/ai/SpecRuntimeEditor/env-model.js.map +1 -0
  462. package/dist/data/ai/SpecRuntimeEditor/fields.cjs +287 -0
  463. package/dist/data/ai/SpecRuntimeEditor/fields.cjs.map +1 -0
  464. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +79 -0
  465. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts.map +1 -0
  466. package/dist/data/ai/SpecRuntimeEditor/fields.js +287 -0
  467. package/dist/data/ai/SpecRuntimeEditor/fields.js.map +1 -0
  468. package/dist/data/ai/SpecRuntimeEditor/index.cjs +213 -0
  469. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -0
  470. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +41 -0
  471. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -0
  472. package/dist/data/ai/SpecRuntimeEditor/index.js +213 -0
  473. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -0
  474. package/dist/data/ai/SpecRuntimeEditor/permissions-model.cjs +252 -0
  475. package/dist/data/ai/SpecRuntimeEditor/permissions-model.cjs.map +1 -0
  476. package/dist/data/ai/SpecRuntimeEditor/permissions-model.d.ts +36 -0
  477. package/dist/data/ai/SpecRuntimeEditor/permissions-model.d.ts.map +1 -0
  478. package/dist/data/ai/SpecRuntimeEditor/permissions-model.js +252 -0
  479. package/dist/data/ai/SpecRuntimeEditor/permissions-model.js.map +1 -0
  480. package/dist/data/ai/SpecRuntimeEditor/presets.cjs +214 -0
  481. package/dist/data/ai/SpecRuntimeEditor/presets.cjs.map +1 -0
  482. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts +35 -0
  483. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts.map +1 -0
  484. package/dist/data/ai/SpecRuntimeEditor/presets.js +214 -0
  485. package/dist/data/ai/SpecRuntimeEditor/presets.js.map +1 -0
  486. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs +15 -0
  487. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -0
  488. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +13 -0
  489. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -0
  490. package/dist/data/ai/SpecRuntimeEditor/summaries.js +15 -0
  491. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -0
  492. package/dist/data/ai/SpecRuntimeEditor/types.cjs +74 -0
  493. package/dist/data/ai/SpecRuntimeEditor/types.cjs.map +1 -0
  494. package/dist/data/ai/SpecRuntimeEditor/types.d.ts +19 -0
  495. package/dist/data/ai/SpecRuntimeEditor/types.d.ts.map +1 -0
  496. package/dist/data/ai/SpecRuntimeEditor/types.js +74 -0
  497. package/dist/data/ai/SpecRuntimeEditor/types.js.map +1 -0
  498. package/dist/data/ai/SpecRuntimeEditor/update.cjs +144 -0
  499. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -0
  500. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +28 -0
  501. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -0
  502. package/dist/data/ai/SpecRuntimeEditor/update.js +144 -0
  503. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -0
  504. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.cjs +55 -0
  505. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.cjs.map +1 -0
  506. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.d.ts +9 -0
  507. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.d.ts.map +1 -0
  508. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.js +55 -0
  509. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.js.map +1 -0
  510. package/dist/data/ai/SpecRuntimeEditor.model.cjs +398 -0
  511. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -0
  512. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +169 -0
  513. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -0
  514. package/dist/data/ai/SpecRuntimeEditor.model.js +398 -0
  515. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -0
  516. package/dist/data/ai/ToolPreferences.cjs +705 -165
  517. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  518. package/dist/data/ai/ToolPreferences.d.ts +29 -5
  519. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  520. package/dist/data/ai/ToolPreferences.js +707 -167
  521. package/dist/data/ai/ToolPreferences.js.map +1 -1
  522. package/dist/data/ai/ToolSchemaBrowser.cjs +549 -0
  523. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -0
  524. package/dist/data/ai/ToolSchemaBrowser.d.ts +7 -0
  525. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -0
  526. package/dist/data/ai/ToolSchemaBrowser.js +549 -0
  527. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -0
  528. package/dist/data/ai/agent-action-icons.cjs +78 -0
  529. package/dist/data/ai/agent-action-icons.cjs.map +1 -0
  530. package/dist/data/ai/agent-action-icons.d.ts +22 -0
  531. package/dist/data/ai/agent-action-icons.d.ts.map +1 -0
  532. package/dist/data/ai/agent-action-icons.js +78 -0
  533. package/dist/data/ai/agent-action-icons.js.map +1 -0
  534. package/dist/data/ai/index.d.ts +21 -6
  535. package/dist/data/ai/index.d.ts.map +1 -1
  536. package/dist/data/ai/model-capabilities.cjs +23 -0
  537. package/dist/data/ai/model-capabilities.cjs.map +1 -0
  538. package/dist/data/ai/model-capabilities.d.ts +9 -0
  539. package/dist/data/ai/model-capabilities.d.ts.map +1 -0
  540. package/dist/data/ai/model-capabilities.js +23 -0
  541. package/dist/data/ai/model-capabilities.js.map +1 -0
  542. package/dist/data/ai/runtime-mode.cjs +133 -0
  543. package/dist/data/ai/runtime-mode.cjs.map +1 -0
  544. package/dist/data/ai/runtime-mode.d.ts +31 -0
  545. package/dist/data/ai/runtime-mode.d.ts.map +1 -0
  546. package/dist/data/ai/runtime-mode.js +133 -0
  547. package/dist/data/ai/runtime-mode.js.map +1 -0
  548. package/dist/data/ai/session-categories.cjs +34 -0
  549. package/dist/data/ai/session-categories.cjs.map +1 -1
  550. package/dist/data/ai/session-categories.d.ts +2 -0
  551. package/dist/data/ai/session-categories.d.ts.map +1 -1
  552. package/dist/data/ai/session-categories.js +34 -0
  553. package/dist/data/ai/session-categories.js.map +1 -1
  554. package/dist/data/ai/session-cost.cjs +13 -0
  555. package/dist/data/ai/session-cost.cjs.map +1 -0
  556. package/dist/data/ai/session-cost.d.ts +8 -0
  557. package/dist/data/ai/session-cost.d.ts.map +1 -0
  558. package/dist/data/ai/session-cost.js +13 -0
  559. package/dist/data/ai/session-cost.js.map +1 -0
  560. package/dist/data/ai/tool-name.d.ts +10 -0
  561. package/dist/data/ai/tool-name.d.ts.map +1 -0
  562. package/dist/data/ai/use-session-scroll.cjs +96 -0
  563. package/dist/data/ai/use-session-scroll.cjs.map +1 -0
  564. package/dist/data/ai/use-session-scroll.d.ts +43 -0
  565. package/dist/data/ai/use-session-scroll.d.ts.map +1 -0
  566. package/dist/data/ai/use-session-scroll.js +96 -0
  567. package/dist/data/ai/use-session-scroll.js.map +1 -0
  568. package/dist/data/cells/TagList.cjs +4 -2
  569. package/dist/data/cells/TagList.cjs.map +1 -1
  570. package/dist/data/cells/TagList.d.ts +2 -1
  571. package/dist/data/cells/TagList.d.ts.map +1 -1
  572. package/dist/data/cells/TagList.js +4 -2
  573. package/dist/data/cells/TagList.js.map +1 -1
  574. package/dist/data/chat/Chat.cjs +49 -15
  575. package/dist/data/chat/Chat.cjs.map +1 -1
  576. package/dist/data/chat/Chat.d.ts +16 -2
  577. package/dist/data/chat/Chat.d.ts.map +1 -1
  578. package/dist/data/chat/Chat.js +49 -15
  579. package/dist/data/chat/Chat.js.map +1 -1
  580. package/dist/data/chat/ContextMeter.cjs +164 -0
  581. package/dist/data/chat/ContextMeter.cjs.map +1 -0
  582. package/dist/data/chat/ContextMeter.d.ts +50 -0
  583. package/dist/data/chat/ContextMeter.d.ts.map +1 -0
  584. package/dist/data/chat/ContextMeter.js +164 -0
  585. package/dist/data/chat/ContextMeter.js.map +1 -0
  586. package/dist/data/chat/ModelSelector.cjs +139 -10
  587. package/dist/data/chat/ModelSelector.cjs.map +1 -1
  588. package/dist/data/chat/ModelSelector.d.ts +44 -3
  589. package/dist/data/chat/ModelSelector.d.ts.map +1 -1
  590. package/dist/data/chat/ModelSelector.js +141 -12
  591. package/dist/data/chat/ModelSelector.js.map +1 -1
  592. package/dist/data/chat/clickyOperationsToTools.cjs +83 -69
  593. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  594. package/dist/data/chat/clickyOperationsToTools.d.ts +3 -3
  595. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  596. package/dist/data/chat/clickyOperationsToTools.js +83 -69
  597. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  598. package/dist/data/chat/effort-icons.cjs +43 -0
  599. package/dist/data/chat/effort-icons.cjs.map +1 -0
  600. package/dist/data/chat/effort-icons.d.ts +10 -0
  601. package/dist/data/chat/effort-icons.d.ts.map +1 -0
  602. package/dist/data/chat/effort-icons.js +43 -0
  603. package/dist/data/chat/effort-icons.js.map +1 -0
  604. package/dist/data/chat/index.d.ts +3 -3
  605. package/dist/data/chat/index.d.ts.map +1 -1
  606. package/dist/data/chat/provider-icons.cjs +25 -6
  607. package/dist/data/chat/provider-icons.cjs.map +1 -1
  608. package/dist/data/chat/provider-icons.d.ts +3 -5
  609. package/dist/data/chat/provider-icons.d.ts.map +1 -1
  610. package/dist/data/chat/provider-icons.js +25 -6
  611. package/dist/data/chat/provider-icons.js.map +1 -1
  612. package/dist/data/chat/types.cjs +42 -0
  613. package/dist/data/chat/types.cjs.map +1 -1
  614. package/dist/data/chat/types.d.ts +83 -19
  615. package/dist/data/chat/types.d.ts.map +1 -1
  616. package/dist/data/chat/types.js +42 -0
  617. package/dist/data/chat/types.js.map +1 -1
  618. package/dist/data/code-block-actions.cjs +101 -0
  619. package/dist/data/code-block-actions.cjs.map +1 -0
  620. package/dist/data/code-block-actions.d.ts +20 -0
  621. package/dist/data/code-block-actions.d.ts.map +1 -0
  622. package/dist/data/code-block-actions.js +101 -0
  623. package/dist/data/code-block-actions.js.map +1 -0
  624. package/dist/data/code-diff.cjs +106 -0
  625. package/dist/data/code-diff.cjs.map +1 -0
  626. package/dist/data/code-diff.d.ts +20 -0
  627. package/dist/data/code-diff.d.ts.map +1 -0
  628. package/dist/data/code-diff.js +106 -0
  629. package/dist/data/code-diff.js.map +1 -0
  630. package/dist/data/code-highlight.cjs +30 -0
  631. package/dist/data/code-highlight.cjs.map +1 -1
  632. package/dist/data/code-highlight.d.ts +8 -0
  633. package/dist/data/code-highlight.d.ts.map +1 -1
  634. package/dist/data/code-highlight.js +30 -0
  635. package/dist/data/code-highlight.js.map +1 -1
  636. package/dist/data/git/GitChangeList.cjs +410 -0
  637. package/dist/data/git/GitChangeList.cjs.map +1 -0
  638. package/dist/data/git/GitChangeList.d.ts +69 -0
  639. package/dist/data/git/GitChangeList.d.ts.map +1 -0
  640. package/dist/data/git/GitChangeList.js +410 -0
  641. package/dist/data/git/GitChangeList.js.map +1 -0
  642. package/dist/data/git/git-dates.cjs +37 -0
  643. package/dist/data/git/git-dates.cjs.map +1 -0
  644. package/dist/data/git/git-dates.d.ts +4 -0
  645. package/dist/data/git/git-dates.d.ts.map +1 -0
  646. package/dist/data/git/git-dates.js +37 -0
  647. package/dist/data/git/git-dates.js.map +1 -0
  648. package/dist/data/git/index.d.ts +3 -0
  649. package/dist/data/git/index.d.ts.map +1 -0
  650. package/dist/data/query-browser/QueryBrowser.cjs +323 -0
  651. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -0
  652. package/dist/data/query-browser/QueryBrowser.completion.cjs +99 -0
  653. package/dist/data/query-browser/QueryBrowser.completion.cjs.map +1 -0
  654. package/dist/data/query-browser/QueryBrowser.completion.d.ts +34 -0
  655. package/dist/data/query-browser/QueryBrowser.completion.d.ts.map +1 -0
  656. package/dist/data/query-browser/QueryBrowser.completion.js +99 -0
  657. package/dist/data/query-browser/QueryBrowser.completion.js.map +1 -0
  658. package/dist/data/query-browser/QueryBrowser.d.ts +42 -0
  659. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -0
  660. package/dist/data/query-browser/QueryBrowser.js +323 -0
  661. package/dist/data/query-browser/QueryBrowser.js.map +1 -0
  662. package/dist/data/query-browser/index.d.ts +3 -0
  663. package/dist/data/query-browser/index.d.ts.map +1 -0
  664. package/dist/data/test-runner/TestFilterBar.cjs +14 -9
  665. package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
  666. package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
  667. package/dist/data/test-runner/TestFilterBar.js +15 -10
  668. package/dist/data/test-runner/TestFilterBar.js.map +1 -1
  669. package/dist/data/test-runner/TestRunSummary.cjs +1 -11
  670. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  671. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  672. package/dist/data/test-runner/TestRunSummary.js +2 -12
  673. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  674. package/dist/data/test-runner/TestRunner.cjs +3 -12
  675. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  676. package/dist/data/test-runner/TestRunner.d.ts +8 -1
  677. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  678. package/dist/data/test-runner/TestRunner.js +4 -13
  679. package/dist/data/test-runner/TestRunner.js.map +1 -1
  680. package/dist/data/test-runner/filterState.cjs +8 -0
  681. package/dist/data/test-runner/filterState.cjs.map +1 -1
  682. package/dist/data/test-runner/filterState.d.ts +2 -0
  683. package/dist/data/test-runner/filterState.d.ts.map +1 -1
  684. package/dist/data/test-runner/filterState.js +9 -1
  685. package/dist/data/test-runner/filterState.js.map +1 -1
  686. package/dist/data/test-runner/index.d.ts +2 -2
  687. package/dist/data/test-runner/index.d.ts.map +1 -1
  688. package/dist/data/test-runner/status.cjs +16 -0
  689. package/dist/data/test-runner/status.cjs.map +1 -1
  690. package/dist/data/test-runner/status.d.ts +9 -0
  691. package/dist/data/test-runner/status.d.ts.map +1 -1
  692. package/dist/data/test-runner/status.js +16 -0
  693. package/dist/data/test-runner/status.js.map +1 -1
  694. package/dist/data/version-info.cjs +3 -3
  695. package/dist/data/version-info.cjs.map +1 -1
  696. package/dist/data/version-info.js +3 -3
  697. package/dist/data/version-info.js.map +1 -1
  698. package/dist/data.cjs +191 -15
  699. package/dist/data.cjs.map +1 -1
  700. package/dist/data.d.ts +7 -2
  701. package/dist/data.d.ts.map +1 -1
  702. package/dist/data.js +180 -4
  703. package/dist/data.js.map +1 -1
  704. package/dist/icons/components/UiArrowFatUp.cjs +15 -0
  705. package/dist/icons/components/UiArrowFatUp.cjs.map +1 -0
  706. package/dist/icons/components/UiArrowFatUp.d.ts +15 -0
  707. package/dist/icons/components/UiArrowFatUp.d.ts.map +1 -0
  708. package/dist/icons/components/UiArrowFatUp.js +15 -0
  709. package/dist/icons/components/UiArrowFatUp.js.map +1 -0
  710. package/dist/icons/components/UiAsterisk.cjs +15 -0
  711. package/dist/icons/components/UiAsterisk.cjs.map +1 -0
  712. package/dist/icons/components/UiAsterisk.d.ts +15 -0
  713. package/dist/icons/components/UiAsterisk.d.ts.map +1 -0
  714. package/dist/icons/components/UiAsterisk.js +15 -0
  715. package/dist/icons/components/UiAsterisk.js.map +1 -0
  716. package/dist/icons/components/UiAtom.cjs +15 -0
  717. package/dist/icons/components/UiAtom.cjs.map +1 -0
  718. package/dist/icons/components/UiAtom.d.ts +15 -0
  719. package/dist/icons/components/UiAtom.d.ts.map +1 -0
  720. package/dist/icons/components/UiAtom.js +15 -0
  721. package/dist/icons/components/UiAtom.js.map +1 -0
  722. package/dist/icons/components/UiBatteryChargingVertical.cjs +15 -0
  723. package/dist/icons/components/UiBatteryChargingVertical.cjs.map +1 -0
  724. package/dist/icons/components/UiBatteryChargingVertical.d.ts +15 -0
  725. package/dist/icons/components/UiBatteryChargingVertical.d.ts.map +1 -0
  726. package/dist/icons/components/UiBatteryChargingVertical.js +15 -0
  727. package/dist/icons/components/UiBatteryChargingVertical.js.map +1 -0
  728. package/dist/icons/components/UiBatteryVerticalEmpty.cjs +15 -0
  729. package/dist/icons/components/UiBatteryVerticalEmpty.cjs.map +1 -0
  730. package/dist/icons/components/UiBatteryVerticalEmpty.d.ts +15 -0
  731. package/dist/icons/components/UiBatteryVerticalEmpty.d.ts.map +1 -0
  732. package/dist/icons/components/UiBatteryVerticalEmpty.js +15 -0
  733. package/dist/icons/components/UiBatteryVerticalEmpty.js.map +1 -0
  734. package/dist/icons/components/UiBatteryVerticalFull.cjs +15 -0
  735. package/dist/icons/components/UiBatteryVerticalFull.cjs.map +1 -0
  736. package/dist/icons/components/UiBatteryVerticalFull.d.ts +15 -0
  737. package/dist/icons/components/UiBatteryVerticalFull.d.ts.map +1 -0
  738. package/dist/icons/components/UiBatteryVerticalFull.js +15 -0
  739. package/dist/icons/components/UiBatteryVerticalFull.js.map +1 -0
  740. package/dist/icons/components/UiBatteryVerticalHigh.cjs +15 -0
  741. package/dist/icons/components/UiBatteryVerticalHigh.cjs.map +1 -0
  742. package/dist/icons/components/UiBatteryVerticalHigh.d.ts +15 -0
  743. package/dist/icons/components/UiBatteryVerticalHigh.d.ts.map +1 -0
  744. package/dist/icons/components/UiBatteryVerticalHigh.js +15 -0
  745. package/dist/icons/components/UiBatteryVerticalHigh.js.map +1 -0
  746. package/dist/icons/components/UiBatteryVerticalLow.cjs +15 -0
  747. package/dist/icons/components/UiBatteryVerticalLow.cjs.map +1 -0
  748. package/dist/icons/components/UiBatteryVerticalLow.d.ts +15 -0
  749. package/dist/icons/components/UiBatteryVerticalLow.d.ts.map +1 -0
  750. package/dist/icons/components/UiBatteryVerticalLow.js +15 -0
  751. package/dist/icons/components/UiBatteryVerticalLow.js.map +1 -0
  752. package/dist/icons/components/UiBatteryVerticalMedium.cjs +15 -0
  753. package/dist/icons/components/UiBatteryVerticalMedium.cjs.map +1 -0
  754. package/dist/icons/components/UiBatteryVerticalMedium.d.ts +15 -0
  755. package/dist/icons/components/UiBatteryVerticalMedium.d.ts.map +1 -0
  756. package/dist/icons/components/UiBatteryVerticalMedium.js +15 -0
  757. package/dist/icons/components/UiBatteryVerticalMedium.js.map +1 -0
  758. package/dist/icons/components/UiChatDots.cjs +15 -0
  759. package/dist/icons/components/UiChatDots.cjs.map +1 -0
  760. package/dist/icons/components/UiChatDots.d.ts +15 -0
  761. package/dist/icons/components/UiChatDots.d.ts.map +1 -0
  762. package/dist/icons/components/UiChatDots.js +15 -0
  763. package/dist/icons/components/UiChatDots.js.map +1 -0
  764. package/dist/icons/components/UiCoins.cjs +15 -0
  765. package/dist/icons/components/UiCoins.cjs.map +1 -0
  766. package/dist/icons/components/UiCoins.d.ts +15 -0
  767. package/dist/icons/components/UiCoins.d.ts.map +1 -0
  768. package/dist/icons/components/UiCoins.js +15 -0
  769. package/dist/icons/components/UiCoins.js.map +1 -0
  770. package/dist/icons/components/UiCompass.cjs +15 -0
  771. package/dist/icons/components/UiCompass.cjs.map +1 -0
  772. package/dist/icons/components/UiCompass.d.ts +15 -0
  773. package/dist/icons/components/UiCompass.d.ts.map +1 -0
  774. package/dist/icons/components/UiCompass.js +15 -0
  775. package/dist/icons/components/UiCompass.js.map +1 -0
  776. package/dist/icons/components/UiCurrencyDollar.cjs +15 -0
  777. package/dist/icons/components/UiCurrencyDollar.cjs.map +1 -0
  778. package/dist/icons/components/UiCurrencyDollar.d.ts +15 -0
  779. package/dist/icons/components/UiCurrencyDollar.d.ts.map +1 -0
  780. package/dist/icons/components/UiCurrencyDollar.js +15 -0
  781. package/dist/icons/components/UiCurrencyDollar.js.map +1 -0
  782. package/dist/icons/components/UiCursorClick.cjs +15 -0
  783. package/dist/icons/components/UiCursorClick.cjs.map +1 -0
  784. package/dist/icons/components/UiCursorClick.d.ts +15 -0
  785. package/dist/icons/components/UiCursorClick.d.ts.map +1 -0
  786. package/dist/icons/components/UiCursorClick.js +15 -0
  787. package/dist/icons/components/UiCursorClick.js.map +1 -0
  788. package/dist/icons/components/UiCursorText.cjs +15 -0
  789. package/dist/icons/components/UiCursorText.cjs.map +1 -0
  790. package/dist/icons/components/UiCursorText.d.ts +15 -0
  791. package/dist/icons/components/UiCursorText.d.ts.map +1 -0
  792. package/dist/icons/components/UiCursorText.js +15 -0
  793. package/dist/icons/components/UiCursorText.js.map +1 -0
  794. package/dist/icons/components/UiDebugContinue.cjs +10 -0
  795. package/dist/icons/components/UiDebugContinue.cjs.map +1 -0
  796. package/dist/icons/components/UiDebugContinue.d.ts +9 -0
  797. package/dist/icons/components/UiDebugContinue.d.ts.map +1 -0
  798. package/dist/icons/components/UiDebugContinue.js +10 -0
  799. package/dist/icons/components/UiDebugContinue.js.map +1 -0
  800. package/dist/icons/components/UiDebugStepInto.cjs +10 -0
  801. package/dist/icons/components/UiDebugStepInto.cjs.map +1 -0
  802. package/dist/icons/components/UiDebugStepInto.d.ts +9 -0
  803. package/dist/icons/components/UiDebugStepInto.d.ts.map +1 -0
  804. package/dist/icons/components/UiDebugStepInto.js +10 -0
  805. package/dist/icons/components/UiDebugStepInto.js.map +1 -0
  806. package/dist/icons/components/UiDebugStepOut.cjs +10 -0
  807. package/dist/icons/components/UiDebugStepOut.cjs.map +1 -0
  808. package/dist/icons/components/UiDebugStepOut.d.ts +9 -0
  809. package/dist/icons/components/UiDebugStepOut.d.ts.map +1 -0
  810. package/dist/icons/components/UiDebugStepOut.js +10 -0
  811. package/dist/icons/components/UiDebugStepOut.js.map +1 -0
  812. package/dist/icons/components/UiDebugStop.cjs +10 -0
  813. package/dist/icons/components/UiDebugStop.cjs.map +1 -0
  814. package/dist/icons/components/UiDebugStop.d.ts +9 -0
  815. package/dist/icons/components/UiDebugStop.d.ts.map +1 -0
  816. package/dist/icons/components/UiDebugStop.js +10 -0
  817. package/dist/icons/components/UiDebugStop.js.map +1 -0
  818. package/dist/icons/components/UiEllipsisBold.cjs +10 -0
  819. package/dist/icons/components/UiEllipsisBold.cjs.map +1 -0
  820. package/dist/icons/components/UiEllipsisBold.d.ts +9 -0
  821. package/dist/icons/components/UiEllipsisBold.d.ts.map +1 -0
  822. package/dist/icons/components/UiEllipsisBold.js +10 -0
  823. package/dist/icons/components/UiEllipsisBold.js.map +1 -0
  824. package/dist/icons/components/UiFastForwardCircle.cjs +15 -0
  825. package/dist/icons/components/UiFastForwardCircle.cjs.map +1 -0
  826. package/dist/icons/components/UiFastForwardCircle.d.ts +15 -0
  827. package/dist/icons/components/UiFastForwardCircle.d.ts.map +1 -0
  828. package/dist/icons/components/UiFastForwardCircle.js +15 -0
  829. package/dist/icons/components/UiFastForwardCircle.js.map +1 -0
  830. package/dist/icons/components/UiFilePlus.cjs +15 -0
  831. package/dist/icons/components/UiFilePlus.cjs.map +1 -0
  832. package/dist/icons/components/UiFilePlus.d.ts +15 -0
  833. package/dist/icons/components/UiFilePlus.d.ts.map +1 -0
  834. package/dist/icons/components/UiFilePlus.js +15 -0
  835. package/dist/icons/components/UiFilePlus.js.map +1 -0
  836. package/dist/icons/components/UiGavel.cjs +15 -0
  837. package/dist/icons/components/UiGavel.cjs.map +1 -0
  838. package/dist/icons/components/UiGavel.d.ts +15 -0
  839. package/dist/icons/components/UiGavel.d.ts.map +1 -0
  840. package/dist/icons/components/UiGavel.js +15 -0
  841. package/dist/icons/components/UiGavel.js.map +1 -0
  842. package/dist/icons/components/UiGearSix.cjs +15 -0
  843. package/dist/icons/components/UiGearSix.cjs.map +1 -0
  844. package/dist/icons/components/UiGearSix.d.ts +15 -0
  845. package/dist/icons/components/UiGearSix.d.ts.map +1 -0
  846. package/dist/icons/components/UiGearSix.js +15 -0
  847. package/dist/icons/components/UiGearSix.js.map +1 -0
  848. package/dist/icons/components/UiGitCommit.cjs +15 -0
  849. package/dist/icons/components/UiGitCommit.cjs.map +1 -0
  850. package/dist/icons/components/UiGitCommit.d.ts +15 -0
  851. package/dist/icons/components/UiGitCommit.d.ts.map +1 -0
  852. package/dist/icons/components/UiGitCommit.js +15 -0
  853. package/dist/icons/components/UiGitCommit.js.map +1 -0
  854. package/dist/icons/components/UiHandPalm.cjs +15 -0
  855. package/dist/icons/components/UiHandPalm.cjs.map +1 -0
  856. package/dist/icons/components/UiHandPalm.d.ts +15 -0
  857. package/dist/icons/components/UiHandPalm.d.ts.map +1 -0
  858. package/dist/icons/components/UiHandPalm.js +15 -0
  859. package/dist/icons/components/UiHandPalm.js.map +1 -0
  860. package/dist/icons/components/UiKeyboard.cjs +15 -0
  861. package/dist/icons/components/UiKeyboard.cjs.map +1 -0
  862. package/dist/icons/components/UiKeyboard.d.ts +15 -0
  863. package/dist/icons/components/UiKeyboard.d.ts.map +1 -0
  864. package/dist/icons/components/UiKeyboard.js +15 -0
  865. package/dist/icons/components/UiKeyboard.js.map +1 -0
  866. package/dist/icons/components/UiListChecks.cjs +15 -0
  867. package/dist/icons/components/UiListChecks.cjs.map +1 -0
  868. package/dist/icons/components/UiListChecks.d.ts +15 -0
  869. package/dist/icons/components/UiListChecks.d.ts.map +1 -0
  870. package/dist/icons/components/UiListChecks.js +15 -0
  871. package/dist/icons/components/UiListChecks.js.map +1 -0
  872. package/dist/icons/components/UiLogoAnthropic.cjs +10 -0
  873. package/dist/icons/components/UiLogoAnthropic.cjs.map +1 -0
  874. package/dist/icons/components/UiLogoAnthropic.d.ts +9 -0
  875. package/dist/icons/components/UiLogoAnthropic.d.ts.map +1 -0
  876. package/dist/icons/components/UiLogoAnthropic.js +10 -0
  877. package/dist/icons/components/UiLogoAnthropic.js.map +1 -0
  878. package/dist/icons/components/UiLogoClaude.cjs +10 -0
  879. package/dist/icons/components/UiLogoClaude.cjs.map +1 -0
  880. package/dist/icons/components/UiLogoClaude.d.ts +9 -0
  881. package/dist/icons/components/UiLogoClaude.d.ts.map +1 -0
  882. package/dist/icons/components/UiLogoClaude.js +10 -0
  883. package/dist/icons/components/UiLogoClaude.js.map +1 -0
  884. package/dist/icons/components/UiLogoDeepseek.cjs +10 -0
  885. package/dist/icons/components/UiLogoDeepseek.cjs.map +1 -0
  886. package/dist/icons/components/UiLogoDeepseek.d.ts +9 -0
  887. package/dist/icons/components/UiLogoDeepseek.d.ts.map +1 -0
  888. package/dist/icons/components/UiLogoDeepseek.js +10 -0
  889. package/dist/icons/components/UiLogoDeepseek.js.map +1 -0
  890. package/dist/icons/components/UiLogoGemini.cjs +10 -0
  891. package/dist/icons/components/UiLogoGemini.cjs.map +1 -0
  892. package/dist/icons/components/UiLogoGemini.d.ts +9 -0
  893. package/dist/icons/components/UiLogoGemini.d.ts.map +1 -0
  894. package/dist/icons/components/UiLogoGemini.js +10 -0
  895. package/dist/icons/components/UiLogoGemini.js.map +1 -0
  896. package/dist/icons/components/UiLogoGoogle.cjs +10 -0
  897. package/dist/icons/components/UiLogoGoogle.cjs.map +1 -0
  898. package/dist/icons/components/UiLogoGoogle.d.ts +9 -0
  899. package/dist/icons/components/UiLogoGoogle.d.ts.map +1 -0
  900. package/dist/icons/components/UiLogoGoogle.js +10 -0
  901. package/dist/icons/components/UiLogoGoogle.js.map +1 -0
  902. package/dist/icons/components/UiLogoHuggingface.cjs +10 -0
  903. package/dist/icons/components/UiLogoHuggingface.cjs.map +1 -0
  904. package/dist/icons/components/UiLogoHuggingface.d.ts +9 -0
  905. package/dist/icons/components/UiLogoHuggingface.d.ts.map +1 -0
  906. package/dist/icons/components/UiLogoHuggingface.js +10 -0
  907. package/dist/icons/components/UiLogoHuggingface.js.map +1 -0
  908. package/dist/icons/components/UiLogoMeta.cjs +10 -0
  909. package/dist/icons/components/UiLogoMeta.cjs.map +1 -0
  910. package/dist/icons/components/UiLogoMeta.d.ts +9 -0
  911. package/dist/icons/components/UiLogoMeta.d.ts.map +1 -0
  912. package/dist/icons/components/UiLogoMeta.js +10 -0
  913. package/dist/icons/components/UiLogoMeta.js.map +1 -0
  914. package/dist/icons/components/UiLogoMistral.cjs +10 -0
  915. package/dist/icons/components/UiLogoMistral.cjs.map +1 -0
  916. package/dist/icons/components/UiLogoMistral.d.ts +9 -0
  917. package/dist/icons/components/UiLogoMistral.d.ts.map +1 -0
  918. package/dist/icons/components/UiLogoMistral.js +10 -0
  919. package/dist/icons/components/UiLogoMistral.js.map +1 -0
  920. package/dist/icons/components/UiLogoOllama.cjs +10 -0
  921. package/dist/icons/components/UiLogoOllama.cjs.map +1 -0
  922. package/dist/icons/components/UiLogoOllama.d.ts +9 -0
  923. package/dist/icons/components/UiLogoOllama.d.ts.map +1 -0
  924. package/dist/icons/components/UiLogoOllama.js +10 -0
  925. package/dist/icons/components/UiLogoOllama.js.map +1 -0
  926. package/dist/icons/components/UiLogoOpenai.cjs +10 -0
  927. package/dist/icons/components/UiLogoOpenai.cjs.map +1 -0
  928. package/dist/icons/components/UiLogoOpenai.d.ts +9 -0
  929. package/dist/icons/components/UiLogoOpenai.d.ts.map +1 -0
  930. package/dist/icons/components/UiLogoOpenai.js +10 -0
  931. package/dist/icons/components/UiLogoOpenai.js.map +1 -0
  932. package/dist/icons/components/UiLogoPerplexity.cjs +10 -0
  933. package/dist/icons/components/UiLogoPerplexity.cjs.map +1 -0
  934. package/dist/icons/components/UiLogoPerplexity.d.ts +9 -0
  935. package/dist/icons/components/UiLogoPerplexity.d.ts.map +1 -0
  936. package/dist/icons/components/UiLogoPerplexity.js +10 -0
  937. package/dist/icons/components/UiLogoPerplexity.js.map +1 -0
  938. package/dist/icons/components/UiPalette.cjs +15 -0
  939. package/dist/icons/components/UiPalette.cjs.map +1 -0
  940. package/dist/icons/components/UiPalette.d.ts +15 -0
  941. package/dist/icons/components/UiPalette.d.ts.map +1 -0
  942. package/dist/icons/components/UiPalette.js +15 -0
  943. package/dist/icons/components/UiPalette.js.map +1 -0
  944. package/dist/icons/components/UiPauseCircle.cjs +15 -0
  945. package/dist/icons/components/UiPauseCircle.cjs.map +1 -0
  946. package/dist/icons/components/UiPauseCircle.d.ts +15 -0
  947. package/dist/icons/components/UiPauseCircle.d.ts.map +1 -0
  948. package/dist/icons/components/UiPauseCircle.js +15 -0
  949. package/dist/icons/components/UiPauseCircle.js.map +1 -0
  950. package/dist/icons/components/UiPencilSimpleLine.cjs +15 -0
  951. package/dist/icons/components/UiPencilSimpleLine.cjs.map +1 -0
  952. package/dist/icons/components/UiPencilSimpleLine.d.ts +15 -0
  953. package/dist/icons/components/UiPencilSimpleLine.d.ts.map +1 -0
  954. package/dist/icons/components/UiPencilSimpleLine.js +15 -0
  955. package/dist/icons/components/UiPencilSimpleLine.js.map +1 -0
  956. package/dist/icons/components/UiPlugsConnected.cjs +15 -0
  957. package/dist/icons/components/UiPlugsConnected.cjs.map +1 -0
  958. package/dist/icons/components/UiPlugsConnected.d.ts +15 -0
  959. package/dist/icons/components/UiPlugsConnected.d.ts.map +1 -0
  960. package/dist/icons/components/UiPlugsConnected.js +15 -0
  961. package/dist/icons/components/UiPlugsConnected.js.map +1 -0
  962. package/dist/icons/components/UiProhibit.cjs +15 -0
  963. package/dist/icons/components/UiProhibit.cjs.map +1 -0
  964. package/dist/icons/components/UiProhibit.d.ts +15 -0
  965. package/dist/icons/components/UiProhibit.d.ts.map +1 -0
  966. package/dist/icons/components/UiProhibit.js +15 -0
  967. package/dist/icons/components/UiProhibit.js.map +1 -0
  968. package/dist/icons/components/UiRepeat.cjs +15 -0
  969. package/dist/icons/components/UiRepeat.cjs.map +1 -0
  970. package/dist/icons/components/UiRepeat.d.ts +15 -0
  971. package/dist/icons/components/UiRepeat.d.ts.map +1 -0
  972. package/dist/icons/components/UiRepeat.js +15 -0
  973. package/dist/icons/components/UiRepeat.js.map +1 -0
  974. package/dist/icons/components/UiScan.cjs +15 -0
  975. package/dist/icons/components/UiScan.cjs.map +1 -0
  976. package/dist/icons/components/UiScan.d.ts +15 -0
  977. package/dist/icons/components/UiScan.d.ts.map +1 -0
  978. package/dist/icons/components/UiScan.js +15 -0
  979. package/dist/icons/components/UiScan.js.map +1 -0
  980. package/dist/icons/components/UiScroll.cjs +15 -0
  981. package/dist/icons/components/UiScroll.cjs.map +1 -0
  982. package/dist/icons/components/UiScroll.d.ts +15 -0
  983. package/dist/icons/components/UiScroll.d.ts.map +1 -0
  984. package/dist/icons/components/UiScroll.js +15 -0
  985. package/dist/icons/components/UiScroll.js.map +1 -0
  986. package/dist/icons/components/UiShieldSlash.cjs +15 -0
  987. package/dist/icons/components/UiShieldSlash.cjs.map +1 -0
  988. package/dist/icons/components/UiShieldSlash.d.ts +15 -0
  989. package/dist/icons/components/UiShieldSlash.d.ts.map +1 -0
  990. package/dist/icons/components/UiShieldSlash.js +15 -0
  991. package/dist/icons/components/UiShieldSlash.js.map +1 -0
  992. package/dist/icons/components/UiStack.cjs +19 -0
  993. package/dist/icons/components/UiStack.cjs.map +1 -0
  994. package/dist/icons/components/UiStack.d.ts +15 -0
  995. package/dist/icons/components/UiStack.d.ts.map +1 -0
  996. package/dist/icons/components/UiStack.js +19 -0
  997. package/dist/icons/components/UiStack.js.map +1 -0
  998. package/dist/icons/components/UiStrategy.cjs +15 -0
  999. package/dist/icons/components/UiStrategy.cjs.map +1 -0
  1000. package/dist/icons/components/UiStrategy.d.ts +15 -0
  1001. package/dist/icons/components/UiStrategy.d.ts.map +1 -0
  1002. package/dist/icons/components/UiStrategy.js +15 -0
  1003. package/dist/icons/components/UiStrategy.js.map +1 -0
  1004. package/dist/icons/components/UiThermometer.cjs +15 -0
  1005. package/dist/icons/components/UiThermometer.cjs.map +1 -0
  1006. package/dist/icons/components/UiThermometer.d.ts +15 -0
  1007. package/dist/icons/components/UiThermometer.d.ts.map +1 -0
  1008. package/dist/icons/components/UiThermometer.js +15 -0
  1009. package/dist/icons/components/UiThermometer.js.map +1 -0
  1010. package/dist/icons/components/UiTimer.cjs +15 -0
  1011. package/dist/icons/components/UiTimer.cjs.map +1 -0
  1012. package/dist/icons/components/UiTimer.d.ts +15 -0
  1013. package/dist/icons/components/UiTimer.d.ts.map +1 -0
  1014. package/dist/icons/components/UiTimer.js +15 -0
  1015. package/dist/icons/components/UiTimer.js.map +1 -0
  1016. package/dist/icons/index.d.ts +88 -0
  1017. package/dist/icons/index.d.ts.map +1 -1
  1018. package/dist/icons.cjs +140 -0
  1019. package/dist/icons.cjs.map +1 -1
  1020. package/dist/icons.js +140 -0
  1021. package/dist/icons.js.map +1 -1
  1022. package/dist/index.cjs +213 -16
  1023. package/dist/index.cjs.map +1 -1
  1024. package/dist/index.js +204 -7
  1025. package/dist/index.js.map +1 -1
  1026. package/dist/layout/Workspace.cjs +191 -0
  1027. package/dist/layout/Workspace.cjs.map +1 -0
  1028. package/dist/layout/Workspace.d.ts +17 -0
  1029. package/dist/layout/Workspace.d.ts.map +1 -0
  1030. package/dist/layout/Workspace.js +191 -0
  1031. package/dist/layout/Workspace.js.map +1 -0
  1032. package/dist/layout/Workspace.model.cjs +142 -0
  1033. package/dist/layout/Workspace.model.cjs.map +1 -0
  1034. package/dist/layout/Workspace.model.d.ts +43 -0
  1035. package/dist/layout/Workspace.model.d.ts.map +1 -0
  1036. package/dist/layout/Workspace.model.js +142 -0
  1037. package/dist/layout/Workspace.model.js.map +1 -0
  1038. package/dist/layout/Workspace.regions.cjs +305 -0
  1039. package/dist/layout/Workspace.regions.cjs.map +1 -0
  1040. package/dist/layout/Workspace.regions.d.ts +17 -0
  1041. package/dist/layout/Workspace.regions.d.ts.map +1 -0
  1042. package/dist/layout/Workspace.regions.js +305 -0
  1043. package/dist/layout/Workspace.regions.js.map +1 -0
  1044. package/dist/lib/tokens.cjs +14 -0
  1045. package/dist/lib/tokens.cjs.map +1 -0
  1046. package/dist/lib/tokens.d.ts +5 -0
  1047. package/dist/lib/tokens.d.ts.map +1 -0
  1048. package/dist/lib/tokens.js +14 -0
  1049. package/dist/lib/tokens.js.map +1 -0
  1050. package/dist/monaco/MonacoEditor.cjs +69 -0
  1051. package/dist/monaco/MonacoEditor.cjs.map +1 -0
  1052. package/dist/monaco/MonacoEditor.d.ts +5 -0
  1053. package/dist/monaco/MonacoEditor.d.ts.map +1 -0
  1054. package/dist/monaco/MonacoEditor.js +52 -0
  1055. package/dist/monaco/MonacoEditor.js.map +1 -0
  1056. package/dist/monaco/MonacoProvider.cjs +22 -0
  1057. package/dist/monaco/MonacoProvider.cjs.map +1 -0
  1058. package/dist/monaco/MonacoProvider.d.ts +3 -0
  1059. package/dist/monaco/MonacoProvider.d.ts.map +1 -0
  1060. package/dist/monaco/MonacoProvider.js +22 -0
  1061. package/dist/monaco/MonacoProvider.js.map +1 -0
  1062. package/dist/monaco/MonacoSchemaEditor.cjs +108 -0
  1063. package/dist/monaco/MonacoSchemaEditor.cjs.map +1 -0
  1064. package/dist/monaco/MonacoSchemaEditor.d.ts +4 -0
  1065. package/dist/monaco/MonacoSchemaEditor.d.ts.map +1 -0
  1066. package/dist/monaco/MonacoSchemaEditor.js +108 -0
  1067. package/dist/monaco/MonacoSchemaEditor.js.map +1 -0
  1068. package/dist/monaco/schema-normalizer.cjs +38 -0
  1069. package/dist/monaco/schema-normalizer.cjs.map +1 -0
  1070. package/dist/monaco/schema-normalizer.d.ts +7 -0
  1071. package/dist/monaco/schema-normalizer.d.ts.map +1 -0
  1072. package/dist/monaco/schema-normalizer.js +38 -0
  1073. package/dist/monaco/schema-normalizer.js.map +1 -0
  1074. package/dist/monaco/schema-registry.cjs +67 -0
  1075. package/dist/monaco/schema-registry.cjs.map +1 -0
  1076. package/dist/monaco/schema-registry.d.ts +3 -0
  1077. package/dist/monaco/schema-registry.d.ts.map +1 -0
  1078. package/dist/monaco/schema-registry.js +67 -0
  1079. package/dist/monaco/schema-registry.js.map +1 -0
  1080. package/dist/monaco/types.d.ts +31 -0
  1081. package/dist/monaco/types.d.ts.map +1 -0
  1082. package/dist/monaco/use-monaco-worker.cjs +10 -0
  1083. package/dist/monaco/use-monaco-worker.cjs.map +1 -0
  1084. package/dist/monaco/use-monaco-worker.d.ts +4 -0
  1085. package/dist/monaco/use-monaco-worker.d.ts.map +1 -0
  1086. package/dist/monaco/use-monaco-worker.js +10 -0
  1087. package/dist/monaco/use-monaco-worker.js.map +1 -0
  1088. package/dist/monaco-schema.cjs +5 -0
  1089. package/dist/monaco-schema.cjs.map +1 -0
  1090. package/dist/monaco-schema.d.ts +3 -0
  1091. package/dist/monaco-schema.d.ts.map +1 -0
  1092. package/dist/monaco-schema.js +5 -0
  1093. package/dist/monaco-schema.js.map +1 -0
  1094. package/dist/monaco.cjs +11 -0
  1095. package/dist/monaco.cjs.map +1 -0
  1096. package/dist/monaco.d.ts +6 -0
  1097. package/dist/monaco.d.ts.map +1 -0
  1098. package/dist/monaco.js +11 -0
  1099. package/dist/monaco.js.map +1 -0
  1100. package/dist/overlay/CellActions.cjs +183 -0
  1101. package/dist/overlay/CellActions.cjs.map +1 -0
  1102. package/dist/overlay/CellActions.d.ts +18 -0
  1103. package/dist/overlay/CellActions.d.ts.map +1 -0
  1104. package/dist/overlay/CellActions.js +183 -0
  1105. package/dist/overlay/CellActions.js.map +1 -0
  1106. package/dist/overlay/DropdownMenu.cjs +50 -59
  1107. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  1108. package/dist/overlay/DropdownMenu.d.ts +21 -2
  1109. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  1110. package/dist/overlay/DropdownMenu.js +38 -47
  1111. package/dist/overlay/DropdownMenu.js.map +1 -1
  1112. package/dist/overlay/DropdownMenuSubmenu.cjs +210 -0
  1113. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -0
  1114. package/dist/overlay/DropdownMenuSubmenu.d.ts +12 -0
  1115. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -0
  1116. package/dist/overlay/DropdownMenuSubmenu.js +210 -0
  1117. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -0
  1118. package/dist/overlay/Modal.cjs +14 -2
  1119. package/dist/overlay/Modal.cjs.map +1 -1
  1120. package/dist/overlay/Modal.d.ts +9 -2
  1121. package/dist/overlay/Modal.d.ts.map +1 -1
  1122. package/dist/overlay/Modal.js +14 -2
  1123. package/dist/overlay/Modal.js.map +1 -1
  1124. package/dist/overlay/dropdownMenuContext.cjs +16 -0
  1125. package/dist/overlay/dropdownMenuContext.cjs.map +1 -0
  1126. package/dist/overlay/dropdownMenuContext.d.ts +16 -0
  1127. package/dist/overlay/dropdownMenuContext.d.ts.map +1 -0
  1128. package/dist/overlay/dropdownMenuContext.js +16 -0
  1129. package/dist/overlay/dropdownMenuContext.js.map +1 -0
  1130. package/dist/rpc/CommandOutput.cjs +28 -9
  1131. package/dist/rpc/CommandOutput.cjs.map +1 -1
  1132. package/dist/rpc/CommandOutput.d.ts +4 -2
  1133. package/dist/rpc/CommandOutput.d.ts.map +1 -1
  1134. package/dist/rpc/CommandOutput.js +28 -9
  1135. package/dist/rpc/CommandOutput.js.map +1 -1
  1136. package/dist/rpc/EntityExplorerApp.cjs +8 -1
  1137. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  1138. package/dist/rpc/EntityExplorerApp.d.ts +9 -1
  1139. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  1140. package/dist/rpc/EntityExplorerApp.js +8 -1
  1141. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  1142. package/dist/rpc/OperationActionBar.cjs +63 -41
  1143. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  1144. package/dist/rpc/OperationActionBar.d.ts +2 -1
  1145. package/dist/rpc/OperationActionBar.d.ts.map +1 -1
  1146. package/dist/rpc/OperationActionBar.js +63 -41
  1147. package/dist/rpc/OperationActionBar.js.map +1 -1
  1148. package/dist/rpc/OperationCatalog.cjs +111 -80
  1149. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  1150. package/dist/rpc/OperationCatalog.d.ts +2 -1
  1151. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  1152. package/dist/rpc/OperationCatalog.js +112 -81
  1153. package/dist/rpc/OperationCatalog.js.map +1 -1
  1154. package/dist/rpc/OperationCommandPage.cjs +2 -0
  1155. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  1156. package/dist/rpc/OperationCommandPage.d.ts +3 -2
  1157. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  1158. package/dist/rpc/OperationCommandPage.js +2 -0
  1159. package/dist/rpc/OperationCommandPage.js.map +1 -1
  1160. package/dist/rpc/OperationEntityContextPicker.cjs +448 -0
  1161. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -0
  1162. package/dist/rpc/OperationEntityContextPicker.d.ts +28 -0
  1163. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -0
  1164. package/dist/rpc/OperationEntityContextPicker.js +448 -0
  1165. package/dist/rpc/OperationEntityContextPicker.js.map +1 -0
  1166. package/dist/rpc/OperationEntityContextPicker.model.cjs +60 -0
  1167. package/dist/rpc/OperationEntityContextPicker.model.cjs.map +1 -0
  1168. package/dist/rpc/OperationEntityContextPicker.model.d.ts +7 -0
  1169. package/dist/rpc/OperationEntityContextPicker.model.d.ts.map +1 -0
  1170. package/dist/rpc/OperationEntityContextPicker.model.js +60 -0
  1171. package/dist/rpc/OperationEntityContextPicker.model.js.map +1 -0
  1172. package/dist/rpc/OperationEntityPage.cjs +47 -22
  1173. package/dist/rpc/OperationEntityPage.cjs.map +1 -1
  1174. package/dist/rpc/OperationEntityPage.d.ts +32 -2
  1175. package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
  1176. package/dist/rpc/OperationEntityPage.js +47 -22
  1177. package/dist/rpc/OperationEntityPage.js.map +1 -1
  1178. package/dist/rpc/OperationResultView.cjs +4 -2
  1179. package/dist/rpc/OperationResultView.cjs.map +1 -1
  1180. package/dist/rpc/OperationResultView.d.ts +3 -2
  1181. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  1182. package/dist/rpc/OperationResultView.js +4 -2
  1183. package/dist/rpc/OperationResultView.js.map +1 -1
  1184. package/dist/rpc/SchemaActionForm.cjs +151 -17
  1185. package/dist/rpc/SchemaActionForm.cjs.map +1 -1
  1186. package/dist/rpc/SchemaActionForm.d.ts +7 -1
  1187. package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
  1188. package/dist/rpc/SchemaActionForm.js +152 -18
  1189. package/dist/rpc/SchemaActionForm.js.map +1 -1
  1190. package/dist/rpc/types.cjs.map +1 -1
  1191. package/dist/rpc/types.d.ts +24 -0
  1192. package/dist/rpc/types.d.ts.map +1 -1
  1193. package/dist/rpc/types.js.map +1 -1
  1194. package/dist/rpc.cjs +6 -0
  1195. package/dist/rpc.cjs.map +1 -1
  1196. package/dist/rpc.d.ts +5 -3
  1197. package/dist/rpc.d.ts.map +1 -1
  1198. package/dist/rpc.js +6 -0
  1199. package/dist/rpc.js.map +1 -1
  1200. package/dist/styles.css +1 -1
  1201. package/dist/tailwind-preset.cjs +8 -0
  1202. package/dist/tailwind-preset.cjs.map +1 -1
  1203. package/dist/tailwind-preset.d.ts.map +1 -1
  1204. package/dist/tailwind-preset.js +8 -0
  1205. package/dist/tailwind-preset.js.map +1 -1
  1206. package/oxlint-plugins/README.md +82 -19
  1207. package/oxlint-plugins/clicky-ui-no-adhoc-overlay.js +5 -50
  1208. package/oxlint-plugins/clicky-ui-no-direct-z-index.js +134 -0
  1209. package/oxlint-plugins/clicky-ui.js +3 -0
  1210. package/package.json +26 -3
  1211. package/dist/data/chat/ContextUsage.cjs +0 -99
  1212. package/dist/data/chat/ContextUsage.cjs.map +0 -1
  1213. package/dist/data/chat/ContextUsage.d.ts +0 -19
  1214. package/dist/data/chat/ContextUsage.d.ts.map +0 -1
  1215. package/dist/data/chat/ContextUsage.js +0 -99
  1216. package/dist/data/chat/ContextUsage.js.map +0 -1
@@ -1,8 +1,9 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
1
+ import { jsx, jsxs, Fragment as Fragment$1 } from "react/jsx-runtime";
2
2
  import { useMemo, useRef, useState, useEffect, useLayoutEffect, Fragment } from "react";
3
3
  import { createPortal } from "react-dom";
4
4
  import { cn } from "../lib/utils.js";
5
- import { Icon, LabelIcon } from "../data/Icon.js";
5
+ import { FilterPill } from "../data/FilterPill.js";
6
+ import { LabelIcon, Icon } from "../data/Icon.js";
6
7
  import { inputSizeClass } from "./json-schema-form-size.js";
7
8
  import { useFloatingZIndex } from "../overlay/modalStack.js";
8
9
  import { UiClose } from "../icons/components/UiClose.js";
@@ -27,34 +28,51 @@ function Combobox(props) {
27
28
  onSearch,
28
29
  onKeyDown: onKeyDownProp,
29
30
  suffix,
30
- prefix
31
+ prefix,
32
+ footer
31
33
  } = props;
32
34
  const multiple = props.multiple === true;
33
- const selectedValues = useMemo(
34
- () => multiple ? props.value : props.value ? [props.value] : [],
35
- [multiple, props.value]
35
+ const tristate = props.multiple === true && props.tristate === true;
36
+ const modes = useMemo(
37
+ () => props.multiple === true && props.tristate === true ? props.value : {},
38
+ [props.multiple, props.tristate, props.value]
36
39
  );
40
+ const selectedValues = useMemo(() => {
41
+ if (props.multiple === true && props.tristate === true) return Object.keys(props.value);
42
+ if (props.multiple === true) return props.value;
43
+ return props.value ? [props.value] : [];
44
+ }, [props.multiple, props.tristate, props.value]);
37
45
  const rootRef = useRef(null);
38
46
  const anchorRef = useRef(null);
39
47
  const inputRef = useRef(null);
40
48
  const listRef = useRef(null);
49
+ const labelRef = useRef(null);
41
50
  const [open, setOpen] = useState(false);
42
51
  const floatingZ = useFloatingZIndex();
43
52
  const [menuPos, setMenuPos] = useState(null);
44
53
  const [query, setQuery] = useState("");
45
54
  const [highlighted, setHighlighted] = useState(-1);
55
+ const [labelWidth, setLabelWidth] = useState(0);
46
56
  const isSelected = (optValue) => selectedValues.includes(optValue);
47
57
  const closedLabel = useMemo(() => {
48
- var _a;
58
+ if (tristate) {
59
+ const values = Object.values(modes);
60
+ const includes = values.filter((mode) => mode === "include").length;
61
+ const excludes = values.length - includes;
62
+ return [includes > 0 && `+${includes}`, excludes > 0 && `-${excludes}`].filter(Boolean).join(" ");
63
+ }
49
64
  if (multiple) {
50
- const labels = options.filter((o) => selectedValues.includes(o.value)).map((o) => o.label);
65
+ const labels = options.filter((o) => selectedValues.includes(o.value)).map((o) => o.selectedLabel ?? o.label);
51
66
  if (labels.length === 0) return "";
52
67
  if (labels.length <= 2) return labels.join(", ");
53
68
  return `${labels.length} selected`;
54
69
  }
55
70
  const single = selectedValues[0] ?? "";
56
- return ((_a = options.find((o) => o.value === single)) == null ? void 0 : _a.label) ?? single;
57
- }, [multiple, options, selectedValues]);
71
+ const selected = options.find((o) => o.value === single);
72
+ return (selected == null ? void 0 : selected.selectedLabel) ?? (selected == null ? void 0 : selected.label) ?? single;
73
+ }, [tristate, modes, multiple, options, selectedValues]);
74
+ const selectedOption = multiple ? void 0 : options.find((o) => o.value === selectedValues[0]);
75
+ const effectivePrefix = prefix ?? ((selectedOption == null ? void 0 : selectedOption.icon) != null ? /* @__PURE__ */ jsx(LabelIcon, { icon: selectedOption.icon, className: "size-4" }) : null);
58
76
  const displayValue = open ? query : closedLabel;
59
77
  const filtered = useMemo(() => {
60
78
  if (onSearch) return withSelectedOptions(options, selectedValues);
@@ -69,9 +87,22 @@ function Combobox(props) {
69
87
  const handle = setTimeout(() => onSearch(query.trim()), 250);
70
88
  return () => clearTimeout(handle);
71
89
  }, [onSearch, open, query]);
90
+ const trimmedQuery = query.trim();
91
+ const customEntry = useMemo(() => {
92
+ if (!tristate || !allowCustomValue || !trimmedQuery) return null;
93
+ const exists = filtered.some((o) => o.value === trimmedQuery);
94
+ return exists ? null : { value: trimmedQuery, label: trimmedQuery };
95
+ }, [tristate, allowCustomValue, trimmedQuery, filtered]);
96
+ const navOptions = useMemo(
97
+ () => customEntry ? [...filtered, customEntry] : filtered,
98
+ [filtered, customEntry]
99
+ );
72
100
  useEffect(() => {
73
101
  setHighlighted(-1);
74
- }, [filtered.length]);
102
+ }, [query]);
103
+ useEffect(() => {
104
+ if (highlighted >= navOptions.length) setHighlighted(-1);
105
+ }, [highlighted, navOptions.length]);
75
106
  useEffect(() => {
76
107
  if (!open) return;
77
108
  const onAway = (e) => {
@@ -88,6 +119,14 @@ function Combobox(props) {
88
119
  document.removeEventListener("focusin", onAway);
89
120
  };
90
121
  });
122
+ useLayoutEffect(() => {
123
+ if (label == null) {
124
+ setLabelWidth(0);
125
+ return;
126
+ }
127
+ const el = labelRef.current;
128
+ if (el) setLabelWidth(el.offsetWidth);
129
+ }, [label]);
91
130
  useLayoutEffect(() => {
92
131
  if (!open) {
93
132
  setMenuPos(null);
@@ -120,13 +159,30 @@ function Combobox(props) {
120
159
  };
121
160
  }, [open]);
122
161
  function emit(next) {
123
- if (multiple) {
162
+ if (props.multiple === true && props.tristate !== true) {
124
163
  props.onChange(next);
125
- } else {
164
+ } else if (props.multiple !== true) {
126
165
  props.onChange(next[0] ?? "");
127
166
  }
128
167
  }
168
+ function emitModes(next) {
169
+ if (props.multiple === true && props.tristate === true) props.onChange(next);
170
+ }
171
+ function setMode(value, mode) {
172
+ const next = { ...modes };
173
+ if (mode === "include" || mode === "exclude") next[value] = mode;
174
+ else delete next[value];
175
+ emitModes(next);
176
+ }
177
+ function cycleOption(value) {
178
+ const current = modes[value];
179
+ setMode(
180
+ value,
181
+ current === void 0 ? "include" : current === "include" ? "exclude" : "neutral"
182
+ );
183
+ }
129
184
  function openMenu() {
185
+ if (open) return;
130
186
  setQuery("");
131
187
  setHighlighted(-1);
132
188
  setOpen(true);
@@ -141,33 +197,41 @@ function Combobox(props) {
141
197
  setHighlighted(-1);
142
198
  }
143
199
  function selectOption(opt) {
144
- var _a, _b;
200
+ var _a, _b, _c;
201
+ if (tristate) {
202
+ cycleOption(opt.value);
203
+ (_a = inputRef.current) == null ? void 0 : _a.focus();
204
+ return;
205
+ }
145
206
  if (multiple) {
146
207
  const next = isSelected(opt.value) ? selectedValues.filter((v) => v !== opt.value) : [...selectedValues, opt.value];
147
208
  emit(next);
148
- setQuery("");
149
209
  setHighlighted(-1);
150
- (_a = inputRef.current) == null ? void 0 : _a.focus();
210
+ (_b = inputRef.current) == null ? void 0 : _b.focus();
151
211
  return;
152
212
  }
153
213
  emit([opt.value]);
154
214
  setQuery("");
155
215
  setOpen(false);
156
216
  setHighlighted(-1);
157
- (_b = inputRef.current) == null ? void 0 : _b.focus();
217
+ (_c = inputRef.current) == null ? void 0 : _c.focus();
158
218
  }
159
219
  function clear() {
160
220
  var _a;
161
- if (selectedValues.length > 0) emit([]);
221
+ if (selectedValues.length > 0) {
222
+ if (tristate) emitModes({});
223
+ else emit([]);
224
+ }
162
225
  setQuery("");
163
226
  setHighlighted(-1);
164
227
  (_a = inputRef.current) == null ? void 0 : _a.focus();
165
228
  }
166
229
  function scrollToHighlighted(index) {
230
+ var _a;
167
231
  const list = listRef.current;
168
232
  if (!list) return;
169
233
  const item = list.querySelectorAll('[role="option"]')[index];
170
- item == null ? void 0 : item.scrollIntoView({ block: "nearest" });
234
+ (_a = item == null ? void 0 : item.scrollIntoView) == null ? void 0 : _a.call(item, { block: "nearest" });
171
235
  }
172
236
  function onKeyDown(e) {
173
237
  if (e.key === "ArrowDown") {
@@ -176,19 +240,19 @@ function Combobox(props) {
176
240
  openMenu();
177
241
  return;
178
242
  }
179
- const next = highlighted < filtered.length - 1 ? highlighted + 1 : 0;
243
+ const next = highlighted < navOptions.length - 1 ? highlighted + 1 : 0;
180
244
  setHighlighted(next);
181
245
  scrollToHighlighted(next);
182
246
  } else if (e.key === "ArrowUp") {
183
247
  e.preventDefault();
184
248
  if (!open) return;
185
- const next = highlighted > 0 ? highlighted - 1 : filtered.length - 1;
249
+ const next = highlighted > 0 ? highlighted - 1 : navOptions.length - 1;
186
250
  setHighlighted(next);
187
251
  scrollToHighlighted(next);
188
252
  } else if (e.key === "Enter") {
189
- if (open && highlighted >= 0 && filtered[highlighted] && !filtered[highlighted].disabled) {
253
+ if (open && highlighted >= 0 && navOptions[highlighted] && !navOptions[highlighted].disabled) {
190
254
  e.preventDefault();
191
- selectOption(filtered[highlighted]);
255
+ selectOption(navOptions[highlighted]);
192
256
  return;
193
257
  }
194
258
  commitAndClose();
@@ -209,7 +273,14 @@ function Combobox(props) {
209
273
  const showClear = !required && !loading && !disabled && selectedValues.length > 0;
210
274
  return /* @__PURE__ */ jsxs("div", { ref: rootRef, className: cn("relative", className), children: [
211
275
  /* @__PURE__ */ jsxs("div", { ref: anchorRef, "data-jsf-control": true, className: "relative flex items-center", children: [
212
- label != null && /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 z-10 whitespace-nowrap font-medium uppercase tracking-wide text-muted-foreground text-[10px]", children: label }),
276
+ label != null && /* @__PURE__ */ jsx(
277
+ "span",
278
+ {
279
+ ref: labelRef,
280
+ className: "pointer-events-none absolute left-2 z-10 whitespace-nowrap font-medium uppercase tracking-wide text-muted-foreground text-[10px]",
281
+ children: label
282
+ }
283
+ ),
213
284
  /* @__PURE__ */ jsx(
214
285
  "input",
215
286
  {
@@ -238,16 +309,16 @@ function Combobox(props) {
238
309
  className: cn(
239
310
  "w-full rounded-md border border-input bg-background text-foreground",
240
311
  size ? inputSizeClass[size] : "h-control-h px-control-px text-sm",
241
- prefix && "pl-8",
312
+ effectivePrefix && "pl-8",
242
313
  suffix ? showClear ? "pr-[5.5rem]" : "pr-14" : showClear ? "pr-14" : "pr-8",
243
314
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
244
315
  "disabled:cursor-not-allowed disabled:opacity-50",
245
316
  invalid && "border-destructive focus-visible:ring-destructive"
246
317
  ),
247
- style: label != null ? labelPadding(label) : void 0
318
+ style: label != null ? labelPadding(label, labelWidth) : void 0
248
319
  }
249
320
  ),
250
- prefix && /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 left-1.5 flex items-center", children: prefix }),
321
+ effectivePrefix && /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 left-1.5 flex items-center", children: effectivePrefix }),
251
322
  suffix && /* @__PURE__ */ jsx("div", { className: cn("absolute flex h-full items-center", showClear ? "right-[3.75rem]" : "right-7"), children: suffix }),
252
323
  showClear && /* @__PURE__ */ jsx(
253
324
  "button",
@@ -311,6 +382,7 @@ function Combobox(props) {
311
382
  filtered.map((opt, i) => {
312
383
  var _a;
313
384
  const selected = isSelected(opt.value);
385
+ const mode = tristate ? modes[opt.value] : void 0;
314
386
  const showHeader = opt.group != null && opt.group !== ((_a = filtered[i - 1]) == null ? void 0 : _a.group);
315
387
  return /* @__PURE__ */ jsxs(Fragment, { children: [
316
388
  showHeader && /* @__PURE__ */ jsx(
@@ -321,25 +393,41 @@ function Combobox(props) {
321
393
  children: opt.group
322
394
  }
323
395
  ),
324
- /* @__PURE__ */ jsxs(
396
+ /* @__PURE__ */ jsx(
325
397
  "div",
326
398
  {
327
399
  id: listId ? `${listId}-${i}` : void 0,
328
400
  role: "option",
329
- "aria-selected": selected,
401
+ "aria-selected": tristate ? mode != null : selected,
330
402
  "aria-disabled": opt.disabled,
403
+ ...mode != null ? { "aria-label": `${opt.label}, ${mode === "include" ? "included" : "excluded"}` } : {},
404
+ ...opt.title !== void 0 ? { title: opt.title } : {},
405
+ ...tristate ? { "data-filter-option": opt.value } : {},
331
406
  onMouseDown: (e) => {
332
407
  e.preventDefault();
333
- if (!opt.disabled) selectOption(opt);
408
+ if (!tristate && !opt.disabled) selectOption(opt);
334
409
  },
410
+ ...tristate ? { onClick: () => {
411
+ if (!opt.disabled) selectOption(opt);
412
+ } } : {},
335
413
  onMouseEnter: () => setHighlighted(i),
336
414
  className: cn(
337
415
  "flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm",
338
416
  i === highlighted && "bg-accent",
339
- selected && "font-medium",
417
+ selected && !tristate && "font-medium",
340
418
  opt.disabled && "cursor-not-allowed opacity-50"
341
419
  ),
342
- children: [
420
+ children: tristate ? /* @__PURE__ */ jsx(
421
+ FilterPill,
422
+ {
423
+ mode: mode ?? "neutral",
424
+ togglePosition: "right",
425
+ interactive: false,
426
+ label: opt.label,
427
+ onModeChange: (next) => setMode(opt.value, next),
428
+ className: "w-full justify-between"
429
+ }
430
+ ) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
343
431
  /* @__PURE__ */ jsx(
344
432
  Icon,
345
433
  {
@@ -349,11 +437,33 @@ function Combobox(props) {
349
437
  ),
350
438
  /* @__PURE__ */ jsx(LabelIcon, { icon: opt.icon, className: "text-sm text-muted-foreground" }),
351
439
  /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: opt.label })
352
- ]
440
+ ] })
353
441
  }
354
442
  )
355
443
  ] }, opt.value);
356
- })
444
+ }),
445
+ customEntry && /* @__PURE__ */ jsxs(
446
+ "div",
447
+ {
448
+ id: listId ? `${listId}-${filtered.length}` : void 0,
449
+ role: "option",
450
+ "aria-selected": false,
451
+ "data-filter-add-custom": customEntry.value,
452
+ onMouseDown: (e) => e.preventDefault(),
453
+ onClick: () => selectOption(customEntry),
454
+ onMouseEnter: () => setHighlighted(filtered.length),
455
+ className: cn(
456
+ "flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-primary",
457
+ highlighted === filtered.length && "bg-accent"
458
+ ),
459
+ children: [
460
+ 'Add "',
461
+ customEntry.value,
462
+ '"'
463
+ ]
464
+ }
465
+ ),
466
+ footer != null && /* @__PURE__ */ jsx("div", { className: "select-none px-2 py-1.5 text-[11px] text-muted-foreground", children: footer })
357
467
  ]
358
468
  }
359
469
  ),
@@ -361,9 +471,10 @@ function Combobox(props) {
361
471
  )
362
472
  ] });
363
473
  }
364
- function labelPadding(label) {
474
+ function labelPadding(label, measuredWidth) {
475
+ if (measuredWidth > 0) return { paddingLeft: `calc(${measuredWidth}px + 0.75rem)` };
365
476
  if (typeof label !== "string") return { paddingLeft: "1.75rem" };
366
- return { paddingLeft: `${Math.min(label.length * 0.62 + 0.75, 9)}rem` };
477
+ return { paddingLeft: `${Math.min(label.length * 0.48 + 0.75, 7)}rem` };
367
478
  }
368
479
  function withSelectedOptions(options, selectedValues) {
369
480
  const present = new Set(options.map((o) => o.value));
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.js","sources":["../../src/components/Combobox.tsx"],"sourcesContent":["import {\n Fragment,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, LabelIcon, type LabelIconSpec } from \"../data/Icon\";\nimport { UiChevronDown, UiClose, UiCheck } from \"../icons\";\nimport { inputSizeClass, type FormSize } from \"./json-schema-form-size\";\nimport { useFloatingZIndex } from \"../overlay/modalStack\";\n\n// Upper bound the open dropdown grows to in order to show full option labels\n// before they truncate. The menu's minimum is always the input's width.\nconst MENU_MAX_WIDTH_PX = 400;\n\n// Matches the menu's `max-h-64` (16rem) cap; also the threshold below which the\n// menu flips above the input instead of opening downward off-screen.\nconst MENU_MAX_HEIGHT_PX = 256;\n\nexport type ComboboxOption = {\n value: string;\n label: string;\n disabled?: boolean;\n /** Leading glyph for the option: a runtime icon name or a rendered node. */\n icon?: LabelIconSpec;\n /**\n * Optional section label. A non-interactive header renders above the first\n * option of each group (options are grouped by contiguous `group` value in\n * the order provided). Options without a `group` render no header.\n */\n group?: string;\n};\n\ntype ComboboxBaseProps = {\n /** Available options, rendered in the order provided. */\n options: ComboboxOption[];\n /** Ghost text when no value is set. */\n placeholder?: string;\n /** Optional label rendered inline inside the control, before the input. */\n label?: ReactNode;\n /**\n * Accessible name for the input. Use when `label` is a non-string node (e.g.\n * an icon) so the control still has a text name for screen readers; defaults\n * to `label` when it is a string.\n */\n ariaLabel?: string;\n /** Disables the input. */\n disabled?: boolean;\n /** When true, the value cannot be cleared (the clear button is hidden). */\n required?: boolean;\n /**\n * Marks the control as invalid: renders a destructive border and sets\n * aria-invalid. Purely presentational — the consumer decides what invalid\n * means (e.g. a value absent from the options in a strict picker).\n */\n invalid?: boolean;\n /**\n * When false, the value is restricted to the provided options — typed text\n * that does not match an option is discarded instead of committed. Defaults\n * to true (freeform entry allowed).\n */\n allowCustomValue?: boolean;\n /** HTML id for the input element. */\n id?: string;\n /**\n * Overrides the input's height/padding/text size with an explicit size token\n * (xs–xl). When unset, the input uses the global density tokens.\n */\n size?: FormSize;\n /** Classes applied to the root wrapper. */\n className?: string;\n /** Shows a loading indicator when options are being fetched. */\n loading?: boolean;\n /**\n * Optional async search invoked (debounced ~250ms) as the user types. The\n * consumer fetches and feeds matching options back via the `options` prop\n * (setting `loading` while in flight). When set, the component renders the\n * provided `options` as-is instead of filtering them client-side — the\n * server has already filtered. When absent, typing filters `options`\n * client-side as before.\n */\n onSearch?: (query: string) => void;\n /** Called when a key is pressed in the input. */\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n /** Trailing in-field adornment, rendered left of the clear/chevron controls. */\n suffix?: ReactNode;\n /** Leading in-field adornment, rendered at the left edge of the input. */\n prefix?: ReactNode;\n};\n\nexport type ComboboxSingleProps = ComboboxBaseProps & {\n multiple?: false;\n /** Controlled selected value. */\n value: string;\n /** Called when the selected value changes (from list or freeform input). */\n onChange: (value: string) => void;\n};\n\nexport type ComboboxMultiProps = ComboboxBaseProps & {\n multiple: true;\n /** Controlled selected values. */\n value: string[];\n /** Called with the complete next value array after each toggle. */\n onChange: (value: string[]) => void;\n};\n\nexport type ComboboxProps = ComboboxSingleProps | ComboboxMultiProps;\n\nexport function Combobox(props: ComboboxProps) {\n const {\n options,\n placeholder,\n label,\n ariaLabel: ariaLabelProp,\n disabled,\n required,\n invalid,\n allowCustomValue = true,\n id,\n size,\n className,\n loading,\n onSearch,\n onKeyDown: onKeyDownProp,\n suffix,\n prefix,\n } = props;\n const multiple = props.multiple === true;\n const selectedValues = useMemo<string[]>(\n () => (multiple ? props.value : props.value ? [props.value] : []),\n [multiple, props.value],\n );\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const floatingZ = useFloatingZIndex();\n // Fixed-position coordinates for the portaled listbox, measured from the\n // input row. `width` is the input width (the menu's minimum); `maxWidth` caps\n // content growth at 400px, further bounded by the viewport. Null until first\n // measured so we never render at (0,0).\n // Either `top` (opening downward) or `bottom` (flipped upward when space below\n // is tight, e.g. a control docked near the viewport bottom) is set, never both.\n const [menuPos, setMenuPos] = useState<{\n top?: number;\n bottom?: number;\n left: number;\n width: number;\n maxWidth: number;\n maxHeight: number;\n } | null>(null);\n // `query` is the type-ahead filter text, kept separate from the committed\n // value. It is empty unless the user is actively typing, so opening the\n // dropdown shows every option rather than only the selected one.\n const [query, setQuery] = useState(\"\");\n const [highlighted, setHighlighted] = useState(-1);\n\n const isSelected = (optValue: string) => selectedValues.includes(optValue);\n\n // Closed-state input text. Single: the selected option's label (or its raw\n // value as a fallback). Multi: a summary mirroring MultiSelect.\n const closedLabel = useMemo(() => {\n if (multiple) {\n const labels = options\n .filter((o) => selectedValues.includes(o.value))\n .map((o) => o.label);\n if (labels.length === 0) return \"\";\n if (labels.length <= 2) return labels.join(\", \");\n return `${labels.length} selected`;\n }\n const single = selectedValues[0] ?? \"\";\n return options.find((o) => o.value === single)?.label ?? single;\n }, [multiple, options, selectedValues]);\n\n // While open the input mirrors the query; while closed it shows the\n // committed selection's label/summary.\n const displayValue = open ? query : closedLabel;\n\n const filtered = useMemo(() => {\n // With onSearch the server already filtered. The matches replace the list,\n // but any already-selected value not in the matches is pinned so the user's\n // selection stays visible and toggleable. Selected values carry no label\n // object here, so synthesize {value, label: value} (the typeahead's value is\n // its own human label).\n if (onSearch) return withSelectedOptions(options, selectedValues);\n const q = query.toLowerCase().trim();\n if (!q) return options;\n return options.filter(\n (o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q),\n );\n }, [onSearch, options, query, selectedValues]);\n\n // Debounced server-side search: fires onSearch ~250ms after the query settles\n // while the menu is open. The empty-query call lets the consumer reset its\n // result set. Only active when onSearch is provided.\n useEffect(() => {\n if (!onSearch || !open) return;\n const handle = setTimeout(() => onSearch(query.trim()), 250);\n return () => clearTimeout(handle);\n }, [onSearch, open, query]);\n\n useEffect(() => {\n setHighlighted(-1);\n }, [filtered.length]);\n\n useEffect(() => {\n if (!open) return;\n // Dismiss when the pointer goes down, OR focus moves, anywhere outside the\n // control and its portaled listbox — so clicking elsewhere in a dialog (the\n // backdrop never intercepts a document-level listener) or tabbing to another\n // field both close the menu. The listbox is portaled out of rootRef, so a\n // click inside it would otherwise read as \"outside\" and close before select.\n const onAway = (e: Event) => {\n const target = e.target as Node;\n if (!rootRef.current?.contains(target) && !listRef.current?.contains(target)) {\n commitAndClose();\n }\n };\n document.addEventListener(\"mousedown\", onAway);\n document.addEventListener(\"focusin\", onAway);\n return () => {\n document.removeEventListener(\"mousedown\", onAway);\n document.removeEventListener(\"focusin\", onAway);\n };\n });\n\n // Position the portaled listbox with fixed coordinates measured from the\n // input row, so it escapes any overflow-hidden / scroll ancestor (e.g. a\n // Modal body) that would otherwise clip it. Mirrors HoverCard's approach.\n useLayoutEffect(() => {\n if (!open) {\n setMenuPos(null);\n return;\n }\n const update = () => {\n const anchor = anchorRef.current;\n if (!anchor) return;\n const rect = anchor.getBoundingClientRect();\n // The menu may grow rightward up to 400px, but not past the viewport edge\n // (leaving an 8px gutter). Never let the cap fall below the input width.\n const viewportCap = window.innerWidth - rect.left - 8;\n const maxWidth = Math.max(rect.width, Math.min(MENU_MAX_WIDTH_PX, viewportCap));\n // Flip upward when there isn't room below for the menu but there is above\n // (the input is docked near the viewport bottom). The available side bounds\n // the menu height so it never runs off-screen.\n const spaceBelow = window.innerHeight - rect.bottom - 8;\n const spaceAbove = rect.top - 8;\n const openUp = spaceBelow < MENU_MAX_HEIGHT_PX && spaceAbove > spaceBelow;\n const maxHeight = Math.min(MENU_MAX_HEIGHT_PX, openUp ? spaceAbove : spaceBelow);\n setMenuPos({\n ...(openUp\n ? { bottom: window.innerHeight - rect.top + 4 }\n : { top: rect.bottom + 4 }),\n left: rect.left,\n width: rect.width,\n maxWidth,\n maxHeight,\n });\n };\n update();\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n return () => {\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n };\n }, [open]);\n\n function emit(next: string[]) {\n if (multiple) {\n props.onChange(next);\n } else {\n props.onChange(next[0] ?? \"\");\n }\n }\n\n function openMenu() {\n setQuery(\"\");\n setHighlighted(-1);\n setOpen(true);\n }\n\n function commitAndClose() {\n // Freeform commit (single, allowCustomValue only): a non-empty query that\n // doesn't match an option becomes the value. An empty query keeps the\n // existing selection. Multi and strict modes never commit freeform text.\n const trimmed = query.trim();\n if (!multiple && allowCustomValue && trimmed && trimmed !== selectedValues[0]) {\n emit([trimmed]);\n }\n setQuery(\"\");\n setOpen(false);\n setHighlighted(-1);\n }\n\n function selectOption(opt: ComboboxOption) {\n if (multiple) {\n const next = isSelected(opt.value)\n ? selectedValues.filter((v) => v !== opt.value)\n : [...selectedValues, opt.value];\n emit(next);\n setQuery(\"\");\n setHighlighted(-1);\n inputRef.current?.focus();\n return;\n }\n emit([opt.value]);\n setQuery(\"\");\n setOpen(false);\n setHighlighted(-1);\n inputRef.current?.focus();\n }\n\n function clear() {\n if (selectedValues.length > 0) emit([]);\n setQuery(\"\");\n setHighlighted(-1);\n inputRef.current?.focus();\n }\n\n function scrollToHighlighted(index: number) {\n const list = listRef.current;\n if (!list) return;\n // Query option rows by role rather than child index — interleaved group\n // header rows are direct children too, so children[index] would be offset.\n const item = list.querySelectorAll<HTMLElement>('[role=\"option\"]')[index];\n item?.scrollIntoView({ block: \"nearest\" });\n }\n\n function onKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (!open) {\n openMenu();\n return;\n }\n const next = highlighted < filtered.length - 1 ? highlighted + 1 : 0;\n setHighlighted(next);\n scrollToHighlighted(next);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n if (!open) return;\n const next = highlighted > 0 ? highlighted - 1 : filtered.length - 1;\n setHighlighted(next);\n scrollToHighlighted(next);\n } else if (e.key === \"Enter\") {\n if (open && highlighted >= 0 && filtered[highlighted] && !filtered[highlighted].disabled) {\n e.preventDefault();\n selectOption(filtered[highlighted]);\n return;\n }\n commitAndClose();\n onKeyDownProp?.(e);\n } else if (e.key === \"Escape\") {\n if (open) {\n e.preventDefault();\n setQuery(\"\");\n setOpen(false);\n setHighlighted(-1);\n }\n } else {\n onKeyDownProp?.(e);\n }\n }\n\n const listId = id ? `${id}-listbox` : undefined;\n const ariaLabel = ariaLabelProp ?? (typeof label === \"string\" ? label : undefined);\n const showClear = !required && !loading && !disabled && selectedValues.length > 0;\n\n return (\n <div ref={rootRef} className={cn(\"relative\", className)}>\n <div ref={anchorRef} data-jsf-control className=\"relative flex items-center\">\n {label != null && (\n <span className=\"pointer-events-none absolute left-2 z-10 whitespace-nowrap font-medium uppercase tracking-wide text-muted-foreground text-[10px]\">\n {label}\n </span>\n )}\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listId}\n aria-activedescendant={highlighted >= 0 ? `${listId}-${highlighted}` : undefined}\n aria-label={ariaLabel}\n aria-invalid={invalid || undefined}\n autoComplete=\"off\"\n disabled={disabled}\n placeholder={placeholder}\n value={displayValue}\n onChange={(e) => {\n setQuery(e.target.value);\n if (!open) setOpen(true);\n }}\n onFocus={openMenu}\n // Reopen on click too: focus only fires on the first focus, so a click\n // on an already-focused-but-closed input (e.g. after selecting, or\n // after Escape) would otherwise do nothing.\n onClick={() => {\n if (!open) openMenu();\n }}\n onKeyDown={onKeyDown}\n className={cn(\n \"w-full rounded-md border border-input bg-background text-foreground\",\n size ? inputSizeClass[size] : \"h-control-h px-control-px text-sm\",\n prefix && \"pl-8\",\n suffix ? (showClear ? \"pr-[5.5rem]\" : \"pr-14\") : showClear ? \"pr-14\" : \"pr-8\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n invalid && \"border-destructive focus-visible:ring-destructive\",\n )}\n style={label != null ? labelPadding(label) : undefined}\n />\n {prefix && (\n <div className=\"absolute inset-y-0 left-1.5 flex items-center\">{prefix}</div>\n )}\n {suffix && (\n <div className={cn(\"absolute flex h-full items-center\", showClear ? \"right-[3.75rem]\" : \"right-7\")}>\n {suffix}\n </div>\n )}\n {showClear && (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Clear\"\n onClick={clear}\n className=\"absolute right-7 flex h-full items-center px-1 text-muted-foreground hover:text-foreground\"\n >\n <Icon icon={UiClose} className=\"text-xs\" />\n </button>\n )}\n {loading ? (\n <span className=\"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2\">\n <svg className=\"h-3.5 w-3.5 animate-spin text-muted-foreground\" viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" strokeWidth=\"2\" opacity=\"0.25\" />\n <path d=\"M14.5 8a6.5 6.5 0 0 0-6.5-6.5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </span>\n ) : (\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={disabled}\n aria-label=\"Toggle options\"\n onClick={() => {\n if (open) {\n commitAndClose();\n } else {\n openMenu();\n inputRef.current?.focus();\n }\n }}\n className=\"pointer-events-auto absolute right-0 flex h-full items-center px-2 text-muted-foreground\"\n >\n <Icon icon={UiChevronDown} className=\"text-xs\" />\n </button>\n )}\n </div>\n {open && menuPos && typeof document !== \"undefined\" &&\n createPortal(\n <div\n id={listId}\n ref={listRef}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n style={{\n position: \"fixed\",\n ...(menuPos.top != null ? { top: menuPos.top } : { bottom: menuPos.bottom }),\n left: menuPos.left,\n // Grow to fit the widest option, but never narrower than the input\n // nor wider than 400px (beyond which option labels truncate). The\n // cap is also bounded by the viewport so the menu can't overflow.\n minWidth: menuPos.width,\n maxWidth: menuPos.maxWidth,\n maxHeight: menuPos.maxHeight,\n zIndex: floatingZ,\n }}\n className=\"w-max overflow-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\"\n >\n {loading && filtered.length === 0 && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">Loading…</div>\n )}\n {!loading && filtered.length === 0 && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">No results</div>\n )}\n {filtered.map((opt, i) => {\n const selected = isSelected(opt.value);\n // A header renders above the first option of each group. Derived\n // from the surviving (filtered) options, so an empty group emits no\n // header. The option keeps `i` (its index in `filtered`) for\n // id/highlight/select — headers are role=\"presentation\", never\n // counted in the highlight/scroll index.\n const showHeader = opt.group != null && opt.group !== filtered[i - 1]?.group;\n return (\n <Fragment key={opt.value}>\n {showHeader && (\n <div\n role=\"presentation\"\n className=\"select-none px-2 pb-1 pt-2 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {opt.group}\n </div>\n )}\n <div\n id={listId ? `${listId}-${i}` : undefined}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={opt.disabled}\n onMouseDown={(e) => {\n e.preventDefault();\n if (!opt.disabled) selectOption(opt);\n }}\n onMouseEnter={() => setHighlighted(i)}\n className={cn(\n \"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm\",\n i === highlighted && \"bg-accent\",\n selected && \"font-medium\",\n opt.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n <Icon\n icon={UiCheck}\n className={cn(\"text-xs shrink-0\", selected ? \"opacity-100\" : \"opacity-0\")}\n />\n <LabelIcon icon={opt.icon} className=\"text-sm text-muted-foreground\" />\n <span className=\"min-w-0 truncate\">{opt.label}</span>\n </div>\n </Fragment>\n );\n })}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n\n// Reserve room on the left of the input for the inline label so typed text\n// does not overlap it. Node labels (an icon from comboboxLabelProps) are\n// compact, so reserve a fixed icon-sized inset; text labels scale with their\n// character count at roughly 0.6rem per character plus padding.\nfunction labelPadding(label: ReactNode) {\n if (typeof label !== \"string\") return { paddingLeft: \"1.75rem\" };\n return { paddingLeft: `${Math.min(label.length * 0.62 + 0.75, 9)}rem` };\n}\n\n// withSelectedOptions returns the option list plus any selected value that isn't\n// already present, synthesized as {value, label: value}. Used by the server\n// (onSearch) typeahead so an already-selected value missing from the current\n// matches still renders as a checked row. Selected-but-absent values come first\n// so they don't get scrolled past by a long match list.\nfunction withSelectedOptions(\n options: ComboboxOption[],\n selectedValues: string[],\n): ComboboxOption[] {\n const present = new Set(options.map((o) => o.value));\n const pinned = selectedValues\n .filter((v) => !present.has(v))\n .map((v) => ({ value: v, label: v }));\n return pinned.length === 0 ? options : [...pinned, ...options];\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Combobox.js","sources":["../../src/components/Combobox.tsx"],"sourcesContent":["import {\n Fragment,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../lib/utils\";\nimport { FilterPill } from \"../data/FilterPill\";\nimport { Icon, LabelIcon, type LabelIconSpec } from \"../data/Icon\";\nimport { UiChevronDown, UiClose, UiCheck } from \"../icons\";\nimport { inputSizeClass, type FormSize } from \"./json-schema-form-size\";\nimport { useFloatingZIndex } from \"../overlay/modalStack\";\n\n// Upper bound the open dropdown grows to in order to show full option labels\n// before they truncate. The menu's minimum is always the input's width.\nconst MENU_MAX_WIDTH_PX = 400;\n\n// Matches the menu's `max-h-64` (16rem) cap; also the threshold below which the\n// menu flips above the input instead of opening downward off-screen.\nconst MENU_MAX_HEIGHT_PX = 256;\n\nexport type ComboboxOption = {\n value: string;\n /** Full label used for searching and in the open option menu. */\n label: string;\n /** Optional compact label used only while this option is selected and closed. */\n selectedLabel?: string;\n disabled?: boolean;\n /** Leading glyph for the option: a runtime icon name or a rendered node. */\n icon?: LabelIconSpec;\n /**\n * Optional section label. A non-interactive header renders above the first\n * option of each group (options are grouped by contiguous `group` value in\n * the order provided). Options without a `group` render no header.\n */\n group?: string;\n /** Browser tooltip on the option row (for truncated or explanatory labels). */\n title?: string;\n};\n\ntype ComboboxBaseProps = {\n /** Available options, rendered in the order provided. */\n options: ComboboxOption[];\n /** Ghost text when no value is set. */\n placeholder?: string;\n /** Optional label rendered inline inside the control, before the input. */\n label?: ReactNode;\n /**\n * Accessible name for the input. Use when `label` is a non-string node (e.g.\n * an icon) so the control still has a text name for screen readers; defaults\n * to `label` when it is a string.\n */\n ariaLabel?: string;\n /** Disables the input. */\n disabled?: boolean;\n /** When true, the value cannot be cleared (the clear button is hidden). */\n required?: boolean;\n /**\n * Marks the control as invalid: renders a destructive border and sets\n * aria-invalid. Purely presentational — the consumer decides what invalid\n * means (e.g. a value absent from the options in a strict picker).\n */\n invalid?: boolean;\n /**\n * When false, the value is restricted to the provided options — typed text\n * that does not match an option is discarded instead of committed. Defaults\n * to true (freeform entry allowed).\n */\n allowCustomValue?: boolean;\n /** HTML id for the input element. */\n id?: string;\n /**\n * Overrides the input's height/padding/text size with an explicit size token\n * (xs–xl). When unset, the input uses the global density tokens.\n */\n size?: FormSize;\n /** Classes applied to the root wrapper. */\n className?: string;\n /** Shows a loading indicator when options are being fetched. */\n loading?: boolean;\n /**\n * Optional async search invoked (debounced ~250ms) as the user types. The\n * consumer fetches and feeds matching options back via the `options` prop\n * (setting `loading` while in flight). When set, the component renders the\n * provided `options` as-is instead of filtering them client-side — the\n * server has already filtered. When absent, typing filters `options`\n * client-side as before.\n */\n onSearch?: (query: string) => void;\n /** Called when a key is pressed in the input. */\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n /** Trailing in-field adornment, rendered left of the clear/chevron controls. */\n suffix?: ReactNode;\n /** Leading in-field adornment, rendered at the left edge of the input. */\n prefix?: ReactNode;\n /** Non-interactive content pinned below the option rows (e.g. \"… and N more\"). */\n footer?: ReactNode;\n};\n\nexport type ComboboxSingleProps = ComboboxBaseProps & {\n multiple?: false;\n tristate?: false;\n /** Controlled selected value. */\n value: string;\n /** Called when the selected value changes (from list or freeform input). */\n onChange: (value: string) => void;\n};\n\nexport type ComboboxMultiProps = ComboboxBaseProps & {\n multiple: true;\n tristate?: false;\n /** Controlled selected values. */\n value: string[];\n /** Called with the complete next value array after each toggle. */\n onChange: (value: string[]) => void;\n};\n\nexport type ComboboxTriStateMode = \"include\" | \"exclude\";\n\nexport type ComboboxTriStateProps = ComboboxBaseProps & {\n multiple: true;\n /**\n * Tri-state selection: each option cycles unset → include → exclude. Rows\n * render the FilterPill switch; the option itself stays the only focusable\n * surface (keyboard cycles via Enter on the highlighted row).\n */\n tristate: true;\n /** Controlled option modes; unset options are absent from the record. */\n value: Record<string, ComboboxTriStateMode>;\n /** Called with the complete next record after each transition. */\n onChange: (value: Record<string, ComboboxTriStateMode>) => void;\n};\n\nexport type ComboboxProps = ComboboxSingleProps | ComboboxMultiProps | ComboboxTriStateProps;\n\nexport function Combobox(props: ComboboxProps) {\n const {\n options,\n placeholder,\n label,\n ariaLabel: ariaLabelProp,\n disabled,\n required,\n invalid,\n allowCustomValue = true,\n id,\n size,\n className,\n loading,\n onSearch,\n onKeyDown: onKeyDownProp,\n suffix,\n prefix,\n footer,\n } = props;\n const multiple = props.multiple === true;\n const tristate = props.multiple === true && props.tristate === true;\n const modes = useMemo<Record<string, ComboboxTriStateMode>>(\n () => (props.multiple === true && props.tristate === true ? props.value : {}),\n [props.multiple, props.tristate, props.value],\n );\n const selectedValues = useMemo<string[]>(() => {\n if (props.multiple === true && props.tristate === true) return Object.keys(props.value);\n if (props.multiple === true) return props.value;\n return props.value ? [props.value] : [];\n }, [props.multiple, props.tristate, props.value]);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const labelRef = useRef<HTMLSpanElement>(null);\n const [open, setOpen] = useState(false);\n const floatingZ = useFloatingZIndex();\n // Fixed-position coordinates for the portaled listbox, measured from the\n // input row. `width` is the input width (the menu's minimum); `maxWidth` caps\n // content growth at 400px, further bounded by the viewport. Null until first\n // measured so we never render at (0,0).\n // Either `top` (opening downward) or `bottom` (flipped upward when space below\n // is tight, e.g. a control docked near the viewport bottom) is set, never both.\n const [menuPos, setMenuPos] = useState<{\n top?: number;\n bottom?: number;\n left: number;\n width: number;\n maxWidth: number;\n maxHeight: number;\n } | null>(null);\n // `query` is the type-ahead filter text, kept separate from the committed\n // value. It is empty unless the user is actively typing, so opening the\n // dropdown shows every option rather than only the selected one.\n const [query, setQuery] = useState(\"\");\n const [highlighted, setHighlighted] = useState(-1);\n // Measured pixel width of the rendered inline label. Drives the input's left\n // padding so typed text clears the label exactly, for any glyph set (a linear\n // per-character estimate undershoots wide uppercase letters like W/M). 0 until\n // measured (initial paint / no-layout env like jsdom), where a per-character\n // estimate stands in.\n const [labelWidth, setLabelWidth] = useState(0);\n\n const isSelected = (optValue: string) => selectedValues.includes(optValue);\n\n // Closed-state input text. Single: the selected option's label (or its raw\n // value as a fallback). Multi: a summary mirroring MultiSelect. Tristate:\n // \"+N -M\" include/exclude counts (the field name lives in the inline label).\n const closedLabel = useMemo(() => {\n if (tristate) {\n const values = Object.values(modes);\n const includes = values.filter((mode) => mode === \"include\").length;\n const excludes = values.length - includes;\n return [includes > 0 && `+${includes}`, excludes > 0 && `-${excludes}`]\n .filter(Boolean)\n .join(\" \");\n }\n if (multiple) {\n const labels = options\n .filter((o) => selectedValues.includes(o.value))\n .map((o) => o.selectedLabel ?? o.label);\n if (labels.length === 0) return \"\";\n if (labels.length <= 2) return labels.join(\", \");\n return `${labels.length} selected`;\n }\n const single = selectedValues[0] ?? \"\";\n const selected = options.find((o) => o.value === single);\n return selected?.selectedLabel ?? selected?.label ?? single;\n }, [tristate, modes, multiple, options, selectedValues]);\n\n // Single-select: the currently-selected option, so the closed trigger can echo\n // its icon (mirrors closedLabel's lookup above). An out-of-enum/custom value\n // finds nothing → no icon. Multi/tristate skip it (one icon means nothing for\n // several selections).\n const selectedOption = multiple\n ? undefined\n : options.find((o) => o.value === selectedValues[0]);\n // An explicit `prefix` wins; otherwise fall back to the selected option's icon\n // so an icon'd picker reads the same open or closed. LabelIcon renders null for\n // an absent spec, sizes a runtime-name string, and passes a node through as-is.\n const effectivePrefix =\n prefix ??\n (selectedOption?.icon != null ? (\n <LabelIcon icon={selectedOption.icon} className=\"size-4\" />\n ) : null);\n\n // While open the input mirrors the query; while closed it shows the\n // committed selection's label/summary.\n const displayValue = open ? query : closedLabel;\n\n const filtered = useMemo(() => {\n // With onSearch the server already filtered. The matches replace the list,\n // but any already-selected value not in the matches is pinned so the user's\n // selection stays visible and toggleable. Selected values carry no label\n // object here, so synthesize {value, label: value} (the typeahead's value is\n // its own human label).\n if (onSearch) return withSelectedOptions(options, selectedValues);\n const q = query.toLowerCase().trim();\n if (!q) return options;\n return options.filter(\n (o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q),\n );\n }, [onSearch, options, query, selectedValues]);\n\n // Debounced server-side search: fires onSearch ~250ms after the query settles\n // while the menu is open. The empty-query call lets the consumer reset its\n // result set. Only active when onSearch is provided.\n useEffect(() => {\n if (!onSearch || !open) return;\n const handle = setTimeout(() => onSearch(query.trim()), 250);\n return () => clearTimeout(handle);\n }, [onSearch, open, query]);\n\n const trimmedQuery = query.trim();\n // Tristate freeform entry: a typed value matching no option gets an \"Add\"\n // row appended to the keyboard-navigation universe (multi/tristate never\n // commit freeform text through commitAndClose).\n const customEntry = useMemo<ComboboxOption | null>(() => {\n if (!tristate || !allowCustomValue || !trimmedQuery) return null;\n const exists = filtered.some((o) => o.value === trimmedQuery);\n return exists ? null : { value: trimmedQuery, label: trimmedQuery };\n }, [tristate, allowCustomValue, trimmedQuery, filtered]);\n const navOptions = useMemo(\n () => (customEntry ? [...filtered, customEntry] : filtered),\n [filtered, customEntry],\n );\n\n // Reset the highlight when the user types, but not when the option list\n // merely re-arrives (e.g. a background server-search response) — that would\n // yank the highlight mid-keyboard-navigation. A shrunken list clamps it.\n useEffect(() => {\n setHighlighted(-1);\n }, [query]);\n useEffect(() => {\n if (highlighted >= navOptions.length) setHighlighted(-1);\n }, [highlighted, navOptions.length]);\n\n useEffect(() => {\n if (!open) return;\n // Dismiss when the pointer goes down, OR focus moves, anywhere outside the\n // control and its portaled listbox — so clicking elsewhere in a dialog (the\n // backdrop never intercepts a document-level listener) or tabbing to another\n // field both close the menu. The listbox is portaled out of rootRef, so a\n // click inside it would otherwise read as \"outside\" and close before select.\n const onAway = (e: Event) => {\n const target = e.target as Node;\n if (!rootRef.current?.contains(target) && !listRef.current?.contains(target)) {\n commitAndClose();\n }\n };\n document.addEventListener(\"mousedown\", onAway);\n document.addEventListener(\"focusin\", onAway);\n return () => {\n document.removeEventListener(\"mousedown\", onAway);\n document.removeEventListener(\"focusin\", onAway);\n };\n });\n\n // Measure the inline label so the input reserves exactly its width (see\n // labelPadding). Re-runs whenever the label content changes.\n useLayoutEffect(() => {\n if (label == null) {\n setLabelWidth(0);\n return;\n }\n const el = labelRef.current;\n if (el) setLabelWidth(el.offsetWidth);\n }, [label]);\n\n // Position the portaled listbox with fixed coordinates measured from the\n // input row, so it escapes any overflow-hidden / scroll ancestor (e.g. a\n // Modal body) that would otherwise clip it. Mirrors HoverCard's approach.\n useLayoutEffect(() => {\n if (!open) {\n setMenuPos(null);\n return;\n }\n const update = () => {\n const anchor = anchorRef.current;\n if (!anchor) return;\n const rect = anchor.getBoundingClientRect();\n // The menu may grow rightward up to 400px, but not past the viewport edge\n // (leaving an 8px gutter). Never let the cap fall below the input width.\n const viewportCap = window.innerWidth - rect.left - 8;\n const maxWidth = Math.max(rect.width, Math.min(MENU_MAX_WIDTH_PX, viewportCap));\n // Flip upward when there isn't room below for the menu but there is above\n // (the input is docked near the viewport bottom). The available side bounds\n // the menu height so it never runs off-screen.\n const spaceBelow = window.innerHeight - rect.bottom - 8;\n const spaceAbove = rect.top - 8;\n const openUp = spaceBelow < MENU_MAX_HEIGHT_PX && spaceAbove > spaceBelow;\n const maxHeight = Math.min(MENU_MAX_HEIGHT_PX, openUp ? spaceAbove : spaceBelow);\n setMenuPos({\n ...(openUp\n ? { bottom: window.innerHeight - rect.top + 4 }\n : { top: rect.bottom + 4 }),\n left: rect.left,\n width: rect.width,\n maxWidth,\n maxHeight,\n });\n };\n update();\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n return () => {\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n };\n }, [open]);\n\n function emit(next: string[]) {\n if (props.multiple === true && props.tristate !== true) {\n props.onChange(next);\n } else if (props.multiple !== true) {\n props.onChange(next[0] ?? \"\");\n }\n }\n\n function emitModes(next: Record<string, ComboboxTriStateMode>) {\n if (props.multiple === true && props.tristate === true) props.onChange(next);\n }\n\n function setMode(value: string, mode: string) {\n const next = { ...modes };\n if (mode === \"include\" || mode === \"exclude\") next[value] = mode;\n else delete next[value];\n emitModes(next);\n }\n\n function cycleOption(value: string) {\n const current = modes[value];\n setMode(\n value,\n current === undefined ? \"include\" : current === \"include\" ? \"exclude\" : \"neutral\",\n );\n }\n\n function openMenu() {\n // Only reset on the closed → open transition: a re-entrant focus while the\n // menu is open (e.g. refocusing the input after a multi toggle) must not\n // wipe the query the user is filtering with.\n if (open) return;\n setQuery(\"\");\n setHighlighted(-1);\n setOpen(true);\n }\n\n function commitAndClose() {\n // Freeform commit (single, allowCustomValue only): a non-empty query that\n // doesn't match an option becomes the value. An empty query keeps the\n // existing selection. Multi and strict modes never commit freeform text.\n const trimmed = query.trim();\n if (!multiple && allowCustomValue && trimmed && trimmed !== selectedValues[0]) {\n emit([trimmed]);\n }\n setQuery(\"\");\n setOpen(false);\n setHighlighted(-1);\n }\n\n function selectOption(opt: ComboboxOption) {\n // Multi and tristate keep the typed query so several matches from one\n // search can be toggled without the result list resetting between clicks.\n if (tristate) {\n cycleOption(opt.value);\n inputRef.current?.focus();\n return;\n }\n if (multiple) {\n const next = isSelected(opt.value)\n ? selectedValues.filter((v) => v !== opt.value)\n : [...selectedValues, opt.value];\n emit(next);\n setHighlighted(-1);\n inputRef.current?.focus();\n return;\n }\n emit([opt.value]);\n setQuery(\"\");\n setOpen(false);\n setHighlighted(-1);\n inputRef.current?.focus();\n }\n\n function clear() {\n if (selectedValues.length > 0) {\n if (tristate) emitModes({});\n else emit([]);\n }\n setQuery(\"\");\n setHighlighted(-1);\n inputRef.current?.focus();\n }\n\n function scrollToHighlighted(index: number) {\n const list = listRef.current;\n if (!list) return;\n // Query option rows by role rather than child index — interleaved group\n // header rows are direct children too, so children[index] would be offset.\n const item = list.querySelectorAll<HTMLElement>('[role=\"option\"]')[index];\n item?.scrollIntoView?.({ block: \"nearest\" });\n }\n\n function onKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (!open) {\n openMenu();\n return;\n }\n const next = highlighted < navOptions.length - 1 ? highlighted + 1 : 0;\n setHighlighted(next);\n scrollToHighlighted(next);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n if (!open) return;\n const next = highlighted > 0 ? highlighted - 1 : navOptions.length - 1;\n setHighlighted(next);\n scrollToHighlighted(next);\n } else if (e.key === \"Enter\") {\n if (\n open &&\n highlighted >= 0 &&\n navOptions[highlighted] &&\n !navOptions[highlighted].disabled\n ) {\n e.preventDefault();\n selectOption(navOptions[highlighted]);\n return;\n }\n commitAndClose();\n onKeyDownProp?.(e);\n } else if (e.key === \"Escape\") {\n if (open) {\n e.preventDefault();\n setQuery(\"\");\n setOpen(false);\n setHighlighted(-1);\n }\n } else {\n onKeyDownProp?.(e);\n }\n }\n\n const listId = id ? `${id}-listbox` : undefined;\n const ariaLabel = ariaLabelProp ?? (typeof label === \"string\" ? label : undefined);\n const showClear = !required && !loading && !disabled && selectedValues.length > 0;\n\n return (\n <div ref={rootRef} className={cn(\"relative\", className)}>\n <div ref={anchorRef} data-jsf-control className=\"relative flex items-center\">\n {label != null && (\n <span\n ref={labelRef}\n className=\"pointer-events-none absolute left-2 z-10 whitespace-nowrap font-medium uppercase tracking-wide text-muted-foreground text-[10px]\"\n >\n {label}\n </span>\n )}\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listId}\n aria-activedescendant={highlighted >= 0 ? `${listId}-${highlighted}` : undefined}\n aria-label={ariaLabel}\n aria-invalid={invalid || undefined}\n autoComplete=\"off\"\n disabled={disabled}\n placeholder={placeholder}\n value={displayValue}\n onChange={(e) => {\n setQuery(e.target.value);\n if (!open) setOpen(true);\n }}\n onFocus={openMenu}\n // Reopen on click too: focus only fires on the first focus, so a click\n // on an already-focused-but-closed input (e.g. after selecting, or\n // after Escape) would otherwise do nothing.\n onClick={() => {\n if (!open) openMenu();\n }}\n onKeyDown={onKeyDown}\n className={cn(\n \"w-full rounded-md border border-input bg-background text-foreground\",\n size ? inputSizeClass[size] : \"h-control-h px-control-px text-sm\",\n effectivePrefix && \"pl-8\",\n suffix ? (showClear ? \"pr-[5.5rem]\" : \"pr-14\") : showClear ? \"pr-14\" : \"pr-8\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n invalid && \"border-destructive focus-visible:ring-destructive\",\n )}\n style={label != null ? labelPadding(label, labelWidth) : undefined}\n />\n {effectivePrefix && (\n <div className=\"absolute inset-y-0 left-1.5 flex items-center\">{effectivePrefix}</div>\n )}\n {suffix && (\n <div className={cn(\"absolute flex h-full items-center\", showClear ? \"right-[3.75rem]\" : \"right-7\")}>\n {suffix}\n </div>\n )}\n {showClear && (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Clear\"\n onClick={clear}\n className=\"absolute right-7 flex h-full items-center px-1 text-muted-foreground hover:text-foreground\"\n >\n <Icon icon={UiClose} className=\"text-xs\" />\n </button>\n )}\n {loading ? (\n <span className=\"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2\">\n <svg className=\"h-3.5 w-3.5 animate-spin text-muted-foreground\" viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" strokeWidth=\"2\" opacity=\"0.25\" />\n <path d=\"M14.5 8a6.5 6.5 0 0 0-6.5-6.5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </span>\n ) : (\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={disabled}\n aria-label=\"Toggle options\"\n onClick={() => {\n if (open) {\n commitAndClose();\n } else {\n openMenu();\n inputRef.current?.focus();\n }\n }}\n className=\"pointer-events-auto absolute right-0 flex h-full items-center px-2 text-muted-foreground\"\n >\n <Icon icon={UiChevronDown} className=\"text-xs\" />\n </button>\n )}\n </div>\n {open && menuPos && typeof document !== \"undefined\" &&\n createPortal(\n <div\n id={listId}\n ref={listRef}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n style={{\n position: \"fixed\",\n ...(menuPos.top != null ? { top: menuPos.top } : { bottom: menuPos.bottom }),\n left: menuPos.left,\n // Grow to fit the widest option, but never narrower than the input\n // nor wider than 400px (beyond which option labels truncate). The\n // cap is also bounded by the viewport so the menu can't overflow.\n minWidth: menuPos.width,\n maxWidth: menuPos.maxWidth,\n maxHeight: menuPos.maxHeight,\n zIndex: floatingZ,\n }}\n className=\"w-max overflow-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\"\n >\n {loading && filtered.length === 0 && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">Loading…</div>\n )}\n {!loading && filtered.length === 0 && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">No results</div>\n )}\n {filtered.map((opt, i) => {\n const selected = isSelected(opt.value);\n const mode = tristate ? modes[opt.value] : undefined;\n // A header renders above the first option of each group. Derived\n // from the surviving (filtered) options, so an empty group emits no\n // header. The option keeps `i` (its index in `filtered`) for\n // id/highlight/select — headers are role=\"presentation\", never\n // counted in the highlight/scroll index.\n const showHeader = opt.group != null && opt.group !== filtered[i - 1]?.group;\n return (\n <Fragment key={opt.value}>\n {showHeader && (\n <div\n role=\"presentation\"\n className=\"select-none px-2 pb-1 pt-2 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {opt.group}\n </div>\n )}\n <div\n id={listId ? `${listId}-${i}` : undefined}\n role=\"option\"\n aria-selected={tristate ? mode != null : selected}\n aria-disabled={opt.disabled}\n // The mode is part of the accessible name because the switch\n // inside the row is aria-hidden (nothing focusable may live\n // inside an option under aria-activedescendant).\n {...(mode != null\n ? { \"aria-label\": `${opt.label}, ${mode === \"include\" ? \"included\" : \"excluded\"}` }\n : {})}\n {...(opt.title !== undefined ? { title: opt.title } : {})}\n {...(tristate ? { \"data-filter-option\": opt.value } : {})}\n // Tristate rows must not act on mousedown: the FilterPill\n // region zones act on click, and a mousedown-time cycle would\n // stack a second transition under a region click. Mousedown\n // only keeps focus in the input; click (outside a region,\n // which stops propagation) cycles.\n onMouseDown={(e) => {\n e.preventDefault();\n if (!tristate && !opt.disabled) selectOption(opt);\n }}\n {...(tristate\n ? { onClick: () => { if (!opt.disabled) selectOption(opt); } }\n : {})}\n onMouseEnter={() => setHighlighted(i)}\n className={cn(\n \"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm\",\n i === highlighted && \"bg-accent\",\n selected && !tristate && \"font-medium\",\n opt.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {tristate ? (\n <FilterPill\n mode={mode ?? \"neutral\"}\n togglePosition=\"right\"\n interactive={false}\n label={opt.label}\n onModeChange={(next) => setMode(opt.value, next)}\n className=\"w-full justify-between\"\n />\n ) : (\n <>\n <Icon\n icon={UiCheck}\n className={cn(\"text-xs shrink-0\", selected ? \"opacity-100\" : \"opacity-0\")}\n />\n <LabelIcon icon={opt.icon} className=\"text-sm text-muted-foreground\" />\n <span className=\"min-w-0 truncate\">{opt.label}</span>\n </>\n )}\n </div>\n </Fragment>\n );\n })}\n {customEntry && (\n <div\n id={listId ? `${listId}-${filtered.length}` : undefined}\n role=\"option\"\n aria-selected={false}\n data-filter-add-custom={customEntry.value}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => selectOption(customEntry)}\n onMouseEnter={() => setHighlighted(filtered.length)}\n className={cn(\n \"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-primary\",\n highlighted === filtered.length && \"bg-accent\",\n )}\n >\n Add \"{customEntry.value}\"\n </div>\n )}\n {footer != null && (\n <div className=\"select-none px-2 py-1.5 text-[11px] text-muted-foreground\">\n {footer}\n </div>\n )}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n\n// Reserve room on the left of the input for the inline label so typed text does\n// not overlap it. Prefer the measured label width (`measuredWidth` px, from the\n// layout effect): the label sits at the `left-2` (0.5rem) inset, so text must\n// start past 0.5rem + width, plus a 0.25rem gap. A per-character estimate stands\n// in only until the label is measured (initial paint) or where there is no\n// layout (jsdom) — it undershoots wide uppercase glyphs, which is why the\n// measured path is authoritative.\nfunction labelPadding(label: ReactNode, measuredWidth: number) {\n if (measuredWidth > 0) return { paddingLeft: `calc(${measuredWidth}px + 0.75rem)` };\n if (typeof label !== \"string\") return { paddingLeft: \"1.75rem\" };\n return { paddingLeft: `${Math.min(label.length * 0.48 + 0.75, 7)}rem` };\n}\n\n// withSelectedOptions returns the option list plus any selected value that isn't\n// already present, synthesized as {value, label: value}. Used by the server\n// (onSearch) typeahead so an already-selected value missing from the current\n// matches still renders as a checked row. Selected-but-absent values come first\n// so they don't get scrolled past by a long match list.\nfunction withSelectedOptions(\n options: ComboboxOption[],\n selectedValues: string[],\n): ComboboxOption[] {\n const present = new Set(options.map((o) => o.value));\n const pinned = selectedValues\n .filter((v) => !present.has(v))\n .map((v) => ({ value: v, label: v }));\n return pinned.length === 0 ? options : [...pinned, ...options];\n}\n"],"names":["Fragment"],"mappings":"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"}
@@ -33,7 +33,7 @@ const DatePicker = react.forwardRef(
33
33
  type: "date",
34
34
  value,
35
35
  className: utils.cn(
36
- "h-8 w-full rounded-md border border-input bg-background px-2 pr-8 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring",
36
+ "h-control-h w-full rounded-md border border-input bg-background px-control-px pr-8 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring",
37
37
  "[&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none",
38
38
  inputClassName
39
39
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.cjs","sources":["../../src/components/DatePicker.tsx"],"sourcesContent":["import { forwardRef, useRef, type InputHTMLAttributes } from \"react\";\nimport { Icon } from \"../data/Icon\";\nimport { UiCalendar } from \"../icons\";\nimport { cn } from \"../lib/utils\";\n\nexport type DatePickerProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"value\" | \"onChange\"\n> & {\n value?: string;\n onChange?: (value: string) => void;\n className?: string;\n inputClassName?: string;\n buttonClassName?: string;\n openButtonLabel?: string;\n};\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n (\n {\n value = \"\",\n onChange,\n className,\n inputClassName,\n buttonClassName,\n openButtonLabel = \"Open date picker\",\n ...props\n },\n ref,\n ) => {\n const localRef = useRef<HTMLInputElement | null>(null);\n\n function assignRef(node: HTMLInputElement | null) {\n localRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }\n\n return (\n <div className={cn(\"relative\", className)}>\n <input\n {...props}\n ref={assignRef}\n type=\"date\"\n value={value}\n className={cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 pr-8 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"[&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\",\n inputClassName,\n )}\n onChange={(event) => onChange?.(event.target.value)}\n />\n <button\n type=\"button\"\n aria-label={openButtonLabel}\n className={cn(\n \"absolute inset-y-0 right-1 inline-flex items-center text-muted-foreground\",\n buttonClassName,\n )}\n onClick={() => {\n localRef.current?.focus();\n localRef.current?.showPicker?.();\n }}\n >\n <Icon icon={UiCalendar} className=\"text-sm\" />\n </button>\n </div>\n );\n },\n);\n\nDatePicker.displayName = \"DatePicker\";\n"],"names":["forwardRef","useRef","cn","jsx","Icon","UiCalendar"],"mappings":";;;;;;;AAiBO,MAAM,aAAaA,MAAAA;AAAAA,EACxB,CACE;AAAA,IACE,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,WAAWC,MAAAA,OAAgC,IAAI;AAErD,aAAS,UAAU,MAA+B;AAChD,eAAS,UAAU;AACnB,UAAI,OAAO,QAAQ,YAAY;AAC7B,YAAI,IAAI;AAAA,MACV,WAAW,KAAK;AACd,YAAI,UAAU;AAAA,MAChB;AAAA,IACF;AAEA,2CACG,OAAA,EAAI,WAAWC,MAAAA,GAAG,YAAY,SAAS,GACtC,UAAA;AAAA,MAAAC,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL,MAAK;AAAA,UACL;AAAA,UACA,WAAWD,MAAAA;AAAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAEF,UAAU,CAAC,UAAU,qCAAW,MAAM,OAAO;AAAA,QAAK;AAAA,MAAA;AAAA,MAEpDC,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAY;AAAA,UACZ,WAAWD,MAAAA;AAAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,UAEF,SAAS,MAAM;;AACb,2BAAS,YAAT,mBAAkB;AAClB,iCAAS,YAAT,mBAAkB,eAAlB;AAAA,UACF;AAAA,UAEA,UAAAC,2BAAAA,IAACC,WAAA,EAAK,MAAMC,WAAAA,YAAY,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9C,GACF;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;;"}
1
+ {"version":3,"file":"DatePicker.cjs","sources":["../../src/components/DatePicker.tsx"],"sourcesContent":["import { forwardRef, useRef, type InputHTMLAttributes } from \"react\";\nimport { Icon } from \"../data/Icon\";\nimport { UiCalendar } from \"../icons\";\nimport { cn } from \"../lib/utils\";\n\nexport type DatePickerProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"value\" | \"onChange\"\n> & {\n value?: string;\n onChange?: (value: string) => void;\n className?: string;\n inputClassName?: string;\n buttonClassName?: string;\n openButtonLabel?: string;\n};\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n (\n {\n value = \"\",\n onChange,\n className,\n inputClassName,\n buttonClassName,\n openButtonLabel = \"Open date picker\",\n ...props\n },\n ref,\n ) => {\n const localRef = useRef<HTMLInputElement | null>(null);\n\n function assignRef(node: HTMLInputElement | null) {\n localRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }\n\n return (\n <div className={cn(\"relative\", className)}>\n <input\n {...props}\n ref={assignRef}\n type=\"date\"\n value={value}\n className={cn(\n \"h-control-h w-full rounded-md border border-input bg-background px-control-px pr-8 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"[&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\",\n inputClassName,\n )}\n onChange={(event) => onChange?.(event.target.value)}\n />\n <button\n type=\"button\"\n aria-label={openButtonLabel}\n className={cn(\n \"absolute inset-y-0 right-1 inline-flex items-center text-muted-foreground\",\n buttonClassName,\n )}\n onClick={() => {\n localRef.current?.focus();\n localRef.current?.showPicker?.();\n }}\n >\n <Icon icon={UiCalendar} className=\"text-sm\" />\n </button>\n </div>\n );\n },\n);\n\nDatePicker.displayName = \"DatePicker\";\n"],"names":["forwardRef","useRef","cn","jsx","Icon","UiCalendar"],"mappings":";;;;;;;AAiBO,MAAM,aAAaA,MAAAA;AAAAA,EACxB,CACE;AAAA,IACE,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,WAAWC,MAAAA,OAAgC,IAAI;AAErD,aAAS,UAAU,MAA+B;AAChD,eAAS,UAAU;AACnB,UAAI,OAAO,QAAQ,YAAY;AAC7B,YAAI,IAAI;AAAA,MACV,WAAW,KAAK;AACd,YAAI,UAAU;AAAA,MAChB;AAAA,IACF;AAEA,2CACG,OAAA,EAAI,WAAWC,MAAAA,GAAG,YAAY,SAAS,GACtC,UAAA;AAAA,MAAAC,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL,MAAK;AAAA,UACL;AAAA,UACA,WAAWD,MAAAA;AAAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAEF,UAAU,CAAC,UAAU,qCAAW,MAAM,OAAO;AAAA,QAAK;AAAA,MAAA;AAAA,MAEpDC,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAY;AAAA,UACZ,WAAWD,MAAAA;AAAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,UAEF,SAAS,MAAM;;AACb,2BAAS,YAAT,mBAAkB;AAClB,iCAAS,YAAT,mBAAkB,eAAlB;AAAA,UACF;AAAA,UAEA,UAAAC,2BAAAA,IAACC,WAAA,EAAK,MAAMC,WAAAA,YAAY,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9C,GACF;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;;"}
@@ -31,7 +31,7 @@ const DatePicker = forwardRef(
31
31
  type: "date",
32
32
  value,
33
33
  className: cn(
34
- "h-8 w-full rounded-md border border-input bg-background px-2 pr-8 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring",
34
+ "h-control-h w-full rounded-md border border-input bg-background px-control-px pr-8 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring",
35
35
  "[&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none",
36
36
  inputClassName
37
37
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.js","sources":["../../src/components/DatePicker.tsx"],"sourcesContent":["import { forwardRef, useRef, type InputHTMLAttributes } from \"react\";\nimport { Icon } from \"../data/Icon\";\nimport { UiCalendar } from \"../icons\";\nimport { cn } from \"../lib/utils\";\n\nexport type DatePickerProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"value\" | \"onChange\"\n> & {\n value?: string;\n onChange?: (value: string) => void;\n className?: string;\n inputClassName?: string;\n buttonClassName?: string;\n openButtonLabel?: string;\n};\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n (\n {\n value = \"\",\n onChange,\n className,\n inputClassName,\n buttonClassName,\n openButtonLabel = \"Open date picker\",\n ...props\n },\n ref,\n ) => {\n const localRef = useRef<HTMLInputElement | null>(null);\n\n function assignRef(node: HTMLInputElement | null) {\n localRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }\n\n return (\n <div className={cn(\"relative\", className)}>\n <input\n {...props}\n ref={assignRef}\n type=\"date\"\n value={value}\n className={cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 pr-8 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"[&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\",\n inputClassName,\n )}\n onChange={(event) => onChange?.(event.target.value)}\n />\n <button\n type=\"button\"\n aria-label={openButtonLabel}\n className={cn(\n \"absolute inset-y-0 right-1 inline-flex items-center text-muted-foreground\",\n buttonClassName,\n )}\n onClick={() => {\n localRef.current?.focus();\n localRef.current?.showPicker?.();\n }}\n >\n <Icon icon={UiCalendar} className=\"text-sm\" />\n </button>\n </div>\n );\n },\n);\n\nDatePicker.displayName = \"DatePicker\";\n"],"names":[],"mappings":";;;;;AAiBO,MAAM,aAAa;AAAA,EACxB,CACE;AAAA,IACE,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,WAAW,OAAgC,IAAI;AAErD,aAAS,UAAU,MAA+B;AAChD,eAAS,UAAU;AACnB,UAAI,OAAO,QAAQ,YAAY;AAC7B,YAAI,IAAI;AAAA,MACV,WAAW,KAAK;AACd,YAAI,UAAU;AAAA,MAChB;AAAA,IACF;AAEA,gCACG,OAAA,EAAI,WAAW,GAAG,YAAY,SAAS,GACtC,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL,MAAK;AAAA,UACL;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAEF,UAAU,CAAC,UAAU,qCAAW,MAAM,OAAO;AAAA,QAAK;AAAA,MAAA;AAAA,MAEpD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAY;AAAA,UACZ,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,UAEF,SAAS,MAAM;;AACb,2BAAS,YAAT,mBAAkB;AAClB,iCAAS,YAAT,mBAAkB,eAAlB;AAAA,UACF;AAAA,UAEA,UAAA,oBAAC,MAAA,EAAK,MAAM,YAAY,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9C,GACF;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;"}
1
+ {"version":3,"file":"DatePicker.js","sources":["../../src/components/DatePicker.tsx"],"sourcesContent":["import { forwardRef, useRef, type InputHTMLAttributes } from \"react\";\nimport { Icon } from \"../data/Icon\";\nimport { UiCalendar } from \"../icons\";\nimport { cn } from \"../lib/utils\";\n\nexport type DatePickerProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"value\" | \"onChange\"\n> & {\n value?: string;\n onChange?: (value: string) => void;\n className?: string;\n inputClassName?: string;\n buttonClassName?: string;\n openButtonLabel?: string;\n};\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n (\n {\n value = \"\",\n onChange,\n className,\n inputClassName,\n buttonClassName,\n openButtonLabel = \"Open date picker\",\n ...props\n },\n ref,\n ) => {\n const localRef = useRef<HTMLInputElement | null>(null);\n\n function assignRef(node: HTMLInputElement | null) {\n localRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }\n\n return (\n <div className={cn(\"relative\", className)}>\n <input\n {...props}\n ref={assignRef}\n type=\"date\"\n value={value}\n className={cn(\n \"h-control-h w-full rounded-md border border-input bg-background px-control-px pr-8 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"[&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\",\n inputClassName,\n )}\n onChange={(event) => onChange?.(event.target.value)}\n />\n <button\n type=\"button\"\n aria-label={openButtonLabel}\n className={cn(\n \"absolute inset-y-0 right-1 inline-flex items-center text-muted-foreground\",\n buttonClassName,\n )}\n onClick={() => {\n localRef.current?.focus();\n localRef.current?.showPicker?.();\n }}\n >\n <Icon icon={UiCalendar} className=\"text-sm\" />\n </button>\n </div>\n );\n },\n);\n\nDatePicker.displayName = \"DatePicker\";\n"],"names":[],"mappings":";;;;;AAiBO,MAAM,aAAa;AAAA,EACxB,CACE;AAAA,IACE,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,WAAW,OAAgC,IAAI;AAErD,aAAS,UAAU,MAA+B;AAChD,eAAS,UAAU;AACnB,UAAI,OAAO,QAAQ,YAAY;AAC7B,YAAI,IAAI;AAAA,MACV,WAAW,KAAK;AACd,YAAI,UAAU;AAAA,MAChB;AAAA,IACF;AAEA,gCACG,OAAA,EAAI,WAAW,GAAG,YAAY,SAAS,GACtC,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL,MAAK;AAAA,UACL;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAEF,UAAU,CAAC,UAAU,qCAAW,MAAM,OAAO;AAAA,QAAK;AAAA,MAAA;AAAA,MAEpD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAY;AAAA,UACZ,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,UAEF,SAAS,MAAM;;AACb,2BAAS,YAAT,mBAAkB;AAClB,iCAAS,YAAT,mBAAkB,eAAlB;AAAA,UACF;AAAA,UAEA,UAAA,oBAAC,MAAA,EAAK,MAAM,YAAY,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9C,GACF;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;"}
@@ -37,7 +37,7 @@ const DateTimePicker = react.forwardRef(
37
37
  type: "text",
38
38
  value,
39
39
  className: utils.cn(
40
- "h-8 w-full rounded-md border border-input bg-background px-2 pr-8 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
40
+ "h-control-h w-full rounded-md border border-input bg-background px-control-px pr-8 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
41
41
  prefix && "pl-8",
42
42
  inputClassName
43
43
  ),