@flanksource/clicky-ui 0.3.33 → 0.3.35

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 (729) hide show
  1. package/README.md +4 -0
  2. package/dist/ai.cjs +3 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +3 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/comments/CommentCard.cjs +9 -8
  7. package/dist/comments/CommentCard.cjs.map +1 -1
  8. package/dist/comments/CommentCard.d.ts +1 -1
  9. package/dist/comments/CommentCard.d.ts.map +1 -1
  10. package/dist/comments/CommentCard.js +2 -1
  11. package/dist/comments/CommentCard.js.map +1 -1
  12. package/dist/comments/CommentCardParts.cjs +2 -1
  13. package/dist/comments/CommentCardParts.cjs.map +1 -1
  14. package/dist/comments/CommentCardParts.d.ts.map +1 -1
  15. package/dist/comments/CommentCardParts.js +2 -1
  16. package/dist/comments/CommentCardParts.js.map +1 -1
  17. package/dist/comments/CommentProvider.d.ts +1 -1
  18. package/dist/comments/CommentSidePanel.cjs +3 -2
  19. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  20. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  21. package/dist/comments/CommentSidePanel.js +2 -1
  22. package/dist/comments/CommentSidePanel.js.map +1 -1
  23. package/dist/comments/CommentThread.d.ts +1 -1
  24. package/dist/comments/CommentThreadList.d.ts +1 -1
  25. package/dist/comments/MentionTextarea.d.ts +1 -1
  26. package/dist/comments/comment-context.d.ts +4 -4
  27. package/dist/comments/comment-fixtures.d.ts +1 -1
  28. package/dist/comments/comment-types.d.ts +1 -1
  29. package/dist/comments/comment-utils.cjs +0 -27
  30. package/dist/comments/comment-utils.cjs.map +1 -1
  31. package/dist/comments/comment-utils.d.ts +1 -7
  32. package/dist/comments/comment-utils.d.ts.map +1 -1
  33. package/dist/comments/comment-utils.js +0 -27
  34. package/dist/comments/comment-utils.js.map +1 -1
  35. package/dist/comments.cjs +4 -3
  36. package/dist/comments.cjs.map +1 -1
  37. package/dist/comments.d.ts +1 -0
  38. package/dist/comments.d.ts.map +1 -1
  39. package/dist/comments.js +2 -1
  40. package/dist/comments.js.map +1 -1
  41. package/dist/components/AccordionList.d.ts +1 -1
  42. package/dist/components/ComboboxControl.d.ts +1 -1
  43. package/dist/components/ComboboxMenu.d.ts +2 -2
  44. package/dist/components/ComboboxTags.cjs +41 -11
  45. package/dist/components/ComboboxTags.cjs.map +1 -1
  46. package/dist/components/ComboboxTags.d.ts +6 -0
  47. package/dist/components/ComboboxTags.d.ts.map +1 -1
  48. package/dist/components/ComboboxTags.js +41 -11
  49. package/dist/components/ComboboxTags.js.map +1 -1
  50. package/dist/components/DateField.d.ts +3 -3
  51. package/dist/components/DatePicker.d.ts +3 -3
  52. package/dist/components/DateTimePicker.d.ts +3 -3
  53. package/dist/components/ErrorWrapper.d.ts +2 -2
  54. package/dist/components/Field.d.ts +1 -1
  55. package/dist/components/FilterBar.d.ts +1 -1
  56. package/dist/components/FormLookupProvider.d.ts +1 -1
  57. package/dist/components/FormatOptionsDropdown.d.ts +1 -1
  58. package/dist/components/IconButton.d.ts +3 -3
  59. package/dist/components/InputField.d.ts +2 -2
  60. package/dist/components/ItemActions.d.ts +1 -1
  61. package/dist/components/JsonSchemaForm.cjs +17 -36
  62. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  63. package/dist/components/JsonSchemaForm.d.ts +1 -1
  64. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  65. package/dist/components/JsonSchemaForm.js +17 -36
  66. package/dist/components/JsonSchemaForm.js.map +1 -1
  67. package/dist/components/ListMenu.d.ts +1 -1
  68. package/dist/components/MultiSelect.d.ts +1 -1
  69. package/dist/components/RangeSlider.cjs +15 -1
  70. package/dist/components/RangeSlider.cjs.map +1 -1
  71. package/dist/components/RangeSlider.d.ts.map +1 -1
  72. package/dist/components/RangeSlider.js +15 -1
  73. package/dist/components/RangeSlider.js.map +1 -1
  74. package/dist/components/SearchInput.d.ts +1 -1
  75. package/dist/components/SegmentedControl.d.ts +1 -1
  76. package/dist/components/SplitButton.d.ts +1 -1
  77. package/dist/components/Switch.d.ts +1 -1
  78. package/dist/components/TreePickerField.cjs +11 -2
  79. package/dist/components/TreePickerField.cjs.map +1 -1
  80. package/dist/components/TreePickerField.d.ts +13 -4
  81. package/dist/components/TreePickerField.d.ts.map +1 -1
  82. package/dist/components/TreePickerField.js +11 -2
  83. package/dist/components/TreePickerField.js.map +1 -1
  84. package/dist/components/UnitStepControls.d.ts +1 -1
  85. package/dist/components/button.d.ts +3 -3
  86. package/dist/components/combobox-types.d.ts +1 -1
  87. package/dist/components/density-switcher.d.ts +1 -1
  88. package/dist/components/filter-bar-context.d.ts +1 -1
  89. package/dist/components/filter-bar-field-utils.d.ts +2 -2
  90. package/dist/components/form-lookup-context.d.ts +1 -1
  91. package/dist/components/icon-menu-picker.d.ts +1 -1
  92. package/dist/components/json-schema-form-accordion-array.cjs +44 -21
  93. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
  94. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  95. package/dist/components/json-schema-form-accordion-array.js +47 -24
  96. package/dist/components/json-schema-form-accordion-array.js.map +1 -1
  97. package/dist/components/json-schema-form-array.cjs +53 -30
  98. package/dist/components/json-schema-form-array.cjs.map +1 -1
  99. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  100. package/dist/components/json-schema-form-array.js +54 -31
  101. package/dist/components/json-schema-form-array.js.map +1 -1
  102. package/dist/components/json-schema-form-cards-array.cjs +32 -22
  103. package/dist/components/json-schema-form-cards-array.cjs.map +1 -1
  104. package/dist/components/json-schema-form-cards-array.d.ts.map +1 -1
  105. package/dist/components/json-schema-form-cards-array.js +33 -23
  106. package/dist/components/json-schema-form-cards-array.js.map +1 -1
  107. package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts +44 -0
  108. package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts.map +1 -0
  109. package/dist/components/json-schema-form-discriminator.d.ts +1 -1
  110. package/dist/components/json-schema-form-errors.cjs +5 -1
  111. package/dist/components/json-schema-form-errors.cjs.map +1 -1
  112. package/dist/components/json-schema-form-errors.d.ts +2 -1
  113. package/dist/components/json-schema-form-errors.d.ts.map +1 -1
  114. package/dist/components/json-schema-form-errors.js +6 -2
  115. package/dist/components/json-schema-form-errors.js.map +1 -1
  116. package/dist/components/json-schema-form-extensions.d.ts +1 -1
  117. package/dist/components/json-schema-form-filter-input.cjs +50 -0
  118. package/dist/components/json-schema-form-filter-input.cjs.map +1 -0
  119. package/dist/components/json-schema-form-filter-input.d.ts +5 -0
  120. package/dist/components/json-schema-form-filter-input.d.ts.map +1 -0
  121. package/dist/components/json-schema-form-filter-input.js +50 -0
  122. package/dist/components/json-schema-form-filter-input.js.map +1 -0
  123. package/dist/components/json-schema-form-filter.cjs +49 -0
  124. package/dist/components/json-schema-form-filter.cjs.map +1 -0
  125. package/dist/components/json-schema-form-filter.d.ts +8 -0
  126. package/dist/components/json-schema-form-filter.d.ts.map +1 -0
  127. package/dist/components/json-schema-form-filter.js +49 -0
  128. package/dist/components/json-schema-form-filter.js.map +1 -0
  129. package/dist/components/json-schema-form-layout.cjs +84 -17
  130. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  131. package/dist/components/json-schema-form-layout.d.ts +1 -1
  132. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  133. package/dist/components/json-schema-form-layout.js +84 -17
  134. package/dist/components/json-schema-form-layout.js.map +1 -1
  135. package/dist/components/json-schema-form-list-array.cjs +16 -5
  136. package/dist/components/json-schema-form-list-array.cjs.map +1 -1
  137. package/dist/components/json-schema-form-list-array.d.ts +2 -1
  138. package/dist/components/json-schema-form-list-array.d.ts.map +1 -1
  139. package/dist/components/json-schema-form-list-array.js +16 -5
  140. package/dist/components/json-schema-form-list-array.js.map +1 -1
  141. package/dist/components/json-schema-form-object.cjs +239 -85
  142. package/dist/components/json-schema-form-object.cjs.map +1 -1
  143. package/dist/components/json-schema-form-object.d.ts +2 -2
  144. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  145. package/dist/components/json-schema-form-object.js +241 -87
  146. package/dist/components/json-schema-form-object.js.map +1 -1
  147. package/dist/components/json-schema-form-preferences.cjs +1 -1
  148. package/dist/components/json-schema-form-preferences.cjs.map +1 -1
  149. package/dist/components/json-schema-form-preferences.d.ts +1 -1
  150. package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
  151. package/dist/components/json-schema-form-preferences.js +1 -1
  152. package/dist/components/json-schema-form-preferences.js.map +1 -1
  153. package/dist/components/json-schema-form-properties-errors.fixtures.d.ts +14 -0
  154. package/dist/components/json-schema-form-properties-errors.fixtures.d.ts.map +1 -0
  155. package/dist/components/json-schema-form-properties-size.cjs +19 -0
  156. package/dist/components/json-schema-form-properties-size.cjs.map +1 -0
  157. package/dist/components/json-schema-form-properties-size.d.ts +4 -0
  158. package/dist/components/json-schema-form-properties-size.d.ts.map +1 -0
  159. package/dist/components/json-schema-form-properties-size.js +19 -0
  160. package/dist/components/json-schema-form-properties-size.js.map +1 -0
  161. package/dist/components/json-schema-form-properties.cjs +305 -0
  162. package/dist/components/json-schema-form-properties.cjs.map +1 -0
  163. package/dist/components/json-schema-form-properties.d.ts +20 -0
  164. package/dist/components/json-schema-form-properties.d.ts.map +1 -0
  165. package/dist/components/json-schema-form-properties.fixtures.d.ts +157 -0
  166. package/dist/components/json-schema-form-properties.fixtures.d.ts.map +1 -0
  167. package/dist/components/json-schema-form-properties.js +305 -0
  168. package/dist/components/json-schema-form-properties.js.map +1 -0
  169. package/dist/components/json-schema-form-property-actions-context.cjs +6 -0
  170. package/dist/components/json-schema-form-property-actions-context.cjs.map +1 -0
  171. package/dist/components/json-schema-form-property-actions-context.d.ts +2 -0
  172. package/dist/components/json-schema-form-property-actions-context.d.ts.map +1 -0
  173. package/dist/components/json-schema-form-property-actions-context.js +6 -0
  174. package/dist/components/json-schema-form-property-actions-context.js.map +1 -0
  175. package/dist/components/json-schema-form-property-collection.cjs +31 -0
  176. package/dist/components/json-schema-form-property-collection.cjs.map +1 -0
  177. package/dist/components/json-schema-form-property-collection.d.ts +6 -0
  178. package/dist/components/json-schema-form-property-collection.d.ts.map +1 -0
  179. package/dist/components/json-schema-form-property-collection.js +31 -0
  180. package/dist/components/json-schema-form-property-collection.js.map +1 -0
  181. package/dist/components/json-schema-form-property-draft.cjs +45 -0
  182. package/dist/components/json-schema-form-property-draft.cjs.map +1 -0
  183. package/dist/components/json-schema-form-property-draft.d.ts +8 -0
  184. package/dist/components/json-schema-form-property-draft.d.ts.map +1 -0
  185. package/dist/components/json-schema-form-property-draft.js +45 -0
  186. package/dist/components/json-schema-form-property-draft.js.map +1 -0
  187. package/dist/components/json-schema-form-property-preview.cjs +68 -0
  188. package/dist/components/json-schema-form-property-preview.cjs.map +1 -0
  189. package/dist/components/json-schema-form-property-preview.d.ts +7 -0
  190. package/dist/components/json-schema-form-property-preview.d.ts.map +1 -0
  191. package/dist/components/json-schema-form-property-preview.js +68 -0
  192. package/dist/components/json-schema-form-property-preview.js.map +1 -0
  193. package/dist/components/json-schema-form-property-selection.cjs +89 -0
  194. package/dist/components/json-schema-form-property-selection.cjs.map +1 -0
  195. package/dist/components/json-schema-form-property-selection.d.ts +6 -0
  196. package/dist/components/json-schema-form-property-selection.d.ts.map +1 -0
  197. package/dist/components/json-schema-form-property-selection.js +89 -0
  198. package/dist/components/json-schema-form-property-selection.js.map +1 -0
  199. package/dist/components/json-schema-form-render.cjs +41 -4
  200. package/dist/components/json-schema-form-render.cjs.map +1 -1
  201. package/dist/components/json-schema-form-render.d.ts +1 -1
  202. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  203. package/dist/components/json-schema-form-render.js +42 -5
  204. package/dist/components/json-schema-form-render.js.map +1 -1
  205. package/dist/components/json-schema-form-resolve.cjs +2 -0
  206. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  207. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  208. package/dist/components/json-schema-form-resolve.js +2 -0
  209. package/dist/components/json-schema-form-resolve.js.map +1 -1
  210. package/dist/components/json-schema-form-runtime-types.d.ts +222 -0
  211. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -0
  212. package/dist/components/json-schema-form-table-array.cjs +82 -51
  213. package/dist/components/json-schema-form-table-array.cjs.map +1 -1
  214. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  215. package/dist/components/json-schema-form-table-array.js +84 -53
  216. package/dist/components/json-schema-form-table-array.js.map +1 -1
  217. package/dist/components/json-schema-form-template-menu.d.ts +1 -1
  218. package/dist/components/json-schema-form-template.d.ts +1 -1
  219. package/dist/components/json-schema-form-types.d.ts +7 -179
  220. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  221. package/dist/components/json-schema-form-utils.cjs +10 -9
  222. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  223. package/dist/components/json-schema-form-utils.d.ts +11 -1
  224. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  225. package/dist/components/json-schema-form-utils.js +10 -9
  226. package/dist/components/json-schema-form-utils.js.map +1 -1
  227. package/dist/components/loading.d.ts +4 -4
  228. package/dist/components/mdx-editor-callout.d.ts +1 -1
  229. package/dist/components/mdx-editor-options.d.ts +1 -1
  230. package/dist/components/select.d.ts +3 -3
  231. package/dist/components/theme-switcher.d.ts +1 -1
  232. package/dist/components/use-list-menu-selection.d.ts +1 -1
  233. package/dist/components/useComboboxLayout.d.ts +1 -1
  234. package/dist/components/workload-picker-utils.d.ts +1 -1
  235. package/dist/data/Avatar.d.ts +1 -1
  236. package/dist/data/AvatarBadge.d.ts +1 -1
  237. package/dist/data/Badge.d.ts +1 -1
  238. package/dist/data/Callout.d.ts +1 -1
  239. package/dist/data/DataTable.cjs +575 -435
  240. package/dist/data/DataTable.cjs.map +1 -1
  241. package/dist/data/DataTable.d.ts +21 -13
  242. package/dist/data/DataTable.d.ts.map +1 -1
  243. package/dist/data/DataTable.grouping.d.ts +1 -1
  244. package/dist/data/DataTable.js +575 -435
  245. package/dist/data/DataTable.js.map +1 -1
  246. package/dist/data/ExecutionTree.d.ts +1 -1
  247. package/dist/data/FilterPill.d.ts +1 -1
  248. package/dist/data/FixtureEditor/RawFenceEditor.d.ts +1 -1
  249. package/dist/data/FixtureEditor/types.d.ts +1 -1
  250. package/dist/data/Gauge.d.ts +1 -1
  251. package/dist/data/GaugeHoverCard.d.ts +1 -1
  252. package/dist/data/Icon.d.ts +1 -1
  253. package/dist/data/KeyValueList.d.ts +1 -1
  254. package/dist/data/MarkdownEditor.d.ts +1 -1
  255. package/dist/data/MatrixTable.d.ts +1 -1
  256. package/dist/data/ObjectGraph.d.ts +1 -1
  257. package/dist/data/ProgressBars.d.ts +1 -1
  258. package/dist/data/Properties.cjs +86 -35
  259. package/dist/data/Properties.cjs.map +1 -1
  260. package/dist/data/Properties.d.ts +2 -2
  261. package/dist/data/Properties.d.ts.map +1 -1
  262. package/dist/data/Properties.js +87 -36
  263. package/dist/data/Properties.js.map +1 -1
  264. package/dist/data/RadialGauge.d.ts +1 -1
  265. package/dist/data/SchemaViewer.d.ts +1 -1
  266. package/dist/data/SortableHeader.d.ts +1 -1
  267. package/dist/data/StatStrip.d.ts +1 -1
  268. package/dist/data/StatusBreakdown.d.ts +1 -1
  269. package/dist/data/TabButton.d.ts +1 -1
  270. package/dist/data/TaskManager.cjs +9 -17
  271. package/dist/data/TaskManager.cjs.map +1 -1
  272. package/dist/data/TaskManager.d.ts.map +1 -1
  273. package/dist/data/TaskManager.js +9 -17
  274. package/dist/data/TaskManager.js.map +1 -1
  275. package/dist/data/TaskManagerButton.cjs +17 -34
  276. package/dist/data/TaskManagerButton.cjs.map +1 -1
  277. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  278. package/dist/data/TaskManagerButton.js +18 -35
  279. package/dist/data/TaskManagerButton.js.map +1 -1
  280. package/dist/data/TaskProcessDetails.cjs +5 -26
  281. package/dist/data/TaskProcessDetails.cjs.map +1 -1
  282. package/dist/data/TaskProcessDetails.d.ts +2 -1
  283. package/dist/data/TaskProcessDetails.d.ts.map +1 -1
  284. package/dist/data/TaskProcessDetails.js +5 -26
  285. package/dist/data/TaskProcessDetails.js.map +1 -1
  286. package/dist/data/TaskProgress.cjs +24 -15
  287. package/dist/data/TaskProgress.cjs.map +1 -1
  288. package/dist/data/TaskProgress.d.ts +2 -1
  289. package/dist/data/TaskProgress.d.ts.map +1 -1
  290. package/dist/data/TaskProgress.js +24 -15
  291. package/dist/data/TaskProgress.js.map +1 -1
  292. package/dist/data/TaskResourceReadings.cjs +42 -0
  293. package/dist/data/TaskResourceReadings.cjs.map +1 -0
  294. package/dist/data/TaskResourceReadings.d.ts +6 -0
  295. package/dist/data/TaskResourceReadings.d.ts.map +1 -0
  296. package/dist/data/TaskResourceReadings.js +42 -0
  297. package/dist/data/TaskResourceReadings.js.map +1 -0
  298. package/dist/data/TaskSnapshot.cjs.map +1 -1
  299. package/dist/data/TaskSnapshot.d.ts +14 -1
  300. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  301. package/dist/data/TaskSnapshot.js.map +1 -1
  302. package/dist/data/Timeline.d.ts +1 -1
  303. package/dist/data/Tree.d.ts +1 -1
  304. package/dist/data/TreeGroupHeader.d.ts +1 -1
  305. package/dist/data/TreeNode.d.ts +1 -1
  306. package/dist/data/Version.d.ts +3 -3
  307. package/dist/data/ai/ChatWindow.cjs +22 -12
  308. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  309. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  310. package/dist/data/ai/ChatWindow.js +22 -12
  311. package/dist/data/ai/ChatWindow.js.map +1 -1
  312. package/dist/data/ai/ChatWindow.test-utils.d.ts +4 -2
  313. package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -1
  314. package/dist/data/ai/ChatWindow.types.d.ts +1 -1
  315. package/dist/data/ai/ChatWindowManager.cjs +2 -0
  316. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  317. package/dist/data/ai/ChatWindowManager.d.ts +1 -1
  318. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
  319. package/dist/data/ai/ChatWindowManager.js +2 -0
  320. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  321. package/dist/data/ai/PolicyTree.d.ts +1 -1
  322. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +1 -1
  323. package/dist/data/ai/PromptCatalog/types.d.ts +1 -1
  324. package/dist/data/ai/PromptRunEditor/index.cjs +4 -0
  325. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  326. package/dist/data/ai/PromptRunEditor/index.d.ts +5 -2
  327. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  328. package/dist/data/ai/PromptRunEditor/index.js +4 -0
  329. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  330. package/dist/data/ai/SessionChatComposer.d.ts +1 -1
  331. package/dist/data/ai/SessionInspector.approvals.cjs +147 -0
  332. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -0
  333. package/dist/data/ai/SessionInspector.approvals.d.ts +21 -0
  334. package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -0
  335. package/dist/data/ai/SessionInspector.approvals.js +147 -0
  336. package/dist/data/ai/SessionInspector.approvals.js.map +1 -0
  337. package/dist/data/ai/SessionInspector.cjs +21 -8
  338. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  339. package/dist/data/ai/SessionInspector.d.ts +6 -2
  340. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  341. package/dist/data/ai/SessionInspector.hierarchy.d.ts +1 -1
  342. package/dist/data/ai/SessionInspector.js +21 -8
  343. package/dist/data/ai/SessionInspector.js.map +1 -1
  344. package/dist/data/ai/SessionInspector.panel-parts.cjs +47 -0
  345. package/dist/data/ai/SessionInspector.panel-parts.cjs.map +1 -0
  346. package/dist/data/ai/SessionInspector.panel-parts.d.ts +20 -0
  347. package/dist/data/ai/SessionInspector.panel-parts.d.ts.map +1 -0
  348. package/dist/data/ai/SessionInspector.panel-parts.js +47 -0
  349. package/dist/data/ai/SessionInspector.panel-parts.js.map +1 -0
  350. package/dist/data/ai/SessionInspector.panels.cjs +40 -99
  351. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  352. package/dist/data/ai/SessionInspector.panels.d.ts +3 -1
  353. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  354. package/dist/data/ai/SessionInspector.panels.js +12 -71
  355. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  356. package/dist/data/ai/SessionViewer.d.ts +1 -1
  357. package/dist/data/ai/SessionViewer.rows.d.ts +1 -1
  358. package/dist/data/ai/SessionViewer.tool-details.d.ts +1 -1
  359. package/dist/data/ai/SessionViewer.unified.d.ts +23 -0
  360. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  361. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +1 -1
  362. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +1 -1
  363. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +1 -1
  364. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +3 -1
  365. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
  366. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +3 -1
  367. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  368. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +3 -1
  369. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
  370. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +1 -1
  371. package/dist/data/ai/SpecRuntimeEditor/index.cjs +3 -1
  372. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  373. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +5 -2
  374. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  375. package/dist/data/ai/SpecRuntimeEditor/index.js +3 -1
  376. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  377. package/dist/data/ai/chat-window-context.cjs +1 -0
  378. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  379. package/dist/data/ai/chat-window-context.d.ts +13 -5
  380. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  381. package/dist/data/ai/chat-window-context.js +1 -0
  382. package/dist/data/ai/chat-window-context.js.map +1 -1
  383. package/dist/data/ai/index.d.ts +2 -1
  384. package/dist/data/ai/index.d.ts.map +1 -1
  385. package/dist/data/ai/use-session-scroll.d.ts +1 -1
  386. package/dist/data/badge-variants.d.ts +2 -2
  387. package/dist/data/cache-browser/adapter.d.ts +1 -1
  388. package/dist/data/cells/CellFilterActions.d.ts +1 -1
  389. package/dist/data/cells/EntityCell.d.ts +1 -1
  390. package/dist/data/cells/tag-utils.d.ts +1 -1
  391. package/dist/data/chat/Chat.cjs +42 -46
  392. package/dist/data/chat/Chat.cjs.map +1 -1
  393. package/dist/data/chat/Chat.d.ts +16 -5
  394. package/dist/data/chat/Chat.d.ts.map +1 -1
  395. package/dist/data/chat/Chat.js +43 -47
  396. package/dist/data/chat/Chat.js.map +1 -1
  397. package/dist/data/chat/ModelSelector.d.ts +1 -1
  398. package/dist/data/chat/PromptInput.cjs +13 -0
  399. package/dist/data/chat/PromptInput.cjs.map +1 -1
  400. package/dist/data/chat/PromptInput.d.ts +8 -2
  401. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  402. package/dist/data/chat/PromptInput.js +14 -1
  403. package/dist/data/chat/PromptInput.js.map +1 -1
  404. package/dist/data/chat/tool-render/ToolArgs.d.ts +1 -1
  405. package/dist/data/chat/tool-render/ToolParams.d.ts +1 -1
  406. package/dist/data/chat/tool-render/ToolValue.d.ts +1 -1
  407. package/dist/data/chat/tool-render/adapter.d.ts +1 -1
  408. package/dist/data/chat/tool-render/context.d.ts +1 -1
  409. package/dist/data/chat/tool-render/defaults.d.ts +1 -1
  410. package/dist/data/chat/tool-render/known-tool-views.d.ts +1 -1
  411. package/dist/data/chat/tool-render/summary.d.ts +1 -1
  412. package/dist/data/chat/types.d.ts +1 -1
  413. package/dist/data/clicky-export/useClickyExport.d.ts +1 -1
  414. package/dist/data/data-table-server-filters.d.ts +1 -1
  415. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +1 -1
  416. package/dist/data/diagnostics/ErrorDetails.d.ts +1 -1
  417. package/dist/data/diagnostics/StackFrameRow.d.ts +1 -1
  418. package/dist/data/git/GitChangeList.d.ts +1 -1
  419. package/dist/data/icon-fallback.d.ts +1 -1
  420. package/dist/data/properties-context.cjs +6 -0
  421. package/dist/data/properties-context.cjs.map +1 -0
  422. package/dist/data/properties-context.d.ts +7 -0
  423. package/dist/data/properties-context.d.ts.map +1 -0
  424. package/dist/data/properties-context.js +6 -0
  425. package/dist/data/properties-context.js.map +1 -0
  426. package/dist/data/query-browser/QueryBrowser.types.d.ts +1 -1
  427. package/dist/data/runtime/RuntimeBar.cjs +7 -3
  428. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  429. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  430. package/dist/data/runtime/RuntimeBar.js +7 -3
  431. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  432. package/dist/data/task-copy.cjs +1 -1
  433. package/dist/data/task-copy.cjs.map +1 -1
  434. package/dist/data/task-copy.js +1 -1
  435. package/dist/data/task-copy.js.map +1 -1
  436. package/dist/data/task-resource-summary.cjs +30 -0
  437. package/dist/data/task-resource-summary.cjs.map +1 -0
  438. package/dist/data/task-resource-summary.d.ts +15 -0
  439. package/dist/data/task-resource-summary.d.ts.map +1 -0
  440. package/dist/data/task-resource-summary.js +30 -0
  441. package/dist/data/task-resource-summary.js.map +1 -0
  442. package/dist/data/task-status.cjs +8 -2
  443. package/dist/data/task-status.cjs.map +1 -1
  444. package/dist/data/task-status.d.ts +3 -0
  445. package/dist/data/task-status.d.ts.map +1 -1
  446. package/dist/data/task-status.js +8 -2
  447. package/dist/data/task-status.js.map +1 -1
  448. package/dist/data/task-work-progress.cjs +24 -0
  449. package/dist/data/task-work-progress.cjs.map +1 -0
  450. package/dist/data/task-work-progress.d.ts +21 -0
  451. package/dist/data/task-work-progress.d.ts.map +1 -0
  452. package/dist/data/task-work-progress.js +24 -0
  453. package/dist/data/task-work-progress.js.map +1 -0
  454. package/dist/data/test-runner/TestRunner.d.ts +1 -1
  455. package/dist/data/test-runner/adapter.d.ts +1 -1
  456. package/dist/data/test-runner/context.d.ts +1 -1
  457. package/dist/data/use-data-table-virtual.cjs +73 -0
  458. package/dist/data/use-data-table-virtual.cjs.map +1 -0
  459. package/dist/data/use-data-table-virtual.d.ts +40 -0
  460. package/dist/data/use-data-table-virtual.d.ts.map +1 -0
  461. package/dist/data/use-data-table-virtual.js +73 -0
  462. package/dist/data/use-data-table-virtual.js.map +1 -0
  463. package/dist/data/verification/VerificationResults.d.ts +1 -1
  464. package/dist/data/version-info.cjs +3 -3
  465. package/dist/data/version-info.js +3 -3
  466. package/dist/expressions/lang/attributes.cjs +56 -0
  467. package/dist/expressions/lang/attributes.cjs.map +1 -0
  468. package/dist/expressions/lang/attributes.d.ts +22 -0
  469. package/dist/expressions/lang/attributes.d.ts.map +1 -0
  470. package/dist/expressions/lang/attributes.js +56 -0
  471. package/dist/expressions/lang/attributes.js.map +1 -0
  472. package/dist/expressions/lang/completion.cjs +164 -0
  473. package/dist/expressions/lang/completion.cjs.map +1 -0
  474. package/dist/expressions/lang/completion.d.ts +29 -0
  475. package/dist/expressions/lang/completion.d.ts.map +1 -0
  476. package/dist/expressions/lang/completion.js +164 -0
  477. package/dist/expressions/lang/completion.js.map +1 -0
  478. package/dist/expressions/lang/environment.cjs +115 -0
  479. package/dist/expressions/lang/environment.cjs.map +1 -0
  480. package/dist/expressions/lang/environment.d.ts +54 -0
  481. package/dist/expressions/lang/environment.d.ts.map +1 -0
  482. package/dist/expressions/lang/environment.js +115 -0
  483. package/dist/expressions/lang/environment.js.map +1 -0
  484. package/dist/expressions/lang/generated/conformance.json.d.ts +4962 -0
  485. package/dist/expressions/lang/generated/index.cjs +18 -0
  486. package/dist/expressions/lang/generated/index.cjs.map +1 -0
  487. package/dist/expressions/lang/generated/index.d.ts +9 -0
  488. package/dist/expressions/lang/generated/index.d.ts.map +1 -0
  489. package/dist/expressions/lang/generated/index.js +18 -0
  490. package/dist/expressions/lang/generated/index.js.map +1 -0
  491. package/dist/expressions/lang/generated/languages.json.cjs +18 -0
  492. package/dist/expressions/lang/generated/languages.json.cjs.map +1 -0
  493. package/dist/expressions/lang/generated/languages.json.d.ts +2305 -0
  494. package/dist/expressions/lang/generated/languages.json.js +18 -0
  495. package/dist/expressions/lang/generated/languages.json.js.map +1 -0
  496. package/dist/expressions/lang/generated/spec.json.cjs +12 -0
  497. package/dist/expressions/lang/generated/spec.json.cjs.map +1 -0
  498. package/dist/expressions/lang/generated/spec.json.d.ts +6260 -0
  499. package/dist/expressions/lang/generated/spec.json.js +12 -0
  500. package/dist/expressions/lang/generated/spec.json.js.map +1 -0
  501. package/dist/expressions/lang/hover.cjs +106 -0
  502. package/dist/expressions/lang/hover.cjs.map +1 -0
  503. package/dist/expressions/lang/hover.d.ts +54 -0
  504. package/dist/expressions/lang/hover.d.ts.map +1 -0
  505. package/dist/expressions/lang/hover.js +106 -0
  506. package/dist/expressions/lang/hover.js.map +1 -0
  507. package/dist/expressions/lang/index.cjs +87 -0
  508. package/dist/expressions/lang/index.cjs.map +1 -0
  509. package/dist/expressions/lang/index.d.ts +65 -0
  510. package/dist/expressions/lang/index.d.ts.map +1 -0
  511. package/dist/expressions/lang/index.js +90 -0
  512. package/dist/expressions/lang/index.js.map +1 -0
  513. package/dist/expressions/lang/merge.cjs +52 -0
  514. package/dist/expressions/lang/merge.cjs.map +1 -0
  515. package/dist/expressions/lang/merge.d.ts +12 -0
  516. package/dist/expressions/lang/merge.d.ts.map +1 -0
  517. package/dist/expressions/lang/merge.js +52 -0
  518. package/dist/expressions/lang/merge.js.map +1 -0
  519. package/dist/expressions/lang/prefix.cjs +91 -0
  520. package/dist/expressions/lang/prefix.cjs.map +1 -0
  521. package/dist/expressions/lang/prefix.d.ts +36 -0
  522. package/dist/expressions/lang/prefix.d.ts.map +1 -0
  523. package/dist/expressions/lang/prefix.js +91 -0
  524. package/dist/expressions/lang/prefix.js.map +1 -0
  525. package/dist/expressions/lang/spec.d.ts +13 -0
  526. package/dist/expressions/lang/spec.d.ts.map +1 -0
  527. package/dist/expressions/lang/theme.cjs +97 -0
  528. package/dist/expressions/lang/theme.cjs.map +1 -0
  529. package/dist/expressions/lang/theme.d.ts +6 -0
  530. package/dist/expressions/lang/theme.d.ts.map +1 -0
  531. package/dist/expressions/lang/theme.js +97 -0
  532. package/dist/expressions/lang/theme.js.map +1 -0
  533. package/dist/expressions/lang/types.d.ts +81 -0
  534. package/dist/expressions/lang/types.d.ts.map +1 -0
  535. package/dist/expressions/playground/ExpressionPlayground.cjs +308 -0
  536. package/dist/expressions/playground/ExpressionPlayground.cjs.map +1 -0
  537. package/dist/expressions/playground/ExpressionPlayground.d.ts +42 -0
  538. package/dist/expressions/playground/ExpressionPlayground.d.ts.map +1 -0
  539. package/dist/expressions/playground/ExpressionPlayground.js +291 -0
  540. package/dist/expressions/playground/ExpressionPlayground.js.map +1 -0
  541. package/dist/expressions/playground/RunControls.cjs +51 -0
  542. package/dist/expressions/playground/RunControls.cjs.map +1 -0
  543. package/dist/expressions/playground/RunControls.d.ts +7 -0
  544. package/dist/expressions/playground/RunControls.d.ts.map +1 -0
  545. package/dist/expressions/playground/RunControls.js +51 -0
  546. package/dist/expressions/playground/RunControls.js.map +1 -0
  547. package/dist/expressions/playground/VerticalSplit.cjs +109 -0
  548. package/dist/expressions/playground/VerticalSplit.cjs.map +1 -0
  549. package/dist/expressions/playground/VerticalSplit.d.ts +23 -0
  550. package/dist/expressions/playground/VerticalSplit.d.ts.map +1 -0
  551. package/dist/expressions/playground/VerticalSplit.js +109 -0
  552. package/dist/expressions/playground/VerticalSplit.js.map +1 -0
  553. package/dist/expressions/playground/api.cjs +49 -0
  554. package/dist/expressions/playground/api.cjs.map +1 -0
  555. package/dist/expressions/playground/api.d.ts +53 -0
  556. package/dist/expressions/playground/api.d.ts.map +1 -0
  557. package/dist/expressions/playground/api.js +49 -0
  558. package/dist/expressions/playground/api.js.map +1 -0
  559. package/dist/expressions/playground/languages.cjs +88 -0
  560. package/dist/expressions/playground/languages.cjs.map +1 -0
  561. package/dist/expressions/playground/languages.d.ts +43 -0
  562. package/dist/expressions/playground/languages.d.ts.map +1 -0
  563. package/dist/expressions/playground/languages.js +88 -0
  564. package/dist/expressions/playground/languages.js.map +1 -0
  565. package/dist/expressions/playground/panels/GraphPanel.cjs +72 -0
  566. package/dist/expressions/playground/panels/GraphPanel.cjs.map +1 -0
  567. package/dist/expressions/playground/panels/GraphPanel.d.ts +19 -0
  568. package/dist/expressions/playground/panels/GraphPanel.d.ts.map +1 -0
  569. package/dist/expressions/playground/panels/GraphPanel.js +72 -0
  570. package/dist/expressions/playground/panels/GraphPanel.js.map +1 -0
  571. package/dist/expressions/playground/panels/ResultPanel.cjs +82 -0
  572. package/dist/expressions/playground/panels/ResultPanel.cjs.map +1 -0
  573. package/dist/expressions/playground/panels/ResultPanel.d.ts +11 -0
  574. package/dist/expressions/playground/panels/ResultPanel.d.ts.map +1 -0
  575. package/dist/expressions/playground/panels/ResultPanel.js +82 -0
  576. package/dist/expressions/playground/panels/ResultPanel.js.map +1 -0
  577. package/dist/expressions/playground/panels/SpecPanel.cjs +76 -0
  578. package/dist/expressions/playground/panels/SpecPanel.cjs.map +1 -0
  579. package/dist/expressions/playground/panels/SpecPanel.d.ts +18 -0
  580. package/dist/expressions/playground/panels/SpecPanel.d.ts.map +1 -0
  581. package/dist/expressions/playground/panels/SpecPanel.js +76 -0
  582. package/dist/expressions/playground/panels/SpecPanel.js.map +1 -0
  583. package/dist/expressions/playground/panels/TokensPanel.cjs +89 -0
  584. package/dist/expressions/playground/panels/TokensPanel.cjs.map +1 -0
  585. package/dist/expressions/playground/panels/TokensPanel.d.ts +15 -0
  586. package/dist/expressions/playground/panels/TokensPanel.d.ts.map +1 -0
  587. package/dist/expressions/playground/panels/TokensPanel.js +72 -0
  588. package/dist/expressions/playground/panels/TokensPanel.js.map +1 -0
  589. package/dist/expressions/playground/panels/graphNodes.cjs +35 -0
  590. package/dist/expressions/playground/panels/graphNodes.cjs.map +1 -0
  591. package/dist/expressions/playground/panels/graphNodes.d.ts +19 -0
  592. package/dist/expressions/playground/panels/graphNodes.d.ts.map +1 -0
  593. package/dist/expressions/playground/panels/graphNodes.js +35 -0
  594. package/dist/expressions/playground/panels/graphNodes.js.map +1 -0
  595. package/dist/expressions/playground/runAction.cjs +12 -0
  596. package/dist/expressions/playground/runAction.cjs.map +1 -0
  597. package/dist/expressions/playground/runAction.d.ts +15 -0
  598. package/dist/expressions/playground/runAction.d.ts.map +1 -0
  599. package/dist/expressions/playground/runAction.js +12 -0
  600. package/dist/expressions/playground/runAction.js.map +1 -0
  601. package/dist/expressions/playground/runShortcut.cjs +9 -0
  602. package/dist/expressions/playground/runShortcut.cjs.map +1 -0
  603. package/dist/expressions/playground/runShortcut.d.ts +2 -0
  604. package/dist/expressions/playground/runShortcut.d.ts.map +1 -0
  605. package/dist/expressions/playground/runShortcut.js +9 -0
  606. package/dist/expressions/playground/runShortcut.js.map +1 -0
  607. package/dist/expressions/playground/useEditorTheme.cjs +40 -0
  608. package/dist/expressions/playground/useEditorTheme.cjs.map +1 -0
  609. package/dist/expressions/playground/useEditorTheme.d.ts +16 -0
  610. package/dist/expressions/playground/useEditorTheme.d.ts.map +1 -0
  611. package/dist/expressions/playground/useEditorTheme.js +23 -0
  612. package/dist/expressions/playground/useEditorTheme.js.map +1 -0
  613. package/dist/expressions/playground/useEvaluator.cjs +72 -0
  614. package/dist/expressions/playground/useEvaluator.cjs.map +1 -0
  615. package/dist/expressions/playground/useEvaluator.d.ts +25 -0
  616. package/dist/expressions/playground/useEvaluator.d.ts.map +1 -0
  617. package/dist/expressions/playground/useEvaluator.js +72 -0
  618. package/dist/expressions/playground/useEvaluator.js.map +1 -0
  619. package/dist/expressions/playground/useParsedInput.cjs +22 -0
  620. package/dist/expressions/playground/useParsedInput.cjs.map +1 -0
  621. package/dist/expressions/playground/useParsedInput.d.ts +20 -0
  622. package/dist/expressions/playground/useParsedInput.d.ts.map +1 -0
  623. package/dist/expressions/playground/useParsedInput.js +22 -0
  624. package/dist/expressions/playground/useParsedInput.js.map +1 -0
  625. package/dist/expressions/playground/verticalSplitModel.cjs +11 -0
  626. package/dist/expressions/playground/verticalSplitModel.cjs.map +1 -0
  627. package/dist/expressions/playground/verticalSplitModel.d.ts +3 -0
  628. package/dist/expressions/playground/verticalSplitModel.d.ts.map +1 -0
  629. package/dist/expressions/playground/verticalSplitModel.js +11 -0
  630. package/dist/expressions/playground/verticalSplitModel.js.map +1 -0
  631. package/dist/expressions/playground.cjs +18 -0
  632. package/dist/expressions/playground.cjs.map +1 -0
  633. package/dist/expressions/playground.d.ts +18 -0
  634. package/dist/expressions/playground.d.ts.map +1 -0
  635. package/dist/expressions/playground.js +18 -0
  636. package/dist/expressions/playground.js.map +1 -0
  637. package/dist/expressions.cjs +28 -0
  638. package/dist/expressions.cjs.map +1 -0
  639. package/dist/expressions.d.ts +10 -0
  640. package/dist/expressions.d.ts.map +1 -0
  641. package/dist/expressions.js +28 -0
  642. package/dist/expressions.js.map +1 -0
  643. package/dist/hooks/density-provider.d.ts +1 -1
  644. package/dist/hooks/theme-provider.d.ts +1 -1
  645. package/dist/hooks/use-density.d.ts +1 -1
  646. package/dist/hooks/use-resource-clock.cjs +14 -0
  647. package/dist/hooks/use-resource-clock.cjs.map +1 -0
  648. package/dist/hooks/use-resource-clock.d.ts +2 -0
  649. package/dist/hooks/use-resource-clock.d.ts.map +1 -0
  650. package/dist/hooks/use-resource-clock.js +14 -0
  651. package/dist/hooks/use-resource-clock.js.map +1 -0
  652. package/dist/hooks/use-task-run.cjs +12 -3
  653. package/dist/hooks/use-task-run.cjs.map +1 -1
  654. package/dist/hooks/use-task-run.d.ts.map +1 -1
  655. package/dist/hooks/use-task-run.js +12 -3
  656. package/dist/hooks/use-task-run.js.map +1 -1
  657. package/dist/hooks/use-theme.d.ts +1 -1
  658. package/dist/icons/registry.d.ts +1 -1
  659. package/dist/icons/types.d.ts +1 -1
  660. package/dist/index.cjs +4 -3
  661. package/dist/index.cjs.map +1 -1
  662. package/dist/index.js +2 -1
  663. package/dist/index.js.map +1 -1
  664. package/dist/layout/AppShell.d.ts +1 -1
  665. package/dist/layout/AppShell.nav.drag.d.ts +1 -1
  666. package/dist/layout/AppSidebar.d.ts +1 -1
  667. package/dist/layout/Panel.d.ts +1 -1
  668. package/dist/layout/PanelFrame.d.ts +1 -1
  669. package/dist/layout/Section.d.ts +1 -1
  670. package/dist/layout/SplitPane.d.ts +1 -1
  671. package/dist/layout/Tabs.d.ts +1 -1
  672. package/dist/layout/Workspace.d.ts +1 -1
  673. package/dist/layout/Workspace.model.d.ts +1 -1
  674. package/dist/lib/combobox-values.d.ts +1 -1
  675. package/dist/lib/comment-stage.cjs +31 -0
  676. package/dist/lib/comment-stage.cjs.map +1 -0
  677. package/dist/lib/comment-stage.d.ts +8 -0
  678. package/dist/lib/comment-stage.d.ts.map +1 -0
  679. package/dist/lib/comment-stage.js +31 -0
  680. package/dist/lib/comment-stage.js.map +1 -0
  681. package/dist/monaco/MonacoEditor.cjs +3 -3
  682. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  683. package/dist/monaco/MonacoEditor.js +2 -2
  684. package/dist/monaco/MonacoEditor.js.map +1 -1
  685. package/dist/monaco/types.d.ts +1 -1
  686. package/dist/monaco/use-monaco-worker.d.ts +1 -1
  687. package/dist/overlay/CellActions.d.ts +1 -1
  688. package/dist/overlay/CommandPalette.d.ts +2 -2
  689. package/dist/overlay/CommandPalette.model.d.ts +1 -1
  690. package/dist/overlay/CommandPaletteList.d.ts +1 -1
  691. package/dist/overlay/DropdownMenu.d.ts +1 -1
  692. package/dist/overlay/HoverCard.d.ts +1 -1
  693. package/dist/overlay/Modal.d.ts +2 -2
  694. package/dist/overlay/Toast.d.ts +1 -1
  695. package/dist/overlay/TourCard.d.ts +1 -1
  696. package/dist/overlay/TourProvider.d.ts +1 -1
  697. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  698. package/dist/overlay/toast-context.d.ts +2 -2
  699. package/dist/overlay/tour-context.d.ts +1 -1
  700. package/dist/overlay/tour-types.d.ts +1 -1
  701. package/dist/profiles/connections/connectionBrowserModel.d.ts +1 -1
  702. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +1 -1
  703. package/dist/profiles/editor/profileBuilder.d.ts +1 -1
  704. package/dist/profiles/elasticsearch/esParamOperandExtension.d.ts +1 -1
  705. package/dist/profiles/fields/profileFieldControls.d.ts +1 -1
  706. package/dist/profiles/fields/profileFieldIcons.d.ts +1 -1
  707. package/dist/profiles/fields/profileFieldState.d.ts +1 -1
  708. package/dist/profiles/query/jsonPathSample.d.ts +1 -1
  709. package/dist/profiles/query/jsonPathSampleRow.d.ts +1 -1
  710. package/dist/profiles/query/prometheusResults.d.ts +2 -2
  711. package/dist/rpc/EndpointList.d.ts +1 -1
  712. package/dist/rpc/EntityExplorerApp.d.ts +1 -1
  713. package/dist/rpc/OperationCatalog.d.ts +1 -1
  714. package/dist/rpc/OperationEntityContextPicker.d.ts +1 -1
  715. package/dist/rpc/OperationEntityPage.d.ts +1 -1
  716. package/dist/rpc/OperationResultView.d.ts +1 -1
  717. package/dist/rpc/RouterProvider.d.ts +1 -1
  718. package/dist/rpc/SchemaActionForm.d.ts +1 -1
  719. package/dist/rpc/formMetadata.d.ts +1 -1
  720. package/dist/rpc/router.d.ts +1 -1
  721. package/dist/rpc/rpc-story.fixtures.d.ts +1 -1
  722. package/dist/styles.css +1 -1
  723. package/dist/utils.cjs +4 -0
  724. package/dist/utils.cjs.map +1 -1
  725. package/dist/utils.d.ts +1 -0
  726. package/dist/utils.d.ts.map +1 -1
  727. package/dist/utils.js +4 -0
  728. package/dist/utils.js.map +1 -1
  729. package/package.json +21 -2
@@ -0,0 +1,291 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, useCallback, useMemo, useRef, useEffect } from "react";
3
+ import { Combobox } from "../../components/Combobox.js";
4
+ import { Tabs } from "../../layout/Tabs.js";
5
+ import { MonacoEditor } from "../../monaco/MonacoEditor.js";
6
+ import * as monacoEditor from "monaco-editor";
7
+ import { registerGomplateLanguages } from "../lang/index.js";
8
+ import { DEFAULT_API_BASE, fetchSpec, fetchExamples } from "./api.js";
9
+ import { LANGUAGES, languageById } from "./languages.js";
10
+ import { GraphPanel } from "./panels/GraphPanel.js";
11
+ import { ResultPanel } from "./panels/ResultPanel.js";
12
+ import { SpecPanel } from "./panels/SpecPanel.js";
13
+ import { TokensPanel } from "./panels/TokensPanel.js";
14
+ import { RunControls } from "./RunControls.js";
15
+ import { registerRunAction } from "./runAction.js";
16
+ import { useEditorTheme } from "./useEditorTheme.js";
17
+ import { useEvaluator } from "./useEvaluator.js";
18
+ import { useParsedInput } from "./useParsedInput.js";
19
+ import { VerticalSplit } from "./VerticalSplit.js";
20
+ import { rowsToPaneHeight } from "./verticalSplitModel.js";
21
+ import { mergeSpec } from "../lang/merge.js";
22
+ import { spec } from "../lang/generated/index.js";
23
+ const SOURCE_MODEL_PATH = "inmemory://expressions/source";
24
+ const INPUT_MODEL_PATH = "inmemory://expressions/input.yaml";
25
+ const EMPTY_STATE = { language: "cel", source: "", input: "" };
26
+ function ExpressionPlayground({
27
+ apiBase = DEFAULT_API_BASE,
28
+ languages: offered = LANGUAGES,
29
+ examples,
30
+ value,
31
+ onChange,
32
+ defaultValue,
33
+ className
34
+ }) {
35
+ const [uncontrolled, setUncontrolled] = useState(
36
+ () => {
37
+ var _a;
38
+ return defaultValue ?? { ...EMPTY_STATE, language: ((_a = offered[0]) == null ? void 0 : _a.id) ?? "cel" };
39
+ }
40
+ );
41
+ const state = value ?? uncontrolled;
42
+ const update = useCallback(
43
+ (patch) => {
44
+ const next = { ...state, ...patch };
45
+ if (!value) setUncontrolled(next);
46
+ onChange == null ? void 0 : onChange(next);
47
+ },
48
+ [state, value, onChange]
49
+ );
50
+ const language = useMemo(
51
+ () => languageById(state.language, offered),
52
+ [state.language, offered]
53
+ );
54
+ const [outputTab, setOutputTab] = useState("result");
55
+ const evaluator = useEvaluator(apiBase, {
56
+ language: language.evalLanguage,
57
+ source: state.source,
58
+ input: state.input
59
+ });
60
+ const parsedInput = useParsedInput(state.input);
61
+ const environmentRef = useRef(void 0);
62
+ environmentRef.current = parsedInput.value;
63
+ const [served, setServed] = useState();
64
+ const servedRef = useRef(void 0);
65
+ servedRef.current = served;
66
+ const activeSpec = useMemo(() => mergeSpec(spec, served), [served]);
67
+ const [fetched, setFetched] = useState();
68
+ const available = examples ?? fetched ?? [];
69
+ const forLanguage = available.filter(
70
+ (example) => example.language === language.evalLanguage
71
+ );
72
+ const registered = useRef(null);
73
+ const registerLanguages = useCallback((monaco) => {
74
+ const current = servedRef.current;
75
+ registered.current = registerGomplateLanguages(monaco, {
76
+ environment: () => environmentRef.current,
77
+ ...current ? { spec: current } : {}
78
+ });
79
+ }, []);
80
+ useEffect(() => {
81
+ const controller = new AbortController();
82
+ void fetchSpec(apiBase, controller.signal).then((next) => {
83
+ if (!controller.signal.aborted) setServed(next);
84
+ });
85
+ return () => controller.abort();
86
+ }, [apiBase]);
87
+ useEffect(() => {
88
+ var _a;
89
+ if (served) (_a = registered.current) == null ? void 0 : _a.setSpec(served);
90
+ }, [served]);
91
+ useEffect(() => {
92
+ if (examples) return;
93
+ const controller = new AbortController();
94
+ void fetchExamples(apiBase, controller.signal).then((next) => {
95
+ if (!controller.signal.aborted && next) setFetched(next);
96
+ });
97
+ return () => controller.abort();
98
+ }, [apiBase, examples]);
99
+ useMarkers(evaluator.response);
100
+ const applyTheme = useEditorTheme();
101
+ useEffect(() => {
102
+ if (outputTab === "spec" && !language.catalogue) setOutputTab("result");
103
+ }, [language.catalogue, outputTab]);
104
+ const runRef = useRef(evaluator.run);
105
+ runRef.current = evaluator.run;
106
+ const sourceEditor = useRef(
107
+ null
108
+ );
109
+ const onEditorMount = useCallback(
110
+ (editor, monaco) => {
111
+ var _a;
112
+ applyTheme();
113
+ registerRunAction(editor, monaco, () => runRef.current());
114
+ if (((_a = editor.getModel()) == null ? void 0 : _a.uri.toString()) === SOURCE_MODEL_PATH)
115
+ sourceEditor.current = editor;
116
+ },
117
+ [applyTheme]
118
+ );
119
+ const insertExpression = useCallback((expression) => {
120
+ const editor = sourceEditor.current;
121
+ const selection = editor == null ? void 0 : editor.getSelection();
122
+ if (!editor || !selection) return;
123
+ editor.executeEdits("object-graph", [
124
+ { range: selection, text: expression, forceMoveMarkers: true }
125
+ ]);
126
+ editor.focus();
127
+ }, []);
128
+ const catalogue = language.catalogue ? activeSpec[language.catalogue].functions : [];
129
+ return /* @__PURE__ */ jsxs("div", { className: `flex h-full min-h-0 ${className ?? ""}`, children: [
130
+ /* @__PURE__ */ jsx("div", { className: "flex min-h-0 w-1/2 flex-col border-r border-border", children: /* @__PURE__ */ jsx(
131
+ VerticalSplit,
132
+ {
133
+ storageKey: "expressions:editor-split",
134
+ defaultTopHeight: rowsToPaneHeight(language.editorRows),
135
+ top: /* @__PURE__ */ jsx(
136
+ EditorPane,
137
+ {
138
+ label: "Expression",
139
+ actions: /* @__PURE__ */ jsx(RunControls, { evaluator }),
140
+ hint: forLanguage.length > 0 ? /* @__PURE__ */ jsx(
141
+ Combobox,
142
+ {
143
+ options: forLanguage.map((example) => ({
144
+ value: example.name,
145
+ label: example.name
146
+ })),
147
+ value: "",
148
+ allowCustomValue: false,
149
+ placeholder: "Load an example…",
150
+ ariaLabel: "Load an example",
151
+ className: "w-56",
152
+ onChange: (name) => {
153
+ const example = forLanguage.find(
154
+ (candidate) => candidate.name === name
155
+ );
156
+ if (example)
157
+ update({
158
+ source: example.source,
159
+ input: example.input
160
+ });
161
+ }
162
+ }
163
+ ) : void 0,
164
+ children: /* @__PURE__ */ jsx(
165
+ MonacoEditor,
166
+ {
167
+ value: state.source,
168
+ onChange: (source) => update({ source: source ?? "" }),
169
+ language: language.editorLanguage,
170
+ path: SOURCE_MODEL_PATH,
171
+ height: "100%",
172
+ beforeMount: registerLanguages,
173
+ onMount: onEditorMount
174
+ }
175
+ )
176
+ }
177
+ ),
178
+ bottom: /* @__PURE__ */ jsx(
179
+ EditorPane,
180
+ {
181
+ label: "Input",
182
+ hint: /* @__PURE__ */ jsx(
183
+ "span",
184
+ {
185
+ className: `truncate text-[11px] ${parsedInput.error ? "text-destructive" : "text-muted-foreground/70"}`,
186
+ title: parsedInput.error ?? void 0,
187
+ children: parsedInput.error ?? "YAML or JSON"
188
+ }
189
+ ),
190
+ children: /* @__PURE__ */ jsx(
191
+ MonacoEditor,
192
+ {
193
+ value: state.input,
194
+ onChange: (input) => update({ input: input ?? "" }),
195
+ language: "yaml",
196
+ path: INPUT_MODEL_PATH,
197
+ height: "100%",
198
+ onMount: onEditorMount
199
+ }
200
+ )
201
+ }
202
+ )
203
+ }
204
+ ) }),
205
+ /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 w-1/2 flex-col", children: [
206
+ /* @__PURE__ */ jsx("div", { className: "border-b border-border px-4", children: /* @__PURE__ */ jsx(
207
+ Tabs,
208
+ {
209
+ tabs: [
210
+ { id: "result", label: "Result" },
211
+ { id: "graph", label: "Object graph" },
212
+ { id: "tokens", label: "Tokens" },
213
+ ...language.catalogue ? [{ id: "spec", label: "Functions", count: catalogue.length }] : []
214
+ ],
215
+ value: outputTab,
216
+ onChange: setOutputTab
217
+ }
218
+ ) }),
219
+ /* @__PURE__ */ jsxs("div", { className: "min-h-0 flex-1", children: [
220
+ outputTab === "result" ? /* @__PURE__ */ jsx(
221
+ ResultPanel,
222
+ {
223
+ response: evaluator.response,
224
+ pending: evaluator.pending,
225
+ stale: evaluator.stale,
226
+ onRun: evaluator.run
227
+ }
228
+ ) : null,
229
+ outputTab === "graph" ? /* @__PURE__ */ jsx(
230
+ GraphPanel,
231
+ {
232
+ document: parsedInput.value,
233
+ languageId: language.editorLanguage,
234
+ onInsert: insertExpression
235
+ }
236
+ ) : null,
237
+ outputTab === "tokens" ? /* @__PURE__ */ jsx(
238
+ TokensPanel,
239
+ {
240
+ source: state.source,
241
+ languageId: language.editorLanguage
242
+ }
243
+ ) : null,
244
+ outputTab === "spec" && language.catalogue ? /* @__PURE__ */ jsx(SpecPanel, { flavour: language.catalogue, spec: activeSpec }) : null
245
+ ] })
246
+ ] })
247
+ ] });
248
+ }
249
+ function EditorPane({
250
+ label,
251
+ hint,
252
+ actions,
253
+ children
254
+ }) {
255
+ return /* @__PURE__ */ jsxs("section", { className: "flex h-full min-h-0 flex-col bg-background", children: [
256
+ /* @__PURE__ */ jsxs("header", { className: "flex h-[33px] shrink-0 items-center justify-between gap-2 px-4 py-2", children: [
257
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
258
+ /* @__PURE__ */ jsx("h2", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: label }),
259
+ hint
260
+ ] }),
261
+ actions
262
+ ] }),
263
+ /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 [&_[data-slot=monaco-editor]]:h-full [&_[data-slot=monaco-editor]]:rounded-none [&_[data-slot=monaco-editor]]:border-0 [&_[data-slot=monaco-editor]]:border-t", children })
264
+ ] });
265
+ }
266
+ function useMarkers(response) {
267
+ useEffect(() => {
268
+ const model = monacoEditor.editor.getModels().find((candidate) => candidate.uri.toString() === SOURCE_MODEL_PATH);
269
+ if (!model) return;
270
+ const error = response == null ? void 0 : response.error;
271
+ if (!(error == null ? void 0 : error.line)) {
272
+ monacoEditor.editor.setModelMarkers(model, "expressions", []);
273
+ return;
274
+ }
275
+ const column = error.column ?? 1;
276
+ monacoEditor.editor.setModelMarkers(model, "expressions", [
277
+ {
278
+ severity: monacoEditor.MarkerSeverity.Error,
279
+ message: error.message,
280
+ startLineNumber: error.line,
281
+ startColumn: column,
282
+ endLineNumber: error.line,
283
+ endColumn: column + 1
284
+ }
285
+ ]);
286
+ }, [response]);
287
+ }
288
+ export {
289
+ ExpressionPlayground
290
+ };
291
+ //# sourceMappingURL=ExpressionPlayground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpressionPlayground.js","sources":["../../../src/expressions/playground/ExpressionPlayground.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Combobox } from \"../../components/Combobox\";\nimport { Tabs } from \"../../layout/Tabs\";\nimport { MonacoEditor } from \"../../monaco/MonacoEditor\";\nimport type { Monaco } from \"@monaco-editor/react\";\nimport * as monacoEditor from \"monaco-editor\";\n\nimport {\n mergeSpec,\n registerGomplateLanguages,\n spec as packagedSpec,\n} from \"../lang/index.ts\";\nimport type { GomplateSpec, RegisteredLanguages } from \"../lang/index.ts\";\nimport { DEFAULT_API_BASE, fetchExamples, fetchSpec } from \"./api.ts\";\nimport type { EvalResponse, Example } from \"./api.ts\";\nimport { LANGUAGES, languageById } from \"./languages.ts\";\nimport type { PlaygroundLanguage } from \"./languages.ts\";\nimport { GraphPanel } from \"./panels/GraphPanel.tsx\";\nimport { ResultPanel } from \"./panels/ResultPanel.tsx\";\nimport { SpecPanel } from \"./panels/SpecPanel.tsx\";\nimport { TokensPanel } from \"./panels/TokensPanel.tsx\";\nimport { RunControls } from \"./RunControls.tsx\";\nimport { registerRunAction } from \"./runAction.ts\";\nimport { useEditorTheme } from \"./useEditorTheme.ts\";\nimport { useEvaluator } from \"./useEvaluator.ts\";\nimport { useParsedInput } from \"./useParsedInput.ts\";\nimport { VerticalSplit } from \"./VerticalSplit.tsx\";\nimport { rowsToPaneHeight } from \"./verticalSplitModel\";\n\n/** What the author is editing. Hosts persist this wherever suits them. */\nexport interface PlaygroundState {\n language: string;\n source: string;\n input: string;\n}\n\nexport interface ExpressionPlaygroundProps {\n /**\n * Where the host mounted the playground API. Defaults to `/api`; a host\n * serving it behind a prefix passes that instead.\n */\n apiBase?: string;\n /** Languages offered. Defaults to everything gomplate evaluates. */\n languages?: PlaygroundLanguage[];\n /**\n * Samples to offer. Fetched from the server when omitted, so a host that\n * configured `Options.Examples` needs no prop at all.\n */\n examples?: Example[];\n /** Controlled state. Pair with `onChange`. */\n value?: PlaygroundState;\n onChange?: (state: PlaygroundState) => void;\n /** Starting state when uncontrolled. */\n defaultValue?: PlaygroundState;\n className?: string;\n}\n\nconst SOURCE_MODEL_PATH = \"inmemory://expressions/source\";\nconst INPUT_MODEL_PATH = \"inmemory://expressions/input.yaml\";\n\nconst EMPTY_STATE: PlaygroundState = { language: \"cel\", source: \"\", input: \"\" };\n\n/**\n * An editor for one expression, the document it runs against, and its result.\n *\n * Deliberately shell-less: it renders the editors and the output panels and\n * nothing around them, so a host frames it with its own navigation. gomplate's\n * playground wraps it in an AppShell with a language rail; an app embedding it\n * in a drawer wraps it in nothing at all.\n *\n * Highlighting, completion and hover come from the catalogue the *server*\n * reports, so a host's own functions are first-class here without this\n * component knowing anything about them.\n */\nexport function ExpressionPlayground({\n apiBase = DEFAULT_API_BASE,\n languages: offered = LANGUAGES,\n examples,\n value,\n onChange,\n defaultValue,\n className,\n}: ExpressionPlaygroundProps) {\n const [uncontrolled, setUncontrolled] = useState<PlaygroundState>(\n () => defaultValue ?? { ...EMPTY_STATE, language: offered[0]?.id ?? \"cel\" },\n );\n const state = value ?? uncontrolled;\n\n const update = useCallback(\n (patch: Partial<PlaygroundState>) => {\n const next = { ...state, ...patch };\n if (!value) setUncontrolled(next);\n onChange?.(next);\n },\n [state, value, onChange],\n );\n\n const language = useMemo(\n () => languageById(state.language, offered),\n [state.language, offered],\n );\n const [outputTab, setOutputTab] = useState(\"result\");\n\n const evaluator = useEvaluator(apiBase, {\n language: language.evalLanguage,\n source: state.source,\n input: state.input,\n });\n\n // Completion reads the document through a ref: languages are registered once,\n // before the first editor mounts, while the input keeps being edited after.\n const parsedInput = useParsedInput(state.input);\n const environmentRef = useRef<unknown>(undefined);\n environmentRef.current = parsedInput.value;\n\n const [served, setServed] = useState<GomplateSpec>();\n const servedRef = useRef<GomplateSpec>(undefined);\n servedRef.current = served;\n const activeSpec = useMemo(() => mergeSpec(packagedSpec, served), [served]);\n\n const [fetched, setFetched] = useState<Example[]>();\n const available = examples ?? fetched ?? [];\n const forLanguage = available.filter(\n (example) => example.language === language.evalLanguage,\n );\n\n // Registration must happen before the first model is created, or Monaco\n // resolves the language id to plaintext and never revisits it. Which of the\n // two lands first is a race -- Monaco loads slowly, the fetch returns fast --\n // so both paths apply the catalogue.\n const registered = useRef<RegisteredLanguages | null>(null);\n const registerLanguages = useCallback((monaco: Monaco) => {\n const current = servedRef.current;\n registered.current = registerGomplateLanguages(monaco, {\n environment: () => environmentRef.current,\n ...(current ? { spec: current } : {}),\n });\n }, []);\n\n useEffect(() => {\n const controller = new AbortController();\n void fetchSpec(apiBase, controller.signal).then((next) => {\n if (!controller.signal.aborted) setServed(next);\n });\n return () => controller.abort();\n }, [apiBase]);\n\n useEffect(() => {\n if (served) registered.current?.setSpec(served);\n }, [served]);\n\n useEffect(() => {\n if (examples) return;\n const controller = new AbortController();\n void fetchExamples(apiBase, controller.signal).then((next) => {\n if (!controller.signal.aborted && next) setFetched(next);\n });\n return () => controller.abort();\n }, [apiBase, examples]);\n\n useMarkers(evaluator.response);\n const applyTheme = useEditorTheme();\n\n useEffect(() => {\n if (outputTab === \"spec\" && !language.catalogue) setOutputTab(\"result\");\n }, [language.catalogue, outputTab]);\n\n // The Monaco action is registered once per editor, so it has to reach the\n // current `run` through a ref rather than capturing it.\n const runRef = useRef(evaluator.run);\n runRef.current = evaluator.run;\n const sourceEditor = useRef<Parameters<typeof registerRunAction>[0] | null>(\n null,\n );\n const onEditorMount = useCallback(\n (editor: Parameters<typeof registerRunAction>[0], monaco: Monaco) => {\n applyTheme();\n registerRunAction(editor, monaco, () => runRef.current());\n if (editor.getModel()?.uri.toString() === SOURCE_MODEL_PATH)\n sourceEditor.current = editor;\n },\n [applyTheme],\n );\n\n /** Writes a path from the object graph where the author last left the caret. */\n const insertExpression = useCallback((expression: string) => {\n const editor = sourceEditor.current;\n const selection = editor?.getSelection();\n if (!editor || !selection) return;\n editor.executeEdits(\"object-graph\", [\n { range: selection, text: expression, forceMoveMarkers: true },\n ]);\n editor.focus();\n }, []);\n\n const catalogue = language.catalogue\n ? activeSpec[language.catalogue].functions\n : [];\n\n return (\n <div className={`flex h-full min-h-0 ${className ?? \"\"}`}>\n <div className=\"flex min-h-0 w-1/2 flex-col border-r border-border\">\n <VerticalSplit\n storageKey=\"expressions:editor-split\"\n defaultTopHeight={rowsToPaneHeight(language.editorRows)}\n top={\n <EditorPane\n label=\"Expression\"\n actions={<RunControls evaluator={evaluator} />}\n hint={\n forLanguage.length > 0 ? (\n <Combobox\n options={forLanguage.map((example) => ({\n value: example.name,\n label: example.name,\n }))}\n value=\"\"\n allowCustomValue={false}\n placeholder=\"Load an example…\"\n ariaLabel=\"Load an example\"\n className=\"w-56\"\n onChange={(name) => {\n const example = forLanguage.find(\n (candidate) => candidate.name === name,\n );\n if (example)\n update({\n source: example.source,\n input: example.input,\n });\n }}\n />\n ) : undefined\n }\n >\n <MonacoEditor\n value={state.source}\n onChange={(source) => update({ source: source ?? \"\" })}\n language={language.editorLanguage}\n path={SOURCE_MODEL_PATH}\n height=\"100%\"\n beforeMount={registerLanguages}\n onMount={onEditorMount}\n />\n </EditorPane>\n }\n bottom={\n <EditorPane\n label=\"Input\"\n hint={\n <span\n className={`truncate text-[11px] ${\n parsedInput.error\n ? \"text-destructive\"\n : \"text-muted-foreground/70\"\n }`}\n title={parsedInput.error ?? undefined}\n >\n {parsedInput.error ?? \"YAML or JSON\"}\n </span>\n }\n >\n <MonacoEditor\n value={state.input}\n onChange={(input) => update({ input: input ?? \"\" })}\n language=\"yaml\"\n path={INPUT_MODEL_PATH}\n height=\"100%\"\n onMount={onEditorMount}\n />\n </EditorPane>\n }\n />\n </div>\n\n <div className=\"flex min-h-0 w-1/2 flex-col\">\n <div className=\"border-b border-border px-4\">\n <Tabs\n tabs={[\n { id: \"result\", label: \"Result\" },\n { id: \"graph\", label: \"Object graph\" },\n { id: \"tokens\", label: \"Tokens\" },\n ...(language.catalogue\n ? [{ id: \"spec\", label: \"Functions\", count: catalogue.length }]\n : []),\n ]}\n value={outputTab}\n onChange={setOutputTab}\n />\n </div>\n\n <div className=\"min-h-0 flex-1\">\n {outputTab === \"result\" ? (\n <ResultPanel\n response={evaluator.response}\n pending={evaluator.pending}\n stale={evaluator.stale}\n onRun={evaluator.run}\n />\n ) : null}\n {outputTab === \"graph\" ? (\n <GraphPanel\n document={parsedInput.value}\n languageId={language.editorLanguage}\n onInsert={insertExpression}\n />\n ) : null}\n {outputTab === \"tokens\" ? (\n <TokensPanel\n source={state.source}\n languageId={language.editorLanguage}\n />\n ) : null}\n {outputTab === \"spec\" && language.catalogue ? (\n <SpecPanel flavour={language.catalogue} spec={activeSpec} />\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n\nfunction EditorPane({\n label,\n hint,\n actions,\n children,\n}: {\n label: string;\n hint?: React.ReactNode;\n actions?: React.ReactNode;\n children: React.ReactNode;\n}) {\n return (\n <section className=\"flex h-full min-h-0 flex-col bg-background\">\n <header className=\"flex h-[33px] shrink-0 items-center justify-between gap-2 px-4 py-2\">\n <div className=\"flex items-baseline gap-2\">\n <h2 className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {label}\n </h2>\n {hint}\n </div>\n {actions}\n </header>\n <div className=\"min-h-0 flex-1 [&_[data-slot=monaco-editor]]:h-full [&_[data-slot=monaco-editor]]:rounded-none [&_[data-slot=monaco-editor]]:border-0 [&_[data-slot=monaco-editor]]:border-t\">\n {children}\n </div>\n </section>\n );\n}\n\n/**\n * Mirrors a compile error onto the editor as a marker, so the position the\n * server reported is visible where the mistake is rather than only in the\n * result panel.\n */\nfunction useMarkers(response: EvalResponse | null) {\n useEffect(() => {\n const model = monacoEditor.editor\n .getModels()\n .find((candidate) => candidate.uri.toString() === SOURCE_MODEL_PATH);\n if (!model) return;\n\n const error = response?.error;\n if (!error?.line) {\n monacoEditor.editor.setModelMarkers(model, \"expressions\", []);\n return;\n }\n\n const column = error.column ?? 1;\n monacoEditor.editor.setModelMarkers(model, \"expressions\", [\n {\n severity: monacoEditor.MarkerSeverity.Error,\n message: error.message,\n startLineNumber: error.line,\n startColumn: column,\n endLineNumber: error.line,\n endColumn: column + 1,\n },\n ]);\n }, [response]);\n}\n"],"names":["packagedSpec"],"mappings":"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"}
@@ -0,0 +1,51 @@
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 button = require("../../components/button.cjs");
6
+ const Switch = require("../../components/Switch.cjs");
7
+ const runShortcut = require("./runShortcut.cjs");
8
+ const UiPlay = require("../../icons/components/UiPlay.cjs");
9
+ function RunControls({ evaluator }) {
10
+ useGlobalRunShortcut(evaluator.run);
11
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
12
+ /* @__PURE__ */ jsxRuntime.jsx(
13
+ Switch.Switch,
14
+ {
15
+ checked: evaluator.autoRun,
16
+ onChange: evaluator.setAutoRun,
17
+ label: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "Auto-run" })
18
+ }
19
+ ),
20
+ /* @__PURE__ */ jsxRuntime.jsxs(
21
+ button.Button,
22
+ {
23
+ onClick: evaluator.run,
24
+ loading: evaluator.pending,
25
+ variant: evaluator.stale ? "default" : "outline",
26
+ size: "sm",
27
+ className: "[&_svg]:size-3.5",
28
+ title: `Run (${runShortcut.RUN_SHORTCUT_LABEL})`,
29
+ children: [
30
+ /* @__PURE__ */ jsxRuntime.jsx(UiPlay.UiPlay, { className: "mr-1.5" }),
31
+ "Run",
32
+ /* @__PURE__ */ jsxRuntime.jsx("kbd", { className: "ml-2 rounded border border-current/25 px-1 text-[10px] leading-4 opacity-70", children: runShortcut.RUN_SHORTCUT_LABEL })
33
+ ]
34
+ }
35
+ )
36
+ ] });
37
+ }
38
+ function useGlobalRunShortcut(run) {
39
+ react.useEffect(() => {
40
+ const onKeyDown = (event) => {
41
+ if (event.key !== "Enter") return;
42
+ if (!(event.metaKey || event.ctrlKey)) return;
43
+ event.preventDefault();
44
+ run();
45
+ };
46
+ window.addEventListener("keydown", onKeyDown);
47
+ return () => window.removeEventListener("keydown", onKeyDown);
48
+ }, [run]);
49
+ }
50
+ exports.RunControls = RunControls;
51
+ //# sourceMappingURL=RunControls.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunControls.cjs","sources":["../../../src/expressions/playground/RunControls.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { Switch } from \"../../components/Switch\";\nimport { UiPlay } from \"../../icons\";\nimport { RUN_SHORTCUT_LABEL } from \"./runShortcut\";\nimport type { Evaluator } from \"./useEvaluator.ts\";\n\ninterface RunControlsProps {\n evaluator: Evaluator;\n}\n\nexport function RunControls({ evaluator }: RunControlsProps) {\n useGlobalRunShortcut(evaluator.run);\n\n return (\n <div className=\"flex items-center gap-3\">\n <Switch\n checked={evaluator.autoRun}\n onChange={evaluator.setAutoRun}\n label={<span className=\"text-xs text-muted-foreground\">Auto-run</span>}\n />\n <Button\n onClick={evaluator.run}\n // No `loadingLabel`: Button renders it whenever it is defined, not only\n // while loading, so it would replace \"Run\" permanently.\n loading={evaluator.pending}\n // A stale result is the case the button exists for, so make it the one\n // that stands out; otherwise it is a quiet re-run control.\n variant={evaluator.stale ? \"default\" : \"outline\"}\n size=\"sm\"\n className=\"[&_svg]:size-3.5\"\n title={`Run (${RUN_SHORTCUT_LABEL})`}\n >\n <UiPlay className=\"mr-1.5\" />\n Run\n <kbd className=\"ml-2 rounded border border-current/25 px-1 text-[10px] leading-4 opacity-70\">\n {RUN_SHORTCUT_LABEL}\n </kbd>\n </Button>\n </div>\n );\n}\n\n/**\n * Cmd/Ctrl+Enter outside the editors.\n *\n * Monaco swallows keystrokes while it has focus, so the editors register the\n * same accelerator as a Monaco action of their own (see `runAction`). This\n * covers the rest of the page.\n */\nfunction useGlobalRunShortcut(run: () => void) {\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Enter\") return;\n if (!(event.metaKey || event.ctrlKey)) return;\n event.preventDefault();\n run();\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [run]);\n}\n"],"names":["jsxs","jsx","Switch","Button","RUN_SHORTCUT_LABEL","UiPlay","useEffect"],"mappings":";;;;;;;;AAWO,SAAS,YAAY,EAAE,aAA+B;AAC3D,uBAAqB,UAAU,GAAG;AAElC,SACEA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,IAAAC,2BAAAA;AAAAA,MAACC,OAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,UAAU;AAAA,QACnB,UAAU,UAAU;AAAA,QACpB,OAAOD,2BAAAA,IAAC,QAAA,EAAK,WAAU,iCAAgC,UAAA,WAAA,CAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEjED,2BAAAA;AAAAA,MAACG,OAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,UAAU;AAAA,QAGnB,SAAS,UAAU;AAAA,QAGnB,SAAS,UAAU,QAAQ,YAAY;AAAA,QACvC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,OAAO,QAAQC,YAAAA,kBAAkB;AAAA,QAEjC,UAAA;AAAA,UAAAH,2BAAAA,IAACI,OAAAA,QAAA,EAAO,WAAU,SAAA,CAAS;AAAA,UAAE;AAAA,UAE7BJ,2BAAAA,IAAC,OAAA,EAAI,WAAU,+EACZ,UAAAG,YAAAA,mBAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AASA,SAAS,qBAAqB,KAAiB;AAC7CE,QAAAA,UAAU,MAAM;AACd,UAAM,YAAY,CAAC,UAAyB;AAC1C,UAAI,MAAM,QAAQ,QAAS;AAC3B,UAAI,EAAE,MAAM,WAAW,MAAM,SAAU;AACvC,YAAM,eAAA;AACN,UAAA;AAAA,IACF;AACA,WAAO,iBAAiB,WAAW,SAAS;AAC5C,WAAO,MAAM,OAAO,oBAAoB,WAAW,SAAS;AAAA,EAC9D,GAAG,CAAC,GAAG,CAAC;AACV;;"}
@@ -0,0 +1,7 @@
1
+ import { Evaluator } from './useEvaluator.ts';
2
+ interface RunControlsProps {
3
+ evaluator: Evaluator;
4
+ }
5
+ export declare function RunControls({ evaluator }: RunControlsProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=RunControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunControls.d.ts","sourceRoot":"","sources":["../../../src/expressions/playground/RunControls.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,UAAU,gBAAgB;IACxB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,gBAAgB,+BA8B1D"}
@@ -0,0 +1,51 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useEffect } from "react";
3
+ import { Button } from "../../components/button.js";
4
+ import { Switch } from "../../components/Switch.js";
5
+ import { RUN_SHORTCUT_LABEL } from "./runShortcut.js";
6
+ import { UiPlay } from "../../icons/components/UiPlay.js";
7
+ function RunControls({ evaluator }) {
8
+ useGlobalRunShortcut(evaluator.run);
9
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
10
+ /* @__PURE__ */ jsx(
11
+ Switch,
12
+ {
13
+ checked: evaluator.autoRun,
14
+ onChange: evaluator.setAutoRun,
15
+ label: /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "Auto-run" })
16
+ }
17
+ ),
18
+ /* @__PURE__ */ jsxs(
19
+ Button,
20
+ {
21
+ onClick: evaluator.run,
22
+ loading: evaluator.pending,
23
+ variant: evaluator.stale ? "default" : "outline",
24
+ size: "sm",
25
+ className: "[&_svg]:size-3.5",
26
+ title: `Run (${RUN_SHORTCUT_LABEL})`,
27
+ children: [
28
+ /* @__PURE__ */ jsx(UiPlay, { className: "mr-1.5" }),
29
+ "Run",
30
+ /* @__PURE__ */ jsx("kbd", { className: "ml-2 rounded border border-current/25 px-1 text-[10px] leading-4 opacity-70", children: RUN_SHORTCUT_LABEL })
31
+ ]
32
+ }
33
+ )
34
+ ] });
35
+ }
36
+ function useGlobalRunShortcut(run) {
37
+ useEffect(() => {
38
+ const onKeyDown = (event) => {
39
+ if (event.key !== "Enter") return;
40
+ if (!(event.metaKey || event.ctrlKey)) return;
41
+ event.preventDefault();
42
+ run();
43
+ };
44
+ window.addEventListener("keydown", onKeyDown);
45
+ return () => window.removeEventListener("keydown", onKeyDown);
46
+ }, [run]);
47
+ }
48
+ export {
49
+ RunControls
50
+ };
51
+ //# sourceMappingURL=RunControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunControls.js","sources":["../../../src/expressions/playground/RunControls.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { Switch } from \"../../components/Switch\";\nimport { UiPlay } from \"../../icons\";\nimport { RUN_SHORTCUT_LABEL } from \"./runShortcut\";\nimport type { Evaluator } from \"./useEvaluator.ts\";\n\ninterface RunControlsProps {\n evaluator: Evaluator;\n}\n\nexport function RunControls({ evaluator }: RunControlsProps) {\n useGlobalRunShortcut(evaluator.run);\n\n return (\n <div className=\"flex items-center gap-3\">\n <Switch\n checked={evaluator.autoRun}\n onChange={evaluator.setAutoRun}\n label={<span className=\"text-xs text-muted-foreground\">Auto-run</span>}\n />\n <Button\n onClick={evaluator.run}\n // No `loadingLabel`: Button renders it whenever it is defined, not only\n // while loading, so it would replace \"Run\" permanently.\n loading={evaluator.pending}\n // A stale result is the case the button exists for, so make it the one\n // that stands out; otherwise it is a quiet re-run control.\n variant={evaluator.stale ? \"default\" : \"outline\"}\n size=\"sm\"\n className=\"[&_svg]:size-3.5\"\n title={`Run (${RUN_SHORTCUT_LABEL})`}\n >\n <UiPlay className=\"mr-1.5\" />\n Run\n <kbd className=\"ml-2 rounded border border-current/25 px-1 text-[10px] leading-4 opacity-70\">\n {RUN_SHORTCUT_LABEL}\n </kbd>\n </Button>\n </div>\n );\n}\n\n/**\n * Cmd/Ctrl+Enter outside the editors.\n *\n * Monaco swallows keystrokes while it has focus, so the editors register the\n * same accelerator as a Monaco action of their own (see `runAction`). This\n * covers the rest of the page.\n */\nfunction useGlobalRunShortcut(run: () => void) {\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Enter\") return;\n if (!(event.metaKey || event.ctrlKey)) return;\n event.preventDefault();\n run();\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [run]);\n}\n"],"names":[],"mappings":";;;;;;AAWO,SAAS,YAAY,EAAE,aAA+B;AAC3D,uBAAqB,UAAU,GAAG;AAElC,SACE,qBAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,UAAU;AAAA,QACnB,UAAU,UAAU;AAAA,QACpB,OAAO,oBAAC,QAAA,EAAK,WAAU,iCAAgC,UAAA,WAAA,CAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEjE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,UAAU;AAAA,QAGnB,SAAS,UAAU;AAAA,QAGnB,SAAS,UAAU,QAAQ,YAAY;AAAA,QACvC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,OAAO,QAAQ,kBAAkB;AAAA,QAEjC,UAAA;AAAA,UAAA,oBAAC,QAAA,EAAO,WAAU,SAAA,CAAS;AAAA,UAAE;AAAA,UAE7B,oBAAC,OAAA,EAAI,WAAU,+EACZ,UAAA,mBAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AASA,SAAS,qBAAqB,KAAiB;AAC7C,YAAU,MAAM;AACd,UAAM,YAAY,CAAC,UAAyB;AAC1C,UAAI,MAAM,QAAQ,QAAS;AAC3B,UAAI,EAAE,MAAM,WAAW,MAAM,SAAU;AACvC,YAAM,eAAA;AACN,UAAA;AAAA,IACF;AACA,WAAO,iBAAiB,WAAW,SAAS;AAC5C,WAAO,MAAM,OAAO,oBAAoB,WAAW,SAAS;AAAA,EAC9D,GAAG,CAAC,GAAG,CAAC;AACV;"}
@@ -0,0 +1,109 @@
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 verticalSplitModel = require("./verticalSplitModel.cjs");
6
+ function VerticalSplit({
7
+ top,
8
+ bottom,
9
+ defaultTopHeight,
10
+ minTop = verticalSplitModel.rowsToPaneHeight(2),
11
+ minBottom = 96,
12
+ storageKey
13
+ }) {
14
+ const container = react.useRef(null);
15
+ const [topHeight, setTopHeight] = react.useState(
16
+ () => readStored(storageKey) ?? defaultTopHeight
17
+ );
18
+ const [dragging, setDragging] = react.useState(false);
19
+ const hasStoredSize = react.useRef(readStored(storageKey) !== null);
20
+ react.useEffect(() => {
21
+ if (!hasStoredSize.current) setTopHeight(defaultTopHeight);
22
+ }, [defaultTopHeight]);
23
+ const clamp = react.useCallback(
24
+ (height) => {
25
+ var _a;
26
+ const available = ((_a = container.current) == null ? void 0 : _a.getBoundingClientRect().height) ?? 0;
27
+ const upperBound = Math.max(minTop, available - minBottom);
28
+ return Math.round(Math.max(minTop, Math.min(upperBound, height)));
29
+ },
30
+ [minTop, minBottom]
31
+ );
32
+ const commit = react.useCallback(
33
+ (height) => {
34
+ const next = clamp(height);
35
+ setTopHeight(next);
36
+ hasStoredSize.current = true;
37
+ if (storageKey) window.localStorage.setItem(storageKey, String(next));
38
+ },
39
+ [clamp, storageKey]
40
+ );
41
+ const onPointerDown = react.useCallback(
42
+ (event) => {
43
+ var _a;
44
+ event.preventDefault();
45
+ const rect = (_a = container.current) == null ? void 0 : _a.getBoundingClientRect();
46
+ if (!rect) return;
47
+ setDragging(true);
48
+ const onMove = (moveEvent) => commit(moveEvent.clientY - rect.top);
49
+ const onUp = () => {
50
+ setDragging(false);
51
+ document.removeEventListener("pointermove", onMove);
52
+ document.removeEventListener("pointerup", onUp);
53
+ };
54
+ document.addEventListener("pointermove", onMove);
55
+ document.addEventListener("pointerup", onUp);
56
+ },
57
+ [commit]
58
+ );
59
+ const onKeyDown = react.useCallback(
60
+ (event) => {
61
+ const step = event.shiftKey ? verticalSplitModel.EDITOR_LINE_HEIGHT * 5 : verticalSplitModel.EDITOR_LINE_HEIGHT;
62
+ if (event.key === "ArrowUp") {
63
+ event.preventDefault();
64
+ commit(topHeight - step);
65
+ } else if (event.key === "ArrowDown") {
66
+ event.preventDefault();
67
+ commit(topHeight + step);
68
+ } else if (event.key === "Home") {
69
+ event.preventDefault();
70
+ commit(minTop);
71
+ }
72
+ },
73
+ [commit, topHeight, minTop]
74
+ );
75
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: container, className: "flex h-full min-h-0 flex-col", children: [
76
+ /* @__PURE__ */ jsxRuntime.jsx(
77
+ "div",
78
+ {
79
+ className: "min-h-0 shrink-0 overflow-hidden",
80
+ style: { height: topHeight },
81
+ children: top
82
+ }
83
+ ),
84
+ /* @__PURE__ */ jsxRuntime.jsx(
85
+ "div",
86
+ {
87
+ role: "separator",
88
+ "aria-orientation": "horizontal",
89
+ "aria-label": "Resize the expression editor",
90
+ "aria-valuenow": topHeight,
91
+ tabIndex: 0,
92
+ onPointerDown,
93
+ onKeyDown,
94
+ className: `group relative h-1.5 shrink-0 cursor-row-resize bg-border transition-colors hover:bg-primary/40 focus-visible:bg-primary/60 focus-visible:outline-none ${dragging ? "bg-primary/60" : ""}`,
95
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute inset-x-0 -top-1 -bottom-1" })
96
+ }
97
+ ),
98
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: bottom })
99
+ ] });
100
+ }
101
+ function readStored(key) {
102
+ if (!key || typeof window === "undefined") return null;
103
+ const raw = window.localStorage.getItem(key);
104
+ if (raw === null) return null;
105
+ const parsed = Number.parseInt(raw, 10);
106
+ return Number.isFinite(parsed) ? parsed : null;
107
+ }
108
+ exports.VerticalSplit = VerticalSplit;
109
+ //# sourceMappingURL=VerticalSplit.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerticalSplit.cjs","sources":["../../../src/expressions/playground/VerticalSplit.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { EDITOR_LINE_HEIGHT, rowsToPaneHeight } from \"./verticalSplitModel\";\n\nexport interface VerticalSplitProps {\n top: ReactNode;\n bottom: ReactNode;\n /** Top-pane height in pixels, used until the reader drags the divider. */\n defaultTopHeight: number;\n /** Smallest the top pane may be dragged. Defaults to two rows. */\n minTop?: number;\n /** Smallest the bottom pane may be dragged. */\n minBottom?: number;\n /** localStorage key persisting the dragged height. */\n storageKey?: string;\n}\n\n/**\n * A vertically stacked, resizable pair of panes.\n *\n * clicky-ui's SplitPane only splits horizontally, and the two editors stack, so\n * the divider here is its own component. Sizing is in pixels rather than a\n * percentage because the useful size of the expression editor is a number of\n * rows, which a percentage of a varying viewport does not express.\n */\nexport function VerticalSplit({\n top,\n bottom,\n defaultTopHeight,\n minTop = rowsToPaneHeight(2),\n minBottom = 96,\n storageKey,\n}: VerticalSplitProps) {\n const container = useRef<HTMLDivElement>(null);\n const [topHeight, setTopHeight] = useState(\n () => readStored(storageKey) ?? defaultTopHeight,\n );\n const [dragging, setDragging] = useState(false);\n\n // Only follow the language's default while the reader has not chosen a size:\n // a dragged divider is a decision, and switching language should not undo it.\n const hasStoredSize = useRef(readStored(storageKey) !== null);\n useEffect(() => {\n if (!hasStoredSize.current) setTopHeight(defaultTopHeight);\n }, [defaultTopHeight]);\n\n const clamp = useCallback(\n (height: number) => {\n const available = container.current?.getBoundingClientRect().height ?? 0;\n const upperBound = Math.max(minTop, available - minBottom);\n return Math.round(Math.max(minTop, Math.min(upperBound, height)));\n },\n [minTop, minBottom],\n );\n\n const commit = useCallback(\n (height: number) => {\n const next = clamp(height);\n setTopHeight(next);\n hasStoredSize.current = true;\n if (storageKey) window.localStorage.setItem(storageKey, String(next));\n },\n [clamp, storageKey],\n );\n\n const onPointerDown = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n event.preventDefault();\n const rect = container.current?.getBoundingClientRect();\n if (!rect) return;\n\n setDragging(true);\n const onMove = (moveEvent: PointerEvent) =>\n commit(moveEvent.clientY - rect.top);\n const onUp = () => {\n setDragging(false);\n document.removeEventListener(\"pointermove\", onMove);\n document.removeEventListener(\"pointerup\", onUp);\n };\n document.addEventListener(\"pointermove\", onMove);\n document.addEventListener(\"pointerup\", onUp);\n },\n [commit],\n );\n\n // A separator that can only be dragged is unusable without a mouse, and this\n // one gates access to the input editor.\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const step = event.shiftKey ? EDITOR_LINE_HEIGHT * 5 : EDITOR_LINE_HEIGHT;\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n commit(topHeight - step);\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault();\n commit(topHeight + step);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n commit(minTop);\n }\n },\n [commit, topHeight, minTop],\n );\n\n return (\n <div ref={container} className=\"flex h-full min-h-0 flex-col\">\n <div\n className=\"min-h-0 shrink-0 overflow-hidden\"\n style={{ height: topHeight }}\n >\n {top}\n </div>\n\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n aria-label=\"Resize the expression editor\"\n aria-valuenow={topHeight}\n tabIndex={0}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n className={`group relative h-1.5 shrink-0 cursor-row-resize bg-border transition-colors hover:bg-primary/40 focus-visible:bg-primary/60 focus-visible:outline-none ${\n dragging ? \"bg-primary/60\" : \"\"\n }`}\n >\n {/* A 6px strip is a small target; widen the grab area without moving\n anything by overflowing an invisible band above and below it. */}\n <span className=\"absolute inset-x-0 -top-1 -bottom-1\" />\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-hidden\">{bottom}</div>\n </div>\n );\n}\n\nfunction readStored(key: string | undefined): number | null {\n if (!key || typeof window === \"undefined\") return null;\n const raw = window.localStorage.getItem(key);\n if (raw === null) return null;\n const parsed = Number.parseInt(raw, 10);\n return Number.isFinite(parsed) ? parsed : null;\n}\n"],"names":["rowsToPaneHeight","useRef","useState","useEffect","useCallback","EDITOR_LINE_HEIGHT","jsxs","jsx"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ReactNode } from 'react';
2
+ export interface VerticalSplitProps {
3
+ top: ReactNode;
4
+ bottom: ReactNode;
5
+ /** Top-pane height in pixels, used until the reader drags the divider. */
6
+ defaultTopHeight: number;
7
+ /** Smallest the top pane may be dragged. Defaults to two rows. */
8
+ minTop?: number;
9
+ /** Smallest the bottom pane may be dragged. */
10
+ minBottom?: number;
11
+ /** localStorage key persisting the dragged height. */
12
+ storageKey?: string;
13
+ }
14
+ /**
15
+ * A vertically stacked, resizable pair of panes.
16
+ *
17
+ * clicky-ui's SplitPane only splits horizontally, and the two editors stack, so
18
+ * the divider here is its own component. Sizing is in pixels rather than a
19
+ * percentage because the useful size of the expression editor is a number of
20
+ * rows, which a percentage of a varying viewport does not express.
21
+ */
22
+ export declare function VerticalSplit({ top, bottom, defaultTopHeight, minTop, minBottom, storageKey, }: VerticalSplitProps): import("react").JSX.Element;
23
+ //# sourceMappingURL=VerticalSplit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerticalSplit.d.ts","sourceRoot":"","sources":["../../../src/expressions/playground/VerticalSplit.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,MAAM,EACN,gBAAgB,EAChB,MAA4B,EAC5B,SAAc,EACd,UAAU,GACX,EAAE,kBAAkB,+BAqGpB"}