@flanksource/clicky-ui 0.3.14 → 0.3.16

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 (754) hide show
  1. package/NOTICE.md +10 -0
  2. package/dist/ai.cjs +33 -4
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +31 -2
  5. package/dist/ai.js.map +1 -1
  6. package/dist/chat.cjs +6 -0
  7. package/dist/chat.cjs.map +1 -1
  8. package/dist/chat.js +7 -1
  9. package/dist/chat.js.map +1 -1
  10. package/dist/components/Combobox.cjs +92 -170
  11. package/dist/components/Combobox.cjs.map +1 -1
  12. package/dist/components/Combobox.d.ts +2 -111
  13. package/dist/components/Combobox.d.ts.map +1 -1
  14. package/dist/components/Combobox.js +95 -173
  15. package/dist/components/Combobox.js.map +1 -1
  16. package/dist/components/ComboboxActions.cjs +70 -0
  17. package/dist/components/ComboboxActions.cjs.map +1 -0
  18. package/dist/components/ComboboxActions.d.ts +8 -0
  19. package/dist/components/ComboboxActions.d.ts.map +1 -0
  20. package/dist/components/ComboboxActions.js +70 -0
  21. package/dist/components/ComboboxActions.js.map +1 -0
  22. package/dist/components/ComboboxMenu.cjs +160 -0
  23. package/dist/components/ComboboxMenu.cjs.map +1 -0
  24. package/dist/components/ComboboxMenu.d.ts +22 -0
  25. package/dist/components/ComboboxMenu.d.ts.map +1 -0
  26. package/dist/components/ComboboxMenu.js +160 -0
  27. package/dist/components/ComboboxMenu.js.map +1 -0
  28. package/dist/components/EndpointSelector.cjs +407 -0
  29. package/dist/components/EndpointSelector.cjs.map +1 -0
  30. package/dist/components/EndpointSelector.d.ts +3 -0
  31. package/dist/components/EndpointSelector.d.ts.map +1 -0
  32. package/dist/components/EndpointSelector.js +407 -0
  33. package/dist/components/EndpointSelector.js.map +1 -0
  34. package/dist/components/EndpointSelector.model.d.ts +52 -0
  35. package/dist/components/EndpointSelector.model.d.ts.map +1 -0
  36. package/dist/components/FilterBar.cjs +12 -0
  37. package/dist/components/FilterBar.cjs.map +1 -1
  38. package/dist/components/FilterBar.d.ts +4 -0
  39. package/dist/components/FilterBar.d.ts.map +1 -1
  40. package/dist/components/FilterBar.js +12 -0
  41. package/dist/components/FilterBar.js.map +1 -1
  42. package/dist/components/InputField.cjs +11 -12
  43. package/dist/components/InputField.cjs.map +1 -1
  44. package/dist/components/InputField.d.ts +7 -0
  45. package/dist/components/InputField.d.ts.map +1 -1
  46. package/dist/components/InputField.js +12 -13
  47. package/dist/components/InputField.js.map +1 -1
  48. package/dist/components/JsonSchemaForm.cjs +22 -16
  49. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  50. package/dist/components/JsonSchemaForm.d.ts +1 -1
  51. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  52. package/dist/components/JsonSchemaForm.js +22 -16
  53. package/dist/components/JsonSchemaForm.js.map +1 -1
  54. package/dist/components/MultiSelect.cjs +3 -3
  55. package/dist/components/MultiSelect.cjs.map +1 -1
  56. package/dist/components/MultiSelect.d.ts.map +1 -1
  57. package/dist/components/MultiSelect.js +3 -3
  58. package/dist/components/MultiSelect.js.map +1 -1
  59. package/dist/components/SecretKeySelector.cjs +150 -77
  60. package/dist/components/SecretKeySelector.cjs.map +1 -1
  61. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  62. package/dist/components/SecretKeySelector.js +151 -78
  63. package/dist/components/SecretKeySelector.js.map +1 -1
  64. package/dist/components/WorkloadPicker.cjs +2 -1
  65. package/dist/components/WorkloadPicker.cjs.map +1 -1
  66. package/dist/components/WorkloadPicker.d.ts +6 -1
  67. package/dist/components/WorkloadPicker.d.ts.map +1 -1
  68. package/dist/components/WorkloadPicker.js +2 -1
  69. package/dist/components/WorkloadPicker.js.map +1 -1
  70. package/dist/components/combobox-types.d.ts +107 -0
  71. package/dist/components/combobox-types.d.ts.map +1 -0
  72. package/dist/components/combobox-utils.cjs +21 -0
  73. package/dist/components/combobox-utils.cjs.map +1 -0
  74. package/dist/components/combobox-utils.d.ts +15 -0
  75. package/dist/components/combobox-utils.d.ts.map +1 -0
  76. package/dist/components/combobox-utils.js +21 -0
  77. package/dist/components/combobox-utils.js.map +1 -0
  78. package/dist/components/endpoint-port.cjs +12 -0
  79. package/dist/components/endpoint-port.cjs.map +1 -0
  80. package/dist/components/endpoint-port.d.ts +4 -0
  81. package/dist/components/endpoint-port.d.ts.map +1 -0
  82. package/dist/components/endpoint-port.js +12 -0
  83. package/dist/components/endpoint-port.js.map +1 -0
  84. package/dist/components/json-schema-form-array.cjs +12 -23
  85. package/dist/components/json-schema-form-array.cjs.map +1 -1
  86. package/dist/components/json-schema-form-array.d.ts +1 -1
  87. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  88. package/dist/components/json-schema-form-array.js +12 -23
  89. package/dist/components/json-schema-form-array.js.map +1 -1
  90. package/dist/components/json-schema-form-discriminator.cjs +6 -2
  91. package/dist/components/json-schema-form-discriminator.cjs.map +1 -1
  92. package/dist/components/json-schema-form-discriminator.d.ts.map +1 -1
  93. package/dist/components/json-schema-form-discriminator.js +6 -2
  94. package/dist/components/json-schema-form-discriminator.js.map +1 -1
  95. package/dist/components/json-schema-form-error-display.cjs +50 -0
  96. package/dist/components/json-schema-form-error-display.cjs.map +1 -0
  97. package/dist/components/json-schema-form-error-display.d.ts +12 -0
  98. package/dist/components/json-schema-form-error-display.d.ts.map +1 -0
  99. package/dist/components/json-schema-form-error-display.js +50 -0
  100. package/dist/components/json-schema-form-error-display.js.map +1 -0
  101. package/dist/components/json-schema-form-error-types.d.ts +26 -0
  102. package/dist/components/json-schema-form-error-types.d.ts.map +1 -0
  103. package/dist/components/json-schema-form-errors.cjs +169 -0
  104. package/dist/components/json-schema-form-errors.cjs.map +1 -0
  105. package/dist/components/json-schema-form-errors.d.ts +14 -0
  106. package/dist/components/json-schema-form-errors.d.ts.map +1 -0
  107. package/dist/components/json-schema-form-errors.js +169 -0
  108. package/dist/components/json-schema-form-errors.js.map +1 -0
  109. package/dist/components/json-schema-form-object.cjs +12 -2
  110. package/dist/components/json-schema-form-object.cjs.map +1 -1
  111. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  112. package/dist/components/json-schema-form-object.js +12 -2
  113. package/dist/components/json-schema-form-object.js.map +1 -1
  114. package/dist/components/json-schema-form-refs.cjs +84 -19
  115. package/dist/components/json-schema-form-refs.cjs.map +1 -1
  116. package/dist/components/json-schema-form-refs.d.ts.map +1 -1
  117. package/dist/components/json-schema-form-refs.js +84 -19
  118. package/dist/components/json-schema-form-refs.js.map +1 -1
  119. package/dist/components/json-schema-form-render.cjs +33 -10
  120. package/dist/components/json-schema-form-render.cjs.map +1 -1
  121. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  122. package/dist/components/json-schema-form-render.js +34 -11
  123. package/dist/components/json-schema-form-render.js.map +1 -1
  124. package/dist/components/json-schema-form-resolve.cjs +16 -4
  125. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  126. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  127. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  128. package/dist/components/json-schema-form-resolve.js +17 -5
  129. package/dist/components/json-schema-form-resolve.js.map +1 -1
  130. package/dist/components/json-schema-form-types.d.ts +4 -3
  131. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  132. package/dist/components.cjs +13 -0
  133. package/dist/components.cjs.map +1 -1
  134. package/dist/components.d.ts +8 -1
  135. package/dist/components.d.ts.map +1 -1
  136. package/dist/components.js +15 -2
  137. package/dist/components.js.map +1 -1
  138. package/dist/data/DataTable.cjs +177 -6
  139. package/dist/data/DataTable.cjs.map +1 -1
  140. package/dist/data/DataTable.d.ts +39 -0
  141. package/dist/data/DataTable.d.ts.map +1 -1
  142. package/dist/data/DataTable.grouping.cjs +21 -0
  143. package/dist/data/DataTable.grouping.cjs.map +1 -0
  144. package/dist/data/DataTable.grouping.d.ts +26 -0
  145. package/dist/data/DataTable.grouping.d.ts.map +1 -0
  146. package/dist/data/DataTable.grouping.js +21 -0
  147. package/dist/data/DataTable.grouping.js.map +1 -0
  148. package/dist/data/DataTable.js +177 -6
  149. package/dist/data/DataTable.js.map +1 -1
  150. package/dist/data/Markdown.cjs +45 -1
  151. package/dist/data/Markdown.cjs.map +1 -1
  152. package/dist/data/Markdown.d.ts +3 -2
  153. package/dist/data/Markdown.d.ts.map +1 -1
  154. package/dist/data/Markdown.js +45 -1
  155. package/dist/data/Markdown.js.map +1 -1
  156. package/dist/data/MarkdownEditor.cjs +4 -3
  157. package/dist/data/MarkdownEditor.cjs.map +1 -1
  158. package/dist/data/MarkdownEditor.d.ts +6 -2
  159. package/dist/data/MarkdownEditor.d.ts.map +1 -1
  160. package/dist/data/MarkdownEditor.js +4 -3
  161. package/dist/data/MarkdownEditor.js.map +1 -1
  162. package/dist/data/StatStrip.cjs +99 -0
  163. package/dist/data/StatStrip.cjs.map +1 -0
  164. package/dist/data/StatStrip.d.ts +41 -0
  165. package/dist/data/StatStrip.d.ts.map +1 -0
  166. package/dist/data/StatStrip.js +99 -0
  167. package/dist/data/StatStrip.js.map +1 -0
  168. package/dist/data/TaskManager.cjs +20 -1
  169. package/dist/data/TaskManager.cjs.map +1 -1
  170. package/dist/data/TaskManager.d.ts +3 -1
  171. package/dist/data/TaskManager.d.ts.map +1 -1
  172. package/dist/data/TaskManager.js +20 -1
  173. package/dist/data/TaskManager.js.map +1 -1
  174. package/dist/data/TaskManagerButton.cjs +49 -0
  175. package/dist/data/TaskManagerButton.cjs.map +1 -0
  176. package/dist/data/TaskManagerButton.d.ts +8 -0
  177. package/dist/data/TaskManagerButton.d.ts.map +1 -0
  178. package/dist/data/TaskManagerButton.js +49 -0
  179. package/dist/data/TaskManagerButton.js.map +1 -0
  180. package/dist/data/TaskProcessDetails.cjs +113 -0
  181. package/dist/data/TaskProcessDetails.cjs.map +1 -0
  182. package/dist/data/TaskProcessDetails.d.ts +6 -0
  183. package/dist/data/TaskProcessDetails.d.ts.map +1 -0
  184. package/dist/data/TaskProcessDetails.js +113 -0
  185. package/dist/data/TaskProcessDetails.js.map +1 -0
  186. package/dist/data/TaskProgress.cjs +106 -19
  187. package/dist/data/TaskProgress.cjs.map +1 -1
  188. package/dist/data/TaskProgress.d.ts +4 -2
  189. package/dist/data/TaskProgress.d.ts.map +1 -1
  190. package/dist/data/TaskProgress.js +107 -20
  191. package/dist/data/TaskProgress.js.map +1 -1
  192. package/dist/data/TaskSnapshot.cjs.map +1 -1
  193. package/dist/data/TaskSnapshot.d.ts +43 -0
  194. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  195. package/dist/data/TaskSnapshot.js.map +1 -1
  196. package/dist/data/Tree.cjs +91 -82
  197. package/dist/data/Tree.cjs.map +1 -1
  198. package/dist/data/Tree.d.ts +3 -1
  199. package/dist/data/Tree.d.ts.map +1 -1
  200. package/dist/data/Tree.js +91 -82
  201. package/dist/data/Tree.js.map +1 -1
  202. package/dist/data/TreeNode.cjs +3 -0
  203. package/dist/data/TreeNode.cjs.map +1 -1
  204. package/dist/data/TreeNode.d.ts +2 -1
  205. package/dist/data/TreeNode.d.ts.map +1 -1
  206. package/dist/data/TreeNode.js +3 -0
  207. package/dist/data/TreeNode.js.map +1 -1
  208. package/dist/data/ai/ChatWindow.cjs +9 -140
  209. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  210. package/dist/data/ai/ChatWindow.d.ts +2 -40
  211. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  212. package/dist/data/ai/ChatWindow.js +6 -137
  213. package/dist/data/ai/ChatWindow.js.map +1 -1
  214. package/dist/data/ai/ChatWindow.models.cjs +11 -0
  215. package/dist/data/ai/ChatWindow.models.cjs.map +1 -0
  216. package/dist/data/ai/ChatWindow.models.d.ts +3 -0
  217. package/dist/data/ai/ChatWindow.models.d.ts.map +1 -0
  218. package/dist/data/ai/ChatWindow.models.js +11 -0
  219. package/dist/data/ai/ChatWindow.models.js.map +1 -0
  220. package/dist/data/ai/ChatWindow.preferences.cjs +57 -0
  221. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -0
  222. package/dist/data/ai/ChatWindow.preferences.d.ts +13 -0
  223. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -0
  224. package/dist/data/ai/ChatWindow.preferences.js +57 -0
  225. package/dist/data/ai/ChatWindow.preferences.js.map +1 -0
  226. package/dist/data/ai/ChatWindow.tool-catalog.cjs +99 -0
  227. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -0
  228. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +3 -0
  229. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -0
  230. package/dist/data/ai/ChatWindow.tool-catalog.js +99 -0
  231. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -0
  232. package/dist/data/ai/ChatWindow.types.d.ts +41 -0
  233. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -0
  234. package/dist/data/ai/ContextBadges.cjs +76 -46
  235. package/dist/data/ai/ContextBadges.cjs.map +1 -1
  236. package/dist/data/ai/ContextBadges.d.ts.map +1 -1
  237. package/dist/data/ai/ContextBadges.js +77 -47
  238. package/dist/data/ai/ContextBadges.js.map +1 -1
  239. package/dist/data/ai/PromptPicker/PromptPicker.cjs +151 -32
  240. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  241. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +7 -4
  242. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
  243. package/dist/data/ai/PromptPicker/PromptPicker.js +152 -33
  244. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  245. package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs +133 -0
  246. package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs.map +1 -0
  247. package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts +11 -0
  248. package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts.map +1 -0
  249. package/dist/data/ai/PromptPicker/PromptSourceRepair.js +133 -0
  250. package/dist/data/ai/PromptPicker/PromptSourceRepair.js.map +1 -0
  251. package/dist/data/ai/PromptPicker/index.d.ts +2 -1
  252. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
  253. package/dist/data/ai/PromptPicker/types.cjs +7 -0
  254. package/dist/data/ai/PromptPicker/types.cjs.map +1 -0
  255. package/dist/data/ai/PromptPicker/types.d.ts +18 -2
  256. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
  257. package/dist/data/ai/PromptPicker/types.js +7 -0
  258. package/dist/data/ai/PromptPicker/types.js.map +1 -0
  259. package/dist/data/ai/PromptRunEditor/index.cjs +82 -14
  260. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  261. package/dist/data/ai/PromptRunEditor/index.d.ts +5 -1
  262. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  263. package/dist/data/ai/PromptRunEditor/index.js +83 -15
  264. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  265. package/dist/data/ai/RuntimeBar.cjs +336 -0
  266. package/dist/data/ai/RuntimeBar.cjs.map +1 -0
  267. package/dist/data/ai/RuntimeBar.d.ts +27 -0
  268. package/dist/data/ai/RuntimeBar.d.ts.map +1 -0
  269. package/dist/data/ai/RuntimeBar.js +336 -0
  270. package/dist/data/ai/RuntimeBar.js.map +1 -0
  271. package/dist/data/ai/SessionChatComposer.cjs +56 -0
  272. package/dist/data/ai/SessionChatComposer.cjs.map +1 -0
  273. package/dist/data/ai/SessionChatComposer.d.ts +24 -0
  274. package/dist/data/ai/SessionChatComposer.d.ts.map +1 -0
  275. package/dist/data/ai/SessionChatComposer.js +56 -0
  276. package/dist/data/ai/SessionChatComposer.js.map +1 -0
  277. package/dist/data/ai/SessionInspector.cjs +222 -382
  278. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  279. package/dist/data/ai/SessionInspector.collection-types.d.ts +55 -0
  280. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -0
  281. package/dist/data/ai/SessionInspector.collection.cjs +377 -0
  282. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -0
  283. package/dist/data/ai/SessionInspector.collection.d.ts +15 -0
  284. package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -0
  285. package/dist/data/ai/SessionInspector.collection.js +377 -0
  286. package/dist/data/ai/SessionInspector.collection.js.map +1 -0
  287. package/dist/data/ai/SessionInspector.d.ts +9 -4
  288. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  289. package/dist/data/ai/SessionInspector.files.cjs +162 -0
  290. package/dist/data/ai/SessionInspector.files.cjs.map +1 -0
  291. package/dist/data/ai/SessionInspector.files.d.ts +5 -0
  292. package/dist/data/ai/SessionInspector.files.d.ts.map +1 -0
  293. package/dist/data/ai/SessionInspector.files.js +162 -0
  294. package/dist/data/ai/SessionInspector.files.js.map +1 -0
  295. package/dist/data/ai/SessionInspector.hierarchy-state.cjs +148 -0
  296. package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -0
  297. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +15 -0
  298. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -0
  299. package/dist/data/ai/SessionInspector.hierarchy-state.js +148 -0
  300. package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -0
  301. package/dist/data/ai/SessionInspector.hierarchy.cjs +256 -0
  302. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -0
  303. package/dist/data/ai/SessionInspector.hierarchy.d.ts +9 -0
  304. package/dist/data/ai/SessionInspector.hierarchy.d.ts.map +1 -0
  305. package/dist/data/ai/SessionInspector.hierarchy.js +256 -0
  306. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -0
  307. package/dist/data/ai/SessionInspector.js +224 -384
  308. package/dist/data/ai/SessionInspector.js.map +1 -1
  309. package/dist/data/ai/SessionInspector.model.cjs +125 -0
  310. package/dist/data/ai/SessionInspector.model.cjs.map +1 -0
  311. package/dist/data/ai/SessionInspector.model.d.ts +14 -0
  312. package/dist/data/ai/SessionInspector.model.d.ts.map +1 -0
  313. package/dist/data/ai/SessionInspector.model.js +125 -0
  314. package/dist/data/ai/SessionInspector.model.js.map +1 -0
  315. package/dist/data/ai/SessionInspector.panels.cjs +265 -0
  316. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -0
  317. package/dist/data/ai/SessionInspector.panels.d.ts +10 -0
  318. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -0
  319. package/dist/data/ai/SessionInspector.panels.js +265 -0
  320. package/dist/data/ai/SessionInspector.panels.js.map +1 -0
  321. package/dist/data/ai/SessionInspector.plan.cjs +77 -0
  322. package/dist/data/ai/SessionInspector.plan.cjs.map +1 -0
  323. package/dist/data/ai/SessionInspector.plan.d.ts +6 -0
  324. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -0
  325. package/dist/data/ai/SessionInspector.plan.js +77 -0
  326. package/dist/data/ai/SessionInspector.plan.js.map +1 -0
  327. package/dist/data/ai/SessionInspector.summary.cjs +182 -0
  328. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -0
  329. package/dist/data/ai/SessionInspector.summary.d.ts +8 -0
  330. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -0
  331. package/dist/data/ai/SessionInspector.summary.js +182 -0
  332. package/dist/data/ai/SessionInspector.summary.js.map +1 -0
  333. package/dist/data/ai/SessionInspector.transcript.cjs +94 -0
  334. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -0
  335. package/dist/data/ai/SessionInspector.transcript.d.ts +7 -0
  336. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -0
  337. package/dist/data/ai/SessionInspector.transcript.js +94 -0
  338. package/dist/data/ai/SessionInspector.transcript.js.map +1 -0
  339. package/dist/data/ai/SessionInspector.turns.d.ts +11 -0
  340. package/dist/data/ai/SessionInspector.turns.d.ts.map +1 -0
  341. package/dist/data/ai/SessionViewer.cjs +86 -121
  342. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  343. package/dist/data/ai/SessionViewer.d.ts +8 -1
  344. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  345. package/dist/data/ai/SessionViewer.fixtures.d.ts +2 -0
  346. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
  347. package/dist/data/ai/SessionViewer.header.cjs +110 -0
  348. package/dist/data/ai/SessionViewer.header.cjs.map +1 -0
  349. package/dist/data/ai/SessionViewer.header.d.ts +11 -0
  350. package/dist/data/ai/SessionViewer.header.d.ts.map +1 -0
  351. package/dist/data/ai/SessionViewer.header.js +110 -0
  352. package/dist/data/ai/SessionViewer.header.js.map +1 -0
  353. package/dist/data/ai/SessionViewer.js +87 -122
  354. package/dist/data/ai/SessionViewer.js.map +1 -1
  355. package/dist/data/ai/SessionViewer.model.cjs +109 -39
  356. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  357. package/dist/data/ai/SessionViewer.model.d.ts +2 -0
  358. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  359. package/dist/data/ai/SessionViewer.model.js +109 -39
  360. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  361. package/dist/data/ai/SessionViewer.row-metadata.cjs +132 -0
  362. package/dist/data/ai/SessionViewer.row-metadata.cjs.map +1 -0
  363. package/dist/data/ai/SessionViewer.row-metadata.d.ts +14 -0
  364. package/dist/data/ai/SessionViewer.row-metadata.d.ts.map +1 -0
  365. package/dist/data/ai/SessionViewer.row-metadata.js +132 -0
  366. package/dist/data/ai/SessionViewer.row-metadata.js.map +1 -0
  367. package/dist/data/ai/SessionViewer.row-time.cjs +15 -0
  368. package/dist/data/ai/SessionViewer.row-time.cjs.map +1 -0
  369. package/dist/data/ai/SessionViewer.row-time.d.ts +3 -0
  370. package/dist/data/ai/SessionViewer.row-time.d.ts.map +1 -0
  371. package/dist/data/ai/SessionViewer.row-time.js +15 -0
  372. package/dist/data/ai/SessionViewer.row-time.js.map +1 -0
  373. package/dist/data/ai/SessionViewer.rows.cjs +37 -424
  374. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  375. package/dist/data/ai/SessionViewer.rows.d.ts +5 -2
  376. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  377. package/dist/data/ai/SessionViewer.rows.js +31 -418
  378. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  379. package/dist/data/ai/SessionViewer.tool-details.cjs +65 -0
  380. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -0
  381. package/dist/data/ai/SessionViewer.tool-details.d.ts +20 -0
  382. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -0
  383. package/dist/data/ai/SessionViewer.tool-details.js +65 -0
  384. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -0
  385. package/dist/data/ai/SessionViewer.tool-row.cjs +404 -0
  386. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -0
  387. package/dist/data/ai/SessionViewer.tool-row.d.ts +12 -0
  388. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -0
  389. package/dist/data/ai/SessionViewer.tool-row.js +404 -0
  390. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -0
  391. package/dist/data/ai/SessionViewer.unified.d.ts +10 -2
  392. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  393. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +44 -26
  394. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  395. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  396. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +47 -29
  397. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  398. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +45 -153
  399. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  400. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  401. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +51 -159
  402. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  403. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +0 -1
  404. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
  405. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
  406. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +0 -1
  407. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
  408. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +0 -5
  409. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
  410. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
  411. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +0 -5
  412. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
  413. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  414. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  415. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  416. package/dist/data/ai/SpecRuntimeEditor/update.cjs +19 -6
  417. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  418. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +5 -2
  419. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  420. package/dist/data/ai/SpecRuntimeEditor/update.js +19 -6
  421. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  422. package/dist/data/ai/SpecRuntimeEditor.model.cjs +67 -10
  423. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  424. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +31 -4
  425. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  426. package/dist/data/ai/SpecRuntimeEditor.model.js +67 -10
  427. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  428. package/dist/data/ai/ToolPreferences.cjs +2 -1
  429. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  430. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  431. package/dist/data/ai/ToolPreferences.js +2 -1
  432. package/dist/data/ai/ToolPreferences.js.map +1 -1
  433. package/dist/data/ai/agent-action-icons.cjs +7 -10
  434. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  435. package/dist/data/ai/agent-action-icons.d.ts +1 -2
  436. package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
  437. package/dist/data/ai/agent-action-icons.js +8 -11
  438. package/dist/data/ai/agent-action-icons.js.map +1 -1
  439. package/dist/data/ai/context.cjs.map +1 -1
  440. package/dist/data/ai/context.d.ts +4 -0
  441. package/dist/data/ai/context.d.ts.map +1 -1
  442. package/dist/data/ai/context.js.map +1 -1
  443. package/dist/data/ai/examples/sessions/claude-complete.cjs +513 -0
  444. package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -0
  445. package/dist/data/ai/examples/sessions/claude-complete.d.ts +3 -0
  446. package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -0
  447. package/dist/data/ai/examples/sessions/claude-complete.js +513 -0
  448. package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -0
  449. package/dist/data/ai/examples/sessions/claude.cjs +252 -0
  450. package/dist/data/ai/examples/sessions/claude.cjs.map +1 -0
  451. package/dist/data/ai/examples/sessions/claude.d.ts +3 -0
  452. package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -0
  453. package/dist/data/ai/examples/sessions/claude.js +252 -0
  454. package/dist/data/ai/examples/sessions/claude.js.map +1 -0
  455. package/dist/data/ai/examples/sessions/codex-complete.cjs +394 -0
  456. package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -0
  457. package/dist/data/ai/examples/sessions/codex-complete.d.ts +3 -0
  458. package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -0
  459. package/dist/data/ai/examples/sessions/codex-complete.js +394 -0
  460. package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -0
  461. package/dist/data/ai/examples/sessions/codex.cjs +236 -0
  462. package/dist/data/ai/examples/sessions/codex.cjs.map +1 -0
  463. package/dist/data/ai/examples/sessions/codex.d.ts +3 -0
  464. package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -0
  465. package/dist/data/ai/examples/sessions/codex.js +236 -0
  466. package/dist/data/ai/examples/sessions/codex.js.map +1 -0
  467. package/dist/data/ai/examples/sessions/index.cjs +21 -0
  468. package/dist/data/ai/examples/sessions/index.cjs.map +1 -0
  469. package/dist/data/ai/examples/sessions/index.d.ts +10 -0
  470. package/dist/data/ai/examples/sessions/index.d.ts.map +1 -0
  471. package/dist/data/ai/examples/sessions/index.js +21 -0
  472. package/dist/data/ai/examples/sessions/index.js.map +1 -0
  473. package/dist/data/ai/index.d.ts +8 -3
  474. package/dist/data/ai/index.d.ts.map +1 -1
  475. package/dist/data/ai/runtime-mode.cjs +62 -0
  476. package/dist/data/ai/runtime-mode.cjs.map +1 -1
  477. package/dist/data/ai/runtime-mode.d.ts +27 -0
  478. package/dist/data/ai/runtime-mode.d.ts.map +1 -1
  479. package/dist/data/ai/runtime-mode.js +62 -0
  480. package/dist/data/ai/runtime-mode.js.map +1 -1
  481. package/dist/data/cells/EntityCell.cjs +64 -0
  482. package/dist/data/cells/EntityCell.cjs.map +1 -0
  483. package/dist/data/cells/EntityCell.d.ts +27 -0
  484. package/dist/data/cells/EntityCell.d.ts.map +1 -0
  485. package/dist/data/cells/EntityCell.js +64 -0
  486. package/dist/data/cells/EntityCell.js.map +1 -0
  487. package/dist/data/chat/Attachment.cjs +53 -13
  488. package/dist/data/chat/Attachment.cjs.map +1 -1
  489. package/dist/data/chat/Attachment.d.ts +9 -3
  490. package/dist/data/chat/Attachment.d.ts.map +1 -1
  491. package/dist/data/chat/Attachment.js +54 -14
  492. package/dist/data/chat/Attachment.js.map +1 -1
  493. package/dist/data/chat/Chat.cjs +25 -17
  494. package/dist/data/chat/Chat.cjs.map +1 -1
  495. package/dist/data/chat/Chat.d.ts +8 -4
  496. package/dist/data/chat/Chat.d.ts.map +1 -1
  497. package/dist/data/chat/Chat.js +22 -14
  498. package/dist/data/chat/Chat.js.map +1 -1
  499. package/dist/data/chat/ContextMeter.cjs +142 -39
  500. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  501. package/dist/data/chat/ContextMeter.d.ts +4 -1
  502. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  503. package/dist/data/chat/ContextMeter.js +143 -40
  504. package/dist/data/chat/ContextMeter.js.map +1 -1
  505. package/dist/data/chat/Conversation.cjs +55 -3
  506. package/dist/data/chat/Conversation.cjs.map +1 -1
  507. package/dist/data/chat/Conversation.d.ts +5 -1
  508. package/dist/data/chat/Conversation.d.ts.map +1 -1
  509. package/dist/data/chat/Conversation.js +55 -3
  510. package/dist/data/chat/Conversation.js.map +1 -1
  511. package/dist/data/chat/ModelSelector.cjs +8 -10
  512. package/dist/data/chat/ModelSelector.cjs.map +1 -1
  513. package/dist/data/chat/ModelSelector.d.ts.map +1 -1
  514. package/dist/data/chat/ModelSelector.js +9 -11
  515. package/dist/data/chat/ModelSelector.js.map +1 -1
  516. package/dist/data/chat/PromptInput.cjs +56 -5
  517. package/dist/data/chat/PromptInput.cjs.map +1 -1
  518. package/dist/data/chat/PromptInput.d.ts +10 -1
  519. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  520. package/dist/data/chat/PromptInput.js +57 -6
  521. package/dist/data/chat/PromptInput.js.map +1 -1
  522. package/dist/data/chat/attachment-upload.cjs +33 -0
  523. package/dist/data/chat/attachment-upload.cjs.map +1 -0
  524. package/dist/data/chat/attachment-upload.d.ts +21 -0
  525. package/dist/data/chat/attachment-upload.d.ts.map +1 -0
  526. package/dist/data/chat/attachment-upload.js +33 -0
  527. package/dist/data/chat/attachment-upload.js.map +1 -0
  528. package/dist/data/chat/effort-icons.cjs +36 -6
  529. package/dist/data/chat/effort-icons.cjs.map +1 -1
  530. package/dist/data/chat/effort-icons.d.ts +6 -3
  531. package/dist/data/chat/effort-icons.d.ts.map +1 -1
  532. package/dist/data/chat/effort-icons.js +37 -7
  533. package/dist/data/chat/effort-icons.js.map +1 -1
  534. package/dist/data/chat/index.d.ts +3 -1
  535. package/dist/data/chat/index.d.ts.map +1 -1
  536. package/dist/data/chat/models.cjs +8 -0
  537. package/dist/data/chat/models.cjs.map +1 -0
  538. package/dist/data/chat/models.d.ts +11 -0
  539. package/dist/data/chat/models.d.ts.map +1 -0
  540. package/dist/data/chat/models.js +8 -0
  541. package/dist/data/chat/models.js.map +1 -0
  542. package/dist/data/chat/provider-icons.cjs +49 -16
  543. package/dist/data/chat/provider-icons.cjs.map +1 -1
  544. package/dist/data/chat/provider-icons.d.ts +2 -0
  545. package/dist/data/chat/provider-icons.d.ts.map +1 -1
  546. package/dist/data/chat/provider-icons.js +50 -17
  547. package/dist/data/chat/provider-icons.js.map +1 -1
  548. package/dist/data/chat/types.cjs.map +1 -1
  549. package/dist/data/chat/types.d.ts +9 -0
  550. package/dist/data/chat/types.d.ts.map +1 -1
  551. package/dist/data/chat/types.js.map +1 -1
  552. package/dist/data/examples/markdown-preview-mock.cjs +45 -0
  553. package/dist/data/examples/markdown-preview-mock.cjs.map +1 -0
  554. package/dist/data/examples/markdown-preview-mock.d.ts +23 -0
  555. package/dist/data/examples/markdown-preview-mock.d.ts.map +1 -0
  556. package/dist/data/examples/markdown-preview-mock.js +45 -0
  557. package/dist/data/examples/markdown-preview-mock.js.map +1 -0
  558. package/dist/data/examples/markdown-syntax.cjs +36 -0
  559. package/dist/data/examples/markdown-syntax.cjs.map +1 -0
  560. package/dist/data/examples/markdown-syntax.d.ts +12 -0
  561. package/dist/data/examples/markdown-syntax.d.ts.map +1 -0
  562. package/dist/data/examples/markdown-syntax.js +36 -0
  563. package/dist/data/examples/markdown-syntax.js.map +1 -0
  564. package/dist/data/examples/markdown-syntax.md.cjs +4 -0
  565. package/dist/data/examples/markdown-syntax.md.cjs.map +1 -0
  566. package/dist/data/examples/markdown-syntax.md.js +5 -0
  567. package/dist/data/examples/markdown-syntax.md.js.map +1 -0
  568. package/dist/data/task-process-details.cjs +48 -0
  569. package/dist/data/task-process-details.cjs.map +1 -0
  570. package/dist/data/task-process-details.d.ts +5 -0
  571. package/dist/data/task-process-details.d.ts.map +1 -0
  572. package/dist/data/task-process-details.js +48 -0
  573. package/dist/data/task-process-details.js.map +1 -0
  574. package/dist/data/version-info.cjs +3 -3
  575. package/dist/data/version-info.js +3 -3
  576. package/dist/data.cjs +30 -0
  577. package/dist/data.cjs.map +1 -1
  578. package/dist/data.d.ts +7 -1
  579. package/dist/data.d.ts.map +1 -1
  580. package/dist/data.js +30 -0
  581. package/dist/data.js.map +1 -1
  582. package/dist/hooks/use-hotkey.cjs +98 -0
  583. package/dist/hooks/use-hotkey.cjs.map +1 -0
  584. package/dist/hooks/use-hotkey.d.ts +42 -0
  585. package/dist/hooks/use-hotkey.d.ts.map +1 -0
  586. package/dist/hooks/use-hotkey.js +98 -0
  587. package/dist/hooks/use-hotkey.js.map +1 -0
  588. package/dist/hooks/use-task-run.cjs +23 -1
  589. package/dist/hooks/use-task-run.cjs.map +1 -1
  590. package/dist/hooks/use-task-run.d.ts.map +1 -1
  591. package/dist/hooks/use-task-run.js +23 -1
  592. package/dist/hooks/use-task-run.js.map +1 -1
  593. package/dist/hooks.cjs +4 -0
  594. package/dist/hooks.cjs.map +1 -1
  595. package/dist/hooks.d.ts +1 -0
  596. package/dist/hooks.d.ts.map +1 -1
  597. package/dist/hooks.js +4 -0
  598. package/dist/hooks.js.map +1 -1
  599. package/dist/icons/components/UiBank.cjs +15 -0
  600. package/dist/icons/components/UiBank.cjs.map +1 -0
  601. package/dist/icons/components/UiBank.d.ts +15 -0
  602. package/dist/icons/components/UiBank.d.ts.map +1 -0
  603. package/dist/icons/components/UiBank.js +15 -0
  604. package/dist/icons/components/UiBank.js.map +1 -0
  605. package/dist/icons/components/UiChartOfAccounts.cjs +15 -0
  606. package/dist/icons/components/UiChartOfAccounts.cjs.map +1 -0
  607. package/dist/icons/components/UiChartOfAccounts.d.ts +15 -0
  608. package/dist/icons/components/UiChartOfAccounts.d.ts.map +1 -0
  609. package/dist/icons/components/UiChartOfAccounts.js +15 -0
  610. package/dist/icons/components/UiChartOfAccounts.js.map +1 -0
  611. package/dist/icons/components/UiCloudUpload.cjs +15 -0
  612. package/dist/icons/components/UiCloudUpload.cjs.map +1 -0
  613. package/dist/icons/components/UiCloudUpload.d.ts +15 -0
  614. package/dist/icons/components/UiCloudUpload.d.ts.map +1 -0
  615. package/dist/icons/components/UiCloudUpload.js +15 -0
  616. package/dist/icons/components/UiCloudUpload.js.map +1 -0
  617. package/dist/icons/components/UiLedger.cjs +15 -0
  618. package/dist/icons/components/UiLedger.cjs.map +1 -0
  619. package/dist/icons/components/UiLedger.d.ts +15 -0
  620. package/dist/icons/components/UiLedger.d.ts.map +1 -0
  621. package/dist/icons/components/UiLedger.js +15 -0
  622. package/dist/icons/components/UiLedger.js.map +1 -0
  623. package/dist/icons/components/UiReceipt.cjs +15 -0
  624. package/dist/icons/components/UiReceipt.cjs.map +1 -0
  625. package/dist/icons/components/UiReceipt.d.ts +15 -0
  626. package/dist/icons/components/UiReceipt.d.ts.map +1 -0
  627. package/dist/icons/components/UiReceipt.js +15 -0
  628. package/dist/icons/components/UiReceipt.js.map +1 -0
  629. package/dist/icons/index.d.ts +10 -0
  630. package/dist/icons/index.d.ts.map +1 -1
  631. package/dist/icons.cjs +15 -0
  632. package/dist/icons.cjs.map +1 -1
  633. package/dist/icons.js +15 -0
  634. package/dist/icons.js.map +1 -1
  635. package/dist/index.cjs +47 -0
  636. package/dist/index.cjs.map +1 -1
  637. package/dist/index.js +49 -2
  638. package/dist/index.js.map +1 -1
  639. package/dist/layout/AppShell.cjs +270 -238
  640. package/dist/layout/AppShell.cjs.map +1 -1
  641. package/dist/layout/AppShell.d.ts +9 -0
  642. package/dist/layout/AppShell.d.ts.map +1 -1
  643. package/dist/layout/AppShell.debug.cjs +53 -0
  644. package/dist/layout/AppShell.debug.cjs.map +1 -0
  645. package/dist/layout/AppShell.debug.d.ts +6 -0
  646. package/dist/layout/AppShell.debug.d.ts.map +1 -0
  647. package/dist/layout/AppShell.debug.js +53 -0
  648. package/dist/layout/AppShell.debug.js.map +1 -0
  649. package/dist/layout/AppShell.js +269 -237
  650. package/dist/layout/AppShell.js.map +1 -1
  651. package/dist/layout/AppShell.nav.cjs +90 -0
  652. package/dist/layout/AppShell.nav.cjs.map +1 -0
  653. package/dist/layout/AppShell.nav.d.ts +7 -0
  654. package/dist/layout/AppShell.nav.d.ts.map +1 -0
  655. package/dist/layout/AppShell.nav.js +90 -0
  656. package/dist/layout/AppShell.nav.js.map +1 -0
  657. package/dist/layout/AppSidebar.cjs +35 -5
  658. package/dist/layout/AppSidebar.cjs.map +1 -1
  659. package/dist/layout/AppSidebar.d.ts +4 -1
  660. package/dist/layout/AppSidebar.d.ts.map +1 -1
  661. package/dist/layout/AppSidebar.js +35 -5
  662. package/dist/layout/AppSidebar.js.map +1 -1
  663. package/dist/layout/Panel.cjs +25 -41
  664. package/dist/layout/Panel.cjs.map +1 -1
  665. package/dist/layout/Panel.d.ts +2 -1
  666. package/dist/layout/Panel.d.ts.map +1 -1
  667. package/dist/layout/Panel.js +26 -42
  668. package/dist/layout/Panel.js.map +1 -1
  669. package/dist/layout/PanelFrame.cjs +56 -0
  670. package/dist/layout/PanelFrame.cjs.map +1 -0
  671. package/dist/layout/PanelFrame.d.ts +15 -0
  672. package/dist/layout/PanelFrame.d.ts.map +1 -0
  673. package/dist/layout/PanelFrame.js +56 -0
  674. package/dist/layout/PanelFrame.js.map +1 -0
  675. package/dist/layout/Section.cjs +51 -41
  676. package/dist/layout/Section.cjs.map +1 -1
  677. package/dist/layout/Section.d.ts +3 -2
  678. package/dist/layout/Section.d.ts.map +1 -1
  679. package/dist/layout/Section.js +51 -41
  680. package/dist/layout/Section.js.map +1 -1
  681. package/dist/layout/content-width.cjs +8 -0
  682. package/dist/layout/content-width.cjs.map +1 -0
  683. package/dist/layout/content-width.d.ts +3 -0
  684. package/dist/layout/content-width.d.ts.map +1 -0
  685. package/dist/layout/content-width.js +8 -0
  686. package/dist/layout/content-width.js.map +1 -0
  687. package/dist/overlay/CommandPalette.cjs +207 -0
  688. package/dist/overlay/CommandPalette.cjs.map +1 -0
  689. package/dist/overlay/CommandPalette.d.ts +71 -0
  690. package/dist/overlay/CommandPalette.d.ts.map +1 -0
  691. package/dist/overlay/CommandPalette.js +207 -0
  692. package/dist/overlay/CommandPalette.js.map +1 -0
  693. package/dist/overlay/CommandPalette.model.cjs +70 -0
  694. package/dist/overlay/CommandPalette.model.cjs.map +1 -0
  695. package/dist/overlay/CommandPalette.model.d.ts +71 -0
  696. package/dist/overlay/CommandPalette.model.d.ts.map +1 -0
  697. package/dist/overlay/CommandPalette.model.js +70 -0
  698. package/dist/overlay/CommandPalette.model.js.map +1 -0
  699. package/dist/overlay/CommandPaletteList.cjs +88 -0
  700. package/dist/overlay/CommandPaletteList.cjs.map +1 -0
  701. package/dist/overlay/CommandPaletteList.d.ts +23 -0
  702. package/dist/overlay/CommandPaletteList.d.ts.map +1 -0
  703. package/dist/overlay/CommandPaletteList.js +88 -0
  704. package/dist/overlay/CommandPaletteList.js.map +1 -0
  705. package/dist/overlay/CommandPaletteTrigger.cjs +36 -0
  706. package/dist/overlay/CommandPaletteTrigger.cjs.map +1 -0
  707. package/dist/overlay/CommandPaletteTrigger.d.ts +22 -0
  708. package/dist/overlay/CommandPaletteTrigger.d.ts.map +1 -0
  709. package/dist/overlay/CommandPaletteTrigger.js +36 -0
  710. package/dist/overlay/CommandPaletteTrigger.js.map +1 -0
  711. package/dist/overlay/Modal.cjs +12 -5
  712. package/dist/overlay/Modal.cjs.map +1 -1
  713. package/dist/overlay/Modal.d.ts.map +1 -1
  714. package/dist/overlay/Modal.js +12 -5
  715. package/dist/overlay/Modal.js.map +1 -1
  716. package/dist/overlay/modalStack.js +1 -1
  717. package/dist/overlay/zIndex.cjs +2 -0
  718. package/dist/overlay/zIndex.cjs.map +1 -1
  719. package/dist/overlay/zIndex.js +2 -0
  720. package/dist/overlay/zIndex.js.map +1 -1
  721. package/dist/rpc/EntityExplorerApp.cjs +6 -0
  722. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  723. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  724. package/dist/rpc/EntityExplorerApp.js +6 -0
  725. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  726. package/dist/rpc/OperationCatalog.cjs +49 -52
  727. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  728. package/dist/rpc/OperationCatalog.d.ts +17 -2
  729. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  730. package/dist/rpc/OperationCatalog.js +49 -52
  731. package/dist/rpc/OperationCatalog.js.map +1 -1
  732. package/dist/rpc/clickyMetadata.cjs +2 -1
  733. package/dist/rpc/clickyMetadata.cjs.map +1 -1
  734. package/dist/rpc/clickyMetadata.d.ts.map +1 -1
  735. package/dist/rpc/clickyMetadata.js +2 -1
  736. package/dist/rpc/clickyMetadata.js.map +1 -1
  737. package/dist/rpc/rpc-story-fixtures/orders.fixture.d.ts.map +1 -1
  738. package/dist/rpc/rpc-story-fixtures/services.fixture.d.ts.map +1 -1
  739. package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts +25 -2
  740. package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts.map +1 -1
  741. package/dist/rpc/rpc-story-fixtures/widgets.fixture.d.ts.map +1 -1
  742. package/dist/rpc/rpc-story.fixtures.d.ts +2 -1
  743. package/dist/rpc/rpc-story.fixtures.d.ts.map +1 -1
  744. package/dist/rpc/types.cjs.map +1 -1
  745. package/dist/rpc/types.d.ts +1 -0
  746. package/dist/rpc/types.d.ts.map +1 -1
  747. package/dist/rpc/types.js.map +1 -1
  748. package/dist/styles.css +1 -1
  749. package/dist/tailwind-preset.cjs +11 -0
  750. package/dist/tailwind-preset.cjs.map +1 -1
  751. package/dist/tailwind-preset.d.ts.map +1 -1
  752. package/dist/tailwind-preset.js +11 -0
  753. package/dist/tailwind-preset.js.map +1 -1
  754. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Section.cjs","sources":["../../src/layout/Section.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\nimport { UiChevronDown, UiChevronRight } from \"../icons\";\n\nexport type SectionProps = {\n /** Header title. */\n title: ReactNode;\n /**\n * Optional right-aligned header summary. The summary is a sibling of the\n * collapse toggle, never a descendant of it — so a summary containing\n * interactive content (filter tabs, links) is valid DOM and its clicks do\n * not toggle the section. When a summary is present, only the chevron + the\n * title toggle; the summary region does not.\n */\n summary?: ReactNode;\n /**\n * Whether the section can collapse. Defaults to true. When false the body is\n * always rendered, the header has no chevron and is not clickable — use for a\n * fixed panel that should never hide its content.\n */\n collapsible?: boolean;\n /** Initial open state for uncontrolled usage. */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Called when the section is toggled. */\n onToggle?: (open: boolean) => void;\n /** Optional leading icon. */\n icon?: string | StaticIconComponent;\n /** Semantic border accent. */\n tone?: \"default\" | \"danger\" | \"warning\" | \"success\" | \"info\";\n /** Classes applied to the section root. */\n className?: string;\n /** Classes applied to the clickable header. */\n headerClassName?: string;\n /** Classes applied to the content body. */\n bodyClassName?: string;\n /** Collapsible content. */\n children: ReactNode;\n};\n\nconst toneRing: Record<NonNullable<SectionProps[\"tone\"]>, string> = {\n default: \"\",\n danger: \"border-l-2 border-red-500\",\n warning: \"border-l-2 border-yellow-500\",\n success: \"border-l-2 border-green-500\",\n info: \"border-l-2 border-blue-500\",\n};\n\nexport function Section({\n title,\n summary,\n collapsible = true,\n defaultOpen = false,\n open: openProp,\n onToggle,\n icon,\n tone = \"default\",\n className,\n headerClassName,\n bodyClassName,\n children,\n}: SectionProps) {\n const isControlled = openProp !== undefined;\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n // A non-collapsible section is permanently open — there is no toggle to track.\n const open = !collapsible || (isControlled ? openProp : innerOpen);\n\n function toggle() {\n const next = !open;\n if (!isControlled) setInnerOpen(next);\n onToggle?.(next);\n }\n\n const leading = (\n <>\n {collapsible && (\n <Icon\n icon={open ? UiChevronDown : UiChevronRight}\n className=\"text-muted-foreground text-xs\"\n />\n )}\n {icon && (\n <Icon {...(typeof icon === \"string\" ? { name: icon } : { icon })} className=\"text-base\" />\n )}\n <span className=\"font-medium text-sm flex-1 truncate\">{title}</span>\n </>\n );\n\n return (\n <div className={cn(\"rounded-md border border-border bg-background\", toneRing[tone], className)}>\n {/* The header is always a plain row so the summary (which may hold its own\n interactive content) is never nested inside the toggle button. Only the\n chevron + title region toggles; the summary is a sibling of it. */}\n <div\n className={cn(\n \"w-full flex items-center gap-2 px-density-3 py-density-2 text-left\",\n headerClassName,\n )}\n >\n {collapsible ? (\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={open}\n className=\"flex flex-1 min-w-0 items-center gap-2 text-left rounded-sm hover:bg-accent/50 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n {leading}\n </button>\n ) : (\n <div className=\"flex flex-1 min-w-0 items-center gap-2\">{leading}</div>\n )}\n {summary && <span className=\"text-xs text-muted-foreground shrink-0\">{summary}</span>}\n </div>\n {open && (\n <div className={cn(\"px-density-3 py-density-2 border-t border-border\", bodyClassName)}>\n {children}\n </div>\n )}\n </div>\n );\n}\n\nexport type DetailEmptyStateProps = {\n /** Optional icon shown above the label. */\n icon?: string | StaticIconComponent;\n /** Primary empty-state text. */\n label: ReactNode;\n /** Secondary empty-state text. */\n description?: ReactNode;\n /** Classes applied to the empty-state root. */\n className?: string;\n};\n\nexport function DetailEmptyState({ icon, label, description, className }: DetailEmptyStateProps) {\n return (\n <div className={cn(\"p-density-6 text-center text-muted-foreground\", className)}>\n {icon && (\n <Icon\n {...(typeof icon === \"string\" ? { name: icon } : { icon })}\n className=\"text-3xl mb-density-2\"\n />\n )}\n <p className=\"text-sm\">{label}</p>\n {description && <p className=\"text-xs mt-density-1 opacity-70\">{description}</p>}\n </div>\n );\n}\n"],"names":["useState","jsxs","Fragment","jsx","Icon","UiChevronDown","UiChevronRight","cn"],"mappings":";;;;;;;;AA0CA,MAAM,WAA8D;AAAA,EAClE,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AACR;AAEO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiB;AACf,QAAM,eAAe,aAAa;AAClC,QAAM,CAAC,WAAW,YAAY,IAAIA,MAAAA,SAAS,WAAW;AAEtD,QAAM,OAAO,CAAC,gBAAgB,eAAe,WAAW;AAExD,WAAS,SAAS;AAChB,UAAM,OAAO,CAAC;AACd,QAAI,CAAC,aAAc,cAAa,IAAI;AACpC,yCAAW;AAAA,EACb;AAEA,QAAM,UACJC,2BAAAA,KAAAC,WAAAA,UAAA,EACG,UAAA;AAAA,IAAA,eACCC,2BAAAA;AAAAA,MAACC,KAAAA;AAAAA,MAAA;AAAA,QACC,MAAM,OAAOC,cAAAA,gBAAgBC,eAAAA;AAAAA,QAC7B,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,QACCH,2BAAAA,IAACC,KAAAA,MAAA,EAAM,GAAI,OAAO,SAAS,WAAW,EAAE,MAAM,SAAS,EAAE,KAAA,GAAS,WAAU,YAAA,CAAY;AAAA,IAE1FD,2BAAAA,IAAC,QAAA,EAAK,WAAU,uCAAuC,UAAA,MAAA,CAAM;AAAA,EAAA,GAC/D;AAGF,SACEF,gCAAC,SAAI,WAAWM,MAAAA,GAAG,iDAAiD,SAAS,IAAI,GAAG,SAAS,GAI3F,UAAA;AAAA,IAAAN,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWM,MAAAA;AAAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAGD,UAAA;AAAA,UAAA,cACCJ,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS;AAAA,cACT,iBAAe;AAAA,cACf,WAAU;AAAA,cAET,UAAA;AAAA,YAAA;AAAA,UAAA,IAGHA,2BAAAA,IAAC,OAAA,EAAI,WAAU,0CAA0C,UAAA,SAAQ;AAAA,UAElE,WAAWA,2BAAAA,IAAC,QAAA,EAAK,WAAU,0CAA0C,UAAA,QAAA,CAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAE/E,uCACE,OAAA,EAAI,WAAWI,MAAAA,GAAG,oDAAoD,aAAa,GACjF,SAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;AAaO,SAAS,iBAAiB,EAAE,MAAM,OAAO,aAAa,aAAoC;AAC/F,yCACG,OAAA,EAAI,WAAWA,MAAAA,GAAG,iDAAiD,SAAS,GAC1E,UAAA;AAAA,IAAA,QACCJ,2BAAAA;AAAAA,MAACC,KAAAA;AAAAA,MAAA;AAAA,QACE,GAAI,OAAO,SAAS,WAAW,EAAE,MAAM,KAAA,IAAS,EAAE,KAAA;AAAA,QACnD,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGdD,2BAAAA,IAAC,KAAA,EAAE,WAAU,WAAW,UAAA,OAAM;AAAA,IAC7B,eAAeA,2BAAAA,IAAC,KAAA,EAAE,WAAU,mCAAmC,UAAA,YAAA,CAAY;AAAA,EAAA,GAC9E;AAEJ;;;"}
1
+ {"version":3,"file":"Section.cjs","sources":["../../src/layout/Section.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\nimport { UiChevronDown, UiChevronRight } from \"../icons\";\nimport { PanelFrame, type PanelTone } from \"./PanelFrame\";\n\nexport type SectionProps = {\n /** Header title. */\n title: ReactNode;\n /**\n * Optional right-aligned header summary. The summary is a sibling of the\n * collapse toggle, never a descendant of it — so a summary containing\n * interactive content (filter tabs, links) is valid DOM and its clicks do\n * not toggle the section. When a summary is present, only the chevron + the\n * title toggle; the summary region does not.\n */\n summary?: ReactNode;\n /**\n * Whether the section can collapse. Defaults to true. When false the body is\n * always rendered, the header has no chevron and is not clickable — use for a\n * fixed panel that should never hide its content.\n */\n collapsible?: boolean;\n /** Initial open state for uncontrolled usage. */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Called when the section is toggled. */\n onToggle?: (open: boolean) => void;\n /** Optional leading icon. */\n icon?: string | StaticIconComponent;\n /** Semantic border accent. */\n tone?: PanelTone;\n /** Classes applied to the section root. */\n className?: string;\n /** Classes applied to the clickable header. */\n headerClassName?: string;\n /** Classes applied to the content body. */\n bodyClassName?: string;\n /** Collapsible content. */\n children: ReactNode;\n};\n\nexport function Section({\n title,\n summary,\n collapsible = true,\n defaultOpen = false,\n open: openProp,\n onToggle,\n icon,\n tone = \"default\",\n className,\n headerClassName,\n bodyClassName,\n children,\n}: SectionProps) {\n const isControlled = openProp !== undefined;\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n // A non-collapsible section is permanently open — there is no toggle to track.\n const open = !collapsible || (isControlled ? openProp : innerOpen);\n\n function toggle() {\n const next = !open;\n if (!isControlled) setInnerOpen(next);\n onToggle?.(next);\n }\n\n const leading = (\n <>\n {collapsible && (\n <Icon\n icon={open ? UiChevronDown : UiChevronRight}\n className=\"text-muted-foreground text-xs\"\n />\n )}\n {icon && (\n <Icon\n {...(typeof icon === \"string\" ? { name: icon } : { icon })}\n className=\"text-base\"\n />\n )}\n <span className=\"font-medium text-sm flex-1 truncate\">{title}</span>\n </>\n );\n\n return (\n <PanelFrame\n header={\n <>\n {collapsible ? (\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={open}\n className=\"flex min-w-0 flex-1 items-center gap-2 rounded-sm text-left transition-colors hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n {leading}\n </button>\n ) : (\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n {leading}\n </div>\n )}\n {summary && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {summary}\n </span>\n )}\n </>\n }\n tone={tone}\n bodyVisible={open}\n className={cn(\"overflow-visible bg-background\", className)}\n headerClassName={cn(\"w-full text-left\", headerClassName)}\n {...(bodyClassName !== undefined ? { bodyClassName } : {})}\n >\n {children}\n </PanelFrame>\n );\n}\n\nexport type DetailEmptyStateProps = {\n /** Optional icon shown above the label. */\n icon?: string | StaticIconComponent;\n /** Primary empty-state text. */\n label: ReactNode;\n /** Secondary empty-state text. */\n description?: ReactNode;\n /** Classes applied to the empty-state root. */\n className?: string;\n};\n\nexport function DetailEmptyState({\n icon,\n label,\n description,\n className,\n}: DetailEmptyStateProps) {\n return (\n <div\n className={cn(\"p-density-6 text-center text-muted-foreground\", className)}\n >\n {icon && (\n <Icon\n {...(typeof icon === \"string\" ? { name: icon } : { icon })}\n className=\"text-3xl mb-density-2\"\n />\n )}\n <p className=\"text-sm\">{label}</p>\n {description && (\n <p className=\"text-xs mt-density-1 opacity-70\">{description}</p>\n )}\n </div>\n );\n}\n"],"names":["useState","jsxs","Fragment","jsx","Icon","UiChevronDown","UiChevronRight","PanelFrame","cn"],"mappings":";;;;;;;;;AA2CO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiB;AACf,QAAM,eAAe,aAAa;AAClC,QAAM,CAAC,WAAW,YAAY,IAAIA,MAAAA,SAAS,WAAW;AAEtD,QAAM,OAAO,CAAC,gBAAgB,eAAe,WAAW;AAExD,WAAS,SAAS;AAChB,UAAM,OAAO,CAAC;AACd,QAAI,CAAC,aAAc,cAAa,IAAI;AACpC,yCAAW;AAAA,EACb;AAEA,QAAM,UACJC,2BAAAA,KAAAC,WAAAA,UAAA,EACG,UAAA;AAAA,IAAA,eACCC,2BAAAA;AAAAA,MAACC,KAAAA;AAAAA,MAAA;AAAA,QACC,MAAM,OAAOC,cAAAA,gBAAgBC,eAAAA;AAAAA,QAC7B,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,QACCH,2BAAAA;AAAAA,MAACC,KAAAA;AAAAA,MAAA;AAAA,QACE,GAAI,OAAO,SAAS,WAAW,EAAE,MAAM,KAAA,IAAS,EAAE,KAAA;AAAA,QACnD,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGdD,2BAAAA,IAAC,QAAA,EAAK,WAAU,uCAAuC,UAAA,MAAA,CAAM;AAAA,EAAA,GAC/D;AAGF,SACEA,2BAAAA;AAAAA,IAACI,WAAAA;AAAAA,IAAA;AAAA,MACC,QACEN,2BAAAA,KAAAC,qBAAA,EACG,UAAA;AAAA,QAAA,cACCC,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,iBAAe;AAAA,YACf,WAAU;AAAA,YAET,UAAA;AAAA,UAAA;AAAA,QAAA,IAGHA,2BAAAA,IAAC,OAAA,EAAI,WAAU,0CACZ,UAAA,SACH;AAAA,QAED,WACCA,2BAAAA,IAAC,QAAA,EAAK,WAAU,0CACb,UAAA,QAAA,CACH;AAAA,MAAA,GAEJ;AAAA,MAEF;AAAA,MACA,aAAa;AAAA,MACb,WAAWK,MAAAA,GAAG,kCAAkC,SAAS;AAAA,MACzD,iBAAiBA,MAAAA,GAAG,oBAAoB,eAAe;AAAA,MACtD,GAAI,kBAAkB,SAAY,EAAE,cAAA,IAAkB,CAAA;AAAA,MAEtD;AAAA,IAAA;AAAA,EAAA;AAGP;AAaO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,SACEP,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWO,MAAAA,GAAG,iDAAiD,SAAS;AAAA,MAEvE,UAAA;AAAA,QAAA,QACCL,2BAAAA;AAAAA,UAACC,KAAAA;AAAAA,UAAA;AAAA,YACE,GAAI,OAAO,SAAS,WAAW,EAAE,MAAM,KAAA,IAAS,EAAE,KAAA;AAAA,YACnD,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAGdD,2BAAAA,IAAC,KAAA,EAAE,WAAU,WAAW,UAAA,OAAM;AAAA,QAC7B,eACCA,2BAAAA,IAAC,KAAA,EAAE,WAAU,mCAAmC,UAAA,YAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIpE;;;"}
@@ -1,5 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { StaticIconComponent } from '../data/Icon';
3
+ import { PanelTone } from './PanelFrame';
3
4
  export type SectionProps = {
4
5
  /** Header title. */
5
6
  title: ReactNode;
@@ -26,7 +27,7 @@ export type SectionProps = {
26
27
  /** Optional leading icon. */
27
28
  icon?: string | StaticIconComponent;
28
29
  /** Semantic border accent. */
29
- tone?: "default" | "danger" | "warning" | "success" | "info";
30
+ tone?: PanelTone;
30
31
  /** Classes applied to the section root. */
31
32
  className?: string;
32
33
  /** Classes applied to the clickable header. */
@@ -47,5 +48,5 @@ export type DetailEmptyStateProps = {
47
48
  /** Classes applied to the empty-state root. */
48
49
  className?: string;
49
50
  };
50
- export declare function DetailEmptyState({ icon, label, description, className }: DetailEmptyStateProps): import("react/jsx-runtime").JSX.Element;
51
+ export declare function DetailEmptyState({ icon, label, description, className, }: DetailEmptyStateProps): import("react/jsx-runtime").JSX.Element;
51
52
  //# sourceMappingURL=Section.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../src/layout/Section.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAG9D,MAAM,MAAM,YAAY,GAAG;IACzB,oBAAoB;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACpC,8BAA8B;IAC9B,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC7D,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAUF,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,OAAO,EACP,WAAkB,EAClB,WAAmB,EACnB,IAAI,EAAE,QAAQ,EACd,QAAQ,EACR,IAAI,EACJ,IAAgB,EAChB,SAAS,EACT,eAAe,EACf,aAAa,EACb,QAAQ,GACT,EAAE,YAAY,2CA2Dd;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACpC,gCAAgC;IAChC,KAAK,EAAE,SAAS,CAAC;IACjB,kCAAkC;IAClC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,qBAAqB,2CAa9F"}
1
+ {"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../src/layout/Section.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG;IACzB,oBAAoB;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACpC,8BAA8B;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,OAAO,EACP,WAAkB,EAClB,WAAmB,EACnB,IAAI,EAAE,QAAQ,EACd,QAAQ,EACR,IAAI,EACJ,IAAgB,EAChB,SAAS,EACT,eAAe,EACf,aAAa,EACb,QAAQ,GACT,EAAE,YAAY,2CAgEd;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACpC,gCAAgC;IAChC,KAAK,EAAE,SAAS,CAAC;IACjB,kCAAkC;IAClC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,KAAK,EACL,WAAW,EACX,SAAS,GACV,EAAE,qBAAqB,2CAiBvB"}
@@ -2,15 +2,9 @@ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
3
  import { cn } from "../lib/utils.js";
4
4
  import { Icon } from "../data/Icon.js";
5
+ import { PanelFrame } from "./PanelFrame.js";
5
6
  import { UiChevronDown } from "../icons/components/UiChevronDown.js";
6
7
  import { UiChevronRight } from "../icons/components/UiChevronRight.js";
7
- const toneRing = {
8
- default: "",
9
- danger: "border-l-2 border-red-500",
10
- warning: "border-l-2 border-yellow-500",
11
- success: "border-l-2 border-green-500",
12
- info: "border-l-2 border-blue-500"
13
- };
14
8
  function Section({
15
9
  title,
16
10
  summary,
@@ -41,47 +35,63 @@ function Section({
41
35
  className: "text-muted-foreground text-xs"
42
36
  }
43
37
  ),
44
- icon && /* @__PURE__ */ jsx(Icon, { ...typeof icon === "string" ? { name: icon } : { icon }, className: "text-base" }),
45
- /* @__PURE__ */ jsx("span", { className: "font-medium text-sm flex-1 truncate", children: title })
46
- ] });
47
- return /* @__PURE__ */ jsxs("div", { className: cn("rounded-md border border-border bg-background", toneRing[tone], className), children: [
48
- /* @__PURE__ */ jsxs(
49
- "div",
50
- {
51
- className: cn(
52
- "w-full flex items-center gap-2 px-density-3 py-density-2 text-left",
53
- headerClassName
54
- ),
55
- children: [
56
- collapsible ? /* @__PURE__ */ jsx(
57
- "button",
58
- {
59
- type: "button",
60
- onClick: toggle,
61
- "aria-expanded": open,
62
- className: "flex flex-1 min-w-0 items-center gap-2 text-left rounded-sm hover:bg-accent/50 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
63
- children: leading
64
- }
65
- ) : /* @__PURE__ */ jsx("div", { className: "flex flex-1 min-w-0 items-center gap-2", children: leading }),
66
- summary && /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground shrink-0", children: summary })
67
- ]
68
- }
69
- ),
70
- open && /* @__PURE__ */ jsx("div", { className: cn("px-density-3 py-density-2 border-t border-border", bodyClassName), children })
71
- ] });
72
- }
73
- function DetailEmptyState({ icon, label, description, className }) {
74
- return /* @__PURE__ */ jsxs("div", { className: cn("p-density-6 text-center text-muted-foreground", className), children: [
75
38
  icon && /* @__PURE__ */ jsx(
76
39
  Icon,
77
40
  {
78
41
  ...typeof icon === "string" ? { name: icon } : { icon },
79
- className: "text-3xl mb-density-2"
42
+ className: "text-base"
80
43
  }
81
44
  ),
82
- /* @__PURE__ */ jsx("p", { className: "text-sm", children: label }),
83
- description && /* @__PURE__ */ jsx("p", { className: "text-xs mt-density-1 opacity-70", children: description })
45
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-sm flex-1 truncate", children: title })
84
46
  ] });
47
+ return /* @__PURE__ */ jsx(
48
+ PanelFrame,
49
+ {
50
+ header: /* @__PURE__ */ jsxs(Fragment, { children: [
51
+ collapsible ? /* @__PURE__ */ jsx(
52
+ "button",
53
+ {
54
+ type: "button",
55
+ onClick: toggle,
56
+ "aria-expanded": open,
57
+ className: "flex min-w-0 flex-1 items-center gap-2 rounded-sm text-left transition-colors hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
58
+ children: leading
59
+ }
60
+ ) : /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: leading }),
61
+ summary && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs text-muted-foreground", children: summary })
62
+ ] }),
63
+ tone,
64
+ bodyVisible: open,
65
+ className: cn("overflow-visible bg-background", className),
66
+ headerClassName: cn("w-full text-left", headerClassName),
67
+ ...bodyClassName !== void 0 ? { bodyClassName } : {},
68
+ children
69
+ }
70
+ );
71
+ }
72
+ function DetailEmptyState({
73
+ icon,
74
+ label,
75
+ description,
76
+ className
77
+ }) {
78
+ return /* @__PURE__ */ jsxs(
79
+ "div",
80
+ {
81
+ className: cn("p-density-6 text-center text-muted-foreground", className),
82
+ children: [
83
+ icon && /* @__PURE__ */ jsx(
84
+ Icon,
85
+ {
86
+ ...typeof icon === "string" ? { name: icon } : { icon },
87
+ className: "text-3xl mb-density-2"
88
+ }
89
+ ),
90
+ /* @__PURE__ */ jsx("p", { className: "text-sm", children: label }),
91
+ description && /* @__PURE__ */ jsx("p", { className: "text-xs mt-density-1 opacity-70", children: description })
92
+ ]
93
+ }
94
+ );
85
95
  }
86
96
  export {
87
97
  DetailEmptyState,
@@ -1 +1 @@
1
- {"version":3,"file":"Section.js","sources":["../../src/layout/Section.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\nimport { UiChevronDown, UiChevronRight } from \"../icons\";\n\nexport type SectionProps = {\n /** Header title. */\n title: ReactNode;\n /**\n * Optional right-aligned header summary. The summary is a sibling of the\n * collapse toggle, never a descendant of it — so a summary containing\n * interactive content (filter tabs, links) is valid DOM and its clicks do\n * not toggle the section. When a summary is present, only the chevron + the\n * title toggle; the summary region does not.\n */\n summary?: ReactNode;\n /**\n * Whether the section can collapse. Defaults to true. When false the body is\n * always rendered, the header has no chevron and is not clickable — use for a\n * fixed panel that should never hide its content.\n */\n collapsible?: boolean;\n /** Initial open state for uncontrolled usage. */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Called when the section is toggled. */\n onToggle?: (open: boolean) => void;\n /** Optional leading icon. */\n icon?: string | StaticIconComponent;\n /** Semantic border accent. */\n tone?: \"default\" | \"danger\" | \"warning\" | \"success\" | \"info\";\n /** Classes applied to the section root. */\n className?: string;\n /** Classes applied to the clickable header. */\n headerClassName?: string;\n /** Classes applied to the content body. */\n bodyClassName?: string;\n /** Collapsible content. */\n children: ReactNode;\n};\n\nconst toneRing: Record<NonNullable<SectionProps[\"tone\"]>, string> = {\n default: \"\",\n danger: \"border-l-2 border-red-500\",\n warning: \"border-l-2 border-yellow-500\",\n success: \"border-l-2 border-green-500\",\n info: \"border-l-2 border-blue-500\",\n};\n\nexport function Section({\n title,\n summary,\n collapsible = true,\n defaultOpen = false,\n open: openProp,\n onToggle,\n icon,\n tone = \"default\",\n className,\n headerClassName,\n bodyClassName,\n children,\n}: SectionProps) {\n const isControlled = openProp !== undefined;\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n // A non-collapsible section is permanently open — there is no toggle to track.\n const open = !collapsible || (isControlled ? openProp : innerOpen);\n\n function toggle() {\n const next = !open;\n if (!isControlled) setInnerOpen(next);\n onToggle?.(next);\n }\n\n const leading = (\n <>\n {collapsible && (\n <Icon\n icon={open ? UiChevronDown : UiChevronRight}\n className=\"text-muted-foreground text-xs\"\n />\n )}\n {icon && (\n <Icon {...(typeof icon === \"string\" ? { name: icon } : { icon })} className=\"text-base\" />\n )}\n <span className=\"font-medium text-sm flex-1 truncate\">{title}</span>\n </>\n );\n\n return (\n <div className={cn(\"rounded-md border border-border bg-background\", toneRing[tone], className)}>\n {/* The header is always a plain row so the summary (which may hold its own\n interactive content) is never nested inside the toggle button. Only the\n chevron + title region toggles; the summary is a sibling of it. */}\n <div\n className={cn(\n \"w-full flex items-center gap-2 px-density-3 py-density-2 text-left\",\n headerClassName,\n )}\n >\n {collapsible ? (\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={open}\n className=\"flex flex-1 min-w-0 items-center gap-2 text-left rounded-sm hover:bg-accent/50 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n {leading}\n </button>\n ) : (\n <div className=\"flex flex-1 min-w-0 items-center gap-2\">{leading}</div>\n )}\n {summary && <span className=\"text-xs text-muted-foreground shrink-0\">{summary}</span>}\n </div>\n {open && (\n <div className={cn(\"px-density-3 py-density-2 border-t border-border\", bodyClassName)}>\n {children}\n </div>\n )}\n </div>\n );\n}\n\nexport type DetailEmptyStateProps = {\n /** Optional icon shown above the label. */\n icon?: string | StaticIconComponent;\n /** Primary empty-state text. */\n label: ReactNode;\n /** Secondary empty-state text. */\n description?: ReactNode;\n /** Classes applied to the empty-state root. */\n className?: string;\n};\n\nexport function DetailEmptyState({ icon, label, description, className }: DetailEmptyStateProps) {\n return (\n <div className={cn(\"p-density-6 text-center text-muted-foreground\", className)}>\n {icon && (\n <Icon\n {...(typeof icon === \"string\" ? { name: icon } : { icon })}\n className=\"text-3xl mb-density-2\"\n />\n )}\n <p className=\"text-sm\">{label}</p>\n {description && <p className=\"text-xs mt-density-1 opacity-70\">{description}</p>}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;AA0CA,MAAM,WAA8D;AAAA,EAClE,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AACR;AAEO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiB;AACf,QAAM,eAAe,aAAa;AAClC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,WAAW;AAEtD,QAAM,OAAO,CAAC,gBAAgB,eAAe,WAAW;AAExD,WAAS,SAAS;AAChB,UAAM,OAAO,CAAC;AACd,QAAI,CAAC,aAAc,cAAa,IAAI;AACpC,yCAAW;AAAA,EACb;AAEA,QAAM,UACJ,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,eACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,OAAO,gBAAgB;AAAA,QAC7B,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,QACC,oBAAC,MAAA,EAAM,GAAI,OAAO,SAAS,WAAW,EAAE,MAAM,SAAS,EAAE,KAAA,GAAS,WAAU,YAAA,CAAY;AAAA,IAE1F,oBAAC,QAAA,EAAK,WAAU,uCAAuC,UAAA,MAAA,CAAM;AAAA,EAAA,GAC/D;AAGF,SACE,qBAAC,SAAI,WAAW,GAAG,iDAAiD,SAAS,IAAI,GAAG,SAAS,GAI3F,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAGD,UAAA;AAAA,UAAA,cACC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS;AAAA,cACT,iBAAe;AAAA,cACf,WAAU;AAAA,cAET,UAAA;AAAA,YAAA;AAAA,UAAA,IAGH,oBAAC,OAAA,EAAI,WAAU,0CAA0C,UAAA,SAAQ;AAAA,UAElE,WAAW,oBAAC,QAAA,EAAK,WAAU,0CAA0C,UAAA,QAAA,CAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAE/E,4BACE,OAAA,EAAI,WAAW,GAAG,oDAAoD,aAAa,GACjF,SAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;AAaO,SAAS,iBAAiB,EAAE,MAAM,OAAO,aAAa,aAAoC;AAC/F,8BACG,OAAA,EAAI,WAAW,GAAG,iDAAiD,SAAS,GAC1E,UAAA;AAAA,IAAA,QACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAI,OAAO,SAAS,WAAW,EAAE,MAAM,KAAA,IAAS,EAAE,KAAA;AAAA,QACnD,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGd,oBAAC,KAAA,EAAE,WAAU,WAAW,UAAA,OAAM;AAAA,IAC7B,eAAe,oBAAC,KAAA,EAAE,WAAU,mCAAmC,UAAA,YAAA,CAAY;AAAA,EAAA,GAC9E;AAEJ;"}
1
+ {"version":3,"file":"Section.js","sources":["../../src/layout/Section.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\nimport { UiChevronDown, UiChevronRight } from \"../icons\";\nimport { PanelFrame, type PanelTone } from \"./PanelFrame\";\n\nexport type SectionProps = {\n /** Header title. */\n title: ReactNode;\n /**\n * Optional right-aligned header summary. The summary is a sibling of the\n * collapse toggle, never a descendant of it — so a summary containing\n * interactive content (filter tabs, links) is valid DOM and its clicks do\n * not toggle the section. When a summary is present, only the chevron + the\n * title toggle; the summary region does not.\n */\n summary?: ReactNode;\n /**\n * Whether the section can collapse. Defaults to true. When false the body is\n * always rendered, the header has no chevron and is not clickable — use for a\n * fixed panel that should never hide its content.\n */\n collapsible?: boolean;\n /** Initial open state for uncontrolled usage. */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Called when the section is toggled. */\n onToggle?: (open: boolean) => void;\n /** Optional leading icon. */\n icon?: string | StaticIconComponent;\n /** Semantic border accent. */\n tone?: PanelTone;\n /** Classes applied to the section root. */\n className?: string;\n /** Classes applied to the clickable header. */\n headerClassName?: string;\n /** Classes applied to the content body. */\n bodyClassName?: string;\n /** Collapsible content. */\n children: ReactNode;\n};\n\nexport function Section({\n title,\n summary,\n collapsible = true,\n defaultOpen = false,\n open: openProp,\n onToggle,\n icon,\n tone = \"default\",\n className,\n headerClassName,\n bodyClassName,\n children,\n}: SectionProps) {\n const isControlled = openProp !== undefined;\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n // A non-collapsible section is permanently open — there is no toggle to track.\n const open = !collapsible || (isControlled ? openProp : innerOpen);\n\n function toggle() {\n const next = !open;\n if (!isControlled) setInnerOpen(next);\n onToggle?.(next);\n }\n\n const leading = (\n <>\n {collapsible && (\n <Icon\n icon={open ? UiChevronDown : UiChevronRight}\n className=\"text-muted-foreground text-xs\"\n />\n )}\n {icon && (\n <Icon\n {...(typeof icon === \"string\" ? { name: icon } : { icon })}\n className=\"text-base\"\n />\n )}\n <span className=\"font-medium text-sm flex-1 truncate\">{title}</span>\n </>\n );\n\n return (\n <PanelFrame\n header={\n <>\n {collapsible ? (\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={open}\n className=\"flex min-w-0 flex-1 items-center gap-2 rounded-sm text-left transition-colors hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n {leading}\n </button>\n ) : (\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n {leading}\n </div>\n )}\n {summary && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {summary}\n </span>\n )}\n </>\n }\n tone={tone}\n bodyVisible={open}\n className={cn(\"overflow-visible bg-background\", className)}\n headerClassName={cn(\"w-full text-left\", headerClassName)}\n {...(bodyClassName !== undefined ? { bodyClassName } : {})}\n >\n {children}\n </PanelFrame>\n );\n}\n\nexport type DetailEmptyStateProps = {\n /** Optional icon shown above the label. */\n icon?: string | StaticIconComponent;\n /** Primary empty-state text. */\n label: ReactNode;\n /** Secondary empty-state text. */\n description?: ReactNode;\n /** Classes applied to the empty-state root. */\n className?: string;\n};\n\nexport function DetailEmptyState({\n icon,\n label,\n description,\n className,\n}: DetailEmptyStateProps) {\n return (\n <div\n className={cn(\"p-density-6 text-center text-muted-foreground\", className)}\n >\n {icon && (\n <Icon\n {...(typeof icon === \"string\" ? { name: icon } : { icon })}\n className=\"text-3xl mb-density-2\"\n />\n )}\n <p className=\"text-sm\">{label}</p>\n {description && (\n <p className=\"text-xs mt-density-1 opacity-70\">{description}</p>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;AA2CO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiB;AACf,QAAM,eAAe,aAAa;AAClC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,WAAW;AAEtD,QAAM,OAAO,CAAC,gBAAgB,eAAe,WAAW;AAExD,WAAS,SAAS;AAChB,UAAM,OAAO,CAAC;AACd,QAAI,CAAC,aAAc,cAAa,IAAI;AACpC,yCAAW;AAAA,EACb;AAEA,QAAM,UACJ,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,eACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,OAAO,gBAAgB;AAAA,QAC7B,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,QACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAI,OAAO,SAAS,WAAW,EAAE,MAAM,KAAA,IAAS,EAAE,KAAA;AAAA,QACnD,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGd,oBAAC,QAAA,EAAK,WAAU,uCAAuC,UAAA,MAAA,CAAM;AAAA,EAAA,GAC/D;AAGF,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QACE,qBAAA,UAAA,EACG,UAAA;AAAA,QAAA,cACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,iBAAe;AAAA,YACf,WAAU;AAAA,YAET,UAAA;AAAA,UAAA;AAAA,QAAA,IAGH,oBAAC,OAAA,EAAI,WAAU,0CACZ,UAAA,SACH;AAAA,QAED,WACC,oBAAC,QAAA,EAAK,WAAU,0CACb,UAAA,QAAA,CACH;AAAA,MAAA,GAEJ;AAAA,MAEF;AAAA,MACA,aAAa;AAAA,MACb,WAAW,GAAG,kCAAkC,SAAS;AAAA,MACzD,iBAAiB,GAAG,oBAAoB,eAAe;AAAA,MACtD,GAAI,kBAAkB,SAAY,EAAE,cAAA,IAAkB,CAAA;AAAA,MAEtD;AAAA,IAAA;AAAA,EAAA;AAGP;AAaO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAG,iDAAiD,SAAS;AAAA,MAEvE,UAAA;AAAA,QAAA,QACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAI,OAAO,SAAS,WAAW,EAAE,MAAM,KAAA,IAAS,EAAE,KAAA;AAAA,YACnD,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAGd,oBAAC,KAAA,EAAE,WAAU,WAAW,UAAA,OAAM;AAAA,QAC7B,eACC,oBAAC,KAAA,EAAE,WAAU,mCAAmC,UAAA,YAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIpE;"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const CONTAINED_CONTENT_CLASS = "mx-auto w-full max-w-7xl @8xl/app-content:max-w-8xl @9xl/app-content:max-w-9xl";
4
+ function contentWidthClassName(contentWidth) {
5
+ return contentWidth === "full" ? "w-full" : CONTAINED_CONTENT_CLASS;
6
+ }
7
+ exports.contentWidthClassName = contentWidthClassName;
8
+ //# sourceMappingURL=content-width.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-width.cjs","sources":["../../src/layout/content-width.ts"],"sourcesContent":["export type ContentWidth = \"contained\" | \"full\";\n\nconst CONTAINED_CONTENT_CLASS =\n \"mx-auto w-full max-w-7xl @8xl/app-content:max-w-8xl @9xl/app-content:max-w-9xl\";\n\nexport function contentWidthClassName(contentWidth: ContentWidth) {\n return contentWidth === \"full\" ? \"w-full\" : CONTAINED_CONTENT_CLASS;\n}\n"],"names":[],"mappings":";;AAEA,MAAM,0BACJ;AAEK,SAAS,sBAAsB,cAA4B;AAChE,SAAO,iBAAiB,SAAS,WAAW;AAC9C;;"}
@@ -0,0 +1,3 @@
1
+ export type ContentWidth = "contained" | "full";
2
+ export declare function contentWidthClassName(contentWidth: ContentWidth): "w-full" | "mx-auto w-full max-w-7xl @8xl/app-content:max-w-8xl @9xl/app-content:max-w-9xl";
3
+ //# sourceMappingURL=content-width.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-width.d.ts","sourceRoot":"","sources":["../../src/layout/content-width.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,MAAM,CAAC;AAKhD,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY,+FAE/D"}
@@ -0,0 +1,8 @@
1
+ const CONTAINED_CONTENT_CLASS = "mx-auto w-full max-w-7xl @8xl/app-content:max-w-8xl @9xl/app-content:max-w-9xl";
2
+ function contentWidthClassName(contentWidth) {
3
+ return contentWidth === "full" ? "w-full" : CONTAINED_CONTENT_CLASS;
4
+ }
5
+ export {
6
+ contentWidthClassName
7
+ };
8
+ //# sourceMappingURL=content-width.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-width.js","sources":["../../src/layout/content-width.ts"],"sourcesContent":["export type ContentWidth = \"contained\" | \"full\";\n\nconst CONTAINED_CONTENT_CLASS =\n \"mx-auto w-full max-w-7xl @8xl/app-content:max-w-8xl @9xl/app-content:max-w-9xl\";\n\nexport function contentWidthClassName(contentWidth: ContentWidth) {\n return contentWidth === \"full\" ? \"w-full\" : CONTAINED_CONTENT_CLASS;\n}\n"],"names":[],"mappings":"AAEA,MAAM,0BACJ;AAEK,SAAS,sBAAsB,cAA4B;AAChE,SAAO,iBAAiB,SAAS,WAAW;AAC9C;"}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const reactDom = require("react-dom");
6
+ const utils = require("../lib/utils.cjs");
7
+ const Icon = require("../data/Icon.cjs");
8
+ const useHotkey = require("../hooks/use-hotkey.cjs");
9
+ const modalStack = require("./modalStack.cjs");
10
+ const zIndex = require("./zIndex.cjs");
11
+ const CommandPaletteList = require("./CommandPaletteList.cjs");
12
+ const CommandPalette_model = require("./CommandPalette.model.cjs");
13
+ const UiSearch = require("../icons/components/UiSearch.cjs");
14
+ const SIZE_CLASS = {
15
+ md: "max-w-[40rem]",
16
+ lg: "max-w-[48rem]"
17
+ };
18
+ function CommandPalette({
19
+ open,
20
+ onOpenChange,
21
+ groups,
22
+ query,
23
+ onQueryChange,
24
+ hotkey = "mod+k",
25
+ placeholder = "Type a command or search…",
26
+ loading,
27
+ emptyState,
28
+ footer,
29
+ filter = CommandPalette_model.defaultCommandFilter,
30
+ onSelect,
31
+ closeOnSelect = true,
32
+ resetQueryOnClose = true,
33
+ size = "md",
34
+ topOffset = "12vh",
35
+ listMaxHeight = "min(24rem, 50dvh)",
36
+ ariaLabel = "Command palette",
37
+ className
38
+ }) {
39
+ const baseId = react.useId();
40
+ const [selfOpen, setSelfOpen] = react.useState(false);
41
+ const [selfQuery, setSelfQuery] = react.useState("");
42
+ const [activeIndex, setActiveIndex] = react.useState(0);
43
+ const inputRef = react.useRef(null);
44
+ const listRef = react.useRef(null);
45
+ const restoreFocusRef = react.useRef(null);
46
+ const isOpen = open ?? selfOpen;
47
+ const currentQuery = query ?? selfQuery;
48
+ const setOpen = react.useCallback(
49
+ (next) => {
50
+ if (open === void 0) setSelfOpen(next);
51
+ onOpenChange == null ? void 0 : onOpenChange(next);
52
+ },
53
+ [open, onOpenChange]
54
+ );
55
+ const setQuery = react.useCallback(
56
+ (next) => {
57
+ if (query === void 0) setSelfQuery(next);
58
+ onQueryChange == null ? void 0 : onQueryChange(next);
59
+ },
60
+ [query, onQueryChange]
61
+ );
62
+ const visibleGroups = react.useMemo(
63
+ () => CommandPalette_model.filterCommandGroups(groups, currentQuery, filter),
64
+ [groups, currentQuery, filter]
65
+ );
66
+ const items = react.useMemo(() => CommandPalette_model.flattenCommands(visibleGroups), [visibleGroups]);
67
+ useHotkey.useHotkey(hotkey, () => setOpen(!isOpen), { priority: 10 });
68
+ modalStack.useEscapeLayer(isOpen, () => setOpen(false));
69
+ const { depth } = modalStack.useModalStack(isOpen);
70
+ react.useEffect(() => {
71
+ setActiveIndex(CommandPalette_model.firstEnabledIndex(items));
72
+ }, [items]);
73
+ react.useEffect(() => {
74
+ var _a, _b, _c;
75
+ if (!isOpen) {
76
+ if (resetQueryOnClose && query === void 0) setSelfQuery("");
77
+ (_b = (_a = restoreFocusRef.current) == null ? void 0 : _a.focus) == null ? void 0 : _b.call(_a);
78
+ restoreFocusRef.current = null;
79
+ return;
80
+ }
81
+ restoreFocusRef.current = document.activeElement;
82
+ (_c = inputRef.current) == null ? void 0 : _c.focus();
83
+ }, [isOpen, resetQueryOnClose, query]);
84
+ react.useEffect(() => {
85
+ var _a;
86
+ if (activeIndex < 0) return;
87
+ const option = (_a = listRef.current) == null ? void 0 : _a.querySelectorAll('[role="option"]')[activeIndex];
88
+ if (option instanceof HTMLElement && typeof option.scrollIntoView === "function") {
89
+ option.scrollIntoView({ block: "nearest" });
90
+ }
91
+ }, [activeIndex]);
92
+ const optionId = react.useCallback((item) => `${baseId}-option-${item.id}`, [baseId]);
93
+ const activate = react.useCallback(
94
+ (item) => {
95
+ if (item.disabled) return;
96
+ const close = () => setOpen(false);
97
+ const context = { item, query: currentQuery.trim(), close };
98
+ if (item.onSelect) item.onSelect(context);
99
+ else onSelect == null ? void 0 : onSelect(context);
100
+ if (closeOnSelect) close();
101
+ },
102
+ [currentQuery, onSelect, closeOnSelect, setOpen]
103
+ );
104
+ const onKeyDown = (event) => {
105
+ switch (event.key) {
106
+ case "ArrowDown":
107
+ event.preventDefault();
108
+ setActiveIndex((current) => CommandPalette_model.nextEnabledIndex(items, current, 1));
109
+ break;
110
+ case "ArrowUp":
111
+ event.preventDefault();
112
+ setActiveIndex((current) => CommandPalette_model.nextEnabledIndex(items, current, -1));
113
+ break;
114
+ case "Home":
115
+ event.preventDefault();
116
+ setActiveIndex(CommandPalette_model.firstEnabledIndex(items));
117
+ break;
118
+ case "End":
119
+ event.preventDefault();
120
+ setActiveIndex(CommandPalette_model.lastEnabledIndex(items));
121
+ break;
122
+ case "Enter": {
123
+ event.preventDefault();
124
+ const index = activeIndex >= 0 ? activeIndex : CommandPalette_model.firstEnabledIndex(items);
125
+ const item = index >= 0 ? items[index] : void 0;
126
+ if (item) activate(item);
127
+ break;
128
+ }
129
+ case "Tab":
130
+ if (!footer) event.preventDefault();
131
+ break;
132
+ }
133
+ };
134
+ if (!isOpen || typeof document === "undefined") return null;
135
+ const activeItem = activeIndex >= 0 ? items[activeIndex] : void 0;
136
+ const listId = `${baseId}-list`;
137
+ const overlay = /* @__PURE__ */ jsxRuntime.jsx(
138
+ "div",
139
+ {
140
+ className: utils.cn(
141
+ "fixed inset-0 flex justify-center p-density-4",
142
+ depth === 0 ? "bg-black/40" : "bg-black/20"
143
+ ),
144
+ style: { zIndex: zIndex.zIndex.modal + depth * zIndex.zIndex.modalStep },
145
+ role: "presentation",
146
+ onClick: () => setOpen(false),
147
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
148
+ "div",
149
+ {
150
+ role: "dialog",
151
+ "aria-modal": "true",
152
+ "aria-label": ariaLabel,
153
+ className: utils.cn(
154
+ "flex h-fit w-full flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl",
155
+ SIZE_CLASS[size],
156
+ className
157
+ ),
158
+ style: { marginTop: topOffset },
159
+ onClick: (event) => event.stopPropagation(),
160
+ children: [
161
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-density-2 border-b border-border px-density-3", children: [
162
+ /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiSearch.UiSearch, className: "shrink-0 text-muted-foreground" }),
163
+ /* @__PURE__ */ jsxRuntime.jsx(
164
+ "input",
165
+ {
166
+ ref: inputRef,
167
+ type: "text",
168
+ role: "combobox",
169
+ "aria-expanded": true,
170
+ "aria-controls": listId,
171
+ "aria-autocomplete": "list",
172
+ "aria-activedescendant": activeItem ? optionId(activeItem) : void 0,
173
+ "aria-label": ariaLabel,
174
+ value: currentQuery,
175
+ placeholder,
176
+ onChange: (event) => setQuery(event.target.value),
177
+ onKeyDown,
178
+ className: "h-12 min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground"
179
+ }
180
+ )
181
+ ] }),
182
+ /* @__PURE__ */ jsxRuntime.jsx(
183
+ CommandPaletteList.CommandPaletteList,
184
+ {
185
+ groups: visibleGroups,
186
+ items,
187
+ activeIndex,
188
+ listId,
189
+ optionId,
190
+ onActivate: activate,
191
+ onHover: setActiveIndex,
192
+ listRef,
193
+ loading,
194
+ emptyState,
195
+ listMaxHeight
196
+ }
197
+ ),
198
+ footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-border px-density-3 py-density-2 text-xs text-muted-foreground", children: footer })
199
+ ]
200
+ }
201
+ )
202
+ }
203
+ );
204
+ return reactDom.createPortal(overlay, document.body);
205
+ }
206
+ exports.CommandPalette = CommandPalette;
207
+ //# sourceMappingURL=CommandPalette.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.cjs","sources":["../../src/overlay/CommandPalette.tsx"],"sourcesContent":["import { useCallback, useEffect, useId, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiSearch } from \"../icons\";\nimport { useHotkey } from \"../hooks/use-hotkey\";\nimport { useEscapeLayer, useModalStack } from \"./modalStack\";\nimport { zIndex } from \"./zIndex\";\nimport { CommandPaletteList } from \"./CommandPaletteList\";\nimport {\n defaultCommandFilter,\n filterCommandGroups,\n firstEnabledIndex,\n flattenCommands,\n lastEnabledIndex,\n nextEnabledIndex,\n type CommandFilter,\n type CommandGroup,\n type CommandItem,\n} from \"./CommandPalette.model\";\n\nexport type {\n CommandFilter,\n CommandGroup,\n CommandItem,\n CommandSelectContext,\n} from \"./CommandPalette.model\";\n\nconst SIZE_CLASS = {\n md: \"max-w-[40rem]\",\n lg: \"max-w-[48rem]\",\n} as const;\n\nexport type CommandPaletteProps = {\n /**\n * Controls visibility. Omit to run uncontrolled — the palette then owns its\n * open state and the built-in hotkey works with no wiring beyond mounting it.\n */\n open?: boolean;\n /** Called with the next open state on hotkey, Escape, backdrop click, and selection. */\n onOpenChange?: (open: boolean) => void;\n /** Command groups, rendered top to bottom in array order. */\n groups: CommandGroup[];\n /** Controlled query. Omit to let the palette own the input. */\n query?: string;\n /** Called with the next query on every keystroke. Required for server-side search. */\n onQueryChange?: (query: string) => void;\n /**\n * Global shortcut that opens (and, while open, closes) the palette, in\n * `useHotkey` syntax — `\"mod+k\"` by default, where `mod` is ⌘ on macOS and\n * Ctrl elsewhere. Pass `null` when an ancestor owns the binding.\n */\n hotkey?: string | null;\n /** Ghost text in the search input. Defaults to \"Type a command or search…\". */\n placeholder?: string;\n /** Shows a loading row instead of the empty state while results are in flight. */\n loading?: boolean;\n /** Replaces the default \"No results\" body. */\n emptyState?: ReactNode;\n /** Non-interactive hint strip pinned below the list. */\n footer?: ReactNode;\n /**\n * How rows are matched. Defaults to a case-insensitive substring match over\n * label, description and keywords, ranked by hit position. Pass `false` when\n * the caller already filtered `groups` server-side.\n */\n filter?: CommandFilter | false;\n /** Fallback handler for items with no own `onSelect`. */\n onSelect?: (context: { item: CommandItem; query: string; close: () => void }) => void;\n /** Close after a successful activation. Defaults to true. */\n closeOnSelect?: boolean;\n /** Clear the query when the palette closes. Defaults to true. */\n resetQueryOnClose?: boolean;\n /** Panel width preset. Defaults to \"md\". */\n size?: \"md\" | \"lg\";\n /** Distance from the viewport top. Defaults to \"12vh\". Applied as an inline style. */\n topOffset?: string | number;\n /** Max height of the scrolling list. Defaults to \"min(24rem, 50dvh)\". Inline style. */\n listMaxHeight?: string | number;\n /** Accessible name for the dialog. Defaults to \"Command palette\". */\n ariaLabel?: string;\n /** Classes applied to the palette panel. */\n className?: string;\n};\n\n/**\n * A ⌘K command palette: a top-anchored overlay with a search field over a\n * grouped, keyboard-navigable command list.\n *\n * It renders its own portal rather than building on `Modal`, which centres its\n * panel, focuses the dialog element instead of an input, forces body padding,\n * and pins an inline max-height — none of which a palette can override. The\n * stacking primitives are shared though (`useModalStack`, `useEscapeLayer`, the\n * `zIndex` scale), so a palette opened over a modal sits above it and Escape\n * still dismisses exactly one layer.\n */\nexport function CommandPalette({\n open,\n onOpenChange,\n groups,\n query,\n onQueryChange,\n hotkey = \"mod+k\",\n placeholder = \"Type a command or search…\",\n loading,\n emptyState,\n footer,\n filter = defaultCommandFilter,\n onSelect,\n closeOnSelect = true,\n resetQueryOnClose = true,\n size = \"md\",\n topOffset = \"12vh\",\n listMaxHeight = \"min(24rem, 50dvh)\",\n ariaLabel = \"Command palette\",\n className,\n}: CommandPaletteProps) {\n const baseId = useId();\n const [selfOpen, setSelfOpen] = useState(false);\n const [selfQuery, setSelfQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const restoreFocusRef = useRef<HTMLElement | null>(null);\n\n const isOpen = open ?? selfOpen;\n const currentQuery = query ?? selfQuery;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (open === undefined) setSelfOpen(next);\n onOpenChange?.(next);\n },\n [open, onOpenChange],\n );\n\n const setQuery = useCallback(\n (next: string) => {\n if (query === undefined) setSelfQuery(next);\n onQueryChange?.(next);\n },\n [query, onQueryChange],\n );\n\n const visibleGroups = useMemo(\n () => filterCommandGroups(groups, currentQuery, filter),\n [groups, currentQuery, filter],\n );\n const items = useMemo(() => flattenCommands(visibleGroups), [visibleGroups]);\n\n // Priority keeps the palette ahead of any page-level ⌘K search field, whose\n // binding would otherwise win purely by mounting later.\n useHotkey(hotkey, () => setOpen(!isOpen), { priority: 10 });\n useEscapeLayer(isOpen, () => setOpen(false));\n\n const { depth } = useModalStack(isOpen);\n\n // Enter-runs-the-top-result is the point of a palette, so the active row\n // resets to the first selectable one whenever the result set changes.\n useEffect(() => {\n setActiveIndex(firstEnabledIndex(items));\n }, [items]);\n\n useEffect(() => {\n if (!isOpen) {\n if (resetQueryOnClose && query === undefined) setSelfQuery(\"\");\n restoreFocusRef.current?.focus?.();\n restoreFocusRef.current = null;\n return;\n }\n restoreFocusRef.current = document.activeElement as HTMLElement | null;\n inputRef.current?.focus();\n }, [isOpen, resetQueryOnClose, query]);\n\n // Keep the active row in view without stealing focus from the input.\n useEffect(() => {\n if (activeIndex < 0) return;\n const option = listRef.current?.querySelectorAll('[role=\"option\"]')[activeIndex];\n // jsdom does not implement scrollIntoView; scrolling is a progressive\n // enhancement, so skip it rather than crash a consumer's test run.\n if (option instanceof HTMLElement && typeof option.scrollIntoView === \"function\") {\n option.scrollIntoView({ block: \"nearest\" });\n }\n }, [activeIndex]);\n\n const optionId = useCallback((item: CommandItem) => `${baseId}-option-${item.id}`, [baseId]);\n\n const activate = useCallback(\n (item: CommandItem) => {\n if (item.disabled) return;\n const close = () => setOpen(false);\n const context = { item, query: currentQuery.trim(), close };\n if (item.onSelect) item.onSelect(context);\n else onSelect?.(context);\n if (closeOnSelect) close();\n },\n [currentQuery, onSelect, closeOnSelect, setOpen],\n );\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n setActiveIndex((current) => nextEnabledIndex(items, current, 1));\n break;\n case \"ArrowUp\":\n event.preventDefault();\n setActiveIndex((current) => nextEnabledIndex(items, current, -1));\n break;\n case \"Home\":\n event.preventDefault();\n setActiveIndex(firstEnabledIndex(items));\n break;\n case \"End\":\n event.preventDefault();\n setActiveIndex(lastEnabledIndex(items));\n break;\n case \"Enter\": {\n event.preventDefault();\n const index = activeIndex >= 0 ? activeIndex : firstEnabledIndex(items);\n const item = index >= 0 ? items[index] : undefined;\n if (item) activate(item);\n break;\n }\n case \"Tab\":\n // Nothing else in the panel is focusable, and letting Tab escape an\n // aria-modal dialog would strand focus behind the backdrop.\n if (!footer) event.preventDefault();\n break;\n default:\n break;\n }\n };\n\n if (!isOpen || typeof document === \"undefined\") return null;\n\n const activeItem = activeIndex >= 0 ? items[activeIndex] : undefined;\n const listId = `${baseId}-list`;\n\n const overlay = (\n <div\n className={cn(\n \"fixed inset-0 flex justify-center p-density-4\",\n depth === 0 ? \"bg-black/40\" : \"bg-black/20\",\n )}\n style={{ zIndex: zIndex.modal + depth * zIndex.modalStep }}\n role=\"presentation\"\n onClick={() => setOpen(false)}\n >\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n className={cn(\n \"flex h-fit w-full flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl\",\n SIZE_CLASS[size],\n className,\n )}\n style={{ marginTop: topOffset }}\n onClick={(event) => event.stopPropagation()}\n >\n <div className=\"flex items-center gap-density-2 border-b border-border px-density-3\">\n <Icon icon={UiSearch} className=\"shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeItem ? optionId(activeItem) : undefined}\n aria-label={ariaLabel}\n value={currentQuery}\n placeholder={placeholder}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={onKeyDown}\n className=\"h-12 min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n />\n </div>\n\n <CommandPaletteList\n groups={visibleGroups}\n items={items}\n activeIndex={activeIndex}\n listId={listId}\n optionId={optionId}\n onActivate={activate}\n onHover={setActiveIndex}\n listRef={listRef}\n loading={loading}\n emptyState={emptyState}\n listMaxHeight={listMaxHeight}\n />\n\n {footer && (\n <div className=\"border-t border-border px-density-3 py-density-2 text-xs text-muted-foreground\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n\n return createPortal(overlay, document.body);\n}\n"],"names":["defaultCommandFilter","useId","useState","useRef","useCallback","useMemo","filterCommandGroups","flattenCommands","useHotkey","useEscapeLayer","useModalStack","useEffect","firstEnabledIndex","nextEnabledIndex","lastEnabledIndex","jsx","cn","zIndex","jsxs","Icon","UiSearch","CommandPaletteList","createPortal"],"mappings":";;;;;;;;;;;;;AA4BA,MAAM,aAAa;AAAA,EACjB,IAAI;AAAA,EACJ,IAAI;AACN;AAiEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAASA,qBAAAA;AAAAA,EACT;AAAA,EACA,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ;AACF,GAAwB;AACtB,QAAM,SAASC,MAAAA,MAAA;AACf,QAAM,CAAC,UAAU,WAAW,IAAIC,MAAAA,SAAS,KAAK;AAC9C,QAAM,CAAC,WAAW,YAAY,IAAIA,MAAAA,SAAS,EAAE;AAC7C,QAAM,CAAC,aAAa,cAAc,IAAIA,MAAAA,SAAS,CAAC;AAEhD,QAAM,WAAWC,MAAAA,OAAgC,IAAI;AACrD,QAAM,UAAUA,MAAAA,OAAuB,IAAI;AAC3C,QAAM,kBAAkBA,MAAAA,OAA2B,IAAI;AAEvD,QAAM,SAAS,QAAQ;AACvB,QAAM,eAAe,SAAS;AAE9B,QAAM,UAAUC,MAAAA;AAAAA,IACd,CAAC,SAAkB;AACjB,UAAI,SAAS,OAAW,aAAY,IAAI;AACxC,mDAAe;AAAA,IACjB;AAAA,IACA,CAAC,MAAM,YAAY;AAAA,EAAA;AAGrB,QAAM,WAAWA,MAAAA;AAAAA,IACf,CAAC,SAAiB;AAChB,UAAI,UAAU,OAAW,cAAa,IAAI;AAC1C,qDAAgB;AAAA,IAClB;AAAA,IACA,CAAC,OAAO,aAAa;AAAA,EAAA;AAGvB,QAAM,gBAAgBC,MAAAA;AAAAA,IACpB,MAAMC,yCAAoB,QAAQ,cAAc,MAAM;AAAA,IACtD,CAAC,QAAQ,cAAc,MAAM;AAAA,EAAA;AAE/B,QAAM,QAAQD,MAAAA,QAAQ,MAAME,qBAAAA,gBAAgB,aAAa,GAAG,CAAC,aAAa,CAAC;AAI3EC,sBAAU,QAAQ,MAAM,QAAQ,CAAC,MAAM,GAAG,EAAE,UAAU,IAAI;AAC1DC,aAAAA,eAAe,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAE3C,QAAM,EAAE,MAAA,IAAUC,WAAAA,cAAc,MAAM;AAItCC,QAAAA,UAAU,MAAM;AACd,mBAAeC,qBAAAA,kBAAkB,KAAK,CAAC;AAAA,EACzC,GAAG,CAAC,KAAK,CAAC;AAEVD,QAAAA,UAAU,MAAM;;AACd,QAAI,CAAC,QAAQ;AACX,UAAI,qBAAqB,UAAU,OAAW,cAAa,EAAE;AAC7D,kCAAgB,YAAhB,mBAAyB,UAAzB;AACA,sBAAgB,UAAU;AAC1B;AAAA,IACF;AACA,oBAAgB,UAAU,SAAS;AACnC,mBAAS,YAAT,mBAAkB;AAAA,EACpB,GAAG,CAAC,QAAQ,mBAAmB,KAAK,CAAC;AAGrCA,QAAAA,UAAU,MAAM;;AACd,QAAI,cAAc,EAAG;AACrB,UAAM,UAAS,aAAQ,YAAR,mBAAiB,iBAAiB,mBAAmB;AAGpE,QAAI,kBAAkB,eAAe,OAAO,OAAO,mBAAmB,YAAY;AAChF,aAAO,eAAe,EAAE,OAAO,UAAA,CAAW;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,WAAWP,MAAAA,YAAY,CAAC,SAAsB,GAAG,MAAM,WAAW,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AAE3F,QAAM,WAAWA,MAAAA;AAAAA,IACf,CAAC,SAAsB;AACrB,UAAI,KAAK,SAAU;AACnB,YAAM,QAAQ,MAAM,QAAQ,KAAK;AACjC,YAAM,UAAU,EAAE,MAAM,OAAO,aAAa,KAAA,GAAQ,MAAA;AACpD,UAAI,KAAK,SAAU,MAAK,SAAS,OAAO;AAAA,gDACxB;AAChB,UAAI,cAAe,OAAA;AAAA,IACrB;AAAA,IACA,CAAC,cAAc,UAAU,eAAe,OAAO;AAAA,EAAA;AAGjD,QAAM,YAAY,CAAC,UAAiD;AAClE,YAAQ,MAAM,KAAA;AAAA,MACZ,KAAK;AACH,cAAM,eAAA;AACN,uBAAe,CAAC,YAAYS,qBAAAA,iBAAiB,OAAO,SAAS,CAAC,CAAC;AAC/D;AAAA,MACF,KAAK;AACH,cAAM,eAAA;AACN,uBAAe,CAAC,YAAYA,qBAAAA,iBAAiB,OAAO,SAAS,EAAE,CAAC;AAChE;AAAA,MACF,KAAK;AACH,cAAM,eAAA;AACN,uBAAeD,qBAAAA,kBAAkB,KAAK,CAAC;AACvC;AAAA,MACF,KAAK;AACH,cAAM,eAAA;AACN,uBAAeE,qBAAAA,iBAAiB,KAAK,CAAC;AACtC;AAAA,MACF,KAAK,SAAS;AACZ,cAAM,eAAA;AACN,cAAM,QAAQ,eAAe,IAAI,cAAcF,qBAAAA,kBAAkB,KAAK;AACtE,cAAM,OAAO,SAAS,IAAI,MAAM,KAAK,IAAI;AACzC,YAAI,eAAe,IAAI;AACvB;AAAA,MACF;AAAA,MACA,KAAK;AAGH,YAAI,CAAC,OAAQ,OAAM,eAAA;AACnB;AAAA,IAEA;AAAA,EAEN;AAEA,MAAI,CAAC,UAAU,OAAO,aAAa,YAAa,QAAO;AAEvD,QAAM,aAAa,eAAe,IAAI,MAAM,WAAW,IAAI;AAC3D,QAAM,SAAS,GAAG,MAAM;AAExB,QAAM,UACJG,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA,UAAU,IAAI,gBAAgB;AAAA,MAAA;AAAA,MAEhC,OAAO,EAAE,QAAQC,OAAAA,OAAO,QAAQ,QAAQA,OAAAA,OAAO,UAAA;AAAA,MAC/C,MAAK;AAAA,MACL,SAAS,MAAM,QAAQ,KAAK;AAAA,MAE5B,UAAAC,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAW;AAAA,UACX,cAAY;AAAA,UACZ,WAAWF,MAAAA;AAAAA,YACT;AAAA,YACA,WAAW,IAAI;AAAA,YACf;AAAA,UAAA;AAAA,UAEF,OAAO,EAAE,WAAW,UAAA;AAAA,UACpB,SAAS,CAAC,UAAU,MAAM,gBAAA;AAAA,UAE1B,UAAA;AAAA,YAAAE,2BAAAA,KAAC,OAAA,EAAI,WAAU,uEACb,UAAA;AAAA,cAAAH,2BAAAA,IAACI,KAAAA,MAAA,EAAK,MAAMC,SAAAA,UAAU,WAAU,kCAAiC;AAAA,cACjEL,2BAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAK;AAAA,kBACL,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,iBAAa;AAAA,kBACb,iBAAe;AAAA,kBACf,qBAAkB;AAAA,kBAClB,yBAAuB,aAAa,SAAS,UAAU,IAAI;AAAA,kBAC3D,cAAY;AAAA,kBACZ,OAAO;AAAA,kBACP;AAAA,kBACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,kBAChD;AAAA,kBACA,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YACZ,GACF;AAAA,YAEAA,2BAAAA;AAAAA,cAACM,mBAAAA;AAAAA,cAAA;AAAA,gBACC,QAAQ;AAAA,gBACR;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,YAAY;AAAA,gBACZ,SAAS;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,UACCN,2BAAAA,IAAC,OAAA,EAAI,WAAU,kFACZ,UAAA,OAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA;AAIJ,SAAOO,sBAAa,SAAS,SAAS,IAAI;AAC5C;;"}
@@ -0,0 +1,71 @@
1
+ import { ReactNode } from 'react';
2
+ import { CommandFilter, CommandGroup, CommandItem } from './CommandPalette.model';
3
+ export type { CommandFilter, CommandGroup, CommandItem, CommandSelectContext, } from './CommandPalette.model';
4
+ export type CommandPaletteProps = {
5
+ /**
6
+ * Controls visibility. Omit to run uncontrolled — the palette then owns its
7
+ * open state and the built-in hotkey works with no wiring beyond mounting it.
8
+ */
9
+ open?: boolean;
10
+ /** Called with the next open state on hotkey, Escape, backdrop click, and selection. */
11
+ onOpenChange?: (open: boolean) => void;
12
+ /** Command groups, rendered top to bottom in array order. */
13
+ groups: CommandGroup[];
14
+ /** Controlled query. Omit to let the palette own the input. */
15
+ query?: string;
16
+ /** Called with the next query on every keystroke. Required for server-side search. */
17
+ onQueryChange?: (query: string) => void;
18
+ /**
19
+ * Global shortcut that opens (and, while open, closes) the palette, in
20
+ * `useHotkey` syntax — `"mod+k"` by default, where `mod` is ⌘ on macOS and
21
+ * Ctrl elsewhere. Pass `null` when an ancestor owns the binding.
22
+ */
23
+ hotkey?: string | null;
24
+ /** Ghost text in the search input. Defaults to "Type a command or search…". */
25
+ placeholder?: string;
26
+ /** Shows a loading row instead of the empty state while results are in flight. */
27
+ loading?: boolean;
28
+ /** Replaces the default "No results" body. */
29
+ emptyState?: ReactNode;
30
+ /** Non-interactive hint strip pinned below the list. */
31
+ footer?: ReactNode;
32
+ /**
33
+ * How rows are matched. Defaults to a case-insensitive substring match over
34
+ * label, description and keywords, ranked by hit position. Pass `false` when
35
+ * the caller already filtered `groups` server-side.
36
+ */
37
+ filter?: CommandFilter | false;
38
+ /** Fallback handler for items with no own `onSelect`. */
39
+ onSelect?: (context: {
40
+ item: CommandItem;
41
+ query: string;
42
+ close: () => void;
43
+ }) => void;
44
+ /** Close after a successful activation. Defaults to true. */
45
+ closeOnSelect?: boolean;
46
+ /** Clear the query when the palette closes. Defaults to true. */
47
+ resetQueryOnClose?: boolean;
48
+ /** Panel width preset. Defaults to "md". */
49
+ size?: "md" | "lg";
50
+ /** Distance from the viewport top. Defaults to "12vh". Applied as an inline style. */
51
+ topOffset?: string | number;
52
+ /** Max height of the scrolling list. Defaults to "min(24rem, 50dvh)". Inline style. */
53
+ listMaxHeight?: string | number;
54
+ /** Accessible name for the dialog. Defaults to "Command palette". */
55
+ ariaLabel?: string;
56
+ /** Classes applied to the palette panel. */
57
+ className?: string;
58
+ };
59
+ /**
60
+ * A ⌘K command palette: a top-anchored overlay with a search field over a
61
+ * grouped, keyboard-navigable command list.
62
+ *
63
+ * It renders its own portal rather than building on `Modal`, which centres its
64
+ * panel, focuses the dialog element instead of an input, forces body padding,
65
+ * and pins an inline max-height — none of which a palette can override. The
66
+ * stacking primitives are shared though (`useModalStack`, `useEscapeLayer`, the
67
+ * `zIndex` scale), so a palette opened over a modal sits above it and Escape
68
+ * still dismisses exactly one layer.
69
+ */
70
+ export declare function CommandPalette({ open, onOpenChange, groups, query, onQueryChange, hotkey, placeholder, loading, emptyState, footer, filter, onSelect, closeOnSelect, resetQueryOnClose, size, topOffset, listMaxHeight, ariaLabel, className, }: CommandPaletteProps): import('react').ReactPortal | null;
71
+ //# sourceMappingURL=CommandPalette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../src/overlay/CommandPalette.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AASjG,OAAO,EAOL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAOhC,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wFAAwF;IACxF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,6DAA6D;IAC7D,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,wDAAwD;IACxD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;IACtF,6DAA6D;IAC7D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,KAAK,EACL,aAAa,EACb,MAAgB,EAChB,WAAyC,EACzC,OAAO,EACP,UAAU,EACV,MAAM,EACN,MAA6B,EAC7B,QAAQ,EACR,aAAoB,EACpB,iBAAwB,EACxB,IAAW,EACX,SAAkB,EAClB,aAAmC,EACnC,SAA6B,EAC7B,SAAS,GACV,EAAE,mBAAmB,sCA6LrB"}