@scalar/api-client 3.13.7 → 3.15.0

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 (385) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +2 -1
  3. package/dist/assets/computer.ascii.virtual.js.map +1 -1
  4. package/dist/components/HelpfulLink.vue.script.js +1 -1
  5. package/dist/components/HelpfulLink.vue.script.js.map +1 -1
  6. package/dist/components/HttpMethod/HttpMethod.vue.js +1 -1
  7. package/dist/components/HttpMethod/HttpMethod.vue.script.js +1 -1
  8. package/dist/components/HttpMethod/HttpMethod.vue.script.js.map +1 -1
  9. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.js +1 -1
  10. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.script.js +1 -1
  11. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.script.js.map +1 -1
  12. package/dist/components/SectionFilter.vue.d.ts +1 -1
  13. package/dist/components/SectionFilter.vue.d.ts.map +1 -1
  14. package/dist/components/SectionFilter.vue.js +1 -1
  15. package/dist/components/SectionFilter.vue.script.js +2 -2
  16. package/dist/components/SectionFilter.vue.script.js.map +1 -1
  17. package/dist/components/SectionFilterButton.vue.script.js +1 -1
  18. package/dist/components/SectionFilterButton.vue.script.js.map +1 -1
  19. package/dist/components/Server/ServerVariablesForm.vue.d.ts.map +1 -1
  20. package/dist/components/Server/ServerVariablesForm.vue.script.js +1 -1
  21. package/dist/components/Server/ServerVariablesForm.vue.script.js.map +1 -1
  22. package/dist/components/Server/ServerVariablesSelect.vue.script.js +1 -1
  23. package/dist/components/Server/ServerVariablesSelect.vue.script.js.map +1 -1
  24. package/dist/components/Server/ServerVariablesTextbox.vue.script.js +1 -1
  25. package/dist/components/Server/ServerVariablesTextbox.vue.script.js.map +1 -1
  26. package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.d.ts.map +1 -1
  27. package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.script.js +1 -1
  28. package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.script.js.map +1 -1
  29. package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.d.ts.map +1 -1
  30. package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.script.js +1 -1
  31. package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.script.js.map +1 -1
  32. package/dist/components/ViewLayout/ViewLayout.vue.script.js +1 -1
  33. package/dist/components/ViewLayout/ViewLayout.vue.script.js.map +1 -1
  34. package/dist/components/ViewLayout/ViewLayoutContent.vue.js +1 -1
  35. package/dist/components/ViewLayout/ViewLayoutContent.vue.js.map +1 -1
  36. package/dist/components/ViewLayout/ViewLayoutSection.vue.script.js +1 -1
  37. package/dist/components/ViewLayout/ViewLayoutSection.vue.script.js.map +1 -1
  38. package/dist/hooks/use-file-dialog.js +2 -1
  39. package/dist/hooks/use-file-dialog.js.map +1 -1
  40. package/dist/plugins/posthog/index.js.map +1 -1
  41. package/dist/plugins/posthog/sanitize-event-payload.js +1 -1
  42. package/dist/plugins/posthog/sanitize-event-payload.js.map +1 -1
  43. package/dist/style.css +420 -382
  44. package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts.map +1 -1
  45. package/dist/v2/blocks/operation-block/OperationBlock.vue.js.map +1 -1
  46. package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js +4 -2
  47. package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js.map +1 -1
  48. package/dist/v2/blocks/operation-block/components/Header.vue.d.ts.map +1 -1
  49. package/dist/v2/blocks/operation-block/components/Header.vue.js +1 -1
  50. package/dist/v2/blocks/operation-block/components/Header.vue.script.js +1 -1
  51. package/dist/v2/blocks/operation-block/components/Header.vue.script.js.map +1 -1
  52. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.js +1 -1
  53. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.script.js +1 -1
  54. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.script.js.map +1 -1
  55. package/dist/v2/blocks/operation-block/helpers/decode-buffer.js.map +1 -1
  56. package/dist/v2/blocks/operation-block/helpers/get-cookie-header-keys.js.map +1 -1
  57. package/dist/v2/blocks/operation-block/helpers/har-to-fetch-request.js.map +1 -1
  58. package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.js.map +1 -1
  59. package/dist/v2/blocks/operation-block/helpers/persist-response-cookies.js.map +1 -1
  60. package/dist/v2/blocks/operation-block/helpers/response-cache.js.map +1 -1
  61. package/dist/v2/blocks/operation-block/helpers/send-request.js.map +1 -1
  62. package/dist/v2/blocks/operation-block/helpers/validate-path-parameters.js.map +1 -1
  63. package/dist/v2/blocks/request-block/RequestBlock.vue.d.ts.map +1 -1
  64. package/dist/v2/blocks/request-block/RequestBlock.vue.js +1 -1
  65. package/dist/v2/blocks/request-block/RequestBlock.vue.js.map +1 -1
  66. package/dist/v2/blocks/request-block/RequestBlock.vue.script.js +58 -29
  67. package/dist/v2/blocks/request-block/RequestBlock.vue.script.js.map +1 -1
  68. package/dist/v2/blocks/request-block/components/RequestBody.vue.d.ts +6 -6
  69. package/dist/v2/blocks/request-block/components/RequestBody.vue.d.ts.map +1 -1
  70. package/dist/v2/blocks/request-block/components/RequestBody.vue.js +1 -1
  71. package/dist/v2/blocks/request-block/components/RequestBody.vue.js.map +1 -1
  72. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js +73 -12
  73. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js.map +1 -1
  74. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.d.ts.map +1 -1
  75. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js +1 -1
  76. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js.map +1 -1
  77. package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.d.ts +19 -0
  78. package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.d.ts.map +1 -0
  79. package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.js +7 -0
  80. package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.js.map +1 -0
  81. package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.script.js +81 -0
  82. package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.script.js.map +1 -0
  83. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.d.ts +13 -0
  84. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.d.ts.map +1 -0
  85. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.js +7 -0
  86. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.js.map +1 -0
  87. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.script.js +34 -0
  88. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.script.js.map +1 -0
  89. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.d.ts.map +1 -1
  90. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.script.js +1 -1
  91. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.script.js.map +1 -1
  92. package/dist/v2/blocks/request-block/components/RequestParams.vue.d.ts +2 -0
  93. package/dist/v2/blocks/request-block/components/RequestParams.vue.d.ts.map +1 -1
  94. package/dist/v2/blocks/request-block/components/RequestParams.vue.js.map +1 -1
  95. package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js +5 -3
  96. package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js.map +1 -1
  97. package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts +2 -0
  98. package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts.map +1 -1
  99. package/dist/v2/blocks/request-block/components/RequestTable.vue.js +1 -1
  100. package/dist/v2/blocks/request-block/components/RequestTable.vue.js.map +1 -1
  101. package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js +6 -3
  102. package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js.map +1 -1
  103. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts +8 -0
  104. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts.map +1 -1
  105. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.js.map +1 -1
  106. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js +37 -18
  107. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js.map +1 -1
  108. package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.script.js +1 -1
  109. package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.script.js.map +1 -1
  110. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js.map +1 -1
  111. package/dist/v2/blocks/request-block/helpers/create-parameter-rows.js +1 -1
  112. package/dist/v2/blocks/request-block/helpers/create-parameter-rows.js.map +1 -1
  113. package/dist/v2/blocks/request-block/helpers/files.js.map +1 -1
  114. package/dist/v2/blocks/request-block/helpers/fold-structured-body-rows.d.ts +17 -0
  115. package/dist/v2/blocks/request-block/helpers/fold-structured-body-rows.d.ts.map +1 -0
  116. package/dist/v2/blocks/request-block/helpers/fold-structured-body-rows.js +33 -0
  117. package/dist/v2/blocks/request-block/helpers/fold-structured-body-rows.js.map +1 -0
  118. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.d.ts +28 -0
  119. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.d.ts.map +1 -1
  120. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js +12 -7
  121. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js.map +1 -1
  122. package/dist/v2/blocks/request-block/helpers/get-parameter-content.js.map +1 -1
  123. package/dist/v2/blocks/request-block/helpers/get-parameter-schema.js.map +1 -1
  124. package/dist/v2/blocks/request-block/helpers/get-structured-body-rows.d.ts +13 -0
  125. package/dist/v2/blocks/request-block/helpers/get-structured-body-rows.d.ts.map +1 -0
  126. package/dist/v2/blocks/request-block/helpers/get-structured-body-rows.js +39 -0
  127. package/dist/v2/blocks/request-block/helpers/get-structured-body-rows.js.map +1 -0
  128. package/dist/v2/blocks/request-block/helpers/group-by.js.map +1 -1
  129. package/dist/v2/blocks/request-block/helpers/group-global-cookies.d.ts +54 -0
  130. package/dist/v2/blocks/request-block/helpers/group-global-cookies.d.ts.map +1 -0
  131. package/dist/v2/blocks/request-block/helpers/group-global-cookies.js +56 -0
  132. package/dist/v2/blocks/request-block/helpers/group-global-cookies.js.map +1 -0
  133. package/dist/v2/blocks/request-block/helpers/structured-body-codec.d.ts +15 -0
  134. package/dist/v2/blocks/request-block/helpers/structured-body-codec.d.ts.map +1 -0
  135. package/dist/v2/blocks/request-block/helpers/structured-body-codec.js +33 -0
  136. package/dist/v2/blocks/request-block/helpers/structured-body-codec.js.map +1 -0
  137. package/dist/v2/blocks/request-block/helpers/validate-parameter.js.map +1 -1
  138. package/dist/v2/blocks/response-block/ResponseBlock.vue.d.ts.map +1 -1
  139. package/dist/v2/blocks/response-block/ResponseBlock.vue.js +1 -1
  140. package/dist/v2/blocks/response-block/ResponseBlock.vue.script.js +1 -1
  141. package/dist/v2/blocks/response-block/ResponseBlock.vue.script.js.map +1 -1
  142. package/dist/v2/blocks/response-block/components/Headers.vue.script.js +1 -1
  143. package/dist/v2/blocks/response-block/components/Headers.vue.script.js.map +1 -1
  144. package/dist/v2/blocks/response-block/components/ResponseBody.vue.js +1 -1
  145. package/dist/v2/blocks/response-block/components/ResponseBody.vue.script.js +1 -1
  146. package/dist/v2/blocks/response-block/components/ResponseBody.vue.script.js.map +1 -1
  147. package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.script.js +1 -1
  148. package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.script.js.map +1 -1
  149. package/dist/v2/blocks/response-block/components/ResponseBodyInfo.vue.js +1 -1
  150. package/dist/v2/blocks/response-block/components/ResponseBodyInfo.vue.js.map +1 -1
  151. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.js +1 -1
  152. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.script.js +1 -1
  153. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.script.js.map +1 -1
  154. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js +1 -1
  155. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js +1 -1
  156. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js.map +1 -1
  157. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.d.ts.map +1 -1
  158. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.script.js +1 -1
  159. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.script.js.map +1 -1
  160. package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.script.js +1 -1
  161. package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.script.js.map +1 -1
  162. package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.script.js +1 -1
  163. package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.script.js.map +1 -1
  164. package/dist/v2/blocks/response-block/components/ResponseCookies.vue.script.js +1 -1
  165. package/dist/v2/blocks/response-block/components/ResponseCookies.vue.script.js.map +1 -1
  166. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.js +1 -1
  167. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.script.js +1 -1
  168. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.script.js.map +1 -1
  169. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.d.ts.map +1 -1
  170. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.js +1 -1
  171. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.script.js +1 -1
  172. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.script.js.map +1 -1
  173. package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.script.js +1 -1
  174. package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.script.js.map +1 -1
  175. package/dist/v2/blocks/response-block/helpers/extract-filename.js.map +1 -1
  176. package/dist/v2/blocks/response-block/helpers/get-content-length.js.map +1 -1
  177. package/dist/v2/blocks/response-block/helpers/media-types.js.map +1 -1
  178. package/dist/v2/blocks/response-block/helpers/parse-set-cookie.js.map +1 -1
  179. package/dist/v2/blocks/response-block/helpers/prettify-jsonc-string.js.map +1 -1
  180. package/dist/v2/blocks/response-block/helpers/process-response-body.js.map +1 -1
  181. package/dist/v2/blocks/response-block/helpers/resolve-response-body-handler.js.map +1 -1
  182. package/dist/v2/blocks/response-block/helpers/resolve-response-content-type.js +7 -1
  183. package/dist/v2/blocks/response-block/helpers/resolve-response-content-type.js.map +1 -1
  184. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts.map +1 -1
  185. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js +1 -1
  186. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js +1 -1
  187. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js.map +1 -1
  188. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.d.ts.map +1 -1
  189. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js +1 -1
  190. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js +1 -1
  191. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js.map +1 -1
  192. package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.d.ts.map +1 -1
  193. package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.script.js +1 -1
  194. package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.script.js.map +1 -1
  195. package/dist/v2/blocks/scalar-address-bar-block/components/httpStatusCodeColors.js +3 -1
  196. package/dist/v2/blocks/scalar-address-bar-block/components/httpStatusCodeColors.js.map +1 -1
  197. package/dist/v2/blocks/scalar-address-bar-block/helpers/is-placeholder-path.js.map +1 -1
  198. package/dist/v2/blocks/scalar-address-bar-block/helpers/refocus-blur-target.js.map +1 -1
  199. package/dist/v2/blocks/scalar-address-bar-block/hooks/use-loading-animation.js.map +1 -1
  200. package/dist/v2/blocks/scalar-address-bar-block/hooks/use-path-masking.js.map +1 -1
  201. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.d.ts.map +1 -1
  202. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js +1 -1
  203. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js.map +1 -1
  204. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.d.ts.map +1 -1
  205. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.script.js +1 -1
  206. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.script.js.map +1 -1
  207. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.d.ts +18 -2
  208. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.d.ts.map +1 -1
  209. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.js.map +1 -1
  210. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js +19 -14
  211. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js.map +1 -1
  212. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.d.ts.map +1 -1
  213. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.script.js +1 -1
  214. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.script.js.map +1 -1
  215. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.d.ts +6 -2
  216. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.d.ts.map +1 -1
  217. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.js.map +1 -1
  218. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.script.js +17 -9
  219. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.script.js.map +1 -1
  220. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.d.ts.map +1 -1
  221. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.script.js +1 -1
  222. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.script.js.map +1 -1
  223. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.d.ts.map +1 -1
  224. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.script.js +1 -1
  225. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.script.js.map +1 -1
  226. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts.map +1 -1
  227. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js +3 -3
  228. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js.map +1 -1
  229. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.d.ts +7 -3
  230. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.d.ts.map +1 -1
  231. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.js.map +1 -1
  232. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js +339 -26
  233. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js.map +1 -1
  234. package/dist/v2/blocks/scalar-auth-selector-block/helpers/auth-options.js.map +1 -1
  235. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-openid-connect-discovery.js +5 -0
  236. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-openid-connect-discovery.js.map +1 -1
  237. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-callback.js +1 -1
  238. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-callback.js.map +1 -1
  239. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.d.ts.map +1 -1
  240. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js +9 -13
  241. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js.map +1 -1
  242. package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.js.map +1 -1
  243. package/dist/v2/blocks/scalar-auth-selector-block/helpers/resolve-default-oauth2-redirect-url.js.map +1 -1
  244. package/dist/v2/blocks/scalar-auth-selector-block/helpers/run-oauth2-authorize.d.ts +42 -0
  245. package/dist/v2/blocks/scalar-auth-selector-block/helpers/run-oauth2-authorize.d.ts.map +1 -0
  246. package/dist/v2/blocks/scalar-auth-selector-block/helpers/run-oauth2-authorize.js +60 -0
  247. package/dist/v2/blocks/scalar-auth-selector-block/helpers/run-oauth2-authorize.js.map +1 -0
  248. package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.d.ts +17 -1
  249. package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.d.ts.map +1 -1
  250. package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.js +33 -1
  251. package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.js.map +1 -1
  252. package/dist/v2/components/code-input/CodeInput.vue.d.ts.map +1 -1
  253. package/dist/v2/components/code-input/CodeInput.vue.js +1 -1
  254. package/dist/v2/components/code-input/CodeInput.vue.script.js +6 -1
  255. package/dist/v2/components/code-input/CodeInput.vue.script.js.map +1 -1
  256. package/dist/v2/components/code-input/CodeInputLite.vue.d.ts.map +1 -1
  257. package/dist/v2/components/code-input/CodeInputLite.vue.js +1 -1
  258. package/dist/v2/components/code-input/CodeInputLite.vue.script.js +5 -1
  259. package/dist/v2/components/code-input/CodeInputLite.vue.script.js.map +1 -1
  260. package/dist/v2/components/code-input/PillTooltipHost.vue.script.js +1 -1
  261. package/dist/v2/components/code-input/PillTooltipHost.vue.script.js.map +1 -1
  262. package/dist/v2/components/code-input/code-variable-widget.js +1 -0
  263. package/dist/v2/components/code-input/code-variable-widget.js.map +1 -1
  264. package/dist/v2/components/code-input/helpers/build-pill-context.js.map +1 -1
  265. package/dist/v2/components/code-input/helpers/lookup-variable-value.js.map +1 -1
  266. package/dist/v2/components/code-input/helpers/pill-signature.js.map +1 -1
  267. package/dist/v2/components/code-input/helpers/serialize-value.js.map +1 -1
  268. package/dist/v2/components/context-menu/ContextMenu.vue.script.js +1 -1
  269. package/dist/v2/components/context-menu/ContextMenu.vue.script.js.map +1 -1
  270. package/dist/v2/components/data-table/DataTable.vue.script.js +1 -1
  271. package/dist/v2/components/data-table/DataTable.vue.script.js.map +1 -1
  272. package/dist/v2/components/data-table/DataTableCell.vue.script.js +1 -1
  273. package/dist/v2/components/data-table/DataTableCell.vue.script.js.map +1 -1
  274. package/dist/v2/components/data-table/DataTableCheckbox.vue.d.ts +2 -0
  275. package/dist/v2/components/data-table/DataTableCheckbox.vue.d.ts.map +1 -1
  276. package/dist/v2/components/data-table/DataTableCheckbox.vue.js.map +1 -1
  277. package/dist/v2/components/data-table/DataTableCheckbox.vue.script.js +9 -3
  278. package/dist/v2/components/data-table/DataTableCheckbox.vue.script.js.map +1 -1
  279. package/dist/v2/components/data-table/DataTableHeader.vue.script.js +1 -1
  280. package/dist/v2/components/data-table/DataTableHeader.vue.script.js.map +1 -1
  281. package/dist/v2/components/data-table/DataTableInput.vue.d.ts.map +1 -1
  282. package/dist/v2/components/data-table/DataTableInput.vue.js +1 -1
  283. package/dist/v2/components/data-table/DataTableInput.vue.script.js +1 -1
  284. package/dist/v2/components/data-table/DataTableInput.vue.script.js.map +1 -1
  285. package/dist/v2/components/data-table/DataTableInputSelect.vue.d.ts.map +1 -1
  286. package/dist/v2/components/data-table/DataTableInputSelect.vue.script.js +3 -2
  287. package/dist/v2/components/data-table/DataTableInputSelect.vue.script.js.map +1 -1
  288. package/dist/v2/components/data-table/DataTableRow.vue.js +1 -1
  289. package/dist/v2/components/data-table/DataTableRow.vue.js.map +1 -1
  290. package/dist/v2/components/data-table/DataTableText.vue.script.js +1 -1
  291. package/dist/v2/components/data-table/DataTableText.vue.script.js.map +1 -1
  292. package/dist/v2/components/forms/ConfirmationForm.vue.d.ts.map +1 -1
  293. package/dist/v2/components/forms/ConfirmationForm.vue.script.js +1 -1
  294. package/dist/v2/components/forms/ConfirmationForm.vue.script.js.map +1 -1
  295. package/dist/v2/components/layout/CollapsibleSection.vue.d.ts.map +1 -1
  296. package/dist/v2/components/layout/CollapsibleSection.vue.script.js +1 -1
  297. package/dist/v2/components/layout/CollapsibleSection.vue.script.js.map +1 -1
  298. package/dist/v2/components/layout/ValueEmitter.vue.d.ts +1 -1
  299. package/dist/v2/components/layout/ValueEmitter.vue.d.ts.map +1 -1
  300. package/dist/v2/components/layout/ValueEmitter.vue.script.js +1 -1
  301. package/dist/v2/components/layout/ValueEmitter.vue.script.js.map +1 -1
  302. package/dist/v2/components/modals/DeleteModal.vue.d.ts.map +1 -1
  303. package/dist/v2/components/modals/DeleteModal.vue.script.js +1 -1
  304. package/dist/v2/components/modals/DeleteModal.vue.script.js.map +1 -1
  305. package/dist/v2/components/modals/ModalClientContainer.vue.js +1 -1
  306. package/dist/v2/components/modals/ModalClientContainer.vue.script.js +1 -1
  307. package/dist/v2/components/modals/ModalClientContainer.vue.script.js.map +1 -1
  308. package/dist/v2/components/resize/Resize.vue.js +1 -1
  309. package/dist/v2/components/resize/Resize.vue.script.js +1 -1
  310. package/dist/v2/components/resize/Resize.vue.script.js.map +1 -1
  311. package/dist/v2/components/resize/use-split-resize.js +4 -2
  312. package/dist/v2/components/resize/use-split-resize.js.map +1 -1
  313. package/dist/v2/components/server/ServerDropdown.vue.d.ts.map +1 -1
  314. package/dist/v2/components/server/ServerDropdown.vue.script.js +1 -1
  315. package/dist/v2/components/server/ServerDropdown.vue.script.js.map +1 -1
  316. package/dist/v2/components/server/ServerDropdownItem.vue.d.ts.map +1 -1
  317. package/dist/v2/components/server/ServerDropdownItem.vue.js +1 -1
  318. package/dist/v2/components/server/ServerDropdownItem.vue.script.js +1 -1
  319. package/dist/v2/components/server/ServerDropdownItem.vue.script.js.map +1 -1
  320. package/dist/v2/components/sidebar/Sidebar.vue.d.ts.map +1 -1
  321. package/dist/v2/components/sidebar/Sidebar.vue.script.js +3 -3
  322. package/dist/v2/components/sidebar/Sidebar.vue.script.js.map +1 -1
  323. package/dist/v2/components/sidebar/SidebarMenu.vue.d.ts.map +1 -1
  324. package/dist/v2/components/sidebar/SidebarMenu.vue.script.js +1 -1
  325. package/dist/v2/components/sidebar/SidebarMenu.vue.script.js.map +1 -1
  326. package/dist/v2/components/sidebar/SidebarToggle.vue.script.js +1 -1
  327. package/dist/v2/components/sidebar/SidebarToggle.vue.script.js.map +1 -1
  328. package/dist/v2/constants.js +1 -1
  329. package/dist/v2/features/command-palette/components/CommandActionForm.vue.script.js +1 -1
  330. package/dist/v2/features/command-palette/components/CommandActionForm.vue.script.js.map +1 -1
  331. package/dist/v2/features/command-palette/components/CommandActionInput.vue.script.js +1 -1
  332. package/dist/v2/features/command-palette/components/CommandActionInput.vue.script.js.map +1 -1
  333. package/dist/v2/features/environments/EnvironmentsList.vue.d.ts.map +1 -1
  334. package/dist/v2/features/environments/EnvironmentsList.vue.script.js +1 -1
  335. package/dist/v2/features/environments/EnvironmentsList.vue.script.js.map +1 -1
  336. package/dist/v2/features/environments/components/Environment.vue.d.ts.map +1 -1
  337. package/dist/v2/features/environments/components/Environment.vue.script.js +1 -1
  338. package/dist/v2/features/environments/components/Environment.vue.script.js.map +1 -1
  339. package/dist/v2/features/environments/components/EnvironmentColors.vue.script.js +3 -2
  340. package/dist/v2/features/environments/components/EnvironmentColors.vue.script.js.map +1 -1
  341. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.d.ts.map +1 -1
  342. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.script.js +1 -1
  343. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.script.js.map +1 -1
  344. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.d.ts.map +1 -1
  345. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.script.js +1 -1
  346. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.script.js.map +1 -1
  347. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.d.ts.map +1 -1
  348. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js +1 -1
  349. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js.map +1 -1
  350. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.d.ts.map +1 -1
  351. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.js +1 -1
  352. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.script.js +1 -1
  353. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.script.js.map +1 -1
  354. package/dist/v2/features/modal/Modal.vue.d.ts.map +1 -1
  355. package/dist/v2/features/modal/Modal.vue.script.js +1 -1
  356. package/dist/v2/features/modal/Modal.vue.script.js.map +1 -1
  357. package/dist/v2/features/modal/helpers/create-api-client-modal.js +11 -0
  358. package/dist/v2/features/modal/helpers/create-api-client-modal.js.map +1 -1
  359. package/dist/v2/features/modal/helpers/map-hidden-clients-config.js.map +1 -1
  360. package/dist/v2/features/modal/helpers/resolve-route-parameters.js +1 -1
  361. package/dist/v2/features/modal/helpers/resolve-route-parameters.js.map +1 -1
  362. package/dist/v2/features/modal/hooks/use-modal-sidebar.js.map +1 -1
  363. package/dist/v2/features/modal/modal-events.js.map +1 -1
  364. package/dist/v2/features/operation/Operation.vue.script.js +1 -1
  365. package/dist/v2/features/operation/Operation.vue.script.js.map +1 -1
  366. package/dist/v2/features/search/components/DocumentSearchModal.vue.d.ts.map +1 -1
  367. package/dist/v2/features/search/components/DocumentSearchModal.vue.js +1 -1
  368. package/dist/v2/features/search/components/DocumentSearchModal.vue.script.js +1 -1
  369. package/dist/v2/features/search/components/DocumentSearchModal.vue.script.js.map +1 -1
  370. package/dist/v2/features/search/components/SearchResult.vue.d.ts.map +1 -1
  371. package/dist/v2/features/search/components/SearchResult.vue.script.js +1 -1
  372. package/dist/v2/features/search/components/SearchResult.vue.script.js.map +1 -1
  373. package/dist/v2/features/search/helpers/create-fuse-instance.js.map +1 -1
  374. package/dist/v2/features/search/helpers/create-search-index.js.map +1 -1
  375. package/dist/v2/features/search/hooks/use-document-search.js.map +1 -1
  376. package/dist/v2/features/search/hooks/use-search-index.js.map +1 -1
  377. package/dist/v2/helpers/generate-location-id.js.map +1 -1
  378. package/dist/v2/helpers/handle-hotkeys.js +1 -1
  379. package/dist/v2/helpers/handle-hotkeys.js.map +1 -1
  380. package/dist/v2/helpers/test-utils.js.map +1 -1
  381. package/dist/v2/hooks/use-global-hot-keys.js.map +1 -1
  382. package/dist/v2/hooks/use-scroll-lock.js.map +1 -1
  383. package/dist/v2/workspace-events.js.map +1 -1
  384. package/dist/vue-styles.css +228 -235
  385. package/package.json +22 -22
@@ -1 +1 @@
1
- {"version":3,"file":"RequestCodeSnippet.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestCodeSnippet.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n findClient,\n generateCodeSnippet,\n getClients,\n getCustomCodeSamples,\n getSecrets,\n type ClientOption,\n type CodeExampleProps,\n type CustomClientOption,\n} from '@scalar/blocks/code-example'\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarCodeBlock } from '@scalar/components/code-block'\nimport { ScalarCombobox } from '@scalar/components/combobox'\nimport { ScalarErrorBoundary } from '@scalar/components/error-boundary'\nimport { ScalarIconCaretDown } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { computed, ref, watch } from 'vue'\n\nimport { DataTable, DataTableRow } from '@/v2/components/data-table'\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nconst {\n clientOptions,\n eventBus,\n operation,\n method,\n path,\n selectedContentType,\n selectedServer = null,\n selectedExample,\n securitySchemes,\n selectedClient,\n globalCookies,\n integration,\n} = defineProps<CodeExampleProps & { eventBus: WorkspaceEventBus }>()\n\n/** Grab any custom code samples from the operation */\nconst customCodeSamples = computed(() => getCustomCodeSamples(operation))\n\n/** Merge custom code samples with the client options */\nconst clients = computed(() =>\n getClients(\n customCodeSamples.value.samples,\n clientOptions,\n customCodeSamples.value.label,\n ),\n)\n\n/**\n * The locally selected client which would include code samples from this operation only\n * Must be local state because it contains custom code samples from this operation only\n */\nconst localSelectedClient = ref<ClientOption | CustomClientOption | undefined>(\n findClient(clients.value, selectedClient),\n)\n\n/**\n * Re-resolve the local client whenever the global selection or the available\n * clients change. Watching `clients` matters when navigating between operations:\n * the stored id stays the same, but the matching option (e.g. a custom sample)\n * differs per operation, so without this the snippet could go stale.\n */\nwatch([() => selectedClient, clients], ([newClient]) => {\n const client = findClient(clients.value, newClient)\n if (client) {\n localSelectedClient.value = client\n }\n})\n\n/** Block secrets from being shown in the code block */\nconst secretCredentials = computed(() => getSecrets(securitySchemes ?? []))\n\n/** Handle client change */\nconst handleClientChange = (option: ClientOption | undefined) => {\n localSelectedClient.value = option\n\n // Sync the selection globally (built-in client or custom sample keyed by language)\n if (option) {\n eventBus.emit('workspace:update:selected-client', option.id)\n }\n}\n\n/** Generate the code snippet for the selected example */\nconst generatedCode = computed<string>(() =>\n generateCodeSnippet({\n defaultDisabledParameters: true,\n clientId: localSelectedClient.value?.id,\n customCodeSamples: customCodeSamples.value.samples,\n operation,\n method,\n path,\n contentType: selectedContentType,\n server: selectedServer,\n securitySchemes,\n example: selectedExample,\n globalCookies,\n includeDefaultHeaders: integration === 'client',\n }),\n)\n\n/** Check if there are any clients available (built-in or custom code samples) */\nconst hasClients = computed(() =>\n clients.value.some((group) => group.options.length > 0),\n)\n</script>\n\n<template>\n <CollapsibleSection\n v-show=\"hasClients\"\n class=\"group/preview w-full border-t\"\n :defaultOpen=\"false\">\n <template #title>Code Snippet</template>\n\n <!-- Client selector -->\n <template #actions>\n <div class=\"flex flex-1\">\n <ScalarCombobox\n :modelValue=\"localSelectedClient\"\n :options=\"clients\"\n placement=\"bottom-end\"\n @update:modelValue=\"\n (ev) => handleClientChange(ev as ClientOption | undefined)\n \">\n <template #default=\"{ open }\">\n <ScalarButton\n class=\"text-c-2 hover:text-c-1 flex h-full w-fit gap-1.5 px-0.5 py-0 text-base font-normal\"\n data-testid=\"client-picker\"\n variant=\"ghost\">\n {{ localSelectedClient?.title }}\n <ScalarIconCaretDown\n class=\"mt-0.25 size-3 transition-transform duration-100\"\n :class=\"open && 'rotate-180'\"\n weight=\"bold\" />\n </ScalarButton>\n </template>\n </ScalarCombobox>\n </div>\n </template>\n\n <!-- Code snippet -->\n <ScalarErrorBoundary>\n <DataTable\n :columns=\"['']\"\n presentational>\n <DataTableRow>\n <div class=\"overflow-hidden\">\n <ScalarCodeBlock\n class=\"text-base\"\n :content=\"generatedCode\"\n :hideCredentials=\"secretCredentials\"\n :lang=\"localSelectedClient?.lang ?? 'plaintext'\"\n lineNumbers />\n </div>\n </DataTableRow>\n </DataTable>\n </ScalarErrorBoundary>\n </CollapsibleSection>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCA,MAAM,oBAAoB,eAAe,qBAAqB,QAAA,UAAU,CAAA;;EAGxE,MAAM,UAAU,eACd,WACE,kBAAkB,MAAM,SACxB,QAAA,eACA,kBAAkB,MAAM,MACzB,CACH;;;;;EAMA,MAAM,sBAAsB,IAC1B,WAAW,QAAQ,OAAO,QAAA,eAAe,CAC3C;;;;;;;AAQA,QAAM,OAAO,QAAA,gBAAgB,QAAQ,GAAG,CAAC,eAAe;GACtD,MAAM,SAAS,WAAW,QAAQ,OAAO,UAAS;AAClD,OAAI,OACF,qBAAoB,QAAQ;IAE/B;;EAGD,MAAM,oBAAoB,eAAe,WAAW,QAAA,mBAAmB,EAAE,CAAC,CAAA;;EAG1E,MAAM,sBAAsB,WAAqC;AAC/D,uBAAoB,QAAQ;AAG5B,OAAI,OACF,SAAA,SAAS,KAAK,oCAAoC,OAAO,GAAE;;;EAK/D,MAAM,gBAAgB,eACpB,oBAAoB;GAClB,2BAA2B;GAC3B,UAAU,oBAAoB,OAAO;GACrC,mBAAmB,kBAAkB,MAAM;GAC3C,WAAQ,QAAA;GACR,QAAK,QAAA;GACL,MAAG,QAAA;GACH,aAAa,QAAA;GACb,QAAQ,QAAA;GACR,iBAAc,QAAA;GACd,SAAS,QAAA;GACT,eAAY,QAAA;GACZ,uBAAuB,QAAA,gBAAgB;GACxC,CAAC,CACJ;;EAGA,MAAM,aAAa,eACjB,QAAQ,MAAM,MAAM,UAAU,MAAM,QAAQ,SAAS,EAAE,CACzD;;uCAIE,YAiDqB,MAAA,2BAAA,EAAA;IA/CnB,OAAM;IACL,aAAa;;IACH,OAAK,cAAa,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAZ,gBAAY,GAAA,CAAA,EAAA,CAAA;IAGlB,SAAO,cAsBV,CArBN,mBAqBM,OArBN,YAqBM,CApBJ,YAmBiB,MAAA,eAAA,EAAA;KAlBd,YAAY,oBAAA;KACZ,SAAS,QAAA;KACV,WAAU;KACT,uBAAiB,OAAA,OAAA,OAAA,MAAgB,OAAO,mBAAmB,GAAE;;KAGnD,SAAO,SAUD,EAVK,WAAI,CACxB,YASe,MAAA,aAAA,EAAA;MARb,OAAM;MACN,eAAY;MACZ,SAAQ;;6BACwB,CAAA,gBAAA,gBAA7B,oBAAA,OAAqB,MAAK,GAAG,KAChC,EAAA,EAAA,YAGkB,MAAA,oBAAA,EAAA;OAFhB,OAAK,eAAA,CAAC,oDACE,QAAI,aAAA,CAAA;OACZ,QAAO;;;;;;2BAuBG,CAftB,YAesB,MAAA,oBAAA,EAAA,MAAA;4BADR,CAbZ,YAaY,MAAA,kBAAA,EAAA;MAZT,SAAS,CAAA,GAAI;MACd,gBAAA;;6BAUe,CATf,YASe,MAAA,qBAAA,EAAA,MAAA;8BADP,CAPN,mBAOM,OAPN,YAOM,CANJ,YAKgB,MAAA,gBAAA,EAAA;QAJd,OAAM;QACL,SAAS,cAAA;QACT,iBAAiB,kBAAA;QACjB,MAAM,oBAAA,OAAqB,QAAI;QAChC,aAAA;;;;;;;;;;;;;sBA3CF,WAAA,MAAU,CAAA,CAAA"}
1
+ {"version":3,"file":"RequestCodeSnippet.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestCodeSnippet.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n findClient,\n generateCodeSnippet,\n getClients,\n getCustomCodeSamples,\n getSecrets,\n type ClientOption,\n type CodeExampleProps,\n type CustomClientOption,\n} from '@scalar/blocks/code-example'\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarCodeBlock } from '@scalar/components/code-block'\nimport { ScalarCombobox } from '@scalar/components/combobox'\nimport { ScalarErrorBoundary } from '@scalar/components/error-boundary'\nimport { ScalarIconCaretDown } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { computed, ref, watch } from 'vue'\n\nimport { DataTable, DataTableRow } from '@/v2/components/data-table'\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nconst {\n clientOptions,\n eventBus,\n operation,\n method,\n path,\n selectedContentType,\n selectedServer = null,\n selectedExample,\n securitySchemes,\n selectedClient,\n globalCookies,\n integration,\n} = defineProps<CodeExampleProps & { eventBus: WorkspaceEventBus }>()\n\n/** Grab any custom code samples from the operation */\nconst customCodeSamples = computed(() => getCustomCodeSamples(operation))\n\n/** Merge custom code samples with the client options */\nconst clients = computed(() =>\n getClients(\n customCodeSamples.value.samples,\n clientOptions,\n customCodeSamples.value.label,\n ),\n)\n\n/**\n * The locally selected client which would include code samples from this operation only\n * Must be local state because it contains custom code samples from this operation only\n */\nconst localSelectedClient = ref<ClientOption | CustomClientOption | undefined>(\n findClient(clients.value, selectedClient),\n)\n\n/**\n * Re-resolve the local client whenever the global selection or the available\n * clients change. Watching `clients` matters when navigating between operations:\n * the stored id stays the same, but the matching option (e.g. a custom sample)\n * differs per operation, so without this the snippet could go stale.\n */\nwatch([() => selectedClient, clients], ([newClient]) => {\n const client = findClient(clients.value, newClient)\n if (client) {\n localSelectedClient.value = client\n }\n})\n\n/** Block secrets from being shown in the code block */\nconst secretCredentials = computed(() => getSecrets(securitySchemes ?? []))\n\n/** Handle client change */\nconst handleClientChange = (option: ClientOption | undefined) => {\n localSelectedClient.value = option\n\n // Sync the selection globally (built-in client or custom sample keyed by language)\n if (option) {\n eventBus.emit('workspace:update:selected-client', option.id)\n }\n}\n\n/** Generate the code snippet for the selected example */\nconst generatedCode = computed<string>(() =>\n generateCodeSnippet({\n defaultDisabledParameters: true,\n clientId: localSelectedClient.value?.id,\n customCodeSamples: customCodeSamples.value.samples,\n operation,\n method,\n path,\n contentType: selectedContentType,\n server: selectedServer,\n securitySchemes,\n example: selectedExample,\n globalCookies,\n includeDefaultHeaders: integration === 'client',\n }),\n)\n\n/** Check if there are any clients available (built-in or custom code samples) */\nconst hasClients = computed(() =>\n clients.value.some((group) => group.options.length > 0),\n)\n</script>\n\n<template>\n <CollapsibleSection\n v-show=\"hasClients\"\n class=\"group/preview w-full border-t\"\n :defaultOpen=\"false\">\n <template #title>Code Snippet</template>\n\n <!-- Client selector -->\n <template #actions>\n <div class=\"flex flex-1\">\n <ScalarCombobox\n :modelValue=\"localSelectedClient\"\n :options=\"clients\"\n placement=\"bottom-end\"\n @update:modelValue=\"\n (ev) => handleClientChange(ev as ClientOption | undefined)\n \">\n <template #default=\"{ open }\">\n <ScalarButton\n class=\"text-c-2 hover:text-c-1 flex h-full w-fit gap-1.5 px-0.5 py-0 text-base font-normal\"\n data-testid=\"client-picker\"\n variant=\"ghost\">\n {{ localSelectedClient?.title }}\n <ScalarIconCaretDown\n class=\"mt-0.25 size-3 transition-transform duration-100\"\n :class=\"open && 'rotate-180'\"\n weight=\"bold\" />\n </ScalarButton>\n </template>\n </ScalarCombobox>\n </div>\n </template>\n\n <!-- Code snippet -->\n <ScalarErrorBoundary>\n <DataTable\n :columns=\"['']\"\n presentational>\n <DataTableRow>\n <div class=\"overflow-hidden\">\n <ScalarCodeBlock\n class=\"text-base\"\n :content=\"generatedCode\"\n :hideCredentials=\"secretCredentials\"\n :lang=\"localSelectedClient?.lang ?? 'plaintext'\"\n lineNumbers />\n </div>\n </DataTableRow>\n </DataTable>\n </ScalarErrorBoundary>\n </CollapsibleSection>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCA,MAAM,oBAAoB,eAAe,qBAAqB,QAAA,SAAS,CAAC;;EAGxE,MAAM,UAAU,eACd,WACE,kBAAkB,MAAM,SACxB,QAAA,eACA,kBAAkB,MAAM,KAC1B,CACF;;;;;EAMA,MAAM,sBAAsB,IAC1B,WAAW,QAAQ,OAAO,QAAA,cAAc,CAC1C;;;;;;;EAQA,MAAM,OAAO,QAAA,gBAAgB,OAAO,IAAI,CAAC,eAAe;GACtD,MAAM,SAAS,WAAW,QAAQ,OAAO,SAAS;GAClD,IAAI,QACF,oBAAoB,QAAQ;EAEhC,CAAC;;EAGD,MAAM,oBAAoB,eAAe,WAAW,QAAA,mBAAmB,CAAC,CAAC,CAAC;;EAG1E,MAAM,sBAAsB,WAAqC;GAC/D,oBAAoB,QAAQ;GAG5B,IAAI,QACF,QAAA,SAAS,KAAK,oCAAoC,OAAO,EAAE;EAE/D;;EAGA,MAAM,gBAAgB,eACpB,oBAAoB;GAClB,2BAA2B;GAC3B,UAAU,oBAAoB,OAAO;GACrC,mBAAmB,kBAAkB,MAAM;GAC3C,WAAQ,QAAA;GACR,QAAK,QAAA;GACL,MAAG,QAAA;GACH,aAAa,QAAA;GACb,QAAQ,QAAA;GACR,iBAAc,QAAA;GACd,SAAS,QAAA;GACT,eAAY,QAAA;GACZ,uBAAuB,QAAA,gBAAgB;EACzC,CAAC,CACH;;EAGA,MAAM,aAAa,eACjB,QAAQ,MAAM,MAAM,UAAU,MAAM,QAAQ,SAAS,CAAC,CACxD;;uCAIE,YAiDqB,MAAA,0BAAA,GAAA;IA/CnB,OAAM;IACL,aAAa;;IACH,OAAK,cAAa,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAZ,gBAAY,EAAA,CAAA,EAAA,CAAA;IAGlB,SAAO,cAsBV,CArBN,mBAqBM,OArBN,YAqBM,CApBJ,YAmBiB,MAAA,cAAA,GAAA;KAlBd,YAAY,oBAAA;KACZ,SAAS,QAAA;KACV,WAAU;KACT,uBAAiB,OAAA,OAAA,OAAA,MAAgB,OAAO,mBAAmB,EAAE;;KAGnD,SAAO,SAUD,EAVK,WAAI,CACxB,YASe,MAAA,YAAA,GAAA;MARb,OAAM;MACN,eAAY;MACZ,SAAQ;;6BACwB,CAAA,gBAAA,gBAA7B,oBAAA,OAAqB,KAAK,IAAG,KAChC,CAAA,GAAA,YAGkB,MAAA,mBAAA,GAAA;OAFhB,OAAK,eAAA,CAAC,oDACE,QAAI,YAAA,CAAA;OACZ,QAAO;;;;;;2BAuBG,CAftB,YAesB,MAAA,mBAAA,GAAA,MAAA;4BADR,CAbZ,YAaY,MAAA,iBAAA,GAAA;MAZT,SAAS,CAAA,EAAA;MACV,gBAAA;;6BAUe,CATf,YASe,MAAA,oBAAA,GAAA,MAAA;8BADP,CAPN,mBAOM,OAPN,YAOM,CANJ,YAKgB,MAAA,eAAA,GAAA;QAJd,OAAM;QACL,SAAS,cAAA;QACT,iBAAiB,kBAAA;QACjB,MAAM,oBAAA,OAAqB,QAAI;QAChC,aAAA;;;;;;;;;;;;;sBA3CF,WAAA,KAAU,CAAA,CAAA"}
@@ -23,6 +23,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
23
23
  } & {
24
24
  shouldRenameExpandedRow?: boolean;
25
25
  }) => any;
26
+ selectPreset: (index: number, value: string) => any;
26
27
  deleteAll: () => any;
27
28
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
28
29
  onDelete?: ((payload: {
@@ -35,6 +36,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
35
36
  } & {
36
37
  shouldRenameExpandedRow?: boolean;
37
38
  }) => any) | undefined;
39
+ onSelectPreset?: ((index: number, value: string) => any) | undefined;
38
40
  onDeleteAll?: (() => any) | undefined;
39
41
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
40
42
  declare const _default: typeof __VLS_export;
@@ -1 +1 @@
1
- {"version":3,"file":"RequestParams.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/request-block/components/RequestParams.vue"],"names":[],"mappings":"AAwGA,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AAMnH,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,uBAAuB,CAAA;AAE5E,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,QAAQ,EAAE,iBAAiB,CAAA;CAC5B,CAAC;AA2MF,QAAA,MAAM,YAAY;;eAvLgB,MAAM;;;;;;;kCAHR,OAAO;;;;;eAGL,MAAM;;;;;;;kCAHR,OAAO;;;kFA6LrC,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"RequestParams.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/request-block/components/RequestParams.vue"],"names":[],"mappings":"AA2GA,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AAMnH,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,uBAAuB,CAAA;AAE5E,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,QAAQ,EAAE,iBAAiB,CAAA;CAC5B,CAAC;AAuNF,QAAA,MAAM,YAAY;;eAnMgB,MAAM;;;;;;;kCAHR,OAAO;;;;;;eAGL,MAAM;;;;;;;kCAHR,OAAO;;;;kFAyMrC,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"RequestParams.vue.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestParams.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarTooltip } from '@scalar/components/tooltip'\nimport type {\n ApiReferenceEvents,\n WorkspaceEventBus,\n} from '@scalar/workspace-store/events'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { computed } from 'vue'\n\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nimport RequestTable from './RequestTable.vue'\nimport type { TableRow, TableRowUpsertPayload } from './RequestTableRow.vue'\n\nconst {\n rows,\n exampleKey,\n environment,\n title,\n globalRoute,\n showAddRowPlaceholder = true,\n eventBus,\n} = defineProps<{\n rows: TableRow[]\n exampleKey: string\n title: string\n label?: string\n invalidParams?: Set<string>\n globalRoute?: string\n showAddRowPlaceholder?: boolean\n environment: XScalarEnvironment\n eventBus: WorkspaceEventBus\n}>()\n\nconst emit = defineEmits<{\n (\n e: 'upsert',\n index: number,\n payload: ApiReferenceEvents['operation:upsert:parameter']['payload'] & {\n shouldRenameExpandedRow?: boolean\n },\n ): void\n (e: 'delete', payload: { index: number }): void\n (e: 'deleteAll'): void\n}>()\n\nconst showTooltip = computed(() => rows.length > 1)\n\n/** Needed for type guard */\nconst handleUpserRow = (index: number, payload: TableRowUpsertPayload) => {\n const { value, ...rest } = payload\n\n // Type guard here as we cannot add files to params\n if (value instanceof File) {\n return\n }\n\n emit('upsert', index, { ...rest, value: value ?? '' })\n}\n</script>\n<template>\n <CollapsibleSection\n class=\"group/params\"\n :itemCount=\"rows.length\">\n <template #title>{{ title }}</template>\n <template #actions>\n <div\n class=\"text-c-2 request-meta-buttons flex whitespace-nowrap opacity-0 group-hover/params:opacity-100 has-[:focus-visible]:opacity-100\">\n <ScalarTooltip\n v-if=\"showTooltip\"\n content=\"Clear optional parameters\"\n placement=\"left\">\n <ScalarButton\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"emit('deleteAll')\">\n Clear\n <span class=\"sr-only\">All {{ title }}</span>\n </ScalarButton>\n </ScalarTooltip>\n </div>\n </template>\n <RequestTable\n class=\"flex-1\"\n :columns=\"['32px', '', '']\"\n :data=\"rows\"\n :environment=\"environment\"\n :exampleKey=\"exampleKey\"\n :globalRoute=\"globalRoute\"\n :invalidParams=\"invalidParams\"\n :label=\"label\"\n :showAddRowPlaceholder=\"showAddRowPlaceholder\"\n @deleteRow=\"(index) => emit('delete', { index })\"\n @navigate=\"(route) => eventBus.emit('ui:navigate', route)\"\n @upsertRow=\"handleUpserRow\" />\n </CollapsibleSection>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RequestParams.vue.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestParams.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarTooltip } from '@scalar/components/tooltip'\nimport type {\n ApiReferenceEvents,\n WorkspaceEventBus,\n} from '@scalar/workspace-store/events'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { computed } from 'vue'\n\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nimport RequestTable from './RequestTable.vue'\nimport type { TableRow, TableRowUpsertPayload } from './RequestTableRow.vue'\n\nconst {\n rows,\n exampleKey,\n environment,\n title,\n globalRoute,\n showAddRowPlaceholder = true,\n eventBus,\n} = defineProps<{\n rows: TableRow[]\n exampleKey: string\n title: string\n label?: string\n invalidParams?: Set<string>\n globalRoute?: string\n showAddRowPlaceholder?: boolean\n environment: XScalarEnvironment\n eventBus: WorkspaceEventBus\n}>()\n\nconst emit = defineEmits<{\n (\n e: 'upsert',\n index: number,\n payload: ApiReferenceEvents['operation:upsert:parameter']['payload'] & {\n shouldRenameExpandedRow?: boolean\n },\n ): void\n (e: 'delete', payload: { index: number }): void\n (e: 'deleteAll'): void\n /** Select a value for a grouped global cookie preset at the given row index. */\n (e: 'selectPreset', index: number, value: string): void\n}>()\n\nconst showTooltip = computed(() => rows.length > 1)\n\n/** Needed for type guard */\nconst handleUpserRow = (index: number, payload: TableRowUpsertPayload) => {\n const { value, ...rest } = payload\n\n // Type guard here as we cannot add files to params\n if (value instanceof File) {\n return\n }\n\n emit('upsert', index, { ...rest, value: value ?? '' })\n}\n</script>\n<template>\n <CollapsibleSection\n class=\"group/params\"\n :itemCount=\"rows.length\">\n <template #title>{{ title }}</template>\n <template #actions>\n <div\n class=\"text-c-2 request-meta-buttons flex whitespace-nowrap opacity-0 group-hover/params:opacity-100 has-[:focus-visible]:opacity-100\">\n <ScalarTooltip\n v-if=\"showTooltip\"\n content=\"Clear optional parameters\"\n placement=\"left\">\n <ScalarButton\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"emit('deleteAll')\">\n Clear\n <span class=\"sr-only\">All {{ title }}</span>\n </ScalarButton>\n </ScalarTooltip>\n </div>\n </template>\n <RequestTable\n class=\"flex-1\"\n :columns=\"['32px', '', '']\"\n :data=\"rows\"\n :environment=\"environment\"\n :exampleKey=\"exampleKey\"\n :globalRoute=\"globalRoute\"\n :invalidParams=\"invalidParams\"\n :label=\"label\"\n :showAddRowPlaceholder=\"showAddRowPlaceholder\"\n @deleteRow=\"(index) => emit('delete', { index })\"\n @navigate=\"(route) => eventBus.emit('ui:navigate', route)\"\n @selectPreset=\"(index, value) => emit('selectPreset', index, value)\"\n @upsertRow=\"handleUpserRow\" />\n </CollapsibleSection>\n</template>\n"],"mappings":""}
@@ -6,7 +6,7 @@ import { ScalarTooltip } from "@scalar/components/tooltip";
6
6
  //#region src/v2/blocks/request-block/components/RequestParams.vue?vue&type=script&setup=true&lang.ts
7
7
  var _hoisted_1 = { class: "text-c-2 request-meta-buttons flex whitespace-nowrap opacity-0 group-hover/params:opacity-100 has-[:focus-visible]:opacity-100" };
8
8
  var _hoisted_2 = { class: "sr-only" };
9
- var RequestParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
9
+ var RequestParams_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
10
10
  __name: "RequestParams",
11
11
  props: {
12
12
  rows: {},
@@ -25,7 +25,8 @@ var RequestParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
25
25
  emits: [
26
26
  "upsert",
27
27
  "delete",
28
- "deleteAll"
28
+ "deleteAll",
29
+ "selectPreset"
29
30
  ],
30
31
  setup(__props, { emit: __emit }) {
31
32
  const emit = __emit;
@@ -56,7 +57,7 @@ var RequestParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
56
57
  variant: "ghost",
57
58
  onClick: _cache[0] || (_cache[0] = withModifiers(($event) => emit("deleteAll"), ["stop"]))
58
59
  }, {
59
- default: withCtx(() => [_cache[3] || (_cache[3] = createTextVNode(" Clear ", -1)), createElementVNode("span", _hoisted_2, "All " + toDisplayString(__props.title), 1)]),
60
+ default: withCtx(() => [_cache[4] || (_cache[4] = createTextVNode(" Clear ", -1)), createElementVNode("span", _hoisted_2, "All " + toDisplayString(__props.title), 1)]),
60
61
  _: 1
61
62
  })]),
62
63
  _: 1
@@ -77,6 +78,7 @@ var RequestParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
77
78
  showAddRowPlaceholder: __props.showAddRowPlaceholder,
78
79
  onDeleteRow: _cache[1] || (_cache[1] = (index) => emit("delete", { index })),
79
80
  onNavigate: _cache[2] || (_cache[2] = (route) => __props.eventBus.emit("ui:navigate", route)),
81
+ onSelectPreset: _cache[3] || (_cache[3] = (index, value) => emit("selectPreset", index, value)),
80
82
  onUpsertRow: handleUpserRow
81
83
  }, null, 8, [
82
84
  "data",
@@ -1 +1 @@
1
- {"version":3,"file":"RequestParams.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestParams.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarTooltip } from '@scalar/components/tooltip'\nimport type {\n ApiReferenceEvents,\n WorkspaceEventBus,\n} from '@scalar/workspace-store/events'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { computed } from 'vue'\n\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nimport RequestTable from './RequestTable.vue'\nimport type { TableRow, TableRowUpsertPayload } from './RequestTableRow.vue'\n\nconst {\n rows,\n exampleKey,\n environment,\n title,\n globalRoute,\n showAddRowPlaceholder = true,\n eventBus,\n} = defineProps<{\n rows: TableRow[]\n exampleKey: string\n title: string\n label?: string\n invalidParams?: Set<string>\n globalRoute?: string\n showAddRowPlaceholder?: boolean\n environment: XScalarEnvironment\n eventBus: WorkspaceEventBus\n}>()\n\nconst emit = defineEmits<{\n (\n e: 'upsert',\n index: number,\n payload: ApiReferenceEvents['operation:upsert:parameter']['payload'] & {\n shouldRenameExpandedRow?: boolean\n },\n ): void\n (e: 'delete', payload: { index: number }): void\n (e: 'deleteAll'): void\n}>()\n\nconst showTooltip = computed(() => rows.length > 1)\n\n/** Needed for type guard */\nconst handleUpserRow = (index: number, payload: TableRowUpsertPayload) => {\n const { value, ...rest } = payload\n\n // Type guard here as we cannot add files to params\n if (value instanceof File) {\n return\n }\n\n emit('upsert', index, { ...rest, value: value ?? '' })\n}\n</script>\n<template>\n <CollapsibleSection\n class=\"group/params\"\n :itemCount=\"rows.length\">\n <template #title>{{ title }}</template>\n <template #actions>\n <div\n class=\"text-c-2 request-meta-buttons flex whitespace-nowrap opacity-0 group-hover/params:opacity-100 has-[:focus-visible]:opacity-100\">\n <ScalarTooltip\n v-if=\"showTooltip\"\n content=\"Clear optional parameters\"\n placement=\"left\">\n <ScalarButton\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"emit('deleteAll')\">\n Clear\n <span class=\"sr-only\">All {{ title }}</span>\n </ScalarButton>\n </ScalarTooltip>\n </div>\n </template>\n <RequestTable\n class=\"flex-1\"\n :columns=\"['32px', '', '']\"\n :data=\"rows\"\n :environment=\"environment\"\n :exampleKey=\"exampleKey\"\n :globalRoute=\"globalRoute\"\n :invalidParams=\"invalidParams\"\n :label=\"label\"\n :showAddRowPlaceholder=\"showAddRowPlaceholder\"\n @deleteRow=\"(index) => emit('delete', { index })\"\n @navigate=\"(route) => eventBus.emit('ui:navigate', route)\"\n @upsertRow=\"handleUpserRow\" />\n </CollapsibleSection>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCA,MAAM,OAAO;EAYb,MAAM,cAAc,eAAe,QAAA,KAAK,SAAS,EAAC;;EAGlD,MAAM,kBAAkB,OAAe,YAAmC;GACxE,MAAM,EAAE,OAAO,GAAG,SAAS;AAG3B,OAAI,iBAAiB,KACnB;AAGF,QAAK,UAAU,OAAO;IAAE,GAAG;IAAM,OAAO,SAAS;IAAI,CAAA;;;uBAIrD,YAmCqB,MAAA,2BAAA,EAAA;IAlCnB,OAAM;IACL,WAAW,QAAA,KAAK;;IACN,OAAK,cAAY,CAAA,gBAAA,gBAAR,QAAA,MAAK,EAAA,EAAA,CAAA,CAAA;IACd,SAAO,cAgBV,CAfN,mBAeM,OAfN,YAeM,CAZI,YAAA,SAAA,WAAA,EADR,YAYgB,MAAA,cAAA,EAAA;;KAVd,SAAQ;KACR,WAAU;;4BAQK,CAPf,YAOe,MAAA,aAAA,EAAA;MANb,OAAM;MACN,MAAK;MACL,SAAQ;MACP,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,KAAI,YAAA,EAAA,CAAA,OAAA,CAAA;;6BAEjB,CAAA,OAAA,OAAA,OAAA,KAAA,gBAFgC,WAEhC,GAAA,GAAA,mBAA4C,QAA5C,YAAsB,SAAI,gBAAG,QAAA,MAAK,EAAA,EAAA,CAAA,CAAA;;;;;2BAiBV,CAZhC,YAYgC,sBAAA;KAX9B,OAAM;KACL,SAAS;MAAA;MAAA;MAAA;MAAgB;KACzB,MAAM,QAAA;KACN,aAAa,QAAA;KACb,YAAY,QAAA;KACZ,aAAa,QAAA;KACb,eAAe,QAAA;KACf,OAAO,QAAA;KACP,uBAAuB,QAAA;KACvB,aAAS,OAAA,OAAA,OAAA,MAAG,UAAU,KAAI,UAAA,EAAa,OAAK,CAAA;KAC5C,YAAQ,OAAA,OAAA,OAAA,MAAG,UAAU,QAAA,SAAS,KAAI,eAAgB,MAAK;KACvD,aAAW"}
1
+ {"version":3,"file":"RequestParams.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestParams.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarTooltip } from '@scalar/components/tooltip'\nimport type {\n ApiReferenceEvents,\n WorkspaceEventBus,\n} from '@scalar/workspace-store/events'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { computed } from 'vue'\n\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nimport RequestTable from './RequestTable.vue'\nimport type { TableRow, TableRowUpsertPayload } from './RequestTableRow.vue'\n\nconst {\n rows,\n exampleKey,\n environment,\n title,\n globalRoute,\n showAddRowPlaceholder = true,\n eventBus,\n} = defineProps<{\n rows: TableRow[]\n exampleKey: string\n title: string\n label?: string\n invalidParams?: Set<string>\n globalRoute?: string\n showAddRowPlaceholder?: boolean\n environment: XScalarEnvironment\n eventBus: WorkspaceEventBus\n}>()\n\nconst emit = defineEmits<{\n (\n e: 'upsert',\n index: number,\n payload: ApiReferenceEvents['operation:upsert:parameter']['payload'] & {\n shouldRenameExpandedRow?: boolean\n },\n ): void\n (e: 'delete', payload: { index: number }): void\n (e: 'deleteAll'): void\n /** Select a value for a grouped global cookie preset at the given row index. */\n (e: 'selectPreset', index: number, value: string): void\n}>()\n\nconst showTooltip = computed(() => rows.length > 1)\n\n/** Needed for type guard */\nconst handleUpserRow = (index: number, payload: TableRowUpsertPayload) => {\n const { value, ...rest } = payload\n\n // Type guard here as we cannot add files to params\n if (value instanceof File) {\n return\n }\n\n emit('upsert', index, { ...rest, value: value ?? '' })\n}\n</script>\n<template>\n <CollapsibleSection\n class=\"group/params\"\n :itemCount=\"rows.length\">\n <template #title>{{ title }}</template>\n <template #actions>\n <div\n class=\"text-c-2 request-meta-buttons flex whitespace-nowrap opacity-0 group-hover/params:opacity-100 has-[:focus-visible]:opacity-100\">\n <ScalarTooltip\n v-if=\"showTooltip\"\n content=\"Clear optional parameters\"\n placement=\"left\">\n <ScalarButton\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"emit('deleteAll')\">\n Clear\n <span class=\"sr-only\">All {{ title }}</span>\n </ScalarButton>\n </ScalarTooltip>\n </div>\n </template>\n <RequestTable\n class=\"flex-1\"\n :columns=\"['32px', '', '']\"\n :data=\"rows\"\n :environment=\"environment\"\n :exampleKey=\"exampleKey\"\n :globalRoute=\"globalRoute\"\n :invalidParams=\"invalidParams\"\n :label=\"label\"\n :showAddRowPlaceholder=\"showAddRowPlaceholder\"\n @deleteRow=\"(index) => emit('delete', { index })\"\n @navigate=\"(route) => eventBus.emit('ui:navigate', route)\"\n @selectPreset=\"(index, value) => emit('selectPreset', index, value)\"\n @upsertRow=\"handleUpserRow\" />\n </CollapsibleSection>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCA,MAAM,OAAO;EAcb,MAAM,cAAc,eAAe,QAAA,KAAK,SAAS,CAAC;;EAGlD,MAAM,kBAAkB,OAAe,YAAmC;GACxE,MAAM,EAAE,OAAO,GAAG,SAAS;GAG3B,IAAI,iBAAiB,MACnB;GAGF,KAAK,UAAU,OAAO;IAAE,GAAG;IAAM,OAAO,SAAS;GAAG,CAAC;EACvD;;uBAGE,YAoCqB,MAAA,0BAAA,GAAA;IAnCnB,OAAM;IACL,WAAW,QAAA,KAAK;;IACN,OAAK,cAAY,CAAA,gBAAA,gBAAR,QAAA,KAAK,GAAA,CAAA,CAAA,CAAA;IACd,SAAO,cAgBV,CAfN,mBAeM,OAfN,YAeM,CAZI,YAAA,SAAA,UAAA,GADR,YAYgB,MAAA,aAAA,GAAA;;KAVd,SAAQ;KACR,WAAU;;4BAQK,CAPf,YAOe,MAAA,YAAA,GAAA;MANb,OAAM;MACN,MAAK;MACL,SAAQ;MACP,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,KAAI,WAAA,GAAA,CAAA,MAAA,CAAA;;6BAEjB,CAAA,OAAA,OAAA,OAAA,KAAA,gBAFgC,WAEhC,EAAA,IAAA,mBAA4C,QAA5C,YAAsB,SAAI,gBAAG,QAAA,KAAK,GAAA,CAAA,CAAA,CAAA;;;;;2BAkBV,CAbhC,YAagC,sBAAA;KAZ9B,OAAM;KACL,SAAS;MAAA;MAAA;MAAA;KAAA;KACT,MAAM,QAAA;KACN,aAAa,QAAA;KACb,YAAY,QAAA;KACZ,aAAa,QAAA;KACb,eAAe,QAAA;KACf,OAAO,QAAA;KACP,uBAAuB,QAAA;KACvB,aAAS,OAAA,OAAA,OAAA,MAAG,UAAU,KAAI,UAAA,EAAa,MAAK,CAAA;KAC5C,YAAQ,OAAA,OAAA,OAAA,MAAG,UAAU,QAAA,SAAS,KAAI,eAAgB,KAAK;KACvD,gBAAY,OAAA,OAAA,OAAA,MAAG,OAAO,UAAU,KAAI,gBAAiB,OAAO,KAAK;KACjE,aAAW"}
@@ -40,6 +40,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
40
40
  deleteRow: (index: number) => any;
41
41
  uploadFile: (index: number) => any;
42
42
  removeFile: (index: number) => any;
43
+ selectPreset: (index: number, value: string) => any;
43
44
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
44
45
  onNavigate?: ((route: NonNullable<({
45
46
  replace?: boolean;
@@ -70,6 +71,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
70
71
  onDeleteRow?: ((index: number) => any) | undefined;
71
72
  onUploadFile?: ((index: number) => any) | undefined;
72
73
  onRemoveFile?: ((index: number) => any) | undefined;
74
+ onSelectPreset?: ((index: number, value: string) => any) | undefined;
73
75
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
74
76
  declare const _default: typeof __VLS_export;
75
77
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"RequestTable.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/request-block/components/RequestTable.vue"],"names":[],"mappings":"AAyHA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AAGnH,OAAwB,EACtB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC3B,MAAM,0DAA0D,CAAA;AAOjE,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,8BAA8B;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,WAAW,EAAE,kBAAkB,CAAA;CAChC,CAAC;AA8NF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"RequestTable.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/request-block/components/RequestTable.vue"],"names":[],"mappings":"AAqHA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AAGnH,OAAwB,EACtB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC3B,MAAM,0DAA0D,CAAA;AAOjE,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,8BAA8B;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,WAAW,EAAE,kBAAkB,CAAA;CAChC,CAAC;AA0OF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../../../_virtual/_plugin-vue_
2
2
  import RequestTable_vue_vue_type_script_setup_true_lang_default from "./RequestTable.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/v2/blocks/request-block/components/RequestTable.vue
5
- var RequestTable_default = /* @__PURE__ */ _plugin_vue_export_helper_default(RequestTable_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-6b2d7899"]]);
5
+ var RequestTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RequestTable_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-042c21ca"]]);
6
6
  //#endregion
7
7
  export { RequestTable_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"RequestTable.vue.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { computed } from 'vue'\n\nimport RequestTableRow, {\n type TableRow,\n type TableRowUpsertPayload,\n} from '@/v2/blocks/request-block/components/RequestTableRow.vue'\nimport {\n DataTable,\n DataTableHeader,\n DataTableRow,\n} from '@/v2/components/data-table'\n\nconst {\n data,\n hasCheckboxDisabled,\n showUploadButton,\n showAddRowPlaceholder = true,\n environment,\n} = defineProps<{\n data: TableRow[]\n /** Hide the enabled column */\n hasCheckboxDisabled?: boolean\n invalidParams?: Set<string>\n label?: string\n showUploadButton?: boolean\n showAddRowPlaceholder?: boolean\n environment: XScalarEnvironment\n}>()\n\n/**\n * Make this component more generic that can be used also for the operation body\n */\nconst emit = defineEmits<{\n (e: 'upsertRow', index: number, payload: TableRowUpsertPayload): void\n (e: 'deleteRow', index: number): void\n\n /**\n * File upload events\n *\n * Each row has its own upload button, so we need to know which row to update\n * when the file is selected.\n */\n (e: 'uploadFile', index: number): void\n (e: 'removeFile', index: number): void\n (e: 'navigate', route: NonNullable<TableRow['globalRoute']>): void\n}>()\n\nconst columns = computed(() => {\n if (showUploadButton) {\n return ['36px', '', '', 'auto']\n }\n return ['36px', '', '']\n})\n\n/** Add the last empty row (for ui purposes only) */\nconst displayData = computed(() => {\n if (!showAddRowPlaceholder) {\n return data\n }\n\n const last = data.at(-1)\n\n if (!last || last.name !== '' || last.value !== '') {\n return [...data, { name: '', value: '', isDisabled: true }]\n }\n\n return data\n})\n</script>\n<template>\n <DataTable\n class=\"group/table flex-1\"\n :columns=\"columns\">\n <DataTableRow class=\"sr-only !block\">\n <DataTableHeader>{{ label }} Enabled</DataTableHeader>\n <DataTableHeader>{{ label }} Key</DataTableHeader>\n <DataTableHeader>{{ label }} Value</DataTableHeader>\n </DataTableRow>\n\n <RequestTableRow\n v-for=\"(row, index) in displayData\"\n :key=\"index\"\n :data=\"row\"\n :environment=\"environment\"\n :hasCheckboxDisabled=\"hasCheckboxDisabled\"\n :invalidParams=\"invalidParams\"\n :label=\"label\"\n :showUploadButton=\"showUploadButton\"\n @deleteRow=\"emit('deleteRow', index)\"\n @navigate=\"(route) => emit('navigate', route)\"\n @removeFile=\"emit('removeFile', index)\"\n @uploadFile=\"emit('uploadFile', index)\"\n @upsertRow=\"(payload) => emit('upsertRow', index, payload)\" />\n </DataTable>\n</template>\n<style scoped>\n:deep(.code-input-lite__editor) {\n background-color: transparent;\n font-family: var(--scalar-font);\n font-size: var(--scalar-small);\n padding: 5px 8px;\n}\n:deep(.scalar-pill:not(:last-of-type)) {\n margin-right: 0.15em;\n}\n:deep(.scalar-pill:not(:first-of-type)) {\n margin-left: 0.5px;\n}\n.filemask {\n mask-image: linear-gradient(\n to right,\n transparent 0,\n var(--scalar-background-2) 20px\n );\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"RequestTable.vue.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { computed } from 'vue'\n\nimport RequestTableRow, {\n type TableRow,\n type TableRowUpsertPayload,\n} from '@/v2/blocks/request-block/components/RequestTableRow.vue'\nimport {\n DataTable,\n DataTableHeader,\n DataTableRow,\n} from '@/v2/components/data-table'\n\nconst {\n data,\n hasCheckboxDisabled,\n showUploadButton,\n showAddRowPlaceholder = true,\n environment,\n} = defineProps<{\n data: TableRow[]\n /** Hide the enabled column */\n hasCheckboxDisabled?: boolean\n invalidParams?: Set<string>\n label?: string\n showUploadButton?: boolean\n showAddRowPlaceholder?: boolean\n environment: XScalarEnvironment\n}>()\n\n/**\n * Make this component more generic that can be used also for the operation body\n */\nconst emit = defineEmits<{\n (e: 'upsertRow', index: number, payload: TableRowUpsertPayload): void\n (e: 'deleteRow', index: number): void\n\n /**\n * File upload events\n *\n * Each row has its own upload button, so we need to know which row to update\n * when the file is selected.\n */\n (e: 'uploadFile', index: number): void\n (e: 'removeFile', index: number): void\n (e: 'navigate', route: NonNullable<TableRow['globalRoute']>): void\n /** Select a value for a grouped global cookie preset at the given row index. */\n (e: 'selectPreset', index: number, value: string): void\n}>()\n\nconst columns = computed(() => {\n if (showUploadButton) {\n return ['36px', '', '', 'minmax(0, 1fr)']\n }\n return ['36px', '', '']\n})\n\n/** Add the last empty row (for ui purposes only) */\nconst displayData = computed(() => {\n if (!showAddRowPlaceholder) {\n return data\n }\n\n const last = data.at(-1)\n\n if (!last || last.name !== '' || last.value !== '') {\n return [...data, { name: '', value: '', isDisabled: true }]\n }\n\n return data\n})\n</script>\n<template>\n <DataTable\n class=\"group/table flex-1\"\n :columns=\"columns\">\n <DataTableRow class=\"sr-only !block\">\n <DataTableHeader>{{ label }} Enabled</DataTableHeader>\n <DataTableHeader>{{ label }} Key</DataTableHeader>\n <DataTableHeader>{{ label }} Value</DataTableHeader>\n </DataTableRow>\n\n <RequestTableRow\n v-for=\"(row, index) in displayData\"\n :key=\"index\"\n :data=\"row\"\n :environment=\"environment\"\n :hasCheckboxDisabled=\"hasCheckboxDisabled\"\n :invalidParams=\"invalidParams\"\n :label=\"label\"\n :showUploadButton=\"showUploadButton\"\n @deleteRow=\"emit('deleteRow', index)\"\n @navigate=\"(route) => emit('navigate', route)\"\n @removeFile=\"emit('removeFile', index)\"\n @selectPreset=\"(value) => emit('selectPreset', index, value)\"\n @uploadFile=\"emit('uploadFile', index)\"\n @upsertRow=\"(payload) => emit('upsertRow', index, payload)\" />\n </DataTable>\n</template>\n<style scoped>\n:deep(.code-input-lite__editor) {\n background-color: transparent;\n font-family: var(--scalar-font);\n font-size: var(--scalar-small);\n padding: 5px 8px;\n}\n:deep(.scalar-pill:not(:last-of-type)) {\n margin-right: 0.15em;\n}\n:deep(.scalar-pill:not(:first-of-type)) {\n margin-left: 0.5px;\n}\n</style>\n"],"mappings":""}
@@ -4,7 +4,7 @@ import DataTableRow_default from "../../../components/data-table/DataTableRow.vu
4
4
  import RequestTableRow_default from "./RequestTableRow.vue.js";
5
5
  import { Fragment, computed, createBlock, createElementBlock, createTextVNode, createVNode, defineComponent, openBlock, renderList, toDisplayString, unref, withCtx } from "vue";
6
6
  //#region src/v2/blocks/request-block/components/RequestTable.vue?vue&type=script&setup=true&lang.ts
7
- var RequestTable_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var RequestTable_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  __name: "RequestTable",
9
9
  props: {
10
10
  data: {},
@@ -23,7 +23,8 @@ var RequestTable_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ d
23
23
  "deleteRow",
24
24
  "uploadFile",
25
25
  "removeFile",
26
- "navigate"
26
+ "navigate",
27
+ "selectPreset"
27
28
  ],
28
29
  setup(__props, { emit: __emit }) {
29
30
  /**
@@ -35,7 +36,7 @@ var RequestTable_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ d
35
36
  "36px",
36
37
  "",
37
38
  "",
38
- "auto"
39
+ "minmax(0, 1fr)"
39
40
  ];
40
41
  return [
41
42
  "36px",
@@ -87,6 +88,7 @@ var RequestTable_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ d
87
88
  onDeleteRow: ($event) => emit("deleteRow", index),
88
89
  onNavigate: _cache[0] || (_cache[0] = (route) => emit("navigate", route)),
89
90
  onRemoveFile: ($event) => emit("removeFile", index),
91
+ onSelectPreset: (value) => emit("selectPreset", index, value),
90
92
  onUploadFile: ($event) => emit("uploadFile", index),
91
93
  onUpsertRow: (payload) => emit("upsertRow", index, payload)
92
94
  }, null, 8, [
@@ -98,6 +100,7 @@ var RequestTable_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ d
98
100
  "showUploadButton",
99
101
  "onDeleteRow",
100
102
  "onRemoveFile",
103
+ "onSelectPreset",
101
104
  "onUploadFile",
102
105
  "onUpsertRow"
103
106
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"RequestTable.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { computed } from 'vue'\n\nimport RequestTableRow, {\n type TableRow,\n type TableRowUpsertPayload,\n} from '@/v2/blocks/request-block/components/RequestTableRow.vue'\nimport {\n DataTable,\n DataTableHeader,\n DataTableRow,\n} from '@/v2/components/data-table'\n\nconst {\n data,\n hasCheckboxDisabled,\n showUploadButton,\n showAddRowPlaceholder = true,\n environment,\n} = defineProps<{\n data: TableRow[]\n /** Hide the enabled column */\n hasCheckboxDisabled?: boolean\n invalidParams?: Set<string>\n label?: string\n showUploadButton?: boolean\n showAddRowPlaceholder?: boolean\n environment: XScalarEnvironment\n}>()\n\n/**\n * Make this component more generic that can be used also for the operation body\n */\nconst emit = defineEmits<{\n (e: 'upsertRow', index: number, payload: TableRowUpsertPayload): void\n (e: 'deleteRow', index: number): void\n\n /**\n * File upload events\n *\n * Each row has its own upload button, so we need to know which row to update\n * when the file is selected.\n */\n (e: 'uploadFile', index: number): void\n (e: 'removeFile', index: number): void\n (e: 'navigate', route: NonNullable<TableRow['globalRoute']>): void\n}>()\n\nconst columns = computed(() => {\n if (showUploadButton) {\n return ['36px', '', '', 'auto']\n }\n return ['36px', '', '']\n})\n\n/** Add the last empty row (for ui purposes only) */\nconst displayData = computed(() => {\n if (!showAddRowPlaceholder) {\n return data\n }\n\n const last = data.at(-1)\n\n if (!last || last.name !== '' || last.value !== '') {\n return [...data, { name: '', value: '', isDisabled: true }]\n }\n\n return data\n})\n</script>\n<template>\n <DataTable\n class=\"group/table flex-1\"\n :columns=\"columns\">\n <DataTableRow class=\"sr-only !block\">\n <DataTableHeader>{{ label }} Enabled</DataTableHeader>\n <DataTableHeader>{{ label }} Key</DataTableHeader>\n <DataTableHeader>{{ label }} Value</DataTableHeader>\n </DataTableRow>\n\n <RequestTableRow\n v-for=\"(row, index) in displayData\"\n :key=\"index\"\n :data=\"row\"\n :environment=\"environment\"\n :hasCheckboxDisabled=\"hasCheckboxDisabled\"\n :invalidParams=\"invalidParams\"\n :label=\"label\"\n :showUploadButton=\"showUploadButton\"\n @deleteRow=\"emit('deleteRow', index)\"\n @navigate=\"(route) => emit('navigate', route)\"\n @removeFile=\"emit('removeFile', index)\"\n @uploadFile=\"emit('uploadFile', index)\"\n @upsertRow=\"(payload) => emit('upsertRow', index, payload)\" />\n </DataTable>\n</template>\n<style scoped>\n:deep(.code-input-lite__editor) {\n background-color: transparent;\n font-family: var(--scalar-font);\n font-size: var(--scalar-small);\n padding: 5px 8px;\n}\n:deep(.scalar-pill:not(:last-of-type)) {\n margin-right: 0.15em;\n}\n:deep(.scalar-pill:not(:first-of-type)) {\n margin-left: 0.5px;\n}\n.filemask {\n mask-image: linear-gradient(\n to right,\n transparent 0,\n var(--scalar-background-2) 20px\n );\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCA,MAAM,OAAO;EAeb,MAAM,UAAU,eAAe;AAC7B,OAAI,QAAA,iBACF,QAAO;IAAC;IAAQ;IAAI;IAAI;IAAM;AAEhC,UAAO;IAAC;IAAQ;IAAI;IAAE;IACvB;;EAGD,MAAM,cAAc,eAAe;AACjC,OAAI,CAAC,QAAA,sBACH,QAAO,QAAA;GAGT,MAAM,OAAO,QAAA,KAAK,GAAG,GAAE;AAEvB,OAAI,CAAC,QAAQ,KAAK,SAAS,MAAM,KAAK,UAAU,GAC9C,QAAO,CAAC,GAAG,QAAA,MAAM;IAAE,MAAM;IAAI,OAAO;IAAI,YAAY;IAAM,CAAA;AAG5D,UAAO,QAAA;IACR;;uBAGC,YAuBY,MAAA,kBAAA,EAAA;IAtBV,OAAM;IACL,SAAS,QAAA;;2BAKK,CAJf,YAIe,MAAA,qBAAA,EAAA,EAJD,OAAM,kBAAgB,EAAA;4BACoB;MAAtD,YAAsD,MAAA,wBAAA,EAAA,MAAA;8BAA1B,CAAA,gBAAA,gBAAR,QAAA,MAAK,GAAG,YAAQ,EAAA,CAAA,CAAA;;;MACpC,YAAkD,MAAA,wBAAA,EAAA,MAAA;8BAAtB,CAAA,gBAAA,gBAAR,QAAA,MAAK,GAAG,QAAI,EAAA,CAAA,CAAA;;;MAChC,YAAoD,MAAA,wBAAA,EAAA,MAAA;8BAAxB,CAAA,gBAAA,gBAAR,QAAA,MAAK,GAAG,UAAM,EAAA,CAAA,CAAA;;;;;0BAGpC,mBAagE,UAAA,MAAA,WAZvC,YAAA,QAAf,KAAK,UAAK;yBADpB,YAagE,yBAAA;MAX7D,KAAK;MACL,MAAM;MACN,aAAa,QAAA;MACb,qBAAqB,QAAA;MACrB,eAAe,QAAA;MACf,OAAO,QAAA;MACP,kBAAkB,QAAA;MAClB,cAAS,WAAE,KAAI,aAAc,MAAK;MAClC,YAAQ,OAAA,OAAA,OAAA,MAAG,UAAU,KAAI,YAAa,MAAK;MAC3C,eAAU,WAAE,KAAI,cAAe,MAAK;MACpC,eAAU,WAAE,KAAI,cAAe,MAAK;MACpC,cAAY,YAAY,KAAI,aAAc,OAAO,QAAO"}
1
+ {"version":3,"file":"RequestTable.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { computed } from 'vue'\n\nimport RequestTableRow, {\n type TableRow,\n type TableRowUpsertPayload,\n} from '@/v2/blocks/request-block/components/RequestTableRow.vue'\nimport {\n DataTable,\n DataTableHeader,\n DataTableRow,\n} from '@/v2/components/data-table'\n\nconst {\n data,\n hasCheckboxDisabled,\n showUploadButton,\n showAddRowPlaceholder = true,\n environment,\n} = defineProps<{\n data: TableRow[]\n /** Hide the enabled column */\n hasCheckboxDisabled?: boolean\n invalidParams?: Set<string>\n label?: string\n showUploadButton?: boolean\n showAddRowPlaceholder?: boolean\n environment: XScalarEnvironment\n}>()\n\n/**\n * Make this component more generic that can be used also for the operation body\n */\nconst emit = defineEmits<{\n (e: 'upsertRow', index: number, payload: TableRowUpsertPayload): void\n (e: 'deleteRow', index: number): void\n\n /**\n * File upload events\n *\n * Each row has its own upload button, so we need to know which row to update\n * when the file is selected.\n */\n (e: 'uploadFile', index: number): void\n (e: 'removeFile', index: number): void\n (e: 'navigate', route: NonNullable<TableRow['globalRoute']>): void\n /** Select a value for a grouped global cookie preset at the given row index. */\n (e: 'selectPreset', index: number, value: string): void\n}>()\n\nconst columns = computed(() => {\n if (showUploadButton) {\n return ['36px', '', '', 'minmax(0, 1fr)']\n }\n return ['36px', '', '']\n})\n\n/** Add the last empty row (for ui purposes only) */\nconst displayData = computed(() => {\n if (!showAddRowPlaceholder) {\n return data\n }\n\n const last = data.at(-1)\n\n if (!last || last.name !== '' || last.value !== '') {\n return [...data, { name: '', value: '', isDisabled: true }]\n }\n\n return data\n})\n</script>\n<template>\n <DataTable\n class=\"group/table flex-1\"\n :columns=\"columns\">\n <DataTableRow class=\"sr-only !block\">\n <DataTableHeader>{{ label }} Enabled</DataTableHeader>\n <DataTableHeader>{{ label }} Key</DataTableHeader>\n <DataTableHeader>{{ label }} Value</DataTableHeader>\n </DataTableRow>\n\n <RequestTableRow\n v-for=\"(row, index) in displayData\"\n :key=\"index\"\n :data=\"row\"\n :environment=\"environment\"\n :hasCheckboxDisabled=\"hasCheckboxDisabled\"\n :invalidParams=\"invalidParams\"\n :label=\"label\"\n :showUploadButton=\"showUploadButton\"\n @deleteRow=\"emit('deleteRow', index)\"\n @navigate=\"(route) => emit('navigate', route)\"\n @removeFile=\"emit('removeFile', index)\"\n @selectPreset=\"(value) => emit('selectPreset', index, value)\"\n @uploadFile=\"emit('uploadFile', index)\"\n @upsertRow=\"(payload) => emit('upsertRow', index, payload)\" />\n </DataTable>\n</template>\n<style scoped>\n:deep(.code-input-lite__editor) {\n background-color: transparent;\n font-family: var(--scalar-font);\n font-size: var(--scalar-small);\n padding: 5px 8px;\n}\n:deep(.scalar-pill:not(:last-of-type)) {\n margin-right: 0.15em;\n}\n:deep(.scalar-pill:not(:first-of-type)) {\n margin-left: 0.5px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCA,MAAM,OAAO;EAiBb,MAAM,UAAU,eAAe;GAC7B,IAAI,QAAA,kBACF,OAAO;IAAC;IAAQ;IAAI;IAAI;GAAgB;GAE1C,OAAO;IAAC;IAAQ;IAAI;GAAE;EACxB,CAAC;;EAGD,MAAM,cAAc,eAAe;GACjC,IAAI,CAAC,QAAA,uBACH,OAAO,QAAA;GAGT,MAAM,OAAO,QAAA,KAAK,GAAG,EAAE;GAEvB,IAAI,CAAC,QAAQ,KAAK,SAAS,MAAM,KAAK,UAAU,IAC9C,OAAO,CAAC,GAAG,QAAA,MAAM;IAAE,MAAM;IAAI,OAAO;IAAI,YAAY;GAAK,CAAC;GAG5D,OAAO,QAAA;EACT,CAAC;;uBAGC,YAwBY,MAAA,iBAAA,GAAA;IAvBV,OAAM;IACL,SAAS,QAAA;;2BAKK,CAJf,YAIe,MAAA,oBAAA,GAAA,EAJD,OAAM,iBAAgB,GAAA;4BACoB;MAAtD,YAAsD,MAAA,uBAAA,GAAA,MAAA;8BAA1B,CAAA,gBAAA,gBAAR,QAAA,KAAK,IAAG,YAAQ,CAAA,CAAA,CAAA;;;MACpC,YAAkD,MAAA,uBAAA,GAAA,MAAA;8BAAtB,CAAA,gBAAA,gBAAR,QAAA,KAAK,IAAG,QAAI,CAAA,CAAA,CAAA;;;MAChC,YAAoD,MAAA,uBAAA,GAAA,MAAA;8BAAxB,CAAA,gBAAA,gBAAR,QAAA,KAAK,IAAG,UAAM,CAAA,CAAA,CAAA;;;;;0BAGpC,mBAcgE,UAAA,MAAA,WAbvC,YAAA,QAAf,KAAK,UAAK;yBADpB,YAcgE,yBAAA;MAZ7D,KAAK;MACL,MAAM;MACN,aAAa,QAAA;MACb,qBAAqB,QAAA;MACrB,eAAe,QAAA;MACf,OAAO,QAAA;MACP,kBAAkB,QAAA;MAClB,cAAS,WAAE,KAAI,aAAc,KAAK;MAClC,YAAQ,OAAA,OAAA,OAAA,MAAG,UAAU,KAAI,YAAa,KAAK;MAC3C,eAAU,WAAE,KAAI,cAAe,KAAK;MACpC,iBAAe,UAAU,KAAI,gBAAiB,OAAO,KAAK;MAC1D,eAAU,WAAE,KAAI,cAAe,KAAK;MACpC,cAAY,YAAY,KAAI,aAAc,OAAO,OAAO"}
@@ -27,6 +27,12 @@ export type TableRow = {
27
27
  originalParameter?: ParameterObject;
28
28
  /** Path to a value inside the original parameter example for expanded object parameters */
29
29
  sourceParameterValuePath?: string[];
30
+ /**
31
+ * Selectable values for a grouped global cookie preset. When set, the value cell renders a
32
+ * dropdown to switch between predefined values (for example a `Culture` cookie with `PL`/`EN`)
33
+ * instead of an editable input.
34
+ */
35
+ presetOptions?: string[];
30
36
  };
31
37
  export type TableRowUpsertPayload = {
32
38
  name: string;
@@ -72,6 +78,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
72
78
  deleteRow: () => any;
73
79
  uploadFile: () => any;
74
80
  removeFile: () => any;
81
+ selectPreset: (value: string) => any;
75
82
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
76
83
  onNavigate?: ((route: NonNullable<({
77
84
  replace?: boolean;
@@ -102,6 +109,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
102
109
  onDeleteRow?: (() => any) | undefined;
103
110
  onUploadFile?: (() => any) | undefined;
104
111
  onRemoveFile?: (() => any) | undefined;
112
+ onSelectPreset?: ((value: string) => any) | undefined;
105
113
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
106
114
  declare const _default: typeof __VLS_export;
107
115
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"RequestTableRow.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/request-block/components/RequestTableRow.vue"],"names":[],"mappings":"AA2UA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAGxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACb,MAAM,8DAA8D,CAAA;AAcrE,MAAM,MAAM,QAAQ,GAAG;IACrB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAC3B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mFAAmF;IACnF,WAAW,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAA;IAC/C,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wEAAwE;IACxE,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,eAAe,CAAA;IACnC,2FAA2F;IAC3F,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAA;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,kBAAkB,CAAA;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAC;AAmmBF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"RequestTableRow.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/request-block/components/RequestTableRow.vue"],"names":[],"mappings":"AAoWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAGxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACb,MAAM,8DAA8D,CAAA;AAerE,MAAM,MAAM,QAAQ,GAAG;IACrB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAC3B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mFAAmF;IACnF,WAAW,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAA;IAC/C,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wEAAwE;IACxE,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,eAAe,CAAA;IACnC,2FAA2F;IAC3F,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAA;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,kBAAkB,CAAA;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAC;AAopBF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"RequestTableRow.vue.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestTableRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarIcon } from '@scalar/components/icon'\nimport { ScalarIconButton } from '@scalar/components/icon-button'\nimport { ScalarIconGlobe, ScalarIconTrash } from '@scalar/icons'\nimport type { ApiReferenceEvents } from '@scalar/workspace-store/events'\nimport { unpackProxyObject } from '@scalar/workspace-store/helpers/unpack-proxy'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport type {\n ParameterObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref, watch } from 'vue'\n\nimport { getFileName } from '@/v2/blocks/request-block/helpers/files'\nimport { validateParameter } from '@/v2/blocks/request-block/helpers/validate-parameter'\nimport { CodeInputLite } from '@/v2/components/code-input'\nimport {\n DataTableCell,\n DataTableCheckbox,\n DataTableRow,\n} from '@/v2/components/data-table'\n\nimport RequestTableTooltip from './RequestTableTooltip.vue'\n\nexport type TableRow = {\n /** The parameter or field name/key */\n name: string\n /** The parameter value, can be a string, file, or null */\n value: string | File | null\n /** Optional description for the parameter */\n description?: string\n /** Optional route for global parameters (e.g., cookies shared across workspace) */\n globalRoute?: ApiReferenceEvents['ui:navigate']\n /** Whether the parameter is disabled/inactive */\n isDisabled?: boolean\n /** OpenAPI schema object with type, validation rules, examples, etc. */\n schema?: SchemaObject\n /** Whether the parameter is required */\n isRequired?: boolean\n /**\n * Whether the parameter is readonly and can not be modifies directly\n * User can still override the parameter which is going to show up with the linethrough style\n */\n isReadonly?: boolean\n /** Whether the parameter is overridden later on */\n isOverridden?: boolean\n /** Track the original parameter so we can update it */\n originalParameter?: ParameterObject\n /** Path to a value inside the original parameter example for expanded object parameters */\n sourceParameterValuePath?: string[]\n}\n\nexport type TableRowUpsertPayload = {\n name: string\n value: string | File\n isDisabled: boolean\n shouldRenameExpandedRow?: boolean\n}\n\nconst {\n data,\n environment,\n hasCheckboxDisabled,\n invalidParams,\n showUploadButton,\n} = defineProps<{\n data: TableRow\n hasCheckboxDisabled?: boolean\n invalidParams?: Set<string>\n label?: string\n environment: XScalarEnvironment\n showUploadButton?: boolean\n}>()\n\nconst emit = defineEmits<{\n (e: 'upsertRow', payload: TableRowUpsertPayload): void\n (e: 'deleteRow'): void\n (e: 'uploadFile'): void\n (e: 'removeFile'): void\n (e: 'navigate', route: NonNullable<TableRow['globalRoute']>): void\n}>()\n\n/**\n * Track local state for the row\n *\n * Now this is required because of the way we get default values from the schema.\n * If we have a default value in data.value, then we update isDisabled to true. We lose the default value since now\n * we have an example where value: ''. This is why we need to track the local state and update all of the params at the\n * same time.\n */\nconst name = ref<string>(data.name ?? '')\nconst value = ref<string | File>(unpackProxyObject(data.value) ?? '')\nconst isDisabled = ref<boolean>(data.isDisabled ?? false)\n\n// Keep the above state synced with the data prop\nwatch(\n () => data.name,\n (newName) => (name.value = newName ?? ''),\n)\nwatch(\n () => data.value,\n (newValue) => (value.value = unpackProxyObject(newValue) ?? ''),\n)\nwatch(\n () => data.isDisabled,\n (newIsDisabled) => (isDisabled.value = newIsDisabled ?? false),\n)\n\n/** Check if the value is a File instance */\nconst isFile = computed(() => value.value instanceof File)\n\n/** Display value handles File instances and shows filename instead */\nconst displayValue = computed(\n () =>\n (isFile.value\n ? getFileName(value.value as File)\n : (value.value as string)) ?? '',\n)\n\nconst defaultValue = computed(() => data.schema?.default as string)\n\n/** See if we can extract enum values from the schema */\nconst enumValue = computed<string[]>(() => {\n if (!data.schema) {\n return []\n }\n\n // Grab the enum from the schema\n if (data.schema.enum) {\n return data.schema.enum.map((item) => String(item))\n }\n\n // Grab the enum from the items schema\n if ('items' in data.schema) {\n const resolved = resolve.schema(data.schema.items)\n if (resolved?.enum) {\n return resolved.enum.map((item) => String(item))\n }\n }\n\n return []\n})\n\nconst typeValue = computed(() =>\n data.schema && 'type' in data.schema ? data.schema.type : undefined,\n)\n\nconst validationResult = computed(() =>\n validateParameter(data.schema, value.value),\n)\n\n/** Handle row updates while preserving existing properties */\nconst handleUpdateRow = (\n payload: Partial<{ name: string; value: string; isDisabled: boolean }>,\n options: { shouldRenameExpandedRow?: boolean } = {},\n): void => {\n // Update our local state\n if (payload.name !== undefined) {\n name.value = payload.name\n }\n if (payload.value !== undefined) {\n value.value = payload.value\n }\n\n // Is disabled should always be false unless you explicitly set it to true\n isDisabled.value = payload.isDisabled ?? false\n\n if (\n payload.name !== undefined &&\n data.sourceParameterValuePath &&\n !options.shouldRenameExpandedRow\n ) {\n return\n }\n\n // Emit all of the local state\n emit('upsertRow', {\n name: name.value,\n value: value.value,\n isDisabled: isDisabled.value,\n ...(options.shouldRenameExpandedRow\n ? { shouldRenameExpandedRow: true }\n : {}),\n })\n}\n\n/**\n * Commit a key edit when the input loses focus. Expanded-object rows defer their rename to blur (see\n * handleUpdateRow), so we only emit when the key actually changed — focusing and blurring the field\n * without typing should not re-emit the row or silently reset its disabled state. The current\n * disabled state is passed through so a renamed row keeps it.\n */\nconst handleKeyBlur = (newName: string): void => {\n if (newName === data.name) {\n return\n }\n\n handleUpdateRow(\n { name: newName, isDisabled: isDisabled.value },\n { shouldRenameExpandedRow: Boolean(data.sourceParameterValuePath) },\n )\n}\n</script>\n\n<template>\n <DataTableRow\n :id=\"data.name\"\n :class=\"{\n alert: validationResult.ok === false,\n error: validationResult.ok === false && invalidParams?.has(data.name),\n }\">\n <DataTableCheckbox\n class=\"!border-r\"\n :disabled=\"hasCheckboxDisabled ?? false\"\n :modelValue=\"!isDisabled\"\n @update:modelValue=\"(v) => handleUpdateRow({ isDisabled: !v })\" />\n\n <!-- Name -->\n <DataTableCell>\n <CodeInputLite\n :aria-label=\"`${label} Key`\"\n :disabled=\"data.isReadonly\"\n :environment=\"environment\"\n :modelValue=\"name\"\n placeholder=\"Key\"\n :required=\"Boolean(data.isRequired)\"\n @blur=\"(v) => handleKeyBlur(v)\"\n @navigate=\"(route) => emit('navigate', route)\"\n @update:modelValue=\"(v) => handleUpdateRow({ name: v })\" />\n </DataTableCell>\n\n <!-- Value -->\n <DataTableCell>\n <CodeInputLite\n :aria-label=\"`${label} Value`\"\n class=\"pr-6 group-hover:pr-10 group-has-[.code-input-lite__editor:focus]:pr-10\"\n :default=\"defaultValue\"\n :disabled=\"data.isReadonly\"\n :enum=\"enumValue\"\n :environment=\"environment\"\n :examples=\"\n data.schema?.examples?.map((example) => String(example)) ?? []\n \"\n :linethrough=\"data.isOverridden\"\n :modelValue=\"displayValue\"\n placeholder=\"Value\"\n :type=\"typeValue\"\n withFakeData\n @navigate=\"(route) => emit('navigate', route)\"\n @update:modelValue=\"(v) => handleUpdateRow({ value: v })\">\n <template #icon>\n <ScalarButton\n v-if=\"\n Boolean(data.name || value) &&\n !data.isRequired &&\n data.isReadonly !== true\n \"\n class=\"text-c-2 hover:text-c-1 hover:bg-b-2 z-context -mr-0.5 hidden h-fit rounded p-1 group-hover:flex group-has-[.code-input-lite__editor:focus]:flex\"\n size=\"sm\"\n variant=\"ghost\"\n @click=\"emit('deleteRow')\">\n <ScalarIconTrash class=\"size-3.5\" />\n </ScalarButton>\n\n <ScalarIconButton\n v-if=\"data.globalRoute !== undefined\"\n class=\"text-c-2 hover:text-c-1 hover:bg-b-2 z-context -mr-0.5 h-fit\"\n :icon=\"ScalarIconGlobe\"\n label=\"Global cookies are shared across the whole workspace. Click to navigate.\"\n size=\"xs\"\n tooltip=\"top\"\n variant=\"ghost\"\n @click=\"emit('navigate', data.globalRoute)\" />\n\n <RequestTableTooltip\n v-if=\"data.isReadonly\"\n description=\"This is a readonly property and you can not modify it! If you want to change it you have to override it or disable it using the checkbox\"\n :value=\"null\" />\n <RequestTableTooltip\n v-else-if=\"data.schema\"\n :description=\"data.description\"\n :schema=\"data.schema\"\n :value />\n </template>\n </CodeInputLite>\n </DataTableCell>\n\n <!-- File upload -->\n <DataTableCell\n v-if=\"showUploadButton\"\n class=\"group/upload flex items-center justify-center whitespace-nowrap\">\n <template v-if=\"isFile\">\n <div\n class=\"text-c-2 filemask flex w-full max-w-[100%] items-center justify-center overflow-hidden p-1\">\n <span>{{ displayValue }}</span>\n </div>\n <button\n class=\"bg-b-2 mt-1 block rounded p-0.5 text-center text-xs font-medium md:pointer-events-none md:absolute md:inset-x-1 md:top-1/2 md:mt-0 md:-translate-y-1/2 md:opacity-0 md:group-hover/upload:pointer-events-auto md:group-hover/upload:opacity-100\"\n type=\"button\"\n @click=\"emit('removeFile')\">\n Delete\n </button>\n </template>\n <template v-else>\n <div class=\"p-0.5\">\n <ScalarButton\n class=\"bg-b-2 hover:bg-b-3 text-c-2 h-fit border-0 py-px shadow-none\"\n size=\"sm\"\n variant=\"outlined\"\n @click=\"emit('uploadFile')\">\n <span>Select File</span>\n <ScalarIcon\n class=\"ml-1\"\n icon=\"Upload\"\n size=\"xs\"\n thickness=\"2.5\" />\n </ScalarButton>\n </div>\n </template>\n </DataTableCell>\n </DataTableRow>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RequestTableRow.vue.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestTableRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarIcon } from '@scalar/components/icon'\nimport { ScalarIconButton } from '@scalar/components/icon-button'\nimport { ScalarIconGlobe, ScalarIconTrash } from '@scalar/icons'\nimport type { ApiReferenceEvents } from '@scalar/workspace-store/events'\nimport { unpackProxyObject } from '@scalar/workspace-store/helpers/unpack-proxy'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport type {\n ParameterObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref, watch } from 'vue'\n\nimport { getFileName } from '@/v2/blocks/request-block/helpers/files'\nimport { validateParameter } from '@/v2/blocks/request-block/helpers/validate-parameter'\nimport { CodeInputLite } from '@/v2/components/code-input'\nimport {\n DataTableCell,\n DataTableCheckbox,\n DataTableInputSelect,\n DataTableRow,\n} from '@/v2/components/data-table'\n\nimport RequestTableTooltip from './RequestTableTooltip.vue'\n\nexport type TableRow = {\n /** The parameter or field name/key */\n name: string\n /** The parameter value, can be a string, file, or null */\n value: string | File | null\n /** Optional description for the parameter */\n description?: string\n /** Optional route for global parameters (e.g., cookies shared across workspace) */\n globalRoute?: ApiReferenceEvents['ui:navigate']\n /** Whether the parameter is disabled/inactive */\n isDisabled?: boolean\n /** OpenAPI schema object with type, validation rules, examples, etc. */\n schema?: SchemaObject\n /** Whether the parameter is required */\n isRequired?: boolean\n /**\n * Whether the parameter is readonly and can not be modifies directly\n * User can still override the parameter which is going to show up with the linethrough style\n */\n isReadonly?: boolean\n /** Whether the parameter is overridden later on */\n isOverridden?: boolean\n /** Track the original parameter so we can update it */\n originalParameter?: ParameterObject\n /** Path to a value inside the original parameter example for expanded object parameters */\n sourceParameterValuePath?: string[]\n /**\n * Selectable values for a grouped global cookie preset. When set, the value cell renders a\n * dropdown to switch between predefined values (for example a `Culture` cookie with `PL`/`EN`)\n * instead of an editable input.\n */\n presetOptions?: string[]\n}\n\nexport type TableRowUpsertPayload = {\n name: string\n value: string | File\n isDisabled: boolean\n shouldRenameExpandedRow?: boolean\n}\n\nconst {\n data,\n environment,\n hasCheckboxDisabled,\n invalidParams,\n showUploadButton,\n} = defineProps<{\n data: TableRow\n hasCheckboxDisabled?: boolean\n invalidParams?: Set<string>\n label?: string\n environment: XScalarEnvironment\n showUploadButton?: boolean\n}>()\n\nconst emit = defineEmits<{\n (e: 'upsertRow', payload: TableRowUpsertPayload): void\n (e: 'deleteRow'): void\n (e: 'uploadFile'): void\n (e: 'removeFile'): void\n (e: 'navigate', route: NonNullable<TableRow['globalRoute']>): void\n /** Select a value for a grouped global cookie preset. */\n (e: 'selectPreset', value: string): void\n}>()\n\n/**\n * Track local state for the row\n *\n * Now this is required because of the way we get default values from the schema.\n * If we have a default value in data.value, then we update isDisabled to true. We lose the default value since now\n * we have an example where value: ''. This is why we need to track the local state and update all of the params at the\n * same time.\n */\nconst name = ref<string>(data.name ?? '')\nconst value = ref<string | File>(unpackProxyObject(data.value) ?? '')\nconst isDisabled = ref<boolean>(data.isDisabled ?? false)\n\n// Keep the above state synced with the data prop\nwatch(\n () => data.name,\n (newName) => (name.value = newName ?? ''),\n)\nwatch(\n () => data.value,\n (newValue) => (value.value = unpackProxyObject(newValue) ?? ''),\n)\nwatch(\n () => data.isDisabled,\n (newIsDisabled) => (isDisabled.value = newIsDisabled ?? false),\n)\n\n/** Check if the value is a File instance */\nconst isFile = computed(() => value.value instanceof File)\n\n/** Display value handles File instances and shows filename instead */\nconst displayValue = computed(\n () =>\n (isFile.value\n ? getFileName(value.value as File)\n : (value.value as string)) ?? '',\n)\n\nconst defaultValue = computed(() => data.schema?.default as string)\n\n/** See if we can extract enum values from the schema */\nconst enumValue = computed<string[]>(() => {\n if (!data.schema) {\n return []\n }\n\n // Grab the enum from the schema\n if (data.schema.enum) {\n return data.schema.enum.map((item) => String(item))\n }\n\n // Grab the enum from the items schema\n if ('items' in data.schema) {\n const resolved = resolve.schema(data.schema.items)\n if (resolved?.enum) {\n return resolved.enum.map((item) => String(item))\n }\n }\n\n return []\n})\n\nconst typeValue = computed(() =>\n data.schema && 'type' in data.schema ? data.schema.type : undefined,\n)\n\nconst validationResult = computed(() =>\n validateParameter(data.schema, value.value),\n)\n\n/** Handle row updates while preserving existing properties */\nconst handleUpdateRow = (\n payload: Partial<{ name: string; value: string; isDisabled: boolean }>,\n options: { shouldRenameExpandedRow?: boolean } = {},\n): void => {\n // Update our local state\n if (payload.name !== undefined) {\n name.value = payload.name\n }\n if (payload.value !== undefined) {\n value.value = payload.value\n }\n\n // Is disabled should only be updated when explicitly provided in the payload\n if (payload.isDisabled !== undefined) {\n isDisabled.value = payload.isDisabled\n }\n\n if (\n payload.name !== undefined &&\n data.sourceParameterValuePath &&\n !options.shouldRenameExpandedRow\n ) {\n return\n }\n\n // Emit all of the local state\n emit('upsertRow', {\n name: name.value,\n value: value.value,\n isDisabled: isDisabled.value,\n ...(options.shouldRenameExpandedRow\n ? { shouldRenameExpandedRow: true }\n : {}),\n })\n}\n\n/**\n * Commit a key edit when the input loses focus. Expanded-object rows defer their rename to blur (see\n * handleUpdateRow), so we only emit when the key actually changed — focusing and blurring the field\n * without typing should not re-emit the row or silently reset its disabled state. The current\n * disabled state is passed through so a renamed row keeps it.\n */\nconst handleKeyBlur = (newName: string): void => {\n if (newName === data.name) {\n return\n }\n\n handleUpdateRow(\n { name: newName, isDisabled: isDisabled.value },\n { shouldRenameExpandedRow: Boolean(data.sourceParameterValuePath) },\n )\n}\n</script>\n\n<template>\n <DataTableRow\n :id=\"data.name\"\n :class=\"{\n alert: validationResult.ok === false,\n error: validationResult.ok === false && invalidParams?.has(data.name),\n }\">\n <DataTableCheckbox\n :ariaLabel=\"`Include ${data.name || 'row'} in request`\"\n class=\"!border-r\"\n :disabled=\"hasCheckboxDisabled ?? false\"\n :modelValue=\"!isDisabled\"\n @update:modelValue=\"(v) => handleUpdateRow({ isDisabled: !v })\" />\n\n <!-- Name -->\n <DataTableCell>\n <CodeInputLite\n :aria-label=\"`${label} Key`\"\n :disabled=\"data.isReadonly\"\n :environment=\"environment\"\n :modelValue=\"name\"\n placeholder=\"Key\"\n :required=\"Boolean(data.isRequired)\"\n @blur=\"(v) => handleKeyBlur(v)\"\n @navigate=\"(route) => emit('navigate', route)\"\n @update:modelValue=\"(v) => handleUpdateRow({ name: v })\" />\n </DataTableCell>\n\n <!-- Value -->\n <DataTableCell>\n <!-- Preset switcher for grouped global cookies that share a name -->\n <DataTableInputSelect\n v-if=\"data.presetOptions?.length\"\n :canAddCustomValue=\"false\"\n :modelValue=\"displayValue\"\n :value=\"data.presetOptions\"\n @update:modelValue=\"(v) => emit('selectPreset', v)\" />\n <CodeInputLite\n v-else\n :aria-label=\"`${label} Value`\"\n class=\"pr-6 group-hover:pr-10 group-has-[.code-input-lite__editor:focus]:pr-10\"\n :default=\"defaultValue\"\n :disabled=\"data.isReadonly\"\n :enum=\"enumValue\"\n :environment=\"environment\"\n :examples=\"\n data.schema?.examples?.map((example) => String(example)) ?? []\n \"\n :linethrough=\"data.isOverridden\"\n :modelValue=\"displayValue\"\n placeholder=\"Value\"\n :type=\"typeValue\"\n withFakeData\n @navigate=\"(route) => emit('navigate', route)\"\n @update:modelValue=\"(v) => handleUpdateRow({ value: v })\">\n <template #icon>\n <ScalarButton\n v-if=\"\n Boolean(data.name || value) &&\n !data.isRequired &&\n data.isReadonly !== true\n \"\n :aria-label=\"`Delete ${data.name || 'row'}`\"\n class=\"text-c-2 hover:text-c-1 hover:bg-b-2 z-context -mr-0.5 hidden h-fit rounded p-1 group-hover:flex group-has-[.code-input-lite__editor:focus]:flex\"\n size=\"sm\"\n variant=\"ghost\"\n @click=\"emit('deleteRow')\">\n <ScalarIconTrash class=\"size-3.5\" />\n </ScalarButton>\n\n <ScalarIconButton\n v-if=\"data.globalRoute !== undefined\"\n class=\"text-c-2 hover:text-c-1 hover:bg-b-2 z-context -mr-0.5 h-fit\"\n :icon=\"ScalarIconGlobe\"\n label=\"Global cookies are shared across the whole workspace. Click to navigate.\"\n size=\"xs\"\n tooltip=\"top\"\n variant=\"ghost\"\n @click=\"emit('navigate', data.globalRoute)\" />\n\n <RequestTableTooltip\n v-if=\"data.isReadonly\"\n description=\"This is a readonly property and you can not modify it! If you want to change it you have to override it or disable it using the checkbox\"\n :value=\"null\" />\n <RequestTableTooltip\n v-else-if=\"data.schema\"\n :description=\"data.description\"\n :schema=\"data.schema\"\n :value />\n </template>\n </CodeInputLite>\n </DataTableCell>\n\n <!-- File upload -->\n <DataTableCell\n v-if=\"showUploadButton\"\n class=\"group/upload flex items-center justify-center whitespace-nowrap\">\n <template v-if=\"isFile\">\n <div\n class=\"text-c-2 flex w-full max-w-[100%] items-center justify-center overflow-hidden p-1\">\n <span\n class=\"truncate\"\n :title=\"displayValue\"\n >{{ displayValue }}</span\n >\n </div>\n <button\n class=\"bg-b-2 mt-1 block rounded p-0.5 text-center text-xs font-medium md:pointer-events-none md:absolute md:inset-x-1 md:top-1/2 md:mt-0 md:-translate-y-1/2 md:opacity-0 md:group-hover/upload:pointer-events-auto md:group-hover/upload:opacity-100\"\n type=\"button\"\n @click=\"emit('removeFile')\">\n Delete\n </button>\n </template>\n <template v-else>\n <div class=\"p-0.5\">\n <ScalarButton\n class=\"bg-b-2 hover:bg-b-3 text-c-2 h-fit border-0 py-px shadow-none\"\n size=\"sm\"\n variant=\"outlined\"\n @click=\"emit('uploadFile')\">\n <span>Select File</span>\n <ScalarIcon\n class=\"ml-1\"\n icon=\"Upload\"\n size=\"xs\"\n thickness=\"2.5\" />\n </ScalarButton>\n </div>\n </template>\n </DataTableCell>\n </DataTableRow>\n</template>\n"],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import DataTableInputSelect_default from "../../../components/data-table/DataTableInputSelect.vue.js";
1
2
  import CodeInputLite_default from "../../../components/code-input/CodeInputLite.vue.js";
2
3
  import DataTableCell_default from "../../../components/data-table/DataTableCell.vue.js";
3
4
  import DataTableCheckbox_default from "../../../components/data-table/DataTableCheckbox.vue.js";
@@ -13,12 +14,13 @@ import { ScalarIconButton } from "@scalar/components/icon-button";
13
14
  import { unpackProxyObject } from "@scalar/workspace-store/helpers/unpack-proxy";
14
15
  import { resolve } from "@scalar/workspace-store/resolve";
15
16
  //#region src/v2/blocks/request-block/components/RequestTableRow.vue?vue&type=script&setup=true&lang.ts
16
- var _hoisted_1 = { class: "text-c-2 filemask flex w-full max-w-[100%] items-center justify-center overflow-hidden p-1" };
17
- var _hoisted_2 = {
17
+ var _hoisted_1 = { class: "text-c-2 flex w-full max-w-[100%] items-center justify-center overflow-hidden p-1" };
18
+ var _hoisted_2 = ["title"];
19
+ var _hoisted_3 = {
18
20
  key: 1,
19
21
  class: "p-0.5"
20
22
  };
21
- var RequestTableRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
23
+ var RequestTableRow_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
22
24
  __name: "RequestTableRow",
23
25
  props: {
24
26
  data: {},
@@ -33,7 +35,8 @@ var RequestTableRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
33
35
  "deleteRow",
34
36
  "uploadFile",
35
37
  "removeFile",
36
- "navigate"
38
+ "navigate",
39
+ "selectPreset"
37
40
  ],
38
41
  setup(__props, { emit: __emit }) {
39
42
  const emit = __emit;
@@ -72,7 +75,7 @@ var RequestTableRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
72
75
  const handleUpdateRow = (payload, options = {}) => {
73
76
  if (payload.name !== void 0) name.value = payload.name;
74
77
  if (payload.value !== void 0) value.value = payload.value;
75
- isDisabled.value = payload.isDisabled ?? false;
78
+ if (payload.isDisabled !== void 0) isDisabled.value = payload.isDisabled;
76
79
  if (payload.name !== void 0 && __props.data.sourceParameterValuePath && !options.shouldRenameExpandedRow) return;
77
80
  emit("upsertRow", {
78
81
  name: name.value,
@@ -104,11 +107,16 @@ var RequestTableRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
104
107
  }, {
105
108
  default: withCtx(() => [
106
109
  createVNode(unref(DataTableCheckbox_default), {
110
+ ariaLabel: `Include ${__props.data.name || "row"} in request`,
107
111
  class: "!border-r",
108
112
  disabled: __props.hasCheckboxDisabled ?? false,
109
113
  modelValue: !isDisabled.value,
110
114
  "onUpdate:modelValue": _cache[0] || (_cache[0] = (v) => handleUpdateRow({ isDisabled: !v }))
111
- }, null, 8, ["disabled", "modelValue"]),
115
+ }, null, 8, [
116
+ "ariaLabel",
117
+ "disabled",
118
+ "modelValue"
119
+ ]),
112
120
  createVNode(unref(DataTableCell_default), null, {
113
121
  default: withCtx(() => [createVNode(unref(CodeInputLite_default), {
114
122
  "aria-label": `${__props.label} Key`,
@@ -130,7 +138,14 @@ var RequestTableRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
130
138
  _: 1
131
139
  }),
132
140
  createVNode(unref(DataTableCell_default), null, {
133
- default: withCtx(() => [createVNode(unref(CodeInputLite_default), {
141
+ default: withCtx(() => [__props.data.presetOptions?.length ? (openBlock(), createBlock(unref(DataTableInputSelect_default), {
142
+ key: 0,
143
+ canAddCustomValue: false,
144
+ modelValue: displayValue.value,
145
+ value: __props.data.presetOptions,
146
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = (v) => emit("selectPreset", v))
147
+ }, null, 8, ["modelValue", "value"])) : (openBlock(), createBlock(unref(CodeInputLite_default), {
148
+ key: 1,
134
149
  "aria-label": `${__props.label} Value`,
135
150
  class: "pr-6 group-hover:pr-10 group-has-[.code-input-lite__editor:focus]:pr-10",
136
151
  default: defaultValue.value,
@@ -143,20 +158,21 @@ var RequestTableRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
143
158
  placeholder: "Value",
144
159
  type: typeValue.value,
145
160
  withFakeData: "",
146
- onNavigate: _cache[6] || (_cache[6] = (route) => emit("navigate", route)),
147
- "onUpdate:modelValue": _cache[7] || (_cache[7] = (v) => handleUpdateRow({ value: v }))
161
+ onNavigate: _cache[7] || (_cache[7] = (route) => emit("navigate", route)),
162
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = (v) => handleUpdateRow({ value: v }))
148
163
  }, {
149
164
  icon: withCtx(() => [
150
165
  Boolean(__props.data.name || value.value) && !__props.data.isRequired && __props.data.isReadonly !== true ? (openBlock(), createBlock(unref(ScalarButton), {
151
166
  key: 0,
167
+ "aria-label": `Delete ${__props.data.name || "row"}`,
152
168
  class: "text-c-2 hover:text-c-1 hover:bg-b-2 z-context -mr-0.5 hidden h-fit rounded p-1 group-hover:flex group-has-[.code-input-lite__editor:focus]:flex",
153
169
  size: "sm",
154
170
  variant: "ghost",
155
- onClick: _cache[4] || (_cache[4] = ($event) => emit("deleteRow"))
171
+ onClick: _cache[5] || (_cache[5] = ($event) => emit("deleteRow"))
156
172
  }, {
157
173
  default: withCtx(() => [createVNode(unref(ScalarIconTrash), { class: "size-3.5" })]),
158
174
  _: 1
159
- })) : createCommentVNode("", true),
175
+ }, 8, ["aria-label"])) : createCommentVNode("", true),
160
176
  __props.data.globalRoute !== void 0 ? (openBlock(), createBlock(unref(ScalarIconButton), {
161
177
  key: 1,
162
178
  class: "text-c-2 hover:text-c-1 hover:bg-b-2 z-context -mr-0.5 h-fit",
@@ -165,7 +181,7 @@ var RequestTableRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
165
181
  size: "xs",
166
182
  tooltip: "top",
167
183
  variant: "ghost",
168
- onClick: _cache[5] || (_cache[5] = ($event) => emit("navigate", __props.data.globalRoute))
184
+ onClick: _cache[6] || (_cache[6] = ($event) => emit("navigate", __props.data.globalRoute))
169
185
  }, null, 8, ["icon"])) : createCommentVNode("", true),
170
186
  __props.data.isReadonly ? (openBlock(), createBlock(RequestTableTooltip_default, {
171
187
  key: 2,
@@ -193,24 +209,27 @@ var RequestTableRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
193
209
  "linethrough",
194
210
  "modelValue",
195
211
  "type"
196
- ])]),
212
+ ]))]),
197
213
  _: 1
198
214
  }),
199
215
  __props.showUploadButton ? (openBlock(), createBlock(unref(DataTableCell_default), {
200
216
  key: 0,
201
217
  class: "group/upload flex items-center justify-center whitespace-nowrap"
202
218
  }, {
203
- default: withCtx(() => [isFile.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("div", _hoisted_1, [createElementVNode("span", null, toDisplayString(displayValue.value), 1)]), createElementVNode("button", {
219
+ default: withCtx(() => [isFile.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("div", _hoisted_1, [createElementVNode("span", {
220
+ class: "truncate",
221
+ title: displayValue.value
222
+ }, toDisplayString(displayValue.value), 9, _hoisted_2)]), createElementVNode("button", {
204
223
  class: "bg-b-2 mt-1 block rounded p-0.5 text-center text-xs font-medium md:pointer-events-none md:absolute md:inset-x-1 md:top-1/2 md:mt-0 md:-translate-y-1/2 md:opacity-0 md:group-hover/upload:pointer-events-auto md:group-hover/upload:opacity-100",
205
224
  type: "button",
206
- onClick: _cache[8] || (_cache[8] = ($event) => emit("removeFile"))
207
- }, " Delete ")], 64)) : (openBlock(), createElementBlock("div", _hoisted_2, [createVNode(unref(ScalarButton), {
225
+ onClick: _cache[9] || (_cache[9] = ($event) => emit("removeFile"))
226
+ }, " Delete ")], 64)) : (openBlock(), createElementBlock("div", _hoisted_3, [createVNode(unref(ScalarButton), {
208
227
  class: "bg-b-2 hover:bg-b-3 text-c-2 h-fit border-0 py-px shadow-none",
209
228
  size: "sm",
210
229
  variant: "outlined",
211
- onClick: _cache[9] || (_cache[9] = ($event) => emit("uploadFile"))
230
+ onClick: _cache[10] || (_cache[10] = ($event) => emit("uploadFile"))
212
231
  }, {
213
- default: withCtx(() => [_cache[10] || (_cache[10] = createElementVNode("span", null, "Select File", -1)), createVNode(unref(ScalarIcon), {
232
+ default: withCtx(() => [_cache[11] || (_cache[11] = createElementVNode("span", null, "Select File", -1)), createVNode(unref(ScalarIcon), {
214
233
  class: "ml-1",
215
234
  icon: "Upload",
216
235
  size: "xs",