@scalar/api-client 3.8.2 → 3.8.4

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 (261) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/components/HttpMethod/HttpMethod.vue.d.ts.map +1 -1
  3. package/dist/components/HttpMethod/HttpMethod.vue.js +1 -1
  4. package/dist/components/HttpMethod/HttpMethod.vue.js.map +1 -1
  5. package/dist/components/HttpMethod/HttpMethod.vue.script.js +2 -1
  6. package/dist/components/HttpMethod/HttpMethod.vue.script.js.map +1 -1
  7. package/dist/components/SectionFilter.vue.js +1 -1
  8. package/dist/components/SectionFilter.vue.js.map +1 -1
  9. package/dist/components/SectionFilter.vue.script.js +1 -1
  10. package/dist/components/SectionFilter.vue.script.js.map +1 -1
  11. package/dist/components/Server/ServerVariablesSelect.vue.js.map +1 -1
  12. package/dist/components/Server/ServerVariablesSelect.vue.script.js +2 -1
  13. package/dist/components/Server/ServerVariablesSelect.vue.script.js.map +1 -1
  14. package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.js.map +1 -1
  15. package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.script.js +1 -1
  16. package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.script.js.map +1 -1
  17. package/dist/components/ViewLayout/ViewLayout.vue.js.map +1 -1
  18. package/dist/components/ViewLayout/ViewLayout.vue.script.js +1 -1
  19. package/dist/components/ViewLayout/ViewLayout.vue.script.js.map +1 -1
  20. package/dist/components/ViewLayout/ViewLayoutSection.vue.js.map +1 -1
  21. package/dist/components/ViewLayout/ViewLayoutSection.vue.script.js +1 -1
  22. package/dist/components/ViewLayout/ViewLayoutSection.vue.script.js.map +1 -1
  23. package/dist/style.css +105 -105
  24. package/dist/v2/blocks/operation-block/components/Header.vue.d.ts.map +1 -1
  25. package/dist/v2/blocks/operation-block/components/Header.vue.js +1 -1
  26. package/dist/v2/blocks/operation-block/components/Header.vue.js.map +1 -1
  27. package/dist/v2/blocks/operation-block/components/Header.vue.script.js +6 -1
  28. package/dist/v2/blocks/operation-block/components/Header.vue.script.js.map +1 -1
  29. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.d.ts +4 -0
  30. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.d.ts.map +1 -1
  31. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.js +1 -1
  32. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.js.map +1 -1
  33. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.script.js +7 -1
  34. package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.script.js.map +1 -1
  35. package/dist/v2/blocks/operation-code-sample/components/ExamplePicker.vue.js.map +1 -1
  36. package/dist/v2/blocks/operation-code-sample/components/ExamplePicker.vue.script.js +2 -1
  37. package/dist/v2/blocks/operation-code-sample/components/ExamplePicker.vue.script.js.map +1 -1
  38. package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.js +1 -1
  39. package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.js.map +1 -1
  40. package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.script.js +5 -1
  41. package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.script.js.map +1 -1
  42. package/dist/v2/blocks/operation-code-sample/helpers/filter-clients-by-query.js.map +1 -1
  43. package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-body.d.ts.map +1 -1
  44. package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-body.js +171 -15
  45. package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-body.js.map +1 -1
  46. package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-parameters.d.ts.map +1 -1
  47. package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-parameters.js +14 -1
  48. package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-parameters.js.map +1 -1
  49. package/dist/v2/blocks/operation-code-sample/types.d.ts +1 -1
  50. package/dist/v2/blocks/operation-code-sample/types.d.ts.map +1 -1
  51. package/dist/v2/blocks/request-block/RequestBlock.vue.js +1 -1
  52. package/dist/v2/blocks/request-block/RequestBlock.vue.js.map +1 -1
  53. package/dist/v2/blocks/request-block/RequestBlock.vue.script.js +1 -1
  54. package/dist/v2/blocks/request-block/RequestBlock.vue.script.js.map +1 -1
  55. package/dist/v2/blocks/request-block/components/RequestBody.vue.d.ts.map +1 -1
  56. package/dist/v2/blocks/request-block/components/RequestBody.vue.js +1 -1
  57. package/dist/v2/blocks/request-block/components/RequestBody.vue.js.map +1 -1
  58. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js +3 -1
  59. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js.map +1 -1
  60. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.d.ts.map +1 -1
  61. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.js.map +1 -1
  62. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.script.js +4 -1
  63. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.script.js.map +1 -1
  64. package/dist/v2/blocks/request-block/components/RequestParams.vue.d.ts.map +1 -1
  65. package/dist/v2/blocks/request-block/components/RequestParams.vue.js.map +1 -1
  66. package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js +2 -1
  67. package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js.map +1 -1
  68. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts.map +1 -1
  69. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.js.map +1 -1
  70. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js +3 -1
  71. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js.map +1 -1
  72. package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.d.ts.map +1 -1
  73. package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.js.map +1 -1
  74. package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.script.js +2 -1
  75. package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.script.js.map +1 -1
  76. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.d.ts.map +1 -1
  77. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js +74 -3
  78. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js.map +1 -1
  79. package/dist/v2/blocks/response-block/ResponseBlock.vue.js +1 -1
  80. package/dist/v2/blocks/response-block/ResponseBlock.vue.js.map +1 -1
  81. package/dist/v2/blocks/response-block/ResponseBlock.vue.script.js +1 -1
  82. package/dist/v2/blocks/response-block/ResponseBlock.vue.script.js.map +1 -1
  83. package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.js.map +1 -1
  84. package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.script.js +1 -1
  85. package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.script.js.map +1 -1
  86. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.d.ts.map +1 -1
  87. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.js +1 -1
  88. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.js.map +1 -1
  89. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.script.js +54 -12
  90. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.script.js.map +1 -1
  91. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js +1 -1
  92. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js.map +1 -1
  93. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js +1 -1
  94. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js.map +1 -1
  95. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.d.ts.map +1 -1
  96. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.js.map +1 -1
  97. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.script.js +2 -1
  98. package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.script.js.map +1 -1
  99. package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.js.map +1 -1
  100. package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.script.js +1 -1
  101. package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.script.js.map +1 -1
  102. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.js +1 -1
  103. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.js.map +1 -1
  104. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.script.js +1 -1
  105. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.script.js.map +1 -1
  106. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.d.ts.map +1 -1
  107. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.js +1 -1
  108. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.js.map +1 -1
  109. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.script.js +2 -1
  110. package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.script.js.map +1 -1
  111. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts.map +1 -1
  112. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js +1 -1
  113. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js.map +1 -1
  114. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js +19 -4
  115. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js.map +1 -1
  116. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js +1 -1
  117. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js.map +1 -1
  118. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js +2 -1
  119. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js.map +1 -1
  120. package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.js.map +1 -1
  121. package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.script.js +3 -1
  122. package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.script.js.map +1 -1
  123. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.d.ts +1 -1
  124. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.d.ts.map +1 -1
  125. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.js.map +1 -1
  126. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js +5 -1
  127. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js.map +1 -1
  128. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.d.ts.map +1 -1
  129. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.js.map +1 -1
  130. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.script.js +2 -1
  131. package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.script.js.map +1 -1
  132. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.d.ts.map +1 -1
  133. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.js.map +1 -1
  134. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js +2 -1
  135. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js.map +1 -1
  136. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.d.ts +1 -1
  137. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.d.ts.map +1 -1
  138. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.js.map +1 -1
  139. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.script.js +1 -1
  140. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.script.js.map +1 -1
  141. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.d.ts.map +1 -1
  142. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.js.map +1 -1
  143. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.script.js +5 -1
  144. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.script.js.map +1 -1
  145. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.d.ts.map +1 -1
  146. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.js.map +1 -1
  147. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.script.js +2 -1
  148. package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.script.js.map +1 -1
  149. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.js.map +1 -1
  150. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js +1 -1
  151. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js.map +1 -1
  152. package/dist/v2/components/code-input/PillTooltipHost.vue.js.map +1 -1
  153. package/dist/v2/components/code-input/PillTooltipHost.vue.script.js +1 -1
  154. package/dist/v2/components/code-input/PillTooltipHost.vue.script.js.map +1 -1
  155. package/dist/v2/components/data-table/DataTable.vue.js.map +1 -1
  156. package/dist/v2/components/data-table/DataTable.vue.script.js +1 -1
  157. package/dist/v2/components/data-table/DataTable.vue.script.js.map +1 -1
  158. package/dist/v2/components/data-table/DataTableCell.vue.js.map +1 -1
  159. package/dist/v2/components/data-table/DataTableCell.vue.script.js +1 -1
  160. package/dist/v2/components/data-table/DataTableCell.vue.script.js.map +1 -1
  161. package/dist/v2/components/data-table/DataTableCheckbox.vue.d.ts.map +1 -1
  162. package/dist/v2/components/data-table/DataTableCheckbox.vue.js.map +1 -1
  163. package/dist/v2/components/data-table/DataTableCheckbox.vue.script.js +2 -1
  164. package/dist/v2/components/data-table/DataTableCheckbox.vue.script.js.map +1 -1
  165. package/dist/v2/components/data-table/DataTableHeader.vue.js.map +1 -1
  166. package/dist/v2/components/data-table/DataTableHeader.vue.script.js +1 -1
  167. package/dist/v2/components/data-table/DataTableHeader.vue.script.js.map +1 -1
  168. package/dist/v2/components/data-table/DataTableInput.vue.js +1 -1
  169. package/dist/v2/components/data-table/DataTableInput.vue.js.map +1 -1
  170. package/dist/v2/components/data-table/DataTableInput.vue.script.js +1 -1
  171. package/dist/v2/components/data-table/DataTableInput.vue.script.js.map +1 -1
  172. package/dist/v2/components/data-table/DataTableInputSelect.vue.js.map +1 -1
  173. package/dist/v2/components/data-table/DataTableInputSelect.vue.script.js +4 -1
  174. package/dist/v2/components/data-table/DataTableInputSelect.vue.script.js.map +1 -1
  175. package/dist/v2/components/forms/ConfirmationForm.vue.js.map +1 -1
  176. package/dist/v2/components/forms/ConfirmationForm.vue.script.js +1 -1
  177. package/dist/v2/components/forms/ConfirmationForm.vue.script.js.map +1 -1
  178. package/dist/v2/components/layout/CollapsibleSection.vue.js.map +1 -1
  179. package/dist/v2/components/layout/CollapsibleSection.vue.script.js +1 -1
  180. package/dist/v2/components/layout/CollapsibleSection.vue.script.js.map +1 -1
  181. package/dist/v2/components/modals/ModalClientContainer.vue.d.ts +1 -1
  182. package/dist/v2/components/modals/ModalClientContainer.vue.d.ts.map +1 -1
  183. package/dist/v2/components/modals/ModalClientContainer.vue.js +1 -1
  184. package/dist/v2/components/modals/ModalClientContainer.vue.js.map +1 -1
  185. package/dist/v2/components/modals/ModalClientContainer.vue.script.js +2 -1
  186. package/dist/v2/components/modals/ModalClientContainer.vue.script.js.map +1 -1
  187. package/dist/v2/components/server/ServerDropdown.vue.d.ts.map +1 -1
  188. package/dist/v2/components/server/ServerDropdown.vue.js.map +1 -1
  189. package/dist/v2/components/server/ServerDropdown.vue.script.js +3 -1
  190. package/dist/v2/components/server/ServerDropdown.vue.script.js.map +1 -1
  191. package/dist/v2/components/server/ServerDropdownItem.vue.d.ts.map +1 -1
  192. package/dist/v2/components/server/ServerDropdownItem.vue.js +1 -1
  193. package/dist/v2/components/server/ServerDropdownItem.vue.js.map +1 -1
  194. package/dist/v2/components/server/ServerDropdownItem.vue.script.js +2 -1
  195. package/dist/v2/components/server/ServerDropdownItem.vue.script.js.map +1 -1
  196. package/dist/v2/components/sidebar/Sidebar.vue.d.ts +1 -1
  197. package/dist/v2/components/sidebar/Sidebar.vue.d.ts.map +1 -1
  198. package/dist/v2/components/sidebar/Sidebar.vue.js.map +1 -1
  199. package/dist/v2/components/sidebar/Sidebar.vue.script.js +2 -1
  200. package/dist/v2/components/sidebar/Sidebar.vue.script.js.map +1 -1
  201. package/dist/v2/components/sidebar/SidebarMenu.vue.d.ts +1 -1
  202. package/dist/v2/components/sidebar/SidebarMenu.vue.d.ts.map +1 -1
  203. package/dist/v2/components/sidebar/SidebarMenu.vue.js.map +1 -1
  204. package/dist/v2/components/sidebar/SidebarMenu.vue.script.js +1 -1
  205. package/dist/v2/components/sidebar/SidebarMenu.vue.script.js.map +1 -1
  206. package/dist/v2/constants.js +1 -1
  207. package/dist/v2/features/command-palette/components/CommandActionForm.vue.d.ts +1 -1
  208. package/dist/v2/features/command-palette/components/CommandActionForm.vue.d.ts.map +1 -1
  209. package/dist/v2/features/command-palette/components/CommandActionForm.vue.js.map +1 -1
  210. package/dist/v2/features/command-palette/components/CommandActionForm.vue.script.js +2 -1
  211. package/dist/v2/features/command-palette/components/CommandActionForm.vue.script.js.map +1 -1
  212. package/dist/v2/features/environments/EnvironmentsList.vue.d.ts.map +1 -1
  213. package/dist/v2/features/environments/EnvironmentsList.vue.js.map +1 -1
  214. package/dist/v2/features/environments/EnvironmentsList.vue.script.js +2 -1
  215. package/dist/v2/features/environments/EnvironmentsList.vue.script.js.map +1 -1
  216. package/dist/v2/features/environments/components/Environment.vue.js.map +1 -1
  217. package/dist/v2/features/environments/components/Environment.vue.script.js +1 -1
  218. package/dist/v2/features/environments/components/Environment.vue.script.js.map +1 -1
  219. package/dist/v2/features/environments/components/EnvironmentColors.vue.js.map +1 -1
  220. package/dist/v2/features/environments/components/EnvironmentColors.vue.script.js +1 -1
  221. package/dist/v2/features/environments/components/EnvironmentColors.vue.script.js.map +1 -1
  222. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.d.ts +1 -1
  223. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.d.ts.map +1 -1
  224. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.js.map +1 -1
  225. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.script.js +1 -1
  226. package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.script.js.map +1 -1
  227. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.d.ts +1 -1
  228. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.d.ts.map +1 -1
  229. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.js.map +1 -1
  230. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.script.js +2 -1
  231. package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.script.js.map +1 -1
  232. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.d.ts.map +1 -1
  233. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.js.map +1 -1
  234. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js +2 -1
  235. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js.map +1 -1
  236. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.js +1 -1
  237. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.js.map +1 -1
  238. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.script.js +1 -1
  239. package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.script.js.map +1 -1
  240. package/dist/v2/features/modal/Modal.vue.d.ts +1 -1
  241. package/dist/v2/features/modal/Modal.vue.d.ts.map +1 -1
  242. package/dist/v2/features/modal/Modal.vue.js.map +1 -1
  243. package/dist/v2/features/modal/Modal.vue.script.js.map +1 -1
  244. package/dist/v2/features/modal/helpers/create-api-client-modal.d.ts +1 -1
  245. package/dist/v2/features/modal/helpers/create-api-client-modal.d.ts.map +1 -1
  246. package/dist/v2/features/modal/helpers/create-api-client-modal.js +1 -1
  247. package/dist/v2/features/modal/helpers/create-api-client-modal.js.map +1 -1
  248. package/dist/v2/features/modal/modal-events.d.ts +1 -1
  249. package/dist/v2/features/modal/modal-events.d.ts.map +1 -1
  250. package/dist/v2/features/modal/modal-events.js.map +1 -1
  251. package/dist/v2/features/search/components/DocumentSearchModal.vue.d.ts +1 -1
  252. package/dist/v2/features/search/components/DocumentSearchModal.vue.d.ts.map +1 -1
  253. package/dist/v2/features/search/components/DocumentSearchModal.vue.js +1 -1
  254. package/dist/v2/features/search/components/DocumentSearchModal.vue.js.map +1 -1
  255. package/dist/v2/features/search/components/DocumentSearchModal.vue.script.js +3 -1
  256. package/dist/v2/features/search/components/DocumentSearchModal.vue.script.js.map +1 -1
  257. package/dist/v2/features/search/components/SearchResult.vue.js.map +1 -1
  258. package/dist/v2/features/search/components/SearchResult.vue.script.js +1 -1
  259. package/dist/v2/features/search/components/SearchResult.vue.script.js.map +1 -1
  260. package/dist/vue-styles.css +105 -105
  261. package/package.json +11 -11
@@ -5,7 +5,7 @@ import { computed, createBlock, createElementBlock, createElementVNode, createTe
5
5
  var _hoisted_1 = ["src"];
6
6
  var _hoisted_2 = ["src", "type"];
7
7
  var _hoisted_3 = ["src", "type"];
8
- var _hoisted_4 = ["data", "type"];
8
+ var _hoisted_4 = ["src", "sandbox"];
9
9
  var ResponseBodyPreview_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
10
10
  __name: "ResponseBodyPreview",
11
11
  props: {
@@ -25,7 +25,46 @@ var ResponseBodyPreview_vue_vue_type_script_setup_true_lang_default = /* @__PURE
25
25
  if (value == null) return "";
26
26
  return String(value);
27
27
  });
28
+ /**
29
+ * Validates the `src` against an allow-list of safe protocols before it is
30
+ * passed to a rendering element. This blocks XSS vectors such as
31
+ * `javascript:` and `vbscript:` URIs and also prevents accidentally embedding
32
+ * a `data:text/html` payload that could execute script in the app origin.
33
+ *
34
+ * Allowed:
35
+ * - `blob:` (the standard case — generated client-side by `URL.createObjectURL`)
36
+ * - `http:` / `https:`
37
+ * - `data:` URIs whose MIME type is a known safe media kind
38
+ * (`image/*`, `video/*`, `audio/*`, `application/pdf`, `application/octet-stream`)
39
+ *
40
+ * Anything else (including malformed or relative URLs) collapses to an empty
41
+ * string so the template falls back to the "Preview unavailable" message.
42
+ */
43
+ const safeSrc = computed(() => {
44
+ if (!__props.src) return "";
45
+ if (/^data:/i.test(__props.src)) return /^data:(?:(?:image|video|audio)\/[a-z0-9.+-]+|application\/pdf|application\/octet-stream)[;,]/i.test(__props.src) ? __props.src : "";
46
+ try {
47
+ const parsed = new URL(__props.src);
48
+ if (parsed.protocol === "blob:" || parsed.protocol === "http:" || parsed.protocol === "https:") return __props.src;
49
+ } catch {}
50
+ return "";
51
+ });
28
52
  const error = ref(false);
53
+ /**
54
+ * Whether the embedded document is a PDF.
55
+ *
56
+ * PDFs are rendered by the browser's own PDF engine (e.g. PDFium), which runs
57
+ * in an isolated context that cannot reach this app's origin — its DOM,
58
+ * cookies or storage. A PDF's embedded JavaScript therefore cannot be used to
59
+ * attack us, and a strict `sandbox=""` does not confine that engine; it only
60
+ * prevents Chromium from loading the PDF viewer at all (it boots as a scripted
61
+ * extension page), leaving the user with a blank frame. So PDFs are rendered
62
+ * without the `sandbox` attribute, matching the original `<object>` behaviour.
63
+ *
64
+ * Everything else that reaches the iframe (notably `text/html`, the genuine
65
+ * XSS vector) keeps the strict empty sandbox.
66
+ */
67
+ const isPdf = computed(() => __props.type.trim().toLowerCase() === "application/pdf");
29
68
  watch(() => __props.src, () => error.value = false);
30
69
  return (_ctx, _cache) => {
31
70
  return __props.mode === "json" ? (openBlock(), createBlock(ResponseBodyRaw_default, {
@@ -33,39 +72,42 @@ var ResponseBodyPreview_vue_vue_type_script_setup_true_lang_default = /* @__PURE
33
72
  content: jsonPreviewContent.value,
34
73
  language: "json",
35
74
  prettyPrintJson: ""
36
- }, null, 8, ["content"])) : !error.value && __props.src ? (openBlock(), createElementBlock("div", {
75
+ }, null, 8, ["content"])) : !error.value && safeSrc.value ? (openBlock(), createElementBlock("div", {
37
76
  key: 1,
38
77
  class: normalizeClass(["flex justify-center overflow-auto rounded-b", { "bg-preview p-2": __props.alpha }])
39
78
  }, [__props.mode === "image" ? (openBlock(), createElementBlock("img", {
40
79
  key: 0,
41
80
  class: normalizeClass(["h-full max-w-full", { rounded: __props.alpha }]),
42
- src: __props.src,
81
+ src: safeSrc.value,
82
+ referrerpolicy: "no-referrer",
43
83
  onError: _cache[0] || (_cache[0] = ($event) => error.value = true)
44
84
  }, null, 42, _hoisted_1)) : __props.mode === "video" ? (openBlock(), createElementBlock("video", {
45
85
  key: 1,
46
86
  autoplay: "",
47
87
  controls: "",
88
+ referrerpolicy: "no-referrer",
48
89
  width: "100%",
49
90
  onError: _cache[1] || (_cache[1] = ($event) => error.value = true)
50
91
  }, [createElementVNode("source", {
51
- src: __props.src,
92
+ src: safeSrc.value,
52
93
  type: __props.type
53
94
  }, null, 8, _hoisted_2)], 32)) : __props.mode === "audio" ? (openBlock(), createElementBlock("audio", {
54
95
  key: 2,
55
96
  class: "my-12",
56
97
  controls: "",
98
+ referrerpolicy: "no-referrer",
57
99
  onError: _cache[2] || (_cache[2] = ($event) => error.value = true)
58
100
  }, [createElementVNode("source", {
59
- src: __props.src,
101
+ src: safeSrc.value,
60
102
  type: __props.type
61
- }, null, 8, _hoisted_3)], 32)) : (openBlock(), createElementBlock("object", {
103
+ }, null, 8, _hoisted_3)], 32)) : (openBlock(), createElementBlock("iframe", {
62
104
  key: 3,
63
- class: "aspect-[4/3] w-full",
64
- data: __props.src,
65
- type: __props.type,
66
- onError: _cache[3] || (_cache[3] = ($event) => error.value = true)
67
- }, null, 40, _hoisted_4))], 2)) : (openBlock(), createBlock(ResponseBodyInfo_default, { key: 2 }, {
68
- default: withCtx(() => [..._cache[4] || (_cache[4] = [createTextVNode("Preview unavailable", -1)])]),
105
+ class: "aspect-[4/3] w-full border-0",
106
+ src: safeSrc.value,
107
+ sandbox: isPdf.value ? void 0 : "",
108
+ referrerpolicy: "no-referrer"
109
+ }, null, 8, _hoisted_4))], 2)) : (openBlock(), createBlock(ResponseBodyInfo_default, { key: 2 }, {
110
+ default: withCtx(() => [..._cache[3] || (_cache[3] = [createTextVNode("Preview unavailable", -1)])]),
69
111
  _: 1
70
112
  }));
71
113
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBodyPreview.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyPreview.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\n\nimport { type MediaPreview } from '@/v2/blocks/response-block/helpers/media-types'\n\nimport ResponseBodyInfo from './ResponseBodyInfo.vue'\nimport ResponseBodyRaw from './ResponseBodyRaw.vue'\n\nconst {\n src,\n type,\n mode,\n alpha = false,\n content,\n} = defineProps<{\n src: string\n type: string\n mode: MediaPreview\n alpha?: boolean | undefined\n /** Decoded body; used when `mode` is `json` for pretty-printed preview (no JSON.parse round-trip). */\n content?: unknown\n}>()\n\nconst jsonPreviewContent = computed((): string => {\n const value = content\n if (typeof value === 'string') {\n return value\n }\n if (value == null) {\n return ''\n }\n return String(value)\n})\n\nconst error = ref(false)\n\nwatch(\n () => src,\n () => (error.value = false),\n)\n</script>\n<template>\n <ResponseBodyRaw\n v-if=\"mode === 'json'\"\n :content=\"jsonPreviewContent\"\n language=\"json\"\n prettyPrintJson />\n <div\n v-else-if=\"!error && src\"\n class=\"flex justify-center overflow-auto rounded-b\"\n :class=\"{ 'bg-preview p-2': alpha }\">\n <img\n v-if=\"mode === 'image'\"\n class=\"h-full max-w-full\"\n :class=\"{ rounded: alpha }\"\n :src=\"src\"\n @error=\"error = true\" />\n <video\n v-else-if=\"mode === 'video'\"\n autoplay\n controls\n width=\"100%\"\n @error=\"error = true\">\n <source\n :src=\"src\"\n :type=\"type\" />\n </video>\n <audio\n v-else-if=\"mode === 'audio'\"\n class=\"my-12\"\n controls\n @error=\"error = true\">\n <source\n :src=\"src\"\n :type=\"type\" />\n </audio>\n <object\n v-else\n class=\"aspect-[4/3] w-full\"\n :data=\"src\"\n :type=\"type\"\n @error=\"error = true\" />\n </div>\n <ResponseBodyInfo v-else>Preview unavailable</ResponseBodyInfo>\n</template>\n<style scoped>\n.light-mode .bg-preview {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23000' fill-opacity='10%25'%3E%3Crect width='8' height='8' /%3E%3Crect x='8' y='8' width='8' height='8' /%3E%3C/svg%3E\");\n}\n.dark-mode .bg-preview {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23FFF' fill-opacity='10%25'%3E%3Crect width='8' height='8' /%3E%3Crect x='8' y='8' width='8' height='8' /%3E%3C/svg%3E\");\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAuBA,MAAM,qBAAqB,eAAuB;GAChD,MAAM,QAAQ,QAAA;AACd,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,SAAS,KACX,QAAO;AAET,UAAO,OAAO,MAAK;IACpB;EAED,MAAM,QAAQ,IAAI,MAAK;AAEvB,cACQ,QAAA,WACC,MAAM,QAAQ,MACvB;;UAIU,QAAA,SAAI,UAAA,WAAA,EADZ,YAIoB,yBAAA;;IAFjB,SAAS,mBAAA;IACV,UAAS;IACT,iBAAA;gCAEY,MAAA,SAAS,QAAA,OAAA,WAAA,EADvB,mBAmCM,OAAA;;IAjCJ,OAAK,eAAA,CAAC,+CAA6C,EAAA,kBACvB,QAAA,OAAK,CAAA,CAAA;OAEzB,QAAA,SAAI,WAAA,WAAA,EADZ,mBAK0B,OAAA;;IAHxB,OAAK,eAAA,CAAC,qBAAmB,EAAA,SACN,QAAA,OAAK,CAAA,CAAA;IACvB,KAAK,QAAA;IACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,QAAK;+BAEF,QAAA,SAAI,WAAA,WAAA,EADjB,mBASQ,SAAA;;IAPN,UAAA;IACA,UAAA;IACA,OAAM;IACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,QAAK;OACb,mBAEiB,UAAA;IADd,KAAK,QAAA;IACL,MAAM,QAAA;oCAGE,QAAA,SAAI,WAAA,WAAA,EADjB,mBAQQ,SAAA;;IANN,OAAM;IACN,UAAA;IACC,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,QAAK;OACb,mBAEiB,UAAA;IADd,KAAK,QAAA;IACL,MAAM,QAAA;kDAEX,mBAK0B,UAAA;;IAHxB,OAAM;IACL,MAAM,QAAA;IACN,MAAM,QAAA;IACN,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,QAAK;mDAEjB,YAA+D,0BAAA,EAAA,KAAA,GAAA,EAAA;2BAAnB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAnB,uBAAmB,GAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"ResponseBodyPreview.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyPreview.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\n\nimport { type MediaPreview } from '@/v2/blocks/response-block/helpers/media-types'\n\nimport ResponseBodyInfo from './ResponseBodyInfo.vue'\nimport ResponseBodyRaw from './ResponseBodyRaw.vue'\n\nconst {\n src,\n type,\n mode,\n alpha = false,\n content,\n} = defineProps<{\n src: string\n type: string\n mode: MediaPreview\n alpha?: boolean | undefined\n /** Decoded body; used when `mode` is `json` for pretty-printed preview (no JSON.parse round-trip). */\n content?: unknown\n}>()\n\nconst jsonPreviewContent = computed((): string => {\n const value = content\n if (typeof value === 'string') {\n return value\n }\n if (value == null) {\n return ''\n }\n return String(value)\n})\n\n/**\n * Validates the `src` against an allow-list of safe protocols before it is\n * passed to a rendering element. This blocks XSS vectors such as\n * `javascript:` and `vbscript:` URIs and also prevents accidentally embedding\n * a `data:text/html` payload that could execute script in the app origin.\n *\n * Allowed:\n * - `blob:` (the standard case — generated client-side by `URL.createObjectURL`)\n * - `http:` / `https:`\n * - `data:` URIs whose MIME type is a known safe media kind\n * (`image/*`, `video/*`, `audio/*`, `application/pdf`, `application/octet-stream`)\n *\n * Anything else (including malformed or relative URLs) collapses to an empty\n * string so the template falls back to the \"Preview unavailable\" message.\n */\nconst safeSrc = computed((): string => {\n if (!src) {\n return ''\n }\n\n if (/^data:/i.test(src)) {\n // The MIME type must be one of the known safe kinds AND be terminated by\n // `;` (parameters / `;base64`) or `,` (start of the payload). Anchoring\n // at the terminator prevents prefix-matching tricks like\n // `data:image/png-but-actually-html,…`.\n return /^data:(?:(?:image|video|audio)\\/[a-z0-9.+-]+|application\\/pdf|application\\/octet-stream)[;,]/i.test(\n src,\n )\n ? src\n : ''\n }\n\n try {\n const parsed = new URL(src)\n if (\n parsed.protocol === 'blob:' ||\n parsed.protocol === 'http:' ||\n parsed.protocol === 'https:'\n ) {\n return src\n }\n } catch {\n // Malformed or relative URL — refuse to render.\n }\n\n return ''\n})\n\nconst error = ref(false)\n\n/**\n * Whether the embedded document is a PDF.\n *\n * PDFs are rendered by the browser's own PDF engine (e.g. PDFium), which runs\n * in an isolated context that cannot reach this app's origin — its DOM,\n * cookies or storage. A PDF's embedded JavaScript therefore cannot be used to\n * attack us, and a strict `sandbox=\"\"` does not confine that engine; it only\n * prevents Chromium from loading the PDF viewer at all (it boots as a scripted\n * extension page), leaving the user with a blank frame. So PDFs are rendered\n * without the `sandbox` attribute, matching the original `<object>` behaviour.\n *\n * Everything else that reaches the iframe (notably `text/html`, the genuine\n * XSS vector) keeps the strict empty sandbox.\n */\nconst isPdf = computed(\n (): boolean => type.trim().toLowerCase() === 'application/pdf',\n)\n\nwatch(\n () => src,\n () => (error.value = false),\n)\n</script>\n<template>\n <ResponseBodyRaw\n v-if=\"mode === 'json'\"\n :content=\"jsonPreviewContent\"\n language=\"json\"\n prettyPrintJson />\n <div\n v-else-if=\"!error && safeSrc\"\n class=\"flex justify-center overflow-auto rounded-b\"\n :class=\"{ 'bg-preview p-2': alpha }\">\n <img\n v-if=\"mode === 'image'\"\n class=\"h-full max-w-full\"\n :class=\"{ rounded: alpha }\"\n :src=\"safeSrc\"\n referrerpolicy=\"no-referrer\"\n @error=\"error = true\" />\n <video\n v-else-if=\"mode === 'video'\"\n autoplay\n controls\n referrerpolicy=\"no-referrer\"\n width=\"100%\"\n @error=\"error = true\">\n <source\n :src=\"safeSrc\"\n :type=\"type\" />\n </video>\n <audio\n v-else-if=\"mode === 'audio'\"\n class=\"my-12\"\n controls\n referrerpolicy=\"no-referrer\"\n @error=\"error = true\">\n <source\n :src=\"safeSrc\"\n :type=\"type\" />\n </audio>\n <!--\n `<object>` would execute scripts inside the embedded document in the\n app's origin, so we render arbitrary previews inside an `<iframe>`\n instead. Non-PDF documents (notably `text/html`) get an empty `sandbox`\n attribute, which disables scripts, forms, popups and same-origin access.\n PDFs are exempted (see `isPdf` above): the empty sandbox does not confine\n the browser's PDF engine, it only stops the viewer from loading at all.\n\n Note: an `error` event on `<iframe>` is not reliably fired for failed\n navigations — browsers usually fire `load` even when the response is\n blank or an error page, and a cross-origin sandboxed frame cannot be\n introspected from JavaScript. There is therefore no useful runtime\n fallback for an unreachable URL; the URL allow-list above is what\n keeps unsafe content out in the first place.\n -->\n <iframe\n v-else\n class=\"aspect-[4/3] w-full border-0\"\n :src=\"safeSrc\"\n :sandbox=\"isPdf ? undefined : ''\"\n referrerpolicy=\"no-referrer\" />\n </div>\n <ResponseBodyInfo v-else>Preview unavailable</ResponseBodyInfo>\n</template>\n<style scoped>\n.light-mode .bg-preview {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23000' fill-opacity='10%25'%3E%3Crect width='8' height='8' /%3E%3Crect x='8' y='8' width='8' height='8' /%3E%3C/svg%3E\");\n}\n.dark-mode .bg-preview {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23FFF' fill-opacity='10%25'%3E%3Crect width='8' height='8' /%3E%3Crect x='8' y='8' width='8' height='8' /%3E%3C/svg%3E\");\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAuBA,MAAM,qBAAqB,eAAuB;GAChD,MAAM,QAAQ,QAAA;AACd,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,SAAS,KACX,QAAO;AAET,UAAO,OAAO,MAAK;IACpB;;;;;;;;;;;;;;;;EAiBD,MAAM,UAAU,eAAuB;AACrC,OAAI,CAAC,QAAA,IACH,QAAO;AAGT,OAAI,UAAU,KAAK,QAAA,IAAI,CAKrB,QAAO,gGAAgG,KACrG,QAAA,IACF,GACI,QAAA,MACA;AAGN,OAAI;IACF,MAAM,SAAS,IAAI,IAAI,QAAA,IAAG;AAC1B,QACE,OAAO,aAAa,WACpB,OAAO,aAAa,WACpB,OAAO,aAAa,SAEpB,QAAO,QAAA;WAEH;AAIR,UAAO;IACR;EAED,MAAM,QAAQ,IAAI,MAAK;;;;;;;;;;;;;;;EAgBvB,MAAM,QAAQ,eACG,QAAA,KAAK,MAAM,CAAC,aAAa,KAAK,kBAC/C;AAEA,cACQ,QAAA,WACC,MAAM,QAAQ,MACvB;;UAIU,QAAA,SAAI,UAAA,WAAA,EADZ,YAIoB,yBAAA;;IAFjB,SAAS,mBAAA;IACV,UAAS;IACT,iBAAA;gCAEY,MAAA,SAAS,QAAA,SAAA,WAAA,EADvB,mBAqDM,OAAA;;IAnDJ,OAAK,eAAA,CAAC,+CAA6C,EAAA,kBACvB,QAAA,OAAK,CAAA,CAAA;OAEzB,QAAA,SAAI,WAAA,WAAA,EADZ,mBAM0B,OAAA;;IAJxB,OAAK,eAAA,CAAC,qBAAmB,EAAA,SACN,QAAA,OAAK,CAAA,CAAA;IACvB,KAAK,QAAA;IACN,gBAAe;IACd,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,QAAK;+BAEF,QAAA,SAAI,WAAA,WAAA,EADjB,mBAUQ,SAAA;;IARN,UAAA;IACA,UAAA;IACA,gBAAe;IACf,OAAM;IACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,QAAK;OACb,mBAEiB,UAAA;IADd,KAAK,QAAA;IACL,MAAM,QAAA;oCAGE,QAAA,SAAI,WAAA,WAAA,EADjB,mBASQ,SAAA;;IAPN,OAAM;IACN,UAAA;IACA,gBAAe;IACd,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,QAAK;OACb,mBAEiB,UAAA;IADd,KAAK,QAAA;IACL,MAAM,QAAA;kDAiBX,mBAKiC,UAAA;;IAH/B,OAAM;IACL,KAAK,QAAA;IACL,SAAS,MAAA,QAAQ,KAAA,IAAS;IAC3B,gBAAe;kDAEnB,YAA+D,0BAAA,EAAA,KAAA,GAAA,EAAA;2BAAnB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAnB,uBAAmB,GAAA,CAAA,EAAA,CAAA"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../../../_virtual/_plugin-vue_
2
2
  import ResponseBodyRaw_vue_vue_type_script_setup_true_lang_default from "./ResponseBodyRaw.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/v2/blocks/response-block/components/ResponseBodyRaw.vue
5
- var ResponseBodyRaw_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ResponseBodyRaw_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-20050fd6"]]);
5
+ var ResponseBodyRaw_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ResponseBodyRaw_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-8c1df828"]]);
6
6
  //#endregion
7
7
  export { ResponseBodyRaw_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBodyRaw.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyRaw.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarCodeBlockCopy } from '@scalar/components'\nimport { useCodeMirror, type CodeMirrorLanguage } from '@scalar/use-codemirror'\nimport { computed, ref, toRef, useId } from 'vue'\n\nimport { prettifyJsoncString } from '@/v2/blocks/response-block/helpers/prettify-jsonc-string'\n\nconst props = defineProps<{\n content: unknown\n language: CodeMirrorLanguage | undefined\n /** When true, JSON/JSONC strings are pretty-printed for the Preview tab (wire bytes stay unchanged in Raw). */\n prettyPrintJson?: boolean\n}>()\n\nconst codeMirrorRef = ref<HTMLDivElement | null>(null)\n/** Base id for the code block */\nconst id = useId()\n\nconst displayContent = computed((): string => {\n const { content, language, prettyPrintJson = false } = props\n if (typeof content !== 'string') {\n if (content == null) {\n return ''\n }\n return String(content)\n }\n if (prettyPrintJson && language === 'json') {\n return prettifyJsoncString(content)\n }\n return content\n})\n\nconst { codeMirror } = useCodeMirror({\n codeMirrorRef,\n readOnly: true,\n lineNumbers: true,\n content: toRef(displayContent),\n language: toRef(() => props.language),\n forceFoldGutter: true,\n})\n\n// Function to get current content\nconst getCurrentContent = () => {\n return codeMirror.value?.state.doc.toString() || ''\n}\n</script>\n<template>\n <div\n class=\"scalar-code-block group/code-block relative grid min-h-0 overflow-hidden p-px outline-none has-focus-visible:outline\"\n data-testid=\"response-body-raw\">\n <div\n class=\"custom-scroll relative pr-1\"\n tabindex=\"0\">\n <!-- CodeMirror container -->\n <div ref=\"codeMirrorRef\" />\n </div>\n <!-- Copy button -->\n <ScalarCodeBlockCopy\n v-if=\"getCurrentContent()\"\n :aria-controls=\"id\"\n class=\"absolute top-2 right-2\"\n :content=\"getCurrentContent()\" />\n </div>\n</template>\n<style scoped>\n:deep(.cm-editor) {\n background-color: transparent;\n font-size: var(--scalar-small);\n outline: none;\n}\n\n:deep(.cm-gutters) {\n background-color: var(--scalar-background-1);\n border-radius: var(--scalar-radius) 0 0 var(--scalar-radius);\n}\n\n:deep(.cm-scroller) {\n overflow: auto;\n min-width: 100%;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ResponseBodyRaw.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyRaw.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarCodeBlockCopy } from '@scalar/components/code-block'\nimport { useCodeMirror, type CodeMirrorLanguage } from '@scalar/use-codemirror'\nimport { computed, ref, toRef, useId } from 'vue'\n\nimport { prettifyJsoncString } from '@/v2/blocks/response-block/helpers/prettify-jsonc-string'\n\nconst props = defineProps<{\n content: unknown\n language: CodeMirrorLanguage | undefined\n /** When true, JSON/JSONC strings are pretty-printed for the Preview tab (wire bytes stay unchanged in Raw). */\n prettyPrintJson?: boolean\n}>()\n\nconst codeMirrorRef = ref<HTMLDivElement | null>(null)\n/** Base id for the code block */\nconst id = useId()\n\nconst displayContent = computed((): string => {\n const { content, language, prettyPrintJson = false } = props\n if (typeof content !== 'string') {\n if (content == null) {\n return ''\n }\n return String(content)\n }\n if (prettyPrintJson && language === 'json') {\n return prettifyJsoncString(content)\n }\n return content\n})\n\nconst { codeMirror } = useCodeMirror({\n codeMirrorRef,\n readOnly: true,\n lineNumbers: true,\n content: toRef(displayContent),\n language: toRef(() => props.language),\n forceFoldGutter: true,\n})\n\n// Function to get current content\nconst getCurrentContent = () => {\n return codeMirror.value?.state.doc.toString() || ''\n}\n</script>\n<template>\n <div\n class=\"scalar-code-block group/code-block relative grid min-h-0 overflow-hidden p-px outline-none has-focus-visible:outline\"\n data-testid=\"response-body-raw\">\n <div\n class=\"custom-scroll relative pr-1\"\n tabindex=\"0\">\n <!-- CodeMirror container -->\n <div ref=\"codeMirrorRef\" />\n </div>\n <!-- Copy button -->\n <ScalarCodeBlockCopy\n v-if=\"getCurrentContent()\"\n :aria-controls=\"id\"\n class=\"absolute top-2 right-2\"\n :content=\"getCurrentContent()\" />\n </div>\n</template>\n<style scoped>\n:deep(.cm-editor) {\n background-color: transparent;\n font-size: var(--scalar-small);\n outline: none;\n}\n\n:deep(.cm-gutters) {\n background-color: var(--scalar-background-1);\n border-radius: var(--scalar-radius) 0 0 var(--scalar-radius);\n}\n\n:deep(.cm-scroller) {\n overflow: auto;\n min-width: 100%;\n}\n</style>\n"],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  import { prettifyJsoncString } from "../helpers/prettify-jsonc-string.js";
2
2
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, ref, toRef, unref, useId } from "vue";
3
- import { ScalarCodeBlockCopy } from "@scalar/components";
4
3
  import { useCodeMirror } from "@scalar/use-codemirror";
4
+ import { ScalarCodeBlockCopy } from "@scalar/components/code-block";
5
5
  //#region src/v2/blocks/response-block/components/ResponseBodyRaw.vue?vue&type=script&setup=true&lang.ts
6
6
  var _hoisted_1 = {
7
7
  class: "scalar-code-block group/code-block relative grid min-h-0 overflow-hidden p-px outline-none has-focus-visible:outline",
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBodyRaw.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyRaw.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarCodeBlockCopy } from '@scalar/components'\nimport { useCodeMirror, type CodeMirrorLanguage } from '@scalar/use-codemirror'\nimport { computed, ref, toRef, useId } from 'vue'\n\nimport { prettifyJsoncString } from '@/v2/blocks/response-block/helpers/prettify-jsonc-string'\n\nconst props = defineProps<{\n content: unknown\n language: CodeMirrorLanguage | undefined\n /** When true, JSON/JSONC strings are pretty-printed for the Preview tab (wire bytes stay unchanged in Raw). */\n prettyPrintJson?: boolean\n}>()\n\nconst codeMirrorRef = ref<HTMLDivElement | null>(null)\n/** Base id for the code block */\nconst id = useId()\n\nconst displayContent = computed((): string => {\n const { content, language, prettyPrintJson = false } = props\n if (typeof content !== 'string') {\n if (content == null) {\n return ''\n }\n return String(content)\n }\n if (prettyPrintJson && language === 'json') {\n return prettifyJsoncString(content)\n }\n return content\n})\n\nconst { codeMirror } = useCodeMirror({\n codeMirrorRef,\n readOnly: true,\n lineNumbers: true,\n content: toRef(displayContent),\n language: toRef(() => props.language),\n forceFoldGutter: true,\n})\n\n// Function to get current content\nconst getCurrentContent = () => {\n return codeMirror.value?.state.doc.toString() || ''\n}\n</script>\n<template>\n <div\n class=\"scalar-code-block group/code-block relative grid min-h-0 overflow-hidden p-px outline-none has-focus-visible:outline\"\n data-testid=\"response-body-raw\">\n <div\n class=\"custom-scroll relative pr-1\"\n tabindex=\"0\">\n <!-- CodeMirror container -->\n <div ref=\"codeMirrorRef\" />\n </div>\n <!-- Copy button -->\n <ScalarCodeBlockCopy\n v-if=\"getCurrentContent()\"\n :aria-controls=\"id\"\n class=\"absolute top-2 right-2\"\n :content=\"getCurrentContent()\" />\n </div>\n</template>\n<style scoped>\n:deep(.cm-editor) {\n background-color: transparent;\n font-size: var(--scalar-small);\n outline: none;\n}\n\n:deep(.cm-gutters) {\n background-color: var(--scalar-background-1);\n border-radius: var(--scalar-radius) 0 0 var(--scalar-radius);\n}\n\n:deep(.cm-scroller) {\n overflow: auto;\n min-width: 100%;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAOA,MAAM,QAAQ;EAOd,MAAM,gBAAgB,IAA2B,KAAI;;EAErD,MAAM,KAAK,OAAM;EAgBjB,MAAM,EAAE,eAAe,cAAc;GACnC;GACA,UAAU;GACV,aAAa;GACb,SAAS,MAlBY,eAAuB;IAC5C,MAAM,EAAE,SAAS,UAAU,kBAAkB,UAAU;AACvD,QAAI,OAAO,YAAY,UAAU;AAC/B,SAAI,WAAW,KACb,QAAO;AAET,YAAO,OAAO,QAAO;;AAEvB,QAAI,mBAAmB,aAAa,OAClC,QAAO,oBAAoB,QAAO;AAEpC,WAAO;KACR,CAM+B;GAC9B,UAAU,YAAY,MAAM,SAAS;GACrC,iBAAiB;GAClB,CAAA;EAGD,MAAM,0BAA0B;AAC9B,UAAO,WAAW,OAAO,MAAM,IAAI,UAAU,IAAI;;;uBAIjD,mBAeM,OAfN,YAeM,CAZJ,mBAKM,OALN,YAKM,CADJ,mBAA2B,OAAA;aAAlB;IAAJ,KAAI;oBAIH,mBAAiB,IAAA,WAAA,EADzB,YAImC,MAAA,oBAAA,EAAA;;IAFhC,iBAAe,MAAA,GAAE;IAClB,OAAM;IACL,SAAS,mBAAiB"}
1
+ {"version":3,"file":"ResponseBodyRaw.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyRaw.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarCodeBlockCopy } from '@scalar/components/code-block'\nimport { useCodeMirror, type CodeMirrorLanguage } from '@scalar/use-codemirror'\nimport { computed, ref, toRef, useId } from 'vue'\n\nimport { prettifyJsoncString } from '@/v2/blocks/response-block/helpers/prettify-jsonc-string'\n\nconst props = defineProps<{\n content: unknown\n language: CodeMirrorLanguage | undefined\n /** When true, JSON/JSONC strings are pretty-printed for the Preview tab (wire bytes stay unchanged in Raw). */\n prettyPrintJson?: boolean\n}>()\n\nconst codeMirrorRef = ref<HTMLDivElement | null>(null)\n/** Base id for the code block */\nconst id = useId()\n\nconst displayContent = computed((): string => {\n const { content, language, prettyPrintJson = false } = props\n if (typeof content !== 'string') {\n if (content == null) {\n return ''\n }\n return String(content)\n }\n if (prettyPrintJson && language === 'json') {\n return prettifyJsoncString(content)\n }\n return content\n})\n\nconst { codeMirror } = useCodeMirror({\n codeMirrorRef,\n readOnly: true,\n lineNumbers: true,\n content: toRef(displayContent),\n language: toRef(() => props.language),\n forceFoldGutter: true,\n})\n\n// Function to get current content\nconst getCurrentContent = () => {\n return codeMirror.value?.state.doc.toString() || ''\n}\n</script>\n<template>\n <div\n class=\"scalar-code-block group/code-block relative grid min-h-0 overflow-hidden p-px outline-none has-focus-visible:outline\"\n data-testid=\"response-body-raw\">\n <div\n class=\"custom-scroll relative pr-1\"\n tabindex=\"0\">\n <!-- CodeMirror container -->\n <div ref=\"codeMirrorRef\" />\n </div>\n <!-- Copy button -->\n <ScalarCodeBlockCopy\n v-if=\"getCurrentContent()\"\n :aria-controls=\"id\"\n class=\"absolute top-2 right-2\"\n :content=\"getCurrentContent()\" />\n </div>\n</template>\n<style scoped>\n:deep(.cm-editor) {\n background-color: transparent;\n font-size: var(--scalar-small);\n outline: none;\n}\n\n:deep(.cm-gutters) {\n background-color: var(--scalar-background-1);\n border-radius: var(--scalar-radius) 0 0 var(--scalar-radius);\n}\n\n:deep(.cm-scroller) {\n overflow: auto;\n min-width: 100%;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAOA,MAAM,QAAQ;EAOd,MAAM,gBAAgB,IAA2B,KAAI;;EAErD,MAAM,KAAK,OAAM;EAgBjB,MAAM,EAAE,eAAe,cAAc;GACnC;GACA,UAAU;GACV,aAAa;GACb,SAAS,MAlBY,eAAuB;IAC5C,MAAM,EAAE,SAAS,UAAU,kBAAkB,UAAU;AACvD,QAAI,OAAO,YAAY,UAAU;AAC/B,SAAI,WAAW,KACb,QAAO;AAET,YAAO,OAAO,QAAO;;AAEvB,QAAI,mBAAmB,aAAa,OAClC,QAAO,oBAAoB,QAAO;AAEpC,WAAO;KACR,CAM+B;GAC9B,UAAU,YAAY,MAAM,SAAS;GACrC,iBAAiB;GAClB,CAAA;EAGD,MAAM,0BAA0B;AAC9B,UAAO,WAAW,OAAO,MAAM,IAAI,UAAU,IAAI;;;uBAIjD,mBAeM,OAfN,YAeM,CAZJ,mBAKM,OALN,YAKM,CADJ,mBAA2B,OAAA;aAAlB;IAAJ,KAAI;oBAIH,mBAAiB,IAAA,WAAA,EADzB,YAImC,MAAA,oBAAA,EAAA;;IAFhC,iBAAe,MAAA,GAAE;IAClB,OAAM;IACL,SAAS,mBAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBodyStreaming.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyStreaming.vue"],"names":[],"mappings":"AAwKA,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAA;CAChD,CAAC;AAuPF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"ResponseBodyStreaming.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyStreaming.vue"],"names":[],"mappings":"AAkKA,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAA;CAChD,CAAC;AAuPF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBodyStreaming.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyStreaming.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n ScalarButton,\n ScalarLoading,\n useLoadingState,\n} from '@scalar/components'\nimport { nextTick, onBeforeUnmount, ref, watch } from 'vue'\n\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nconst { reader } = defineProps<{\n reader: ReadableStreamDefaultReader<Uint8Array>\n}>()\n\nconst loader = useLoadingState()\n\nconst textContent = ref('')\nconst errorRef = ref<Error | null>(null)\nconst contentContainer = ref<HTMLElement | null>(null)\n\n/** Track the current reader to prevent race conditions when reader changes */\nconst currentReader = ref<ReadableStreamDefaultReader<Uint8Array> | null>(null)\n\n/** Current decoder instance - reset for each new stream to prevent buffer corruption */\nconst decoder = ref<TextDecoder | null>(null)\n\n/**\n * Scrolls the content container to the bottom\n */\nconst scrollToBottom = () => {\n if (contentContainer.value) {\n contentContainer.value.scrollTop = contentContainer.value.scrollHeight\n }\n}\n\n// Watch for changes in textContent and scroll to bottom\nwatch(textContent, async () => {\n // Use nextTick to ensure the DOM has updated\n await nextTick(scrollToBottom)\n})\n\n/**\n * Reads the stream and appends the content\n */\nasync function readStream(\n streamReader: ReadableStreamDefaultReader<Uint8Array>,\n) {\n try {\n while (loader.isLoading && currentReader.value === streamReader) {\n const { done, value } = await streamReader.read()\n\n // Stop if this reader is no longer the current one\n if (currentReader.value !== streamReader) {\n break\n }\n\n if (done) {\n void loader.clear()\n break\n }\n\n // Decode the Uint8Array to string and append to content\n if (value && decoder.value) {\n textContent.value += decoder.value.decode(value, { stream: true })\n }\n }\n } catch (error) {\n // Only handle the error if this is still the current reader\n if (currentReader.value === streamReader) {\n console.error('Error reading stream:', error)\n void loader.clear()\n errorRef.value = error as Error\n }\n } finally {\n // Only finalize decoding if this is still the current reader\n if (currentReader.value === streamReader && decoder.value) {\n // Make sure to decode any remaining bytes\n textContent.value += decoder.value.decode()\n }\n }\n}\n\nconst startStreaming = () => {\n // Cancel the old reader if it exists\n if (currentReader.value) {\n currentReader.value.cancel()\n }\n\n // Set the new reader as current\n currentReader.value = reader\n\n // Reset state and start new stream\n // Create a new decoder instance to prevent buffer corruption from previous streams\n decoder.value = new TextDecoder()\n loader.start()\n textContent.value = ''\n errorRef.value = null\n void readStream(reader)\n}\n\nconst stopStreaming = () => {\n if (currentReader.value) {\n currentReader.value.cancel()\n currentReader.value = null\n }\n void loader.clear()\n}\n\n// Start streaming when the reader changes\nwatch(() => reader, startStreaming, { immediate: true })\n\nonBeforeUnmount(stopStreaming)\n</script>\n\n<template>\n <CollapsibleSection class=\"max-h-content overflow-y-hidden\">\n <template #title>\n <div class=\"flex w-full items-center justify-between\">\n <div>Body</div>\n <div\n v-if=\"loader.isLoading\"\n class=\"mr-2 flex items-center gap-2\">\n <ScalarLoading\n :loadingState=\"loader\"\n size=\"xs\" />\n <span class=\"text-c-2\"> Listening… </span>\n </div>\n </div>\n </template>\n <template\n v-if=\"loader.isLoading\"\n #actions>\n <ScalarButton\n size=\"sm\"\n variant=\"ghost\"\n @click=\"stopStreaming\">\n Cancel\n </ScalarButton>\n </template>\n\n <div\n ref=\"contentContainer\"\n class=\"text-xxs font-code h-full overflow-auto leading-6 whitespace-pre-wrap\">\n <template v-if=\"errorRef\">\n <div class=\"text-red bg-b-danger sticky top-0 border-b p-2\">\n {{ errorRef.message }}\n </div>\n </template>\n <template v-if=\"textContent\">\n <div class=\"p-2\">\n {{ textContent }}\n </div>\n </template>\n </div>\n </CollapsibleSection>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ResponseBodyStreaming.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyStreaming.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarLoading, useLoadingState } from '@scalar/components/loading'\nimport { nextTick, onBeforeUnmount, ref, watch } from 'vue'\n\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nconst { reader } = defineProps<{\n reader: ReadableStreamDefaultReader<Uint8Array>\n}>()\n\nconst loader = useLoadingState()\n\nconst textContent = ref('')\nconst errorRef = ref<Error | null>(null)\nconst contentContainer = ref<HTMLElement | null>(null)\n\n/** Track the current reader to prevent race conditions when reader changes */\nconst currentReader = ref<ReadableStreamDefaultReader<Uint8Array> | null>(null)\n\n/** Current decoder instance - reset for each new stream to prevent buffer corruption */\nconst decoder = ref<TextDecoder | null>(null)\n\n/**\n * Scrolls the content container to the bottom\n */\nconst scrollToBottom = () => {\n if (contentContainer.value) {\n contentContainer.value.scrollTop = contentContainer.value.scrollHeight\n }\n}\n\n// Watch for changes in textContent and scroll to bottom\nwatch(textContent, async () => {\n // Use nextTick to ensure the DOM has updated\n await nextTick(scrollToBottom)\n})\n\n/**\n * Reads the stream and appends the content\n */\nasync function readStream(\n streamReader: ReadableStreamDefaultReader<Uint8Array>,\n) {\n try {\n while (loader.isLoading && currentReader.value === streamReader) {\n const { done, value } = await streamReader.read()\n\n // Stop if this reader is no longer the current one\n if (currentReader.value !== streamReader) {\n break\n }\n\n if (done) {\n void loader.clear()\n break\n }\n\n // Decode the Uint8Array to string and append to content\n if (value && decoder.value) {\n textContent.value += decoder.value.decode(value, { stream: true })\n }\n }\n } catch (error) {\n // Only handle the error if this is still the current reader\n if (currentReader.value === streamReader) {\n console.error('Error reading stream:', error)\n void loader.clear()\n errorRef.value = error as Error\n }\n } finally {\n // Only finalize decoding if this is still the current reader\n if (currentReader.value === streamReader && decoder.value) {\n // Make sure to decode any remaining bytes\n textContent.value += decoder.value.decode()\n }\n }\n}\n\nconst startStreaming = () => {\n // Cancel the old reader if it exists\n if (currentReader.value) {\n currentReader.value.cancel()\n }\n\n // Set the new reader as current\n currentReader.value = reader\n\n // Reset state and start new stream\n // Create a new decoder instance to prevent buffer corruption from previous streams\n decoder.value = new TextDecoder()\n loader.start()\n textContent.value = ''\n errorRef.value = null\n void readStream(reader)\n}\n\nconst stopStreaming = () => {\n if (currentReader.value) {\n currentReader.value.cancel()\n currentReader.value = null\n }\n void loader.clear()\n}\n\n// Start streaming when the reader changes\nwatch(() => reader, startStreaming, { immediate: true })\n\nonBeforeUnmount(stopStreaming)\n</script>\n\n<template>\n <CollapsibleSection class=\"max-h-content overflow-y-hidden\">\n <template #title>\n <div class=\"flex w-full items-center justify-between\">\n <div>Body</div>\n <div\n v-if=\"loader.isLoading\"\n class=\"mr-2 flex items-center gap-2\">\n <ScalarLoading\n :loadingState=\"loader\"\n size=\"xs\" />\n <span class=\"text-c-2\"> Listening… </span>\n </div>\n </div>\n </template>\n <template\n v-if=\"loader.isLoading\"\n #actions>\n <ScalarButton\n size=\"sm\"\n variant=\"ghost\"\n @click=\"stopStreaming\">\n Cancel\n </ScalarButton>\n </template>\n\n <div\n ref=\"contentContainer\"\n class=\"text-xxs font-code h-full overflow-auto leading-6 whitespace-pre-wrap\">\n <template v-if=\"errorRef\">\n <div class=\"text-red bg-b-danger sticky top-0 border-b p-2\">\n {{ errorRef.message }}\n </div>\n </template>\n <template v-if=\"textContent\">\n <div class=\"p-2\">\n {{ textContent }}\n </div>\n </template>\n </div>\n </CollapsibleSection>\n</template>\n"],"mappings":""}
@@ -1,6 +1,7 @@
1
1
  import CollapsibleSection_default from "../../../components/layout/CollapsibleSection.vue.js";
2
2
  import { createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, nextTick, onBeforeUnmount, openBlock, ref, toDisplayString, unref, watch, withCtx } from "vue";
3
- import { ScalarButton, ScalarLoading, useLoadingState } from "@scalar/components";
3
+ import { ScalarButton } from "@scalar/components/button";
4
+ import { ScalarLoading, useLoadingState } from "@scalar/components/loading";
4
5
  //#region src/v2/blocks/response-block/components/ResponseBodyStreaming.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = { class: "flex w-full items-center justify-between" };
6
7
  var _hoisted_2 = {
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBodyStreaming.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyStreaming.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n ScalarButton,\n ScalarLoading,\n useLoadingState,\n} from '@scalar/components'\nimport { nextTick, onBeforeUnmount, ref, watch } from 'vue'\n\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nconst { reader } = defineProps<{\n reader: ReadableStreamDefaultReader<Uint8Array>\n}>()\n\nconst loader = useLoadingState()\n\nconst textContent = ref('')\nconst errorRef = ref<Error | null>(null)\nconst contentContainer = ref<HTMLElement | null>(null)\n\n/** Track the current reader to prevent race conditions when reader changes */\nconst currentReader = ref<ReadableStreamDefaultReader<Uint8Array> | null>(null)\n\n/** Current decoder instance - reset for each new stream to prevent buffer corruption */\nconst decoder = ref<TextDecoder | null>(null)\n\n/**\n * Scrolls the content container to the bottom\n */\nconst scrollToBottom = () => {\n if (contentContainer.value) {\n contentContainer.value.scrollTop = contentContainer.value.scrollHeight\n }\n}\n\n// Watch for changes in textContent and scroll to bottom\nwatch(textContent, async () => {\n // Use nextTick to ensure the DOM has updated\n await nextTick(scrollToBottom)\n})\n\n/**\n * Reads the stream and appends the content\n */\nasync function readStream(\n streamReader: ReadableStreamDefaultReader<Uint8Array>,\n) {\n try {\n while (loader.isLoading && currentReader.value === streamReader) {\n const { done, value } = await streamReader.read()\n\n // Stop if this reader is no longer the current one\n if (currentReader.value !== streamReader) {\n break\n }\n\n if (done) {\n void loader.clear()\n break\n }\n\n // Decode the Uint8Array to string and append to content\n if (value && decoder.value) {\n textContent.value += decoder.value.decode(value, { stream: true })\n }\n }\n } catch (error) {\n // Only handle the error if this is still the current reader\n if (currentReader.value === streamReader) {\n console.error('Error reading stream:', error)\n void loader.clear()\n errorRef.value = error as Error\n }\n } finally {\n // Only finalize decoding if this is still the current reader\n if (currentReader.value === streamReader && decoder.value) {\n // Make sure to decode any remaining bytes\n textContent.value += decoder.value.decode()\n }\n }\n}\n\nconst startStreaming = () => {\n // Cancel the old reader if it exists\n if (currentReader.value) {\n currentReader.value.cancel()\n }\n\n // Set the new reader as current\n currentReader.value = reader\n\n // Reset state and start new stream\n // Create a new decoder instance to prevent buffer corruption from previous streams\n decoder.value = new TextDecoder()\n loader.start()\n textContent.value = ''\n errorRef.value = null\n void readStream(reader)\n}\n\nconst stopStreaming = () => {\n if (currentReader.value) {\n currentReader.value.cancel()\n currentReader.value = null\n }\n void loader.clear()\n}\n\n// Start streaming when the reader changes\nwatch(() => reader, startStreaming, { immediate: true })\n\nonBeforeUnmount(stopStreaming)\n</script>\n\n<template>\n <CollapsibleSection class=\"max-h-content overflow-y-hidden\">\n <template #title>\n <div class=\"flex w-full items-center justify-between\">\n <div>Body</div>\n <div\n v-if=\"loader.isLoading\"\n class=\"mr-2 flex items-center gap-2\">\n <ScalarLoading\n :loadingState=\"loader\"\n size=\"xs\" />\n <span class=\"text-c-2\"> Listening… </span>\n </div>\n </div>\n </template>\n <template\n v-if=\"loader.isLoading\"\n #actions>\n <ScalarButton\n size=\"sm\"\n variant=\"ghost\"\n @click=\"stopStreaming\">\n Cancel\n </ScalarButton>\n </template>\n\n <div\n ref=\"contentContainer\"\n class=\"text-xxs font-code h-full overflow-auto leading-6 whitespace-pre-wrap\">\n <template v-if=\"errorRef\">\n <div class=\"text-red bg-b-danger sticky top-0 border-b p-2\">\n {{ errorRef.message }}\n </div>\n </template>\n <template v-if=\"textContent\">\n <div class=\"p-2\">\n {{ textContent }}\n </div>\n </template>\n </div>\n </CollapsibleSection>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAcA,MAAM,SAAS,iBAAgB;EAE/B,MAAM,cAAc,IAAI,GAAE;EAC1B,MAAM,WAAW,IAAkB,KAAI;EACvC,MAAM,mBAAmB,IAAwB,KAAI;;EAGrD,MAAM,gBAAgB,IAAoD,KAAI;;EAG9E,MAAM,UAAU,IAAwB,KAAI;;;;EAK5C,MAAM,uBAAuB;AAC3B,OAAI,iBAAiB,MACnB,kBAAiB,MAAM,YAAY,iBAAiB,MAAM;;AAK9D,QAAM,aAAa,YAAY;AAE7B,SAAM,SAAS,eAAc;IAC9B;;;;EAKD,eAAe,WACb,cACA;AACA,OAAI;AACF,WAAO,OAAO,aAAa,cAAc,UAAU,cAAc;KAC/D,MAAM,EAAE,MAAM,UAAU,MAAM,aAAa,MAAK;AAGhD,SAAI,cAAc,UAAU,aAC1B;AAGF,SAAI,MAAM;AACH,aAAO,OAAM;AAClB;;AAIF,SAAI,SAAS,QAAQ,MACnB,aAAY,SAAS,QAAQ,MAAM,OAAO,OAAO,EAAE,QAAQ,MAAM,CAAA;;YAG9D,OAAO;AAEd,QAAI,cAAc,UAAU,cAAc;AACxC,aAAQ,MAAM,yBAAyB,MAAK;AACvC,YAAO,OAAM;AAClB,cAAS,QAAQ;;aAEX;AAER,QAAI,cAAc,UAAU,gBAAgB,QAAQ,MAElD,aAAY,SAAS,QAAQ,MAAM,QAAO;;;EAKhD,MAAM,uBAAuB;AAE3B,OAAI,cAAc,MAChB,eAAc,MAAM,QAAO;AAI7B,iBAAc,QAAQ,QAAA;AAItB,WAAQ,QAAQ,IAAI,aAAY;AAChC,UAAO,OAAM;AACb,eAAY,QAAQ;AACpB,YAAS,QAAQ;AACZ,cAAW,QAAA,OAAM;;EAGxB,MAAM,sBAAsB;AAC1B,OAAI,cAAc,OAAO;AACvB,kBAAc,MAAM,QAAO;AAC3B,kBAAc,QAAQ;;AAEnB,UAAO,OAAM;;AAIpB,cAAY,QAAA,QAAQ,gBAAgB,EAAE,WAAW,MAAM,CAAA;AAEvD,kBAAgB,cAAa;;uBAI3B,YAuCqB,MAAA,2BAAA,EAAA,EAvCD,OAAM,mCAAiC,EAAA,YAAA;IAC9C,OAAK,cAWR,CAVN,mBAUM,OAVN,YAUM,CAAA,OAAA,OAAA,OAAA,KATJ,mBAAe,OAAA,MAAV,QAAI,GAAA,GAED,MAAA,OAAM,CAAC,aAAA,WAAA,EADf,mBAOM,OAPN,YAOM,CAJJ,YAEc,MAAA,cAAA,EAAA;KADX,cAAc,MAAA,OAAM;KACrB,MAAK;6DACP,mBAA0C,QAAA,EAApC,OAAM,YAAU,EAAC,gBAAY,GAAA,EAAA,CAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,CAAA,CAAA,CAAA;2BA4BnC,CAbN,mBAaM,OAAA;cAZA;KAAJ,KAAI;KACJ,OAAM;QACU,SAAA,SAAA,WAAA,EACd,mBAEM,OAFN,YAEM,gBADD,SAAA,MAAS,QAAO,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA,EAGP,YAAA,SAAA,WAAA,EACd,mBAEM,OAFN,YAEM,gBADD,YAAA,MAAW,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,EAAA,IAAA,CAAA,CAAA;;OApBZ,MAAA,OAAM,CAAC,YAAA;UACZ;sBAMc,CALf,YAKe,MAAA,aAAA,EAAA;KAJb,MAAK;KACL,SAAQ;KACP,SAAO;;4BAEV,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFyB,YAEzB,GAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"ResponseBodyStreaming.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyStreaming.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarLoading, useLoadingState } from '@scalar/components/loading'\nimport { nextTick, onBeforeUnmount, ref, watch } from 'vue'\n\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nconst { reader } = defineProps<{\n reader: ReadableStreamDefaultReader<Uint8Array>\n}>()\n\nconst loader = useLoadingState()\n\nconst textContent = ref('')\nconst errorRef = ref<Error | null>(null)\nconst contentContainer = ref<HTMLElement | null>(null)\n\n/** Track the current reader to prevent race conditions when reader changes */\nconst currentReader = ref<ReadableStreamDefaultReader<Uint8Array> | null>(null)\n\n/** Current decoder instance - reset for each new stream to prevent buffer corruption */\nconst decoder = ref<TextDecoder | null>(null)\n\n/**\n * Scrolls the content container to the bottom\n */\nconst scrollToBottom = () => {\n if (contentContainer.value) {\n contentContainer.value.scrollTop = contentContainer.value.scrollHeight\n }\n}\n\n// Watch for changes in textContent and scroll to bottom\nwatch(textContent, async () => {\n // Use nextTick to ensure the DOM has updated\n await nextTick(scrollToBottom)\n})\n\n/**\n * Reads the stream and appends the content\n */\nasync function readStream(\n streamReader: ReadableStreamDefaultReader<Uint8Array>,\n) {\n try {\n while (loader.isLoading && currentReader.value === streamReader) {\n const { done, value } = await streamReader.read()\n\n // Stop if this reader is no longer the current one\n if (currentReader.value !== streamReader) {\n break\n }\n\n if (done) {\n void loader.clear()\n break\n }\n\n // Decode the Uint8Array to string and append to content\n if (value && decoder.value) {\n textContent.value += decoder.value.decode(value, { stream: true })\n }\n }\n } catch (error) {\n // Only handle the error if this is still the current reader\n if (currentReader.value === streamReader) {\n console.error('Error reading stream:', error)\n void loader.clear()\n errorRef.value = error as Error\n }\n } finally {\n // Only finalize decoding if this is still the current reader\n if (currentReader.value === streamReader && decoder.value) {\n // Make sure to decode any remaining bytes\n textContent.value += decoder.value.decode()\n }\n }\n}\n\nconst startStreaming = () => {\n // Cancel the old reader if it exists\n if (currentReader.value) {\n currentReader.value.cancel()\n }\n\n // Set the new reader as current\n currentReader.value = reader\n\n // Reset state and start new stream\n // Create a new decoder instance to prevent buffer corruption from previous streams\n decoder.value = new TextDecoder()\n loader.start()\n textContent.value = ''\n errorRef.value = null\n void readStream(reader)\n}\n\nconst stopStreaming = () => {\n if (currentReader.value) {\n currentReader.value.cancel()\n currentReader.value = null\n }\n void loader.clear()\n}\n\n// Start streaming when the reader changes\nwatch(() => reader, startStreaming, { immediate: true })\n\nonBeforeUnmount(stopStreaming)\n</script>\n\n<template>\n <CollapsibleSection class=\"max-h-content overflow-y-hidden\">\n <template #title>\n <div class=\"flex w-full items-center justify-between\">\n <div>Body</div>\n <div\n v-if=\"loader.isLoading\"\n class=\"mr-2 flex items-center gap-2\">\n <ScalarLoading\n :loadingState=\"loader\"\n size=\"xs\" />\n <span class=\"text-c-2\"> Listening… </span>\n </div>\n </div>\n </template>\n <template\n v-if=\"loader.isLoading\"\n #actions>\n <ScalarButton\n size=\"sm\"\n variant=\"ghost\"\n @click=\"stopStreaming\">\n Cancel\n </ScalarButton>\n </template>\n\n <div\n ref=\"contentContainer\"\n class=\"text-xxs font-code h-full overflow-auto leading-6 whitespace-pre-wrap\">\n <template v-if=\"errorRef\">\n <div class=\"text-red bg-b-danger sticky top-0 border-b p-2\">\n {{ errorRef.message }}\n </div>\n </template>\n <template v-if=\"textContent\">\n <div class=\"p-2\">\n {{ textContent }}\n </div>\n </template>\n </div>\n </CollapsibleSection>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAWA,MAAM,SAAS,iBAAgB;EAE/B,MAAM,cAAc,IAAI,GAAE;EAC1B,MAAM,WAAW,IAAkB,KAAI;EACvC,MAAM,mBAAmB,IAAwB,KAAI;;EAGrD,MAAM,gBAAgB,IAAoD,KAAI;;EAG9E,MAAM,UAAU,IAAwB,KAAI;;;;EAK5C,MAAM,uBAAuB;AAC3B,OAAI,iBAAiB,MACnB,kBAAiB,MAAM,YAAY,iBAAiB,MAAM;;AAK9D,QAAM,aAAa,YAAY;AAE7B,SAAM,SAAS,eAAc;IAC9B;;;;EAKD,eAAe,WACb,cACA;AACA,OAAI;AACF,WAAO,OAAO,aAAa,cAAc,UAAU,cAAc;KAC/D,MAAM,EAAE,MAAM,UAAU,MAAM,aAAa,MAAK;AAGhD,SAAI,cAAc,UAAU,aAC1B;AAGF,SAAI,MAAM;AACH,aAAO,OAAM;AAClB;;AAIF,SAAI,SAAS,QAAQ,MACnB,aAAY,SAAS,QAAQ,MAAM,OAAO,OAAO,EAAE,QAAQ,MAAM,CAAA;;YAG9D,OAAO;AAEd,QAAI,cAAc,UAAU,cAAc;AACxC,aAAQ,MAAM,yBAAyB,MAAK;AACvC,YAAO,OAAM;AAClB,cAAS,QAAQ;;aAEX;AAER,QAAI,cAAc,UAAU,gBAAgB,QAAQ,MAElD,aAAY,SAAS,QAAQ,MAAM,QAAO;;;EAKhD,MAAM,uBAAuB;AAE3B,OAAI,cAAc,MAChB,eAAc,MAAM,QAAO;AAI7B,iBAAc,QAAQ,QAAA;AAItB,WAAQ,QAAQ,IAAI,aAAY;AAChC,UAAO,OAAM;AACb,eAAY,QAAQ;AACpB,YAAS,QAAQ;AACZ,cAAW,QAAA,OAAM;;EAGxB,MAAM,sBAAsB;AAC1B,OAAI,cAAc,OAAO;AACvB,kBAAc,MAAM,QAAO;AAC3B,kBAAc,QAAQ;;AAEnB,UAAO,OAAM;;AAIpB,cAAY,QAAA,QAAQ,gBAAgB,EAAE,WAAW,MAAM,CAAA;AAEvD,kBAAgB,cAAa;;uBAI3B,YAuCqB,MAAA,2BAAA,EAAA,EAvCD,OAAM,mCAAiC,EAAA,YAAA;IAC9C,OAAK,cAWR,CAVN,mBAUM,OAVN,YAUM,CAAA,OAAA,OAAA,OAAA,KATJ,mBAAe,OAAA,MAAV,QAAI,GAAA,GAED,MAAA,OAAM,CAAC,aAAA,WAAA,EADf,mBAOM,OAPN,YAOM,CAJJ,YAEc,MAAA,cAAA,EAAA;KADX,cAAc,MAAA,OAAM;KACrB,MAAK;6DACP,mBAA0C,QAAA,EAApC,OAAM,YAAU,EAAC,gBAAY,GAAA,EAAA,CAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,CAAA,CAAA,CAAA;2BA4BnC,CAbN,mBAaM,OAAA;cAZA;KAAJ,KAAI;KACJ,OAAM;QACU,SAAA,SAAA,WAAA,EACd,mBAEM,OAFN,YAEM,gBADD,SAAA,MAAS,QAAO,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA,EAGP,YAAA,SAAA,WAAA,EACd,mBAEM,OAFN,YAEM,gBADD,YAAA,MAAW,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,EAAA,IAAA,CAAA,CAAA;;OApBZ,MAAA,OAAM,CAAC,YAAA;UACZ;sBAMc,CALf,YAKe,MAAA,aAAA,EAAA;KAJb,MAAK;KACL,SAAQ;KACP,SAAO;;4BAEV,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFyB,YAEzB,GAAA,CAAA,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBodyVirtual.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyVirtual.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarVirtualText } from '@scalar/components'\nimport { formatJsonOrYamlString } from '@scalar/oas-utils/helpers'\nimport { computed } from 'vue'\n\nimport { processResponseBody } from '@/v2/blocks/response-block/helpers/process-response-body'\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nimport ResponseBodyDownload from './ResponseBodyDownload.vue'\n\nconst { content, data, headers } = defineProps<{\n content: string\n data: unknown\n headers: { name: string; value: string }[]\n}>()\n\nconst textContent = computed(() => formatJsonOrYamlString(content))\n\nconst responseBody = computed(() =>\n processResponseBody({\n data,\n headers,\n }),\n)\n</script>\n\n<template>\n <CollapsibleSection class=\"!max-h-100% response-body-virtual overflow-x-auto\">\n <template #title>Body</template>\n <template\n v-if=\"responseBody.dataUrl\"\n #actions>\n <ResponseBodyDownload\n :filename=\"responseBody.attachmentFilename\"\n :href=\"responseBody.dataUrl\"\n :type=\"responseBody.mimeType?.essence\" />\n </template>\n <div class=\"font-code text-xxs rounded-t border-x border-t px-2.5 py-1.5\">\n This response body is massive! Syntax highlighting won't work here.\n </div>\n <ScalarVirtualText\n containerClass=\"custom-scroll scalar-code-block border rounded-b flex flex-1 max-h-screen\"\n contentClass=\"language-plaintext whitespace-pre font-code text-base\"\n :lineHeight=\"20\"\n searchable\n :text=\"textContent\" />\n </CollapsibleSection>\n</template>\n\n<style>\n.response-body-virtual[data-headlessui-state='open'],\n.response-body-virtual[data-headlessui-state='open'] .diclosure-panel {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ResponseBodyVirtual.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyVirtual.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarVirtualText } from '@scalar/components/virtual-text'\nimport { formatJsonOrYamlString } from '@scalar/oas-utils/helpers'\nimport { computed } from 'vue'\n\nimport { processResponseBody } from '@/v2/blocks/response-block/helpers/process-response-body'\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nimport ResponseBodyDownload from './ResponseBodyDownload.vue'\n\nconst { content, data, headers } = defineProps<{\n content: string\n data: unknown\n headers: { name: string; value: string }[]\n}>()\n\nconst textContent = computed(() => formatJsonOrYamlString(content))\n\nconst responseBody = computed(() =>\n processResponseBody({\n data,\n headers,\n }),\n)\n</script>\n\n<template>\n <CollapsibleSection class=\"!max-h-100% response-body-virtual overflow-x-auto\">\n <template #title>Body</template>\n <template\n v-if=\"responseBody.dataUrl\"\n #actions>\n <ResponseBodyDownload\n :filename=\"responseBody.attachmentFilename\"\n :href=\"responseBody.dataUrl\"\n :type=\"responseBody.mimeType?.essence\" />\n </template>\n <div class=\"font-code text-xxs rounded-t border-x border-t px-2.5 py-1.5\">\n This response body is massive! Syntax highlighting won't work here.\n </div>\n <ScalarVirtualText\n containerClass=\"custom-scroll scalar-code-block border rounded-b flex flex-1 max-h-screen\"\n contentClass=\"language-plaintext whitespace-pre font-code text-base\"\n :lineHeight=\"20\"\n searchable\n :text=\"textContent\" />\n </CollapsibleSection>\n</template>\n\n<style>\n.response-body-virtual[data-headlessui-state='open'],\n.response-body-virtual[data-headlessui-state='open'] .diclosure-panel {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n}\n</style>\n"],"mappings":""}
@@ -2,8 +2,8 @@ import CollapsibleSection_default from "../../../components/layout/CollapsibleSe
2
2
  import { processResponseBody } from "../helpers/process-response-body.js";
3
3
  import ResponseBodyDownload_default from "./ResponseBodyDownload.vue.js";
4
4
  import { computed, createBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
5
- import { ScalarVirtualText } from "@scalar/components";
6
5
  import { formatJsonOrYamlString } from "@scalar/oas-utils/helpers";
6
+ import { ScalarVirtualText } from "@scalar/components/virtual-text";
7
7
  //#region src/v2/blocks/response-block/components/ResponseBodyVirtual.vue?vue&type=script&setup=true&lang.ts
8
8
  var ResponseBodyVirtual_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
9
9
  __name: "ResponseBodyVirtual",
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBodyVirtual.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyVirtual.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarVirtualText } from '@scalar/components'\nimport { formatJsonOrYamlString } from '@scalar/oas-utils/helpers'\nimport { computed } from 'vue'\n\nimport { processResponseBody } from '@/v2/blocks/response-block/helpers/process-response-body'\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nimport ResponseBodyDownload from './ResponseBodyDownload.vue'\n\nconst { content, data, headers } = defineProps<{\n content: string\n data: unknown\n headers: { name: string; value: string }[]\n}>()\n\nconst textContent = computed(() => formatJsonOrYamlString(content))\n\nconst responseBody = computed(() =>\n processResponseBody({\n data,\n headers,\n }),\n)\n</script>\n\n<template>\n <CollapsibleSection class=\"!max-h-100% response-body-virtual overflow-x-auto\">\n <template #title>Body</template>\n <template\n v-if=\"responseBody.dataUrl\"\n #actions>\n <ResponseBodyDownload\n :filename=\"responseBody.attachmentFilename\"\n :href=\"responseBody.dataUrl\"\n :type=\"responseBody.mimeType?.essence\" />\n </template>\n <div class=\"font-code text-xxs rounded-t border-x border-t px-2.5 py-1.5\">\n This response body is massive! Syntax highlighting won't work here.\n </div>\n <ScalarVirtualText\n containerClass=\"custom-scroll scalar-code-block border rounded-b flex flex-1 max-h-screen\"\n contentClass=\"language-plaintext whitespace-pre font-code text-base\"\n :lineHeight=\"20\"\n searchable\n :text=\"textContent\" />\n </CollapsibleSection>\n</template>\n\n<style>\n.response-body-virtual[data-headlessui-state='open'],\n.response-body-virtual[data-headlessui-state='open'] .diclosure-panel {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;EAgBA,MAAM,cAAc,eAAe,uBAAuB,QAAA,QAAQ,CAAA;EAElE,MAAM,eAAe,eACnB,oBAAoB;GAClB,MAAG,QAAA;GACH,SAAM,QAAA;GACP,CAAC,CACJ;;uBAIE,YAmBqB,MAAA,2BAAA,EAAA,EAnBD,OAAM,qDAAmD,EAAA,YAAA;IAChE,OAAK,cAAK,CAAA,OAAA,OAAA,OAAA,KAAA,gBAAJ,QAAI,GAAA,EAAA,CAAA;2BAWf,CAAA,OAAA,OAAA,OAAA,KAFN,mBAEM,OAAA,EAFD,OAAM,gEAA8D,EAAC,yEAE1E,GAAA,GACA,YAKwB,MAAA,kBAAA,EAAA;KAJtB,gBAAe;KACf,cAAa;KACZ,YAAY;KACb,YAAA;KACC,MAAM,YAAA;;;OAfD,aAAA,MAAa,UAAA;UAClB;sBAI0C,CAH3C,YAG2C,8BAAA;KAFxC,UAAU,aAAA,MAAa;KACvB,MAAM,aAAA,MAAa;KACnB,MAAM,aAAA,MAAa,UAAU"}
1
+ {"version":3,"file":"ResponseBodyVirtual.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseBodyVirtual.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarVirtualText } from '@scalar/components/virtual-text'\nimport { formatJsonOrYamlString } from '@scalar/oas-utils/helpers'\nimport { computed } from 'vue'\n\nimport { processResponseBody } from '@/v2/blocks/response-block/helpers/process-response-body'\nimport { CollapsibleSection } from '@/v2/components/layout'\n\nimport ResponseBodyDownload from './ResponseBodyDownload.vue'\n\nconst { content, data, headers } = defineProps<{\n content: string\n data: unknown\n headers: { name: string; value: string }[]\n}>()\n\nconst textContent = computed(() => formatJsonOrYamlString(content))\n\nconst responseBody = computed(() =>\n processResponseBody({\n data,\n headers,\n }),\n)\n</script>\n\n<template>\n <CollapsibleSection class=\"!max-h-100% response-body-virtual overflow-x-auto\">\n <template #title>Body</template>\n <template\n v-if=\"responseBody.dataUrl\"\n #actions>\n <ResponseBodyDownload\n :filename=\"responseBody.attachmentFilename\"\n :href=\"responseBody.dataUrl\"\n :type=\"responseBody.mimeType?.essence\" />\n </template>\n <div class=\"font-code text-xxs rounded-t border-x border-t px-2.5 py-1.5\">\n This response body is massive! Syntax highlighting won't work here.\n </div>\n <ScalarVirtualText\n containerClass=\"custom-scroll scalar-code-block border rounded-b flex flex-1 max-h-screen\"\n contentClass=\"language-plaintext whitespace-pre font-code text-base\"\n :lineHeight=\"20\"\n searchable\n :text=\"textContent\" />\n </CollapsibleSection>\n</template>\n\n<style>\n.response-body-virtual[data-headlessui-state='open'],\n.response-body-virtual[data-headlessui-state='open'] .diclosure-panel {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;EAgBA,MAAM,cAAc,eAAe,uBAAuB,QAAA,QAAQ,CAAA;EAElE,MAAM,eAAe,eACnB,oBAAoB;GAClB,MAAG,QAAA;GACH,SAAM,QAAA;GACP,CAAC,CACJ;;uBAIE,YAmBqB,MAAA,2BAAA,EAAA,EAnBD,OAAM,qDAAmD,EAAA,YAAA;IAChE,OAAK,cAAK,CAAA,OAAA,OAAA,OAAA,KAAA,gBAAJ,QAAI,GAAA,EAAA,CAAA;2BAWf,CAAA,OAAA,OAAA,OAAA,KAFN,mBAEM,OAAA,EAFD,OAAM,gEAA8D,EAAC,yEAE1E,GAAA,GACA,YAKwB,MAAA,kBAAA,EAAA;KAJtB,gBAAe;KACf,cAAa;KACZ,YAAY;KACb,YAAA;KACC,MAAM,YAAA;;;OAfD,aAAA,MAAa,UAAA;UAClB;sBAI0C,CAH3C,YAG2C,8BAAA;KAFxC,UAAU,aAAA,MAAa;KACvB,MAAM,aAAA,MAAa;KACnB,MAAM,aAAA,MAAa,UAAU"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../../../_virtual/_plugin-vue_
2
2
  import ResponseEmpty_vue_vue_type_script_setup_true_lang_default from "./ResponseEmpty.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/v2/blocks/response-block/components/ResponseEmpty.vue
5
- var ResponseEmpty_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ResponseEmpty_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-ab8886a2"]]);
5
+ var ResponseEmpty_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ResponseEmpty_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-0895623d"]]);
6
6
  //#endregion
7
7
  export { ResponseEmpty_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseEmpty.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseEmpty.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarHotkey } from '@scalar/components'\n\nimport Computer from '@/assets/computer.ascii?raw'\nimport { ScalarAsciiArt } from '@/components/ScalarAsciiArt'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nconst { totalPerformedRequests, layout, appVersion } = defineProps<{\n /** Client layout */\n layout: ClientLayout\n /** Total number of performed requests */\n totalPerformedRequests: number\n /** Application version */\n appVersion: string\n}>()\n\nconst emits = defineEmits<{\n (e: 'addRequest'): void\n (e: 'sendRequest'): void\n (e: 'openCommandPalette'): void\n}>()\n</script>\n<template>\n <div class=\"flex-center relative flex flex-1 flex-col gap-6 p-2 capitalize\">\n <div\n class=\"flex h-[calc(100%_-_50px)] flex-col items-center justify-center\"\n :class=\"{\n 'hidden opacity-0': totalPerformedRequests > 0 && layout !== 'modal',\n }\">\n <div\n v-if=\"layout !== 'modal'\"\n class=\"scalar-version-number\">\n Scalar App V{{ appVersion }} Beta\n <div class=\"mt-2\">\n <a\n href=\"https://github.com/scalar/scalar/issues/2669\"\n target=\"_blank\">\n Roadmap\n </a>\n </div>\n </div>\n <a\n class=\"gitbook-show scalar-version-number\"\n href=\"https://www.scalar.com\"\n target=\"_blank\">\n Powered By Scalar.com\n </a>\n <ScalarAsciiArt\n :art=\"Computer\"\n class=\"text-c-3\" />\n </div>\n\n <div\n class=\"text-c-3 right-4 mt-auto flex w-full flex-col items-end gap-2 text-sm\">\n <button\n v-if=\"layout !== 'modal'\"\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('openCommandPalette')\">\n Get Started\n <ScalarHotkey\n hotkey=\"k\"\n :modifier=\"['default']\" />\n </button>\n <button\n v-if=\"layout === 'desktop'\"\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('addRequest')\">\n New Request\n <ScalarHotkey hotkey=\"N\" />\n </button>\n <button\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('sendRequest')\">\n Send Request\n <ScalarHotkey hotkey=\"↵\" />\n </button>\n </div>\n </div>\n</template>\n<style scoped>\n.scalar-version-number {\n transform: skew(0deg, 13deg);\n width: 76px;\n height: 76px;\n position: absolute;\n margin-left: -36px;\n font-size: 8px;\n font-family: var(--scalar-font-code);\n line-height: 11px;\n margin-top: -113px;\n border-radius: 9px 9px 16px 12px;\n box-shadow: inset 2px 0px 0 2px var(--scalar-background-2);\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-transform: initial;\n text-decoration-color: var(--scalar-color-3);\n}\n.scalar-version-number a {\n font-weight: bold;\n font-weight: bold;\n background: var(--scalar-background-2);\n padding: 2px 4px;\n border-radius: 3px;\n text-decoration: none;\n border: 0.5px solid var(--scalar-border-color);\n}\n\n.gitbook-show {\n display: none;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ResponseEmpty.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseEmpty.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarHotkey } from '@scalar/components/hotkey'\n\nimport Computer from '@/assets/computer.ascii?raw'\nimport { ScalarAsciiArt } from '@/components/ScalarAsciiArt'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nconst { totalPerformedRequests, layout, appVersion } = defineProps<{\n /** Client layout */\n layout: ClientLayout\n /** Total number of performed requests */\n totalPerformedRequests: number\n /** Application version */\n appVersion: string\n}>()\n\nconst emits = defineEmits<{\n (e: 'addRequest'): void\n (e: 'sendRequest'): void\n (e: 'openCommandPalette'): void\n}>()\n</script>\n<template>\n <div class=\"flex-center relative flex flex-1 flex-col gap-6 p-2 capitalize\">\n <div\n class=\"flex h-[calc(100%_-_50px)] flex-col items-center justify-center\"\n :class=\"{\n 'hidden opacity-0': totalPerformedRequests > 0 && layout !== 'modal',\n }\">\n <div\n v-if=\"layout !== 'modal'\"\n class=\"scalar-version-number\">\n Scalar App V{{ appVersion }} Beta\n <div class=\"mt-2\">\n <a\n href=\"https://github.com/scalar/scalar/issues/2669\"\n target=\"_blank\">\n Roadmap\n </a>\n </div>\n </div>\n <a\n class=\"gitbook-show scalar-version-number\"\n href=\"https://www.scalar.com\"\n target=\"_blank\">\n Powered By Scalar.com\n </a>\n <ScalarAsciiArt\n :art=\"Computer\"\n class=\"text-c-3\" />\n </div>\n\n <div\n class=\"text-c-3 right-4 mt-auto flex w-full flex-col items-end gap-2 text-sm\">\n <button\n v-if=\"layout !== 'modal'\"\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('openCommandPalette')\">\n Get Started\n <ScalarHotkey\n hotkey=\"k\"\n :modifier=\"['default']\" />\n </button>\n <button\n v-if=\"layout === 'desktop'\"\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('addRequest')\">\n New Request\n <ScalarHotkey hotkey=\"N\" />\n </button>\n <button\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('sendRequest')\">\n Send Request\n <ScalarHotkey hotkey=\"↵\" />\n </button>\n </div>\n </div>\n</template>\n<style scoped>\n.scalar-version-number {\n transform: skew(0deg, 13deg);\n width: 76px;\n height: 76px;\n position: absolute;\n margin-left: -36px;\n font-size: 8px;\n font-family: var(--scalar-font-code);\n line-height: 11px;\n margin-top: -113px;\n border-radius: 9px 9px 16px 12px;\n box-shadow: inset 2px 0px 0 2px var(--scalar-background-2);\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-transform: initial;\n text-decoration-color: var(--scalar-color-3);\n}\n.scalar-version-number a {\n font-weight: bold;\n font-weight: bold;\n background: var(--scalar-background-2);\n padding: 2px 4px;\n border-radius: 3px;\n text-decoration: none;\n border: 0.5px solid var(--scalar-border-color);\n}\n\n.gitbook-show {\n display: none;\n}\n</style>\n"],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  import ScalarAsciiArt_default from "../../../../components/ScalarAsciiArt/ScalarAsciiArt.vue.js";
2
2
  import computer_default from "../../../../assets/computer.ascii.virtual.js";
3
3
  import { createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, toDisplayString, unref } from "vue";
4
- import { ScalarHotkey } from "@scalar/components";
4
+ import { ScalarHotkey } from "@scalar/components/hotkey";
5
5
  //#region src/v2/blocks/response-block/components/ResponseEmpty.vue?vue&type=script&setup=true&lang.ts
6
6
  var _hoisted_1 = { class: "flex-center relative flex flex-1 flex-col gap-6 p-2 capitalize" };
7
7
  var _hoisted_2 = {
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseEmpty.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseEmpty.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarHotkey } from '@scalar/components'\n\nimport Computer from '@/assets/computer.ascii?raw'\nimport { ScalarAsciiArt } from '@/components/ScalarAsciiArt'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nconst { totalPerformedRequests, layout, appVersion } = defineProps<{\n /** Client layout */\n layout: ClientLayout\n /** Total number of performed requests */\n totalPerformedRequests: number\n /** Application version */\n appVersion: string\n}>()\n\nconst emits = defineEmits<{\n (e: 'addRequest'): void\n (e: 'sendRequest'): void\n (e: 'openCommandPalette'): void\n}>()\n</script>\n<template>\n <div class=\"flex-center relative flex flex-1 flex-col gap-6 p-2 capitalize\">\n <div\n class=\"flex h-[calc(100%_-_50px)] flex-col items-center justify-center\"\n :class=\"{\n 'hidden opacity-0': totalPerformedRequests > 0 && layout !== 'modal',\n }\">\n <div\n v-if=\"layout !== 'modal'\"\n class=\"scalar-version-number\">\n Scalar App V{{ appVersion }} Beta\n <div class=\"mt-2\">\n <a\n href=\"https://github.com/scalar/scalar/issues/2669\"\n target=\"_blank\">\n Roadmap\n </a>\n </div>\n </div>\n <a\n class=\"gitbook-show scalar-version-number\"\n href=\"https://www.scalar.com\"\n target=\"_blank\">\n Powered By Scalar.com\n </a>\n <ScalarAsciiArt\n :art=\"Computer\"\n class=\"text-c-3\" />\n </div>\n\n <div\n class=\"text-c-3 right-4 mt-auto flex w-full flex-col items-end gap-2 text-sm\">\n <button\n v-if=\"layout !== 'modal'\"\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('openCommandPalette')\">\n Get Started\n <ScalarHotkey\n hotkey=\"k\"\n :modifier=\"['default']\" />\n </button>\n <button\n v-if=\"layout === 'desktop'\"\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('addRequest')\">\n New Request\n <ScalarHotkey hotkey=\"N\" />\n </button>\n <button\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('sendRequest')\">\n Send Request\n <ScalarHotkey hotkey=\"↵\" />\n </button>\n </div>\n </div>\n</template>\n<style scoped>\n.scalar-version-number {\n transform: skew(0deg, 13deg);\n width: 76px;\n height: 76px;\n position: absolute;\n margin-left: -36px;\n font-size: 8px;\n font-family: var(--scalar-font-code);\n line-height: 11px;\n margin-top: -113px;\n border-radius: 9px 9px 16px 12px;\n box-shadow: inset 2px 0px 0 2px var(--scalar-background-2);\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-transform: initial;\n text-decoration-color: var(--scalar-color-3);\n}\n.scalar-version-number a {\n font-weight: bold;\n font-weight: bold;\n background: var(--scalar-background-2);\n padding: 2px 4px;\n border-radius: 3px;\n text-decoration: none;\n border: 0.5px solid var(--scalar-border-color);\n}\n\n.gitbook-show {\n display: none;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,QAAQ;;uBAOZ,mBAyDM,OAzDN,YAyDM,CAxDJ,mBA0BM,OAAA,EAzBJ,OAAK,eAAA,CAAC,mEAAiE,EAAA,oBACjC,QAAA,yBAAsB,KAAQ,QAAA,WAAM,SAAA,CAAA,CAAA,EAAA,EAAA;IAIlE,QAAA,WAAM,WAAA,WAAA,EADd,mBAWM,OAXN,YAWM,CAAA,gBAT0B,kBAClB,gBAAG,QAAA,WAAU,GAAG,UAC5B,EAAA,EAAA,OAAA,OAAA,OAAA,KAAA,mBAMM,OAAA,EAND,OAAM,QAAM,EAAA,CACf,mBAII,KAAA;KAHF,MAAK;KACL,QAAO;OAAS,YAElB,CAAA,EAAA,GAAA,EAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;8BAGJ,mBAKI,KAAA;KAJF,OAAM;KACN,MAAK;KACL,QAAO;OAAS,2BAElB,GAAA;IACA,YAEqB,MAAA,uBAAA,EAAA;KADlB,KAAK,MAAA,iBAAQ;KACd,OAAM;;UAGV,mBA2BM,OA3BN,YA2BM;IAxBI,QAAA,WAAM,WAAA,WAAA,EADd,mBASS,UAAA;;KAPP,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAK,qBAAA;kDAAwB,iBAErC,GAAA,GAAA,YAE4B,MAAA,aAAA,EAAA;KAD1B,QAAO;KACN,UAAU,CAAA,UAAW;;IAGlB,QAAA,WAAM,aAAA,WAAA,EADd,mBAOS,UAAA;;KALP,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAK,aAAA;kDAAgB,iBAE7B,GAAA,GAAA,YAA2B,MAAA,aAAA,EAAA,EAAb,QAAO,KAAG,CAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;IAE1B,mBAMS,UAAA;KALP,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAK,cAAA;kDAAiB,kBAE9B,GAAA,GAAA,YAA2B,MAAA,aAAA,EAAA,EAAb,QAAO,KAAG,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ResponseEmpty.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseEmpty.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarHotkey } from '@scalar/components/hotkey'\n\nimport Computer from '@/assets/computer.ascii?raw'\nimport { ScalarAsciiArt } from '@/components/ScalarAsciiArt'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nconst { totalPerformedRequests, layout, appVersion } = defineProps<{\n /** Client layout */\n layout: ClientLayout\n /** Total number of performed requests */\n totalPerformedRequests: number\n /** Application version */\n appVersion: string\n}>()\n\nconst emits = defineEmits<{\n (e: 'addRequest'): void\n (e: 'sendRequest'): void\n (e: 'openCommandPalette'): void\n}>()\n</script>\n<template>\n <div class=\"flex-center relative flex flex-1 flex-col gap-6 p-2 capitalize\">\n <div\n class=\"flex h-[calc(100%_-_50px)] flex-col items-center justify-center\"\n :class=\"{\n 'hidden opacity-0': totalPerformedRequests > 0 && layout !== 'modal',\n }\">\n <div\n v-if=\"layout !== 'modal'\"\n class=\"scalar-version-number\">\n Scalar App V{{ appVersion }} Beta\n <div class=\"mt-2\">\n <a\n href=\"https://github.com/scalar/scalar/issues/2669\"\n target=\"_blank\">\n Roadmap\n </a>\n </div>\n </div>\n <a\n class=\"gitbook-show scalar-version-number\"\n href=\"https://www.scalar.com\"\n target=\"_blank\">\n Powered By Scalar.com\n </a>\n <ScalarAsciiArt\n :art=\"Computer\"\n class=\"text-c-3\" />\n </div>\n\n <div\n class=\"text-c-3 right-4 mt-auto flex w-full flex-col items-end gap-2 text-sm\">\n <button\n v-if=\"layout !== 'modal'\"\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('openCommandPalette')\">\n Get Started\n <ScalarHotkey\n hotkey=\"k\"\n :modifier=\"['default']\" />\n </button>\n <button\n v-if=\"layout === 'desktop'\"\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('addRequest')\">\n New Request\n <ScalarHotkey hotkey=\"N\" />\n </button>\n <button\n class=\"flex items-center gap-1.5\"\n type=\"button\"\n @click=\"emits('sendRequest')\">\n Send Request\n <ScalarHotkey hotkey=\"↵\" />\n </button>\n </div>\n </div>\n</template>\n<style scoped>\n.scalar-version-number {\n transform: skew(0deg, 13deg);\n width: 76px;\n height: 76px;\n position: absolute;\n margin-left: -36px;\n font-size: 8px;\n font-family: var(--scalar-font-code);\n line-height: 11px;\n margin-top: -113px;\n border-radius: 9px 9px 16px 12px;\n box-shadow: inset 2px 0px 0 2px var(--scalar-background-2);\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-transform: initial;\n text-decoration-color: var(--scalar-color-3);\n}\n.scalar-version-number a {\n font-weight: bold;\n font-weight: bold;\n background: var(--scalar-background-2);\n padding: 2px 4px;\n border-radius: 3px;\n text-decoration: none;\n border: 0.5px solid var(--scalar-border-color);\n}\n\n.gitbook-show {\n display: none;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,QAAQ;;uBAOZ,mBAyDM,OAzDN,YAyDM,CAxDJ,mBA0BM,OAAA,EAzBJ,OAAK,eAAA,CAAC,mEAAiE,EAAA,oBACjC,QAAA,yBAAsB,KAAQ,QAAA,WAAM,SAAA,CAAA,CAAA,EAAA,EAAA;IAIlE,QAAA,WAAM,WAAA,WAAA,EADd,mBAWM,OAXN,YAWM,CAAA,gBAT0B,kBAClB,gBAAG,QAAA,WAAU,GAAG,UAC5B,EAAA,EAAA,OAAA,OAAA,OAAA,KAAA,mBAMM,OAAA,EAND,OAAM,QAAM,EAAA,CACf,mBAII,KAAA;KAHF,MAAK;KACL,QAAO;OAAS,YAElB,CAAA,EAAA,GAAA,EAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;8BAGJ,mBAKI,KAAA;KAJF,OAAM;KACN,MAAK;KACL,QAAO;OAAS,2BAElB,GAAA;IACA,YAEqB,MAAA,uBAAA,EAAA;KADlB,KAAK,MAAA,iBAAQ;KACd,OAAM;;UAGV,mBA2BM,OA3BN,YA2BM;IAxBI,QAAA,WAAM,WAAA,WAAA,EADd,mBASS,UAAA;;KAPP,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAK,qBAAA;kDAAwB,iBAErC,GAAA,GAAA,YAE4B,MAAA,aAAA,EAAA;KAD1B,QAAO;KACN,UAAU,CAAA,UAAW;;IAGlB,QAAA,WAAM,aAAA,WAAA,EADd,mBAOS,UAAA;;KALP,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAK,aAAA;kDAAgB,iBAE7B,GAAA,GAAA,YAA2B,MAAA,aAAA,EAAA,EAAb,QAAO,KAAG,CAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;IAE1B,mBAMS,UAAA;KALP,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAK,cAAA;kDAAiB,kBAE9B,GAAA,GAAA,YAA2B,MAAA,aAAA,EAAA,EAAb,QAAO,KAAG,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseLoadingOverlay.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/response-block/components/ResponseLoadingOverlay.vue"],"names":[],"mappings":"AA4EA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAGvE,KAAK,WAAW,GAAG;IACjB,0BAA0B;IAC1B,QAAQ,EAAE,iBAAiB,CAAA;CAC5B,CAAC;AA6HF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"ResponseLoadingOverlay.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/response-block/components/ResponseLoadingOverlay.vue"],"names":[],"mappings":"AAsEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAGvE,KAAK,WAAW,GAAG;IACjB,0BAA0B;IAC1B,QAAQ,EAAE,iBAAiB,CAAA;CAC5B,CAAC;AA6HF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../../../_virtual/_plugin-vue_
2
2
  import ResponseLoadingOverlay_vue_vue_type_script_setup_true_lang_default from "./ResponseLoadingOverlay.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/v2/blocks/response-block/components/ResponseLoadingOverlay.vue
5
- var ResponseLoadingOverlay_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ResponseLoadingOverlay_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-21dc7abd"]]);
5
+ var ResponseLoadingOverlay_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ResponseLoadingOverlay_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-b80db6e2"]]);
6
6
  //#endregion
7
7
  export { ResponseLoadingOverlay_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseLoadingOverlay.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseLoadingOverlay.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ScalarButton,\n ScalarLoading,\n useLoadingState,\n} from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\n\nconst { eventBus } = defineProps<{\n /** Workspace event bus */\n eventBus: WorkspaceEventBus\n}>()\n\nconst loader = useLoadingState()\nconst timeout = ref<ReturnType<typeof setTimeout>>()\n\nconst startLoading = () => {\n // Replace any pending delayed start so overlapping `hooks:on:request:sent` events\n // (rapid send, navigation, double submit) cannot leave an orphaned timer that\n // calls `loader.start()` after the matching request already completed.\n clearTimeout(timeout.value)\n timeout.value = setTimeout(() => loader.start(), 1000)\n}\n\nconst stopLoading = () => {\n clearTimeout(timeout.value)\n timeout.value = undefined\n void loader.clear()\n}\n\nonMounted(() => {\n eventBus.on('hooks:on:request:sent', startLoading)\n eventBus.on('hooks:on:request:complete', stopLoading)\n})\n\nonBeforeUnmount(() => {\n eventBus.off('hooks:on:request:sent', startLoading)\n eventBus.off('hooks:on:request:complete', stopLoading)\n stopLoading()\n})\n</script>\n<template>\n <Transition>\n <div\n v-if=\"loader.isActive\"\n class=\"bg-b-1 z-overlay absolute inset-0 flex flex-col items-center justify-center gap-6\">\n <ScalarLoading\n class=\"text-c-3\"\n :loader\n size=\"3xl\" />\n <ScalarButton\n variant=\"ghost\"\n @click=\"eventBus.emit('operation:cancel:request')\">\n Cancel\n </ScalarButton>\n </div>\n </Transition>\n</template>\n<style scoped>\n.v-enter-active {\n transition: opacity 0.5s ease;\n}\n\n.v-enter-from {\n opacity: 0;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ResponseLoadingOverlay.vue.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseLoadingOverlay.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarLoading, useLoadingState } from '@scalar/components/loading'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\n\nconst { eventBus } = defineProps<{\n /** Workspace event bus */\n eventBus: WorkspaceEventBus\n}>()\n\nconst loader = useLoadingState()\nconst timeout = ref<ReturnType<typeof setTimeout>>()\n\nconst startLoading = () => {\n // Replace any pending delayed start so overlapping `hooks:on:request:sent` events\n // (rapid send, navigation, double submit) cannot leave an orphaned timer that\n // calls `loader.start()` after the matching request already completed.\n clearTimeout(timeout.value)\n timeout.value = setTimeout(() => loader.start(), 1000)\n}\n\nconst stopLoading = () => {\n clearTimeout(timeout.value)\n timeout.value = undefined\n void loader.clear()\n}\n\nonMounted(() => {\n eventBus.on('hooks:on:request:sent', startLoading)\n eventBus.on('hooks:on:request:complete', stopLoading)\n})\n\nonBeforeUnmount(() => {\n eventBus.off('hooks:on:request:sent', startLoading)\n eventBus.off('hooks:on:request:complete', stopLoading)\n stopLoading()\n})\n</script>\n<template>\n <Transition>\n <div\n v-if=\"loader.isActive\"\n class=\"bg-b-1 z-overlay absolute inset-0 flex flex-col items-center justify-center gap-6\">\n <ScalarLoading\n class=\"text-c-3\"\n :loader\n size=\"3xl\" />\n <ScalarButton\n variant=\"ghost\"\n @click=\"eventBus.emit('operation:cancel:request')\">\n Cancel\n </ScalarButton>\n </div>\n </Transition>\n</template>\n<style scoped>\n.v-enter-active {\n transition: opacity 0.5s ease;\n}\n\n.v-enter-from {\n opacity: 0;\n}\n</style>\n"],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  import { Transition, createBlock, createCommentVNode, createElementBlock, createTextVNode, createVNode, defineComponent, onBeforeUnmount, onMounted, openBlock, ref, unref, withCtx } from "vue";
2
- import { ScalarButton, ScalarLoading, useLoadingState } from "@scalar/components";
2
+ import { ScalarButton } from "@scalar/components/button";
3
+ import { ScalarLoading, useLoadingState } from "@scalar/components/loading";
3
4
  //#region src/v2/blocks/response-block/components/ResponseLoadingOverlay.vue?vue&type=script&setup=true&lang.ts
4
5
  var _hoisted_1 = {
5
6
  key: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseLoadingOverlay.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseLoadingOverlay.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ScalarButton,\n ScalarLoading,\n useLoadingState,\n} from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\n\nconst { eventBus } = defineProps<{\n /** Workspace event bus */\n eventBus: WorkspaceEventBus\n}>()\n\nconst loader = useLoadingState()\nconst timeout = ref<ReturnType<typeof setTimeout>>()\n\nconst startLoading = () => {\n // Replace any pending delayed start so overlapping `hooks:on:request:sent` events\n // (rapid send, navigation, double submit) cannot leave an orphaned timer that\n // calls `loader.start()` after the matching request already completed.\n clearTimeout(timeout.value)\n timeout.value = setTimeout(() => loader.start(), 1000)\n}\n\nconst stopLoading = () => {\n clearTimeout(timeout.value)\n timeout.value = undefined\n void loader.clear()\n}\n\nonMounted(() => {\n eventBus.on('hooks:on:request:sent', startLoading)\n eventBus.on('hooks:on:request:complete', stopLoading)\n})\n\nonBeforeUnmount(() => {\n eventBus.off('hooks:on:request:sent', startLoading)\n eventBus.off('hooks:on:request:complete', stopLoading)\n stopLoading()\n})\n</script>\n<template>\n <Transition>\n <div\n v-if=\"loader.isActive\"\n class=\"bg-b-1 z-overlay absolute inset-0 flex flex-col items-center justify-center gap-6\">\n <ScalarLoading\n class=\"text-c-3\"\n :loader\n size=\"3xl\" />\n <ScalarButton\n variant=\"ghost\"\n @click=\"eventBus.emit('operation:cancel:request')\">\n Cancel\n </ScalarButton>\n </div>\n </Transition>\n</template>\n<style scoped>\n.v-enter-active {\n transition: opacity 0.5s ease;\n}\n\n.v-enter-from {\n opacity: 0;\n}\n</style>\n"],"mappings":";;;;;;;;;;;EAcA,MAAM,SAAS,iBAAgB;EAC/B,MAAM,UAAU,KAAmC;EAEnD,MAAM,qBAAqB;AAIzB,gBAAa,QAAQ,MAAK;AAC1B,WAAQ,QAAQ,iBAAiB,OAAO,OAAO,EAAE,IAAI;;EAGvD,MAAM,oBAAoB;AACxB,gBAAa,QAAQ,MAAK;AAC1B,WAAQ,QAAQ,KAAA;AACX,UAAO,OAAM;;AAGpB,kBAAgB;AACd,WAAA,SAAS,GAAG,yBAAyB,aAAY;AACjD,WAAA,SAAS,GAAG,6BAA6B,YAAW;IACrD;AAED,wBAAsB;AACpB,WAAA,SAAS,IAAI,yBAAyB,aAAY;AAClD,WAAA,SAAS,IAAI,6BAA6B,YAAW;AACrD,gBAAY;IACb;;uBAGC,YAca,YAAA,MAAA;2BADL,CAXE,MAAA,OAAM,CAAC,YAAA,WAAA,EADf,mBAYM,OAZN,YAYM,CATJ,YAGe,MAAA,cAAA,EAAA;KAFb,OAAM;KACL,QAAA,MAAA,OAAM;KACP,MAAK;6BACP,YAIe,MAAA,aAAA,EAAA;KAHb,SAAQ;KACP,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,QAAA,SAAS,KAAI,2BAAA;;4BAEvB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFqD,YAErD,GAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"ResponseLoadingOverlay.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/response-block/components/ResponseLoadingOverlay.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarLoading, useLoadingState } from '@scalar/components/loading'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\n\nconst { eventBus } = defineProps<{\n /** Workspace event bus */\n eventBus: WorkspaceEventBus\n}>()\n\nconst loader = useLoadingState()\nconst timeout = ref<ReturnType<typeof setTimeout>>()\n\nconst startLoading = () => {\n // Replace any pending delayed start so overlapping `hooks:on:request:sent` events\n // (rapid send, navigation, double submit) cannot leave an orphaned timer that\n // calls `loader.start()` after the matching request already completed.\n clearTimeout(timeout.value)\n timeout.value = setTimeout(() => loader.start(), 1000)\n}\n\nconst stopLoading = () => {\n clearTimeout(timeout.value)\n timeout.value = undefined\n void loader.clear()\n}\n\nonMounted(() => {\n eventBus.on('hooks:on:request:sent', startLoading)\n eventBus.on('hooks:on:request:complete', stopLoading)\n})\n\nonBeforeUnmount(() => {\n eventBus.off('hooks:on:request:sent', startLoading)\n eventBus.off('hooks:on:request:complete', stopLoading)\n stopLoading()\n})\n</script>\n<template>\n <Transition>\n <div\n v-if=\"loader.isActive\"\n class=\"bg-b-1 z-overlay absolute inset-0 flex flex-col items-center justify-center gap-6\">\n <ScalarLoading\n class=\"text-c-3\"\n :loader\n size=\"3xl\" />\n <ScalarButton\n variant=\"ghost\"\n @click=\"eventBus.emit('operation:cancel:request')\">\n Cancel\n </ScalarButton>\n </div>\n </Transition>\n</template>\n<style scoped>\n.v-enter-active {\n transition: opacity 0.5s ease;\n}\n\n.v-enter-from {\n opacity: 0;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;EAWA,MAAM,SAAS,iBAAgB;EAC/B,MAAM,UAAU,KAAmC;EAEnD,MAAM,qBAAqB;AAIzB,gBAAa,QAAQ,MAAK;AAC1B,WAAQ,QAAQ,iBAAiB,OAAO,OAAO,EAAE,IAAI;;EAGvD,MAAM,oBAAoB;AACxB,gBAAa,QAAQ,MAAK;AAC1B,WAAQ,QAAQ,KAAA;AACX,UAAO,OAAM;;AAGpB,kBAAgB;AACd,WAAA,SAAS,GAAG,yBAAyB,aAAY;AACjD,WAAA,SAAS,GAAG,6BAA6B,YAAW;IACrD;AAED,wBAAsB;AACpB,WAAA,SAAS,IAAI,yBAAyB,aAAY;AAClD,WAAA,SAAS,IAAI,6BAA6B,YAAW;AACrD,gBAAY;IACb;;uBAGC,YAca,YAAA,MAAA;2BADL,CAXE,MAAA,OAAM,CAAC,YAAA,WAAA,EADf,mBAYM,OAZN,YAYM,CATJ,YAGe,MAAA,cAAA,EAAA;KAFb,OAAM;KACL,QAAA,MAAA,OAAM;KACP,MAAK;6BACP,YAIe,MAAA,aAAA,EAAA;KAHb,SAAQ;KACP,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,QAAA,SAAS,KAAI,2BAAA;;4BAEvB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFqD,YAErD,GAAA,CAAA,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AddressBar.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/scalar-address-bar-block/components/AddressBar.vue"],"names":[],"mappings":"AAkqBA,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAIrF,OAAO,KAAK,EAEV,UAAU,EACV,iBAAiB,EAClB,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAoBhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAA0B,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAGzE;;;;GAIG;wBACkB,OAAO,YAAY;AAAxC,wBAAyC;AAKzC,MAAM,MAAM,eAAe,GAAG;IAC5B,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,MAAM,EAAE,cAAc,CAAA;IACtB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,mDAAmD;IACnD,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,8BAA8B;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,oBAAoB;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,gBAAgB;IAChB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,kBAAkB;IAClB,WAAW,EAAE,kBAAkB,CAAA;IAC/B,sCAAsC;IACtC,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AACD,QAAA,MAAM,YAAY;;;;;eAoB6B,MAAM;;;;;eAAN,MAAM;;;kFAm7BjD,CAAC"}
1
+ {"version":3,"file":"AddressBar.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/scalar-address-bar-block/components/AddressBar.vue"],"names":[],"mappings":"AA+qBA,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAIrF,OAAO,KAAK,EAEV,UAAU,EACV,iBAAiB,EAClB,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAoBhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAA0B,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAGzE;;;;GAIG;wBACkB,OAAO,YAAY;AAAxC,wBAAyC;AAKzC,MAAM,MAAM,eAAe,GAAG;IAC5B,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,MAAM,EAAE,cAAc,CAAA;IACtB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,mDAAmD;IACnD,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,8BAA8B;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,oBAAoB;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,gBAAgB;IAChB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,kBAAkB;IAClB,WAAW,EAAE,kBAAkB,CAAA;IAC/B,sCAAsC;IACtC,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AACD,QAAA,MAAM,YAAY;;;;;eAoB6B,MAAM;;;;;eAAN,MAAM;;;kFAo8BjD,CAAC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../../../_virtual/_plugin-vue_
2
2
  import AddressBar_vue_vue_type_script_setup_true_lang_default from "./AddressBar.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/v2/blocks/scalar-address-bar-block/components/AddressBar.vue
5
- var AddressBar_default = /* @__PURE__ */ _plugin_vue_export_helper_default(AddressBar_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-4d85ebb9"]]);
5
+ var AddressBar_default = /* @__PURE__ */ _plugin_vue_export_helper_default(AddressBar_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-372238a6"]]);
6
6
  //#endregion
7
7
  export { AddressBar_default as default };
8
8