@flanksource/clicky-ui 0.2.19 → 0.2.20

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 (417) hide show
  1. package/dist/ai.cjs +26 -0
  2. package/dist/ai.cjs.map +1 -0
  3. package/dist/ai.d.ts +2 -0
  4. package/dist/ai.d.ts.map +1 -0
  5. package/dist/ai.js +26 -0
  6. package/dist/ai.js.map +1 -0
  7. package/dist/chat.cjs +7 -0
  8. package/dist/chat.cjs.map +1 -1
  9. package/dist/chat.js +7 -0
  10. package/dist/chat.js.map +1 -1
  11. package/dist/components/FilterBar.cjs +49 -18
  12. package/dist/components/FilterBar.cjs.map +1 -1
  13. package/dist/components/FilterBar.d.ts +0 -2
  14. package/dist/components/FilterBar.d.ts.map +1 -1
  15. package/dist/components/FilterBar.js +50 -19
  16. package/dist/components/FilterBar.js.map +1 -1
  17. package/dist/components/SearchInput.cjs +63 -0
  18. package/dist/components/SearchInput.cjs.map +1 -0
  19. package/dist/components/SearchInput.d.ts +31 -0
  20. package/dist/components/SearchInput.d.ts.map +1 -0
  21. package/dist/components/SearchInput.js +63 -0
  22. package/dist/components/SearchInput.js.map +1 -0
  23. package/dist/components/SegmentedControl.cjs +88 -0
  24. package/dist/components/SegmentedControl.cjs.map +1 -0
  25. package/dist/components/SegmentedControl.d.ts +38 -0
  26. package/dist/components/SegmentedControl.d.ts.map +1 -0
  27. package/dist/components/SegmentedControl.js +88 -0
  28. package/dist/components/SegmentedControl.js.map +1 -0
  29. package/dist/components/Switch.cjs +51 -0
  30. package/dist/components/Switch.cjs.map +1 -0
  31. package/dist/components/Switch.d.ts +23 -0
  32. package/dist/components/Switch.d.ts.map +1 -0
  33. package/dist/components/Switch.js +51 -0
  34. package/dist/components/Switch.js.map +1 -0
  35. package/dist/components/TimeRange.cjs +53 -45
  36. package/dist/components/TimeRange.cjs.map +1 -1
  37. package/dist/components/TimeRange.d.ts.map +1 -1
  38. package/dist/components/TimeRange.js +53 -45
  39. package/dist/components/TimeRange.js.map +1 -1
  40. package/dist/components/TreePickerField.cjs +5 -1
  41. package/dist/components/TreePickerField.cjs.map +1 -1
  42. package/dist/components/TreePickerField.d.ts.map +1 -1
  43. package/dist/components/TreePickerField.js +5 -1
  44. package/dist/components/TreePickerField.js.map +1 -1
  45. package/dist/components/filter-bar-utils.cjs +5 -0
  46. package/dist/components/filter-bar-utils.cjs.map +1 -1
  47. package/dist/components/filter-bar-utils.d.ts +2 -0
  48. package/dist/components/filter-bar-utils.d.ts.map +1 -1
  49. package/dist/components/filter-bar-utils.js +5 -0
  50. package/dist/components/filter-bar-utils.js.map +1 -1
  51. package/dist/components/json-schema-form-fields.cjs +8 -2
  52. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  53. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  54. package/dist/components/json-schema-form-fields.js +8 -2
  55. package/dist/components/json-schema-form-fields.js.map +1 -1
  56. package/dist/components/json-schema-form-resolve.cjs +1 -1
  57. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  58. package/dist/components/json-schema-form-resolve.js +1 -1
  59. package/dist/components/json-schema-form-resolve.js.map +1 -1
  60. package/dist/components.cjs +15 -1
  61. package/dist/components.cjs.map +1 -1
  62. package/dist/components.d.ts +8 -1
  63. package/dist/components.d.ts.map +1 -1
  64. package/dist/components.js +15 -1
  65. package/dist/components.js.map +1 -1
  66. package/dist/data/Clicky.cjs +33 -44
  67. package/dist/data/Clicky.cjs.map +1 -1
  68. package/dist/data/Clicky.d.ts +0 -9
  69. package/dist/data/Clicky.d.ts.map +1 -1
  70. package/dist/data/Clicky.js +31 -42
  71. package/dist/data/Clicky.js.map +1 -1
  72. package/dist/data/DataTable.cjs +73 -50
  73. package/dist/data/DataTable.cjs.map +1 -1
  74. package/dist/data/DataTable.d.ts +4 -0
  75. package/dist/data/DataTable.d.ts.map +1 -1
  76. package/dist/data/DataTable.js +73 -50
  77. package/dist/data/DataTable.js.map +1 -1
  78. package/dist/data/Icon.cjs +2 -5
  79. package/dist/data/Icon.cjs.map +1 -1
  80. package/dist/data/Icon.d.ts +1 -21
  81. package/dist/data/Icon.d.ts.map +1 -1
  82. package/dist/data/Icon.js +3 -6
  83. package/dist/data/Icon.js.map +1 -1
  84. package/dist/data/MatrixTable.cjs +4 -4
  85. package/dist/data/MatrixTable.cjs.map +1 -1
  86. package/dist/data/MatrixTable.js +4 -4
  87. package/dist/data/MatrixTable.js.map +1 -1
  88. package/dist/data/RadialGauge.cjs +76 -0
  89. package/dist/data/RadialGauge.cjs.map +1 -0
  90. package/dist/data/RadialGauge.d.ts +24 -0
  91. package/dist/data/RadialGauge.d.ts.map +1 -0
  92. package/dist/data/RadialGauge.js +76 -0
  93. package/dist/data/RadialGauge.js.map +1 -0
  94. package/dist/data/StatusBreakdown.cjs +0 -4
  95. package/dist/data/StatusBreakdown.cjs.map +1 -1
  96. package/dist/data/StatusBreakdown.d.ts +0 -2
  97. package/dist/data/StatusBreakdown.d.ts.map +1 -1
  98. package/dist/data/StatusBreakdown.js +1 -5
  99. package/dist/data/StatusBreakdown.js.map +1 -1
  100. package/dist/data/Timeline.cjs +61 -0
  101. package/dist/data/Timeline.cjs.map +1 -0
  102. package/dist/data/Timeline.d.ts +36 -0
  103. package/dist/data/Timeline.d.ts.map +1 -0
  104. package/dist/data/Timeline.js +61 -0
  105. package/dist/data/Timeline.js.map +1 -0
  106. package/dist/data/TimeseriesCoreBars.cjs +2 -25
  107. package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
  108. package/dist/data/TimeseriesCoreBars.d.ts +0 -19
  109. package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
  110. package/dist/data/TimeseriesCoreBars.js +2 -25
  111. package/dist/data/TimeseriesCoreBars.js.map +1 -1
  112. package/dist/data/TimeseriesCoreBars.model.cjs +27 -0
  113. package/dist/data/TimeseriesCoreBars.model.cjs.map +1 -0
  114. package/dist/data/TimeseriesCoreBars.model.d.ts +20 -0
  115. package/dist/data/TimeseriesCoreBars.model.d.ts.map +1 -0
  116. package/dist/data/TimeseriesCoreBars.model.js +27 -0
  117. package/dist/data/TimeseriesCoreBars.model.js.map +1 -0
  118. package/dist/data/TimeseriesPanel.axes.cjs.map +1 -1
  119. package/dist/data/TimeseriesPanel.axes.d.ts +1 -1
  120. package/dist/data/TimeseriesPanel.axes.d.ts.map +1 -1
  121. package/dist/data/TimeseriesPanel.axes.js.map +1 -1
  122. package/dist/data/TimeseriesPanel.cjs +4 -54
  123. package/dist/data/TimeseriesPanel.cjs.map +1 -1
  124. package/dist/data/TimeseriesPanel.d.ts +2 -138
  125. package/dist/data/TimeseriesPanel.d.ts.map +1 -1
  126. package/dist/data/TimeseriesPanel.js +2 -52
  127. package/dist/data/TimeseriesPanel.js.map +1 -1
  128. package/dist/data/TimeseriesPanel.model.cjs +53 -0
  129. package/dist/data/TimeseriesPanel.model.cjs.map +1 -0
  130. package/dist/data/TimeseriesPanel.model.d.ts +88 -0
  131. package/dist/data/TimeseriesPanel.model.d.ts.map +1 -0
  132. package/dist/data/TimeseriesPanel.model.js +53 -0
  133. package/dist/data/TimeseriesPanel.model.js.map +1 -0
  134. package/dist/data/Tree.cjs +1 -1
  135. package/dist/data/Tree.cjs.map +1 -1
  136. package/dist/data/Tree.js +1 -1
  137. package/dist/data/Tree.js.map +1 -1
  138. package/dist/data/ai/ChatFab.cjs +29 -0
  139. package/dist/data/ai/ChatFab.cjs.map +1 -0
  140. package/dist/data/ai/ChatFab.d.ts +12 -0
  141. package/dist/data/ai/ChatFab.d.ts.map +1 -0
  142. package/dist/data/ai/ChatFab.js +29 -0
  143. package/dist/data/ai/ChatFab.js.map +1 -0
  144. package/dist/data/ai/ChatWindow.cjs +178 -0
  145. package/dist/data/ai/ChatWindow.cjs.map +1 -0
  146. package/dist/data/ai/ChatWindow.d.ts +38 -0
  147. package/dist/data/ai/ChatWindow.d.ts.map +1 -0
  148. package/dist/data/ai/ChatWindow.js +156 -0
  149. package/dist/data/ai/ChatWindow.js.map +1 -0
  150. package/dist/data/ai/ChatWindowManager.cjs +139 -0
  151. package/dist/data/ai/ChatWindowManager.cjs.map +1 -0
  152. package/dist/data/ai/ChatWindowManager.d.ts +12 -0
  153. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -0
  154. package/dist/data/ai/ChatWindowManager.js +139 -0
  155. package/dist/data/ai/ChatWindowManager.js.map +1 -0
  156. package/dist/data/ai/ContextBadges.cjs +74 -0
  157. package/dist/data/ai/ContextBadges.cjs.map +1 -0
  158. package/dist/data/ai/ContextBadges.d.ts +16 -0
  159. package/dist/data/ai/ContextBadges.d.ts.map +1 -0
  160. package/dist/data/ai/ContextBadges.js +74 -0
  161. package/dist/data/ai/ContextBadges.js.map +1 -0
  162. package/dist/data/ai/ThreadPicker.cjs +148 -0
  163. package/dist/data/ai/ThreadPicker.cjs.map +1 -0
  164. package/dist/data/ai/ThreadPicker.d.ts +37 -0
  165. package/dist/data/ai/ThreadPicker.d.ts.map +1 -0
  166. package/dist/data/ai/ThreadPicker.js +148 -0
  167. package/dist/data/ai/ThreadPicker.js.map +1 -0
  168. package/dist/data/ai/ToolPreferences.cjs +80 -0
  169. package/dist/data/ai/ToolPreferences.cjs.map +1 -0
  170. package/dist/data/ai/ToolPreferences.d.ts +19 -0
  171. package/dist/data/ai/ToolPreferences.d.ts.map +1 -0
  172. package/dist/data/ai/ToolPreferences.js +80 -0
  173. package/dist/data/ai/ToolPreferences.js.map +1 -0
  174. package/dist/data/ai/chat-window-context.cjs +78 -0
  175. package/dist/data/ai/chat-window-context.cjs.map +1 -0
  176. package/dist/data/ai/chat-window-context.d.ts +57 -0
  177. package/dist/data/ai/chat-window-context.d.ts.map +1 -0
  178. package/dist/data/ai/chat-window-context.js +78 -0
  179. package/dist/data/ai/chat-window-context.js.map +1 -0
  180. package/dist/data/ai/context.cjs +43 -0
  181. package/dist/data/ai/context.cjs.map +1 -0
  182. package/dist/data/ai/context.d.ts +35 -0
  183. package/dist/data/ai/context.d.ts.map +1 -0
  184. package/dist/data/ai/context.js +43 -0
  185. package/dist/data/ai/context.js.map +1 -0
  186. package/dist/data/ai/index.d.ts +10 -0
  187. package/dist/data/ai/index.d.ts.map +1 -0
  188. package/dist/data/cache-browser/CacheDetailPanel.cjs +15 -0
  189. package/dist/data/cache-browser/CacheDetailPanel.cjs.map +1 -1
  190. package/dist/data/cache-browser/CacheDetailPanel.d.ts.map +1 -1
  191. package/dist/data/cache-browser/CacheDetailPanel.js +15 -0
  192. package/dist/data/cache-browser/CacheDetailPanel.js.map +1 -1
  193. package/dist/data/cache-browser/cache-browser.fixtures.d.ts +10 -0
  194. package/dist/data/cache-browser/cache-browser.fixtures.d.ts.map +1 -0
  195. package/dist/data/cache-browser/download.cjs +13 -0
  196. package/dist/data/cache-browser/download.cjs.map +1 -0
  197. package/dist/data/cache-browser/download.d.ts +3 -0
  198. package/dist/data/cache-browser/download.d.ts.map +1 -0
  199. package/dist/data/cache-browser/download.js +13 -0
  200. package/dist/data/cache-browser/download.js.map +1 -0
  201. package/dist/data/chat/Chat.cjs +40 -2
  202. package/dist/data/chat/Chat.cjs.map +1 -1
  203. package/dist/data/chat/Chat.d.ts +5 -2
  204. package/dist/data/chat/Chat.d.ts.map +1 -1
  205. package/dist/data/chat/Chat.fixtures.cjs +86 -0
  206. package/dist/data/chat/Chat.fixtures.cjs.map +1 -0
  207. package/dist/data/chat/Chat.fixtures.d.ts +4 -0
  208. package/dist/data/chat/Chat.fixtures.d.ts.map +1 -1
  209. package/dist/data/chat/Chat.fixtures.js +86 -0
  210. package/dist/data/chat/Chat.fixtures.js.map +1 -0
  211. package/dist/data/chat/Chat.js +41 -3
  212. package/dist/data/chat/Chat.js.map +1 -1
  213. package/dist/data/chat/ContextUsage.cjs +99 -0
  214. package/dist/data/chat/ContextUsage.cjs.map +1 -0
  215. package/dist/data/chat/ContextUsage.d.ts +19 -0
  216. package/dist/data/chat/ContextUsage.d.ts.map +1 -0
  217. package/dist/data/chat/ContextUsage.js +99 -0
  218. package/dist/data/chat/ContextUsage.js.map +1 -0
  219. package/dist/data/chat/ModelSelector.cjs +28 -14
  220. package/dist/data/chat/ModelSelector.cjs.map +1 -1
  221. package/dist/data/chat/ModelSelector.d.ts +5 -4
  222. package/dist/data/chat/ModelSelector.d.ts.map +1 -1
  223. package/dist/data/chat/ModelSelector.js +28 -14
  224. package/dist/data/chat/ModelSelector.js.map +1 -1
  225. package/dist/data/chat/clickyOperationsToTools.cjs +21 -1
  226. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  227. package/dist/data/chat/clickyOperationsToTools.d.ts +5 -4
  228. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  229. package/dist/data/chat/clickyOperationsToTools.js +21 -1
  230. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  231. package/dist/data/chat/index.d.ts +4 -1
  232. package/dist/data/chat/index.d.ts.map +1 -1
  233. package/dist/data/chat/provider-icons.cjs +15 -0
  234. package/dist/data/chat/provider-icons.cjs.map +1 -0
  235. package/dist/data/chat/provider-icons.d.ts +7 -0
  236. package/dist/data/chat/provider-icons.d.ts.map +1 -0
  237. package/dist/data/chat/provider-icons.js +15 -0
  238. package/dist/data/chat/provider-icons.js.map +1 -0
  239. package/dist/data/chat/types.cjs.map +1 -1
  240. package/dist/data/chat/types.d.ts +41 -9
  241. package/dist/data/chat/types.d.ts.map +1 -1
  242. package/dist/data/chat/types.js.map +1 -1
  243. package/dist/data/clicky-parse.cjs +42 -0
  244. package/dist/data/clicky-parse.cjs.map +1 -0
  245. package/dist/data/clicky-parse.d.ts +11 -0
  246. package/dist/data/clicky-parse.d.ts.map +1 -0
  247. package/dist/data/clicky-parse.js +42 -0
  248. package/dist/data/clicky-parse.js.map +1 -0
  249. package/dist/data/diagnostics/FrameSourceWindow.cjs +0 -4
  250. package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
  251. package/dist/data/diagnostics/FrameSourceWindow.d.ts +1 -11
  252. package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
  253. package/dist/data/diagnostics/FrameSourceWindow.js +1 -5
  254. package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
  255. package/dist/data/diagnostics/FrameSourceWindow.utils.cjs +7 -0
  256. package/dist/data/diagnostics/FrameSourceWindow.utils.cjs.map +1 -0
  257. package/dist/data/diagnostics/FrameSourceWindow.utils.d.ts +12 -0
  258. package/dist/data/diagnostics/FrameSourceWindow.utils.d.ts.map +1 -0
  259. package/dist/data/diagnostics/FrameSourceWindow.utils.js +7 -0
  260. package/dist/data/diagnostics/FrameSourceWindow.utils.js.map +1 -0
  261. package/dist/data/diagnostics/JvmStackTrace.cjs +2 -1
  262. package/dist/data/diagnostics/JvmStackTrace.cjs.map +1 -1
  263. package/dist/data/diagnostics/JvmStackTrace.d.ts.map +1 -1
  264. package/dist/data/diagnostics/JvmStackTrace.js +2 -1
  265. package/dist/data/diagnostics/JvmStackTrace.js.map +1 -1
  266. package/dist/data/icon-fallback.cjs +12 -0
  267. package/dist/data/icon-fallback.cjs.map +1 -0
  268. package/dist/data/icon-fallback.d.ts +19 -0
  269. package/dist/data/icon-fallback.d.ts.map +1 -0
  270. package/dist/data/icon-fallback.js +12 -0
  271. package/dist/data/icon-fallback.js.map +1 -0
  272. package/dist/data/status-breakdown-utils.cjs +7 -0
  273. package/dist/data/status-breakdown-utils.cjs.map +1 -0
  274. package/dist/data/status-breakdown-utils.d.ts +4 -0
  275. package/dist/data/status-breakdown-utils.d.ts.map +1 -0
  276. package/dist/data/status-breakdown-utils.js +7 -0
  277. package/dist/data/status-breakdown-utils.js.map +1 -0
  278. package/dist/data/test-runner/TestRunSummary.cjs +36 -0
  279. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  280. package/dist/data/test-runner/TestRunSummary.d.ts +7 -1
  281. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  282. package/dist/data/test-runner/TestRunSummary.js +36 -0
  283. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  284. package/dist/data/test-runner/TestRunner.cjs +5 -3
  285. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  286. package/dist/data/test-runner/TestRunner.d.ts +13 -1
  287. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  288. package/dist/data/test-runner/TestRunner.js +5 -3
  289. package/dist/data/test-runner/TestRunner.js.map +1 -1
  290. package/dist/data/version-info.cjs +2 -2
  291. package/dist/data/version-info.js +2 -2
  292. package/dist/data.cjs +19 -6
  293. package/dist/data.cjs.map +1 -1
  294. package/dist/data.d.ts +13 -5
  295. package/dist/data.d.ts.map +1 -1
  296. package/dist/data.js +18 -5
  297. package/dist/data.js.map +1 -1
  298. package/dist/index.cjs +51 -7
  299. package/dist/index.cjs.map +1 -1
  300. package/dist/index.js +50 -6
  301. package/dist/index.js.map +1 -1
  302. package/dist/layout/AppShell.cjs +179 -29
  303. package/dist/layout/AppShell.cjs.map +1 -1
  304. package/dist/layout/AppShell.d.ts +5 -5
  305. package/dist/layout/AppShell.d.ts.map +1 -1
  306. package/dist/layout/AppShell.js +179 -29
  307. package/dist/layout/AppShell.js.map +1 -1
  308. package/dist/layout/AppSidebar.cjs +239 -0
  309. package/dist/layout/AppSidebar.cjs.map +1 -0
  310. package/dist/layout/AppSidebar.d.ts +62 -0
  311. package/dist/layout/AppSidebar.d.ts.map +1 -0
  312. package/dist/layout/AppSidebar.js +239 -0
  313. package/dist/layout/AppSidebar.js.map +1 -0
  314. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  315. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  316. package/dist/overlay/DropdownMenu.js.map +1 -1
  317. package/dist/overlay/Modal.cjs +4 -2
  318. package/dist/overlay/Modal.cjs.map +1 -1
  319. package/dist/overlay/Modal.d.ts +1 -1
  320. package/dist/overlay/Modal.d.ts.map +1 -1
  321. package/dist/overlay/Modal.js +4 -2
  322. package/dist/overlay/Modal.js.map +1 -1
  323. package/dist/overlay/Toast.cjs +89 -0
  324. package/dist/overlay/Toast.cjs.map +1 -0
  325. package/dist/overlay/Toast.d.ts +14 -0
  326. package/dist/overlay/Toast.d.ts.map +1 -0
  327. package/dist/overlay/Toast.js +89 -0
  328. package/dist/overlay/Toast.js.map +1 -0
  329. package/dist/overlay/toast-context.cjs +12 -0
  330. package/dist/overlay/toast-context.cjs.map +1 -0
  331. package/dist/overlay/toast-context.d.ts +24 -0
  332. package/dist/overlay/toast-context.d.ts.map +1 -0
  333. package/dist/overlay/toast-context.js +12 -0
  334. package/dist/overlay/toast-context.js.map +1 -0
  335. package/dist/rpc/AcceptPicker.cjs +81 -58
  336. package/dist/rpc/AcceptPicker.cjs.map +1 -1
  337. package/dist/rpc/AcceptPicker.d.ts.map +1 -1
  338. package/dist/rpc/AcceptPicker.js +81 -58
  339. package/dist/rpc/AcceptPicker.js.map +1 -1
  340. package/dist/rpc/CommandForm.cjs +5 -35
  341. package/dist/rpc/CommandForm.cjs.map +1 -1
  342. package/dist/rpc/CommandForm.d.ts +0 -3
  343. package/dist/rpc/CommandForm.d.ts.map +1 -1
  344. package/dist/rpc/CommandForm.js +2 -32
  345. package/dist/rpc/CommandForm.js.map +1 -1
  346. package/dist/rpc/CommandOutput.cjs +2 -1
  347. package/dist/rpc/CommandOutput.cjs.map +1 -1
  348. package/dist/rpc/CommandOutput.d.ts.map +1 -1
  349. package/dist/rpc/CommandOutput.js +2 -1
  350. package/dist/rpc/CommandOutput.js.map +1 -1
  351. package/dist/rpc/EntityExplorerApp.cjs +28 -83
  352. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  353. package/dist/rpc/EntityExplorerApp.d.ts +1 -4
  354. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  355. package/dist/rpc/EntityExplorerApp.js +13 -68
  356. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  357. package/dist/rpc/OperationCatalog.cjs +2 -2
  358. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  359. package/dist/rpc/OperationCatalog.d.ts +1 -1
  360. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  361. package/dist/rpc/OperationCatalog.js +1 -1
  362. package/dist/rpc/OperationCatalog.js.map +1 -1
  363. package/dist/rpc/OperationCommandPage.cjs +6 -4
  364. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  365. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  366. package/dist/rpc/OperationCommandPage.js +3 -1
  367. package/dist/rpc/OperationCommandPage.js.map +1 -1
  368. package/dist/rpc/RouterProvider.cjs +10 -0
  369. package/dist/rpc/RouterProvider.cjs.map +1 -0
  370. package/dist/rpc/RouterProvider.d.ts +10 -0
  371. package/dist/rpc/RouterProvider.d.ts.map +1 -0
  372. package/dist/rpc/RouterProvider.js +10 -0
  373. package/dist/rpc/RouterProvider.js.map +1 -0
  374. package/dist/rpc/apiClient.cjs +4 -4
  375. package/dist/rpc/apiClient.cjs.map +1 -1
  376. package/dist/rpc/apiClient.js +4 -4
  377. package/dist/rpc/apiClient.js.map +1 -1
  378. package/dist/rpc/command-form-utils.cjs +43 -0
  379. package/dist/rpc/command-form-utils.cjs.map +1 -0
  380. package/dist/rpc/command-form-utils.d.ts +5 -0
  381. package/dist/rpc/command-form-utils.d.ts.map +1 -0
  382. package/dist/rpc/command-form-utils.js +43 -0
  383. package/dist/rpc/command-form-utils.js.map +1 -0
  384. package/dist/rpc/commandHref.cjs +62 -0
  385. package/dist/rpc/commandHref.cjs.map +1 -0
  386. package/dist/rpc/commandHref.d.ts +7 -0
  387. package/dist/rpc/commandHref.d.ts.map +1 -0
  388. package/dist/rpc/commandHref.js +62 -0
  389. package/dist/rpc/commandHref.js.map +1 -0
  390. package/dist/rpc/formMetadata.cjs +1 -1
  391. package/dist/rpc/formMetadata.cjs.map +1 -1
  392. package/dist/rpc/formMetadata.js +1 -1
  393. package/dist/rpc/formMetadata.js.map +1 -1
  394. package/dist/rpc/router.cjs +83 -0
  395. package/dist/rpc/router.cjs.map +1 -0
  396. package/dist/rpc/router.d.ts +24 -0
  397. package/dist/rpc/router.d.ts.map +1 -0
  398. package/dist/rpc/router.js +83 -0
  399. package/dist/rpc/router.js.map +1 -0
  400. package/dist/rpc/rpc-story-fixtures/orders.fixture.d.ts +3 -0
  401. package/dist/rpc/rpc-story-fixtures/orders.fixture.d.ts.map +1 -0
  402. package/dist/rpc/rpc-story-fixtures/services.fixture.d.ts +3 -0
  403. package/dist/rpc/rpc-story-fixtures/services.fixture.d.ts.map +1 -0
  404. package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts +24 -0
  405. package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts.map +1 -0
  406. package/dist/rpc/rpc-story-fixtures/widgets.fixture.d.ts +3 -0
  407. package/dist/rpc/rpc-story-fixtures/widgets.fixture.d.ts.map +1 -0
  408. package/dist/rpc/rpc-story.fixtures.d.ts +16 -0
  409. package/dist/rpc/rpc-story.fixtures.d.ts.map +1 -0
  410. package/dist/rpc.cjs +17 -0
  411. package/dist/rpc.cjs.map +1 -1
  412. package/dist/rpc.d.ts +5 -0
  413. package/dist/rpc.d.ts.map +1 -1
  414. package/dist/rpc.js +18 -1
  415. package/dist/rpc.js.map +1 -1
  416. package/dist/styles.css +1 -1
  417. package/package.json +11 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-context.d.ts","sourceRoot":"","sources":["../../src/overlay/toast-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC;AAElC,MAAM,MAAM,YAAY,GAAG;IACzB,oBAAoB;IACpB,OAAO,EAAE,SAAS,CAAC;IACnB,gEAAgE;IAChE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yEAAyE;IACzE,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,KAAK,MAAM,CAAC;IAClD,6BAA6B;IAC7B,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,YAAY,mDAAgD,CAAC;AAE1E,sEAAsE;AACtE,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C"}
@@ -0,0 +1,12 @@
1
+ import { useContext, createContext } from "react";
2
+ const ToastContext = createContext(null);
3
+ function useToast() {
4
+ const ctx = useContext(ToastContext);
5
+ if (!ctx) throw new Error("useToast must be used within a <ToastProvider>");
6
+ return ctx;
7
+ }
8
+ export {
9
+ ToastContext,
10
+ useToast
11
+ };
12
+ //# sourceMappingURL=toast-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-context.js","sources":["../../src/overlay/toast-context.ts"],"sourcesContent":["import { createContext, useContext, type ReactNode } from \"react\";\nimport type { BadgeTone } from \"../data/Badge\";\n\nexport type ToastTone = BadgeTone;\n\nexport type ToastOptions = {\n /** Message body. */\n message: ReactNode;\n /** Semantic color of the leading dot. Defaults to `neutral`. */\n tone?: ToastTone;\n /** Auto-dismiss delay in ms. `0` keeps it until dismissed. */\n durationMs?: number;\n};\n\nexport type ToastEntry = ToastOptions & { id: number };\n\nexport type ToastContextValue = {\n /** Show a toast; returns its id. Pass a string for a neutral message. */\n toast: (options: ToastOptions | string) => number;\n /** Dismiss a toast by id. */\n dismiss: (id: number) => void;\n};\n\nexport const ToastContext = createContext<ToastContextValue | null>(null);\n\n/** Access the toast API. Must be called under a `<ToastProvider>`. */\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used within a <ToastProvider>\");\n return ctx;\n}\n"],"names":[],"mappings":";AAuBO,MAAM,eAAe,cAAwC,IAAI;AAGjE,SAAS,WAA8B;AAC5C,QAAM,MAAM,WAAW,YAAY;AACnC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,gDAAgD;AAC1E,SAAO;AACT;"}
@@ -22,14 +22,16 @@ function AcceptPicker({
22
22
  onPreviewModeChange,
23
23
  className
24
24
  }) {
25
+ var _a;
25
26
  const rootRef = react.useRef(null);
26
27
  const [open, setOpen] = react.useState(false);
27
28
  const pad = size === "sm" ? "px-2 py-0.5" : "px-2.5 py-1";
29
+ const activeLabel = ((_a = options.find((opt) => opt.value === value)) == null ? void 0 : _a.label) ?? value;
28
30
  react.useEffect(() => {
29
31
  if (!open) return;
30
32
  const onPointerDown = (event) => {
31
- var _a;
32
- if (!((_a = rootRef.current) == null ? void 0 : _a.contains(event.target))) {
33
+ var _a2;
34
+ if (!((_a2 = rootRef.current) == null ? void 0 : _a2.contains(event.target))) {
33
35
  setOpen(false);
34
36
  }
35
37
  };
@@ -43,70 +45,91 @@ function AcceptPicker({
43
45
  document.removeEventListener("keydown", onKeyDown);
44
46
  };
45
47
  }, [open]);
46
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: rootRef, className: utils.cn("relative flex flex-wrap gap-1", className), children: [
47
- options.map((opt) => /* @__PURE__ */ jsxRuntime.jsx(
48
- "button",
48
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: rootRef, className: utils.cn("relative flex", className), children: [
49
+ /* @__PURE__ */ jsxRuntime.jsxs(
50
+ button.Button,
49
51
  {
50
52
  type: "button",
51
- onClick: () => onChange(opt.value),
52
- className: utils.cn(
53
- "rounded-md border text-xs transition-colors",
54
- pad,
55
- value === opt.value ? "border-emerald-500 bg-emerald-50 font-medium text-emerald-700 dark:border-emerald-600 dark:bg-emerald-950/30 dark:text-emerald-400" : "text-muted-foreground hover:border-foreground/20 hover:text-foreground"
56
- ),
57
- children: opt.label
58
- },
59
- opt.value
60
- )),
61
- onPreviewModeChange && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
62
- /* @__PURE__ */ jsxRuntime.jsx(
63
- button.Button,
64
- {
65
- type: "button",
66
- variant: "outline",
67
- size: "sm",
68
- "aria-label": "Open preview menu",
69
- "aria-haspopup": "menu",
70
- "aria-expanded": open,
71
- className: utils.cn("h-auto", pad),
72
- onClick: () => setOpen((current) => !current),
73
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiEllipsis.UiEllipsis })
74
- }
75
- ),
76
- open && /* @__PURE__ */ jsxRuntime.jsx(
77
- "div",
78
- {
79
- role: "menu",
80
- "aria-label": "Preview options",
81
- className: "absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[12rem] rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5",
82
- children: PREVIEW_OPTIONS.map((option) => {
83
- const active = option.value === previewMode;
84
- return /* @__PURE__ */ jsxRuntime.jsxs(
85
- "button",
53
+ variant: "outline",
54
+ size: "sm",
55
+ "aria-label": "Open format menu",
56
+ "aria-haspopup": "menu",
57
+ "aria-expanded": open,
58
+ className: utils.cn("h-auto gap-1.5", pad),
59
+ onClick: () => setOpen((current) => !current),
60
+ children: [
61
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium", children: activeLabel }),
62
+ /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiEllipsis.UiEllipsis, className: "text-muted-foreground" })
63
+ ]
64
+ }
65
+ ),
66
+ open && /* @__PURE__ */ jsxRuntime.jsxs(
67
+ "div",
68
+ {
69
+ role: "menu",
70
+ "aria-label": "Format and preview options",
71
+ className: "absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[12rem] rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5",
72
+ children: [
73
+ /* @__PURE__ */ jsxRuntime.jsx(MenuSectionLabel, { children: "Format" }),
74
+ options.map((opt) => /* @__PURE__ */ jsxRuntime.jsx(
75
+ MenuRadioItem,
76
+ {
77
+ label: opt.label,
78
+ active: opt.value === value,
79
+ onSelect: () => {
80
+ onChange(opt.value);
81
+ setOpen(false);
82
+ }
83
+ },
84
+ opt.value
85
+ )),
86
+ onPreviewModeChange && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
87
+ /* @__PURE__ */ jsxRuntime.jsx("div", { role: "separator", className: "my-1 h-px bg-border" }),
88
+ /* @__PURE__ */ jsxRuntime.jsx(MenuSectionLabel, { children: "Preview" }),
89
+ PREVIEW_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
90
+ MenuRadioItem,
86
91
  {
87
- type: "button",
88
- role: "menuitemradio",
89
- "aria-checked": active,
90
- className: utils.cn(
91
- "flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors",
92
- "hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none"
93
- ),
94
- onClick: () => {
92
+ label: option.label,
93
+ active: option.value === previewMode,
94
+ onSelect: () => {
95
95
  onPreviewModeChange(option.value);
96
96
  setOpen(false);
97
- },
98
- children: [
99
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1", children: option.label }),
100
- active ? /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiCheck.UiCheck, className: "shrink-0" }) : null
101
- ]
97
+ }
102
98
  },
103
99
  option.value
104
- );
105
- })
106
- }
107
- )
108
- ] })
100
+ ))
101
+ ] })
102
+ ]
103
+ }
104
+ )
109
105
  ] });
110
106
  }
107
+ function MenuSectionLabel({ children }) {
108
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground", children });
109
+ }
110
+ function MenuRadioItem({
111
+ label,
112
+ active,
113
+ onSelect
114
+ }) {
115
+ return /* @__PURE__ */ jsxRuntime.jsxs(
116
+ "button",
117
+ {
118
+ type: "button",
119
+ role: "menuitemradio",
120
+ "aria-checked": active,
121
+ className: utils.cn(
122
+ "flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors",
123
+ "hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none",
124
+ active && "font-medium"
125
+ ),
126
+ onClick: onSelect,
127
+ children: [
128
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1", children: label }),
129
+ active ? /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiCheck.UiCheck, className: "shrink-0" }) : null
130
+ ]
131
+ }
132
+ );
133
+ }
111
134
  exports.AcceptPicker = AcceptPicker;
112
135
  //# sourceMappingURL=AcceptPicker.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AcceptPicker.cjs","sources":["../../src/rpc/AcceptPicker.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiEllipsis, UiCheck } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport {\n ACCEPT_OPTIONS,\n type AcceptOption,\n type OperationPreviewMode,\n} from \"./accept-options\";\n\nexport type AcceptPickerProps = {\n value: string;\n onChange: (value: string) => void;\n size?: \"sm\" | \"md\";\n options?: readonly AcceptOption[];\n previewMode?: OperationPreviewMode;\n onPreviewModeChange?: (mode: OperationPreviewMode) => void;\n className?: string;\n};\n\nconst PREVIEW_OPTIONS: Array<{ value: OperationPreviewMode; label: string }> = [\n { value: \"curl\", label: \"Show cURL preview\" },\n { value: \"cli\", label: \"Show CLI preview\" },\n { value: \"hidden\", label: \"Hide preview\" },\n];\n\nexport function AcceptPicker({\n value,\n onChange,\n size = \"md\",\n options = ACCEPT_OPTIONS,\n previewMode = \"hidden\",\n onPreviewModeChange,\n className,\n}: AcceptPickerProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const pad = size === \"sm\" ? \"px-2 py-0.5\" : \"px-2.5 py-1\";\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: PointerEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open]);\n\n return (\n <div ref={rootRef} className={cn(\"relative flex flex-wrap gap-1\", className)}>\n {options.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => onChange(opt.value)}\n className={cn(\n \"rounded-md border text-xs transition-colors\",\n pad,\n value === opt.value\n ? \"border-emerald-500 bg-emerald-50 font-medium text-emerald-700 dark:border-emerald-600 dark:bg-emerald-950/30 dark:text-emerald-400\"\n : \"text-muted-foreground hover:border-foreground/20 hover:text-foreground\",\n )}\n >\n {opt.label}\n </button>\n ))}\n {onPreviewModeChange && (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label=\"Open preview menu\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className={cn(\"h-auto\", pad)}\n onClick={() => setOpen((current) => !current)}\n >\n <Icon icon={UiEllipsis} />\n </Button>\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Preview options\"\n className=\"absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[12rem] rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\"\n >\n {PREVIEW_OPTIONS.map((option) => {\n const active = option.value === previewMode;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n )}\n onClick={() => {\n onPreviewModeChange(option.value);\n setOpen(false);\n }}\n >\n <span className=\"min-w-0 flex-1\">{option.label}</span>\n {active ? <Icon icon={UiCheck} className=\"shrink-0\" /> : null}\n </button>\n );\n })}\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n"],"names":["ACCEPT_OPTIONS","useRef","useState","useEffect","jsxs","cn","jsx","Fragment","Button","Icon","UiEllipsis","UiCheck"],"mappings":"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"}
1
+ {"version":3,"file":"AcceptPicker.cjs","sources":["../../src/rpc/AcceptPicker.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiEllipsis, UiCheck } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport {\n ACCEPT_OPTIONS,\n type AcceptOption,\n type OperationPreviewMode,\n} from \"./accept-options\";\n\nexport type AcceptPickerProps = {\n value: string;\n onChange: (value: string) => void;\n size?: \"sm\" | \"md\";\n options?: readonly AcceptOption[];\n previewMode?: OperationPreviewMode;\n onPreviewModeChange?: (mode: OperationPreviewMode) => void;\n className?: string;\n};\n\nconst PREVIEW_OPTIONS: Array<{ value: OperationPreviewMode; label: string }> = [\n { value: \"curl\", label: \"Show cURL preview\" },\n { value: \"cli\", label: \"Show CLI preview\" },\n { value: \"hidden\", label: \"Hide preview\" },\n];\n\nexport function AcceptPicker({\n value,\n onChange,\n size = \"md\",\n options = ACCEPT_OPTIONS,\n previewMode = \"hidden\",\n onPreviewModeChange,\n className,\n}: AcceptPickerProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const pad = size === \"sm\" ? \"px-2 py-0.5\" : \"px-2.5 py-1\";\n const activeLabel = options.find((opt) => opt.value === value)?.label ?? value;\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: PointerEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open]);\n\n return (\n <div ref={rootRef} className={cn(\"relative flex\", className)}>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label=\"Open format menu\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className={cn(\"h-auto gap-1.5\", pad)}\n onClick={() => setOpen((current) => !current)}\n >\n <span className=\"text-xs font-medium\">{activeLabel}</span>\n <Icon icon={UiEllipsis} className=\"text-muted-foreground\" />\n </Button>\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Format and preview options\"\n className=\"absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[12rem] rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\"\n >\n <MenuSectionLabel>Format</MenuSectionLabel>\n {options.map((opt) => (\n <MenuRadioItem\n key={opt.value}\n label={opt.label}\n active={opt.value === value}\n onSelect={() => {\n onChange(opt.value);\n setOpen(false);\n }}\n />\n ))}\n {onPreviewModeChange && (\n <>\n <div role=\"separator\" className=\"my-1 h-px bg-border\" />\n <MenuSectionLabel>Preview</MenuSectionLabel>\n {PREVIEW_OPTIONS.map((option) => (\n <MenuRadioItem\n key={option.value}\n label={option.label}\n active={option.value === previewMode}\n onSelect={() => {\n onPreviewModeChange(option.value);\n setOpen(false);\n }}\n />\n ))}\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction MenuSectionLabel({ children }: { children: string }) {\n return (\n <div className=\"px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n {children}\n </div>\n );\n}\n\nfunction MenuRadioItem({\n label,\n active,\n onSelect,\n}: {\n label: string;\n active: boolean;\n onSelect: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n active && \"font-medium\",\n )}\n onClick={onSelect}\n >\n <span className=\"min-w-0 flex-1\">{label}</span>\n {active ? <Icon icon={UiCheck} className=\"shrink-0\" /> : null}\n </button>\n );\n}\n"],"names":["ACCEPT_OPTIONS","useRef","useState","useEffect","_a","jsxs","cn","Button","jsx","Icon","UiEllipsis","Fragment","UiCheck"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AcceptPicker.d.ts","sourceRoot":"","sources":["../../src/rpc/AcceptPicker.tsx"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAQF,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,IAAW,EACX,OAAwB,EACxB,WAAsB,EACtB,mBAAmB,EACnB,SAAS,GACV,EAAE,iBAAiB,2CAyFnB"}
1
+ {"version":3,"file":"AcceptPicker.d.ts","sourceRoot":"","sources":["../../src/rpc/AcceptPicker.tsx"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAQF,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,IAAW,EACX,OAAwB,EACxB,WAAsB,EACtB,mBAAmB,EACnB,SAAS,GACV,EAAE,iBAAiB,2CA8EnB"}
@@ -20,14 +20,16 @@ function AcceptPicker({
20
20
  onPreviewModeChange,
21
21
  className
22
22
  }) {
23
+ var _a;
23
24
  const rootRef = useRef(null);
24
25
  const [open, setOpen] = useState(false);
25
26
  const pad = size === "sm" ? "px-2 py-0.5" : "px-2.5 py-1";
27
+ const activeLabel = ((_a = options.find((opt) => opt.value === value)) == null ? void 0 : _a.label) ?? value;
26
28
  useEffect(() => {
27
29
  if (!open) return;
28
30
  const onPointerDown = (event) => {
29
- var _a;
30
- if (!((_a = rootRef.current) == null ? void 0 : _a.contains(event.target))) {
31
+ var _a2;
32
+ if (!((_a2 = rootRef.current) == null ? void 0 : _a2.contains(event.target))) {
31
33
  setOpen(false);
32
34
  }
33
35
  };
@@ -41,71 +43,92 @@ function AcceptPicker({
41
43
  document.removeEventListener("keydown", onKeyDown);
42
44
  };
43
45
  }, [open]);
44
- return /* @__PURE__ */ jsxs("div", { ref: rootRef, className: cn("relative flex flex-wrap gap-1", className), children: [
45
- options.map((opt) => /* @__PURE__ */ jsx(
46
- "button",
46
+ return /* @__PURE__ */ jsxs("div", { ref: rootRef, className: cn("relative flex", className), children: [
47
+ /* @__PURE__ */ jsxs(
48
+ Button,
47
49
  {
48
50
  type: "button",
49
- onClick: () => onChange(opt.value),
50
- className: cn(
51
- "rounded-md border text-xs transition-colors",
52
- pad,
53
- value === opt.value ? "border-emerald-500 bg-emerald-50 font-medium text-emerald-700 dark:border-emerald-600 dark:bg-emerald-950/30 dark:text-emerald-400" : "text-muted-foreground hover:border-foreground/20 hover:text-foreground"
54
- ),
55
- children: opt.label
56
- },
57
- opt.value
58
- )),
59
- onPreviewModeChange && /* @__PURE__ */ jsxs(Fragment, { children: [
60
- /* @__PURE__ */ jsx(
61
- Button,
62
- {
63
- type: "button",
64
- variant: "outline",
65
- size: "sm",
66
- "aria-label": "Open preview menu",
67
- "aria-haspopup": "menu",
68
- "aria-expanded": open,
69
- className: cn("h-auto", pad),
70
- onClick: () => setOpen((current) => !current),
71
- children: /* @__PURE__ */ jsx(Icon, { icon: UiEllipsis })
72
- }
73
- ),
74
- open && /* @__PURE__ */ jsx(
75
- "div",
76
- {
77
- role: "menu",
78
- "aria-label": "Preview options",
79
- className: "absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[12rem] rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5",
80
- children: PREVIEW_OPTIONS.map((option) => {
81
- const active = option.value === previewMode;
82
- return /* @__PURE__ */ jsxs(
83
- "button",
51
+ variant: "outline",
52
+ size: "sm",
53
+ "aria-label": "Open format menu",
54
+ "aria-haspopup": "menu",
55
+ "aria-expanded": open,
56
+ className: cn("h-auto gap-1.5", pad),
57
+ onClick: () => setOpen((current) => !current),
58
+ children: [
59
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-medium", children: activeLabel }),
60
+ /* @__PURE__ */ jsx(Icon, { icon: UiEllipsis, className: "text-muted-foreground" })
61
+ ]
62
+ }
63
+ ),
64
+ open && /* @__PURE__ */ jsxs(
65
+ "div",
66
+ {
67
+ role: "menu",
68
+ "aria-label": "Format and preview options",
69
+ className: "absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[12rem] rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5",
70
+ children: [
71
+ /* @__PURE__ */ jsx(MenuSectionLabel, { children: "Format" }),
72
+ options.map((opt) => /* @__PURE__ */ jsx(
73
+ MenuRadioItem,
74
+ {
75
+ label: opt.label,
76
+ active: opt.value === value,
77
+ onSelect: () => {
78
+ onChange(opt.value);
79
+ setOpen(false);
80
+ }
81
+ },
82
+ opt.value
83
+ )),
84
+ onPreviewModeChange && /* @__PURE__ */ jsxs(Fragment, { children: [
85
+ /* @__PURE__ */ jsx("div", { role: "separator", className: "my-1 h-px bg-border" }),
86
+ /* @__PURE__ */ jsx(MenuSectionLabel, { children: "Preview" }),
87
+ PREVIEW_OPTIONS.map((option) => /* @__PURE__ */ jsx(
88
+ MenuRadioItem,
84
89
  {
85
- type: "button",
86
- role: "menuitemradio",
87
- "aria-checked": active,
88
- className: cn(
89
- "flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors",
90
- "hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none"
91
- ),
92
- onClick: () => {
90
+ label: option.label,
91
+ active: option.value === previewMode,
92
+ onSelect: () => {
93
93
  onPreviewModeChange(option.value);
94
94
  setOpen(false);
95
- },
96
- children: [
97
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children: option.label }),
98
- active ? /* @__PURE__ */ jsx(Icon, { icon: UiCheck, className: "shrink-0" }) : null
99
- ]
95
+ }
100
96
  },
101
97
  option.value
102
- );
103
- })
104
- }
105
- )
106
- ] })
98
+ ))
99
+ ] })
100
+ ]
101
+ }
102
+ )
107
103
  ] });
108
104
  }
105
+ function MenuSectionLabel({ children }) {
106
+ return /* @__PURE__ */ jsx("div", { className: "px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground", children });
107
+ }
108
+ function MenuRadioItem({
109
+ label,
110
+ active,
111
+ onSelect
112
+ }) {
113
+ return /* @__PURE__ */ jsxs(
114
+ "button",
115
+ {
116
+ type: "button",
117
+ role: "menuitemradio",
118
+ "aria-checked": active,
119
+ className: cn(
120
+ "flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors",
121
+ "hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none",
122
+ active && "font-medium"
123
+ ),
124
+ onClick: onSelect,
125
+ children: [
126
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children: label }),
127
+ active ? /* @__PURE__ */ jsx(Icon, { icon: UiCheck, className: "shrink-0" }) : null
128
+ ]
129
+ }
130
+ );
131
+ }
109
132
  export {
110
133
  AcceptPicker
111
134
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AcceptPicker.js","sources":["../../src/rpc/AcceptPicker.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiEllipsis, UiCheck } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport {\n ACCEPT_OPTIONS,\n type AcceptOption,\n type OperationPreviewMode,\n} from \"./accept-options\";\n\nexport type AcceptPickerProps = {\n value: string;\n onChange: (value: string) => void;\n size?: \"sm\" | \"md\";\n options?: readonly AcceptOption[];\n previewMode?: OperationPreviewMode;\n onPreviewModeChange?: (mode: OperationPreviewMode) => void;\n className?: string;\n};\n\nconst PREVIEW_OPTIONS: Array<{ value: OperationPreviewMode; label: string }> = [\n { value: \"curl\", label: \"Show cURL preview\" },\n { value: \"cli\", label: \"Show CLI preview\" },\n { value: \"hidden\", label: \"Hide preview\" },\n];\n\nexport function AcceptPicker({\n value,\n onChange,\n size = \"md\",\n options = ACCEPT_OPTIONS,\n previewMode = \"hidden\",\n onPreviewModeChange,\n className,\n}: AcceptPickerProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const pad = size === \"sm\" ? \"px-2 py-0.5\" : \"px-2.5 py-1\";\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: PointerEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open]);\n\n return (\n <div ref={rootRef} className={cn(\"relative flex flex-wrap gap-1\", className)}>\n {options.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => onChange(opt.value)}\n className={cn(\n \"rounded-md border text-xs transition-colors\",\n pad,\n value === opt.value\n ? \"border-emerald-500 bg-emerald-50 font-medium text-emerald-700 dark:border-emerald-600 dark:bg-emerald-950/30 dark:text-emerald-400\"\n : \"text-muted-foreground hover:border-foreground/20 hover:text-foreground\",\n )}\n >\n {opt.label}\n </button>\n ))}\n {onPreviewModeChange && (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label=\"Open preview menu\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className={cn(\"h-auto\", pad)}\n onClick={() => setOpen((current) => !current)}\n >\n <Icon icon={UiEllipsis} />\n </Button>\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Preview options\"\n className=\"absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[12rem] rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\"\n >\n {PREVIEW_OPTIONS.map((option) => {\n const active = option.value === previewMode;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n )}\n onClick={() => {\n onPreviewModeChange(option.value);\n setOpen(false);\n }}\n >\n <span className=\"min-w-0 flex-1\">{option.label}</span>\n {active ? <Icon icon={UiCheck} className=\"shrink-0\" /> : null}\n </button>\n );\n })}\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAqBA,MAAM,kBAAyE;AAAA,EAC7E,EAAE,OAAO,QAAQ,OAAO,oBAAA;AAAA,EACxB,EAAE,OAAO,OAAO,OAAO,mBAAA;AAAA,EACvB,EAAE,OAAO,UAAU,OAAO,eAAA;AAC5B;AAEO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,cAAc;AAAA,EACd;AAAA,EACA;AACF,GAAsB;AACpB,QAAM,UAAU,OAAuB,IAAI;AAC3C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,MAAM,SAAS,OAAO,gBAAgB;AAE5C,YAAU,MAAM;AACd,QAAI,CAAC,KAAM;AACX,UAAM,gBAAgB,CAAC,UAAwB;;AAC7C,UAAI,GAAC,aAAQ,YAAR,mBAAiB,SAAS,MAAM,UAAiB;AACpD,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF;AACA,UAAM,YAAY,CAAC,UAAyB;AAC1C,UAAI,MAAM,QAAQ,SAAU,SAAQ,KAAK;AAAA,IAC3C;AACA,aAAS,iBAAiB,eAAe,aAAa;AACtD,aAAS,iBAAiB,WAAW,SAAS;AAC9C,WAAO,MAAM;AACX,eAAS,oBAAoB,eAAe,aAAa;AACzD,eAAS,oBAAoB,WAAW,SAAS;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,SACE,qBAAC,SAAI,KAAK,SAAS,WAAW,GAAG,iCAAiC,SAAS,GACxE,UAAA;AAAA,IAAA,QAAQ,IAAI,CAAC,QACZ;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,SAAS,MAAM,SAAS,IAAI,KAAK;AAAA,QACjC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA,UAAU,IAAI,QACV,uIACA;AAAA,QAAA;AAAA,QAGL,UAAA,IAAI;AAAA,MAAA;AAAA,MAXA,IAAI;AAAA,IAAA,CAaZ;AAAA,IACA,uBACC,qBAAA,UAAA,EACE,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,cAAW;AAAA,UACX,iBAAc;AAAA,UACd,iBAAe;AAAA,UACf,WAAW,GAAG,UAAU,GAAG;AAAA,UAC3B,SAAS,MAAM,QAAQ,CAAC,YAAY,CAAC,OAAO;AAAA,UAE5C,UAAA,oBAAC,MAAA,EAAK,MAAM,WAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAEzB,QACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAW;AAAA,UACX,WAAU;AAAA,UAET,UAAA,gBAAgB,IAAI,CAAC,WAAW;AAC/B,kBAAM,SAAS,OAAO,UAAU;AAChC,mBACE;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,gBAAc;AAAA,gBACd,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,gBAAA;AAAA,gBAEF,SAAS,MAAM;AACb,sCAAoB,OAAO,KAAK;AAChC,0BAAQ,KAAK;AAAA,gBACf;AAAA,gBAEA,UAAA;AAAA,kBAAA,oBAAC,QAAA,EAAK,WAAU,kBAAkB,UAAA,OAAO,OAAM;AAAA,kBAC9C,SAAS,oBAAC,MAAA,EAAK,MAAM,SAAS,WAAU,YAAW,IAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,cAdpD,OAAO;AAAA,YAAA;AAAA,UAiBlB,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,EAAA,CAEJ;AAAA,EAAA,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"AcceptPicker.js","sources":["../../src/rpc/AcceptPicker.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiEllipsis, UiCheck } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport {\n ACCEPT_OPTIONS,\n type AcceptOption,\n type OperationPreviewMode,\n} from \"./accept-options\";\n\nexport type AcceptPickerProps = {\n value: string;\n onChange: (value: string) => void;\n size?: \"sm\" | \"md\";\n options?: readonly AcceptOption[];\n previewMode?: OperationPreviewMode;\n onPreviewModeChange?: (mode: OperationPreviewMode) => void;\n className?: string;\n};\n\nconst PREVIEW_OPTIONS: Array<{ value: OperationPreviewMode; label: string }> = [\n { value: \"curl\", label: \"Show cURL preview\" },\n { value: \"cli\", label: \"Show CLI preview\" },\n { value: \"hidden\", label: \"Hide preview\" },\n];\n\nexport function AcceptPicker({\n value,\n onChange,\n size = \"md\",\n options = ACCEPT_OPTIONS,\n previewMode = \"hidden\",\n onPreviewModeChange,\n className,\n}: AcceptPickerProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const pad = size === \"sm\" ? \"px-2 py-0.5\" : \"px-2.5 py-1\";\n const activeLabel = options.find((opt) => opt.value === value)?.label ?? value;\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: PointerEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open]);\n\n return (\n <div ref={rootRef} className={cn(\"relative flex\", className)}>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label=\"Open format menu\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className={cn(\"h-auto gap-1.5\", pad)}\n onClick={() => setOpen((current) => !current)}\n >\n <span className=\"text-xs font-medium\">{activeLabel}</span>\n <Icon icon={UiEllipsis} className=\"text-muted-foreground\" />\n </Button>\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Format and preview options\"\n className=\"absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[12rem] rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\"\n >\n <MenuSectionLabel>Format</MenuSectionLabel>\n {options.map((opt) => (\n <MenuRadioItem\n key={opt.value}\n label={opt.label}\n active={opt.value === value}\n onSelect={() => {\n onChange(opt.value);\n setOpen(false);\n }}\n />\n ))}\n {onPreviewModeChange && (\n <>\n <div role=\"separator\" className=\"my-1 h-px bg-border\" />\n <MenuSectionLabel>Preview</MenuSectionLabel>\n {PREVIEW_OPTIONS.map((option) => (\n <MenuRadioItem\n key={option.value}\n label={option.label}\n active={option.value === previewMode}\n onSelect={() => {\n onPreviewModeChange(option.value);\n setOpen(false);\n }}\n />\n ))}\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction MenuSectionLabel({ children }: { children: string }) {\n return (\n <div className=\"px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n {children}\n </div>\n );\n}\n\nfunction MenuRadioItem({\n label,\n active,\n onSelect,\n}: {\n label: string;\n active: boolean;\n onSelect: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n active && \"font-medium\",\n )}\n onClick={onSelect}\n >\n <span className=\"min-w-0 flex-1\">{label}</span>\n {active ? <Icon icon={UiCheck} className=\"shrink-0\" /> : null}\n </button>\n );\n}\n"],"names":["_a"],"mappings":"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"}
@@ -5,6 +5,7 @@ const react = require("react");
5
5
  const button = require("../components/button.cjs");
6
6
  const Icon = require("../data/Icon.cjs");
7
7
  const types = require("./types.cjs");
8
+ const commandFormUtils = require("./command-form-utils.cjs");
8
9
  const UiClose = require("../icons/components/UiClose.cjs");
9
10
  function formReducer(state, action) {
10
11
  return { ...state, [action.name]: action.value };
@@ -21,9 +22,9 @@ function CommandForm({
21
22
  const [values, dispatch] = react.useReducer(
22
23
  formReducer,
23
24
  { parameters, path, initialValues },
24
- ({ parameters: params, path: formPath, initialValues: overrides }) => buildInitialState(normalizeParameters(params, formPath), formPath, overrides)
25
+ ({ parameters: params, path: formPath, initialValues: overrides }) => buildInitialState(commandFormUtils.normalizeParameters(params, formPath), formPath, overrides)
25
26
  );
26
- const formParameters = normalizeParameters(parameters, path);
27
+ const formParameters = commandFormUtils.normalizeParameters(parameters, path);
27
28
  const visibleParams = formParameters.filter((p) => !(p.in === "path" && (initialValues == null ? void 0 : initialValues[p.name])));
28
29
  const positionalNames = new Set(formParameters.filter(types.isPositionalParam).map((p) => p.name));
29
30
  const inlineLayout = visibleParams.length >= INLINE_LAYOUT_THRESHOLD;
@@ -32,7 +33,7 @@ function CommandForm({
32
33
  const params = {};
33
34
  const args = [];
34
35
  for (const param of formParameters) {
35
- const value = submitValue(param, values[param.name]);
36
+ const value = commandFormUtils.submitValue(param, values[param.name]);
36
37
  if (value == null) continue;
37
38
  if (positionalNames.has(param.name)) {
38
39
  args.push(...splitArgsValue(value));
@@ -246,34 +247,12 @@ function FieldWrapper({
246
247
  param.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: param.description })
247
248
  ] });
248
249
  }
249
- function normalizeParameters(parameters, path) {
250
- const pathParams = pathParamNames(path);
251
- const firstPathParam = pathParams[0];
252
- const seen = new Set(parameters.map((param) => param.name));
253
- const normalized = parameters.filter(
254
- (param) => !(param.name === "args" && firstPathParam != null && !seen.has(firstPathParam))
255
- );
256
- for (const name of pathParams) {
257
- if (seen.has(name)) continue;
258
- normalized.unshift({
259
- name,
260
- in: "path",
261
- required: true,
262
- description: "Path parameter",
263
- schema: { type: "string" }
264
- });
265
- }
266
- return normalized;
267
- }
268
- function pathParamNames(path) {
269
- return [...path.matchAll(/\{([^}]+)\}/g)].map((match) => match[1]).filter((name) => Boolean(name));
270
- }
271
250
  function buildInitialState(parameters, path, overrides) {
272
251
  const state = {};
273
252
  for (const p of parameters) {
274
253
  state[p.name] = initialParamValue(p, overrides == null ? void 0 : overrides[p.name]);
275
254
  }
276
- for (const name of pathParamNames(path)) {
255
+ for (const name of commandFormUtils.pathParamNames(path)) {
277
256
  if (state[name] == null) {
278
257
  state[name] = (overrides == null ? void 0 : overrides[name]) ?? "";
279
258
  }
@@ -293,12 +272,6 @@ function sanitizeInitialValue(param, value) {
293
272
  if (isDateParam(param) && isZeroDate(trimmed)) return "";
294
273
  return value;
295
274
  }
296
- function submitValue(param, value) {
297
- const trimmed = (value ?? "").trim();
298
- if (!trimmed || trimmed === "[]" || trimmed === "null") return null;
299
- if (isDateParam(param) && isZeroDate(trimmed)) return null;
300
- return trimmed;
301
- }
302
275
  function splitArgsValue(value) {
303
276
  try {
304
277
  const parsed = JSON.parse(value);
@@ -351,7 +324,4 @@ function dateOutputValue(value, dateTime) {
351
324
  }
352
325
  const inputClassName = "h-9 w-full min-w-0 rounded-md border border-input bg-background px-2 text-sm text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring";
353
326
  exports.CommandForm = CommandForm;
354
- exports.normalizeParameters = normalizeParameters;
355
- exports.pathParamNames = pathParamNames;
356
- exports.submitValue = submitValue;
357
327
  //# sourceMappingURL=CommandForm.cjs.map