@scalar/api-client 3.23.2 → 3.23.5

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 (532) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/assets/{computer.ascii.virtual.js → computer.ascii_raw.js} +1 -1
  3. package/dist/assets/computer.ascii_raw.js.map +1 -0
  4. package/dist/components/HelpfulLink.vue.js +1 -1
  5. package/dist/components/HelpfulLink.vue.js.map +1 -1
  6. package/dist/components/{HelpfulLink.vue.script.js → HelpfulLink.vue_vue_type_script_setup_true_lang.js} +1 -1
  7. package/dist/components/HelpfulLink.vue_vue_type_script_setup_true_lang.js.map +1 -0
  8. package/dist/components/HttpMethod/HttpMethod.vue.js +2 -2
  9. package/dist/components/HttpMethod/HttpMethod.vue.js.map +1 -1
  10. package/dist/components/HttpMethod/{HttpMethod.vue.script.js → HttpMethod.vue_vue_type_script_setup_true_lang.js} +1 -1
  11. package/dist/components/HttpMethod/HttpMethod.vue_vue_type_script_setup_true_lang.js.map +1 -0
  12. package/dist/components/HttpMethod/index.js +1 -2
  13. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.js +2 -2
  14. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.js.map +1 -1
  15. package/dist/components/ScalarAsciiArt/{ScalarAsciiArt.vue.script.js → ScalarAsciiArt.vue_vue_type_script_setup_true_lang.js} +1 -1
  16. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue_vue_type_script_setup_true_lang.js.map +1 -0
  17. package/dist/components/ScalarAsciiArt/index.js +1 -2
  18. package/dist/components/SectionFilter.vue.js +2 -2
  19. package/dist/components/SectionFilter.vue.js.map +1 -1
  20. package/dist/components/{SectionFilter.vue.script.js → SectionFilter.vue_vue_type_script_setup_true_lang.js} +1 -1
  21. package/dist/components/SectionFilter.vue_vue_type_script_setup_true_lang.js.map +1 -0
  22. package/dist/components/SectionFilterButton.vue.js +1 -1
  23. package/dist/components/SectionFilterButton.vue.js.map +1 -1
  24. package/dist/components/{SectionFilterButton.vue.script.js → SectionFilterButton.vue_vue_type_script_setup_true_lang.js} +1 -1
  25. package/dist/components/SectionFilterButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  26. package/dist/components/Server/ServerVariablesForm.vue.d.ts +13 -2
  27. package/dist/components/Server/ServerVariablesForm.vue.d.ts.map +1 -1
  28. package/dist/components/Server/ServerVariablesForm.vue.js +1 -1
  29. package/dist/components/Server/ServerVariablesForm.vue.js.map +1 -1
  30. package/dist/components/Server/{ServerVariablesForm.vue.script.js → ServerVariablesForm.vue_vue_type_script_setup_true_lang.js} +19 -7
  31. package/dist/components/Server/ServerVariablesForm.vue_vue_type_script_setup_true_lang.js.map +1 -0
  32. package/dist/components/Server/ServerVariablesSelect.vue.d.ts +2 -0
  33. package/dist/components/Server/ServerVariablesSelect.vue.d.ts.map +1 -1
  34. package/dist/components/Server/ServerVariablesSelect.vue.js +1 -1
  35. package/dist/components/Server/ServerVariablesSelect.vue.js.map +1 -1
  36. package/dist/components/Server/{ServerVariablesSelect.vue.script.js → ServerVariablesSelect.vue_vue_type_script_setup_true_lang.js} +5 -3
  37. package/dist/components/Server/ServerVariablesSelect.vue_vue_type_script_setup_true_lang.js.map +1 -0
  38. package/dist/components/Server/ServerVariablesTextbox.vue.js +1 -1
  39. package/dist/components/Server/ServerVariablesTextbox.vue.js.map +1 -1
  40. package/dist/components/Server/{ServerVariablesTextbox.vue.script.js → ServerVariablesTextbox.vue_vue_type_script_setup_true_lang.js} +1 -1
  41. package/dist/components/Server/ServerVariablesTextbox.vue_vue_type_script_setup_true_lang.js.map +1 -0
  42. package/dist/components/Server/index.js +1 -2
  43. package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.js +1 -1
  44. package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.js.map +1 -1
  45. package/dist/components/Sidebar/Actions/{DeleteSidebarListElement.vue.script.js → DeleteSidebarListElement.vue_vue_type_script_setup_true_lang.js} +1 -1
  46. package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue_vue_type_script_setup_true_lang.js.map +1 -0
  47. package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.js +1 -1
  48. package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.js.map +1 -1
  49. package/dist/components/Sidebar/Actions/{SidebarListElementForm.vue.script.js → SidebarListElementForm.vue_vue_type_script_setup_true_lang.js} +1 -1
  50. package/dist/components/Sidebar/Actions/SidebarListElementForm.vue_vue_type_script_setup_true_lang.js.map +1 -0
  51. package/dist/components/Sidebar/index.js +1 -2
  52. package/dist/components/ViewLayout/ViewLayout.vue.js +1 -1
  53. package/dist/components/ViewLayout/ViewLayout.vue.js.map +1 -1
  54. package/dist/components/ViewLayout/{ViewLayout.vue.script.js → ViewLayout.vue_vue_type_script_setup_true_lang.js} +1 -1
  55. package/dist/components/ViewLayout/ViewLayout.vue_vue_type_script_setup_true_lang.js.map +1 -0
  56. package/dist/components/ViewLayout/ViewLayoutContent.vue.js.map +1 -1
  57. package/dist/components/ViewLayout/ViewLayoutSection.vue.js +1 -1
  58. package/dist/components/ViewLayout/ViewLayoutSection.vue.js.map +1 -1
  59. package/dist/components/ViewLayout/{ViewLayoutSection.vue.script.js → ViewLayoutSection.vue_vue_type_script_setup_true_lang.js} +1 -1
  60. package/dist/components/ViewLayout/ViewLayoutSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  61. package/dist/style.css +137 -107
  62. package/dist/types/index.d.ts +2 -2
  63. package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts +2 -2
  64. package/dist/v2/blocks/operation-block/OperationBlock.vue.js +1 -1
  65. package/dist/v2/blocks/operation-block/OperationBlock.vue.js.map +1 -1
  66. package/dist/v2/blocks/operation-block/{OperationBlock.vue.script.js → OperationBlock.vue_vue_type_script_setup_true_lang.js} +3 -2
  67. package/dist/v2/blocks/operation-block/{OperationBlock.vue.script.js.map → OperationBlock.vue_vue_type_script_setup_true_lang.js.map} +1 -1
  68. package/dist/v2/blocks/operation-block/components/Header.vue.d.ts +2 -2
  69. package/dist/v2/blocks/operation-block/components/Header.vue.js +2 -2
  70. package/dist/v2/blocks/operation-block/components/Header.vue.js.map +1 -1
  71. package/dist/v2/blocks/operation-block/components/{Header.vue.script.js → Header.vue_vue_type_script_setup_true_lang.js} +1 -1
  72. package/dist/v2/blocks/operation-block/components/Header.vue_vue_type_script_setup_true_lang.js.map +1 -0
  73. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.js +2 -2
  74. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.js.map +1 -1
  75. package/dist/v2/blocks/operation-block/components/{OpenApiClientButton.vue.script.js → OpenApiClientButton.vue_vue_type_script_setup_true_lang.js} +1 -1
  76. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  77. package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.d.ts +1 -1
  78. package/dist/v2/blocks/operation-block/helpers/response-cache.d.ts +1 -1
  79. package/dist/v2/blocks/operation-block/helpers/send-request.js +2 -1
  80. package/dist/v2/blocks/operation-block/helpers/send-request.js.map +1 -1
  81. package/dist/v2/blocks/request-block/RequestBlock.vue.d.ts +2 -2
  82. package/dist/v2/blocks/request-block/RequestBlock.vue.d.ts.map +1 -1
  83. package/dist/v2/blocks/request-block/RequestBlock.vue.js +3 -3
  84. package/dist/v2/blocks/request-block/RequestBlock.vue.js.map +1 -1
  85. package/dist/v2/blocks/request-block/{RequestBlock.vue.script.js → RequestBlock.vue_vue_type_script_setup_true_lang.js} +4 -3
  86. package/dist/v2/blocks/request-block/RequestBlock.vue_vue_type_script_setup_true_lang.js.map +1 -0
  87. package/dist/v2/blocks/request-block/components/RequestBody.vue.js +2 -2
  88. package/dist/v2/blocks/request-block/components/RequestBody.vue.js.map +1 -1
  89. package/dist/v2/blocks/request-block/components/{RequestBody.vue.script.js → RequestBody.vue_vue_type_script_setup_true_lang.js} +9 -2
  90. package/dist/v2/blocks/request-block/components/RequestBody.vue_vue_type_script_setup_true_lang.js.map +1 -0
  91. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.js +1 -1
  92. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.js.map +1 -1
  93. package/dist/v2/blocks/request-block/components/{RequestBodyForm.vue.script.js → RequestBodyForm.vue_vue_type_script_setup_true_lang.js} +1 -1
  94. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue_vue_type_script_setup_true_lang.js.map +1 -0
  95. package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.js +1 -1
  96. package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.js.map +1 -1
  97. package/dist/v2/blocks/request-block/components/{RequestBodyStructured.vue.script.js → RequestBodyStructured.vue_vue_type_script_setup_true_lang.js} +1 -1
  98. package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue_vue_type_script_setup_true_lang.js.map +1 -0
  99. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.js +1 -1
  100. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.js.map +1 -1
  101. package/dist/v2/blocks/request-block/components/{RequestBodyViewToggle.vue.script.js → RequestBodyViewToggle.vue_vue_type_script_setup_true_lang.js} +1 -1
  102. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue_vue_type_script_setup_true_lang.js.map +1 -0
  103. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.js +1 -1
  104. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.js.map +1 -1
  105. package/dist/v2/blocks/request-block/components/{RequestCodeSnippet.vue.script.js → RequestCodeSnippet.vue_vue_type_script_setup_true_lang.js} +1 -1
  106. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue_vue_type_script_setup_true_lang.js.map +1 -0
  107. package/dist/v2/blocks/request-block/components/RequestParams.vue.js +1 -1
  108. package/dist/v2/blocks/request-block/components/RequestParams.vue.js.map +1 -1
  109. package/dist/v2/blocks/request-block/components/{RequestParams.vue.script.js → RequestParams.vue_vue_type_script_setup_true_lang.js} +1 -1
  110. package/dist/v2/blocks/request-block/components/RequestParams.vue_vue_type_script_setup_true_lang.js.map +1 -0
  111. package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts +1 -1
  112. package/dist/v2/blocks/request-block/components/RequestTable.vue.js +2 -2
  113. package/dist/v2/blocks/request-block/components/RequestTable.vue.js.map +1 -1
  114. package/dist/v2/blocks/request-block/components/{RequestTable.vue.script.js → RequestTable.vue_vue_type_script_setup_true_lang.js} +1 -1
  115. package/dist/v2/blocks/request-block/components/RequestTable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  116. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.js +1 -1
  117. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.js.map +1 -1
  118. package/dist/v2/blocks/request-block/components/{RequestTableRow.vue.script.js → RequestTableRow.vue_vue_type_script_setup_true_lang.js} +1 -1
  119. package/dist/v2/blocks/request-block/components/RequestTableRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  120. package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.js +1 -1
  121. package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.js.map +1 -1
  122. package/dist/v2/blocks/request-block/components/{RequestTableTooltip.vue.script.js → RequestTableTooltip.vue_vue_type_script_setup_true_lang.js} +1 -1
  123. package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -0
  124. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.d.ts +1 -1
  125. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js +2 -1
  126. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js.map +1 -1
  127. package/dist/v2/blocks/request-block/helpers/fold-structured-body-rows.d.ts +1 -1
  128. package/dist/v2/blocks/request-block/helpers/fold-structured-body-rows.js +2 -1
  129. package/dist/v2/blocks/request-block/helpers/fold-structured-body-rows.js.map +1 -1
  130. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.d.ts +1 -1
  131. package/dist/v2/blocks/request-block/helpers/get-structured-body-rows.d.ts +1 -1
  132. package/dist/v2/blocks/request-block/helpers/structured-body-codec.js.map +1 -1
  133. package/dist/v2/blocks/request-block/index.js +1 -2
  134. package/dist/v2/blocks/response-block/ResponseBlock.vue.d.ts +2 -2
  135. package/dist/v2/blocks/response-block/ResponseBlock.vue.js +2 -2
  136. package/dist/v2/blocks/response-block/ResponseBlock.vue.js.map +1 -1
  137. package/dist/v2/blocks/response-block/{ResponseBlock.vue.script.js → ResponseBlock.vue_vue_type_script_setup_true_lang.js} +1 -1
  138. package/dist/v2/blocks/response-block/ResponseBlock.vue_vue_type_script_setup_true_lang.js.map +1 -0
  139. package/dist/v2/blocks/response-block/components/Headers.vue.js +1 -1
  140. package/dist/v2/blocks/response-block/components/Headers.vue.js.map +1 -1
  141. package/dist/v2/blocks/response-block/components/{Headers.vue.script.js → Headers.vue_vue_type_script_setup_true_lang.js} +1 -1
  142. package/dist/v2/blocks/response-block/components/Headers.vue_vue_type_script_setup_true_lang.js.map +1 -0
  143. package/dist/v2/blocks/response-block/components/ResponseBody.vue.js +2 -2
  144. package/dist/v2/blocks/response-block/components/ResponseBody.vue.js.map +1 -1
  145. package/dist/v2/blocks/response-block/components/{ResponseBody.vue.script.js → ResponseBody.vue_vue_type_script_setup_true_lang.js} +1 -1
  146. package/dist/v2/blocks/response-block/components/ResponseBody.vue_vue_type_script_setup_true_lang.js.map +1 -0
  147. package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.js +1 -1
  148. package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.js.map +1 -1
  149. package/dist/v2/blocks/response-block/components/{ResponseBodyDownload.vue.script.js → ResponseBodyDownload.vue_vue_type_script_setup_true_lang.js} +1 -1
  150. package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue_vue_type_script_setup_true_lang.js.map +1 -0
  151. package/dist/v2/blocks/response-block/components/ResponseBodyInfo.vue.js.map +1 -1
  152. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.d.ts +1 -1
  153. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.js +2 -2
  154. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.js.map +1 -1
  155. package/dist/v2/blocks/response-block/components/{ResponseBodyPreview.vue.script.js → ResponseBodyPreview.vue_vue_type_script_setup_true_lang.js} +1 -1
  156. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue_vue_type_script_setup_true_lang.js.map +1 -0
  157. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js +2 -2
  158. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js.map +1 -1
  159. package/dist/v2/blocks/response-block/components/{ResponseBodyRaw.vue.script.js → ResponseBodyRaw.vue_vue_type_script_setup_true_lang.js} +1 -1
  160. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue_vue_type_script_setup_true_lang.js.map +1 -0
  161. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.js +1 -1
  162. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.js.map +1 -1
  163. package/dist/v2/blocks/response-block/components/{ResponseBodyStreaming.vue.script.js → ResponseBodyStreaming.vue_vue_type_script_setup_true_lang.js} +2 -2
  164. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue_vue_type_script_setup_true_lang.js.map +1 -0
  165. package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.js +1 -1
  166. package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.js.map +1 -1
  167. package/dist/v2/blocks/response-block/components/{ResponseBodyToggle.vue.script.js → ResponseBodyToggle.vue_vue_type_script_setup_true_lang.js} +1 -1
  168. package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue_vue_type_script_setup_true_lang.js.map +1 -0
  169. package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.js +2 -2
  170. package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.js.map +1 -1
  171. package/dist/v2/blocks/response-block/components/{ResponseBodyVirtual.vue.script.js → ResponseBodyVirtual.vue_vue_type_script_setup_true_lang.js} +1 -1
  172. package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue_vue_type_script_setup_true_lang.js.map +1 -0
  173. package/dist/v2/blocks/response-block/components/ResponseCookies.vue.js +1 -1
  174. package/dist/v2/blocks/response-block/components/ResponseCookies.vue.js.map +1 -1
  175. package/dist/v2/blocks/response-block/components/{ResponseCookies.vue.script.js → ResponseCookies.vue_vue_type_script_setup_true_lang.js} +1 -1
  176. package/dist/v2/blocks/response-block/components/ResponseCookies.vue_vue_type_script_setup_true_lang.js.map +1 -0
  177. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.d.ts +1 -1
  178. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.js +2 -2
  179. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.js.map +1 -1
  180. package/dist/v2/blocks/response-block/components/{ResponseEmpty.vue.script.js → ResponseEmpty.vue_vue_type_script_setup_true_lang.js} +2 -2
  181. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue_vue_type_script_setup_true_lang.js.map +1 -0
  182. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.js +2 -2
  183. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.js.map +1 -1
  184. package/dist/v2/blocks/response-block/components/{ResponseLoadingOverlay.vue.script.js → ResponseLoadingOverlay.vue_vue_type_script_setup_true_lang.js} +1 -1
  185. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue_vue_type_script_setup_true_lang.js.map +1 -0
  186. package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.d.ts +1 -1
  187. package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.js +1 -1
  188. package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.js.map +1 -1
  189. package/dist/v2/blocks/response-block/components/{ResponseMetaInformation.vue.script.js → ResponseMetaInformation.vue_vue_type_script_setup_true_lang.js} +1 -1
  190. package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue_vue_type_script_setup_true_lang.js.map +1 -0
  191. package/dist/v2/blocks/response-block/helpers/get-content-length.d.ts +1 -1
  192. package/dist/v2/blocks/response-block/helpers/process-response-body.js +2 -1
  193. package/dist/v2/blocks/response-block/helpers/process-response-body.js.map +1 -1
  194. package/dist/v2/blocks/response-block/helpers/response-stream-multipart.js +1 -1
  195. package/dist/v2/blocks/response-block/helpers/response-stream-multipart.js.map +1 -1
  196. package/dist/v2/blocks/response-block/helpers/response-stream.js +1 -1
  197. package/dist/v2/blocks/response-block/helpers/response-stream.js.map +1 -1
  198. package/dist/v2/blocks/response-block/index.js +1 -2
  199. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts +1 -1
  200. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js +2 -2
  201. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js.map +1 -1
  202. package/dist/v2/blocks/scalar-address-bar-block/components/{AddressBar.vue.script.js → AddressBar.vue_vue_type_script_setup_true_lang.js} +1 -1
  203. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  204. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js +2 -2
  205. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js.map +1 -1
  206. package/dist/v2/blocks/scalar-address-bar-block/components/{AddressBarHistory.vue.script.js → AddressBarHistory.vue_vue_type_script_setup_true_lang.js} +1 -1
  207. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue_vue_type_script_setup_true_lang.js.map +1 -0
  208. package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.js +1 -1
  209. package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.js.map +1 -1
  210. package/dist/v2/blocks/scalar-address-bar-block/components/{EnvironmentSelector.vue.script.js → EnvironmentSelector.vue_vue_type_script_setup_true_lang.js} +1 -1
  211. package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue_vue_type_script_setup_true_lang.js.map +1 -0
  212. package/dist/v2/blocks/scalar-address-bar-block/components/httpStatusCodeColors.js.map +1 -1
  213. package/dist/v2/blocks/scalar-address-bar-block/index.js +1 -2
  214. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.d.ts +3 -3
  215. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.js +1 -1
  216. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.js.map +1 -1
  217. package/dist/v2/blocks/scalar-auth-selector-block/components/{AuthSelector.vue.script.js → AuthSelector.vue_vue_type_script_setup_true_lang.js} +1 -1
  218. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue_vue_type_script_setup_true_lang.js.map +1 -0
  219. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.js +1 -1
  220. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.js.map +1 -1
  221. package/dist/v2/blocks/scalar-auth-selector-block/components/{DeleteRequestAuthModal.vue.script.js → DeleteRequestAuthModal.vue_vue_type_script_setup_true_lang.js} +1 -1
  222. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue_vue_type_script_setup_true_lang.js.map +1 -0
  223. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.d.ts +1 -1
  224. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.js +1 -1
  225. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.js.map +1 -1
  226. package/dist/v2/blocks/scalar-auth-selector-block/components/{OAuth2.vue.script.js → OAuth2.vue_vue_type_script_setup_true_lang.js} +1 -1
  227. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue_vue_type_script_setup_true_lang.js.map +1 -0
  228. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2Metadata.vue.d.ts +1 -1
  229. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2Metadata.vue.js +1 -1
  230. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2Metadata.vue.js.map +1 -1
  231. package/dist/v2/blocks/scalar-auth-selector-block/components/{OAuth2Metadata.vue.script.js → OAuth2Metadata.vue_vue_type_script_setup_true_lang.js} +1 -1
  232. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2Metadata.vue_vue_type_script_setup_true_lang.js.map +1 -0
  233. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.js +1 -1
  234. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.js.map +1 -1
  235. package/dist/v2/blocks/scalar-auth-selector-block/components/{OAuthScopesAddModal.vue.script.js → OAuthScopesAddModal.vue_vue_type_script_setup_true_lang.js} +1 -1
  236. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue_vue_type_script_setup_true_lang.js.map +1 -0
  237. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.js +2 -2
  238. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.js.map +1 -1
  239. package/dist/v2/blocks/scalar-auth-selector-block/components/{OAuthScopesInput.vue.script.js → OAuthScopesInput.vue_vue_type_script_setup_true_lang.js} +1 -1
  240. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  241. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.d.ts +1 -1
  242. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.js +1 -1
  243. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.js.map +1 -1
  244. package/dist/v2/blocks/scalar-auth-selector-block/components/{OpenIDConnect.vue.script.js → OpenIDConnect.vue_vue_type_script_setup_true_lang.js} +1 -1
  245. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue_vue_type_script_setup_true_lang.js.map +1 -0
  246. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.d.ts +2 -2
  247. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.js +1 -1
  248. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.js.map +1 -1
  249. package/dist/v2/blocks/scalar-auth-selector-block/components/{RequestAuthDataTable.vue.script.js → RequestAuthDataTable.vue_vue_type_script_setup_true_lang.js} +1 -1
  250. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  251. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts +1 -1
  252. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.js +1 -1
  253. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.js.map +1 -1
  254. package/dist/v2/blocks/scalar-auth-selector-block/components/{RequestAuthDataTableInput.vue.script.js → RequestAuthDataTableInput.vue_vue_type_script_setup_true_lang.js} +1 -1
  255. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  256. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.js +1 -1
  257. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.js.map +1 -1
  258. package/dist/v2/blocks/scalar-auth-selector-block/components/{RequestAuthTab.vue.script.js → RequestAuthTab.vue_vue_type_script_setup_true_lang.js} +1 -1
  259. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue_vue_type_script_setup_true_lang.js.map +1 -0
  260. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-oauth2-metadata.d.ts +1 -1
  261. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-oauth2-metadata.js.map +1 -1
  262. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-openid-connect-discovery.d.ts +1 -1
  263. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-device-authorization.d.ts +1 -1
  264. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.d.ts +1 -1
  265. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js +7 -5
  266. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js.map +1 -1
  267. package/dist/v2/blocks/scalar-auth-selector-block/helpers/run-oauth2-authorize.d.ts +2 -2
  268. package/dist/v2/blocks/scalar-auth-selector-block/helpers/run-oauth2-authorize.js +3 -2
  269. package/dist/v2/blocks/scalar-auth-selector-block/helpers/run-oauth2-authorize.js.map +1 -1
  270. package/dist/v2/blocks/scalar-auth-selector-block/index.js +1 -2
  271. package/dist/v2/components/code-input/CodeInput.vue.d.ts +1 -1
  272. package/dist/v2/components/code-input/CodeInput.vue.js +3 -3
  273. package/dist/v2/components/code-input/CodeInput.vue.js.map +1 -1
  274. package/dist/v2/components/code-input/{CodeInput.vue.script.js → CodeInput.vue_vue_type_script_setup_true_lang.js} +1 -1
  275. package/dist/v2/components/code-input/CodeInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  276. package/dist/v2/components/code-input/CodeInputLite.vue.d.ts +1 -1
  277. package/dist/v2/components/code-input/CodeInputLite.vue.js +3 -3
  278. package/dist/v2/components/code-input/CodeInputLite.vue.js.map +1 -1
  279. package/dist/v2/components/code-input/{CodeInputLite.vue.script.js → CodeInputLite.vue_vue_type_script_setup_true_lang.js} +4 -2
  280. package/dist/v2/components/code-input/CodeInputLite.vue_vue_type_script_setup_true_lang.js.map +1 -0
  281. package/dist/v2/components/code-input/PillTooltipHost.vue.d.ts +1 -1
  282. package/dist/v2/components/code-input/PillTooltipHost.vue.js +1 -1
  283. package/dist/v2/components/code-input/PillTooltipHost.vue.js.map +1 -1
  284. package/dist/v2/components/code-input/{PillTooltipHost.vue.script.js → PillTooltipHost.vue_vue_type_script_setup_true_lang.js} +1 -1
  285. package/dist/v2/components/code-input/PillTooltipHost.vue_vue_type_script_setup_true_lang.js.map +1 -0
  286. package/dist/v2/components/code-input/code-variable-widget.d.ts +2 -2
  287. package/dist/v2/components/code-input/code-variable-widget.d.ts.map +1 -1
  288. package/dist/v2/components/code-input/code-variable-widget.js.map +1 -1
  289. package/dist/v2/components/context-menu/ContextMenu.vue.js +2 -2
  290. package/dist/v2/components/context-menu/ContextMenu.vue.js.map +1 -1
  291. package/dist/v2/components/context-menu/{ContextMenu.vue.script.js → ContextMenu.vue_vue_type_script_setup_true_lang.js} +1 -1
  292. package/dist/v2/components/context-menu/ContextMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  293. package/dist/v2/components/context-menu/index.js +1 -2
  294. package/dist/v2/components/data-table/DataTable.vue.js +1 -1
  295. package/dist/v2/components/data-table/DataTable.vue.js.map +1 -1
  296. package/dist/v2/components/data-table/{DataTable.vue.script.js → DataTable.vue_vue_type_script_setup_true_lang.js} +1 -1
  297. package/dist/v2/components/data-table/DataTable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  298. package/dist/v2/components/data-table/DataTableCell.vue.js +1 -1
  299. package/dist/v2/components/data-table/DataTableCell.vue.js.map +1 -1
  300. package/dist/v2/components/data-table/{DataTableCell.vue.script.js → DataTableCell.vue_vue_type_script_setup_true_lang.js} +1 -1
  301. package/dist/v2/components/data-table/DataTableCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
  302. package/dist/v2/components/data-table/DataTableCheckbox.vue.js +1 -1
  303. package/dist/v2/components/data-table/DataTableCheckbox.vue.js.map +1 -1
  304. package/dist/v2/components/data-table/{DataTableCheckbox.vue.script.js → DataTableCheckbox.vue_vue_type_script_setup_true_lang.js} +1 -1
  305. package/dist/v2/components/data-table/DataTableCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -0
  306. package/dist/v2/components/data-table/DataTableHeader.vue.js +1 -1
  307. package/dist/v2/components/data-table/DataTableHeader.vue.js.map +1 -1
  308. package/dist/v2/components/data-table/{DataTableHeader.vue.script.js → DataTableHeader.vue_vue_type_script_setup_true_lang.js} +1 -1
  309. package/dist/v2/components/data-table/DataTableHeader.vue_vue_type_script_setup_true_lang.js.map +1 -0
  310. package/dist/v2/components/data-table/DataTableInput.vue.d.ts +1 -1
  311. package/dist/v2/components/data-table/DataTableInput.vue.js +2 -2
  312. package/dist/v2/components/data-table/DataTableInput.vue.js.map +1 -1
  313. package/dist/v2/components/data-table/{DataTableInput.vue.script.js → DataTableInput.vue_vue_type_script_setup_true_lang.js} +1 -1
  314. package/dist/v2/components/data-table/DataTableInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  315. package/dist/v2/components/data-table/DataTableInputSelect.vue.d.ts +1 -1
  316. package/dist/v2/components/data-table/DataTableInputSelect.vue.js +1 -1
  317. package/dist/v2/components/data-table/DataTableInputSelect.vue.js.map +1 -1
  318. package/dist/v2/components/data-table/{DataTableInputSelect.vue.script.js → DataTableInputSelect.vue_vue_type_script_setup_true_lang.js} +1 -1
  319. package/dist/v2/components/data-table/DataTableInputSelect.vue_vue_type_script_setup_true_lang.js.map +1 -0
  320. package/dist/v2/components/data-table/DataTableRow.vue.js.map +1 -1
  321. package/dist/v2/components/data-table/DataTableText.vue.js +1 -1
  322. package/dist/v2/components/data-table/DataTableText.vue.js.map +1 -1
  323. package/dist/v2/components/data-table/{DataTableText.vue.script.js → DataTableText.vue_vue_type_script_setup_true_lang.js} +1 -1
  324. package/dist/v2/components/data-table/DataTableText.vue_vue_type_script_setup_true_lang.js.map +1 -0
  325. package/dist/v2/components/forms/ConfirmationForm.vue.js +1 -1
  326. package/dist/v2/components/forms/ConfirmationForm.vue.js.map +1 -1
  327. package/dist/v2/components/forms/{ConfirmationForm.vue.script.js → ConfirmationForm.vue_vue_type_script_setup_true_lang.js} +1 -1
  328. package/dist/v2/components/forms/ConfirmationForm.vue_vue_type_script_setup_true_lang.js.map +1 -0
  329. package/dist/v2/components/forms/index.js +1 -2
  330. package/dist/v2/components/layout/CollapsibleSection.vue.js +1 -1
  331. package/dist/v2/components/layout/CollapsibleSection.vue.js.map +1 -1
  332. package/dist/v2/components/layout/{CollapsibleSection.vue.script.js → CollapsibleSection.vue_vue_type_script_setup_true_lang.js} +1 -1
  333. package/dist/v2/components/layout/CollapsibleSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  334. package/dist/v2/components/layout/ValueEmitter.vue.js +1 -1
  335. package/dist/v2/components/layout/ValueEmitter.vue.js.map +1 -1
  336. package/dist/v2/components/layout/{ValueEmitter.vue.script.js → ValueEmitter.vue_vue_type_script_setup_true_lang.js} +1 -1
  337. package/dist/v2/components/layout/ValueEmitter.vue_vue_type_script_setup_true_lang.js.map +1 -0
  338. package/dist/v2/components/modals/DeleteModal.vue.js +1 -1
  339. package/dist/v2/components/modals/DeleteModal.vue.js.map +1 -1
  340. package/dist/v2/components/modals/{DeleteModal.vue.script.js → DeleteModal.vue_vue_type_script_setup_true_lang.js} +1 -1
  341. package/dist/v2/components/modals/DeleteModal.vue_vue_type_script_setup_true_lang.js.map +1 -0
  342. package/dist/v2/components/modals/ModalClientContainer.vue.js +2 -2
  343. package/dist/v2/components/modals/ModalClientContainer.vue.js.map +1 -1
  344. package/dist/v2/components/modals/{ModalClientContainer.vue.script.js → ModalClientContainer.vue_vue_type_script_setup_true_lang.js} +1 -1
  345. package/dist/v2/components/modals/ModalClientContainer.vue_vue_type_script_setup_true_lang.js.map +1 -0
  346. package/dist/v2/components/modals/index.js +1 -2
  347. package/dist/v2/components/resize/Resize.vue.js +3 -3
  348. package/dist/v2/components/resize/Resize.vue.js.map +1 -1
  349. package/dist/v2/components/resize/{Resize.vue.script.js → Resize.vue_vue_type_script_setup_true_lang.js} +1 -1
  350. package/dist/v2/components/resize/Resize.vue_vue_type_script_setup_true_lang.js.map +1 -0
  351. package/dist/v2/components/server/ServerDropdown.vue.d.ts +1 -1
  352. package/dist/v2/components/server/ServerDropdown.vue.js +1 -1
  353. package/dist/v2/components/server/ServerDropdown.vue.js.map +1 -1
  354. package/dist/v2/components/server/{ServerDropdown.vue.script.js → ServerDropdown.vue_vue_type_script_setup_true_lang.js} +1 -1
  355. package/dist/v2/components/server/ServerDropdown.vue_vue_type_script_setup_true_lang.js.map +1 -0
  356. package/dist/v2/components/server/ServerDropdownItem.vue.js +2 -2
  357. package/dist/v2/components/server/ServerDropdownItem.vue.js.map +1 -1
  358. package/dist/v2/components/server/{ServerDropdownItem.vue.script.js → ServerDropdownItem.vue_vue_type_script_setup_true_lang.js} +1 -1
  359. package/dist/v2/components/server/ServerDropdownItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  360. package/dist/v2/components/server/index.js +1 -2
  361. package/dist/v2/components/sidebar/Sidebar.vue.d.ts +1 -1
  362. package/dist/v2/components/sidebar/Sidebar.vue.js +1 -1
  363. package/dist/v2/components/sidebar/Sidebar.vue.js.map +1 -1
  364. package/dist/v2/components/sidebar/{Sidebar.vue.script.js → Sidebar.vue_vue_type_script_setup_true_lang.js} +1 -1
  365. package/dist/v2/components/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  366. package/dist/v2/components/sidebar/SidebarMenu.vue.js +1 -1
  367. package/dist/v2/components/sidebar/SidebarMenu.vue.js.map +1 -1
  368. package/dist/v2/components/sidebar/{SidebarMenu.vue.script.js → SidebarMenu.vue_vue_type_script_setup_true_lang.js} +1 -1
  369. package/dist/v2/components/sidebar/SidebarMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  370. package/dist/v2/components/sidebar/SidebarToggle.vue.js +2 -2
  371. package/dist/v2/components/sidebar/SidebarToggle.vue.js.map +1 -1
  372. package/dist/v2/components/sidebar/{SidebarToggle.vue.script.js → SidebarToggle.vue_vue_type_script_setup_true_lang.js} +1 -1
  373. package/dist/v2/components/sidebar/SidebarToggle.vue_vue_type_script_setup_true_lang.js.map +1 -0
  374. package/dist/v2/constants.js +1 -1
  375. package/dist/v2/features/command-palette/components/CommandActionForm.vue.js +1 -1
  376. package/dist/v2/features/command-palette/components/CommandActionForm.vue.js.map +1 -1
  377. package/dist/v2/features/command-palette/components/{CommandActionForm.vue.script.js → CommandActionForm.vue_vue_type_script_setup_true_lang.js} +1 -1
  378. package/dist/v2/features/command-palette/components/CommandActionForm.vue_vue_type_script_setup_true_lang.js.map +1 -0
  379. package/dist/v2/features/command-palette/components/CommandActionInput.vue.js +1 -1
  380. package/dist/v2/features/command-palette/components/CommandActionInput.vue.js.map +1 -1
  381. package/dist/v2/features/command-palette/components/{CommandActionInput.vue.script.js → CommandActionInput.vue_vue_type_script_setup_true_lang.js} +1 -1
  382. package/dist/v2/features/command-palette/components/CommandActionInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  383. package/dist/v2/features/environments/EnvironmentsList.vue.js +1 -1
  384. package/dist/v2/features/environments/EnvironmentsList.vue.js.map +1 -1
  385. package/dist/v2/features/environments/{EnvironmentsList.vue.script.js → EnvironmentsList.vue_vue_type_script_setup_true_lang.js} +1 -1
  386. package/dist/v2/features/environments/EnvironmentsList.vue_vue_type_script_setup_true_lang.js.map +1 -0
  387. package/dist/v2/features/environments/components/Environment.vue.js +1 -1
  388. package/dist/v2/features/environments/components/Environment.vue.js.map +1 -1
  389. package/dist/v2/features/environments/components/{Environment.vue.script.js → Environment.vue_vue_type_script_setup_true_lang.js} +1 -1
  390. package/dist/v2/features/environments/components/Environment.vue_vue_type_script_setup_true_lang.js.map +1 -0
  391. package/dist/v2/features/environments/components/EnvironmentColors.vue.js +1 -1
  392. package/dist/v2/features/environments/components/EnvironmentColors.vue.js.map +1 -1
  393. package/dist/v2/features/environments/components/{EnvironmentColors.vue.script.js → EnvironmentColors.vue_vue_type_script_setup_true_lang.js} +1 -1
  394. package/dist/v2/features/environments/components/EnvironmentColors.vue_vue_type_script_setup_true_lang.js.map +1 -0
  395. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.js +1 -1
  396. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.js.map +1 -1
  397. package/dist/v2/features/environments/components/{EnvironmentCreateModal.vue.script.js → EnvironmentCreateModal.vue_vue_type_script_setup_true_lang.js} +1 -1
  398. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue_vue_type_script_setup_true_lang.js.map +1 -0
  399. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.js +1 -1
  400. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.js.map +1 -1
  401. package/dist/v2/features/environments/components/{EnvironmentDeleteModal.vue.script.js → EnvironmentDeleteModal.vue_vue_type_script_setup_true_lang.js} +1 -1
  402. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue_vue_type_script_setup_true_lang.js.map +1 -0
  403. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.js +1 -1
  404. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.js.map +1 -1
  405. package/dist/v2/features/environments/components/{EnvironmentVariablesDropdown.vue.script.js → EnvironmentVariablesDropdown.vue_vue_type_script_setup_true_lang.js} +1 -1
  406. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue_vue_type_script_setup_true_lang.js.map +1 -0
  407. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.js +2 -2
  408. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.js.map +1 -1
  409. package/dist/v2/features/environments/components/{EnvironmentVariablesTable.vue.script.js → EnvironmentVariablesTable.vue_vue_type_script_setup_true_lang.js} +1 -1
  410. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  411. package/dist/v2/features/environments/index.js +1 -2
  412. package/dist/v2/features/modal/Modal.vue.d.ts +2 -2
  413. package/dist/v2/features/modal/Modal.vue.js +1 -1
  414. package/dist/v2/features/modal/Modal.vue.js.map +1 -1
  415. package/dist/v2/features/modal/{Modal.vue.script.js → Modal.vue_vue_type_script_setup_true_lang.js} +1 -1
  416. package/dist/v2/features/modal/Modal.vue_vue_type_script_setup_true_lang.js.map +1 -0
  417. package/dist/v2/features/modal/helpers/create-api-client-modal.d.ts +2 -2
  418. package/dist/v2/features/modal/helpers/create-api-client-modal.js.map +1 -1
  419. package/dist/v2/features/modal/helpers/map-hidden-clients-config.js.map +1 -1
  420. package/dist/v2/features/modal/helpers/types.d.ts +1 -1
  421. package/dist/v2/features/modal/hooks/use-modal-sidebar.d.ts +1 -1
  422. package/dist/v2/features/modal/index.d.ts +1 -1
  423. package/dist/v2/features/modal/modal-events.d.ts +1 -1
  424. package/dist/v2/features/operation/Operation.vue.d.ts +2 -2
  425. package/dist/v2/features/operation/Operation.vue.js +1 -1
  426. package/dist/v2/features/operation/Operation.vue.js.map +1 -1
  427. package/dist/v2/features/operation/{Operation.vue.script.js → Operation.vue_vue_type_script_setup_true_lang.js} +1 -1
  428. package/dist/v2/features/operation/Operation.vue_vue_type_script_setup_true_lang.js.map +1 -0
  429. package/dist/v2/features/operation/index.js +1 -2
  430. package/dist/v2/features/search/components/DocumentSearchModal.vue.js +2 -2
  431. package/dist/v2/features/search/components/DocumentSearchModal.vue.js.map +1 -1
  432. package/dist/v2/features/search/components/{DocumentSearchModal.vue.script.js → DocumentSearchModal.vue_vue_type_script_setup_true_lang.js} +1 -1
  433. package/dist/v2/features/search/components/DocumentSearchModal.vue_vue_type_script_setup_true_lang.js.map +1 -0
  434. package/dist/v2/features/search/components/SearchResult.vue.d.ts +1 -1
  435. package/dist/v2/features/search/components/SearchResult.vue.js +1 -1
  436. package/dist/v2/features/search/components/SearchResult.vue.js.map +1 -1
  437. package/dist/v2/features/search/components/{SearchResult.vue.script.js → SearchResult.vue_vue_type_script_setup_true_lang.js} +1 -1
  438. package/dist/v2/features/search/components/SearchResult.vue_vue_type_script_setup_true_lang.js.map +1 -0
  439. package/dist/v2/features/search/helpers/create-fuse-instance.d.ts +1 -1
  440. package/dist/v2/features/search/helpers/create-search-index.d.ts +1 -1
  441. package/dist/v2/helpers/handle-hotkeys.d.ts +1 -1
  442. package/dist/v2/hooks/index.js +1 -2
  443. package/dist/v2/hooks/use-global-hot-keys.d.ts +1 -1
  444. package/dist/v2/types/options.d.ts +2 -2
  445. package/dist/vue-styles.css +6 -6
  446. package/package.json +31 -31
  447. package/dist/assets/computer.ascii.virtual.js.map +0 -1
  448. package/dist/components/HelpfulLink.vue.script.js.map +0 -1
  449. package/dist/components/HttpMethod/HttpMethod.vue.script.js.map +0 -1
  450. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.script.js.map +0 -1
  451. package/dist/components/SectionFilter.vue.script.js.map +0 -1
  452. package/dist/components/SectionFilterButton.vue.script.js.map +0 -1
  453. package/dist/components/Server/ServerVariablesForm.vue.script.js.map +0 -1
  454. package/dist/components/Server/ServerVariablesSelect.vue.script.js.map +0 -1
  455. package/dist/components/Server/ServerVariablesTextbox.vue.script.js.map +0 -1
  456. package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.script.js.map +0 -1
  457. package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.script.js.map +0 -1
  458. package/dist/components/ViewLayout/ViewLayout.vue.script.js.map +0 -1
  459. package/dist/components/ViewLayout/ViewLayoutSection.vue.script.js.map +0 -1
  460. package/dist/v2/blocks/operation-block/components/Header.vue.script.js.map +0 -1
  461. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.script.js.map +0 -1
  462. package/dist/v2/blocks/request-block/RequestBlock.vue.script.js.map +0 -1
  463. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js.map +0 -1
  464. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js.map +0 -1
  465. package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.script.js.map +0 -1
  466. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.script.js.map +0 -1
  467. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.script.js.map +0 -1
  468. package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js.map +0 -1
  469. package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js.map +0 -1
  470. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js.map +0 -1
  471. package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.script.js.map +0 -1
  472. package/dist/v2/blocks/response-block/ResponseBlock.vue.script.js.map +0 -1
  473. package/dist/v2/blocks/response-block/components/Headers.vue.script.js.map +0 -1
  474. package/dist/v2/blocks/response-block/components/ResponseBody.vue.script.js.map +0 -1
  475. package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.script.js.map +0 -1
  476. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.script.js.map +0 -1
  477. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js.map +0 -1
  478. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.script.js.map +0 -1
  479. package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.script.js.map +0 -1
  480. package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.script.js.map +0 -1
  481. package/dist/v2/blocks/response-block/components/ResponseCookies.vue.script.js.map +0 -1
  482. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.script.js.map +0 -1
  483. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.script.js.map +0 -1
  484. package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.script.js.map +0 -1
  485. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js.map +0 -1
  486. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js.map +0 -1
  487. package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.script.js.map +0 -1
  488. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js.map +0 -1
  489. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.script.js.map +0 -1
  490. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js.map +0 -1
  491. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2Metadata.vue.script.js.map +0 -1
  492. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.script.js.map +0 -1
  493. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.script.js.map +0 -1
  494. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.script.js.map +0 -1
  495. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.script.js.map +0 -1
  496. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js.map +0 -1
  497. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js.map +0 -1
  498. package/dist/v2/components/code-input/CodeInput.vue.script.js.map +0 -1
  499. package/dist/v2/components/code-input/CodeInputLite.vue.script.js.map +0 -1
  500. package/dist/v2/components/code-input/PillTooltipHost.vue.script.js.map +0 -1
  501. package/dist/v2/components/context-menu/ContextMenu.vue.script.js.map +0 -1
  502. package/dist/v2/components/data-table/DataTable.vue.script.js.map +0 -1
  503. package/dist/v2/components/data-table/DataTableCell.vue.script.js.map +0 -1
  504. package/dist/v2/components/data-table/DataTableCheckbox.vue.script.js.map +0 -1
  505. package/dist/v2/components/data-table/DataTableHeader.vue.script.js.map +0 -1
  506. package/dist/v2/components/data-table/DataTableInput.vue.script.js.map +0 -1
  507. package/dist/v2/components/data-table/DataTableInputSelect.vue.script.js.map +0 -1
  508. package/dist/v2/components/data-table/DataTableText.vue.script.js.map +0 -1
  509. package/dist/v2/components/forms/ConfirmationForm.vue.script.js.map +0 -1
  510. package/dist/v2/components/layout/CollapsibleSection.vue.script.js.map +0 -1
  511. package/dist/v2/components/layout/ValueEmitter.vue.script.js.map +0 -1
  512. package/dist/v2/components/modals/DeleteModal.vue.script.js.map +0 -1
  513. package/dist/v2/components/modals/ModalClientContainer.vue.script.js.map +0 -1
  514. package/dist/v2/components/resize/Resize.vue.script.js.map +0 -1
  515. package/dist/v2/components/server/ServerDropdown.vue.script.js.map +0 -1
  516. package/dist/v2/components/server/ServerDropdownItem.vue.script.js.map +0 -1
  517. package/dist/v2/components/sidebar/Sidebar.vue.script.js.map +0 -1
  518. package/dist/v2/components/sidebar/SidebarMenu.vue.script.js.map +0 -1
  519. package/dist/v2/components/sidebar/SidebarToggle.vue.script.js.map +0 -1
  520. package/dist/v2/features/command-palette/components/CommandActionForm.vue.script.js.map +0 -1
  521. package/dist/v2/features/command-palette/components/CommandActionInput.vue.script.js.map +0 -1
  522. package/dist/v2/features/environments/EnvironmentsList.vue.script.js.map +0 -1
  523. package/dist/v2/features/environments/components/Environment.vue.script.js.map +0 -1
  524. package/dist/v2/features/environments/components/EnvironmentColors.vue.script.js.map +0 -1
  525. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.script.js.map +0 -1
  526. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.script.js.map +0 -1
  527. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js.map +0 -1
  528. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.script.js.map +0 -1
  529. package/dist/v2/features/modal/Modal.vue.script.js.map +0 -1
  530. package/dist/v2/features/operation/Operation.vue.script.js.map +0 -1
  531. package/dist/v2/features/search/components/DocumentSearchModal.vue.script.js.map +0 -1
  532. package/dist/v2/features/search/components/SearchResult.vue.script.js.map +0 -1
@@ -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.2/strict/openapi-document'\nimport { computed, ref, useTemplateRef, 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'\nimport { useLocalization } from '@/v2/features/localization'\n\nimport RequestTableTooltip from './RequestTableTooltip.vue'\n\nconst {\n data,\n environment,\n hasCheckboxDisabled,\n deferKeyUpdates,\n invalidParams,\n showUploadButton,\n} = defineProps<{\n data: TableRow\n /** Keep key edits local until blur when the row identity depends on its name. */\n deferKeyUpdates?: boolean\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\nconst { translate } = useLocalization()\n\nconst valueInput = useTemplateRef('valueInput')\ndefineExpose({ focusValue: (): void => valueInput.value?.focus() })\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 /** Whether an optional parameter is disabled because it has no explicit x-disabled value */\n isDisabledByDefault?: boolean\n /** OpenAPI schema object with type, validation rules, examples, etc. */\n schema?: SchemaObject\n /** Preserve array values even while their JSON text is temporarily invalid. */\n isArray?: boolean\n /** Text representation used by array enum controls. */\n arrayEncoding?: 'json' | 'comma-separated'\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\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) => {\n // Do not overwrite a valid local name with an empty incoming prop — this\n // can happen when the placeholder row (appended by displayData) is briefly\n // mapped onto this component instance before Vue re-keys the list.\n if (!newName && name.value && !deferKeyUpdates) {\n return\n }\n name.value = newName ?? ''\n },\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<unknown[]>(() => {\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 data.arrayEncoding === 'json'\n ? resolved.enum\n : 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; commitKey?: 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 // Optional parameters start unchecked, but entering a value expresses intent to send it.\n // Explicit x-disabled values stay unchanged so a deliberate opt-out is preserved.\n if (data.isDisabledByDefault) {\n isDisabled.value = false\n }\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 (deferKeyUpdates || data.sourceParameterValuePath) &&\n !options.shouldRenameExpandedRow &&\n !options.commitKey\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. Body and 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 // Do not emit an update that would blank the parameter name — this can fire\n // when CodeInputLite blurs before it has rendered its initial value.\n if (!newName && data.name && (!deferKeyUpdates || name.value !== '')) {\n return\n }\n\n handleUpdateRow(\n { name: newName, isDisabled: isDisabled.value },\n {\n shouldRenameExpandedRow: Boolean(data.sourceParameterValuePath),\n commitKey: true,\n },\n )\n}\n\n/** Save a pending body key before the send shortcut reaches the request handler. */\nconst handleKeydown = (event: KeyboardEvent): void => {\n if (\n deferKeyUpdates &&\n event.key === 'Enter' &&\n (event.metaKey || event.ctrlKey)\n ) {\n handleKeyBlur(name.value)\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=\"\n translate('apiClient.requestTableRow.include', {\n name: data.name || translate('apiClient.requestTableRow.row'),\n })\n \"\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=\"\n translate('apiClient.requestTableRow.keyLabel', { name: label ?? '' })\n \"\n :disabled=\"data.isReadonly\"\n :environment=\"environment\"\n :modelValue=\"name\"\n :placeholder=\"translate('apiClient.requestTableRow.key')\"\n :required=\"Boolean(data.isRequired)\"\n @blur=\"(v) => handleKeyBlur(v)\"\n @keydown.capture=\"handleKeydown\"\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 ref=\"valueInput\"\n :aria-label=\"\n translate('apiClient.requestTableRow.valueLabel', {\n name: label ?? '',\n })\n \"\n :arrayEncoding=\"data.arrayEncoding\"\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=\"translate('apiClient.requestTableRow.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=\"\n translate('apiClient.requestTableRow.deleteRow', {\n name: data.name || translate('apiClient.requestTableRow.row'),\n })\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=\"translate('apiClient.requestTableRow.globalCookieHint')\"\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=\"translate('apiClient.requestTableRow.readOnlyHint')\"\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 {{ translate('apiClient.requestTableRow.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>{{ translate('apiClient.requestTableRow.selectFile') }}</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":["_sfc_main"],"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.2/strict/openapi-document'\nimport { computed, ref, useTemplateRef, 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'\nimport { useLocalization } from '@/v2/features/localization'\n\nimport RequestTableTooltip from './RequestTableTooltip.vue'\n\nconst {\n data,\n environment,\n hasCheckboxDisabled,\n deferKeyUpdates,\n invalidParams,\n showUploadButton,\n} = defineProps<{\n data: TableRow\n /** Keep key edits local until blur when the row identity depends on its name. */\n deferKeyUpdates?: boolean\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\nconst { translate } = useLocalization()\n\nconst valueInput = useTemplateRef('valueInput')\ndefineExpose({ focusValue: (): void => valueInput.value?.focus() })\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 /** Whether an optional parameter is disabled because it has no explicit x-disabled value */\n isDisabledByDefault?: boolean\n /** OpenAPI schema object with type, validation rules, examples, etc. */\n schema?: SchemaObject\n /** Preserve array values even while their JSON text is temporarily invalid. */\n isArray?: boolean\n /** Text representation used by array enum controls. */\n arrayEncoding?: 'json' | 'comma-separated'\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\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) => {\n // Do not overwrite a valid local name with an empty incoming prop — this\n // can happen when the placeholder row (appended by displayData) is briefly\n // mapped onto this component instance before Vue re-keys the list.\n if (!newName && name.value && !deferKeyUpdates) {\n return\n }\n name.value = newName ?? ''\n },\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<unknown[]>(() => {\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 data.arrayEncoding === 'json'\n ? resolved.enum\n : 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; commitKey?: 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 // Optional parameters start unchecked, but entering a value expresses intent to send it.\n // Explicit x-disabled values stay unchanged so a deliberate opt-out is preserved.\n if (data.isDisabledByDefault) {\n isDisabled.value = false\n }\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 (deferKeyUpdates || data.sourceParameterValuePath) &&\n !options.shouldRenameExpandedRow &&\n !options.commitKey\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. Body and 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 // Do not emit an update that would blank the parameter name — this can fire\n // when CodeInputLite blurs before it has rendered its initial value.\n if (!newName && data.name && (!deferKeyUpdates || name.value !== '')) {\n return\n }\n\n handleUpdateRow(\n { name: newName, isDisabled: isDisabled.value },\n {\n shouldRenameExpandedRow: Boolean(data.sourceParameterValuePath),\n commitKey: true,\n },\n )\n}\n\n/** Save a pending body key before the send shortcut reaches the request handler. */\nconst handleKeydown = (event: KeyboardEvent): void => {\n if (\n deferKeyUpdates &&\n event.key === 'Enter' &&\n (event.metaKey || event.ctrlKey)\n ) {\n handleKeyBlur(name.value)\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=\"\n translate('apiClient.requestTableRow.include', {\n name: data.name || translate('apiClient.requestTableRow.row'),\n })\n \"\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=\"\n translate('apiClient.requestTableRow.keyLabel', { name: label ?? '' })\n \"\n :disabled=\"data.isReadonly\"\n :environment=\"environment\"\n :modelValue=\"name\"\n :placeholder=\"translate('apiClient.requestTableRow.key')\"\n :required=\"Boolean(data.isRequired)\"\n @blur=\"(v) => handleKeyBlur(v)\"\n @keydown.capture=\"handleKeydown\"\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 ref=\"valueInput\"\n :aria-label=\"\n translate('apiClient.requestTableRow.valueLabel', {\n name: label ?? '',\n })\n \"\n :arrayEncoding=\"data.arrayEncoding\"\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=\"translate('apiClient.requestTableRow.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=\"\n translate('apiClient.requestTableRow.deleteRow', {\n name: data.name || translate('apiClient.requestTableRow.row'),\n })\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=\"translate('apiClient.requestTableRow.globalCookieHint')\"\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=\"translate('apiClient.requestTableRow.readOnlyHint')\"\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 {{ translate('apiClient.requestTableRow.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>{{ translate('apiClient.requestTableRow.selectFile') }}</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":""}
@@ -274,4 +274,4 @@ var RequestTableRow_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
274
274
  //#endregion
275
275
  export { RequestTableRow_vue_vue_type_script_setup_true_lang_default as default };
276
276
 
277
- //# sourceMappingURL=RequestTableRow.vue.script.js.map
277
+ //# sourceMappingURL=RequestTableRow.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestTableRow.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_unref","DataTableRow","_normalizeClass","_withCtx","_createVNode","DataTableCheckbox","DataTableCell","CodeInputLite","DataTableInputSelect","_createCommentVNode","RequestTableTooltip","_createElementBlock","_Fragment","_createElementVNode","_toDisplayString"],"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.2/strict/openapi-document'\nimport { computed, ref, useTemplateRef, 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'\nimport { useLocalization } from '@/v2/features/localization'\n\nimport RequestTableTooltip from './RequestTableTooltip.vue'\n\nconst {\n data,\n environment,\n hasCheckboxDisabled,\n deferKeyUpdates,\n invalidParams,\n showUploadButton,\n} = defineProps<{\n data: TableRow\n /** Keep key edits local until blur when the row identity depends on its name. */\n deferKeyUpdates?: boolean\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\nconst { translate } = useLocalization()\n\nconst valueInput = useTemplateRef('valueInput')\ndefineExpose({ focusValue: (): void => valueInput.value?.focus() })\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 /** Whether an optional parameter is disabled because it has no explicit x-disabled value */\n isDisabledByDefault?: boolean\n /** OpenAPI schema object with type, validation rules, examples, etc. */\n schema?: SchemaObject\n /** Preserve array values even while their JSON text is temporarily invalid. */\n isArray?: boolean\n /** Text representation used by array enum controls. */\n arrayEncoding?: 'json' | 'comma-separated'\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\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) => {\n // Do not overwrite a valid local name with an empty incoming prop — this\n // can happen when the placeholder row (appended by displayData) is briefly\n // mapped onto this component instance before Vue re-keys the list.\n if (!newName && name.value && !deferKeyUpdates) {\n return\n }\n name.value = newName ?? ''\n },\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<unknown[]>(() => {\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 data.arrayEncoding === 'json'\n ? resolved.enum\n : 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; commitKey?: 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 // Optional parameters start unchecked, but entering a value expresses intent to send it.\n // Explicit x-disabled values stay unchanged so a deliberate opt-out is preserved.\n if (data.isDisabledByDefault) {\n isDisabled.value = false\n }\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 (deferKeyUpdates || data.sourceParameterValuePath) &&\n !options.shouldRenameExpandedRow &&\n !options.commitKey\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. Body and 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 // Do not emit an update that would blank the parameter name — this can fire\n // when CodeInputLite blurs before it has rendered its initial value.\n if (!newName && data.name && (!deferKeyUpdates || name.value !== '')) {\n return\n }\n\n handleUpdateRow(\n { name: newName, isDisabled: isDisabled.value },\n {\n shouldRenameExpandedRow: Boolean(data.sourceParameterValuePath),\n commitKey: true,\n },\n )\n}\n\n/** Save a pending body key before the send shortcut reaches the request handler. */\nconst handleKeydown = (event: KeyboardEvent): void => {\n if (\n deferKeyUpdates &&\n event.key === 'Enter' &&\n (event.metaKey || event.ctrlKey)\n ) {\n handleKeyBlur(name.value)\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=\"\n translate('apiClient.requestTableRow.include', {\n name: data.name || translate('apiClient.requestTableRow.row'),\n })\n \"\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=\"\n translate('apiClient.requestTableRow.keyLabel', { name: label ?? '' })\n \"\n :disabled=\"data.isReadonly\"\n :environment=\"environment\"\n :modelValue=\"name\"\n :placeholder=\"translate('apiClient.requestTableRow.key')\"\n :required=\"Boolean(data.isRequired)\"\n @blur=\"(v) => handleKeyBlur(v)\"\n @keydown.capture=\"handleKeydown\"\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 ref=\"valueInput\"\n :aria-label=\"\n translate('apiClient.requestTableRow.valueLabel', {\n name: label ?? '',\n })\n \"\n :arrayEncoding=\"data.arrayEncoding\"\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=\"translate('apiClient.requestTableRow.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=\"\n translate('apiClient.requestTableRow.deleteRow', {\n name: data.name || translate('apiClient.requestTableRow.row'),\n })\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=\"translate('apiClient.requestTableRow.globalCookieHint')\"\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=\"translate('apiClient.requestTableRow.readOnlyHint')\"\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 {{ translate('apiClient.requestTableRow.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>{{ translate('apiClient.requestTableRow.selectFile') }}</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":"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"}
@@ -1,4 +1,4 @@
1
- import RequestTableTooltip_vue_vue_type_script_setup_true_lang_default from "./RequestTableTooltip.vue.script.js";
1
+ import RequestTableTooltip_vue_vue_type_script_setup_true_lang_default from "./RequestTableTooltip.vue_vue_type_script_setup_true_lang.js";
2
2
  //#region src/v2/blocks/request-block/components/RequestTableTooltip.vue
3
3
  var RequestTableTooltip_default = RequestTableTooltip_vue_vue_type_script_setup_true_lang_default;
4
4
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"RequestTableTooltip.vue.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/components/RequestTableTooltip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components/markdown'\nimport { ScalarPopover } from '@scalar/components/popover'\nimport { ScalarIconInfo, ScalarIconWarning } from '@scalar/icons'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport { validateParameter } from '@/v2/blocks/request-block/helpers/validate-parameter'\nimport { useLocalization } from '@/v2/features/localization'\n\nconst { schema, value, description } = defineProps<{\n schema?: SchemaObject\n value: string | File | null\n description?: string\n}>()\n\nconst { translate } = useLocalization()\n\nconst invalidParameterMessage = computed(() => validateParameter(schema, value))\nconst isInvalid = computed(() => invalidParameterMessage.value.ok === false)\n</script>\n<template>\n <ScalarPopover\n :offset=\"4\"\n placement=\"left\"\n teleport>\n <button\n :aria-label=\"\n isInvalid\n ? translate('apiClient.requestTableTooltip.invalid')\n : translate('apiClient.requestTableTooltip.moreInformation')\n \"\n class=\"text-c-2 hover:text-c-1 hover:bg-b-2 rounded p-1\"\n :role=\"isInvalid ? 'alert' : 'none'\"\n type=\"button\">\n <ScalarIconWarning\n v-if=\"isInvalid\"\n class=\"text-orange size-3.5 brightness-90 hover:brightness-75\" />\n <ScalarIconInfo\n v-else\n class=\"text-c-2 hover:text-c-1 size-3.5\" />\n </button>\n <template #popover>\n <div\n class=\"text-xxs text-c-1 grid w-fit max-w-xs min-w-0 gap-1.5 rounded px-1.5 pt-2 pb-1.5 leading-none break-words\"\n data-testid=\"request-table-tooltip-content\">\n <div\n v-if=\"invalidParameterMessage.ok === false\"\n class=\"text-error-1\">\n {{ invalidParameterMessage.message }}\n </div>\n <div\n v-else-if=\"\n schema &&\n ('type' in schema ||\n 'format' in schema ||\n 'minimum' in schema ||\n 'maximum' in schema ||\n 'default' in schema)\n \"\n class=\"schema text-c-2 truncate *:not-first:before:content-['_·_']\">\n <span v-if=\"'type' in schema\">{{ schema.type }}</span>\n <span v-if=\"'format' in schema\">{{ schema.format }}</span>\n <span v-if=\"'minimum' in schema\"\n >{{ translate('apiClient.requestTableTooltip.min') }}\n {{ schema.minimum }}</span\n >\n <span v-if=\"'maximum' in schema\"\n >{{ translate('apiClient.requestTableTooltip.max') }}\n {{ schema.maximum }}</span\n >\n <span v-if=\"'default' in schema\"\n >{{ translate('apiClient.requestTableTooltip.default') }}\n {{ schema.default }}</span\n >\n </div>\n <ScalarMarkdown\n v-if=\"description && !isInvalid\"\n :value=\"description\" />\n </div>\n </template>\n </ScalarPopover>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RequestTableTooltip.vue.js","names":["_sfc_main"],"sources":["../../../../../src/v2/blocks/request-block/components/RequestTableTooltip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components/markdown'\nimport { ScalarPopover } from '@scalar/components/popover'\nimport { ScalarIconInfo, ScalarIconWarning } from '@scalar/icons'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport { validateParameter } from '@/v2/blocks/request-block/helpers/validate-parameter'\nimport { useLocalization } from '@/v2/features/localization'\n\nconst { schema, value, description } = defineProps<{\n schema?: SchemaObject\n value: string | File | null\n description?: string\n}>()\n\nconst { translate } = useLocalization()\n\nconst invalidParameterMessage = computed(() => validateParameter(schema, value))\nconst isInvalid = computed(() => invalidParameterMessage.value.ok === false)\n</script>\n<template>\n <ScalarPopover\n :offset=\"4\"\n placement=\"left\"\n teleport>\n <button\n :aria-label=\"\n isInvalid\n ? translate('apiClient.requestTableTooltip.invalid')\n : translate('apiClient.requestTableTooltip.moreInformation')\n \"\n class=\"text-c-2 hover:text-c-1 hover:bg-b-2 rounded p-1\"\n :role=\"isInvalid ? 'alert' : 'none'\"\n type=\"button\">\n <ScalarIconWarning\n v-if=\"isInvalid\"\n class=\"text-orange size-3.5 brightness-90 hover:brightness-75\" />\n <ScalarIconInfo\n v-else\n class=\"text-c-2 hover:text-c-1 size-3.5\" />\n </button>\n <template #popover>\n <div\n class=\"text-xxs text-c-1 grid w-fit max-w-xs min-w-0 gap-1.5 rounded px-1.5 pt-2 pb-1.5 leading-none break-words\"\n data-testid=\"request-table-tooltip-content\">\n <div\n v-if=\"invalidParameterMessage.ok === false\"\n class=\"text-error-1\">\n {{ invalidParameterMessage.message }}\n </div>\n <div\n v-else-if=\"\n schema &&\n ('type' in schema ||\n 'format' in schema ||\n 'minimum' in schema ||\n 'maximum' in schema ||\n 'default' in schema)\n \"\n class=\"schema text-c-2 truncate *:not-first:before:content-['_·_']\">\n <span v-if=\"'type' in schema\">{{ schema.type }}</span>\n <span v-if=\"'format' in schema\">{{ schema.format }}</span>\n <span v-if=\"'minimum' in schema\"\n >{{ translate('apiClient.requestTableTooltip.min') }}\n {{ schema.minimum }}</span\n >\n <span v-if=\"'maximum' in schema\"\n >{{ translate('apiClient.requestTableTooltip.max') }}\n {{ schema.maximum }}</span\n >\n <span v-if=\"'default' in schema\"\n >{{ translate('apiClient.requestTableTooltip.default') }}\n {{ schema.default }}</span\n >\n </div>\n <ScalarMarkdown\n v-if=\"description && !isInvalid\"\n :value=\"description\" />\n </div>\n </template>\n </ScalarPopover>\n</template>\n"],"mappings":""}
@@ -70,4 +70,4 @@ var RequestTableTooltip_vue_vue_type_script_setup_true_lang_default = /*@__PURE_
70
70
  //#endregion
71
71
  export { RequestTableTooltip_vue_vue_type_script_setup_true_lang_default as default };
72
72
 
73
- //# sourceMappingURL=RequestTableTooltip.vue.script.js.map
73
+ //# sourceMappingURL=RequestTableTooltip.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestTableTooltip.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_unref","_withCtx","_createElementVNode","_createElementBlock","_toDisplayString","_createCommentVNode"],"sources":["../../../../../src/v2/blocks/request-block/components/RequestTableTooltip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components/markdown'\nimport { ScalarPopover } from '@scalar/components/popover'\nimport { ScalarIconInfo, ScalarIconWarning } from '@scalar/icons'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport { validateParameter } from '@/v2/blocks/request-block/helpers/validate-parameter'\nimport { useLocalization } from '@/v2/features/localization'\n\nconst { schema, value, description } = defineProps<{\n schema?: SchemaObject\n value: string | File | null\n description?: string\n}>()\n\nconst { translate } = useLocalization()\n\nconst invalidParameterMessage = computed(() => validateParameter(schema, value))\nconst isInvalid = computed(() => invalidParameterMessage.value.ok === false)\n</script>\n<template>\n <ScalarPopover\n :offset=\"4\"\n placement=\"left\"\n teleport>\n <button\n :aria-label=\"\n isInvalid\n ? translate('apiClient.requestTableTooltip.invalid')\n : translate('apiClient.requestTableTooltip.moreInformation')\n \"\n class=\"text-c-2 hover:text-c-1 hover:bg-b-2 rounded p-1\"\n :role=\"isInvalid ? 'alert' : 'none'\"\n type=\"button\">\n <ScalarIconWarning\n v-if=\"isInvalid\"\n class=\"text-orange size-3.5 brightness-90 hover:brightness-75\" />\n <ScalarIconInfo\n v-else\n class=\"text-c-2 hover:text-c-1 size-3.5\" />\n </button>\n <template #popover>\n <div\n class=\"text-xxs text-c-1 grid w-fit max-w-xs min-w-0 gap-1.5 rounded px-1.5 pt-2 pb-1.5 leading-none break-words\"\n data-testid=\"request-table-tooltip-content\">\n <div\n v-if=\"invalidParameterMessage.ok === false\"\n class=\"text-error-1\">\n {{ invalidParameterMessage.message }}\n </div>\n <div\n v-else-if=\"\n schema &&\n ('type' in schema ||\n 'format' in schema ||\n 'minimum' in schema ||\n 'maximum' in schema ||\n 'default' in schema)\n \"\n class=\"schema text-c-2 truncate *:not-first:before:content-['_·_']\">\n <span v-if=\"'type' in schema\">{{ schema.type }}</span>\n <span v-if=\"'format' in schema\">{{ schema.format }}</span>\n <span v-if=\"'minimum' in schema\"\n >{{ translate('apiClient.requestTableTooltip.min') }}\n {{ schema.minimum }}</span\n >\n <span v-if=\"'maximum' in schema\"\n >{{ translate('apiClient.requestTableTooltip.max') }}\n {{ schema.maximum }}</span\n >\n <span v-if=\"'default' in schema\"\n >{{ translate('apiClient.requestTableTooltip.default') }}\n {{ schema.default }}</span\n >\n </div>\n <ScalarMarkdown\n v-if=\"description && !isInvalid\"\n :value=\"description\" />\n </div>\n </template>\n </ScalarPopover>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,EAAE,cAAc,gBAAgB;EAEtC,MAAM,0BAA0B,eAAe,kBAAkB,QAAA,QAAQ,QAAA,KAAK,CAAC;EAC/E,MAAM,YAAY,eAAe,wBAAwB,MAAM,OAAO,KAAK;;GAGzE,OAAAA,UAAA,GAAAC,YA2DgBC,MAAA,aAAA,GAAA;IA1Db,QAAQ;IACT,WAAU;IACV,UAAA;;IAiBW,SAAOC,cAqCV,CApCNC,mBAoCM,OApCN,YAoCM,CAhCI,wBAAA,MAAwB,OAAE,SADlCJ,UAAA,GAAAK,mBAIM,OAJN,YAIMC,gBADD,wBAAA,MAAwB,OAAO,GAAA,CAAA,KAGV,QAAA,WAAiC,UAAA,QAAA,UAAoC,YAAA,QAAA,UAAqC,aAAA,QAAA,UAAqC,aAAA,QAAA,UAAqC,aAAA,QAAA,WAD9MN,UAAA,GAAAK,mBAwBM,OAxBN,YAwBM;KAdkB,UAAA,QAAA,UAAtBL,UAAA,GAAAK,mBAAsD,QAAA,YAAAC,gBAArB,QAAA,OAAO,IAAI,GAAA,CAAA,K;KACpB,YAAA,QAAA,UAAxBN,UAAA,GAAAK,mBAA0D,QAAA,YAAAC,gBAAvB,QAAA,OAAO,MAAM,GAAA,CAAA,K;KACvB,aAAA,QAAA,UAAzBN,UAAA,GAAAK,mBAGC,QAAA,YAAAC,gBAFKJ,MAAA,SAAA,CAAS,CAAA,mCAAA,CAAA,IAAwC,MACrDI,gBAAG,QAAA,OAAO,OAAO,GAAA,CAAA,K;KAEM,aAAA,QAAA,UAAzBN,UAAA,GAAAK,mBAGC,QAAA,YAAAC,gBAFKJ,MAAA,SAAA,CAAS,CAAA,mCAAA,CAAA,IAAwC,MACrDI,gBAAG,QAAA,OAAO,OAAO,GAAA,CAAA,K;KAEM,aAAA,QAAA,UAAzBN,UAAA,GAAAK,mBAGC,QAAA,YAAAC,gBAFKJ,MAAA,SAAA,CAAS,CAAA,uCAAA,CAAA,IAA4C,MACzDI,gBAAG,QAAA,OAAO,OAAO,GAAA,CAAA,K;I,oCAIb,QAAA,eAAW,CAAK,UAAA,SADxBN,UAAA,GAAAC,YAEyBC,MAAA,cAAA,GAAA;;KAAtB,OAAO,QAAA;;IApDd,SAAAC,cAeS,CAfTC,mBAeS,UAAA;KAdN,cAAqB,UAAA,QAAsBF,MAAA,SAAA,CAAS,CAAA,uCAAA,IAAsDA,MAAA,SAAA,CAAS,CAAA,+CAAA;KAKpH,OAAM;KACL,MAAM,UAAA,QAAS,UAAA;KAChB,MAAK;I,IAEG,UAAA,SADRF,UAAA,GAAAC,YAEmEC,MAAA,iBAAA,GAAA;;KAAjE,OAAM;I,OACRF,UAAA,GAAAC,YAE6CC,MAAA,cAAA,GAAA;;KAA3C,OAAM"}
@@ -1,5 +1,5 @@
1
1
  import type { OperationExampleMeta, WorkspaceEventBus } from '@scalar/workspace-store/events';
2
- import type { TableRow } from '../../../../v2/blocks/request-block/components/RequestTableRow.vue.js';
2
+ import type { TableRow } from '../components/RequestTableRow.vue.js';
3
3
  type ParameterType = 'path' | 'cookie' | 'header' | 'query';
4
4
  type ParameterUpsertPayload = {
5
5
  name: string;
@@ -45,7 +45,8 @@ var getExpandedObjectPayload = (row, context, payload) => {
45
45
  const hasArrayLeafMarker = hasArrayMarker(isCommittedRename ? payload.name : contextRow.name);
46
46
  const existingLeafSchema = isCommittedRename ? void 0 : contextRow.schema;
47
47
  const leafSchema = hasArrayLeafMarker ? { type: "array" } : existingLeafSchema;
48
- setValueAtPath(value, path, isDeepObjectParameter && leafSchema ? deSerializeSchemaValue(nextValue, leafSchema) : nextValue);
48
+ const leafValue = isDeepObjectParameter && leafSchema ? deSerializeSchemaValue(nextValue, leafSchema) : nextValue;
49
+ setValueAtPath(value, path, leafValue);
49
50
  }
50
51
  return {
51
52
  name: row.originalParameter?.name ?? payload?.name ?? row.name,
@@ -1 +1 @@
1
- {"version":3,"file":"create-parameter-handlers.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/helpers/create-parameter-handlers.ts"],"sourcesContent":["import { setValueAtPath } from '@scalar/helpers/object/set-value-at-path'\nimport type { ApiReferenceEvents, OperationExampleMeta, WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { deSerializeSchemaValue } from '@scalar/workspace-store/request-example'\n\nimport type { TableRow } from '@/v2/blocks/request-block/components/RequestTableRow.vue'\n\ntype ParameterType = 'path' | 'cookie' | 'header' | 'query'\n\ntype ParameterUpsertPayload = {\n name: string\n value: string\n isDisabled: boolean\n shouldRenameExpandedRow?: boolean\n}\n\nconst isEmptyValue = (value: unknown): boolean => value === undefined || value === null || value === ''\n\n/**\n * Whether a row name carries the display-only deepObject array marker (`filters[id][in][]`). The\n * marker is only ever appended after a real path bracket, so it always shows up as `][]`. That lets\n * us tell it apart from a genuinely empty key: an interior empty (`filters[][in]`) or a lone empty\n * group (`filters[]`, value path `['']`) is not a marker and keeps its segment.\n */\nconst hasArrayMarker = (name: string): boolean => name.endsWith('][]')\n\n/** Parse a parameter key like `filter[a][b]` into its path segments `['filter', 'a', 'b']`. */\nconst parseBracketKey = (name: string): string[] => {\n // Strip the trailing array marker first. The trailing brackets on a deepObject array leaf are\n // display-only, not part of the value path — keeping them would add a bogus empty key that drops\n // the value on write-back and corrupts rename tracking.\n const withoutArrayMarker = hasArrayMarker(name) ? name.slice(0, -2) : name\n\n const segments: string[] = []\n const head = withoutArrayMarker.match(/^[^[\\]]*/)?.[0] ?? ''\n if (head) {\n segments.push(head)\n }\n for (const match of withoutArrayMarker.matchAll(/\\[([^\\]]*)\\]/g)) {\n segments.push(match[1] ?? '')\n }\n return segments\n}\n\n/**\n * Derives the value path for an edited expanded row from the key the user typed, so renaming a\n * property actually moves the value to the new key instead of being dropped. deepObject rows are\n * prefixed with the parent parameter name (`filter[a]`), which we strip to get the path inside the\n * value. Falls back to the row's original path when the typed name cannot be parsed.\n */\nconst getEditedValuePath = (typedName: string, parameterName: string | undefined, fallback: string[]): string[] => {\n const segments = parseBracketKey(typedName)\n if (segments.length === 0) {\n return fallback\n }\n if (parameterName && segments[0] === parameterName && segments.length > 1) {\n return segments.slice(1)\n }\n return segments\n}\n\nconst getExpandedObjectPayload = (\n row: TableRow,\n context: TableRow[],\n payload?: ParameterUpsertPayload,\n): ApiReferenceEvents['operation:upsert:parameter']['payload'] => {\n const value: Record<string, unknown> = {}\n\n // Only deepObject leaves use the comma-to-array coercion below. The trailing-bracket array\n // convention (`key[]=1&key[]=2`) is deepObject-specific, and deepObject leaves never carry a\n // meaningful comma. Form-style object parameters can (e.g. Spring `sort=username,asc`), so they\n // keep their leaves verbatim.\n const parameter = row.originalParameter\n const isDeepObjectParameter = Boolean(parameter && 'style' in parameter && parameter.style === 'deepObject')\n\n for (const contextRow of context) {\n if (contextRow.originalParameter !== row.originalParameter || !contextRow.sourceParameterValuePath) {\n continue\n }\n\n if (contextRow === row && !payload) {\n continue\n }\n\n const isEditedRow = contextRow === row && payload !== undefined\n const nextValue = isEditedRow ? payload.value : contextRow.value\n if (isEmptyValue(nextValue)) {\n continue\n }\n\n // Key edits are debounced while the user is still typing. Only committed key edits can move\n // the value to a new object path; regular value updates keep the stable source path.\n const path =\n isEditedRow && payload.shouldRenameExpandedRow\n ? getEditedValuePath(payload.name, row.originalParameter?.name, contextRow.sourceParameterValuePath)\n : contextRow.sourceParameterValuePath\n\n // Rows always hold the string the user sees, so a deepObject array leaf arrives comma-joined\n // (\"1,2\"). Coerce it back to an array before storing — otherwise deepObject serialization\n // re-collapses it into a single `key[in]=1,2` entry instead of repeating `key[in][]=1&key[in][]=2`.\n //\n // The display-only `][]` marker is the authoritative array signal: a leaf gets it whenever its\n // schema OR its stored value is an array, so it must win over a non-array property schema, which\n // would otherwise skip the coercion and serialize the array comma-joined. A committed rename\n // re-derives the marker from the freshly typed name, since the row's `schema` and `name` still\n // describe the old key — renaming an array leaf to a scalar key must not store a one-element array.\n // Non-array leaves fall back to the property schema so object leaves still coerce; renamed rows\n // have no reliable schema, so they rely on the marker alone.\n const isCommittedRename = isEditedRow && Boolean(payload.shouldRenameExpandedRow)\n const hasArrayLeafMarker = hasArrayMarker(isCommittedRename ? payload.name : contextRow.name)\n const existingLeafSchema = isCommittedRename ? undefined : contextRow.schema\n const leafSchema = hasArrayLeafMarker ? ({ type: 'array' } as const) : existingLeafSchema\n const leafValue = isDeepObjectParameter && leafSchema ? deSerializeSchemaValue(nextValue, leafSchema) : nextValue\n\n setValueAtPath(value, path, leafValue)\n }\n\n return {\n name: row.originalParameter?.name ?? payload?.name ?? row.name,\n value,\n isDisabled: payload?.isDisabled ?? row.isDisabled ?? false,\n propertyState: {\n path: payload?.shouldRenameExpandedRow\n ? getEditedValuePath(payload.name, row.originalParameter?.name, row.sourceParameterValuePath ?? [])\n : (row.sourceParameterValuePath ?? []),\n ...(payload ? { isDisabled: payload.isDisabled } : {}),\n ...(payload?.shouldRenameExpandedRow ? { previousPath: row.sourceParameterValuePath } : {}),\n },\n }\n}\n\n/** Create parameter event handlers for a given type */\nexport const createParameterHandlers = (\n type: ParameterType,\n eventBus: WorkspaceEventBus,\n meta: OperationExampleMeta,\n {\n context,\n defaultParameters = 0,\n globalParameters = 0,\n onDeleteExpandedRow,\n onRenameExpandedRow,\n }: {\n context: TableRow[]\n defaultParameters?: number\n globalParameters?: number\n onDeleteExpandedRow?: (row: TableRow) => void\n onRenameExpandedRow?: (row: TableRow, newValuePath: string[]) => void\n },\n) => {\n const offset = defaultParameters + globalParameters\n\n return {\n delete: (payload: { index: number }) => {\n const row = context[payload.index]\n if (!row?.originalParameter) {\n return\n }\n\n if (row.sourceParameterValuePath) {\n onDeleteExpandedRow?.(row)\n\n return eventBus.emit(\n 'operation:upsert:parameter',\n {\n type,\n payload: getExpandedObjectPayload(row, context),\n originalParameter: row.originalParameter,\n meta,\n },\n {\n skipUnpackProxy: true,\n },\n )\n }\n\n eventBus.emit(\n 'operation:delete:parameter',\n {\n originalParameter: row.originalParameter,\n meta,\n },\n {\n skipUnpackProxy: true,\n },\n )\n },\n deleteAll: () =>\n eventBus.emit('operation:delete-all:parameters', {\n type,\n meta,\n }),\n upsert: (index: number, payload: ParameterUpsertPayload) => {\n const row = context[index]\n const { shouldRenameExpandedRow, ...parameterPayload } = payload\n\n if (index < defaultParameters + globalParameters) {\n const extraParameterType = index < defaultParameters ? 'default' : 'global'\n\n return eventBus.emit('operation:update:extra-parameters', {\n type: extraParameterType,\n in: type,\n meta: { ...meta, name: row?.name?.toLowerCase?.() ?? 'NON_VALID' },\n payload: { isDisabled: payload.isDisabled ?? false },\n })\n }\n\n if (index >= offset) {\n const isExpandedRow = Boolean(row?.sourceParameterValuePath && row.originalParameter)\n\n // When the key of an expanded row changes, report the new value path so the row keeps its\n // original slot (rendered in place of the old schema property) instead of jumping to the end.\n if (isExpandedRow && row && shouldRenameExpandedRow && payload.name !== row.name) {\n const newValuePath = getEditedValuePath(\n payload.name,\n row.originalParameter?.name,\n row.sourceParameterValuePath ?? [],\n )\n onRenameExpandedRow?.(row, newValuePath)\n }\n\n const nextPayload = isExpandedRow && row ? getExpandedObjectPayload(row, context, payload) : parameterPayload\n\n return eventBus.emit(\n 'operation:upsert:parameter',\n {\n type,\n payload: nextPayload,\n originalParameter: row?.originalParameter ?? null,\n meta,\n },\n {\n skipUnpackProxy: true,\n debounceKey: `update:parameter-${type}-${index - offset}`,\n },\n )\n }\n },\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"create-parameter-handlers.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/helpers/create-parameter-handlers.ts"],"sourcesContent":["import { setValueAtPath } from '@scalar/helpers/object/set-value-at-path'\nimport type { ApiReferenceEvents, OperationExampleMeta, WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { deSerializeSchemaValue } from '@scalar/workspace-store/request-example'\n\nimport type { TableRow } from '@/v2/blocks/request-block/components/RequestTableRow.vue'\n\ntype ParameterType = 'path' | 'cookie' | 'header' | 'query'\n\ntype ParameterUpsertPayload = {\n name: string\n value: string\n isDisabled: boolean\n shouldRenameExpandedRow?: boolean\n}\n\nconst isEmptyValue = (value: unknown): boolean => value === undefined || value === null || value === ''\n\n/**\n * Whether a row name carries the display-only deepObject array marker (`filters[id][in][]`). The\n * marker is only ever appended after a real path bracket, so it always shows up as `][]`. That lets\n * us tell it apart from a genuinely empty key: an interior empty (`filters[][in]`) or a lone empty\n * group (`filters[]`, value path `['']`) is not a marker and keeps its segment.\n */\nconst hasArrayMarker = (name: string): boolean => name.endsWith('][]')\n\n/** Parse a parameter key like `filter[a][b]` into its path segments `['filter', 'a', 'b']`. */\nconst parseBracketKey = (name: string): string[] => {\n // Strip the trailing array marker first. The trailing brackets on a deepObject array leaf are\n // display-only, not part of the value path — keeping them would add a bogus empty key that drops\n // the value on write-back and corrupts rename tracking.\n const withoutArrayMarker = hasArrayMarker(name) ? name.slice(0, -2) : name\n\n const segments: string[] = []\n const head = withoutArrayMarker.match(/^[^[\\]]*/)?.[0] ?? ''\n if (head) {\n segments.push(head)\n }\n for (const match of withoutArrayMarker.matchAll(/\\[([^\\]]*)\\]/g)) {\n segments.push(match[1] ?? '')\n }\n return segments\n}\n\n/**\n * Derives the value path for an edited expanded row from the key the user typed, so renaming a\n * property actually moves the value to the new key instead of being dropped. deepObject rows are\n * prefixed with the parent parameter name (`filter[a]`), which we strip to get the path inside the\n * value. Falls back to the row's original path when the typed name cannot be parsed.\n */\nconst getEditedValuePath = (typedName: string, parameterName: string | undefined, fallback: string[]): string[] => {\n const segments = parseBracketKey(typedName)\n if (segments.length === 0) {\n return fallback\n }\n if (parameterName && segments[0] === parameterName && segments.length > 1) {\n return segments.slice(1)\n }\n return segments\n}\n\nconst getExpandedObjectPayload = (\n row: TableRow,\n context: TableRow[],\n payload?: ParameterUpsertPayload,\n): ApiReferenceEvents['operation:upsert:parameter']['payload'] => {\n const value: Record<string, unknown> = {}\n\n // Only deepObject leaves use the comma-to-array coercion below. The trailing-bracket array\n // convention (`key[]=1&key[]=2`) is deepObject-specific, and deepObject leaves never carry a\n // meaningful comma. Form-style object parameters can (e.g. Spring `sort=username,asc`), so they\n // keep their leaves verbatim.\n const parameter = row.originalParameter\n const isDeepObjectParameter = Boolean(parameter && 'style' in parameter && parameter.style === 'deepObject')\n\n for (const contextRow of context) {\n if (contextRow.originalParameter !== row.originalParameter || !contextRow.sourceParameterValuePath) {\n continue\n }\n\n if (contextRow === row && !payload) {\n continue\n }\n\n const isEditedRow = contextRow === row && payload !== undefined\n const nextValue = isEditedRow ? payload.value : contextRow.value\n if (isEmptyValue(nextValue)) {\n continue\n }\n\n // Key edits are debounced while the user is still typing. Only committed key edits can move\n // the value to a new object path; regular value updates keep the stable source path.\n const path =\n isEditedRow && payload.shouldRenameExpandedRow\n ? getEditedValuePath(payload.name, row.originalParameter?.name, contextRow.sourceParameterValuePath)\n : contextRow.sourceParameterValuePath\n\n // Rows always hold the string the user sees, so a deepObject array leaf arrives comma-joined\n // (\"1,2\"). Coerce it back to an array before storing — otherwise deepObject serialization\n // re-collapses it into a single `key[in]=1,2` entry instead of repeating `key[in][]=1&key[in][]=2`.\n //\n // The display-only `][]` marker is the authoritative array signal: a leaf gets it whenever its\n // schema OR its stored value is an array, so it must win over a non-array property schema, which\n // would otherwise skip the coercion and serialize the array comma-joined. A committed rename\n // re-derives the marker from the freshly typed name, since the row's `schema` and `name` still\n // describe the old key — renaming an array leaf to a scalar key must not store a one-element array.\n // Non-array leaves fall back to the property schema so object leaves still coerce; renamed rows\n // have no reliable schema, so they rely on the marker alone.\n const isCommittedRename = isEditedRow && Boolean(payload.shouldRenameExpandedRow)\n const hasArrayLeafMarker = hasArrayMarker(isCommittedRename ? payload.name : contextRow.name)\n const existingLeafSchema = isCommittedRename ? undefined : contextRow.schema\n const leafSchema = hasArrayLeafMarker ? ({ type: 'array' } as const) : existingLeafSchema\n const leafValue = isDeepObjectParameter && leafSchema ? deSerializeSchemaValue(nextValue, leafSchema) : nextValue\n\n setValueAtPath(value, path, leafValue)\n }\n\n return {\n name: row.originalParameter?.name ?? payload?.name ?? row.name,\n value,\n isDisabled: payload?.isDisabled ?? row.isDisabled ?? false,\n propertyState: {\n path: payload?.shouldRenameExpandedRow\n ? getEditedValuePath(payload.name, row.originalParameter?.name, row.sourceParameterValuePath ?? [])\n : (row.sourceParameterValuePath ?? []),\n ...(payload ? { isDisabled: payload.isDisabled } : {}),\n ...(payload?.shouldRenameExpandedRow ? { previousPath: row.sourceParameterValuePath } : {}),\n },\n }\n}\n\n/** Create parameter event handlers for a given type */\nexport const createParameterHandlers = (\n type: ParameterType,\n eventBus: WorkspaceEventBus,\n meta: OperationExampleMeta,\n {\n context,\n defaultParameters = 0,\n globalParameters = 0,\n onDeleteExpandedRow,\n onRenameExpandedRow,\n }: {\n context: TableRow[]\n defaultParameters?: number\n globalParameters?: number\n onDeleteExpandedRow?: (row: TableRow) => void\n onRenameExpandedRow?: (row: TableRow, newValuePath: string[]) => void\n },\n) => {\n const offset = defaultParameters + globalParameters\n\n return {\n delete: (payload: { index: number }) => {\n const row = context[payload.index]\n if (!row?.originalParameter) {\n return\n }\n\n if (row.sourceParameterValuePath) {\n onDeleteExpandedRow?.(row)\n\n return eventBus.emit(\n 'operation:upsert:parameter',\n {\n type,\n payload: getExpandedObjectPayload(row, context),\n originalParameter: row.originalParameter,\n meta,\n },\n {\n skipUnpackProxy: true,\n },\n )\n }\n\n eventBus.emit(\n 'operation:delete:parameter',\n {\n originalParameter: row.originalParameter,\n meta,\n },\n {\n skipUnpackProxy: true,\n },\n )\n },\n deleteAll: () =>\n eventBus.emit('operation:delete-all:parameters', {\n type,\n meta,\n }),\n upsert: (index: number, payload: ParameterUpsertPayload) => {\n const row = context[index]\n const { shouldRenameExpandedRow, ...parameterPayload } = payload\n\n if (index < defaultParameters + globalParameters) {\n const extraParameterType = index < defaultParameters ? 'default' : 'global'\n\n return eventBus.emit('operation:update:extra-parameters', {\n type: extraParameterType,\n in: type,\n meta: { ...meta, name: row?.name?.toLowerCase?.() ?? 'NON_VALID' },\n payload: { isDisabled: payload.isDisabled ?? false },\n })\n }\n\n if (index >= offset) {\n const isExpandedRow = Boolean(row?.sourceParameterValuePath && row.originalParameter)\n\n // When the key of an expanded row changes, report the new value path so the row keeps its\n // original slot (rendered in place of the old schema property) instead of jumping to the end.\n if (isExpandedRow && row && shouldRenameExpandedRow && payload.name !== row.name) {\n const newValuePath = getEditedValuePath(\n payload.name,\n row.originalParameter?.name,\n row.sourceParameterValuePath ?? [],\n )\n onRenameExpandedRow?.(row, newValuePath)\n }\n\n const nextPayload = isExpandedRow && row ? getExpandedObjectPayload(row, context, payload) : parameterPayload\n\n return eventBus.emit(\n 'operation:upsert:parameter',\n {\n type,\n payload: nextPayload,\n originalParameter: row?.originalParameter ?? null,\n meta,\n },\n {\n skipUnpackProxy: true,\n debounceKey: `update:parameter-${type}-${index - offset}`,\n },\n )\n }\n },\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { SchemaObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document';
2
- import type { TableRow } from '../../../../v2/blocks/request-block/components/RequestTableRow.vue.js';
2
+ import type { TableRow } from '../components/RequestTableRow.vue.js';
3
3
  /**
4
4
  * Fold form-table rows back into the structured body object.
5
5
  *
@@ -23,7 +23,8 @@ var foldStructuredBodyRows = (rows, schema) => {
23
23
  if (typeof value !== "string" || value === "") continue;
24
24
  const segments = isDottedNestedRow(row.name, value) ? row.name.split(".") : [row.name];
25
25
  const leafSchema = resolveLeafSchema(schema, segments);
26
- setValueAtPath(result, segments, leafSchema && "type" in leafSchema && leafSchema.type != null ? coerceLeafValueToSchemaType(value, leafSchema) : coerceUntypedValue(value));
26
+ const coerced = leafSchema && "type" in leafSchema && leafSchema.type != null ? coerceLeafValueToSchemaType(value, leafSchema) : coerceUntypedValue(value);
27
+ setValueAtPath(result, segments, coerced);
27
28
  }
28
29
  return result;
29
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fold-structured-body-rows.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/helpers/fold-structured-body-rows.ts"],"sourcesContent":["import { setValueAtPath } from '@scalar/helpers/object/set-value-at-path'\nimport {\n buildDottedNestedRowPredicate,\n coerceLeafValueToSchemaType,\n coerceUntypedValue,\n resolveLeafSchema,\n} from '@scalar/workspace-store/request-example'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\n\nimport type { TableRow } from '@/v2/blocks/request-block/components/RequestTableRow.vue'\n\n/**\n * Fold form-table rows back into the structured body object.\n *\n * Inverse of `getStructuredBodyRows`: dotted names fold into nested objects only when\n * the schema declares the top segment as a nested object (same predicate the multipart\n * builder uses), so a user-typed literal key like `user.email` on an undeclared prefix\n * stays flat. Values come back from the table as strings and are restored to their\n * schema-declared type; undeclared leaves get best-effort JSON coercion so untouched\n * numbers/booleans survive a form round-trip.\n *\n * Disabled rows and empty values are omitted — leaving a field empty is how a user\n * drops an optional property from the body.\n */\nexport const foldStructuredBodyRows = (rows: TableRow[], schema?: SchemaObject): Record<string, unknown> => {\n const isDottedNestedRow = buildDottedNestedRowPredicate(schema)\n const result: Record<string, unknown> = {}\n\n for (const row of rows) {\n if (row.isDisabled || !row.name) {\n continue\n }\n const value = row.value\n if (typeof value !== 'string' || value === '') {\n continue\n }\n\n const segments = isDottedNestedRow(row.name, value) ? row.name.split('.') : [row.name]\n const leafSchema = resolveLeafSchema(schema, segments)\n\n // A leaf schema without a declared type gives no signal to keep `\"5\"` a string, so\n // fall back to best-effort coercion — same as fully undeclared keys.\n const hasDeclaredType = leafSchema && 'type' in leafSchema && leafSchema.type != null\n const coerced = hasDeclaredType ? coerceLeafValueToSchemaType(value, leafSchema) : coerceUntypedValue(value)\n\n setValueAtPath(result, segments, coerced)\n }\n\n return result\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAwBA,IAAa,0BAA0B,MAAkB,WAAmD;CAC1G,MAAM,oBAAoB,8BAA8B,MAAM;CAC9D,MAAM,SAAkC,CAAC;CAEzC,KAAK,MAAM,OAAO,MAAM;EACtB,IAAI,IAAI,cAAc,CAAC,IAAI,MACzB;EAEF,MAAM,QAAQ,IAAI;EAClB,IAAI,OAAO,UAAU,YAAY,UAAU,IACzC;EAGF,MAAM,WAAW,kBAAkB,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI;EACrF,MAAM,aAAa,kBAAkB,QAAQ,QAAQ;EAOrD,eAAe,QAAQ,UAHC,cAAc,UAAU,cAAc,WAAW,QAAQ,OAC/C,4BAA4B,OAAO,UAAU,IAAI,mBAAmB,KAAK,CAEnE;CAC1C;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"fold-structured-body-rows.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/helpers/fold-structured-body-rows.ts"],"sourcesContent":["import { setValueAtPath } from '@scalar/helpers/object/set-value-at-path'\nimport {\n buildDottedNestedRowPredicate,\n coerceLeafValueToSchemaType,\n coerceUntypedValue,\n resolveLeafSchema,\n} from '@scalar/workspace-store/request-example'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\n\nimport type { TableRow } from '@/v2/blocks/request-block/components/RequestTableRow.vue'\n\n/**\n * Fold form-table rows back into the structured body object.\n *\n * Inverse of `getStructuredBodyRows`: dotted names fold into nested objects only when\n * the schema declares the top segment as a nested object (same predicate the multipart\n * builder uses), so a user-typed literal key like `user.email` on an undeclared prefix\n * stays flat. Values come back from the table as strings and are restored to their\n * schema-declared type; undeclared leaves get best-effort JSON coercion so untouched\n * numbers/booleans survive a form round-trip.\n *\n * Disabled rows and empty values are omitted — leaving a field empty is how a user\n * drops an optional property from the body.\n */\nexport const foldStructuredBodyRows = (rows: TableRow[], schema?: SchemaObject): Record<string, unknown> => {\n const isDottedNestedRow = buildDottedNestedRowPredicate(schema)\n const result: Record<string, unknown> = {}\n\n for (const row of rows) {\n if (row.isDisabled || !row.name) {\n continue\n }\n const value = row.value\n if (typeof value !== 'string' || value === '') {\n continue\n }\n\n const segments = isDottedNestedRow(row.name, value) ? row.name.split('.') : [row.name]\n const leafSchema = resolveLeafSchema(schema, segments)\n\n // A leaf schema without a declared type gives no signal to keep `\"5\"` a string, so\n // fall back to best-effort coercion — same as fully undeclared keys.\n const hasDeclaredType = leafSchema && 'type' in leafSchema && leafSchema.type != null\n const coerced = hasDeclaredType ? coerceLeafValueToSchemaType(value, leafSchema) : coerceUntypedValue(value)\n\n setValueAtPath(result, segments, coerced)\n }\n\n return result\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAwBA,IAAa,0BAA0B,MAAkB,WAAmD;CAC1G,MAAM,oBAAoB,8BAA8B,MAAM;CAC9D,MAAM,SAAkC,CAAC;CAEzC,KAAK,MAAM,OAAO,MAAM;EACtB,IAAI,IAAI,cAAc,CAAC,IAAI,MACzB;EAEF,MAAM,QAAQ,IAAI;EAClB,IAAI,OAAO,UAAU,YAAY,UAAU,IACzC;EAGF,MAAM,WAAW,kBAAkB,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI;EACrF,MAAM,aAAa,kBAAkB,QAAQ,QAAQ;EAKrD,MAAM,UADkB,cAAc,UAAU,cAAc,WAAW,QAAQ,OAC/C,4BAA4B,OAAO,UAAU,IAAI,mBAAmB,KAAK;EAE3G,eAAe,QAAQ,UAAU,OAAO;CAC1C;CAEA,OAAO;AACT"}
@@ -1,5 +1,5 @@
1
1
  import type { ExampleObject, SchemaObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document';
2
- import type { TableRow } from '../../../../v2/blocks/request-block/components/RequestTableRow.vue.js';
2
+ import type { TableRow } from '../components/RequestTableRow.vue.js';
3
3
  export declare const stringifyValue: (value: unknown) => string;
4
4
  export type LeafRow = {
5
5
  path: string[];
@@ -1,5 +1,5 @@
1
1
  import type { SchemaObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document';
2
- import type { TableRow } from '../../../../v2/blocks/request-block/components/RequestTableRow.vue.js';
2
+ import type { TableRow } from '../components/RequestTableRow.vue.js';
3
3
  /**
4
4
  * Build form-table rows for a structured (JSON/YAML) request body.
5
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"structured-body-codec.js","names":[],"sources":["../../../../../src/v2/blocks/request-block/helpers/structured-body-codec.ts"],"sourcesContent":["import { parseMimeType } from '@scalar/helpers/http/mime-type'\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml'\n\n/** Parse/serialize pair for a structured (form-editable) body content type. */\ntype StructuredBodyCodec = {\n /** Language for the raw code editor, doubles as the codec family id */\n language: 'json' | 'yaml'\n parse: (text: string) => unknown\n stringify: (value: unknown) => string\n}\n\nconst jsonCodec: StructuredBodyCodec = {\n language: 'json',\n parse: (text) => JSON.parse(text),\n stringify: (value) => JSON.stringify(value, null, 2),\n}\n\nconst yamlCodec: StructuredBodyCodec = {\n language: 'yaml',\n parse: (text) => parseYaml(text),\n stringify: (value) => stringifyYaml(value),\n}\n\nconst YAML_ESSENCES = new Set(['application/yaml', 'application/x-yaml', 'text/yaml', 'text/x-yaml'])\n\n/**\n * Return the codec for content types whose body is a structured document we can edit as\n * a form (JSON and YAML families, including `+json` / `+yaml` vendor suffixes), or\n * `undefined` for everything else (multipart and urlencoded keep their own form editor).\n */\nexport const getStructuredBodyCodec = (contentType: string): StructuredBodyCodec | undefined => {\n const essence = parseMimeType(contentType).essence\n\n if (essence === 'application/json' || essence.endsWith('+json')) {\n return jsonCodec\n }\n if (YAML_ESSENCES.has(essence) || essence.endsWith('+yaml')) {\n return yamlCodec\n }\n return undefined\n}\n"],"mappings":";;;AAWA,IAAM,YAAiC;CACrC,UAAU;CACV,QAAQ,SAAS,KAAK,MAAM,IAAI;CAChC,YAAY,UAAU,KAAK,UAAU,OAAO,MAAM,CAAC;AACrD;AAEA,IAAM,YAAiC;CACrC,UAAU;CACV,QAAQ,SAAS,MAAU,IAAI;CAC/B,YAAY,UAAU,UAAc,KAAK;AAC3C;AAEA,IAAM,gCAAgB,IAAI,IAAI;CAAC;CAAoB;CAAsB;CAAa;AAAa,CAAC;;;;;;AAOpG,IAAa,0BAA0B,gBAAyD;CAC9F,MAAM,UAAU,cAAc,WAAW,CAAC,CAAC;CAE3C,IAAI,YAAY,sBAAsB,QAAQ,SAAS,OAAO,GAC5D,OAAO;CAET,IAAI,cAAc,IAAI,OAAO,KAAK,QAAQ,SAAS,OAAO,GACxD,OAAO;AAGX"}
1
+ {"version":3,"file":"structured-body-codec.js","names":["parseYaml","stringifyYaml"],"sources":["../../../../../src/v2/blocks/request-block/helpers/structured-body-codec.ts"],"sourcesContent":["import { parseMimeType } from '@scalar/helpers/http/mime-type'\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml'\n\n/** Parse/serialize pair for a structured (form-editable) body content type. */\ntype StructuredBodyCodec = {\n /** Language for the raw code editor, doubles as the codec family id */\n language: 'json' | 'yaml'\n parse: (text: string) => unknown\n stringify: (value: unknown) => string\n}\n\nconst jsonCodec: StructuredBodyCodec = {\n language: 'json',\n parse: (text) => JSON.parse(text),\n stringify: (value) => JSON.stringify(value, null, 2),\n}\n\nconst yamlCodec: StructuredBodyCodec = {\n language: 'yaml',\n parse: (text) => parseYaml(text),\n stringify: (value) => stringifyYaml(value),\n}\n\nconst YAML_ESSENCES = new Set(['application/yaml', 'application/x-yaml', 'text/yaml', 'text/x-yaml'])\n\n/**\n * Return the codec for content types whose body is a structured document we can edit as\n * a form (JSON and YAML families, including `+json` / `+yaml` vendor suffixes), or\n * `undefined` for everything else (multipart and urlencoded keep their own form editor).\n */\nexport const getStructuredBodyCodec = (contentType: string): StructuredBodyCodec | undefined => {\n const essence = parseMimeType(contentType).essence\n\n if (essence === 'application/json' || essence.endsWith('+json')) {\n return jsonCodec\n }\n if (YAML_ESSENCES.has(essence) || essence.endsWith('+yaml')) {\n return yamlCodec\n }\n return undefined\n}\n"],"mappings":";;;AAWA,IAAM,YAAiC;CACrC,UAAU;CACV,QAAQ,SAAS,KAAK,MAAM,IAAI;CAChC,YAAY,UAAU,KAAK,UAAU,OAAO,MAAM,CAAC;AACrD;AAEA,IAAM,YAAiC;CACrC,UAAU;CACV,QAAQ,SAASA,MAAU,IAAI;CAC/B,YAAY,UAAUC,UAAc,KAAK;AAC3C;AAEA,IAAM,gCAAgB,IAAI,IAAI;CAAC;CAAoB;CAAsB;CAAa;AAAa,CAAC;;;;;;AAOpG,IAAa,0BAA0B,gBAAyD;CAC9F,MAAM,UAAU,cAAc,WAAW,CAAC,CAAC;CAE3C,IAAI,YAAY,sBAAsB,QAAQ,SAAS,OAAO,GAC5D,OAAO;CAET,IAAI,cAAc,IAAI,OAAO,KAAK,QAAQ,SAAS,OAAO,GACxD,OAAO;AAGX"}
@@ -1,2 +1 @@
1
- import RequestBlock_default from "./RequestBlock.vue.js";
2
- export { RequestBlock_default as RequestBlock };
1
+ export { default as RequestBlock } from "./RequestBlock.vue.js";
@@ -1,8 +1,8 @@
1
1
  import type { ClientPlugin } from '@scalar/oas-utils/helpers';
2
2
  import type { WorkspaceEventBus } from '@scalar/workspace-store/events';
3
3
  import type { RequestPayload } from '@scalar/workspace-store/request-example';
4
- import type { ResponseInstance } from '../../../v2/blocks/operation-block/helpers/send-request.js';
5
- import type { ClientLayout } from '../../../v2/types/layout';
4
+ import type { ResponseInstance } from '../operation-block/helpers/send-request.js';
5
+ import type { ClientLayout } from '../../types/layout.js';
6
6
  type __VLS_Props = {
7
7
  /** Wait for the selected external request example before sending. */
8
8
  executionDisabled?: boolean;
@@ -1,6 +1,6 @@
1
1
  import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
2
- import ResponseBlock_vue_vue_type_script_setup_true_lang_default from "./ResponseBlock.vue.script.js";
3
- /* empty css */
2
+ import ResponseBlock_vue_vue_type_script_setup_true_lang_default from "./ResponseBlock.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
4
  //#region src/v2/blocks/response-block/ResponseBlock.vue
5
5
  var ResponseBlock_default = /*#__PURE__*/ _plugin_vue_export_helper_default(ResponseBlock_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-7f122fc4"]]);
6
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBlock.vue.js","names":[],"sources":["../../../../src/v2/blocks/response-block/ResponseBlock.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarErrorBoundary } from '@scalar/components/error-boundary'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport { isElectron } from '@scalar/helpers/general/is-electron'\nimport type { ClientPlugin } from '@scalar/oas-utils/helpers'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { RequestPayload } from '@scalar/workspace-store/request-example'\nimport { computed, ref, useId } from 'vue'\n\nimport SectionFilter from '@/components/SectionFilter.vue'\nimport ViewLayoutSection from '@/components/ViewLayout/ViewLayoutSection.vue'\nimport type { ResponseInstance } from '@/v2/blocks/operation-block/helpers/send-request'\nimport HeadersComponent from '@/v2/blocks/response-block/components/Headers.vue'\nimport ResponseBody from '@/v2/blocks/response-block/components/ResponseBody.vue'\nimport ResponseBodyStreaming from '@/v2/blocks/response-block/components/ResponseBodyStreaming.vue'\nimport ResponseBodyVirtual from '@/v2/blocks/response-block/components/ResponseBodyVirtual.vue'\nimport ResponseCookies from '@/v2/blocks/response-block/components/ResponseCookies.vue'\nimport ResponseEmpty from '@/v2/blocks/response-block/components/ResponseEmpty.vue'\nimport ResponseLoadingOverlay from '@/v2/blocks/response-block/components/ResponseLoadingOverlay.vue'\nimport ResponseMetaInformation from '@/v2/blocks/response-block/components/ResponseMetaInformation.vue'\nimport { textMediaTypes } from '@/v2/blocks/response-block/helpers/media-types'\nimport { parseSetCookie } from '@/v2/blocks/response-block/helpers/parse-set-cookie'\nimport { useLocalization } from '@/v2/features/localization'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nconst {\n layout,\n totalPerformedRequests,\n response,\n requestPayload,\n requestError,\n} = defineProps<{\n /** Wait for the selected external request example before sending. */\n executionDisabled?: boolean\n /** Failure retained until the next request or operation change. */\n requestError?: Error | null\n /** Preprocessed response */\n response: ResponseInstance | null\n /** Original request as a [url, RequestInit] tuple */\n requestPayload: RequestPayload | null\n /** Client layout */\n layout: ClientLayout\n /** Total number of performed requests */\n totalPerformedRequests: number\n /** Application version */\n appVersion: string\n /** Registered app plugins */\n plugins: ClientPlugin[]\n /** Workspace event bus */\n eventBus: WorkspaceEventBus\n}>()\n\nconst { translate } = useLocalization()\n\n/** Browsers hide CORS details, so these messages warrant guidance, not a diagnosis. */\nconst showNetworkErrorHelp = computed<boolean>(\n () =>\n !isElectron() &&\n requestError?.name === 'TypeError' &&\n [\n 'Failed to fetch',\n 'Load failed',\n 'NetworkError when attempting to fetch resource.',\n ].includes(requestError.message),\n)\n\n// Headers\nconst responseHeaders = computed(() => {\n const headers = response?.headers\n\n return headers\n ? Object.keys(headers).map((key) => ({\n name: key,\n value: headers[key] ?? '',\n }))\n : []\n})\n\nconst responseContentType = computed(\n () => response?.headers['content-type'] ?? response?.headers['Content-Type'],\n)\n\n// Cookies\nconst responseCookies = computed(\n () =>\n response?.cookieHeaderKeys\n .map((setCookieValue) => parseSetCookie(setCookieValue))\n .filter(isDefined) ?? [],\n)\n\nconst responseSections = ['Cookies', 'Headers', 'Body'] as const\ntype Filter = 'All' | (typeof responseSections)[number]\nconst activeFilter = ref<Filter>('All')\n\nconst filters = computed<Filter[]>(() => ['All', ...responseSections])\n\nconst filterIds = computed<Record<Filter, string>>(() => ({\n All: useId(),\n Cookies: useId(),\n Headers: useId(),\n Body: useId(),\n}))\n\n/** Threshold for virtualizing response bodies in bytes */\nconst VIRTUALIZATION_THRESHOLD = 200_000\nconst shouldVirtualize = computed(() => {\n if (!response || !('size' in response)) {\n return false\n }\n\n // Get content type from headers\n const contentType =\n response.headers?.['content-type'] || response.headers?.['Content-Type']\n\n // If no content type or response size is small, don't virtualize\n if (!contentType || (response.size ?? 0) <= VIRTUALIZATION_THRESHOLD) {\n return false\n }\n\n // Do not virtualize html\n if (contentType.includes('text/html')) {\n return false\n }\n\n // Check if content type matches any text-based type\n const isTextBased = textMediaTypes.some((type) => contentType.includes(type))\n\n return isTextBased && (response.size ?? 0) > VIRTUALIZATION_THRESHOLD\n})\n\nconst requestHeaders = computed(() => {\n const headers = requestPayload?.[1]?.headers\n if (!headers) {\n return []\n }\n\n // Normalise via the Headers constructor, and then spread\n return [...new Headers(headers)].map(([name, value]) => ({\n name,\n value,\n required: false,\n }))\n})\n\nconst isSectionVisible = (\n section: (typeof responseSections)[number] | 'All',\n) => {\n if (activeFilter.value === 'All' || activeFilter.value === section) {\n return true\n }\n return false\n}\n\ndefineExpose({\n responseHeaders,\n responseCookies,\n requestHeaders,\n shouldVirtualize,\n activeFilter,\n filters,\n})\n\nconst filterLabels = computed(() => ({\n All: translate('apiClient.sectionFilter.all'),\n Auth: translate('apiClient.sectionFilter.auth'),\n Variables: translate('apiClient.sectionFilter.variables'),\n Cookies: translate('apiClient.sectionFilter.cookies'),\n Headers: translate('apiClient.sectionFilter.headers'),\n Query: translate('apiClient.sectionFilter.query'),\n Body: translate('apiClient.sectionFilter.body'),\n}))\n</script>\n<template>\n <!-- Bound the stacked response section so long bodies keep their own scroll area. -->\n <ViewLayoutSection\n :aria-label=\"translate('apiClient.responseBlock.response')\"\n class=\"max-xl:max-h-full\">\n <template #title>\n <div class=\"flex h-8 flex-1 items-center\">\n <div\n aria-live=\"polite\"\n class=\"flex items-center\"\n :class=\"{ 'animate-response-heading': response }\">\n <span class=\"response-heading pointer-events-none absolute\">{{\n translate('apiClient.responseBlock.response')\n }}</span>\n <ResponseMetaInformation\n v-if=\"response\"\n class=\"animate-response-children\"\n :eventBus=\"eventBus\"\n :response=\"response\" />\n </div>\n <SectionFilter\n v-model=\"activeFilter\"\n :filters=\"filters\"\n :labels=\"filterLabels\" />\n </div>\n </template>\n <div\n :id=\"filterIds.All\"\n class=\"custom-scroll response-section-content relative grid h-full justify-stretch\"\n :class=\"{\n 'content-start': response,\n }\"\n :role=\"activeFilter === 'All' && response ? 'tabpanel' : 'none'\">\n <div\n v-if=\"requestError\"\n class=\"flex flex-col gap-3 p-4 text-sm\"\n role=\"alert\">\n <h3 class=\"text-c-1 font-medium\">\n {{ translate('apiClient.responseBlock.requestFailed') }}\n </h3>\n <p class=\"text-c-2 break-words\">{{ requestError.message }}</p>\n <p\n v-if=\"showNetworkErrorHelp\"\n class=\"text-c-2 leading-relaxed\">\n {{ translate('apiClient.responseBlock.networkErrorHelp') }}\n </p>\n </div>\n <template v-else-if=\"!response\">\n <ResponseEmpty\n :appVersion=\"appVersion\"\n :executionDisabled\n :layout=\"layout\"\n :totalPerformedRequests=\"totalPerformedRequests\"\n @addRequest=\"\n eventBus.emit('ui:open:command-palette', {\n action: 'create-request',\n payload: undefined,\n })\n \"\n @openCommandPalette=\"eventBus.emit('ui:open:command-palette')\"\n @sendRequest=\"eventBus.emit('operation:send:request:hotkey')\" />\n </template>\n <template v-else>\n <!-- Cookies section -->\n <ResponseCookies\n v-if=\"isSectionVisible('Cookies')\"\n :id=\"filterIds.Cookies\"\n class=\"response-section-content-cookies\"\n :cookies=\"responseCookies\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\" />\n <!-- Request headers section -->\n <HeadersComponent\n v-if=\"isSectionVisible('Headers')\"\n :id=\"filterIds.Headers\"\n class=\"response-section-content-headers\"\n :headers=\"requestHeaders\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\">\n <template #title>\n {{ translate('apiClient.responseBlock.requestHeaders') }}\n </template>\n </HeadersComponent>\n <!-- Response headers section -->\n <HeadersComponent\n v-if=\"isSectionVisible('Headers')\"\n :id=\"filterIds.Headers\"\n class=\"response-section-content-headers\"\n :headers=\"responseHeaders\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\">\n <template #title>\n {{ translate('apiClient.responseBlock.responseHeaders') }}\n </template>\n </HeadersComponent>\n\n <!-- Inject response section plugin components -->\n <ScalarErrorBoundary\n v-for=\"(plugin, index) in plugins\"\n :key=\"index\">\n <component\n :is=\"plugin.components.response.component\"\n v-if=\"plugin?.components?.response\"\n v-show=\"activeFilter === 'All'\"\n v-bind=\"plugin.components.response.additionalProps\" />\n </ScalarErrorBoundary>\n\n <template v-if=\"activeFilter === 'All' || activeFilter === 'Body'\">\n <!-- Streaming response body -->\n <ResponseBodyStreaming\n v-if=\"'reader' in response\"\n :id=\"filterIds.Body\"\n class=\"response-section-content-body\"\n :contentType=\"responseContentType\"\n :reader=\"response.reader\" />\n\n <!-- Virtualized Text for massive responses -->\n <ResponseBodyVirtual\n v-else-if=\"shouldVirtualize && typeof response?.data === 'string'\"\n :id=\"filterIds.Body\"\n :content=\"response!.data\"\n :data=\"response?.data\"\n :headers=\"responseHeaders\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\" />\n\n <!-- Regular response body -->\n <ResponseBody\n v-else\n :id=\"filterIds.Body\"\n :active=\"true\"\n class=\"response-section-content-body\"\n :data=\"response?.data\"\n :headers=\"responseHeaders\"\n layout=\"client\"\n :plugins=\"plugins\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\"\n :title=\"translate('apiClient.responseBlock.body')\" />\n </template>\n </template>\n <ResponseLoadingOverlay :eventBus=\"eventBus\" />\n </div>\n </ViewLayoutSection>\n</template>\n<style scoped>\n.animate-response-heading .response-heading {\n animation: push-response 0.2s ease-in-out forwards;\n opacity: 1;\n}\n@keyframes push-response {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-4px);\n }\n}\n.animate-response-heading .animate-response-children {\n animation: response-spans 0.2s ease-in-out forwards 0.05s;\n opacity: 0;\n}\n\n@keyframes response-spans {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ResponseBlock.vue.js","names":["_sfc_main"],"sources":["../../../../src/v2/blocks/response-block/ResponseBlock.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarErrorBoundary } from '@scalar/components/error-boundary'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport { isElectron } from '@scalar/helpers/general/is-electron'\nimport type { ClientPlugin } from '@scalar/oas-utils/helpers'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { RequestPayload } from '@scalar/workspace-store/request-example'\nimport { computed, ref, useId } from 'vue'\n\nimport SectionFilter from '@/components/SectionFilter.vue'\nimport ViewLayoutSection from '@/components/ViewLayout/ViewLayoutSection.vue'\nimport type { ResponseInstance } from '@/v2/blocks/operation-block/helpers/send-request'\nimport HeadersComponent from '@/v2/blocks/response-block/components/Headers.vue'\nimport ResponseBody from '@/v2/blocks/response-block/components/ResponseBody.vue'\nimport ResponseBodyStreaming from '@/v2/blocks/response-block/components/ResponseBodyStreaming.vue'\nimport ResponseBodyVirtual from '@/v2/blocks/response-block/components/ResponseBodyVirtual.vue'\nimport ResponseCookies from '@/v2/blocks/response-block/components/ResponseCookies.vue'\nimport ResponseEmpty from '@/v2/blocks/response-block/components/ResponseEmpty.vue'\nimport ResponseLoadingOverlay from '@/v2/blocks/response-block/components/ResponseLoadingOverlay.vue'\nimport ResponseMetaInformation from '@/v2/blocks/response-block/components/ResponseMetaInformation.vue'\nimport { textMediaTypes } from '@/v2/blocks/response-block/helpers/media-types'\nimport { parseSetCookie } from '@/v2/blocks/response-block/helpers/parse-set-cookie'\nimport { useLocalization } from '@/v2/features/localization'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nconst {\n layout,\n totalPerformedRequests,\n response,\n requestPayload,\n requestError,\n} = defineProps<{\n /** Wait for the selected external request example before sending. */\n executionDisabled?: boolean\n /** Failure retained until the next request or operation change. */\n requestError?: Error | null\n /** Preprocessed response */\n response: ResponseInstance | null\n /** Original request as a [url, RequestInit] tuple */\n requestPayload: RequestPayload | null\n /** Client layout */\n layout: ClientLayout\n /** Total number of performed requests */\n totalPerformedRequests: number\n /** Application version */\n appVersion: string\n /** Registered app plugins */\n plugins: ClientPlugin[]\n /** Workspace event bus */\n eventBus: WorkspaceEventBus\n}>()\n\nconst { translate } = useLocalization()\n\n/** Browsers hide CORS details, so these messages warrant guidance, not a diagnosis. */\nconst showNetworkErrorHelp = computed<boolean>(\n () =>\n !isElectron() &&\n requestError?.name === 'TypeError' &&\n [\n 'Failed to fetch',\n 'Load failed',\n 'NetworkError when attempting to fetch resource.',\n ].includes(requestError.message),\n)\n\n// Headers\nconst responseHeaders = computed(() => {\n const headers = response?.headers\n\n return headers\n ? Object.keys(headers).map((key) => ({\n name: key,\n value: headers[key] ?? '',\n }))\n : []\n})\n\nconst responseContentType = computed(\n () => response?.headers['content-type'] ?? response?.headers['Content-Type'],\n)\n\n// Cookies\nconst responseCookies = computed(\n () =>\n response?.cookieHeaderKeys\n .map((setCookieValue) => parseSetCookie(setCookieValue))\n .filter(isDefined) ?? [],\n)\n\nconst responseSections = ['Cookies', 'Headers', 'Body'] as const\ntype Filter = 'All' | (typeof responseSections)[number]\nconst activeFilter = ref<Filter>('All')\n\nconst filters = computed<Filter[]>(() => ['All', ...responseSections])\n\nconst filterIds = computed<Record<Filter, string>>(() => ({\n All: useId(),\n Cookies: useId(),\n Headers: useId(),\n Body: useId(),\n}))\n\n/** Threshold for virtualizing response bodies in bytes */\nconst VIRTUALIZATION_THRESHOLD = 200_000\nconst shouldVirtualize = computed(() => {\n if (!response || !('size' in response)) {\n return false\n }\n\n // Get content type from headers\n const contentType =\n response.headers?.['content-type'] || response.headers?.['Content-Type']\n\n // If no content type or response size is small, don't virtualize\n if (!contentType || (response.size ?? 0) <= VIRTUALIZATION_THRESHOLD) {\n return false\n }\n\n // Do not virtualize html\n if (contentType.includes('text/html')) {\n return false\n }\n\n // Check if content type matches any text-based type\n const isTextBased = textMediaTypes.some((type) => contentType.includes(type))\n\n return isTextBased && (response.size ?? 0) > VIRTUALIZATION_THRESHOLD\n})\n\nconst requestHeaders = computed(() => {\n const headers = requestPayload?.[1]?.headers\n if (!headers) {\n return []\n }\n\n // Normalise via the Headers constructor, and then spread\n return [...new Headers(headers)].map(([name, value]) => ({\n name,\n value,\n required: false,\n }))\n})\n\nconst isSectionVisible = (\n section: (typeof responseSections)[number] | 'All',\n) => {\n if (activeFilter.value === 'All' || activeFilter.value === section) {\n return true\n }\n return false\n}\n\ndefineExpose({\n responseHeaders,\n responseCookies,\n requestHeaders,\n shouldVirtualize,\n activeFilter,\n filters,\n})\n\nconst filterLabels = computed(() => ({\n All: translate('apiClient.sectionFilter.all'),\n Auth: translate('apiClient.sectionFilter.auth'),\n Variables: translate('apiClient.sectionFilter.variables'),\n Cookies: translate('apiClient.sectionFilter.cookies'),\n Headers: translate('apiClient.sectionFilter.headers'),\n Query: translate('apiClient.sectionFilter.query'),\n Body: translate('apiClient.sectionFilter.body'),\n}))\n</script>\n<template>\n <!-- Bound the stacked response section so long bodies keep their own scroll area. -->\n <ViewLayoutSection\n :aria-label=\"translate('apiClient.responseBlock.response')\"\n class=\"max-xl:max-h-full\">\n <template #title>\n <div class=\"flex h-8 flex-1 items-center\">\n <div\n aria-live=\"polite\"\n class=\"flex items-center\"\n :class=\"{ 'animate-response-heading': response }\">\n <span class=\"response-heading pointer-events-none absolute\">{{\n translate('apiClient.responseBlock.response')\n }}</span>\n <ResponseMetaInformation\n v-if=\"response\"\n class=\"animate-response-children\"\n :eventBus=\"eventBus\"\n :response=\"response\" />\n </div>\n <SectionFilter\n v-model=\"activeFilter\"\n :filters=\"filters\"\n :labels=\"filterLabels\" />\n </div>\n </template>\n <div\n :id=\"filterIds.All\"\n class=\"custom-scroll response-section-content relative grid h-full justify-stretch\"\n :class=\"{\n 'content-start': response,\n }\"\n :role=\"activeFilter === 'All' && response ? 'tabpanel' : 'none'\">\n <div\n v-if=\"requestError\"\n class=\"flex flex-col gap-3 p-4 text-sm\"\n role=\"alert\">\n <h3 class=\"text-c-1 font-medium\">\n {{ translate('apiClient.responseBlock.requestFailed') }}\n </h3>\n <p class=\"text-c-2 break-words\">{{ requestError.message }}</p>\n <p\n v-if=\"showNetworkErrorHelp\"\n class=\"text-c-2 leading-relaxed\">\n {{ translate('apiClient.responseBlock.networkErrorHelp') }}\n </p>\n </div>\n <template v-else-if=\"!response\">\n <ResponseEmpty\n :appVersion=\"appVersion\"\n :executionDisabled\n :layout=\"layout\"\n :totalPerformedRequests=\"totalPerformedRequests\"\n @addRequest=\"\n eventBus.emit('ui:open:command-palette', {\n action: 'create-request',\n payload: undefined,\n })\n \"\n @openCommandPalette=\"eventBus.emit('ui:open:command-palette')\"\n @sendRequest=\"eventBus.emit('operation:send:request:hotkey')\" />\n </template>\n <template v-else>\n <!-- Cookies section -->\n <ResponseCookies\n v-if=\"isSectionVisible('Cookies')\"\n :id=\"filterIds.Cookies\"\n class=\"response-section-content-cookies\"\n :cookies=\"responseCookies\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\" />\n <!-- Request headers section -->\n <HeadersComponent\n v-if=\"isSectionVisible('Headers')\"\n :id=\"filterIds.Headers\"\n class=\"response-section-content-headers\"\n :headers=\"requestHeaders\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\">\n <template #title>\n {{ translate('apiClient.responseBlock.requestHeaders') }}\n </template>\n </HeadersComponent>\n <!-- Response headers section -->\n <HeadersComponent\n v-if=\"isSectionVisible('Headers')\"\n :id=\"filterIds.Headers\"\n class=\"response-section-content-headers\"\n :headers=\"responseHeaders\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\">\n <template #title>\n {{ translate('apiClient.responseBlock.responseHeaders') }}\n </template>\n </HeadersComponent>\n\n <!-- Inject response section plugin components -->\n <ScalarErrorBoundary\n v-for=\"(plugin, index) in plugins\"\n :key=\"index\">\n <component\n :is=\"plugin.components.response.component\"\n v-if=\"plugin?.components?.response\"\n v-show=\"activeFilter === 'All'\"\n v-bind=\"plugin.components.response.additionalProps\" />\n </ScalarErrorBoundary>\n\n <template v-if=\"activeFilter === 'All' || activeFilter === 'Body'\">\n <!-- Streaming response body -->\n <ResponseBodyStreaming\n v-if=\"'reader' in response\"\n :id=\"filterIds.Body\"\n class=\"response-section-content-body\"\n :contentType=\"responseContentType\"\n :reader=\"response.reader\" />\n\n <!-- Virtualized Text for massive responses -->\n <ResponseBodyVirtual\n v-else-if=\"shouldVirtualize && typeof response?.data === 'string'\"\n :id=\"filterIds.Body\"\n :content=\"response!.data\"\n :data=\"response?.data\"\n :headers=\"responseHeaders\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\" />\n\n <!-- Regular response body -->\n <ResponseBody\n v-else\n :id=\"filterIds.Body\"\n :active=\"true\"\n class=\"response-section-content-body\"\n :data=\"response?.data\"\n :headers=\"responseHeaders\"\n layout=\"client\"\n :plugins=\"plugins\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\"\n :title=\"translate('apiClient.responseBlock.body')\" />\n </template>\n </template>\n <ResponseLoadingOverlay :eventBus=\"eventBus\" />\n </div>\n </ViewLayoutSection>\n</template>\n<style scoped>\n.animate-response-heading .response-heading {\n animation: push-response 0.2s ease-in-out forwards;\n opacity: 1;\n}\n@keyframes push-response {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-4px);\n }\n}\n.animate-response-heading .animate-response-children {\n animation: response-spans 0.2s ease-in-out forwards 0.05s;\n opacity: 0;\n}\n\n@keyframes response-spans {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n</style>\n"],"mappings":""}
@@ -260,4 +260,4 @@ var ResponseBlock_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
260
260
  //#endregion
261
261
  export { ResponseBlock_vue_vue_type_script_setup_true_lang_default as default };
262
262
 
263
- //# sourceMappingURL=ResponseBlock.vue.script.js.map
263
+ //# sourceMappingURL=ResponseBlock.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseBlock.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","ViewLayoutSection","_unref","_withCtx","_createElementVNode","_normalizeClass","_toDisplayString","ResponseMetaInformation","_createCommentVNode","_createVNode","SectionFilter","_createElementBlock","ResponseEmpty","_Fragment","ResponseCookies","HeadersComponent","_createTextVNode","_renderList","_withDirectives","_resolveDynamicComponent","_mergeProps","_vShow","ResponseBodyStreaming","ResponseBodyVirtual","ResponseBody","ResponseLoadingOverlay"],"sources":["../../../../src/v2/blocks/response-block/ResponseBlock.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarErrorBoundary } from '@scalar/components/error-boundary'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport { isElectron } from '@scalar/helpers/general/is-electron'\nimport type { ClientPlugin } from '@scalar/oas-utils/helpers'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { RequestPayload } from '@scalar/workspace-store/request-example'\nimport { computed, ref, useId } from 'vue'\n\nimport SectionFilter from '@/components/SectionFilter.vue'\nimport ViewLayoutSection from '@/components/ViewLayout/ViewLayoutSection.vue'\nimport type { ResponseInstance } from '@/v2/blocks/operation-block/helpers/send-request'\nimport HeadersComponent from '@/v2/blocks/response-block/components/Headers.vue'\nimport ResponseBody from '@/v2/blocks/response-block/components/ResponseBody.vue'\nimport ResponseBodyStreaming from '@/v2/blocks/response-block/components/ResponseBodyStreaming.vue'\nimport ResponseBodyVirtual from '@/v2/blocks/response-block/components/ResponseBodyVirtual.vue'\nimport ResponseCookies from '@/v2/blocks/response-block/components/ResponseCookies.vue'\nimport ResponseEmpty from '@/v2/blocks/response-block/components/ResponseEmpty.vue'\nimport ResponseLoadingOverlay from '@/v2/blocks/response-block/components/ResponseLoadingOverlay.vue'\nimport ResponseMetaInformation from '@/v2/blocks/response-block/components/ResponseMetaInformation.vue'\nimport { textMediaTypes } from '@/v2/blocks/response-block/helpers/media-types'\nimport { parseSetCookie } from '@/v2/blocks/response-block/helpers/parse-set-cookie'\nimport { useLocalization } from '@/v2/features/localization'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nconst {\n layout,\n totalPerformedRequests,\n response,\n requestPayload,\n requestError,\n} = defineProps<{\n /** Wait for the selected external request example before sending. */\n executionDisabled?: boolean\n /** Failure retained until the next request or operation change. */\n requestError?: Error | null\n /** Preprocessed response */\n response: ResponseInstance | null\n /** Original request as a [url, RequestInit] tuple */\n requestPayload: RequestPayload | null\n /** Client layout */\n layout: ClientLayout\n /** Total number of performed requests */\n totalPerformedRequests: number\n /** Application version */\n appVersion: string\n /** Registered app plugins */\n plugins: ClientPlugin[]\n /** Workspace event bus */\n eventBus: WorkspaceEventBus\n}>()\n\nconst { translate } = useLocalization()\n\n/** Browsers hide CORS details, so these messages warrant guidance, not a diagnosis. */\nconst showNetworkErrorHelp = computed<boolean>(\n () =>\n !isElectron() &&\n requestError?.name === 'TypeError' &&\n [\n 'Failed to fetch',\n 'Load failed',\n 'NetworkError when attempting to fetch resource.',\n ].includes(requestError.message),\n)\n\n// Headers\nconst responseHeaders = computed(() => {\n const headers = response?.headers\n\n return headers\n ? Object.keys(headers).map((key) => ({\n name: key,\n value: headers[key] ?? '',\n }))\n : []\n})\n\nconst responseContentType = computed(\n () => response?.headers['content-type'] ?? response?.headers['Content-Type'],\n)\n\n// Cookies\nconst responseCookies = computed(\n () =>\n response?.cookieHeaderKeys\n .map((setCookieValue) => parseSetCookie(setCookieValue))\n .filter(isDefined) ?? [],\n)\n\nconst responseSections = ['Cookies', 'Headers', 'Body'] as const\ntype Filter = 'All' | (typeof responseSections)[number]\nconst activeFilter = ref<Filter>('All')\n\nconst filters = computed<Filter[]>(() => ['All', ...responseSections])\n\nconst filterIds = computed<Record<Filter, string>>(() => ({\n All: useId(),\n Cookies: useId(),\n Headers: useId(),\n Body: useId(),\n}))\n\n/** Threshold for virtualizing response bodies in bytes */\nconst VIRTUALIZATION_THRESHOLD = 200_000\nconst shouldVirtualize = computed(() => {\n if (!response || !('size' in response)) {\n return false\n }\n\n // Get content type from headers\n const contentType =\n response.headers?.['content-type'] || response.headers?.['Content-Type']\n\n // If no content type or response size is small, don't virtualize\n if (!contentType || (response.size ?? 0) <= VIRTUALIZATION_THRESHOLD) {\n return false\n }\n\n // Do not virtualize html\n if (contentType.includes('text/html')) {\n return false\n }\n\n // Check if content type matches any text-based type\n const isTextBased = textMediaTypes.some((type) => contentType.includes(type))\n\n return isTextBased && (response.size ?? 0) > VIRTUALIZATION_THRESHOLD\n})\n\nconst requestHeaders = computed(() => {\n const headers = requestPayload?.[1]?.headers\n if (!headers) {\n return []\n }\n\n // Normalise via the Headers constructor, and then spread\n return [...new Headers(headers)].map(([name, value]) => ({\n name,\n value,\n required: false,\n }))\n})\n\nconst isSectionVisible = (\n section: (typeof responseSections)[number] | 'All',\n) => {\n if (activeFilter.value === 'All' || activeFilter.value === section) {\n return true\n }\n return false\n}\n\ndefineExpose({\n responseHeaders,\n responseCookies,\n requestHeaders,\n shouldVirtualize,\n activeFilter,\n filters,\n})\n\nconst filterLabels = computed(() => ({\n All: translate('apiClient.sectionFilter.all'),\n Auth: translate('apiClient.sectionFilter.auth'),\n Variables: translate('apiClient.sectionFilter.variables'),\n Cookies: translate('apiClient.sectionFilter.cookies'),\n Headers: translate('apiClient.sectionFilter.headers'),\n Query: translate('apiClient.sectionFilter.query'),\n Body: translate('apiClient.sectionFilter.body'),\n}))\n</script>\n<template>\n <!-- Bound the stacked response section so long bodies keep their own scroll area. -->\n <ViewLayoutSection\n :aria-label=\"translate('apiClient.responseBlock.response')\"\n class=\"max-xl:max-h-full\">\n <template #title>\n <div class=\"flex h-8 flex-1 items-center\">\n <div\n aria-live=\"polite\"\n class=\"flex items-center\"\n :class=\"{ 'animate-response-heading': response }\">\n <span class=\"response-heading pointer-events-none absolute\">{{\n translate('apiClient.responseBlock.response')\n }}</span>\n <ResponseMetaInformation\n v-if=\"response\"\n class=\"animate-response-children\"\n :eventBus=\"eventBus\"\n :response=\"response\" />\n </div>\n <SectionFilter\n v-model=\"activeFilter\"\n :filters=\"filters\"\n :labels=\"filterLabels\" />\n </div>\n </template>\n <div\n :id=\"filterIds.All\"\n class=\"custom-scroll response-section-content relative grid h-full justify-stretch\"\n :class=\"{\n 'content-start': response,\n }\"\n :role=\"activeFilter === 'All' && response ? 'tabpanel' : 'none'\">\n <div\n v-if=\"requestError\"\n class=\"flex flex-col gap-3 p-4 text-sm\"\n role=\"alert\">\n <h3 class=\"text-c-1 font-medium\">\n {{ translate('apiClient.responseBlock.requestFailed') }}\n </h3>\n <p class=\"text-c-2 break-words\">{{ requestError.message }}</p>\n <p\n v-if=\"showNetworkErrorHelp\"\n class=\"text-c-2 leading-relaxed\">\n {{ translate('apiClient.responseBlock.networkErrorHelp') }}\n </p>\n </div>\n <template v-else-if=\"!response\">\n <ResponseEmpty\n :appVersion=\"appVersion\"\n :executionDisabled\n :layout=\"layout\"\n :totalPerformedRequests=\"totalPerformedRequests\"\n @addRequest=\"\n eventBus.emit('ui:open:command-palette', {\n action: 'create-request',\n payload: undefined,\n })\n \"\n @openCommandPalette=\"eventBus.emit('ui:open:command-palette')\"\n @sendRequest=\"eventBus.emit('operation:send:request:hotkey')\" />\n </template>\n <template v-else>\n <!-- Cookies section -->\n <ResponseCookies\n v-if=\"isSectionVisible('Cookies')\"\n :id=\"filterIds.Cookies\"\n class=\"response-section-content-cookies\"\n :cookies=\"responseCookies\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\" />\n <!-- Request headers section -->\n <HeadersComponent\n v-if=\"isSectionVisible('Headers')\"\n :id=\"filterIds.Headers\"\n class=\"response-section-content-headers\"\n :headers=\"requestHeaders\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\">\n <template #title>\n {{ translate('apiClient.responseBlock.requestHeaders') }}\n </template>\n </HeadersComponent>\n <!-- Response headers section -->\n <HeadersComponent\n v-if=\"isSectionVisible('Headers')\"\n :id=\"filterIds.Headers\"\n class=\"response-section-content-headers\"\n :headers=\"responseHeaders\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\">\n <template #title>\n {{ translate('apiClient.responseBlock.responseHeaders') }}\n </template>\n </HeadersComponent>\n\n <!-- Inject response section plugin components -->\n <ScalarErrorBoundary\n v-for=\"(plugin, index) in plugins\"\n :key=\"index\">\n <component\n :is=\"plugin.components.response.component\"\n v-if=\"plugin?.components?.response\"\n v-show=\"activeFilter === 'All'\"\n v-bind=\"plugin.components.response.additionalProps\" />\n </ScalarErrorBoundary>\n\n <template v-if=\"activeFilter === 'All' || activeFilter === 'Body'\">\n <!-- Streaming response body -->\n <ResponseBodyStreaming\n v-if=\"'reader' in response\"\n :id=\"filterIds.Body\"\n class=\"response-section-content-body\"\n :contentType=\"responseContentType\"\n :reader=\"response.reader\" />\n\n <!-- Virtualized Text for massive responses -->\n <ResponseBodyVirtual\n v-else-if=\"shouldVirtualize && typeof response?.data === 'string'\"\n :id=\"filterIds.Body\"\n :content=\"response!.data\"\n :data=\"response?.data\"\n :headers=\"responseHeaders\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\" />\n\n <!-- Regular response body -->\n <ResponseBody\n v-else\n :id=\"filterIds.Body\"\n :active=\"true\"\n class=\"response-section-content-body\"\n :data=\"response?.data\"\n :headers=\"responseHeaders\"\n layout=\"client\"\n :plugins=\"plugins\"\n :role=\"activeFilter === 'All' ? 'none' : 'tabpanel'\"\n :title=\"translate('apiClient.responseBlock.body')\" />\n </template>\n </template>\n <ResponseLoadingOverlay :eventBus=\"eventBus\" />\n </div>\n </ViewLayoutSection>\n</template>\n<style scoped>\n.animate-response-heading .response-heading {\n animation: push-response 0.2s ease-in-out forwards;\n opacity: 1;\n}\n@keyframes push-response {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-4px);\n }\n}\n.animate-response-heading .animate-response-children {\n animation: response-spans 0.2s ease-in-out forwards 0.05s;\n opacity: 0;\n}\n\n@keyframes response-spans {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import Headers_vue_vue_type_script_setup_true_lang_default from "./Headers.vue.script.js";
1
+ import Headers_vue_vue_type_script_setup_true_lang_default from "./Headers.vue_vue_type_script_setup_true_lang.js";
2
2
  //#region src/v2/blocks/response-block/components/Headers.vue
3
3
  var Headers_default = Headers_vue_vue_type_script_setup_true_lang_default;
4
4
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"Headers.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/Headers.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { httpHeaders, type HttpHeader } from '@scalar/helpers/http/http-headers'\nimport {\n DataTable,\n DataTableHeader,\n DataTableRow,\n DataTableText,\n} from '@v2/components/data-table'\n\nimport HelpfulLink from '@/components/HelpfulLink.vue'\nimport { CollapsibleSection } from '@/v2/components/layout'\nimport { useLocalization } from '@/v2/features/localization'\n\ndefineProps<{\n headers: Header[]\n}>()\n\nconst { translate } = useLocalization()\n\ntype Header = { name: string; value: string }\n\nconst findHeaderInfo = (name: string): HttpHeader | undefined =>\n httpHeaders[name.toLowerCase() as keyof typeof httpHeaders]\n</script>\n<template>\n <CollapsibleSection\n class=\"overflow-auto\"\n :defaultOpen=\"false\"\n :itemCount=\"headers.length\">\n <template #title><slot name=\"title\" /></template>\n <div\n v-if=\"headers.length\"\n class=\"max-h-[calc(100%-32px)] overflow-y-auto\">\n <DataTable\n :columns=\"['minmax(auto, min-content)', 'minmax(50%, 1fr)']\"\n scroll>\n <DataTableRow class=\"sr-only !block\">\n <DataTableHeader>\n {{ translate('apiClient.headers.headerKey') }}\n </DataTableHeader>\n <DataTableHeader>\n {{ translate('apiClient.headers.headerValue') }}\n </DataTableHeader>\n </DataTableRow>\n <DataTableRow\n v-for=\"item in headers\"\n :key=\"item.name\"\n class=\"group/row text-c-1\">\n <DataTableText\n class=\"bg-b-1 sticky left-0 z-1 max-w-full group-first/row:border-t-0\">\n <template v-if=\"typeof findHeaderInfo(item.name)?.url === 'string'\">\n <HelpfulLink\n class=\"decoration-c-3\"\n :href=\"findHeaderInfo(item.name)!.url\">\n {{ item.name }}\n </HelpfulLink>\n </template>\n <template v-else>\n {{ item.name }}\n </template>\n </DataTableText>\n <DataTableText\n class=\"z-0 group-first/row:border-t-0\"\n :text=\"item.value\" />\n </DataTableRow>\n </DataTable>\n </div>\n <!-- Empty state -->\n <div\n v-else\n class=\"text-c-3 bg-b-1 flex min-h-[64px] items-center justify-center border-t px-4 text-sm\">\n {{ translate('apiClient.headers.noHeaders') }}\n </div>\n </CollapsibleSection>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Headers.vue.js","names":["_sfc_main"],"sources":["../../../../../src/v2/blocks/response-block/components/Headers.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { httpHeaders, type HttpHeader } from '@scalar/helpers/http/http-headers'\nimport {\n DataTable,\n DataTableHeader,\n DataTableRow,\n DataTableText,\n} from '@v2/components/data-table'\n\nimport HelpfulLink from '@/components/HelpfulLink.vue'\nimport { CollapsibleSection } from '@/v2/components/layout'\nimport { useLocalization } from '@/v2/features/localization'\n\ndefineProps<{\n headers: Header[]\n}>()\n\nconst { translate } = useLocalization()\n\ntype Header = { name: string; value: string }\n\nconst findHeaderInfo = (name: string): HttpHeader | undefined =>\n httpHeaders[name.toLowerCase() as keyof typeof httpHeaders]\n</script>\n<template>\n <CollapsibleSection\n class=\"overflow-auto\"\n :defaultOpen=\"false\"\n :itemCount=\"headers.length\">\n <template #title><slot name=\"title\" /></template>\n <div\n v-if=\"headers.length\"\n class=\"max-h-[calc(100%-32px)] overflow-y-auto\">\n <DataTable\n :columns=\"['minmax(auto, min-content)', 'minmax(50%, 1fr)']\"\n scroll>\n <DataTableRow class=\"sr-only !block\">\n <DataTableHeader>\n {{ translate('apiClient.headers.headerKey') }}\n </DataTableHeader>\n <DataTableHeader>\n {{ translate('apiClient.headers.headerValue') }}\n </DataTableHeader>\n </DataTableRow>\n <DataTableRow\n v-for=\"item in headers\"\n :key=\"item.name\"\n class=\"group/row text-c-1\">\n <DataTableText\n class=\"bg-b-1 sticky left-0 z-1 max-w-full group-first/row:border-t-0\">\n <template v-if=\"typeof findHeaderInfo(item.name)?.url === 'string'\">\n <HelpfulLink\n class=\"decoration-c-3\"\n :href=\"findHeaderInfo(item.name)!.url\">\n {{ item.name }}\n </HelpfulLink>\n </template>\n <template v-else>\n {{ item.name }}\n </template>\n </DataTableText>\n <DataTableText\n class=\"z-0 group-first/row:border-t-0\"\n :text=\"item.value\" />\n </DataTableRow>\n </DataTable>\n </div>\n <!-- Empty state -->\n <div\n v-else\n class=\"text-c-3 bg-b-1 flex min-h-[64px] items-center justify-center border-t px-4 text-sm\">\n {{ translate('apiClient.headers.noHeaders') }}\n </div>\n </CollapsibleSection>\n</template>\n"],"mappings":""}
@@ -74,4 +74,4 @@ var Headers_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
74
74
  //#endregion
75
75
  export { Headers_vue_vue_type_script_setup_true_lang_default as default };
76
76
 
77
- //# sourceMappingURL=Headers.vue.script.js.map
77
+ //# sourceMappingURL=Headers.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Headers.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_unref","CollapsibleSection","_withCtx","_renderSlot","_createElementBlock","_createVNode","DataTable","DataTableRow","DataTableHeader","_createTextVNode","_toDisplayString","_Fragment","_renderList","DataTableText","HelpfulLink"],"sources":["../../../../../src/v2/blocks/response-block/components/Headers.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { httpHeaders, type HttpHeader } from '@scalar/helpers/http/http-headers'\nimport {\n DataTable,\n DataTableHeader,\n DataTableRow,\n DataTableText,\n} from '@v2/components/data-table'\n\nimport HelpfulLink from '@/components/HelpfulLink.vue'\nimport { CollapsibleSection } from '@/v2/components/layout'\nimport { useLocalization } from '@/v2/features/localization'\n\ndefineProps<{\n headers: Header[]\n}>()\n\nconst { translate } = useLocalization()\n\ntype Header = { name: string; value: string }\n\nconst findHeaderInfo = (name: string): HttpHeader | undefined =>\n httpHeaders[name.toLowerCase() as keyof typeof httpHeaders]\n</script>\n<template>\n <CollapsibleSection\n class=\"overflow-auto\"\n :defaultOpen=\"false\"\n :itemCount=\"headers.length\">\n <template #title><slot name=\"title\" /></template>\n <div\n v-if=\"headers.length\"\n class=\"max-h-[calc(100%-32px)] overflow-y-auto\">\n <DataTable\n :columns=\"['minmax(auto, min-content)', 'minmax(50%, 1fr)']\"\n scroll>\n <DataTableRow class=\"sr-only !block\">\n <DataTableHeader>\n {{ translate('apiClient.headers.headerKey') }}\n </DataTableHeader>\n <DataTableHeader>\n {{ translate('apiClient.headers.headerValue') }}\n </DataTableHeader>\n </DataTableRow>\n <DataTableRow\n v-for=\"item in headers\"\n :key=\"item.name\"\n class=\"group/row text-c-1\">\n <DataTableText\n class=\"bg-b-1 sticky left-0 z-1 max-w-full group-first/row:border-t-0\">\n <template v-if=\"typeof findHeaderInfo(item.name)?.url === 'string'\">\n <HelpfulLink\n class=\"decoration-c-3\"\n :href=\"findHeaderInfo(item.name)!.url\">\n {{ item.name }}\n </HelpfulLink>\n </template>\n <template v-else>\n {{ item.name }}\n </template>\n </DataTableText>\n <DataTableText\n class=\"z-0 group-first/row:border-t-0\"\n :text=\"item.value\" />\n </DataTableRow>\n </DataTable>\n </div>\n <!-- Empty state -->\n <div\n v-else\n class=\"text-c-3 bg-b-1 flex min-h-[64px] items-center justify-center border-t px-4 text-sm\">\n {{ translate('apiClient.headers.noHeaders') }}\n </div>\n </CollapsibleSection>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAiBA,MAAM,EAAE,cAAc,gBAAgB;EAItC,MAAM,kBAAkB,SACtB,YAAY,KAAK,YAAY;;GAG7B,OAAAA,UAAA,GAAAC,YAgDqBC,MAAAC,0BAAA,GAAA;IA/CnB,OAAM;IACL,aAAa;IACb,WAAW,QAAA,QAAQ;;IACT,OAAKC,cAAsB,CAArBC,WAAqB,KAAA,QAAA,OAAA,C;IACtC,SAAAD,cAoCM,CAnCE,QAAA,QAAQ,UADhBJ,UAAA,GAAAM,mBAoCM,OApCN,YAoCM,CAjCJC,YAgCYL,MAAAM,iBAAA,GAAA;KA/BT,SAAS,CAAA,6BAAA,kBAAA;KACV,QAAA;;KACA,SAAAJ,cAOe,CAPfG,YAOeL,MAAAO,oBAAA,GAAA,EAPD,OAAM,iBAAgB,GAAA;MAClC,SAAAL,cAEkB,CAFlBG,YAEkBL,MAAAQ,uBAAA,GAAA,MAAA;OADhB,SAAAN,cAA8C,CAA3CO,gBAAAC,gBAAAV,MAAA,SAAA,CAAS,CAAA,6BAAA,CAAA,GAAA,CAAA,C;;M,IAEdK,YAEkBL,MAAAQ,uBAAA,GAAA,MAAA;OADhB,SAAAN,cAAgD,CAA7CO,gBAAAC,gBAAAV,MAAA,SAAA,CAAS,CAAA,+BAAA,CAAA,GAAA,CAAA,C;;;;K,KAGhBF,UAAA,IAAA,GAAAM,mBAoBeO,UAAA,MAAAC,WAnBE,QAAA,UAAR,SAAI;MADb,OAAAd,UAAA,GAAAC,YAoBeC,MAAAO,oBAAA,GAAA;OAlBZ,KAAK,KAAK;OACX,OAAM;;OACN,SAAAL,cAYgB,CAZhBG,YAYgBL,MAAAa,qBAAA,GAAA,EAXd,OAAM,iEAAgE,GAAA;QACtE,SAAAX,cAMW,CANY,OAAA,eAAe,KAAK,IAAI,CAAA,EAAG,QAAG,YACnDJ,UAAA,GAAAC,YAIce,qBAAA;;SAHZ,OAAM;SACL,MAAM,eAAe,KAAK,IAAI,CAAA,CAAG;;SAClC,SAAAZ,cAAe,CAAZO,gBAAAC,gBAAA,KAAK,IAAI,GAAA,CAAA,C;;Q,uBAGhBZ,UAAA,GAAAM,mBAEWO,UAAA,EAAA,KAAA,EAAA,GAAA,CADNF,gBAAAC,gBAAA,KAAK,IAAI,GAAA,CAAA,C;;O,UAGhBL,YAEuBL,MAAAa,qBAAA,GAAA;QADrB,OAAM;QACL,MAAM,KAAK;;;;;;I,SAKpBf,UAAA,GAAAM,mBAIM,OAJN,YAIMM,gBADDV,MAAA,SAAA,CAAS,CAAA,6BAAA,CAAA,GAAA,CAAA,E"}
@@ -1,6 +1,6 @@
1
1
  import _plugin_vue_export_helper_default from "../../../../_virtual/_plugin-vue_export-helper.js";
2
- import ResponseBody_vue_vue_type_script_setup_true_lang_default from "./ResponseBody.vue.script.js";
3
- /* empty css */
2
+ import ResponseBody_vue_vue_type_script_setup_true_lang_default from "./ResponseBody.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
4
  //#region src/v2/blocks/response-block/components/ResponseBody.vue
5
5
  var ResponseBody_default = /*#__PURE__*/ _plugin_vue_export_helper_default(ResponseBody_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-f09bb250"]]);
6
6
  //#endregion