@flanksource/clicky-ui 0.1.0 → 0.2.2

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 +23 -0
  39. package/dist/components/icon-menu-picker.d.ts.map +1 -0
  40. package/dist/components/icon-menu-picker.js +192 -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 +15 -0
  51. package/dist/components.d.ts.map +1 -0
  52. package/dist/components.js +33 -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 +195 -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 @@
1
+ {"version":3,"file":"EndpointList.d.ts","sourceRoot":"","sources":["../../src/rpc/EndpointList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAKF,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,YAAY,GAAG,kBAAkB,CAAC,CAAC;IAChF,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,KAAK,MAAM,CAAC;CACzE,CAAC;AAIF,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,UAAU,EACV,UAAU,EACV,cAAmC,GACpC,EAAE,iBAAiB,2CA4DnB"}
@@ -0,0 +1,56 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { useState, useMemo } from "react";
3
+ import { MethodBadge } from "../data/MethodBadge.js";
4
+ const defaultCommandHref = (operationId) => `/commands/${operationId}`;
5
+ function EndpointList({
6
+ operations,
7
+ definition,
8
+ renderLink,
9
+ getCommandHref = defaultCommandHref
10
+ }) {
11
+ const [search, setSearch] = useState("");
12
+ const filtered = useMemo(() => {
13
+ if (!search) return operations;
14
+ const q = search.toLowerCase();
15
+ return operations.filter(
16
+ (op) => {
17
+ var _a, _b;
18
+ return op.path.toLowerCase().includes(q) || ((_a = op.operation.summary) == null ? void 0 : _a.toLowerCase().includes(q)) || ((_b = op.operation.operationId) == null ? void 0 : _b.toLowerCase().includes(q));
19
+ }
20
+ );
21
+ }, [operations, search]);
22
+ if (operations.length === 0) {
23
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-dashed p-8", children: [
24
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-medium", children: definition.emptyTitle || `No ${definition.title} endpoints found` }),
25
+ /* @__PURE__ */ jsx("p", { className: "mt-2 max-w-2xl text-sm text-muted-foreground", children: definition.emptyDescription || "This area is reserved in the information architecture, but the current OpenAPI surface does not expose matching operations yet." })
26
+ ] });
27
+ }
28
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
29
+ /* @__PURE__ */ jsx(
30
+ "input",
31
+ {
32
+ placeholder: `Search ${definition.title.toLowerCase()}...`,
33
+ value: search,
34
+ onChange: (e) => setSearch(e.target.value),
35
+ className: "w-full max-w-lg rounded-lg border bg-background px-3 py-2 text-sm outline-none placeholder:text-muted-foreground focus:ring-2 focus:ring-ring"
36
+ }
37
+ ),
38
+ /* @__PURE__ */ jsx("div", { className: "space-y-2", children: filtered.map((op) => {
39
+ const operationId = op.operation.operationId ?? `${op.method}:${op.path}`;
40
+ return renderLink({
41
+ key: `${op.method}:${op.path}`,
42
+ to: getCommandHref(operationId, op),
43
+ className: "flex items-center gap-3 rounded-xl border bg-card p-3 transition-colors hover:border-emerald-200 hover:bg-emerald-50/50",
44
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
45
+ /* @__PURE__ */ jsx(MethodBadge, { method: op.method }),
46
+ /* @__PURE__ */ jsx("code", { className: "text-sm", children: op.path }),
47
+ op.operation.summary && /* @__PURE__ */ jsx("span", { className: "ml-auto text-xs text-muted-foreground", children: op.operation.summary })
48
+ ] })
49
+ });
50
+ }) })
51
+ ] });
52
+ }
53
+ export {
54
+ EndpointList
55
+ };
56
+ //# sourceMappingURL=EndpointList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndpointList.js","sources":["../../src/rpc/EndpointList.tsx"],"sourcesContent":["import { useMemo, useState, type ReactElement, type ReactNode } from \"react\";\nimport { MethodBadge } from \"../data/MethodBadge\";\nimport type { DomainDefinition, ResolvedOperation } from \"./types\";\n\nexport type RenderLinkArgs = {\n to: string;\n className?: string;\n children: ReactNode;\n title?: string;\n key?: string;\n};\n\n// Render-prop form lets callers pass react-router's Link, a plain <a>, or\n// any custom navigation component without relying on React type equality\n// across nested type installs.\nexport type RenderLink = (args: RenderLinkArgs) => ReactElement;\n\nexport type EndpointListProps = {\n operations: ResolvedOperation[];\n definition: Pick<DomainDefinition, \"title\" | \"emptyTitle\" | \"emptyDescription\">;\n renderLink: RenderLink;\n getCommandHref?: (operationId: string, op: ResolvedOperation) => string;\n};\n\nconst defaultCommandHref = (operationId: string) => `/commands/${operationId}`;\n\nexport function EndpointList({\n operations,\n definition,\n renderLink,\n getCommandHref = defaultCommandHref,\n}: EndpointListProps) {\n const [search, setSearch] = useState(\"\");\n\n const filtered = useMemo(() => {\n if (!search) return operations;\n const q = search.toLowerCase();\n return operations.filter(\n (op) =>\n op.path.toLowerCase().includes(q) ||\n op.operation.summary?.toLowerCase().includes(q) ||\n op.operation.operationId?.toLowerCase().includes(q),\n );\n }, [operations, search]);\n\n if (operations.length === 0) {\n return (\n <div className=\"rounded-xl border border-dashed p-8\">\n <h2 className=\"text-lg font-medium\">\n {definition.emptyTitle || `No ${definition.title} endpoints found`}\n </h2>\n <p className=\"mt-2 max-w-2xl text-sm text-muted-foreground\">\n {definition.emptyDescription ||\n \"This area is reserved in the information architecture, but the current OpenAPI surface does not expose matching operations yet.\"}\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n <input\n placeholder={`Search ${definition.title.toLowerCase()}...`}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full max-w-lg rounded-lg border bg-background px-3 py-2 text-sm outline-none placeholder:text-muted-foreground focus:ring-2 focus:ring-ring\"\n />\n <div className=\"space-y-2\">\n {filtered.map((op) => {\n const operationId = op.operation.operationId ?? `${op.method}:${op.path}`;\n return renderLink({\n key: `${op.method}:${op.path}`,\n to: getCommandHref(operationId, op),\n className:\n \"flex items-center gap-3 rounded-xl border bg-card p-3 transition-colors hover:border-emerald-200 hover:bg-emerald-50/50\",\n children: (\n <>\n <MethodBadge method={op.method} />\n <code className=\"text-sm\">{op.path}</code>\n {op.operation.summary && (\n <span className=\"ml-auto text-xs text-muted-foreground\">\n {op.operation.summary}\n </span>\n )}\n </>\n ),\n });\n })}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;;AAwBA,MAAM,qBAAqB,CAAC,gBAAwB,aAAa,WAAW;AAErE,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AACnB,GAAsB;AACpB,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AAEvC,QAAM,WAAW,QAAQ,MAAM;AAC7B,QAAI,CAAC,OAAQ,QAAO;AACpB,UAAM,IAAI,OAAO,YAAA;AACjB,WAAO,WAAW;AAAA,MAChB,CAAC;;AACC,kBAAG,KAAK,cAAc,SAAS,CAAC,OAChC,QAAG,UAAU,YAAb,mBAAsB,cAAc,SAAS,SAC7C,QAAG,UAAU,gBAAb,mBAA0B,cAAc,SAAS;AAAA;AAAA,IAAC;AAAA,EAExD,GAAG,CAAC,YAAY,MAAM,CAAC;AAEvB,MAAI,WAAW,WAAW,GAAG;AAC3B,WACE,qBAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,MAAA,oBAAC,MAAA,EAAG,WAAU,uBACX,UAAA,WAAW,cAAc,MAAM,WAAW,KAAK,mBAAA,CAClD;AAAA,0BACC,KAAA,EAAE,WAAU,gDACV,UAAA,WAAW,oBACV,kIAAA,CACJ;AAAA,IAAA,GACF;AAAA,EAEJ;AAEA,SACE,qBAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,aAAa,UAAU,WAAW,MAAM,aAAa;AAAA,QACrD,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,UAAU,EAAE,OAAO,KAAK;AAAA,QACzC,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,wBAEX,OAAA,EAAI,WAAU,aACZ,UAAA,SAAS,IAAI,CAAC,OAAO;AACpB,YAAM,cAAc,GAAG,UAAU,eAAe,GAAG,GAAG,MAAM,IAAI,GAAG,IAAI;AACvE,aAAO,WAAW;AAAA,QAChB,KAAK,GAAG,GAAG,MAAM,IAAI,GAAG,IAAI;AAAA,QAC5B,IAAI,eAAe,aAAa,EAAE;AAAA,QAClC,WACE;AAAA,QACF,UACE,qBAAA,UAAA,EACE,UAAA;AAAA,UAAA,oBAAC,aAAA,EAAY,QAAQ,GAAG,OAAA,CAAQ;AAAA,UAChC,oBAAC,QAAA,EAAK,WAAU,WAAW,aAAG,MAAK;AAAA,UAClC,GAAG,UAAU,WACZ,oBAAC,UAAK,WAAU,yCACb,UAAA,GAAG,UAAU,QAAA,CAChB;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA,CAEH;AAAA,IACH,CAAC,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,15 @@
1
+ import { AnyApiReferenceConfiguration } from '@scalar/api-reference-react';
2
+ import { RenderLink } from './EndpointList';
3
+ import { OperationsApiClient } from './useOperations';
4
+ export type EntityExplorerAppProps = {
5
+ client: OperationsApiClient;
6
+ pathname: string;
7
+ renderLink: RenderLink;
8
+ basePath?: string;
9
+ showApiExplorer?: boolean;
10
+ apiExplorerMode?: "scalar" | "operations";
11
+ apiExplorerUrl?: string;
12
+ apiExplorerConfiguration?: AnyApiReferenceConfiguration;
13
+ };
14
+ export declare function EntityExplorerApp({ client, pathname, renderLink, basePath, showApiExplorer, apiExplorerMode, apiExplorerUrl, apiExplorerConfiguration, }: EntityExplorerAppProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=EntityExplorerApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityExplorerApp.d.ts","sourceRoot":"","sources":["../../src/rpc/EntityExplorerApp.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAKhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,4BAA4B,CAAC;CACzD,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAQ,EACR,UAAU,EACV,QAAa,EACb,eAAsB,EACtB,eAA0B,EAC1B,cAAc,EACd,wBAAwB,GACzB,EAAE,sBAAsB,2CAsJxB"}
@@ -0,0 +1,282 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useMemo, useEffect } from "react";
3
+ import { ThemeSwitcher } from "../components/theme-switcher.js";
4
+ import { ApiExplorer } from "./ApiExplorer.js";
5
+ import { getClickySurfaces, makeSurfaceDefinition } from "./clickyMetadata.js";
6
+ import { OperationCatalog } from "./OperationCatalog.js";
7
+ import { OperationCommandPage } from "./OperationCommandPage.js";
8
+ import { OperationEntityPage } from "./OperationEntityPage.js";
9
+ import { useOperations } from "./useOperations.js";
10
+ function EntityExplorerApp({
11
+ client,
12
+ pathname,
13
+ renderLink,
14
+ basePath = "",
15
+ showApiExplorer = true,
16
+ apiExplorerMode = "scalar",
17
+ apiExplorerUrl,
18
+ apiExplorerConfiguration
19
+ }) {
20
+ const { spec } = useOperations(client);
21
+ const surfaces = useMemo(() => getClickySurfaces(spec), [spec]);
22
+ const defaultSurface = useMemo(
23
+ () => surfaces.find((surface) => !surface.admin) ?? surfaces[0],
24
+ [surfaces]
25
+ );
26
+ const relativePath = useMemo(() => stripBasePath(pathname, basePath), [basePath, pathname]);
27
+ const route = useMemo(() => parseExplorerRoute(relativePath), [relativePath]);
28
+ const resolvedRoute = useMemo(() => resolveRouteSurface(route, surfaces), [route, surfaces]);
29
+ const commandRuntime = useMemo(
30
+ () => ({
31
+ client,
32
+ hrefForCommand: (resolved) => buildCommandHref(basePath, resolved),
33
+ onNavigate: (resolved) => {
34
+ const href = buildCommandHref(basePath, resolved);
35
+ if (!href || typeof window === "undefined") return;
36
+ window.history.pushState(window.history.state, "", href);
37
+ window.dispatchEvent(new PopStateEvent("popstate"));
38
+ }
39
+ }),
40
+ [basePath, client]
41
+ );
42
+ const { initialValues: commandInitialValues, autoRun: commandAutoRun } = useMemo(
43
+ () => resolvedRoute.kind === "command" ? readCommandQueryParams() : { initialValues: {}, autoRun: false },
44
+ [resolvedRoute.kind, pathname]
45
+ );
46
+ const explorerDefinition = useMemo(
47
+ () => ({
48
+ key: "explorer",
49
+ title: "API Explorer",
50
+ description: "Every operation exposed by the current OpenAPI spec."
51
+ }),
52
+ []
53
+ );
54
+ useEffect(() => {
55
+ if (typeof window === "undefined" || defaultSurface == null || relativePath !== "/" || window.location.pathname !== withBasePath(basePath, "/")) {
56
+ return;
57
+ }
58
+ const target = withBasePath(basePath, `/${defaultSurface.key}`);
59
+ window.history.replaceState(window.history.state, "", target);
60
+ window.dispatchEvent(new PopStateEvent("popstate"));
61
+ }, [basePath, defaultSurface, relativePath]);
62
+ return /* @__PURE__ */ jsxs("div", { className: "flex h-full", children: [
63
+ /* @__PURE__ */ jsxs("aside", { className: "flex w-64 shrink-0 flex-col border-r border-border bg-muted/30 p-4", children: [
64
+ /* @__PURE__ */ jsxs("div", { className: "mb-6", children: [
65
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-semibold", children: (spec == null ? void 0 : spec.info.title) ?? "Clicky Explorer" }),
66
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: "Metadata-driven entity explorer" })
67
+ ] }),
68
+ /* @__PURE__ */ jsxs("nav", { className: "flex flex-col gap-1", children: [
69
+ surfaces.map(
70
+ (surface) => renderLink({
71
+ key: surface.key,
72
+ to: withBasePath(basePath, `/${surface.key}`),
73
+ className: navLinkClassName(isSurfaceRouteActive(resolvedRoute, surface.key)),
74
+ children: surface.title
75
+ })
76
+ ),
77
+ showApiExplorer && renderLink({
78
+ key: explorerDefinition.key,
79
+ to: withBasePath(basePath, "/explorer"),
80
+ className: navLinkClassName(
81
+ resolvedRoute.kind === "explorer" || resolvedRoute.kind === "command"
82
+ ),
83
+ children: explorerDefinition.title
84
+ })
85
+ ] }),
86
+ /* @__PURE__ */ jsx("div", { className: "mt-auto pt-4", children: /* @__PURE__ */ jsx(ThemeSwitcher, {}) })
87
+ ] }),
88
+ /* @__PURE__ */ jsx("main", { className: "flex-1 overflow-auto p-6", children: resolvedRoute.kind === "surface" ? resolvedRoute.surface ? /* @__PURE__ */ jsx(
89
+ OperationCatalog,
90
+ {
91
+ definition: makeSurfaceDefinition(resolvedRoute.surface),
92
+ entities: [resolvedRoute.surface.entity],
93
+ client,
94
+ renderLink,
95
+ surfaceKey: resolvedRoute.surface.key,
96
+ commandRuntime
97
+ }
98
+ ) : /* @__PURE__ */ jsx(UnknownSurface, { surfaceKey: resolvedRoute.surfaceKey }) : resolvedRoute.kind === "entity" ? resolvedRoute.surface ? /* @__PURE__ */ jsx(
99
+ OperationEntityPage,
100
+ {
101
+ definition: makeSurfaceDefinition(resolvedRoute.surface),
102
+ entities: [resolvedRoute.surface.entity],
103
+ client,
104
+ renderLink,
105
+ surfaceKey: resolvedRoute.surface.key,
106
+ backHref: withBasePath(basePath, `/${resolvedRoute.surface.key}`),
107
+ backLabel: `Back to ${resolvedRoute.surface.title}`,
108
+ commandRuntime,
109
+ ...resolvedRoute.id ? { id: resolvedRoute.id } : {}
110
+ }
111
+ ) : /* @__PURE__ */ jsx(UnknownSurface, { surfaceKey: resolvedRoute.surfaceKey }) : resolvedRoute.kind === "command" ? /* @__PURE__ */ jsx(
112
+ OperationCommandPage,
113
+ {
114
+ client,
115
+ backHref: withBasePath(basePath, "/explorer"),
116
+ backLabel: "Back to API Explorer",
117
+ renderLink,
118
+ commandRuntime,
119
+ initialValues: commandInitialValues,
120
+ autoRun: commandAutoRun,
121
+ ...resolvedRoute.operationId ? { operationId: resolvedRoute.operationId } : {}
122
+ }
123
+ ) : resolvedRoute.kind === "explorer" ? apiExplorerMode === "scalar" ? /* @__PURE__ */ jsx(
124
+ ApiExplorer,
125
+ {
126
+ ...apiExplorerUrl ? { openApiUrl: apiExplorerUrl } : {},
127
+ ...apiExplorerConfiguration ? { configuration: apiExplorerConfiguration } : {}
128
+ }
129
+ ) : /* @__PURE__ */ jsx(
130
+ OperationCatalog,
131
+ {
132
+ definition: explorerDefinition,
133
+ entities: [],
134
+ allOperations: true,
135
+ client,
136
+ renderLink,
137
+ commandRuntime
138
+ }
139
+ ) : defaultSurface == null ? /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: "Loading surfaces…" }) : /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: "Redirecting…" }) })
140
+ ] });
141
+ }
142
+ function parseExplorerRoute(pathname) {
143
+ const normalized = trimTrailingSlash(pathname) || "/";
144
+ if (normalized === "/") {
145
+ return { kind: "root" };
146
+ }
147
+ const segments = normalized.replace(/^\/+/, "").split("/");
148
+ if (segments[0] === "explorer") {
149
+ return { kind: "explorer" };
150
+ }
151
+ if (segments[0] === "commands") {
152
+ return segments[1] ? { kind: "command", operationId: segments[1] } : { kind: "command" };
153
+ }
154
+ const surfaceKey = segments[0] ?? "";
155
+ if (segments[1]) {
156
+ return {
157
+ kind: "entity",
158
+ surfaceKey,
159
+ id: decodeURIComponent(segments[1])
160
+ };
161
+ }
162
+ return { kind: "surface", surfaceKey };
163
+ }
164
+ function resolveRouteSurface(route, surfaces) {
165
+ if (route.kind !== "surface" && route.kind !== "entity") {
166
+ return route;
167
+ }
168
+ const surface = surfaces.find((item) => item.key === route.surfaceKey);
169
+ return surface ? { ...route, surface } : route;
170
+ }
171
+ function isSurfaceRouteActive(route, surfaceKey) {
172
+ return route.kind === "surface" && route.surfaceKey === surfaceKey || route.kind === "entity" && route.surfaceKey === surfaceKey;
173
+ }
174
+ function navLinkClassName(active) {
175
+ return [
176
+ "rounded-md px-2 py-1.5 text-sm transition-colors",
177
+ active ? "bg-accent text-accent-foreground" : "text-foreground hover:bg-accent"
178
+ ].join(" ");
179
+ }
180
+ function stripBasePath(pathname, basePath) {
181
+ const base = trimTrailingSlash(basePath);
182
+ if (!base || base === "/") {
183
+ return trimTrailingSlash(pathname) || "/";
184
+ }
185
+ if (pathname === base) {
186
+ return "/";
187
+ }
188
+ if (pathname.startsWith(`${base}/`)) {
189
+ return trimTrailingSlash(pathname.slice(base.length)) || "/";
190
+ }
191
+ return trimTrailingSlash(pathname) || "/";
192
+ }
193
+ function withBasePath(basePath, pathname) {
194
+ const base = trimTrailingSlash(basePath);
195
+ if (!base || base === "/") {
196
+ return pathname;
197
+ }
198
+ return `${base}${pathname}`;
199
+ }
200
+ function trimTrailingSlash(value) {
201
+ if (!value) return "";
202
+ return value.length > 1 ? value.replace(/\/+$/, "") : value;
203
+ }
204
+ function UnknownSurface({ surfaceKey }) {
205
+ return /* @__PURE__ */ jsxs("div", { className: "p-6 text-sm text-muted-foreground", children: [
206
+ "Unknown surface: ",
207
+ /* @__PURE__ */ jsx("code", { children: surfaceKey })
208
+ ] });
209
+ }
210
+ const AUTORUN_QUERY_PARAM = "__autoRun";
211
+ const ARG_QUERY_PREFIX = "__arg";
212
+ function buildCommandHref(basePath, resolved) {
213
+ var _a, _b;
214
+ const commandId = ((_a = resolved.operation) == null ? void 0 : _a.operation.operationId) ?? resolved.request.command;
215
+ if (!commandId) return void 0;
216
+ const meta = (_b = resolved.operation) == null ? void 0 : _b.operation["x-clicky"];
217
+ const args = resolved.request.args ?? [];
218
+ const flags = resolved.request.flags ?? {};
219
+ if ((meta == null ? void 0 : meta.verb) === "get" && (meta == null ? void 0 : meta.scope) === "entity" && meta.surface && args[0]) {
220
+ const search2 = new URLSearchParams();
221
+ for (const [key, value] of Object.entries(flags)) {
222
+ if (value !== void 0 && value !== "") {
223
+ search2.set(key, value);
224
+ }
225
+ }
226
+ const query2 = search2.toString();
227
+ const suffix2 = query2 ? `?${query2}` : "";
228
+ return withBasePath(
229
+ basePath,
230
+ `/${encodeURIComponent(meta.surface)}/${encodeURIComponent(args[0])}${suffix2}`
231
+ );
232
+ }
233
+ const search = new URLSearchParams();
234
+ args.forEach((value, index) => {
235
+ if (value !== void 0 && value !== "") {
236
+ search.set(`${ARG_QUERY_PREFIX}${index}`, value);
237
+ }
238
+ });
239
+ for (const [key, value] of Object.entries(flags)) {
240
+ if (value !== void 0 && value !== "") {
241
+ search.set(key, value);
242
+ }
243
+ }
244
+ if (resolved.request.autoRun) {
245
+ search.set(AUTORUN_QUERY_PARAM, "1");
246
+ }
247
+ const query = search.toString();
248
+ const suffix = query ? `?${query}` : "";
249
+ return withBasePath(basePath, `/commands/${encodeURIComponent(commandId)}${suffix}`);
250
+ }
251
+ function readCommandQueryParams() {
252
+ if (typeof window === "undefined") {
253
+ return { initialValues: {}, autoRun: false };
254
+ }
255
+ const search = new URLSearchParams(window.location.search);
256
+ const initialValues = {};
257
+ let autoRun = false;
258
+ const positional = [];
259
+ for (const [key, value] of search.entries()) {
260
+ if (key === AUTORUN_QUERY_PARAM) {
261
+ autoRun = value === "1" || value === "true";
262
+ continue;
263
+ }
264
+ if (key.startsWith(ARG_QUERY_PREFIX)) {
265
+ const index = Number.parseInt(key.slice(ARG_QUERY_PREFIX.length), 10);
266
+ if (Number.isFinite(index) && index >= 0) {
267
+ positional[index] = value;
268
+ }
269
+ continue;
270
+ }
271
+ initialValues[key] = value;
272
+ }
273
+ const packedArgs = positional.filter((value) => value !== void 0).join(" ");
274
+ if (packedArgs !== "") {
275
+ initialValues.args = packedArgs;
276
+ }
277
+ return { initialValues, autoRun };
278
+ }
279
+ export {
280
+ EntityExplorerApp
281
+ };
282
+ //# sourceMappingURL=EntityExplorerApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityExplorerApp.js","sources":["../../src/rpc/EntityExplorerApp.tsx"],"sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport type { AnyApiReferenceConfiguration } from \"@scalar/api-reference-react\";\nimport { ThemeSwitcher } from \"../components/theme-switcher\";\nimport type { ClickyCommandRuntime, ClickyResolvedCommand } from \"../data/Clicky\";\nimport { ApiExplorer } from \"./ApiExplorer\";\nimport { getClickySurfaces, makeSurfaceDefinition } from \"./clickyMetadata\";\nimport type { RenderLink } from \"./EndpointList\";\nimport { OperationCatalog } from \"./OperationCatalog\";\nimport { OperationCommandPage } from \"./OperationCommandPage\";\nimport { OperationEntityPage } from \"./OperationEntityPage\";\nimport type { ClickySurface } from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\nimport { useOperations } from \"./useOperations\";\n\nexport type EntityExplorerAppProps = {\n client: OperationsApiClient;\n pathname: string;\n renderLink: RenderLink;\n basePath?: string;\n showApiExplorer?: boolean;\n apiExplorerMode?: \"scalar\" | \"operations\";\n apiExplorerUrl?: string;\n apiExplorerConfiguration?: AnyApiReferenceConfiguration;\n};\n\nexport function EntityExplorerApp({\n client,\n pathname,\n renderLink,\n basePath = \"\",\n showApiExplorer = true,\n apiExplorerMode = \"scalar\",\n apiExplorerUrl,\n apiExplorerConfiguration,\n}: EntityExplorerAppProps) {\n const { spec } = useOperations(client);\n const surfaces = useMemo(() => getClickySurfaces(spec), [spec]);\n const defaultSurface = useMemo(\n () => surfaces.find((surface) => !surface.admin) ?? surfaces[0],\n [surfaces],\n );\n const relativePath = useMemo(() => stripBasePath(pathname, basePath), [basePath, pathname]);\n const route = useMemo(() => parseExplorerRoute(relativePath), [relativePath]);\n const resolvedRoute = useMemo(() => resolveRouteSurface(route, surfaces), [route, surfaces]);\n const commandRuntime = useMemo<ClickyCommandRuntime>(\n () => ({\n client,\n hrefForCommand: (resolved) => buildCommandHref(basePath, resolved),\n onNavigate: (resolved) => {\n const href = buildCommandHref(basePath, resolved);\n if (!href || typeof window === \"undefined\") return;\n window.history.pushState(window.history.state, \"\", href);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n },\n }),\n [basePath, client],\n );\n const { initialValues: commandInitialValues, autoRun: commandAutoRun } = useMemo(\n () =>\n resolvedRoute.kind === \"command\"\n ? readCommandQueryParams()\n : { initialValues: {}, autoRun: false },\n [resolvedRoute.kind, pathname],\n );\n const explorerDefinition = useMemo(\n () => ({\n key: \"explorer\",\n title: \"API Explorer\",\n description: \"Every operation exposed by the current OpenAPI spec.\",\n }),\n [],\n );\n\n useEffect(() => {\n if (\n typeof window === \"undefined\" ||\n defaultSurface == null ||\n relativePath !== \"/\" ||\n window.location.pathname !== withBasePath(basePath, \"/\")\n ) {\n return;\n }\n\n const target = withBasePath(basePath, `/${defaultSurface.key}`);\n window.history.replaceState(window.history.state, \"\", target);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n }, [basePath, defaultSurface, relativePath]);\n\n return (\n <div className=\"flex h-full\">\n <aside className=\"flex w-64 shrink-0 flex-col border-r border-border bg-muted/30 p-4\">\n <div className=\"mb-6\">\n <div className=\"text-sm font-semibold\">{spec?.info.title ?? \"Clicky Explorer\"}</div>\n <div className=\"text-xs text-muted-foreground\">Metadata-driven entity explorer</div>\n </div>\n <nav className=\"flex flex-col gap-1\">\n {surfaces.map((surface) =>\n renderLink({\n key: surface.key,\n to: withBasePath(basePath, `/${surface.key}`),\n className: navLinkClassName(isSurfaceRouteActive(resolvedRoute, surface.key)),\n children: surface.title,\n }),\n )}\n {showApiExplorer &&\n renderLink({\n key: explorerDefinition.key,\n to: withBasePath(basePath, \"/explorer\"),\n className: navLinkClassName(\n resolvedRoute.kind === \"explorer\" || resolvedRoute.kind === \"command\",\n ),\n children: explorerDefinition.title,\n })}\n </nav>\n <div className=\"mt-auto pt-4\">\n <ThemeSwitcher />\n </div>\n </aside>\n\n <main className=\"flex-1 overflow-auto p-6\">\n {resolvedRoute.kind === \"surface\" ? (\n resolvedRoute.surface ? (\n <OperationCatalog\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n commandRuntime={commandRuntime}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"entity\" ? (\n resolvedRoute.surface ? (\n <OperationEntityPage\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n backHref={withBasePath(basePath, `/${resolvedRoute.surface.key}`)}\n backLabel={`Back to ${resolvedRoute.surface.title}`}\n commandRuntime={commandRuntime}\n {...(resolvedRoute.id ? { id: resolvedRoute.id } : {})}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"command\" ? (\n <OperationCommandPage\n client={client}\n backHref={withBasePath(basePath, \"/explorer\")}\n backLabel=\"Back to API Explorer\"\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n initialValues={commandInitialValues}\n autoRun={commandAutoRun}\n {...(resolvedRoute.operationId ? { operationId: resolvedRoute.operationId } : {})}\n />\n ) : resolvedRoute.kind === \"explorer\" ? (\n apiExplorerMode === \"scalar\" ? (\n <ApiExplorer\n {...(apiExplorerUrl ? { openApiUrl: apiExplorerUrl } : {})}\n {...(apiExplorerConfiguration ? { configuration: apiExplorerConfiguration } : {})}\n />\n ) : (\n <OperationCatalog\n definition={explorerDefinition}\n entities={[]}\n allOperations\n client={client}\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n />\n )\n ) : defaultSurface == null ? (\n <div className=\"text-sm text-muted-foreground\">Loading surfaces…</div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">Redirecting…</div>\n )}\n </main>\n </div>\n );\n}\n\ntype ExplorerRoute =\n | { kind: \"root\" }\n | { kind: \"explorer\" }\n | { kind: \"command\"; operationId?: string }\n | { kind: \"surface\"; surfaceKey: string; surface?: ClickySurface }\n | {\n kind: \"entity\";\n surfaceKey: string;\n surface?: ClickySurface;\n id?: string;\n };\n\nfunction parseExplorerRoute(pathname: string): ExplorerRoute {\n const normalized = trimTrailingSlash(pathname) || \"/\";\n if (normalized === \"/\") {\n return { kind: \"root\" };\n }\n\n const segments = normalized.replace(/^\\/+/, \"\").split(\"/\");\n if (segments[0] === \"explorer\") {\n return { kind: \"explorer\" };\n }\n if (segments[0] === \"commands\") {\n return segments[1] ? { kind: \"command\", operationId: segments[1] } : { kind: \"command\" };\n }\n const surfaceKey = segments[0] ?? \"\";\n if (segments[1]) {\n return {\n kind: \"entity\",\n surfaceKey,\n id: decodeURIComponent(segments[1]),\n };\n }\n return { kind: \"surface\", surfaceKey };\n}\n\nfunction resolveRouteSurface(route: ExplorerRoute, surfaces: ClickySurface[]): ExplorerRoute {\n if (route.kind !== \"surface\" && route.kind !== \"entity\") {\n return route;\n }\n const surface = surfaces.find((item) => item.key === route.surfaceKey);\n return surface ? { ...route, surface } : route;\n}\n\nfunction isSurfaceRouteActive(route: ExplorerRoute, surfaceKey: string) {\n return (\n (route.kind === \"surface\" && route.surfaceKey === surfaceKey) ||\n (route.kind === \"entity\" && route.surfaceKey === surfaceKey)\n );\n}\n\nfunction navLinkClassName(active: boolean) {\n return [\n \"rounded-md px-2 py-1.5 text-sm transition-colors\",\n active ? \"bg-accent text-accent-foreground\" : \"text-foreground hover:bg-accent\",\n ].join(\" \");\n}\n\nfunction stripBasePath(pathname: string, basePath: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return trimTrailingSlash(pathname) || \"/\";\n }\n if (pathname === base) {\n return \"/\";\n }\n if (pathname.startsWith(`${base}/`)) {\n return trimTrailingSlash(pathname.slice(base.length)) || \"/\";\n }\n return trimTrailingSlash(pathname) || \"/\";\n}\n\nfunction withBasePath(basePath: string, pathname: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return pathname;\n }\n return `${base}${pathname}`;\n}\n\nfunction trimTrailingSlash(value: string) {\n if (!value) return \"\";\n return value.length > 1 ? value.replace(/\\/+$/, \"\") : value;\n}\n\nfunction UnknownSurface({ surfaceKey }: { surfaceKey: string }) {\n return (\n <div className=\"p-6 text-sm text-muted-foreground\">\n Unknown surface: <code>{surfaceKey}</code>\n </div>\n );\n}\n\nconst AUTORUN_QUERY_PARAM = \"__autoRun\";\nconst ARG_QUERY_PREFIX = \"__arg\";\n\nfunction buildCommandHref(basePath: string, resolved: ClickyResolvedCommand): string | undefined {\n const commandId = resolved.operation?.operation.operationId ?? resolved.request.command;\n if (!commandId) return undefined;\n\n const meta = resolved.operation?.operation[\"x-clicky\"];\n const args = resolved.request.args ?? [];\n const flags = resolved.request.flags ?? {};\n\n // Entity `get` commands route to the surface detail URL: /<surface>/<id>?<flags>\n if (meta?.verb === \"get\" && meta?.scope === \"entity\" && meta.surface && args[0]) {\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined && value !== \"\") {\n search.set(key, value);\n }\n }\n const query = search.toString();\n const suffix = query ? `?${query}` : \"\";\n return withBasePath(\n basePath,\n `/${encodeURIComponent(meta.surface)}/${encodeURIComponent(args[0])}${suffix}`,\n );\n }\n\n const search = new URLSearchParams();\n args.forEach((value, index) => {\n if (value !== undefined && value !== \"\") {\n search.set(`${ARG_QUERY_PREFIX}${index}`, value);\n }\n });\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined && value !== \"\") {\n search.set(key, value);\n }\n }\n if (resolved.request.autoRun) {\n search.set(AUTORUN_QUERY_PARAM, \"1\");\n }\n\n const query = search.toString();\n const suffix = query ? `?${query}` : \"\";\n return withBasePath(basePath, `/commands/${encodeURIComponent(commandId)}${suffix}`);\n}\n\nfunction readCommandQueryParams(): { initialValues: Record<string, string>; autoRun: boolean } {\n if (typeof window === \"undefined\") {\n return { initialValues: {}, autoRun: false };\n }\n const search = new URLSearchParams(window.location.search);\n const initialValues: Record<string, string> = {};\n let autoRun = false;\n const positional: string[] = [];\n\n for (const [key, value] of search.entries()) {\n if (key === AUTORUN_QUERY_PARAM) {\n autoRun = value === \"1\" || value === \"true\";\n continue;\n }\n if (key.startsWith(ARG_QUERY_PREFIX)) {\n const index = Number.parseInt(key.slice(ARG_QUERY_PREFIX.length), 10);\n if (Number.isFinite(index) && index >= 0) {\n positional[index] = value;\n }\n continue;\n }\n initialValues[key] = value;\n }\n\n const packedArgs = positional.filter((value) => value !== undefined).join(\" \");\n if (packedArgs !== \"\") {\n initialValues.args = packedArgs;\n }\n\n return { initialValues, autoRun };\n}\n"],"names":["search","query","suffix"],"mappings":";;;;;;;;;AAyBO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,EAAE,KAAA,IAAS,cAAc,MAAM;AACrC,QAAM,WAAW,QAAQ,MAAM,kBAAkB,IAAI,GAAG,CAAC,IAAI,CAAC;AAC9D,QAAM,iBAAiB;AAAA,IACrB,MAAM,SAAS,KAAK,CAAC,YAAY,CAAC,QAAQ,KAAK,KAAK,SAAS,CAAC;AAAA,IAC9D,CAAC,QAAQ;AAAA,EAAA;AAEX,QAAM,eAAe,QAAQ,MAAM,cAAc,UAAU,QAAQ,GAAG,CAAC,UAAU,QAAQ,CAAC;AAC1F,QAAM,QAAQ,QAAQ,MAAM,mBAAmB,YAAY,GAAG,CAAC,YAAY,CAAC;AAC5E,QAAM,gBAAgB,QAAQ,MAAM,oBAAoB,OAAO,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC;AAC3F,QAAM,iBAAiB;AAAA,IACrB,OAAO;AAAA,MACL;AAAA,MACA,gBAAgB,CAAC,aAAa,iBAAiB,UAAU,QAAQ;AAAA,MACjE,YAAY,CAAC,aAAa;AACxB,cAAM,OAAO,iBAAiB,UAAU,QAAQ;AAChD,YAAI,CAAC,QAAQ,OAAO,WAAW,YAAa;AAC5C,eAAO,QAAQ,UAAU,OAAO,QAAQ,OAAO,IAAI,IAAI;AACvD,eAAO,cAAc,IAAI,cAAc,UAAU,CAAC;AAAA,MACpD;AAAA,IAAA;AAAA,IAEF,CAAC,UAAU,MAAM;AAAA,EAAA;AAEnB,QAAM,EAAE,eAAe,sBAAsB,SAAS,mBAAmB;AAAA,IACvE,MACE,cAAc,SAAS,YACnB,uBAAA,IACA,EAAE,eAAe,CAAA,GAAI,SAAS,MAAA;AAAA,IACpC,CAAC,cAAc,MAAM,QAAQ;AAAA,EAAA;AAE/B,QAAM,qBAAqB;AAAA,IACzB,OAAO;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,CAAA;AAAA,EAAC;AAGH,YAAU,MAAM;AACd,QACE,OAAO,WAAW,eAClB,kBAAkB,QAClB,iBAAiB,OACjB,OAAO,SAAS,aAAa,aAAa,UAAU,GAAG,GACvD;AACA;AAAA,IACF;AAEA,UAAM,SAAS,aAAa,UAAU,IAAI,eAAe,GAAG,EAAE;AAC9D,WAAO,QAAQ,aAAa,OAAO,QAAQ,OAAO,IAAI,MAAM;AAC5D,WAAO,cAAc,IAAI,cAAc,UAAU,CAAC;AAAA,EACpD,GAAG,CAAC,UAAU,gBAAgB,YAAY,CAAC;AAE3C,SACE,qBAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,IAAA,qBAAC,SAAA,EAAM,WAAU,sEACf,UAAA;AAAA,MAAA,qBAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,QAAA,oBAAC,SAAI,WAAU,yBAAyB,WAAA,6BAAM,KAAK,UAAS,mBAAkB;AAAA,QAC9E,oBAAC,OAAA,EAAI,WAAU,iCAAgC,UAAA,kCAAA,CAA+B;AAAA,MAAA,GAChF;AAAA,MACA,qBAAC,OAAA,EAAI,WAAU,uBACZ,UAAA;AAAA,QAAA,SAAS;AAAA,UAAI,CAAC,YACb,WAAW;AAAA,YACT,KAAK,QAAQ;AAAA,YACb,IAAI,aAAa,UAAU,IAAI,QAAQ,GAAG,EAAE;AAAA,YAC5C,WAAW,iBAAiB,qBAAqB,eAAe,QAAQ,GAAG,CAAC;AAAA,YAC5E,UAAU,QAAQ;AAAA,UAAA,CACnB;AAAA,QAAA;AAAA,QAEF,mBACC,WAAW;AAAA,UACT,KAAK,mBAAmB;AAAA,UACxB,IAAI,aAAa,UAAU,WAAW;AAAA,UACtC,WAAW;AAAA,YACT,cAAc,SAAS,cAAc,cAAc,SAAS;AAAA,UAAA;AAAA,UAE9D,UAAU,mBAAmB;AAAA,QAAA,CAC9B;AAAA,MAAA,GACL;AAAA,0BACC,OAAA,EAAI,WAAU,gBACb,UAAA,oBAAC,iBAAc,EAAA,CACjB;AAAA,IAAA,GACF;AAAA,IAEA,oBAAC,UAAK,WAAU,4BACb,wBAAc,SAAS,YACtB,cAAc,UACZ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,YAAY,sBAAsB,cAAc,OAAO;AAAA,QACvD,UAAU,CAAC,cAAc,QAAQ,MAAM;AAAA,QACvC;AAAA,QACA;AAAA,QACA,YAAY,cAAc,QAAQ;AAAA,QAClC;AAAA,MAAA;AAAA,IAAA,IAGF,oBAAC,gBAAA,EAAe,YAAY,cAAc,WAAA,CAAY,IAEtD,cAAc,SAAS,WACzB,cAAc,UACZ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,YAAY,sBAAsB,cAAc,OAAO;AAAA,QACvD,UAAU,CAAC,cAAc,QAAQ,MAAM;AAAA,QACvC;AAAA,QACA;AAAA,QACA,YAAY,cAAc,QAAQ;AAAA,QAClC,UAAU,aAAa,UAAU,IAAI,cAAc,QAAQ,GAAG,EAAE;AAAA,QAChE,WAAW,WAAW,cAAc,QAAQ,KAAK;AAAA,QACjD;AAAA,QACC,GAAI,cAAc,KAAK,EAAE,IAAI,cAAc,GAAA,IAAO,CAAA;AAAA,MAAC;AAAA,IAAA,wBAGrD,gBAAA,EAAe,YAAY,cAAc,WAAA,CAAY,IAEtD,cAAc,SAAS,YACzB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,UAAU,aAAa,UAAU,WAAW;AAAA,QAC5C,WAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf,SAAS;AAAA,QACR,GAAI,cAAc,cAAc,EAAE,aAAa,cAAc,YAAA,IAAgB,CAAA;AAAA,MAAC;AAAA,IAAA,IAE/E,cAAc,SAAS,aACzB,oBAAoB,WAClB;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAI,iBAAiB,EAAE,YAAY,eAAA,IAAmB,CAAA;AAAA,QACtD,GAAI,2BAA2B,EAAE,eAAe,6BAA6B,CAAA;AAAA,MAAC;AAAA,IAAA,IAGjF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,YAAY;AAAA,QACZ,UAAU,CAAA;AAAA,QACV,eAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA,IAGF,kBAAkB,OACpB,oBAAC,SAAI,WAAU,iCAAgC,UAAA,oBAAA,CAAiB,IAEhE,oBAAC,OAAA,EAAI,WAAU,iCAAgC,0BAAY,EAAA,CAE/D;AAAA,EAAA,GACF;AAEJ;AAcA,SAAS,mBAAmB,UAAiC;AAC3D,QAAM,aAAa,kBAAkB,QAAQ,KAAK;AAClD,MAAI,eAAe,KAAK;AACtB,WAAO,EAAE,MAAM,OAAA;AAAA,EACjB;AAEA,QAAM,WAAW,WAAW,QAAQ,QAAQ,EAAE,EAAE,MAAM,GAAG;AACzD,MAAI,SAAS,CAAC,MAAM,YAAY;AAC9B,WAAO,EAAE,MAAM,WAAA;AAAA,EACjB;AACA,MAAI,SAAS,CAAC,MAAM,YAAY;AAC9B,WAAO,SAAS,CAAC,IAAI,EAAE,MAAM,WAAW,aAAa,SAAS,CAAC,EAAA,IAAM,EAAE,MAAM,UAAA;AAAA,EAC/E;AACA,QAAM,aAAa,SAAS,CAAC,KAAK;AAClC,MAAI,SAAS,CAAC,GAAG;AACf,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,IAAI,mBAAmB,SAAS,CAAC,CAAC;AAAA,IAAA;AAAA,EAEtC;AACA,SAAO,EAAE,MAAM,WAAW,WAAA;AAC5B;AAEA,SAAS,oBAAoB,OAAsB,UAA0C;AAC3F,MAAI,MAAM,SAAS,aAAa,MAAM,SAAS,UAAU;AACvD,WAAO;AAAA,EACT;AACA,QAAM,UAAU,SAAS,KAAK,CAAC,SAAS,KAAK,QAAQ,MAAM,UAAU;AACrE,SAAO,UAAU,EAAE,GAAG,OAAO,YAAY;AAC3C;AAEA,SAAS,qBAAqB,OAAsB,YAAoB;AACtE,SACG,MAAM,SAAS,aAAa,MAAM,eAAe,cACjD,MAAM,SAAS,YAAY,MAAM,eAAe;AAErD;AAEA,SAAS,iBAAiB,QAAiB;AACzC,SAAO;AAAA,IACL;AAAA,IACA,SAAS,qCAAqC;AAAA,EAAA,EAC9C,KAAK,GAAG;AACZ;AAEA,SAAS,cAAc,UAAkB,UAAkB;AACzD,QAAM,OAAO,kBAAkB,QAAQ;AACvC,MAAI,CAAC,QAAQ,SAAS,KAAK;AACzB,WAAO,kBAAkB,QAAQ,KAAK;AAAA,EACxC;AACA,MAAI,aAAa,MAAM;AACrB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,WAAW,GAAG,IAAI,GAAG,GAAG;AACnC,WAAO,kBAAkB,SAAS,MAAM,KAAK,MAAM,CAAC,KAAK;AAAA,EAC3D;AACA,SAAO,kBAAkB,QAAQ,KAAK;AACxC;AAEA,SAAS,aAAa,UAAkB,UAAkB;AACxD,QAAM,OAAO,kBAAkB,QAAQ;AACvC,MAAI,CAAC,QAAQ,SAAS,KAAK;AACzB,WAAO;AAAA,EACT;AACA,SAAO,GAAG,IAAI,GAAG,QAAQ;AAC3B;AAEA,SAAS,kBAAkB,OAAe;AACxC,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,MAAM,SAAS,IAAI,MAAM,QAAQ,QAAQ,EAAE,IAAI;AACxD;AAEA,SAAS,eAAe,EAAE,cAAsC;AAC9D,SACE,qBAAC,OAAA,EAAI,WAAU,qCAAoC,UAAA;AAAA,IAAA;AAAA,IAChC,oBAAC,UAAM,UAAA,WAAA,CAAW;AAAA,EAAA,GACrC;AAEJ;AAEA,MAAM,sBAAsB;AAC5B,MAAM,mBAAmB;AAEzB,SAAS,iBAAiB,UAAkB,UAAqD;;AAC/F,QAAM,cAAY,cAAS,cAAT,mBAAoB,UAAU,gBAAe,SAAS,QAAQ;AAChF,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,QAAO,cAAS,cAAT,mBAAoB,UAAU;AAC3C,QAAM,OAAO,SAAS,QAAQ,QAAQ,CAAA;AACtC,QAAM,QAAQ,SAAS,QAAQ,SAAS,CAAA;AAGxC,OAAI,6BAAM,UAAS,UAAS,6BAAM,WAAU,YAAY,KAAK,WAAW,KAAK,CAAC,GAAG;AAC/E,UAAMA,UAAS,IAAI,gBAAA;AACnB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,UAAI,UAAU,UAAa,UAAU,IAAI;AACvCA,gBAAO,IAAI,KAAK,KAAK;AAAA,MACvB;AAAA,IACF;AACA,UAAMC,SAAQD,QAAO,SAAA;AACrB,UAAME,UAASD,SAAQ,IAAIA,MAAK,KAAK;AACrC,WAAO;AAAA,MACL;AAAA,MACA,IAAI,mBAAmB,KAAK,OAAO,CAAC,IAAI,mBAAmB,KAAK,CAAC,CAAC,CAAC,GAAGC,OAAM;AAAA,IAAA;AAAA,EAEhF;AAEA,QAAM,SAAS,IAAI,gBAAA;AACnB,OAAK,QAAQ,CAAC,OAAO,UAAU;AAC7B,QAAI,UAAU,UAAa,UAAU,IAAI;AACvC,aAAO,IAAI,GAAG,gBAAgB,GAAG,KAAK,IAAI,KAAK;AAAA,IACjD;AAAA,EACF,CAAC;AACD,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,UAAU,UAAa,UAAU,IAAI;AACvC,aAAO,IAAI,KAAK,KAAK;AAAA,IACvB;AAAA,EACF;AACA,MAAI,SAAS,QAAQ,SAAS;AAC5B,WAAO,IAAI,qBAAqB,GAAG;AAAA,EACrC;AAEA,QAAM,QAAQ,OAAO,SAAA;AACrB,QAAM,SAAS,QAAQ,IAAI,KAAK,KAAK;AACrC,SAAO,aAAa,UAAU,aAAa,mBAAmB,SAAS,CAAC,GAAG,MAAM,EAAE;AACrF;AAEA,SAAS,yBAAsF;AAC7F,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,EAAE,eAAe,IAAI,SAAS,MAAA;AAAA,EACvC;AACA,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,gBAAwC,CAAA;AAC9C,MAAI,UAAU;AACd,QAAM,aAAuB,CAAA;AAE7B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,WAAW;AAC3C,QAAI,QAAQ,qBAAqB;AAC/B,gBAAU,UAAU,OAAO,UAAU;AACrC;AAAA,IACF;AACA,QAAI,IAAI,WAAW,gBAAgB,GAAG;AACpC,YAAM,QAAQ,OAAO,SAAS,IAAI,MAAM,iBAAiB,MAAM,GAAG,EAAE;AACpE,UAAI,OAAO,SAAS,KAAK,KAAK,SAAS,GAAG;AACxC,mBAAW,KAAK,IAAI;AAAA,MACtB;AACA;AAAA,IACF;AACA,kBAAc,GAAG,IAAI;AAAA,EACvB;AAEA,QAAM,aAAa,WAAW,OAAO,CAAC,UAAU,UAAU,MAAS,EAAE,KAAK,GAAG;AAC7E,MAAI,eAAe,IAAI;AACrB,kBAAc,OAAO;AAAA,EACvB;AAEA,SAAO,EAAE,eAAe,QAAA;AAC1B;"}
@@ -0,0 +1,14 @@
1
+ import { ClickyCommandRuntime, ClickyTableRowHref, ClickyTableRowClick, ClickyTableRowPredicate } from '../data/Clicky';
2
+ import { ExecutionResponse } from './types';
3
+ export type ExecutionResultProps = {
4
+ response?: ExecutionResponse | null;
5
+ emptyMessage?: string;
6
+ ariaLabel?: string;
7
+ className?: string;
8
+ commandRuntime?: ClickyCommandRuntime;
9
+ onTableRowClick?: ClickyTableRowClick;
10
+ getTableRowHref?: ClickyTableRowHref;
11
+ isTableRowClickable?: ClickyTableRowPredicate;
12
+ };
13
+ export declare function ExecutionResult({ response, emptyMessage, ariaLabel, className, commandRuntime, onTableRowClick, getTableRowHref, isTableRowClickable, }: ExecutionResultProps): import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=ExecutionResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionResult.d.ts","sourceRoot":"","sources":["../../src/rpc/ExecutionResult.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EAGzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC7B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC/C,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,YAAiC,EACjC,SAA2B,EAC3B,SAAS,EACT,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,EAAE,oBAAoB,2CA+CtB"}
@@ -0,0 +1,51 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { parseClickyData, Clicky } from "../data/Clicky.js";
3
+ import { cn } from "../lib/utils.js";
4
+ import { parseJsonBody } from "./classify.js";
5
+ function ExecutionResult({
6
+ response,
7
+ emptyMessage = "No response yet.",
8
+ ariaLabel = "Response body",
9
+ className,
10
+ commandRuntime,
11
+ onTableRowClick,
12
+ getTableRowHref,
13
+ isTableRowClickable
14
+ }) {
15
+ if (!response) {
16
+ return /* @__PURE__ */ jsx("p", { className: cn("mt-3 text-sm text-muted-foreground", className), children: emptyMessage });
17
+ }
18
+ const rawText = response.stdout || response.output || response.message || "";
19
+ const parsedPayload = response.parsed ?? parseJsonBody(response);
20
+ const clickyPayload = typeof parsedPayload === "string" || parsedPayload != null && typeof parsedPayload === "object" ? parsedPayload : rawText;
21
+ const parsedClicky = clickyPayload === "" ? null : parseClickyData(clickyPayload);
22
+ if (parsedClicky == null ? void 0 : parsedClicky.ok) {
23
+ return /* @__PURE__ */ jsx("div", { role: "region", "aria-label": ariaLabel, className: cn("mt-3", className), children: /* @__PURE__ */ jsx(
24
+ Clicky,
25
+ {
26
+ data: parsedClicky.document,
27
+ ...response.requestUrl ? { url: response.requestUrl } : {},
28
+ ...commandRuntime ? { commandRuntime } : {},
29
+ ...onTableRowClick ? { onTableRowClick } : {},
30
+ ...getTableRowHref ? { getTableRowHref } : {},
31
+ ...isTableRowClickable ? { isTableRowClickable } : {}
32
+ }
33
+ ) });
34
+ }
35
+ const renderedText = parsedPayload != null ? JSON.stringify(parsedPayload, null, 2) : rawText;
36
+ if (!renderedText) {
37
+ return /* @__PURE__ */ jsx("p", { className: cn("mt-3 text-sm text-muted-foreground", className), children: "Response completed with no body." });
38
+ }
39
+ return /* @__PURE__ */ jsx(
40
+ "pre",
41
+ {
42
+ "aria-label": ariaLabel,
43
+ className: cn("mt-3 overflow-auto rounded-md bg-muted p-4 text-xs", className),
44
+ children: renderedText
45
+ }
46
+ );
47
+ }
48
+ export {
49
+ ExecutionResult
50
+ };
51
+ //# sourceMappingURL=ExecutionResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionResult.js","sources":["../../src/rpc/ExecutionResult.tsx"],"sourcesContent":["import {\n Clicky,\n parseClickyData,\n type ClickyCommandRuntime,\n type ClickyDocument,\n type ClickyNode,\n type ClickyTableRowHref,\n type ClickyTableRowClick,\n type ClickyTableRowPredicate,\n} from \"../data/Clicky\";\nimport { cn } from \"../lib/utils\";\nimport { parseJsonBody } from \"./classify\";\nimport type { ExecutionResponse } from \"./types\";\n\nexport type ExecutionResultProps = {\n response?: ExecutionResponse | null;\n emptyMessage?: string;\n ariaLabel?: string;\n className?: string;\n commandRuntime?: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick;\n getTableRowHref?: ClickyTableRowHref;\n isTableRowClickable?: ClickyTableRowPredicate;\n};\n\nexport function ExecutionResult({\n response,\n emptyMessage = \"No response yet.\",\n ariaLabel = \"Response body\",\n className,\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n}: ExecutionResultProps) {\n if (!response) {\n return <p className={cn(\"mt-3 text-sm text-muted-foreground\", className)}>{emptyMessage}</p>;\n }\n\n const rawText = response.stdout || response.output || response.message || \"\";\n const parsedPayload = response.parsed ?? parseJsonBody(response);\n const clickyPayload: string | ClickyNode | ClickyDocument | undefined =\n typeof parsedPayload === \"string\" ||\n (parsedPayload != null && typeof parsedPayload === \"object\")\n ? (parsedPayload as ClickyNode | ClickyDocument)\n : rawText;\n const parsedClicky = clickyPayload === \"\" ? null : parseClickyData(clickyPayload);\n\n if (parsedClicky?.ok) {\n return (\n <div role=\"region\" aria-label={ariaLabel} className={cn(\"mt-3\", className)}>\n <Clicky\n data={parsedClicky.document}\n {...(response.requestUrl ? { url: response.requestUrl } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n />\n </div>\n );\n }\n\n const renderedText = parsedPayload != null ? JSON.stringify(parsedPayload, null, 2) : rawText;\n\n if (!renderedText) {\n return (\n <p className={cn(\"mt-3 text-sm text-muted-foreground\", className)}>\n Response completed with no body.\n </p>\n );\n }\n\n return (\n <pre\n aria-label={ariaLabel}\n className={cn(\"mt-3 overflow-auto rounded-md bg-muted p-4 text-xs\", className)}\n >\n {renderedText}\n </pre>\n );\n}\n"],"names":[],"mappings":";;;;AAyBO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA,eAAe;AAAA,EACf,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,MAAI,CAAC,UAAU;AACb,+BAAQ,KAAA,EAAE,WAAW,GAAG,sCAAsC,SAAS,GAAI,UAAA,cAAa;AAAA,EAC1F;AAEA,QAAM,UAAU,SAAS,UAAU,SAAS,UAAU,SAAS,WAAW;AAC1E,QAAM,gBAAgB,SAAS,UAAU,cAAc,QAAQ;AAC/D,QAAM,gBACJ,OAAO,kBAAkB,YACxB,iBAAiB,QAAQ,OAAO,kBAAkB,WAC9C,gBACD;AACN,QAAM,eAAe,kBAAkB,KAAK,OAAO,gBAAgB,aAAa;AAEhF,MAAI,6CAAc,IAAI;AACpB,WACE,oBAAC,OAAA,EAAI,MAAK,UAAS,cAAY,WAAW,WAAW,GAAG,QAAQ,SAAS,GACvE,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,aAAa;AAAA,QAClB,GAAI,SAAS,aAAa,EAAE,KAAK,SAAS,WAAA,IAAe,CAAA;AAAA,QACzD,GAAI,iBAAiB,EAAE,eAAA,IAAmB,CAAA;AAAA,QAC1C,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,QAC5C,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,QAC5C,GAAI,sBAAsB,EAAE,wBAAwB,CAAA;AAAA,MAAC;AAAA,IAAA,GAE1D;AAAA,EAEJ;AAEA,QAAM,eAAe,iBAAiB,OAAO,KAAK,UAAU,eAAe,MAAM,CAAC,IAAI;AAEtF,MAAI,CAAC,cAAc;AACjB,+BACG,KAAA,EAAE,WAAW,GAAG,sCAAsC,SAAS,GAAG,UAAA,oCAEnE;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,cAAY;AAAA,MACZ,WAAW,GAAG,sDAAsD,SAAS;AAAA,MAE5E,UAAA;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,22 @@
1
+ import { ParameterValues } from './formMetadata';
2
+ import { OpenAPIParameter } from './types';
3
+ import { OperationsApiClient } from './useOperations';
4
+ export type FilterFormProps = {
5
+ client: OperationsApiClient;
6
+ path: string;
7
+ method: string;
8
+ parameters?: OpenAPIParameter[];
9
+ initialValues?: ParameterValues | undefined;
10
+ lockedValues?: ParameterValues | undefined;
11
+ hideLocked?: boolean | undefined;
12
+ enableLookup?: boolean | undefined;
13
+ autoSubmit?: boolean | undefined;
14
+ submitLabel?: string | undefined;
15
+ submittingLabel?: string | undefined;
16
+ emptyMessage?: string | undefined;
17
+ isSubmitting?: boolean | undefined;
18
+ className?: string | undefined;
19
+ onSubmit: (values: ParameterValues) => void | Promise<void>;
20
+ };
21
+ export declare function FilterForm({ client, path, method, parameters, initialValues, lockedValues, hideLocked, enableLookup, autoSubmit, submitLabel, submittingLabel, emptyMessage, isSubmitting, className, onSubmit, }: FilterFormProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=FilterForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterForm.d.ts","sourceRoot":"","sources":["../../src/rpc/FilterForm.tsx"],"names":[],"mappings":"AAWA,OAAO,EAOL,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC5C,YAAY,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC3C,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,EACJ,MAAM,EACN,UAAe,EACf,aAAkB,EAClB,YAAiB,EACjB,UAAkB,EAClB,YAA6C,EAC7C,UAAkB,EAClB,WAA+B,EAC/B,eAA8B,EAC9B,YAAuD,EACvD,YAAoB,EACpB,SAAS,EACT,QAAQ,GACT,EAAE,eAAe,2CAsHjB"}