@flanksource/clicky-ui 0.1.0 → 0.2.1

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 (378) hide show
  1. package/README.md +29 -2
  2. package/dist/api-explorer.d.ts +5 -0
  3. package/dist/api-explorer.d.ts.map +1 -0
  4. package/dist/api-explorer.js +25 -0
  5. package/dist/api-explorer.js.map +1 -0
  6. package/dist/clicky.d.ts +2 -0
  7. package/dist/clicky.d.ts.map +1 -0
  8. package/dist/clicky.js +5 -0
  9. package/dist/clicky.js.map +1 -0
  10. package/dist/components/DatePicker.d.ts +18 -0
  11. package/dist/components/DatePicker.d.ts.map +1 -0
  12. package/dist/components/DatePicker.js +63 -0
  13. package/dist/components/DatePicker.js.map +1 -0
  14. package/dist/components/DateTimePicker.d.ts +18 -0
  15. package/dist/components/DateTimePicker.d.ts.map +1 -0
  16. package/dist/components/DateTimePicker.js +84 -0
  17. package/dist/components/DateTimePicker.js.map +1 -0
  18. package/dist/components/FilterBar.d.ts +180 -0
  19. package/dist/components/FilterBar.d.ts.map +1 -0
  20. package/dist/components/FilterBar.js +1685 -0
  21. package/dist/components/FilterBar.js.map +1 -0
  22. package/dist/components/MultiSelect.d.ts +19 -0
  23. package/dist/components/MultiSelect.d.ts.map +1 -0
  24. package/dist/components/MultiSelect.js +143 -0
  25. package/dist/components/MultiSelect.js.map +1 -0
  26. package/dist/components/RangeSlider.d.ts +16 -0
  27. package/dist/components/RangeSlider.d.ts.map +1 -0
  28. package/dist/components/RangeSlider.js +92 -0
  29. package/dist/components/RangeSlider.js.map +1 -0
  30. package/dist/components/button.d.ts +21 -0
  31. package/dist/components/button.d.ts.map +1 -0
  32. package/dist/components/button.js +126 -0
  33. package/dist/components/button.js.map +1 -0
  34. package/dist/components/density-switcher.d.ts +7 -0
  35. package/dist/components/density-switcher.d.ts.map +1 -0
  36. package/dist/components/density-switcher.js +32 -0
  37. package/dist/components/density-switcher.js.map +1 -0
  38. package/dist/components/icon-menu-picker.d.ts +22 -0
  39. package/dist/components/icon-menu-picker.d.ts.map +1 -0
  40. package/dist/components/icon-menu-picker.js +181 -0
  41. package/dist/components/icon-menu-picker.js.map +1 -0
  42. package/dist/components/select.d.ts +15 -0
  43. package/dist/components/select.d.ts.map +1 -0
  44. package/dist/components/select.js +39 -0
  45. package/dist/components/select.js.map +1 -0
  46. package/dist/components/theme-switcher.d.ts +7 -0
  47. package/dist/components/theme-switcher.d.ts.map +1 -0
  48. package/dist/components/theme-switcher.js +42 -0
  49. package/dist/components/theme-switcher.js.map +1 -0
  50. package/dist/components.d.ts +14 -0
  51. package/dist/components.d.ts.map +1 -0
  52. package/dist/components.js +31 -0
  53. package/dist/components.js.map +1 -0
  54. package/dist/data/AnsiHtml.d.ts +7 -0
  55. package/dist/data/AnsiHtml.d.ts.map +1 -0
  56. package/dist/data/AnsiHtml.js +71 -0
  57. package/dist/data/AnsiHtml.js.map +1 -0
  58. package/dist/data/Avatar.d.ts +32 -0
  59. package/dist/data/Avatar.d.ts.map +1 -0
  60. package/dist/data/Avatar.js +201 -0
  61. package/dist/data/Avatar.js.map +1 -0
  62. package/dist/data/AvatarBadge.d.ts +26 -0
  63. package/dist/data/AvatarBadge.d.ts.map +1 -0
  64. package/dist/data/AvatarBadge.js +104 -0
  65. package/dist/data/AvatarBadge.js.map +1 -0
  66. package/dist/data/Badge.d.ts +44 -0
  67. package/dist/data/Badge.d.ts.map +1 -0
  68. package/dist/data/Badge.js +667 -0
  69. package/dist/data/Badge.js.map +1 -0
  70. package/dist/data/Clicky.d.ts +147 -0
  71. package/dist/data/Clicky.d.ts.map +1 -0
  72. package/dist/data/Clicky.fixtures.d.ts +3 -0
  73. package/dist/data/Clicky.fixtures.d.ts.map +1 -0
  74. package/dist/data/Clicky.js +1960 -0
  75. package/dist/data/Clicky.js.map +1 -0
  76. package/dist/data/DataTable.d.ts +95 -0
  77. package/dist/data/DataTable.d.ts.map +1 -0
  78. package/dist/data/DataTable.js +1464 -0
  79. package/dist/data/DataTable.js.map +1 -0
  80. package/dist/data/FilterPill.d.ts +29 -0
  81. package/dist/data/FilterPill.d.ts.map +1 -0
  82. package/dist/data/FilterPill.js +153 -0
  83. package/dist/data/FilterPill.js.map +1 -0
  84. package/dist/data/Gauge.d.ts +15 -0
  85. package/dist/data/Gauge.d.ts.map +1 -0
  86. package/dist/data/Gauge.js +63 -0
  87. package/dist/data/Gauge.js.map +1 -0
  88. package/dist/data/Icon.d.ts +53 -0
  89. package/dist/data/Icon.d.ts.map +1 -0
  90. package/dist/data/Icon.js +115 -0
  91. package/dist/data/Icon.js.map +1 -0
  92. package/dist/data/JsonView.d.ts +8 -0
  93. package/dist/data/JsonView.d.ts.map +1 -0
  94. package/dist/data/JsonView.js +74 -0
  95. package/dist/data/JsonView.js.map +1 -0
  96. package/dist/data/KeyValueList.d.ts +17 -0
  97. package/dist/data/KeyValueList.d.ts.map +1 -0
  98. package/dist/data/KeyValueList.js +33 -0
  99. package/dist/data/KeyValueList.js.map +1 -0
  100. package/dist/data/LogViewer.d.ts +10 -0
  101. package/dist/data/LogViewer.d.ts.map +1 -0
  102. package/dist/data/LogViewer.js +46 -0
  103. package/dist/data/LogViewer.js.map +1 -0
  104. package/dist/data/LogsTable.d.ts +27 -0
  105. package/dist/data/LogsTable.d.ts.map +1 -0
  106. package/dist/data/LogsTable.js +580 -0
  107. package/dist/data/LogsTable.js.map +1 -0
  108. package/dist/data/Markdown.d.ts +6 -0
  109. package/dist/data/Markdown.d.ts.map +1 -0
  110. package/dist/data/Markdown.js +59 -0
  111. package/dist/data/Markdown.js.map +1 -0
  112. package/dist/data/MatrixTable.d.ts +22 -0
  113. package/dist/data/MatrixTable.d.ts.map +1 -0
  114. package/dist/data/MatrixTable.js +164 -0
  115. package/dist/data/MatrixTable.js.map +1 -0
  116. package/dist/data/MethodBadge.d.ts +6 -0
  117. package/dist/data/MethodBadge.d.ts.map +1 -0
  118. package/dist/data/MethodBadge.js +18 -0
  119. package/dist/data/MethodBadge.js.map +1 -0
  120. package/dist/data/ProgressBar.d.ts +13 -0
  121. package/dist/data/ProgressBar.d.ts.map +1 -0
  122. package/dist/data/ProgressBar.js +34 -0
  123. package/dist/data/ProgressBar.js.map +1 -0
  124. package/dist/data/SortableHeader.d.ts +12 -0
  125. package/dist/data/SortableHeader.d.ts.map +1 -0
  126. package/dist/data/SortableHeader.js +33 -0
  127. package/dist/data/SortableHeader.js.map +1 -0
  128. package/dist/data/TabButton.d.ts +12 -0
  129. package/dist/data/TabButton.d.ts.map +1 -0
  130. package/dist/data/TabButton.js +45 -0
  131. package/dist/data/TabButton.js.map +1 -0
  132. package/dist/data/Tree.d.ts +35 -0
  133. package/dist/data/Tree.d.ts.map +1 -0
  134. package/dist/data/Tree.js +236 -0
  135. package/dist/data/Tree.js.map +1 -0
  136. package/dist/data/TreeGroupHeader.d.ts +11 -0
  137. package/dist/data/TreeGroupHeader.d.ts.map +1 -0
  138. package/dist/data/TreeGroupHeader.js +41 -0
  139. package/dist/data/TreeGroupHeader.js.map +1 -0
  140. package/dist/data/TreeNode.d.ts +43 -0
  141. package/dist/data/TreeNode.d.ts.map +1 -0
  142. package/dist/data/TreeNode.js +100 -0
  143. package/dist/data/TreeNode.js.map +1 -0
  144. package/dist/data/cells/StatusDot.d.ts +11 -0
  145. package/dist/data/cells/StatusDot.d.ts.map +1 -0
  146. package/dist/data/cells/StatusDot.js +38 -0
  147. package/dist/data/cells/StatusDot.js.map +1 -0
  148. package/dist/data/cells/TagList.d.ts +59 -0
  149. package/dist/data/cells/TagList.d.ts.map +1 -0
  150. package/dist/data/cells/TagList.js +257 -0
  151. package/dist/data/cells/TagList.js.map +1 -0
  152. package/dist/data/cells/Timestamp.d.ts +46 -0
  153. package/dist/data/cells/Timestamp.d.ts.map +1 -0
  154. package/dist/data/cells/Timestamp.js +146 -0
  155. package/dist/data/cells/Timestamp.js.map +1 -0
  156. package/dist/data/cells/status-mapping.d.ts +8 -0
  157. package/dist/data/cells/status-mapping.d.ts.map +1 -0
  158. package/dist/data/cells/status-mapping.js +44 -0
  159. package/dist/data/cells/status-mapping.js.map +1 -0
  160. package/dist/data/code-highlight.d.ts +12 -0
  161. package/dist/data/code-highlight.d.ts.map +1 -0
  162. package/dist/data/code-highlight.js +28 -0
  163. package/dist/data/code-highlight.js.map +1 -0
  164. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +9 -0
  165. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -0
  166. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +445 -0
  167. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -0
  168. package/dist/data/diagnostics/DiagnosticsTree.d.ts +9 -0
  169. package/dist/data/diagnostics/DiagnosticsTree.d.ts.map +1 -0
  170. package/dist/data/diagnostics/DiagnosticsTree.js +78 -0
  171. package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -0
  172. package/dist/data/diagnostics/ErrorDetails.d.ts +20 -0
  173. package/dist/data/diagnostics/ErrorDetails.d.ts.map +1 -0
  174. package/dist/data/diagnostics/ErrorDetails.js +157 -0
  175. package/dist/data/diagnostics/ErrorDetails.js.map +1 -0
  176. package/dist/data/diagnostics/GoroutineCard.d.ts +10 -0
  177. package/dist/data/diagnostics/GoroutineCard.d.ts.map +1 -0
  178. package/dist/data/diagnostics/GoroutineCard.js +75 -0
  179. package/dist/data/diagnostics/GoroutineCard.js.map +1 -0
  180. package/dist/data/diagnostics/JvmStackTrace.d.ts +11 -0
  181. package/dist/data/diagnostics/JvmStackTrace.d.ts.map +1 -0
  182. package/dist/data/diagnostics/JvmStackTrace.js +26 -0
  183. package/dist/data/diagnostics/JvmStackTrace.js.map +1 -0
  184. package/dist/data/diagnostics/RenderedStackTrace.d.ts +18 -0
  185. package/dist/data/diagnostics/RenderedStackTrace.d.ts.map +1 -0
  186. package/dist/data/diagnostics/RenderedStackTrace.js +235 -0
  187. package/dist/data/diagnostics/RenderedStackTrace.js.map +1 -0
  188. package/dist/data/diagnostics/ThreadCard.d.ts +10 -0
  189. package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -0
  190. package/dist/data/diagnostics/ThreadCard.js +78 -0
  191. package/dist/data/diagnostics/ThreadCard.js.map +1 -0
  192. package/dist/data/diagnostics/error-diagnostics.d.ts +26 -0
  193. package/dist/data/diagnostics/error-diagnostics.d.ts.map +1 -0
  194. package/dist/data/diagnostics/error-diagnostics.js +108 -0
  195. package/dist/data/diagnostics/error-diagnostics.js.map +1 -0
  196. package/dist/data/diagnostics/fixtures.d.ts +3 -0
  197. package/dist/data/diagnostics/fixtures.d.ts.map +1 -0
  198. package/dist/data/diagnostics/jvm-stacktrace.d.ts +34 -0
  199. package/dist/data/diagnostics/jvm-stacktrace.d.ts.map +1 -0
  200. package/dist/data/diagnostics/jvm-stacktrace.js +190 -0
  201. package/dist/data/diagnostics/jvm-stacktrace.js.map +1 -0
  202. package/dist/data/diagnostics/stacktrace-parse.d.ts +11 -0
  203. package/dist/data/diagnostics/stacktrace-parse.d.ts.map +1 -0
  204. package/dist/data/diagnostics/stacktrace-parse.js +87 -0
  205. package/dist/data/diagnostics/stacktrace-parse.js.map +1 -0
  206. package/dist/data/diagnostics/stacktrace.d.ts +38 -0
  207. package/dist/data/diagnostics/stacktrace.d.ts.map +1 -0
  208. package/dist/data/diagnostics/stacktrace.js +119 -0
  209. package/dist/data/diagnostics/stacktrace.js.map +1 -0
  210. package/dist/data/diagnostics/types.d.ts +30 -0
  211. package/dist/data/diagnostics/types.d.ts.map +1 -0
  212. package/dist/data/diagnostics/utils.d.ts +8 -0
  213. package/dist/data/diagnostics/utils.d.ts.map +1 -0
  214. package/dist/data/diagnostics/utils.js +59 -0
  215. package/dist/data/diagnostics/utils.js.map +1 -0
  216. package/dist/data/har/HarPanel.d.ts +9 -0
  217. package/dist/data/har/HarPanel.d.ts.map +1 -0
  218. package/dist/data/har/HarPanel.js +175 -0
  219. package/dist/data/har/HarPanel.js.map +1 -0
  220. package/dist/data/har/fixtures.d.ts +3 -0
  221. package/dist/data/har/fixtures.d.ts.map +1 -0
  222. package/dist/data/har/types.d.ts +47 -0
  223. package/dist/data/har/types.d.ts.map +1 -0
  224. package/dist/data.d.ts +39 -0
  225. package/dist/data.d.ts.map +1 -0
  226. package/dist/data.js +109 -0
  227. package/dist/data.js.map +1 -0
  228. package/dist/hooks/use-density.d.ts +22 -0
  229. package/dist/hooks/use-density.d.ts.map +1 -0
  230. package/dist/hooks/use-density.js +54 -0
  231. package/dist/hooks/use-density.js.map +1 -0
  232. package/dist/hooks/use-history-route.d.ts +6 -0
  233. package/dist/hooks/use-history-route.d.ts.map +1 -0
  234. package/dist/hooks/use-history-route.js +31 -0
  235. package/dist/hooks/use-history-route.js.map +1 -0
  236. package/dist/hooks/use-sort.d.ts +17 -0
  237. package/dist/hooks/use-sort.d.ts.map +1 -0
  238. package/dist/hooks/use-sort.js +42 -0
  239. package/dist/hooks/use-sort.js.map +1 -0
  240. package/dist/hooks/use-theme.d.ts +17 -0
  241. package/dist/hooks/use-theme.d.ts.map +1 -0
  242. package/dist/hooks/use-theme.js +68 -0
  243. package/dist/hooks/use-theme.js.map +1 -0
  244. package/dist/hooks.d.ts +5 -0
  245. package/dist/hooks.d.ts.map +1 -0
  246. package/dist/hooks.js +14 -0
  247. package/dist/hooks.js.map +1 -0
  248. package/dist/index.d.ts +7 -0
  249. package/dist/index.d.ts.map +1 -0
  250. package/dist/index.js +193 -0
  251. package/dist/index.js.map +1 -0
  252. package/dist/layout/Section.d.ts +23 -0
  253. package/dist/layout/Section.d.ts.map +1 -0
  254. package/dist/layout/Section.js +73 -0
  255. package/dist/layout/Section.js.map +1 -0
  256. package/dist/layout/SplitPane.d.ts +13 -0
  257. package/dist/layout/SplitPane.d.ts.map +1 -0
  258. package/dist/layout/SplitPane.js +72 -0
  259. package/dist/layout/SplitPane.js.map +1 -0
  260. package/dist/lib/palette.d.ts +4 -0
  261. package/dist/lib/palette.d.ts.map +1 -0
  262. package/dist/lib/palette.js +35 -0
  263. package/dist/lib/palette.js.map +1 -0
  264. package/dist/lib/size.d.ts +6 -0
  265. package/dist/lib/size.d.ts.map +1 -0
  266. package/dist/lib/size.js +14 -0
  267. package/dist/lib/size.js.map +1 -0
  268. package/dist/lib/utils.d.ts +3 -0
  269. package/dist/lib/utils.d.ts.map +1 -0
  270. package/dist/lib/utils.js +9 -0
  271. package/dist/lib/utils.js.map +1 -0
  272. package/dist/overlay/HoverCard.d.ts +13 -0
  273. package/dist/overlay/HoverCard.d.ts.map +1 -0
  274. package/dist/overlay/HoverCard.js +170 -0
  275. package/dist/overlay/HoverCard.js.map +1 -0
  276. package/dist/overlay/Modal.d.ts +17 -0
  277. package/dist/overlay/Modal.d.ts.map +1 -0
  278. package/dist/overlay/Modal.js +91 -0
  279. package/dist/overlay/Modal.js.map +1 -0
  280. package/dist/rpc/AcceptPicker.d.ts +52 -0
  281. package/dist/rpc/AcceptPicker.d.ts.map +1 -0
  282. package/dist/rpc/AcceptPicker.js +126 -0
  283. package/dist/rpc/AcceptPicker.js.map +1 -0
  284. package/dist/rpc/ApiExplorer.d.ts +11 -0
  285. package/dist/rpc/ApiExplorer.d.ts.map +1 -0
  286. package/dist/rpc/ApiExplorer.js +37 -0
  287. package/dist/rpc/ApiExplorer.js.map +1 -0
  288. package/dist/rpc/CommandForm.d.ts +15 -0
  289. package/dist/rpc/CommandForm.d.ts.map +1 -0
  290. package/dist/rpc/CommandForm.js +356 -0
  291. package/dist/rpc/CommandForm.js.map +1 -0
  292. package/dist/rpc/CommandOutput.d.ts +11 -0
  293. package/dist/rpc/CommandOutput.d.ts.map +1 -0
  294. package/dist/rpc/CommandOutput.js +195 -0
  295. package/dist/rpc/CommandOutput.js.map +1 -0
  296. package/dist/rpc/EndpointList.d.ts +18 -0
  297. package/dist/rpc/EndpointList.d.ts.map +1 -0
  298. package/dist/rpc/EndpointList.js +56 -0
  299. package/dist/rpc/EndpointList.js.map +1 -0
  300. package/dist/rpc/EntityExplorerApp.d.ts +15 -0
  301. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -0
  302. package/dist/rpc/EntityExplorerApp.js +282 -0
  303. package/dist/rpc/EntityExplorerApp.js.map +1 -0
  304. package/dist/rpc/ExecutionResult.d.ts +14 -0
  305. package/dist/rpc/ExecutionResult.d.ts.map +1 -0
  306. package/dist/rpc/ExecutionResult.js +51 -0
  307. package/dist/rpc/ExecutionResult.js.map +1 -0
  308. package/dist/rpc/FilterForm.d.ts +22 -0
  309. package/dist/rpc/FilterForm.d.ts.map +1 -0
  310. package/dist/rpc/FilterForm.js +392 -0
  311. package/dist/rpc/FilterForm.js.map +1 -0
  312. package/dist/rpc/InlineError.d.ts +7 -0
  313. package/dist/rpc/InlineError.d.ts.map +1 -0
  314. package/dist/rpc/InlineError.js +54 -0
  315. package/dist/rpc/InlineError.js.map +1 -0
  316. package/dist/rpc/OperationActionDialog.d.ts +12 -0
  317. package/dist/rpc/OperationActionDialog.d.ts.map +1 -0
  318. package/dist/rpc/OperationActionDialog.js +105 -0
  319. package/dist/rpc/OperationActionDialog.js.map +1 -0
  320. package/dist/rpc/OperationCatalog.d.ts +21 -0
  321. package/dist/rpc/OperationCatalog.d.ts.map +1 -0
  322. package/dist/rpc/OperationCatalog.js +339 -0
  323. package/dist/rpc/OperationCatalog.js.map +1 -0
  324. package/dist/rpc/OperationCommandPage.d.ts +22 -0
  325. package/dist/rpc/OperationCommandPage.d.ts.map +1 -0
  326. package/dist/rpc/OperationCommandPage.js +484 -0
  327. package/dist/rpc/OperationCommandPage.js.map +1 -0
  328. package/dist/rpc/OperationEntityPage.d.ts +23 -0
  329. package/dist/rpc/OperationEntityPage.d.ts.map +1 -0
  330. package/dist/rpc/OperationEntityPage.js +218 -0
  331. package/dist/rpc/OperationEntityPage.js.map +1 -0
  332. package/dist/rpc/classify.d.ts +8 -0
  333. package/dist/rpc/classify.d.ts.map +1 -0
  334. package/dist/rpc/classify.js +76 -0
  335. package/dist/rpc/classify.js.map +1 -0
  336. package/dist/rpc/clickyMetadata.d.ts +12 -0
  337. package/dist/rpc/clickyMetadata.d.ts.map +1 -0
  338. package/dist/rpc/clickyMetadata.js +71 -0
  339. package/dist/rpc/clickyMetadata.js.map +1 -0
  340. package/dist/rpc/formMetadata.d.ts +27 -0
  341. package/dist/rpc/formMetadata.d.ts.map +1 -0
  342. package/dist/rpc/formMetadata.js +250 -0
  343. package/dist/rpc/formMetadata.js.map +1 -0
  344. package/dist/rpc/types.d.ts +109 -0
  345. package/dist/rpc/types.d.ts.map +1 -0
  346. package/dist/rpc/types.js +8 -0
  347. package/dist/rpc/types.js.map +1 -0
  348. package/dist/rpc/useOperations.d.ts +346 -0
  349. package/dist/rpc/useOperations.d.ts.map +1 -0
  350. package/dist/rpc/useOperations.js +31 -0
  351. package/dist/rpc/useOperations.js.map +1 -0
  352. package/dist/rpc.d.ts +14 -0
  353. package/dist/rpc.d.ts.map +1 -0
  354. package/dist/rpc.js +37 -0
  355. package/dist/rpc.js.map +1 -0
  356. package/dist/styles.css +2 -0
  357. package/dist/styles.d.ts +1 -0
  358. package/dist/styles.d.ts.map +1 -0
  359. package/dist/styles.js +2 -0
  360. package/dist/styles.js.map +1 -0
  361. package/dist/tailwind-preset.d.ts +4 -0
  362. package/dist/tailwind-preset.d.ts.map +1 -0
  363. package/dist/tailwind-preset.js +69 -0
  364. package/dist/tailwind-preset.js.map +1 -0
  365. package/dist/utils.d.ts +4 -0
  366. package/dist/utils.d.ts.map +1 -0
  367. package/dist/utils.js +12 -0
  368. package/dist/utils.js.map +1 -0
  369. package/package.json +83 -40
  370. package/dist/index.d.mts +0 -834
  371. package/dist/index.d.mts.map +0 -1
  372. package/dist/index.mjs +0 -2918
  373. package/dist/index.mjs.map +0 -1
  374. package/dist/tailwind-preset.d.mts +0 -7
  375. package/dist/tailwind-preset.d.mts.map +0 -1
  376. package/dist/tailwind-preset.mjs +0 -64
  377. package/dist/tailwind-preset.mjs.map +0 -1
  378. package/src/styles/tokens.css +0 -78
@@ -0,0 +1,218 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo } from "react";
3
+ import { useQuery } from "@tanstack/react-query";
4
+ import { Button } from "../components/button.js";
5
+ import { MethodBadge } from "../data/MethodBadge.js";
6
+ import { Modal } from "../overlay/Modal.js";
7
+ import { filterOperationsByDomain, findListEndpoint, findDetailEndpointForList } from "./classify.js";
8
+ import { filterOperationsBySurface, findSurfaceListOperation, findSurfaceDetailOperation, findSurfaceEntityActions } from "./clickyMetadata.js";
9
+ import { ExecutionResult } from "./ExecutionResult.js";
10
+ import { FilterForm } from "./FilterForm.js";
11
+ import { packParameterValues } from "./formMetadata.js";
12
+ import { useOperations } from "./useOperations.js";
13
+ function defaultRenderError(err, title) {
14
+ const message = err instanceof Error ? err.message : String(err ?? "");
15
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive", children: [
16
+ /* @__PURE__ */ jsx("div", { className: "font-medium", children: title }),
17
+ message && /* @__PURE__ */ jsx("div", { className: "mt-1 whitespace-pre-wrap text-xs opacity-80", children: message })
18
+ ] });
19
+ }
20
+ function OperationEntityPage({
21
+ id,
22
+ definition,
23
+ entities,
24
+ client,
25
+ renderLink,
26
+ allOperations = false,
27
+ operationIdPrefix,
28
+ listOperationId,
29
+ detailOperationId,
30
+ surfaceKey,
31
+ backHref,
32
+ backLabel = "Back",
33
+ renderError = defaultRenderError,
34
+ commandRuntime
35
+ }) {
36
+ const { operations, isLoading } = useOperations(client);
37
+ const [activeAction, setActiveAction] = useState(null);
38
+ const [actionResult, setActionResult] = useState(null);
39
+ const [actionError, setActionError] = useState("");
40
+ const [isExecutingAction, setIsExecutingAction] = useState(false);
41
+ const surfaceOps = useMemo(
42
+ () => filterOperationsBySurface(operations, surfaceKey),
43
+ [operations, surfaceKey]
44
+ );
45
+ const useSurfaceMetadata = surfaceOps.length > 0;
46
+ const domainOps = useMemo(() => {
47
+ if (useSurfaceMetadata) {
48
+ return surfaceOps;
49
+ }
50
+ return (allOperations ? operations : filterOperationsByDomain(operations, entities)).filter(
51
+ (op) => operationIdPrefix ? (op.operation.operationId ?? "").startsWith(operationIdPrefix) : true
52
+ );
53
+ }, [allOperations, entities, operationIdPrefix, operations, surfaceOps, useSurfaceMetadata]);
54
+ const listEndpoint = useMemo(() => {
55
+ if (useSurfaceMetadata) {
56
+ return findSurfaceListOperation(domainOps, surfaceKey);
57
+ }
58
+ const explicitList = listOperationId ? domainOps.find((op) => op.method === "get" && op.operation.operationId === listOperationId) : void 0;
59
+ return explicitList ?? findListEndpoint(domainOps, entities);
60
+ }, [domainOps, entities, listOperationId, surfaceKey, useSurfaceMetadata]);
61
+ const resolvedDetailEndpoint = useMemo(() => {
62
+ if (useSurfaceMetadata) {
63
+ return findSurfaceDetailOperation(domainOps, surfaceKey);
64
+ }
65
+ return detailOperationId ? domainOps.find(
66
+ (op) => op.method === "get" && op.operation.operationId === detailOperationId
67
+ ) : findDetailEndpointForList(domainOps, listEndpoint);
68
+ }, [detailOperationId, domainOps, listEndpoint, surfaceKey, useSurfaceMetadata]);
69
+ const idParameterName = useMemo(
70
+ () => {
71
+ var _a, _b;
72
+ return ((_b = (_a = resolvedDetailEndpoint == null ? void 0 : resolvedDetailEndpoint.operation.parameters) == null ? void 0 : _a.find((param) => param.in === "path")) == null ? void 0 : _b.name) ?? "id";
73
+ },
74
+ [resolvedDetailEndpoint]
75
+ );
76
+ const detailValues = useMemo(() => id ? { [idParameterName]: id } : {}, [id, idParameterName]);
77
+ const actionOps = useMemo(() => {
78
+ if (useSurfaceMetadata) {
79
+ return findSurfaceEntityActions(domainOps, surfaceKey);
80
+ }
81
+ return resolvedDetailEndpoint == null ? [] : domainOps.filter(
82
+ (op) => op.method !== "get" && op.path.startsWith(`${resolvedDetailEndpoint.path}/`)
83
+ );
84
+ }, [domainOps, resolvedDetailEndpoint, surfaceKey, useSurfaceMetadata]);
85
+ const detailQuery = useQuery({
86
+ queryKey: ["entity-detail", definition.key, id, resolvedDetailEndpoint == null ? void 0 : resolvedDetailEndpoint.path],
87
+ queryFn: async () => client.executeCommand(
88
+ resolvedDetailEndpoint.path,
89
+ resolvedDetailEndpoint.method,
90
+ detailValues,
91
+ { Accept: "application/json+clicky" }
92
+ ),
93
+ enabled: !!resolvedDetailEndpoint && !!id,
94
+ staleTime: 3e4,
95
+ retry: 0
96
+ });
97
+ const backLink = backHref == null ? null : renderLink ? renderLink({
98
+ to: backHref,
99
+ className: "text-sm text-primary underline-offset-4 hover:underline",
100
+ children: backLabel
101
+ }) : /* @__PURE__ */ jsx("a", { href: backHref, className: "text-sm text-primary underline-offset-4 hover:underline", children: backLabel });
102
+ async function executeAction(values) {
103
+ if (!activeAction) return;
104
+ setIsExecutingAction(true);
105
+ setActionError("");
106
+ try {
107
+ const response = await client.executeCommand(
108
+ activeAction.path,
109
+ activeAction.method,
110
+ packParameterValues(values, activeAction.operation.parameters ?? []),
111
+ { Accept: "application/json+clicky" }
112
+ );
113
+ setActionResult(response);
114
+ await detailQuery.refetch();
115
+ } catch (err) {
116
+ setActionResult(null);
117
+ setActionError(err instanceof Error ? err.message : String(err ?? "Unknown error"));
118
+ } finally {
119
+ setIsExecutingAction(false);
120
+ }
121
+ }
122
+ if (isLoading) {
123
+ return /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: "Loading entity…" });
124
+ }
125
+ if (!resolvedDetailEndpoint || !id) {
126
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
127
+ backLink,
128
+ /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: "Unknown entity detail route." })
129
+ ] });
130
+ }
131
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
132
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4", children: [
133
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-2", children: [
134
+ backLink,
135
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
136
+ /* @__PURE__ */ jsx(MethodBadge, { method: resolvedDetailEndpoint.method }),
137
+ /* @__PURE__ */ jsx("code", { className: "rounded-md bg-muted px-2 py-1 text-sm", children: resolvedDetailEndpoint.path })
138
+ ] }),
139
+ /* @__PURE__ */ jsxs("div", { children: [
140
+ /* @__PURE__ */ jsxs("h1", { className: "text-2xl font-semibold tracking-tight", children: [
141
+ definition.title,
142
+ ": ",
143
+ id
144
+ ] }),
145
+ /* @__PURE__ */ jsx("p", { className: "mt-1 max-w-3xl text-sm text-muted-foreground", children: definition.description })
146
+ ] })
147
+ ] }),
148
+ actionOps.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 flex-wrap justify-end gap-2", children: actionOps.map((op) => /* @__PURE__ */ jsx(
149
+ Button,
150
+ {
151
+ type: "button",
152
+ variant: "outline",
153
+ size: "sm",
154
+ onClick: () => {
155
+ setActiveAction(op);
156
+ setActionResult(null);
157
+ setActionError("");
158
+ },
159
+ children: op.operation.summary || op.operation.operationId || op.path
160
+ },
161
+ `${op.method}:${op.path}`
162
+ )) })
163
+ ] }),
164
+ detailQuery.isLoading ? /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: "Loading detail…" }) : detailQuery.isError ? renderError(detailQuery.error, `Failed to load ${resolvedDetailEndpoint.path}`) : /* @__PURE__ */ jsxs("section", { className: "rounded-xl border bg-card p-4", children: [
165
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-medium", children: "Entity detail" }),
166
+ /* @__PURE__ */ jsx(
167
+ ExecutionResult,
168
+ {
169
+ response: detailQuery.data ?? null,
170
+ ...commandRuntime ? { commandRuntime } : {}
171
+ }
172
+ )
173
+ ] }),
174
+ /* @__PURE__ */ jsx(
175
+ Modal,
176
+ {
177
+ open: activeAction != null,
178
+ onClose: () => setActiveAction(null),
179
+ title: (activeAction == null ? void 0 : activeAction.operation.summary) || (activeAction == null ? void 0 : activeAction.operation.operationId) || "Action",
180
+ size: "lg",
181
+ children: activeAction && /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
182
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
183
+ /* @__PURE__ */ jsx(MethodBadge, { method: activeAction.method }),
184
+ /* @__PURE__ */ jsx("code", { className: "rounded-md bg-muted px-2 py-1 text-sm", children: activeAction.path })
185
+ ] }),
186
+ /* @__PURE__ */ jsx(
187
+ FilterForm,
188
+ {
189
+ client,
190
+ path: activeAction.path,
191
+ method: activeAction.method,
192
+ parameters: activeAction.operation.parameters ?? [],
193
+ lockedValues: { [idParameterName]: id },
194
+ hideLocked: true,
195
+ enableLookup: false,
196
+ submitLabel: "Execute request",
197
+ submittingLabel: "Executing…",
198
+ isSubmitting: isExecutingAction,
199
+ onSubmit: executeAction
200
+ }
201
+ ),
202
+ actionError ? /* @__PURE__ */ jsx("div", { className: "rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive", children: actionError }) : actionResult ? /* @__PURE__ */ jsx(
203
+ ExecutionResult,
204
+ {
205
+ response: actionResult,
206
+ className: "mt-0",
207
+ ...commandRuntime ? { commandRuntime } : {}
208
+ }
209
+ ) : null
210
+ ] })
211
+ }
212
+ )
213
+ ] });
214
+ }
215
+ export {
216
+ OperationEntityPage
217
+ };
218
+ //# sourceMappingURL=OperationEntityPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationEntityPage.js","sources":["../../src/rpc/OperationEntityPage.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { Button } from \"../components/button\";\nimport type { ClickyCommandRuntime } from \"../data/Clicky\";\nimport { MethodBadge } from \"../data/MethodBadge\";\nimport { Modal } from \"../overlay/Modal\";\nimport { filterOperationsByDomain, findDetailEndpointForList, findListEndpoint } from \"./classify\";\nimport {\n filterOperationsBySurface,\n findSurfaceDetailOperation,\n findSurfaceEntityActions,\n findSurfaceListOperation,\n} from \"./clickyMetadata\";\nimport { ExecutionResult } from \"./ExecutionResult\";\nimport { FilterForm } from \"./FilterForm\";\nimport { packParameterValues } from \"./formMetadata\";\nimport type { RenderLink } from \"./EndpointList\";\nimport type { DomainDefinition, ExecutionResponse, ResolvedOperation } from \"./types\";\nimport { useOperations, type OperationsApiClient } from \"./useOperations\";\n\nexport type OperationEntityPageProps = {\n id?: string;\n definition: DomainDefinition;\n entities: string[];\n client: OperationsApiClient;\n renderLink?: RenderLink;\n allOperations?: boolean;\n operationIdPrefix?: string;\n listOperationId?: string;\n detailOperationId?: string;\n surfaceKey?: string;\n backHref?: string;\n backLabel?: string;\n renderError?: (err: unknown, title: string) => ReactNode;\n commandRuntime?: ClickyCommandRuntime;\n};\n\nfunction defaultRenderError(err: unknown, title: string) {\n const message = err instanceof Error ? err.message : String(err ?? \"\");\n return (\n <div className=\"rounded-xl border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <div className=\"font-medium\">{title}</div>\n {message && <div className=\"mt-1 whitespace-pre-wrap text-xs opacity-80\">{message}</div>}\n </div>\n );\n}\n\nexport function OperationEntityPage({\n id,\n definition,\n entities,\n client,\n renderLink,\n allOperations = false,\n operationIdPrefix,\n listOperationId,\n detailOperationId,\n surfaceKey,\n backHref,\n backLabel = \"Back\",\n renderError = defaultRenderError,\n commandRuntime,\n}: OperationEntityPageProps) {\n const { operations, isLoading } = useOperations(client);\n const [activeAction, setActiveAction] = useState<ResolvedOperation | null>(null);\n const [actionResult, setActionResult] = useState<ExecutionResponse | null>(null);\n const [actionError, setActionError] = useState(\"\");\n const [isExecutingAction, setIsExecutingAction] = useState(false);\n const surfaceOps = useMemo(\n () => filterOperationsBySurface(operations, surfaceKey),\n [operations, surfaceKey],\n );\n const useSurfaceMetadata = surfaceOps.length > 0;\n\n const domainOps = useMemo(() => {\n if (useSurfaceMetadata) {\n return surfaceOps;\n }\n\n return (allOperations ? operations : filterOperationsByDomain(operations, entities)).filter(\n (op) =>\n operationIdPrefix ? (op.operation.operationId ?? \"\").startsWith(operationIdPrefix) : true,\n );\n }, [allOperations, entities, operationIdPrefix, operations, surfaceOps, useSurfaceMetadata]);\n\n const listEndpoint = useMemo(() => {\n if (useSurfaceMetadata) {\n return findSurfaceListOperation(domainOps, surfaceKey);\n }\n\n const explicitList = listOperationId\n ? domainOps.find((op) => op.method === \"get\" && op.operation.operationId === listOperationId)\n : undefined;\n return explicitList ?? findListEndpoint(domainOps, entities);\n }, [domainOps, entities, listOperationId, surfaceKey, useSurfaceMetadata]);\n\n const resolvedDetailEndpoint = useMemo(() => {\n if (useSurfaceMetadata) {\n return findSurfaceDetailOperation(domainOps, surfaceKey);\n }\n\n return detailOperationId\n ? domainOps.find(\n (op) => op.method === \"get\" && op.operation.operationId === detailOperationId,\n )\n : findDetailEndpointForList(domainOps, listEndpoint);\n }, [detailOperationId, domainOps, listEndpoint, surfaceKey, useSurfaceMetadata]);\n\n const idParameterName = useMemo(\n () =>\n resolvedDetailEndpoint?.operation.parameters?.find((param) => param.in === \"path\")?.name ??\n \"id\",\n [resolvedDetailEndpoint],\n );\n const detailValues = useMemo(() => (id ? { [idParameterName]: id } : {}), [id, idParameterName]);\n const actionOps = useMemo(() => {\n if (useSurfaceMetadata) {\n return findSurfaceEntityActions(domainOps, surfaceKey);\n }\n\n return resolvedDetailEndpoint == null\n ? []\n : domainOps.filter(\n (op) => op.method !== \"get\" && op.path.startsWith(`${resolvedDetailEndpoint.path}/`),\n );\n }, [domainOps, resolvedDetailEndpoint, surfaceKey, useSurfaceMetadata]);\n\n const detailQuery = useQuery({\n queryKey: [\"entity-detail\", definition.key, id, resolvedDetailEndpoint?.path],\n queryFn: async () =>\n client.executeCommand(\n resolvedDetailEndpoint!.path,\n resolvedDetailEndpoint!.method,\n detailValues,\n { Accept: \"application/json+clicky\" },\n ),\n enabled: !!resolvedDetailEndpoint && !!id,\n staleTime: 30_000,\n retry: 0,\n });\n\n const backLink =\n backHref == null ? null : renderLink ? (\n renderLink({\n to: backHref,\n className: \"text-sm text-primary underline-offset-4 hover:underline\",\n children: backLabel,\n })\n ) : (\n <a href={backHref} className=\"text-sm text-primary underline-offset-4 hover:underline\">\n {backLabel}\n </a>\n );\n\n async function executeAction(values: Record<string, string>) {\n if (!activeAction) return;\n setIsExecutingAction(true);\n setActionError(\"\");\n\n try {\n const response = await client.executeCommand(\n activeAction.path,\n activeAction.method,\n packParameterValues(values, activeAction.operation.parameters ?? []),\n { Accept: \"application/json+clicky\" },\n );\n setActionResult(response);\n await detailQuery.refetch();\n } catch (err) {\n setActionResult(null);\n setActionError(err instanceof Error ? err.message : String(err ?? \"Unknown error\"));\n } finally {\n setIsExecutingAction(false);\n }\n }\n\n if (isLoading) {\n return <div className=\"text-sm text-muted-foreground\">Loading entity…</div>;\n }\n\n if (!resolvedDetailEndpoint || !id) {\n return (\n <div className=\"space-y-4\">\n {backLink}\n <div className=\"text-sm text-muted-foreground\">Unknown entity detail route.</div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0 space-y-2\">\n {backLink}\n <div className=\"flex items-center gap-3\">\n <MethodBadge method={resolvedDetailEndpoint.method} />\n <code className=\"rounded-md bg-muted px-2 py-1 text-sm\">\n {resolvedDetailEndpoint.path}\n </code>\n </div>\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">\n {definition.title}: {id}\n </h1>\n <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">{definition.description}</p>\n </div>\n </div>\n {actionOps.length > 0 && (\n <div className=\"flex shrink-0 flex-wrap justify-end gap-2\">\n {actionOps.map((op) => (\n <Button\n key={`${op.method}:${op.path}`}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setActiveAction(op);\n setActionResult(null);\n setActionError(\"\");\n }}\n >\n {op.operation.summary || op.operation.operationId || op.path}\n </Button>\n ))}\n </div>\n )}\n </div>\n\n {detailQuery.isLoading ? (\n <div className=\"text-sm text-muted-foreground\">Loading detail…</div>\n ) : detailQuery.isError ? (\n renderError(detailQuery.error, `Failed to load ${resolvedDetailEndpoint.path}`)\n ) : (\n <section className=\"rounded-xl border bg-card p-4\">\n <h2 className=\"text-lg font-medium\">Entity detail</h2>\n <ExecutionResult\n response={detailQuery.data ?? null}\n {...(commandRuntime ? { commandRuntime } : {})}\n />\n </section>\n )}\n\n <Modal\n open={activeAction != null}\n onClose={() => setActiveAction(null)}\n title={activeAction?.operation.summary || activeAction?.operation.operationId || \"Action\"}\n size=\"lg\"\n >\n {activeAction && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-3\">\n <MethodBadge method={activeAction.method} />\n <code className=\"rounded-md bg-muted px-2 py-1 text-sm\">{activeAction.path}</code>\n </div>\n <FilterForm\n client={client}\n path={activeAction.path}\n method={activeAction.method}\n parameters={activeAction.operation.parameters ?? []}\n lockedValues={{ [idParameterName]: id }}\n hideLocked\n enableLookup={false}\n submitLabel=\"Execute request\"\n submittingLabel=\"Executing…\"\n isSubmitting={isExecutingAction}\n onSubmit={executeAction}\n />\n {actionError ? (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive\">\n {actionError}\n </div>\n ) : actionResult ? (\n <ExecutionResult\n response={actionResult}\n className=\"mt-0\"\n {...(commandRuntime ? { commandRuntime } : {})}\n />\n ) : null}\n </div>\n )}\n </Modal>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionResponse, ResolvedOperation } from './types';
2
+ export declare function findListEndpoint(operations: ResolvedOperation[], entities: string[]): ResolvedOperation | undefined;
3
+ export declare function findDetailEndpoint(operations: ResolvedOperation[]): ResolvedOperation | undefined;
4
+ export declare function findDetailEndpointForList(operations: ResolvedOperation[], listEndpoint: ResolvedOperation | undefined): ResolvedOperation | undefined;
5
+ export declare function parseJsonBody(response: ExecutionResponse | undefined): unknown;
6
+ export declare function normalizeRows(data: unknown): Record<string, unknown>[];
7
+ export declare function filterOperationsByDomain(operations: ResolvedOperation[], entities: string[]): ResolvedOperation[];
8
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/rpc/classify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAO5F,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,iBAAiB,EAAE,EAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,iBAAiB,GAAG,SAAS,CAO/B;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,GAAG,SAAS,CAMjG;AAUD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,YAAY,EAAE,iBAAiB,GAAG,SAAS,GAC1C,iBAAiB,GAAG,SAAS,CA2B/B;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAS9E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAQtE;AAMD,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,iBAAiB,EAAE,CAIrB"}
@@ -0,0 +1,76 @@
1
+ import { isPositionalParam } from "./types.js";
2
+ function findListEndpoint(operations, entities) {
3
+ const wanted = new Set(entities.map((e) => `${e}_list`));
4
+ if (wanted.size === 0) return void 0;
5
+ return operations.find(
6
+ (op) => op.method === "get" && !!op.operation.operationId && wanted.has(op.operation.operationId)
7
+ );
8
+ }
9
+ function findDetailEndpoint(operations) {
10
+ return operations.find(
11
+ (op) => {
12
+ var _a;
13
+ return op.method === "get" && ((_a = op.operation.parameters) == null ? void 0 : _a.some((p) => p.in === "path" || isPositionalParam(p)));
14
+ }
15
+ );
16
+ }
17
+ function splitPath(path) {
18
+ return path.split("/").filter(Boolean);
19
+ }
20
+ function findDetailEndpointForList(operations, listEndpoint) {
21
+ if (!listEndpoint) {
22
+ return findDetailEndpoint(operations);
23
+ }
24
+ const baseSegments = splitPath(listEndpoint.path);
25
+ const candidates = operations.filter(
26
+ (op) => {
27
+ var _a;
28
+ return op.method === "get" && op.path !== listEndpoint.path && ((_a = op.operation.parameters) == null ? void 0 : _a.some((p) => p.in === "path" || isPositionalParam(p)));
29
+ }
30
+ );
31
+ const exactChild = candidates.find((op) => {
32
+ const segments = splitPath(op.path);
33
+ if (segments.length !== baseSegments.length + 1) {
34
+ return false;
35
+ }
36
+ return baseSegments.every((segment, index) => segments[index] === segment);
37
+ });
38
+ if (exactChild) {
39
+ return exactChild;
40
+ }
41
+ const descendant = candidates.find((op) => op.path.startsWith(`${listEndpoint.path}/`));
42
+ return descendant ?? findDetailEndpoint(operations);
43
+ }
44
+ function parseJsonBody(response) {
45
+ if (!response) return null;
46
+ const text = response.stdout || response.output || "";
47
+ if (!text.trim()) return null;
48
+ try {
49
+ return JSON.parse(text);
50
+ } catch {
51
+ return null;
52
+ }
53
+ }
54
+ function normalizeRows(data) {
55
+ if (Array.isArray(data)) return data;
56
+ if (data && typeof data === "object") {
57
+ for (const value of Object.values(data)) {
58
+ if (Array.isArray(value)) return value;
59
+ }
60
+ }
61
+ return [];
62
+ }
63
+ function filterOperationsByDomain(operations, entities) {
64
+ if (entities.length === 0) return [];
65
+ const wanted = new Set(entities);
66
+ return operations.filter((op) => (op.operation.tags ?? []).some((tag) => wanted.has(tag)));
67
+ }
68
+ export {
69
+ filterOperationsByDomain,
70
+ findDetailEndpoint,
71
+ findDetailEndpointForList,
72
+ findListEndpoint,
73
+ normalizeRows,
74
+ parseJsonBody
75
+ };
76
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sources":["../../src/rpc/classify.ts"],"sourcesContent":["import { isPositionalParam, type ExecutionResponse, type ResolvedOperation } from \"./types\";\n\n// findListEndpoint picks the canonical list operation for a set of\n// entities. Clicky-rpc auto-registers `<entity> list` commands and mints\n// operationIds of the form `<entity>_list`. Matching exactly on that form\n// keeps the default table view deterministic — a non-list GET never gets\n// promoted to list by accident.\nexport function findListEndpoint(\n operations: ResolvedOperation[],\n entities: string[],\n): ResolvedOperation | undefined {\n const wanted = new Set(entities.map((e) => `${e}_list`));\n if (wanted.size === 0) return undefined;\n return operations.find(\n (op) =>\n op.method === \"get\" && !!op.operation.operationId && wanted.has(op.operation.operationId),\n );\n}\n\nexport function findDetailEndpoint(operations: ResolvedOperation[]): ResolvedOperation | undefined {\n return operations.find(\n (op) =>\n op.method === \"get\" &&\n op.operation.parameters?.some((p) => p.in === \"path\" || isPositionalParam(p)),\n );\n}\n\nfunction splitPath(path: string) {\n return path.split(\"/\").filter(Boolean);\n}\n\n// findDetailEndpointForList prefers the detail GET that belongs to the\n// resolved list route. This keeps sibling surfaces that share tags\n// (for example `stack_*` and `admin_stack_*`) from cross-contaminating\n// default entity-detail routing.\nexport function findDetailEndpointForList(\n operations: ResolvedOperation[],\n listEndpoint: ResolvedOperation | undefined,\n): ResolvedOperation | undefined {\n if (!listEndpoint) {\n return findDetailEndpoint(operations);\n }\n\n const baseSegments = splitPath(listEndpoint.path);\n const candidates = operations.filter(\n (op) =>\n op.method === \"get\" &&\n op.path !== listEndpoint.path &&\n op.operation.parameters?.some((p) => p.in === \"path\" || isPositionalParam(p)),\n );\n\n const exactChild = candidates.find((op) => {\n const segments = splitPath(op.path);\n if (segments.length !== baseSegments.length + 1) {\n return false;\n }\n return baseSegments.every((segment, index) => segments[index] === segment);\n });\n\n if (exactChild) {\n return exactChild;\n }\n\n const descendant = candidates.find((op) => op.path.startsWith(`${listEndpoint.path}/`));\n return descendant ?? findDetailEndpoint(operations);\n}\n\nexport function parseJsonBody(response: ExecutionResponse | undefined): unknown {\n if (!response) return null;\n const text = response.stdout || response.output || \"\";\n if (!text.trim()) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n\nexport function normalizeRows(data: unknown): Record<string, unknown>[] {\n if (Array.isArray(data)) return data as Record<string, unknown>[];\n if (data && typeof data === \"object\") {\n for (const value of Object.values(data)) {\n if (Array.isArray(value)) return value as Record<string, unknown>[];\n }\n }\n return [];\n}\n\n// filterOperationsByDomain returns operations whose OpenAPI `tags` intersect\n// the given entity list. Clicky-rpc's converter stamps the parent command\n// name into `op.tags`, so passing the entities that belong to a domain\n// yields that domain's operations.\nexport function filterOperationsByDomain(\n operations: ResolvedOperation[],\n entities: string[],\n): ResolvedOperation[] {\n if (entities.length === 0) return [];\n const wanted = new Set(entities);\n return operations.filter((op) => (op.operation.tags ?? []).some((tag) => wanted.has(tag)));\n}\n"],"names":[],"mappings":";AAOO,SAAS,iBACd,YACA,UAC+B;AAC/B,QAAM,SAAS,IAAI,IAAI,SAAS,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC;AACvD,MAAI,OAAO,SAAS,EAAG,QAAO;AAC9B,SAAO,WAAW;AAAA,IAChB,CAAC,OACC,GAAG,WAAW,SAAS,CAAC,CAAC,GAAG,UAAU,eAAe,OAAO,IAAI,GAAG,UAAU,WAAW;AAAA,EAAA;AAE9F;AAEO,SAAS,mBAAmB,YAAgE;AACjG,SAAO,WAAW;AAAA,IAChB,CAAC,OAAA;;AACC,gBAAG,WAAW,WACd,QAAG,UAAU,eAAb,mBAAyB,KAAK,CAAC,MAAM,EAAE,OAAO,UAAU,kBAAkB,CAAC;AAAA;AAAA,EAAC;AAElF;AAEA,SAAS,UAAU,MAAc;AAC/B,SAAO,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AACvC;AAMO,SAAS,0BACd,YACA,cAC+B;AAC/B,MAAI,CAAC,cAAc;AACjB,WAAO,mBAAmB,UAAU;AAAA,EACtC;AAEA,QAAM,eAAe,UAAU,aAAa,IAAI;AAChD,QAAM,aAAa,WAAW;AAAA,IAC5B,CAAC;;AACC,gBAAG,WAAW,SACd,GAAG,SAAS,aAAa,UACzB,QAAG,UAAU,eAAb,mBAAyB,KAAK,CAAC,MAAM,EAAE,OAAO,UAAU,kBAAkB,CAAC;AAAA;AAAA,EAAC;AAGhF,QAAM,aAAa,WAAW,KAAK,CAAC,OAAO;AACzC,UAAM,WAAW,UAAU,GAAG,IAAI;AAClC,QAAI,SAAS,WAAW,aAAa,SAAS,GAAG;AAC/C,aAAO;AAAA,IACT;AACA,WAAO,aAAa,MAAM,CAAC,SAAS,UAAU,SAAS,KAAK,MAAM,OAAO;AAAA,EAC3E,CAAC;AAED,MAAI,YAAY;AACd,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,WAAW,KAAK,CAAC,OAAO,GAAG,KAAK,WAAW,GAAG,aAAa,IAAI,GAAG,CAAC;AACtF,SAAO,cAAc,mBAAmB,UAAU;AACpD;AAEO,SAAS,cAAc,UAAkD;AAC9E,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,OAAO,SAAS,UAAU,SAAS,UAAU;AACnD,MAAI,CAAC,KAAK,KAAA,EAAQ,QAAO;AACzB,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,cAAc,MAA0C;AACtE,MAAI,MAAM,QAAQ,IAAI,EAAG,QAAO;AAChC,MAAI,QAAQ,OAAO,SAAS,UAAU;AACpC,eAAW,SAAS,OAAO,OAAO,IAAI,GAAG;AACvC,UAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AAAA,IACnC;AAAA,EACF;AACA,SAAO,CAAA;AACT;AAMO,SAAS,yBACd,YACA,UACqB;AACrB,MAAI,SAAS,WAAW,EAAG,QAAO,CAAA;AAClC,QAAM,SAAS,IAAI,IAAI,QAAQ;AAC/B,SAAO,WAAW,OAAO,CAAC,QAAQ,GAAG,UAAU,QAAQ,CAAA,GAAI,KAAK,CAAC,QAAQ,OAAO,IAAI,GAAG,CAAC,CAAC;AAC3F;"}
@@ -0,0 +1,12 @@
1
+ import { ClickyOperationMeta, ClickySpecMeta, ClickySurface, DomainDefinition, OpenAPISpec, ResolvedOperation } from './types';
2
+ export declare function getClickySpecMeta(spec: OpenAPISpec | undefined): ClickySpecMeta | undefined;
3
+ export declare function getClickySurfaces(spec: OpenAPISpec | undefined): ClickySurface[];
4
+ export declare function getOperationClickyMeta(operation: Pick<ResolvedOperation, "operation">): ClickyOperationMeta | undefined;
5
+ export declare function filterOperationsBySurface(operations: ResolvedOperation[], surfaceKey: string | undefined): ResolvedOperation[];
6
+ export declare function findSurfaceOperation(operations: ResolvedOperation[], surfaceKey: string | undefined, predicate: (meta: ClickyOperationMeta) => boolean): ResolvedOperation | undefined;
7
+ export declare function findSurfaceListOperation(operations: ResolvedOperation[], surfaceKey: string | undefined): ResolvedOperation | undefined;
8
+ export declare function findSurfaceDetailOperation(operations: ResolvedOperation[], surfaceKey: string | undefined): ResolvedOperation | undefined;
9
+ export declare function findSurfaceCollectionActions(operations: ResolvedOperation[], surfaceKey: string | undefined): ResolvedOperation[];
10
+ export declare function findSurfaceEntityActions(operations: ResolvedOperation[], surfaceKey: string | undefined): ResolvedOperation[];
11
+ export declare function makeSurfaceDefinition(surface: ClickySurface): DomainDefinition;
12
+ //# sourceMappingURL=clickyMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickyMetadata.d.ts","sourceRoot":"","sources":["../../src/rpc/clickyMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAE3F;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,EAAE,CAEhF;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,GAC9C,mBAAmB,GAAG,SAAS,CAEjC;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,iBAAiB,EAAE,CAKrB;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,OAAO,GAChD,iBAAiB,GAAG,SAAS,CAK/B;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,iBAAiB,GAAG,SAAS,CAM/B;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,iBAAiB,GAAG,SAAS,CAM/B;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,iBAAiB,EAAE,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,iBAAiB,EAAE,CAKrB;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,iBAAiB,EAAE,CAKrB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB,CAM9E"}
@@ -0,0 +1,71 @@
1
+ function getClickySpecMeta(spec) {
2
+ return spec == null ? void 0 : spec["x-clicky"];
3
+ }
4
+ function getClickySurfaces(spec) {
5
+ var _a;
6
+ return ((_a = getClickySpecMeta(spec)) == null ? void 0 : _a.surfaces) ?? [];
7
+ }
8
+ function getOperationClickyMeta(operation) {
9
+ return operation.operation["x-clicky"];
10
+ }
11
+ function filterOperationsBySurface(operations, surfaceKey) {
12
+ if (!surfaceKey) return [];
13
+ return operations.filter(
14
+ (operation) => {
15
+ var _a;
16
+ return ((_a = getOperationClickyMeta(operation)) == null ? void 0 : _a.surface) === surfaceKey;
17
+ }
18
+ );
19
+ }
20
+ function findSurfaceOperation(operations, surfaceKey, predicate) {
21
+ return filterOperationsBySurface(operations, surfaceKey).find((operation) => {
22
+ const meta = getOperationClickyMeta(operation);
23
+ return meta != null && predicate(meta);
24
+ });
25
+ }
26
+ function findSurfaceListOperation(operations, surfaceKey) {
27
+ return findSurfaceOperation(
28
+ operations,
29
+ surfaceKey,
30
+ (meta) => meta.verb === "list" && meta.scope === "collection"
31
+ );
32
+ }
33
+ function findSurfaceDetailOperation(operations, surfaceKey) {
34
+ return findSurfaceOperation(
35
+ operations,
36
+ surfaceKey,
37
+ (meta) => meta.verb === "get" && meta.scope === "entity"
38
+ );
39
+ }
40
+ function findSurfaceCollectionActions(operations, surfaceKey) {
41
+ return filterOperationsBySurface(operations, surfaceKey).filter((operation) => {
42
+ const meta = getOperationClickyMeta(operation);
43
+ return meta != null && meta.scope === "collection" && meta.verb !== "list";
44
+ });
45
+ }
46
+ function findSurfaceEntityActions(operations, surfaceKey) {
47
+ return filterOperationsBySurface(operations, surfaceKey).filter((operation) => {
48
+ const meta = getOperationClickyMeta(operation);
49
+ return meta != null && meta.scope === "entity" && meta.verb !== "get";
50
+ });
51
+ }
52
+ function makeSurfaceDefinition(surface) {
53
+ return {
54
+ key: surface.key,
55
+ title: surface.title,
56
+ description: surface.description || `Manage ${surface.title.toLowerCase()} resources.`
57
+ };
58
+ }
59
+ export {
60
+ filterOperationsBySurface,
61
+ findSurfaceCollectionActions,
62
+ findSurfaceDetailOperation,
63
+ findSurfaceEntityActions,
64
+ findSurfaceListOperation,
65
+ findSurfaceOperation,
66
+ getClickySpecMeta,
67
+ getClickySurfaces,
68
+ getOperationClickyMeta,
69
+ makeSurfaceDefinition
70
+ };
71
+ //# sourceMappingURL=clickyMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickyMetadata.js","sources":["../../src/rpc/clickyMetadata.ts"],"sourcesContent":["import type {\n ClickyOperationMeta,\n ClickySpecMeta,\n ClickySurface,\n DomainDefinition,\n OpenAPISpec,\n ResolvedOperation,\n} from \"./types\";\n\nexport function getClickySpecMeta(spec: OpenAPISpec | undefined): ClickySpecMeta | undefined {\n return spec?.[\"x-clicky\"];\n}\n\nexport function getClickySurfaces(spec: OpenAPISpec | undefined): ClickySurface[] {\n return getClickySpecMeta(spec)?.surfaces ?? [];\n}\n\nexport function getOperationClickyMeta(\n operation: Pick<ResolvedOperation, \"operation\">,\n): ClickyOperationMeta | undefined {\n return operation.operation[\"x-clicky\"];\n}\n\nexport function filterOperationsBySurface(\n operations: ResolvedOperation[],\n surfaceKey: string | undefined,\n): ResolvedOperation[] {\n if (!surfaceKey) return [];\n return operations.filter(\n (operation) => getOperationClickyMeta(operation)?.surface === surfaceKey,\n );\n}\n\nexport function findSurfaceOperation(\n operations: ResolvedOperation[],\n surfaceKey: string | undefined,\n predicate: (meta: ClickyOperationMeta) => boolean,\n): ResolvedOperation | undefined {\n return filterOperationsBySurface(operations, surfaceKey).find((operation) => {\n const meta = getOperationClickyMeta(operation);\n return meta != null && predicate(meta);\n });\n}\n\nexport function findSurfaceListOperation(\n operations: ResolvedOperation[],\n surfaceKey: string | undefined,\n): ResolvedOperation | undefined {\n return findSurfaceOperation(\n operations,\n surfaceKey,\n (meta) => meta.verb === \"list\" && meta.scope === \"collection\",\n );\n}\n\nexport function findSurfaceDetailOperation(\n operations: ResolvedOperation[],\n surfaceKey: string | undefined,\n): ResolvedOperation | undefined {\n return findSurfaceOperation(\n operations,\n surfaceKey,\n (meta) => meta.verb === \"get\" && meta.scope === \"entity\",\n );\n}\n\nexport function findSurfaceCollectionActions(\n operations: ResolvedOperation[],\n surfaceKey: string | undefined,\n): ResolvedOperation[] {\n return filterOperationsBySurface(operations, surfaceKey).filter((operation) => {\n const meta = getOperationClickyMeta(operation);\n return meta != null && meta.scope === \"collection\" && meta.verb !== \"list\";\n });\n}\n\nexport function findSurfaceEntityActions(\n operations: ResolvedOperation[],\n surfaceKey: string | undefined,\n): ResolvedOperation[] {\n return filterOperationsBySurface(operations, surfaceKey).filter((operation) => {\n const meta = getOperationClickyMeta(operation);\n return meta != null && meta.scope === \"entity\" && meta.verb !== \"get\";\n });\n}\n\nexport function makeSurfaceDefinition(surface: ClickySurface): DomainDefinition {\n return {\n key: surface.key,\n title: surface.title,\n description: surface.description || `Manage ${surface.title.toLowerCase()} resources.`,\n };\n}\n"],"names":[],"mappings":"AASO,SAAS,kBAAkB,MAA2D;AAC3F,SAAO,6BAAO;AAChB;AAEO,SAAS,kBAAkB,MAAgD;AAJ3E;AAKL,WAAO,uBAAkB,IAAI,MAAtB,mBAAyB,aAAY,CAAA;AAC9C;AAEO,SAAS,uBACd,WACiC;AACjC,SAAO,UAAU,UAAU,UAAU;AACvC;AAEO,SAAS,0BACd,YACA,YACqB;AACrB,MAAI,CAAC,WAAY,QAAO,CAAA;AACxB,SAAO,WAAW;AAAA,IAChB,CAAC,cAAA;AApBE;AAoBY,2CAAuB,SAAS,MAAhC,mBAAmC,aAAY;AAAA;AAAA,EAAA;AAElE;AAEO,SAAS,qBACd,YACA,YACA,WAC+B;AAC/B,SAAO,0BAA0B,YAAY,UAAU,EAAE,KAAK,CAAC,cAAc;AAC3E,UAAM,OAAO,uBAAuB,SAAS;AAC7C,WAAO,QAAQ,QAAQ,UAAU,IAAI;AAAA,EACvC,CAAC;AACH;AAEO,SAAS,yBACd,YACA,YAC+B;AAC/B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC,SAAS,KAAK,SAAS,UAAU,KAAK,UAAU;AAAA,EAAA;AAErD;AAEO,SAAS,2BACd,YACA,YAC+B;AAC/B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC,SAAS,KAAK,SAAS,SAAS,KAAK,UAAU;AAAA,EAAA;AAEpD;AAEO,SAAS,6BACd,YACA,YACqB;AACrB,SAAO,0BAA0B,YAAY,UAAU,EAAE,OAAO,CAAC,cAAc;AAC7E,UAAM,OAAO,uBAAuB,SAAS;AAC7C,WAAO,QAAQ,QAAQ,KAAK,UAAU,gBAAgB,KAAK,SAAS;AAAA,EACtE,CAAC;AACH;AAEO,SAAS,yBACd,YACA,YACqB;AACrB,SAAO,0BAA0B,YAAY,UAAU,EAAE,OAAO,CAAC,cAAc;AAC7E,UAAM,OAAO,uBAAuB,SAAS;AAC7C,WAAO,QAAQ,QAAQ,KAAK,UAAU,YAAY,KAAK,SAAS;AAAA,EAClE,CAAC;AACH;AAEO,SAAS,sBAAsB,SAA0C;AAC9E,SAAO;AAAA,IACL,KAAK,QAAQ;AAAA,IACb,OAAO,QAAQ;AAAA,IACf,aAAa,QAAQ,eAAe,UAAU,QAAQ,MAAM,aAAa;AAAA,EAAA;AAE7E;"}
@@ -0,0 +1,27 @@
1
+ import { Dispatch, SetStateAction } from 'react';
2
+ import { FilterBarFilter, FilterBarMultiFilterMode, FilterBarRangeProps } from '../components/FilterBar';
3
+ import { OpenAPIParameter, OperationLookupResponse } from './types';
4
+ export type ParameterValues = Record<string, string>;
5
+ export type ParameterValuesSetter = Dispatch<SetStateAction<ParameterValues>>;
6
+ export type ParameterFormConfig = {
7
+ filters: FilterBarFilter[];
8
+ timeRange?: FilterBarRangeProps;
9
+ };
10
+ export type ParameterFormOptions = {
11
+ includeLocations?: OpenAPIParameter["in"][];
12
+ lookup?: OperationLookupResponse | undefined;
13
+ lockedValues?: ParameterValues | undefined;
14
+ hideLocked?: boolean;
15
+ };
16
+ export declare function titleCase(value: string): string;
17
+ export declare function defaultValueForParameter(param: OpenAPIParameter, method: string): string;
18
+ export declare function buildInitialParameterValues(parameters: OpenAPIParameter[], method: string, lockedValues?: ParameterValues, initialValues?: ParameterValues): ParameterValues;
19
+ export declare function pruneParameterValues(values: ParameterValues): {
20
+ [k: string]: string;
21
+ };
22
+ export declare function packParameterValues(values: ParameterValues, parameters: OpenAPIParameter[]): ParameterValues;
23
+ export declare function parametersToFormConfig(parameters: OpenAPIParameter[], values: ParameterValues, setValues: ParameterValuesSetter, options?: ParameterFormOptions): ParameterFormConfig;
24
+ export declare function useDebouncedRecord<T>(value: T, delayMs: number): T;
25
+ export declare function parseMultiFilterValue(value: string): Record<string, FilterBarMultiFilterMode>;
26
+ export declare function serializeMultiFilterValue(value: Record<string, FilterBarMultiFilterMode>): string;
27
+ //# sourceMappingURL=formMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formMetadata.d.ts","sourceRoot":"","sources":["../../src/rpc/formMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAyB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAGhG,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACrD,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;AAC9E,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5C,MAAM,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAC7C,YAAY,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,UAMtC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBxF;AAED,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,gBAAgB,EAAE,EAC9B,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,eAAoB,EAClC,aAAa,GAAE,eAAoB,GAClC,eAAe,CAKjB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe;;EAE3D;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,gBAAgB,EAAE,GAC7B,eAAe,CAuBjB;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,gBAAgB,EAAE,EAC9B,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,qBAAqB,EAChC,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAmJrB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,KAS9D;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAU7F;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,GAAG,MAAM,CAQjG"}