@scalar/api-client 2.38.2 → 2.38.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 (263) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/{AddressBar-B4xnl66I.js → AddressBar-BOZGKSoz.js} +4 -4
  3. package/dist/{AddressBar-B4xnl66I.js.map → AddressBar-BOZGKSoz.js.map} +1 -1
  4. package/dist/{App-CvClwSlM.js → App-Ckirvnv1.js} +2 -2
  5. package/dist/{App-CvClwSlM.js.map → App-Ckirvnv1.js.map} +1 -1
  6. package/dist/{App-BVH4lIe8.js → App-DHBmpWJI.js} +4 -4
  7. package/dist/{App-BVH4lIe8.js.map → App-DHBmpWJI.js.map} +1 -1
  8. package/dist/{CodeInput-C-igR77V.js → CodeInput-BTN8cC5h.js} +2 -2
  9. package/dist/{CodeInput-C-igR77V.js.map → CodeInput-BTN8cC5h.js.map} +1 -1
  10. package/dist/{Collection-4MT9WmDD.js → Collection-BsAG7ms5.js} +2 -2
  11. package/dist/{Collection-4MT9WmDD.js.map → Collection-BsAG7ms5.js.map} +1 -1
  12. package/dist/{CollectionAuthentication-MHWQpw74.js → CollectionAuthentication-BMGhRnpo.js} +5 -5
  13. package/dist/{CollectionAuthentication-MHWQpw74.js.map → CollectionAuthentication-BMGhRnpo.js.map} +1 -1
  14. package/dist/{CollectionEnvironment-Dw35vIqo.js → CollectionEnvironment-BY9Gcnln.js} +4 -4
  15. package/dist/{CollectionEnvironment-Dw35vIqo.js.map → CollectionEnvironment-BY9Gcnln.js.map} +1 -1
  16. package/dist/{CollectionOverview-TUdDIu5f.js → CollectionOverview-C3GvN8GY.js} +3 -3
  17. package/dist/{CollectionOverview-TUdDIu5f.js.map → CollectionOverview-C3GvN8GY.js.map} +1 -1
  18. package/dist/{CollectionServers-BrjTCfDe.js → CollectionServers-DuOLysNB.js} +5 -5
  19. package/dist/{CollectionServers-BrjTCfDe.js.map → CollectionServers-DuOLysNB.js.map} +1 -1
  20. package/dist/{CollectionSettings-HVSlp2Gv.js → CollectionSettings-FtXNetOh.js} +2 -2
  21. package/dist/{CollectionSettings-HVSlp2Gv.js.map → CollectionSettings-FtXNetOh.js.map} +1 -1
  22. package/dist/{CommandPalette-CL8k4CoN.js → CommandPalette-BxoEK8TY.js} +2 -2
  23. package/dist/{CommandPalette-CL8k4CoN.js.map → CommandPalette-BxoEK8TY.js.map} +1 -1
  24. package/dist/{Cookies-DbOKTi1f.js → Cookies-BYTv1YIA.js} +8 -8
  25. package/dist/{Cookies-DbOKTi1f.js.map → Cookies-BYTv1YIA.js.map} +1 -1
  26. package/dist/{DataTableInput-yaU5g-kP.js → DataTableInput-RydMDjn2.js} +2 -2
  27. package/dist/{DataTableInput-yaU5g-kP.js.map → DataTableInput-RydMDjn2.js.map} +1 -1
  28. package/dist/{Environment-DJatRQIg.js → Environment-BIxG7DaO.js} +5 -5
  29. package/dist/{Environment-DJatRQIg.js.map → Environment-BIxG7DaO.js.map} +1 -1
  30. package/dist/{EnvironmentModal-DBEJ4Kzj.js → EnvironmentModal-C0lYytkh.js} +2 -2
  31. package/dist/{EnvironmentModal-DBEJ4Kzj.js.map → EnvironmentModal-C0lYytkh.js.map} +1 -1
  32. package/dist/{Form-CSKzyHGO.js → Form-KFcdRQp1.js} +3 -3
  33. package/dist/{Form-CSKzyHGO.js.map → Form-KFcdRQp1.js.map} +1 -1
  34. package/dist/{ImportCollection-DfX1UQ5u.js → ImportCollection-CGjySEzP.js} +2 -2
  35. package/dist/{ImportCollection-DfX1UQ5u.js.map → ImportCollection-CGjySEzP.js.map} +1 -1
  36. package/dist/{MainLayout-BEFMl1ud.js → MainLayout-BnLwst16.js} +3 -3
  37. package/dist/{MainLayout-BEFMl1ud.js.map → MainLayout-BnLwst16.js.map} +1 -1
  38. package/dist/{Modal-sQ9vH6MN.js → Modal-CTZ8UNds.js} +2 -2
  39. package/dist/{Modal-sQ9vH6MN.js.map → Modal-CTZ8UNds.js.map} +1 -1
  40. package/dist/{Request-gscRsGQ8.js → Request-d0RY0ZhC.js} +10 -10
  41. package/dist/{Request-gscRsGQ8.js.map → Request-d0RY0ZhC.js.map} +1 -1
  42. package/dist/{RequestAuth-BzBfIysT.js → RequestAuth-1cRH3DDn.js} +3 -3
  43. package/dist/{RequestAuth-BzBfIysT.js.map → RequestAuth-1cRH3DDn.js.map} +1 -1
  44. package/dist/{RequestRoot-3Bj8JZD-.js → RequestRoot-pW0yXesG.js} +7 -7
  45. package/dist/{RequestRoot-3Bj8JZD-.js.map → RequestRoot-pW0yXesG.js.map} +1 -1
  46. package/dist/{RequestSection-HhdJj9hW.js → RequestSection-D2BLvDTr.js} +4 -4
  47. package/dist/{RequestSection-HhdJj9hW.js.map → RequestSection-D2BLvDTr.js.map} +1 -1
  48. package/dist/{ResponseSection-DMJ0tw8E.js → ResponseSection-B_YF7l_E.js} +3 -3
  49. package/dist/{ResponseSection-DMJ0tw8E.js.map → ResponseSection-B_YF7l_E.js.map} +1 -1
  50. package/dist/{Server-DnA_BzPS.js → Server-CEKGIEfE.js} +2 -2
  51. package/dist/{Server-DnA_BzPS.js.map → Server-CEKGIEfE.js.map} +1 -1
  52. package/dist/{Settings-CYZzdJPO.js → Settings-BaPvhJ8Y.js} +2 -2
  53. package/dist/{Settings-CYZzdJPO.js.map → Settings-BaPvhJ8Y.js.map} +1 -1
  54. package/dist/{Sidebar-C6AdX6-N.js → Sidebar-CRxdl38Y.js} +2 -2
  55. package/dist/{Sidebar-C6AdX6-N.js.map → Sidebar-CRxdl38Y.js.map} +1 -1
  56. package/dist/components/AddressBar/AddressBar.vue.d.ts +1 -1
  57. package/dist/components/AddressBar/index.js +3 -3
  58. package/dist/components/CodeInput/CodeInput.vue.d.ts +1 -1
  59. package/dist/components/CodeInput/codeVariableWidget.d.ts +1 -1
  60. package/dist/components/CodeInput/index.js +1 -1
  61. package/dist/components/CommandPalette/index.js +1 -1
  62. package/dist/components/DataTable/DataTableInput.vue.d.ts +2 -2
  63. package/dist/components/DataTable/index.js +2 -2
  64. package/dist/components/Form/LabelInput.vue.d.ts +1 -1
  65. package/dist/components/ImportCollection/index.js +1 -1
  66. package/dist/components/ImportCollection/utils/import-collection.d.ts +1 -1
  67. package/dist/components/ImportCollection/utils/workspace-store-is-empty.d.ts +1 -1
  68. package/dist/components/Server/ServerVariablesForm.vue.d.ts +1 -1
  69. package/dist/components/Server/index.js +1 -1
  70. package/dist/components/Sidebar/index.js +1 -1
  71. package/dist/components/index.d.ts +2 -2
  72. package/dist/components/index.js +4 -4
  73. package/dist/{components-CSxJTn6F.js → components-B0BwUDFw.js} +2 -2
  74. package/dist/{components-CSxJTn6F.js.map → components-B0BwUDFw.js.map} +1 -1
  75. package/dist/get-resolved-url-SybDPV0U.js +85 -0
  76. package/dist/get-resolved-url-SybDPV0U.js.map +1 -0
  77. package/dist/{get-server-url-o3On8CEr.js → get-server-url-UVN-dx79.js} +1 -1
  78. package/dist/{get-server-url-o3On8CEr.js.map → get-server-url-UVN-dx79.js.map} +1 -1
  79. package/dist/hooks/useSidebar.d.ts +1 -1
  80. package/dist/index.d.ts +2 -2
  81. package/dist/index.js +5 -5
  82. package/dist/layouts/App/create-api-client-app.d.ts +9 -9
  83. package/dist/layouts/App/index.js +3 -3
  84. package/dist/layouts/Modal/create-api-client-modal.d.ts +1 -1
  85. package/dist/layouts/Modal/index.d.ts +1 -1
  86. package/dist/layouts/Modal/index.js +1 -1
  87. package/dist/layouts/Web/create-api-client-web.d.ts +9 -9
  88. package/dist/layouts/Web/index.js +4 -4
  89. package/dist/libs/create-client.d.ts +3 -3
  90. package/dist/libs/environment-parser.d.ts +1 -1
  91. package/dist/libs/get-request-uid-by-path-method.d.ts +1 -1
  92. package/dist/libs/hot-keys.d.ts +1 -1
  93. package/dist/libs/index.d.ts +1 -1
  94. package/dist/libs/index.js +1 -1
  95. package/dist/libs/local-storage.d.ts +1 -1
  96. package/dist/libs/send-request/create-request-operation.d.ts +3 -3
  97. package/dist/{operation-block-BnMIKAOh.js → operation-block-B1B3lJPx.js} +67 -17
  98. package/dist/operation-block-B1B3lJPx.js.map +1 -0
  99. package/dist/{operation-code-sample-ZUTueV3v.js → operation-code-sample-DOzAPxLQ.js} +22 -10
  100. package/dist/operation-code-sample-DOzAPxLQ.js.map +1 -0
  101. package/dist/plugins/hooks/usePluginManager.d.ts +1 -1
  102. package/dist/{request-block-DwsGy64Q.js → request-block-C1kLLMEd.js} +4 -4
  103. package/dist/{request-block-DwsGy64Q.js.map → request-block-C1kLLMEd.js.map} +1 -1
  104. package/dist/{scalar-address-bar-block--Vs6IBU1.js → scalar-address-bar-block-BbysOhkE.js} +2 -2
  105. package/dist/{scalar-address-bar-block--Vs6IBU1.js.map → scalar-address-bar-block-BbysOhkE.js.map} +1 -1
  106. package/dist/{scalar-auth-selector-block-DI3DLag9.js → scalar-auth-selector-block-Bs79QOMA.js} +12 -9
  107. package/dist/scalar-auth-selector-block-Bs79QOMA.js.map +1 -0
  108. package/dist/store/collections.d.ts +1 -1
  109. package/dist/store/environment.d.ts +1 -1
  110. package/dist/store/events.d.ts +8 -8
  111. package/dist/store/import-spec.d.ts +2 -2
  112. package/dist/store/index.js +1 -1
  113. package/dist/store/request-example.d.ts +1 -1
  114. package/dist/store/requests.d.ts +1 -1
  115. package/dist/store/security-schemes.d.ts +1 -1
  116. package/dist/store/servers.d.ts +1 -1
  117. package/dist/store/store.d.ts +7 -7
  118. package/dist/store/tags.d.ts +1 -1
  119. package/dist/store/workspace.d.ts +1 -1
  120. package/dist/{store-DpSUVhjp.js → store-DnlAQK5d.js} +15 -15
  121. package/dist/{store-DpSUVhjp.js.map → store-DnlAQK5d.js.map} +1 -1
  122. package/dist/style.css +1 -1
  123. package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts +3 -3
  124. package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts.map +1 -1
  125. package/dist/v2/blocks/operation-block/components/Header.vue.d.ts +2 -2
  126. package/dist/v2/blocks/operation-block/helpers/apply-allow-reserved-to-url.d.ts +6 -0
  127. package/dist/v2/blocks/operation-block/helpers/apply-allow-reserved-to-url.d.ts.map +1 -0
  128. package/dist/v2/blocks/operation-block/helpers/build-request-body.d.ts.map +1 -1
  129. package/dist/v2/blocks/operation-block/helpers/build-request-parameters.d.ts +1 -0
  130. package/dist/v2/blocks/operation-block/helpers/build-request-parameters.d.ts.map +1 -1
  131. package/dist/v2/blocks/operation-block/helpers/build-request-security.d.ts +2 -2
  132. package/dist/v2/blocks/operation-block/helpers/build-request.d.ts +2 -2
  133. package/dist/v2/blocks/operation-block/helpers/build-request.d.ts.map +1 -1
  134. package/dist/v2/blocks/operation-block/helpers/get-resolved-url.d.ts +2 -1
  135. package/dist/v2/blocks/operation-block/helpers/get-resolved-url.d.ts.map +1 -1
  136. package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.d.ts +1 -1
  137. package/dist/v2/blocks/operation-block/helpers/send-request.d.ts +1 -1
  138. package/dist/v2/blocks/operation-block/index.js +11 -11
  139. package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.d.ts +2 -2
  140. package/dist/v2/blocks/operation-code-sample/helpers/find-client.d.ts +1 -1
  141. package/dist/v2/blocks/operation-code-sample/helpers/generate-client-options.d.ts +1 -1
  142. package/dist/v2/blocks/operation-code-sample/helpers/generate-code-snippet.d.ts +1 -1
  143. package/dist/v2/blocks/operation-code-sample/helpers/get-clients.d.ts +2 -2
  144. package/dist/v2/blocks/operation-code-sample/helpers/get-secrets.d.ts +1 -1
  145. package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/operation-to-har.d.ts +1 -1
  146. package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-body.d.ts.map +1 -1
  147. package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-security-schemes.d.ts +1 -1
  148. package/dist/v2/blocks/operation-code-sample/index.js +1 -1
  149. package/dist/v2/blocks/request-block/RequestBlock.vue.d.ts +4 -4
  150. package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.d.ts +1 -1
  151. package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts +1 -1
  152. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.d.ts +1 -1
  153. package/dist/v2/blocks/request-block/helpers/get-default-headers.d.ts.map +1 -1
  154. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.d.ts +1 -1
  155. package/dist/v2/blocks/request-block/index.js +5 -5
  156. package/dist/v2/blocks/response-block/ResponseBlock.vue.d.ts +1 -1
  157. package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.d.ts +1 -1
  158. package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.d.ts +1 -1
  159. package/dist/v2/blocks/response-block/index.js +2 -2
  160. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts +1 -1
  161. package/dist/v2/blocks/scalar-address-bar-block/index.js +1 -1
  162. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.d.ts +3 -3
  163. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.d.ts +1 -1
  164. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.d.ts +2 -2
  165. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts +1 -1
  166. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.d.ts +1 -1
  167. package/dist/v2/blocks/scalar-auth-selector-block/helpers/extract-security-scheme-secrets.d.ts.map +1 -1
  168. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-openid-connect-discovery.d.ts +1 -1
  169. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.d.ts +2 -2
  170. package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.d.ts.map +1 -1
  171. package/dist/v2/blocks/scalar-auth-selector-block/index.js +3 -3
  172. package/dist/v2/components/code-input/CodeInput.vue.d.ts +1 -1
  173. package/dist/v2/components/data-table/DataTableInput.vue.d.ts +1 -1
  174. package/dist/v2/components/data-table/DataTableInputSelect.vue.d.ts +1 -1
  175. package/dist/v2/components/server/ServerDropdown.vue.d.ts +1 -1
  176. package/dist/v2/components/sidebar/Sidebar.vue.d.ts +1 -1
  177. package/dist/v2/constants.d.ts +3 -0
  178. package/dist/v2/constants.d.ts.map +1 -0
  179. package/dist/v2/features/app/App.vue.d.ts +3 -3
  180. package/dist/v2/features/app/components/AppSidebar.vue.d.ts +1 -1
  181. package/dist/v2/features/app/components/index.js +4 -4
  182. package/dist/v2/features/app/helpers/create-api-client-app.d.ts +3 -3
  183. package/dist/v2/features/app/helpers/get-route-param.d.ts +1 -1
  184. package/dist/v2/features/app/helpers/routes.d.ts +3 -3
  185. package/dist/v2/features/app/index.d.ts +5 -5
  186. package/dist/v2/features/app/index.js +14 -14
  187. package/dist/v2/features/app/index.js.map +1 -1
  188. package/dist/v2/features/collection/DocumentCollection.vue.d.ts +1 -1
  189. package/dist/v2/features/collection/OperationCollection.vue.d.ts +1 -1
  190. package/dist/v2/features/collection/WorkspaceCollection.vue.d.ts +1 -1
  191. package/dist/v2/features/collection/components/Authentication.vue.d.ts +4 -4
  192. package/dist/v2/features/collection/components/Authentication.vue.d.ts.map +1 -1
  193. package/dist/v2/features/collection/components/Cookies.vue.d.ts +4 -4
  194. package/dist/v2/features/collection/components/Editor/Editor.vue.d.ts +4 -4
  195. package/dist/v2/features/collection/components/Environment.vue.d.ts +4 -4
  196. package/dist/v2/features/collection/components/Overview.vue.d.ts +4 -4
  197. package/dist/v2/features/collection/components/Servers.vue.d.ts +4 -4
  198. package/dist/v2/features/collection/components/Settings.vue.d.ts +4 -4
  199. package/dist/v2/features/collection/components/Tabs.vue.d.ts +1 -1
  200. package/dist/v2/features/command-palette/hooks/use-command-palette-state.d.ts +45 -10
  201. package/dist/v2/features/command-palette/hooks/use-command-palette-state.d.ts.map +1 -1
  202. package/dist/v2/features/editor/helpers/json/create-json-model.d.ts +1 -1
  203. package/dist/v2/features/editor/helpers/yaml/create-yaml-model.d.ts +1 -1
  204. package/dist/v2/features/editor/helpers/yaml/get-yaml-node-range-from-path.d.ts +1 -1
  205. package/dist/v2/features/editor/hooks/use-editor.d.ts +1 -1
  206. package/dist/v2/features/editor/hooks/use-json-pointer-link-support.d.ts +1 -1
  207. package/dist/v2/features/modal/Modal.vue.d.ts +1 -1
  208. package/dist/v2/features/modal/helpers/create-api-client-modal.d.ts +2 -2
  209. package/dist/v2/features/modal/hooks/use-modal-sidebar.d.ts +1 -1
  210. package/dist/v2/features/modal/index.js +10 -10
  211. package/dist/v2/features/modal/modal-events.d.ts +1 -1
  212. package/dist/v2/features/operation/Operation.vue.d.ts +2 -2
  213. package/dist/v2/features/operation/Operation.vue.d.ts.map +1 -1
  214. package/dist/v2/features/operation/helpers/get-selected-security.d.ts +6 -1
  215. package/dist/v2/features/operation/helpers/get-selected-security.d.ts.map +1 -1
  216. package/dist/v2/features/operation/index.js +10 -10
  217. package/dist/v2/features/search/helpers/create-fuse-instance.d.ts +1 -1
  218. package/dist/v2/features/search/helpers/create-search-index.d.ts +1 -1
  219. package/dist/v2/helpers/get-active-proxy-url.d.ts +1 -1
  220. package/dist/v2/helpers/get-tab-details.d.ts +1 -1
  221. package/dist/v2/helpers/handle-hotkeys.d.ts +1 -1
  222. package/dist/v2/hooks/use-global-hot-keys.d.ts +1 -1
  223. package/dist/views/Collection/components/EnvironmentForm.vue.d.ts +1 -1
  224. package/dist/views/Collection/components/MarkdownInput.vue.d.ts +1 -1
  225. package/dist/views/Components/CodeSnippet/CodeSnippet.vue.d.ts +1 -1
  226. package/dist/views/Components/CodeSnippet/helpers/get-har-request.d.ts +1 -1
  227. package/dist/views/Components/CodeSnippet/helpers/get-snippet.d.ts +1 -1
  228. package/dist/views/Environment/EnvironmentVariableDropdown.vue.d.ts +1 -1
  229. package/dist/views/Environment/handle-drag.d.ts +1 -1
  230. package/dist/views/Request/Request.vue.d.ts +1 -1
  231. package/dist/views/Request/RequestSection/RequestAuth/OAuth2.vue.d.ts +1 -1
  232. package/dist/views/Request/RequestSection/RequestAuth/OAuthScopesInput.vue.d.ts +1 -1
  233. package/dist/views/Request/RequestSection/RequestAuth/RequestAuth.vue.d.ts +1 -1
  234. package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue.d.ts +1 -1
  235. package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue.d.ts +2 -2
  236. package/dist/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue.d.ts +1 -1
  237. package/dist/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage.d.ts +1 -1
  238. package/dist/views/Request/RequestSection/RequestAuth/index.js +3 -3
  239. package/dist/views/Request/RequestSection/RequestBody.vue.d.ts +1 -1
  240. package/dist/views/Request/RequestSection/RequestCodeExample.vue.d.ts +1 -1
  241. package/dist/views/Request/RequestSection/RequestParams.vue.d.ts +1 -1
  242. package/dist/views/Request/RequestSection/RequestPathParams.vue.d.ts +1 -1
  243. package/dist/views/Request/RequestSection/RequestSection.vue.d.ts +1 -1
  244. package/dist/views/Request/RequestSection/RequestTable.vue.d.ts +1 -1
  245. package/dist/views/Request/RequestSection/helpers/update-scheme.d.ts +1 -1
  246. package/dist/views/Request/RequestSection/index.js +4 -4
  247. package/dist/views/Request/RequestSidebarItem.vue.d.ts +1 -1
  248. package/dist/views/Request/RequestSidebarItemMenu.vue.d.ts +3 -3
  249. package/dist/views/Request/RequestSubpageHeader.vue.d.ts +1 -1
  250. package/dist/views/Request/ResponseSection/ResponseBodyPreview.vue.d.ts +1 -1
  251. package/dist/views/Request/ResponseSection/ResponseSection.vue.d.ts +1 -1
  252. package/dist/views/Request/ResponseSection/index.js +3 -3
  253. package/dist/views/Request/components/index.js +1 -1
  254. package/dist/views/Request/handle-drag.d.ts +2 -2
  255. package/dist/views/Request/libs/auth.d.ts +1 -1
  256. package/dist/views/Request/libs/oauth2.d.ts +1 -1
  257. package/dist/views/Request/libs/watch-mode.d.ts +2 -2
  258. package/package.json +12 -12
  259. package/dist/get-resolved-url-BUCwrBzc.js +0 -30
  260. package/dist/get-resolved-url-BUCwrBzc.js.map +0 -1
  261. package/dist/operation-block-BnMIKAOh.js.map +0 -1
  262. package/dist/operation-code-sample-ZUTueV3v.js.map +0 -1
  263. package/dist/scalar-auth-selector-block-DI3DLag9.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RequestAuth-BzBfIysT.js","names":["$attrs"],"sources":["../src/views/Request/RequestSection/RequestAuth/DeleteRequestAuthModal.vue","../src/views/Request/RequestSection/RequestAuth/DeleteRequestAuthModal.vue","../src/views/Request/RequestSection/helpers/update-scheme.ts","../src/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage.ts","../src/views/Request/RequestSection/RequestAuth/OAuthScopesInput.vue","../src/views/Request/RequestSection/RequestAuth/OAuthScopesInput.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue","../src/views/Request/RequestSection/RequestAuth/OAuth2.vue","../src/views/Request/RequestSection/RequestAuth/OAuth2.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuth.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuth.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton, ScalarModal } from '@scalar/components'\nimport type { SecurityScheme } from '@scalar/oas-utils/entities/spec'\n\nimport { useWorkspace } from '@/store/store'\n\nconst props = defineProps<{\n state: { open: boolean; show: () => void; hide: () => void }\n scheme: { id: SecurityScheme['uid']; label: string } | null\n}>()\n\nconst emit = defineEmits<{\n (e: 'close'): void\n (e: 'delete'): void\n}>()\n\nconst { securitySchemeMutators } = useWorkspace()\n\nconst deleteScheme = () => {\n if (props.scheme?.id) {\n securitySchemeMutators.delete(props.scheme.id)\n }\n emit('delete')\n}\n</script>\n<template>\n <ScalarModal\n size=\"xxs\"\n :state=\"state\"\n title=\"Delete Security Scheme\">\n <p class=\"text-c-2 mb-4 text-sm leading-normal\">\n This cannot be undone. You're about to delete the\n {{ scheme?.label }} security scheme from the collection.\n </p>\n <div class=\"flex justify-between gap-2\">\n <ScalarButton\n class=\"flex h-8 cursor-pointer items-center gap-1.5 px-3 shadow-none focus:outline-none\"\n type=\"button\"\n variant=\"outlined\"\n @click=\"emit('close')\">\n Cancel\n </ScalarButton>\n <ScalarButton\n class=\"flex h-8 cursor-pointer items-center gap-1.5 px-3 shadow-none focus:outline-none\"\n type=\"submit\"\n @click=\"deleteScheme\">\n Delete {{ scheme?.label }}\n </ScalarButton>\n </div>\n </ScalarModal>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarButton, ScalarModal } from '@scalar/components'\nimport type { SecurityScheme } from '@scalar/oas-utils/entities/spec'\n\nimport { useWorkspace } from '@/store/store'\n\nconst props = defineProps<{\n state: { open: boolean; show: () => void; hide: () => void }\n scheme: { id: SecurityScheme['uid']; label: string } | null\n}>()\n\nconst emit = defineEmits<{\n (e: 'close'): void\n (e: 'delete'): void\n}>()\n\nconst { securitySchemeMutators } = useWorkspace()\n\nconst deleteScheme = () => {\n if (props.scheme?.id) {\n securitySchemeMutators.delete(props.scheme.id)\n }\n emit('delete')\n}\n</script>\n<template>\n <ScalarModal\n size=\"xxs\"\n :state=\"state\"\n title=\"Delete Security Scheme\">\n <p class=\"text-c-2 mb-4 text-sm leading-normal\">\n This cannot be undone. You're about to delete the\n {{ scheme?.label }} security scheme from the collection.\n </p>\n <div class=\"flex justify-between gap-2\">\n <ScalarButton\n class=\"flex h-8 cursor-pointer items-center gap-1.5 px-3 shadow-none focus:outline-none\"\n type=\"button\"\n variant=\"outlined\"\n @click=\"emit('close')\">\n Cancel\n </ScalarButton>\n <ScalarButton\n class=\"flex h-8 cursor-pointer items-center gap-1.5 px-3 shadow-none focus:outline-none\"\n type=\"submit\"\n @click=\"deleteScheme\">\n Delete {{ scheme?.label }}\n </ScalarButton>\n </div>\n </ScalarModal>\n</template>\n","import { CLIENT_LS_KEYS, safeLocalStorage } from '@scalar/helpers/object/local-storage'\nimport type { SecurityScheme } from '@scalar/oas-utils/entities/spec'\nimport type { Path, PathValue } from '@scalar/object-utils/nested'\n\nimport type { WorkspaceStore } from '@/store/store'\n\n/** Shape of the local storage auth object */\nexport type Auth<P extends Path<SecurityScheme>> = Record<string, Record<P, NonNullable<PathValue<SecurityScheme, P>>>>\n\n/** Update the security scheme with side effects */\nexport const updateScheme = <U extends SecurityScheme['uid'], P extends Path<SecurityScheme>>(\n uid: U,\n path: P,\n value: NonNullable<PathValue<SecurityScheme, P>>,\n { securitySchemeMutators, securitySchemes }: WorkspaceStore,\n persistAuth = false,\n) => {\n securitySchemeMutators.edit(uid, path, value)\n\n if (!persistAuth) {\n return\n }\n\n // We persist auth to local storage by name key\n try {\n const auth: Auth<P> = JSON.parse(safeLocalStorage().getItem(CLIENT_LS_KEYS.AUTH) ?? '{}')\n const scheme = securitySchemes[uid]\n\n if (auth && scheme?.nameKey) {\n const nameScheme = (auth[scheme.nameKey] ||= {} as Record<P, NonNullable<PathValue<SecurityScheme, P>>>)\n nameScheme[path] = value\n safeLocalStorage().setItem(CLIENT_LS_KEYS.AUTH, JSON.stringify(auth))\n }\n } catch (e) {\n console.error(e)\n }\n}\n","import { isDefined } from '@scalar/helpers/array/is-defined'\nimport { CLIENT_LS_KEYS, safeLocalStorage } from '@scalar/helpers/object/local-storage'\nimport type { Collection, SecurityScheme } from '@scalar/oas-utils/entities/spec'\nimport type { Path } from '@scalar/object-utils/nested'\nimport type { Entries } from 'type-fest'\n\nimport type { WorkspaceStore } from '@/store/store'\nimport type { Auth } from '@/views/Request/RequestSection/helpers/update-scheme'\n\n/**\n * Manually restore the auth from local storage\n *\n * Only use this if you need to restore auth manually, in the client web + app we load the whole store from\n * local storage so it isn't needed there.\n */\nexport const restoreAuthFromLocalStorage = (store: WorkspaceStore, collectionUid: string) => {\n try {\n const { collectionMutators, securitySchemes, securitySchemeMutators } = store\n const auth: Auth<Path<SecurityScheme>> = JSON.parse(safeLocalStorage().getItem(CLIENT_LS_KEYS.AUTH) ?? '{}')\n\n /** Map the security scheme name key to the uid */\n const dict = Object.keys(securitySchemes).reduce(\n (acc, key) => {\n const scheme = securitySchemes[key]\n if (scheme) {\n acc[scheme.nameKey] = scheme.uid\n }\n return acc\n },\n {} as Record<string, SecurityScheme['uid']>,\n )\n\n /** Now we can use the dict to restore the auth from local storage */\n Object.entries(auth).forEach(([key, entry]) => {\n const uid = dict[key]\n if (uid) {\n const entries = Object.entries(entry) as Entries<typeof entry>\n entries.forEach(([path, value]) => {\n securitySchemeMutators.edit(uid, path, value)\n })\n }\n })\n\n /** Restore the selected security scheme uids */\n const selectedSchemeUids: (string | string[])[] = JSON.parse(\n safeLocalStorage().getItem(CLIENT_LS_KEYS.SELECTED_SECURITY_SCHEMES) ?? '[]',\n )\n\n // Convert back to uids\n const uids = selectedSchemeUids\n .map((nameKeys) => {\n if (Array.isArray(nameKeys)) {\n return nameKeys.map((key) => dict[key]).filter(isDefined)\n }\n return dict[nameKeys]\n })\n .filter(isDefined)\n\n collectionMutators.edit(collectionUid as Collection['uid'], 'selectedSecuritySchemeUids', uids)\n } catch (e) {\n // Nothing to restore\n console.error(e)\n }\n}\n","<script setup lang=\"ts\">\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport { ScalarButton, ScalarIcon } from '@scalar/components'\nimport type { Oauth2Flow } from '@scalar/oas-utils/entities/spec'\nimport { computed } from 'vue'\n\nimport {\n DataTableCell,\n DataTableCheckbox,\n DataTableRow,\n} from '@/components/DataTable'\nimport type { UpdateScheme } from '@/store'\n\nconst { flow, updateScheme } = defineProps<{\n flow: Oauth2Flow\n updateScheme: UpdateScheme\n}>()\n\nconst scopes = computed(() =>\n Object.entries(flow?.scopes ?? {}).map(([key, val]) => ({\n id: key,\n label: key,\n description: val,\n })),\n)\n\n/** An array of the selected scope ids */\nconst selectedScopes = computed(() => flow?.selectedScopes || [])\n\nfunction setScope(id: string, checked: boolean) {\n // Checked - Add scope to list\n if (checked) {\n updateScheme(`flows.${flow.type}.selectedScopes`, [\n ...selectedScopes.value,\n id,\n ])\n }\n // Unchecked - Remove scope from list\n else {\n updateScheme(\n `flows.${flow.type}.selectedScopes`,\n selectedScopes.value.filter((scope) => scope !== id),\n )\n }\n}\n\nconst allScopesSelected = computed(\n () => flow?.selectedScopes?.length === Object.keys(flow?.scopes ?? {}).length,\n)\n\nconst selectAllScopes = () => {\n updateScheme(\n `flows.${flow.type}.selectedScopes`,\n Object.keys(flow?.scopes ?? {}),\n )\n}\n\nconst deselectAllScopes = () => {\n updateScheme(`flows.${flow.type}.selectedScopes`, [])\n}\n</script>\n\n<template>\n <DataTableCell class=\"h-auto !max-h-[initial] min-h-8 items-center\">\n <div class=\"flex h-fit w-full\">\n <div class=\"text-c-1 h-full items-center\"></div>\n <Disclosure\n as=\"div\"\n class=\"bl flex w-full flex-col\">\n <DisclosureButton\n v-slot=\"{ open }\"\n :class=\"[\n 'group/scopes-accordion hover:text-c-1 flex h-auto min-h-8 cursor-pointer items-center gap-1.5 pr-2.25 pl-3 text-left',\n (flow?.selectedScopes?.length || 0) > 0 ? 'text-c-1' : 'text-c-3',\n ]\">\n <div class=\"flex-1\">\n Scopes Selected\n {{ flow?.selectedScopes?.length || 0 }} /\n {{ Object.keys(flow?.scopes ?? {}).length || 0 }}\n </div>\n <div class=\"flex items-center gap-1.75\">\n <!-- Deselect All -->\n <ScalarButton\n v-if=\"allScopesSelected\"\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"deselectAllScopes\">\n Deselect All\n </ScalarButton>\n\n <!-- Select All -->\n <ScalarButton\n v-if=\"!allScopesSelected\"\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"selectAllScopes\">\n Select All\n </ScalarButton>\n\n <ScalarIcon\n class=\"text-c-3 group-hover/scopes-accordion:text-c-2\"\n :icon=\"open ? 'ChevronDown' : 'ChevronRight'\"\n size=\"md\" />\n </div>\n </DisclosureButton>\n <DisclosurePanel as=\"template\">\n <table\n class=\"grid auto-rows-auto\"\n :style=\"{ gridTemplateColumns: '1fr auto' }\">\n <DataTableRow\n v-for=\"{ id, label, description } in scopes\"\n :key=\"id\"\n class=\"text-c-2\"\n @click=\"setScope(id, !selectedScopes.includes(id))\">\n <DataTableCell\n class=\"hover:text-c-1 box-border !max-h-[initial] w-full cursor-pointer px-3 py-1.5\">\n <div v-if=\"description\">\n <span class=\"font-code text-xs\">{{ label }}</span>\n &ndash;\n {{ description }}\n </div>\n </DataTableCell>\n <DataTableCheckbox\n :modelValue=\"selectedScopes.includes(id)\"\n @update:modelValue=\"() => {}\" />\n </DataTableRow>\n </table>\n </DisclosurePanel>\n </Disclosure>\n </div>\n </DataTableCell>\n</template>\n","<script setup lang=\"ts\">\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport { ScalarButton, ScalarIcon } from '@scalar/components'\nimport type { Oauth2Flow } from '@scalar/oas-utils/entities/spec'\nimport { computed } from 'vue'\n\nimport {\n DataTableCell,\n DataTableCheckbox,\n DataTableRow,\n} from '@/components/DataTable'\nimport type { UpdateScheme } from '@/store'\n\nconst { flow, updateScheme } = defineProps<{\n flow: Oauth2Flow\n updateScheme: UpdateScheme\n}>()\n\nconst scopes = computed(() =>\n Object.entries(flow?.scopes ?? {}).map(([key, val]) => ({\n id: key,\n label: key,\n description: val,\n })),\n)\n\n/** An array of the selected scope ids */\nconst selectedScopes = computed(() => flow?.selectedScopes || [])\n\nfunction setScope(id: string, checked: boolean) {\n // Checked - Add scope to list\n if (checked) {\n updateScheme(`flows.${flow.type}.selectedScopes`, [\n ...selectedScopes.value,\n id,\n ])\n }\n // Unchecked - Remove scope from list\n else {\n updateScheme(\n `flows.${flow.type}.selectedScopes`,\n selectedScopes.value.filter((scope) => scope !== id),\n )\n }\n}\n\nconst allScopesSelected = computed(\n () => flow?.selectedScopes?.length === Object.keys(flow?.scopes ?? {}).length,\n)\n\nconst selectAllScopes = () => {\n updateScheme(\n `flows.${flow.type}.selectedScopes`,\n Object.keys(flow?.scopes ?? {}),\n )\n}\n\nconst deselectAllScopes = () => {\n updateScheme(`flows.${flow.type}.selectedScopes`, [])\n}\n</script>\n\n<template>\n <DataTableCell class=\"h-auto !max-h-[initial] min-h-8 items-center\">\n <div class=\"flex h-fit w-full\">\n <div class=\"text-c-1 h-full items-center\"></div>\n <Disclosure\n as=\"div\"\n class=\"bl flex w-full flex-col\">\n <DisclosureButton\n v-slot=\"{ open }\"\n :class=\"[\n 'group/scopes-accordion hover:text-c-1 flex h-auto min-h-8 cursor-pointer items-center gap-1.5 pr-2.25 pl-3 text-left',\n (flow?.selectedScopes?.length || 0) > 0 ? 'text-c-1' : 'text-c-3',\n ]\">\n <div class=\"flex-1\">\n Scopes Selected\n {{ flow?.selectedScopes?.length || 0 }} /\n {{ Object.keys(flow?.scopes ?? {}).length || 0 }}\n </div>\n <div class=\"flex items-center gap-1.75\">\n <!-- Deselect All -->\n <ScalarButton\n v-if=\"allScopesSelected\"\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"deselectAllScopes\">\n Deselect All\n </ScalarButton>\n\n <!-- Select All -->\n <ScalarButton\n v-if=\"!allScopesSelected\"\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"selectAllScopes\">\n Select All\n </ScalarButton>\n\n <ScalarIcon\n class=\"text-c-3 group-hover/scopes-accordion:text-c-2\"\n :icon=\"open ? 'ChevronDown' : 'ChevronRight'\"\n size=\"md\" />\n </div>\n </DisclosureButton>\n <DisclosurePanel as=\"template\">\n <table\n class=\"grid auto-rows-auto\"\n :style=\"{ gridTemplateColumns: '1fr auto' }\">\n <DataTableRow\n v-for=\"{ id, label, description } in scopes\"\n :key=\"id\"\n class=\"text-c-2\"\n @click=\"setScope(id, !selectedScopes.includes(id))\">\n <DataTableCell\n class=\"hover:text-c-1 box-border !max-h-[initial] w-full cursor-pointer px-3 py-1.5\">\n <div v-if=\"description\">\n <span class=\"font-code text-xs\">{{ label }}</span>\n &ndash;\n {{ description }}\n </div>\n </DataTableCell>\n <DataTableCheckbox\n :modelValue=\"selectedScopes.includes(id)\"\n @update:modelValue=\"() => {}\" />\n </DataTableRow>\n </table>\n </DisclosurePanel>\n </Disclosure>\n </div>\n </DataTableCell>\n</template>\n","<script setup lang=\"ts\">\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { useId } from 'vue'\n\nimport DataTableInput from '@/components/DataTable/DataTableInput.vue'\nimport type { EnvVariable } from '@/store/active-entities'\nimport type { VueClassProp } from '@/types/vue'\n\nconst props = withDefaults(\n defineProps<{\n type?: string\n containerClass?: VueClassProp\n required?: boolean\n modelValue: string | number\n readOnly?: boolean\n environment: Environment\n envVariables: EnvVariable[]\n workspace: Workspace\n }>(),\n { required: false, readOnly: false },\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: string): void\n (e: 'inputFocus'): void\n (e: 'inputBlur'): void\n (e: 'selectVariable', value: string): void\n}>()\n\nconst id = useId()\n</script>\n<template>\n <DataTableInput\n :id=\"id\"\n :canAddCustomEnumValue=\"!props.readOnly\"\n :containerClass=\"props.containerClass\"\n v-bind=\"$attrs\"\n :envVariables=\"props.envVariables\"\n :environment=\"props.environment\"\n lineWrapping\n :modelValue=\"props.modelValue\"\n :readOnly=\"props.readOnly\"\n :required=\"props.required\"\n :type=\"props.type\"\n :workspace=\"props.workspace\"\n @inputBlur=\"emit('inputBlur')\"\n @inputFocus=\"emit('inputFocus')\"\n @selectVariable=\"emit('selectVariable', $event)\"\n @update:modelValue=\"emit('update:modelValue', $event)\">\n <template #default>\n <label :for=\"id\">\n <slot />\n </label>\n </template>\n <template #icon>\n <slot name=\"icon\" />\n </template>\n </DataTableInput>\n</template>\n","<script setup lang=\"ts\">\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { useId } from 'vue'\n\nimport DataTableInput from '@/components/DataTable/DataTableInput.vue'\nimport type { EnvVariable } from '@/store/active-entities'\nimport type { VueClassProp } from '@/types/vue'\n\nconst props = withDefaults(\n defineProps<{\n type?: string\n containerClass?: VueClassProp\n required?: boolean\n modelValue: string | number\n readOnly?: boolean\n environment: Environment\n envVariables: EnvVariable[]\n workspace: Workspace\n }>(),\n { required: false, readOnly: false },\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: string): void\n (e: 'inputFocus'): void\n (e: 'inputBlur'): void\n (e: 'selectVariable', value: string): void\n}>()\n\nconst id = useId()\n</script>\n<template>\n <DataTableInput\n :id=\"id\"\n :canAddCustomEnumValue=\"!props.readOnly\"\n :containerClass=\"props.containerClass\"\n v-bind=\"$attrs\"\n :envVariables=\"props.envVariables\"\n :environment=\"props.environment\"\n lineWrapping\n :modelValue=\"props.modelValue\"\n :readOnly=\"props.readOnly\"\n :required=\"props.required\"\n :type=\"props.type\"\n :workspace=\"props.workspace\"\n @inputBlur=\"emit('inputBlur')\"\n @inputFocus=\"emit('inputFocus')\"\n @selectVariable=\"emit('selectVariable', $event)\"\n @update:modelValue=\"emit('update:modelValue', $event)\">\n <template #default>\n <label :for=\"id\">\n <slot />\n </label>\n </template>\n <template #icon>\n <slot name=\"icon\" />\n </template>\n </DataTableInput>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarButton, useLoadingState } from '@scalar/components'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport {\n pkceOptions,\n type Collection,\n type Oauth2Flow,\n type SecuritySchemeOauth2,\n type Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { useToasts } from '@scalar/use-toasts'\n\nimport { DataTableRow } from '@/components/DataTable'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace, type UpdateScheme } from '@/store/store'\nimport { authorizeOauth2 } from '@/views/Request/libs'\nimport { updateScheme as _updateScheme } from '@/views/Request/RequestSection/helpers/update-scheme'\n\nimport OAuthScopesInput from './OAuthScopesInput.vue'\nimport RequestAuthDataTableInput from './RequestAuthDataTableInput.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n flow,\n persistAuth = false,\n scheme,\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n flow: Oauth2Flow\n persistAuth: boolean\n scheme: SecuritySchemeOauth2\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst loader = useLoadingState()\nconst { toast } = useToasts()\nconst storeContext = useWorkspace()\n\n/** Update the current scheme */\nconst updateScheme: UpdateScheme = (path, value) =>\n _updateScheme(scheme.uid, path, value, storeContext, persistAuth)\n\n/** Authorize the user using specified flow */\nconst handleAuthorize = async () => {\n if (loader.isActive || !collection?.uid) {\n return\n }\n if (!server) {\n toast('No server selected', 'error')\n return\n }\n loader.start()\n\n const [error, accessToken] = await authorizeOauth2(\n flow,\n server,\n workspace?.proxyUrl,\n )\n\n await loader.clear()\n\n if (accessToken) {\n updateScheme(`flows.${flow.type}.token`, accessToken)\n emits('authorized')\n } else {\n console.error(error)\n toast(error?.message ?? 'Failed to authorize', 'error')\n }\n}\n\n/** To make prop drilling a little easier */\nconst dataTableInputProps = {\n environment,\n envVariables,\n workspace,\n}\n</script>\n\n<template>\n <!-- Access Token Granted -->\n <template v-if=\"flow.token\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"border-r-transparent\"\n :modelValue=\"flow.token\"\n placeholder=\"QUxMIFlPVVIgQkFTRSBBUkUgQkVMT05HIFRPIFVT\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(`flows.${flow.type}.token`, v)\">\n Access Token\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow class=\"min-w-full\">\n <div class=\"flex h-8 items-center justify-end border-t\">\n <ScalarButton\n class=\"mr-1 p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"updateScheme(`flows.${flow.type}.token`, '')\">\n Clear\n </ScalarButton>\n <slot name=\"oauth-actions\" />\n </div>\n </DataTableRow>\n </template>\n\n <template v-else>\n <DataTableRow>\n <!-- Auth URL -->\n <RequestAuthDataTableInput\n v-if=\"'authorizationUrl' in flow\"\n v-bind=\"dataTableInputProps\"\n containerClass=\"border-r-0\"\n :modelValue=\"flow.authorizationUrl\"\n placeholder=\"https://galaxy.scalar.com/authorize\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.authorizationUrl`, v)\n \">\n Auth URL\n </RequestAuthDataTableInput>\n\n <!-- Token URL -->\n <RequestAuthDataTableInput\n v-if=\"'tokenUrl' in flow\"\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.tokenUrl\"\n placeholder=\"https://galaxy.scalar.com/token\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.tokenUrl`, v)\n \">\n Token URL\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"'x-scalar-redirect-uri' in flow\">\n <!-- Redirect URI -->\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow['x-scalar-redirect-uri']\"\n placeholder=\"https://galaxy.scalar.com/callback\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.x-scalar-redirect-uri`, v)\n \">\n Redirect URL\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Username and password -->\n <template v-if=\"flow.type === 'password'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"text-c-2\"\n :modelValue=\"flow.username\"\n placeholder=\"janedoe\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.username`, v)\n \">\n Username\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.password\"\n placeholder=\"********\"\n type=\"password\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.password`, v)\n \">\n Password\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n\n <!-- Client ID -->\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow['x-scalar-client-id']\"\n placeholder=\"12345\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.x-scalar-client-id`, v)\n \">\n Client ID\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Client Secret (Authorization Code / Client Credentials / Password (optional)) -->\n <DataTableRow v-if=\"'clientSecret' in flow\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.clientSecret\"\n placeholder=\"XYZ123\"\n type=\"password\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.clientSecret`, v)\n \">\n Client Secret\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- PKCE -->\n <DataTableRow v-if=\"'x-usePkce' in flow\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :enum=\"pkceOptions\"\n :modelValue=\"flow['x-usePkce']\"\n readOnly\n @update:modelValue=\"\n (v) =>\n updateScheme(\n `flows.${flow.type}.x-usePkce`,\n v as (typeof pkceOptions)[number],\n )\n \">\n Use PKCE\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Scopes -->\n <DataTableRow v-if=\"Object.keys(flow.scopes ?? {}).length\">\n <OAuthScopesInput\n :flow=\"flow\"\n :updateScheme=\"updateScheme\" />\n </DataTableRow>\n\n <!-- Open ID Connect -->\n <!-- <DataTableRow -->\n <!-- v-else-if=\"activeScheme?.type === 'openIdConnect'\" -->\n <!-- class=\"border-r-transparent\"> -->\n <!-- <DataTableInput -->\n <!-- v-model=\"password\" -->\n <!-- placeholder=\"Token\"> -->\n <!-- TODO -->\n <!-- </DataTableInput> -->\n <!-- <DataTableCell class=\"flex items-center\"> -->\n <!-- <ScalarButton size=\"sm\"> Authorize </ScalarButton> -->\n <!-- </DataTableCell> -->\n <!-- </DataTableRow> -->\n </template>\n <template v-if=\"!flow.token\">\n <DataTableRow class=\"min-w-full\">\n <div class=\"flex h-8 w-full items-center justify-end border-t\">\n <ScalarButton\n class=\"mr-0.75 p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"handleAuthorize\">\n Authorize\n </ScalarButton>\n </div>\n </DataTableRow>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarButton, useLoadingState } from '@scalar/components'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport {\n pkceOptions,\n type Collection,\n type Oauth2Flow,\n type SecuritySchemeOauth2,\n type Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { useToasts } from '@scalar/use-toasts'\n\nimport { DataTableRow } from '@/components/DataTable'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace, type UpdateScheme } from '@/store/store'\nimport { authorizeOauth2 } from '@/views/Request/libs'\nimport { updateScheme as _updateScheme } from '@/views/Request/RequestSection/helpers/update-scheme'\n\nimport OAuthScopesInput from './OAuthScopesInput.vue'\nimport RequestAuthDataTableInput from './RequestAuthDataTableInput.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n flow,\n persistAuth = false,\n scheme,\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n flow: Oauth2Flow\n persistAuth: boolean\n scheme: SecuritySchemeOauth2\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst loader = useLoadingState()\nconst { toast } = useToasts()\nconst storeContext = useWorkspace()\n\n/** Update the current scheme */\nconst updateScheme: UpdateScheme = (path, value) =>\n _updateScheme(scheme.uid, path, value, storeContext, persistAuth)\n\n/** Authorize the user using specified flow */\nconst handleAuthorize = async () => {\n if (loader.isActive || !collection?.uid) {\n return\n }\n if (!server) {\n toast('No server selected', 'error')\n return\n }\n loader.start()\n\n const [error, accessToken] = await authorizeOauth2(\n flow,\n server,\n workspace?.proxyUrl,\n )\n\n await loader.clear()\n\n if (accessToken) {\n updateScheme(`flows.${flow.type}.token`, accessToken)\n emits('authorized')\n } else {\n console.error(error)\n toast(error?.message ?? 'Failed to authorize', 'error')\n }\n}\n\n/** To make prop drilling a little easier */\nconst dataTableInputProps = {\n environment,\n envVariables,\n workspace,\n}\n</script>\n\n<template>\n <!-- Access Token Granted -->\n <template v-if=\"flow.token\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"border-r-transparent\"\n :modelValue=\"flow.token\"\n placeholder=\"QUxMIFlPVVIgQkFTRSBBUkUgQkVMT05HIFRPIFVT\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(`flows.${flow.type}.token`, v)\">\n Access Token\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow class=\"min-w-full\">\n <div class=\"flex h-8 items-center justify-end border-t\">\n <ScalarButton\n class=\"mr-1 p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"updateScheme(`flows.${flow.type}.token`, '')\">\n Clear\n </ScalarButton>\n <slot name=\"oauth-actions\" />\n </div>\n </DataTableRow>\n </template>\n\n <template v-else>\n <DataTableRow>\n <!-- Auth URL -->\n <RequestAuthDataTableInput\n v-if=\"'authorizationUrl' in flow\"\n v-bind=\"dataTableInputProps\"\n containerClass=\"border-r-0\"\n :modelValue=\"flow.authorizationUrl\"\n placeholder=\"https://galaxy.scalar.com/authorize\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.authorizationUrl`, v)\n \">\n Auth URL\n </RequestAuthDataTableInput>\n\n <!-- Token URL -->\n <RequestAuthDataTableInput\n v-if=\"'tokenUrl' in flow\"\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.tokenUrl\"\n placeholder=\"https://galaxy.scalar.com/token\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.tokenUrl`, v)\n \">\n Token URL\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"'x-scalar-redirect-uri' in flow\">\n <!-- Redirect URI -->\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow['x-scalar-redirect-uri']\"\n placeholder=\"https://galaxy.scalar.com/callback\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.x-scalar-redirect-uri`, v)\n \">\n Redirect URL\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Username and password -->\n <template v-if=\"flow.type === 'password'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"text-c-2\"\n :modelValue=\"flow.username\"\n placeholder=\"janedoe\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.username`, v)\n \">\n Username\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.password\"\n placeholder=\"********\"\n type=\"password\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.password`, v)\n \">\n Password\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n\n <!-- Client ID -->\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow['x-scalar-client-id']\"\n placeholder=\"12345\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.x-scalar-client-id`, v)\n \">\n Client ID\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Client Secret (Authorization Code / Client Credentials / Password (optional)) -->\n <DataTableRow v-if=\"'clientSecret' in flow\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.clientSecret\"\n placeholder=\"XYZ123\"\n type=\"password\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.clientSecret`, v)\n \">\n Client Secret\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- PKCE -->\n <DataTableRow v-if=\"'x-usePkce' in flow\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :enum=\"pkceOptions\"\n :modelValue=\"flow['x-usePkce']\"\n readOnly\n @update:modelValue=\"\n (v) =>\n updateScheme(\n `flows.${flow.type}.x-usePkce`,\n v as (typeof pkceOptions)[number],\n )\n \">\n Use PKCE\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Scopes -->\n <DataTableRow v-if=\"Object.keys(flow.scopes ?? {}).length\">\n <OAuthScopesInput\n :flow=\"flow\"\n :updateScheme=\"updateScheme\" />\n </DataTableRow>\n\n <!-- Open ID Connect -->\n <!-- <DataTableRow -->\n <!-- v-else-if=\"activeScheme?.type === 'openIdConnect'\" -->\n <!-- class=\"border-r-transparent\"> -->\n <!-- <DataTableInput -->\n <!-- v-model=\"password\" -->\n <!-- placeholder=\"Token\"> -->\n <!-- TODO -->\n <!-- </DataTableInput> -->\n <!-- <DataTableCell class=\"flex items-center\"> -->\n <!-- <ScalarButton size=\"sm\"> Authorize </ScalarButton> -->\n <!-- </DataTableCell> -->\n <!-- </DataTableRow> -->\n </template>\n <template v-if=\"!flow.token\">\n <DataTableRow class=\"min-w-full\">\n <div class=\"flex h-8 w-full items-center justify-end border-t\">\n <ScalarButton\n class=\"mr-0.75 p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"handleAuthorize\">\n Authorize\n </ScalarButton>\n </div>\n </DataTableRow>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarMarkdownSummary } from '@scalar/components'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type {\n Collection,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport type { Path, PathValue } from '@scalar/object-utils/nested'\nimport { capitalize, computed, onMounted, ref } from 'vue'\n\nimport { DataTableCell, DataTableRow } from '@/components/DataTable'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace } from '@/store/store'\nimport { updateScheme as _updateScheme } from '@/views/Request/RequestSection/helpers/update-scheme'\nimport { restoreAuthFromLocalStorage } from '@/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage'\n\nimport OAuth2 from './OAuth2.vue'\nimport RequestAuthDataTableInput from './RequestAuthDataTableInput.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n layout,\n persistAuth = false,\n securitySchemeUids,\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n persistAuth: boolean\n securitySchemeUids: string[]\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst storeContext = useWorkspace()\nconst { securitySchemes } = storeContext\nconst security = computed(() =>\n securitySchemeUids.map((uid) => ({\n scheme: securitySchemes[uid],\n })),\n)\n\nconst activeFlow = ref('')\n\nconst generateLabel = (scheme: SecurityScheme) => {\n // ApiKeyHeader: header\n const description = scheme.description ? `: ${scheme.description}` : ''\n const baseLabel = `${capitalize(scheme.nameKey)}${description || `: ${scheme.type}`}`\n\n if (scheme.type === 'apiKey') {\n return `${capitalize(scheme.nameKey)}${description || `: ${scheme.in}`}`\n }\n\n // OAuth2: Authorization Code\n if (scheme.type === 'oauth2') {\n const firstFlow = Object.values(scheme.flows ?? {})[0]\n\n return `${capitalize(scheme.nameKey)}: ${\n activeFlow.value ? activeFlow.value : (firstFlow?.type ?? '')\n }${description}`\n }\n\n // HTTP: Bearer\n if (scheme.type === 'http') {\n return `${capitalize(scheme.nameKey)}: ${scheme.scheme}${description}`\n }\n\n // Default\n return `${baseLabel}${description}`\n}\n\n/** Wrapper for the updateScheme function */\nconst updateScheme = <\n U extends SecurityScheme['uid'],\n P extends Path<SecurityScheme>,\n>(\n uid: U,\n path: P,\n value: NonNullable<PathValue<SecurityScheme, P>>,\n) => {\n _updateScheme(uid, path, value, storeContext, persistAuth)\n}\n\n// Restore auth from local storage on mount\nonMounted(() => {\n if (!persistAuth) {\n return\n }\n\n restoreAuthFromLocalStorage(storeContext, collection.uid)\n})\n\n/** To make prop drilling a little easier */\nconst dataTableInputProps = {\n environment,\n envVariables,\n workspace,\n}\n</script>\n<template>\n <!-- Loop over for multiple auth selection -->\n <template\n v-for=\"{ scheme } in security\"\n :key=\"scheme?.uid\">\n <!-- Header -->\n <DataTableRow v-if=\"security.length > 1 && scheme\">\n <DataTableCell\n :aria-label=\"generateLabel(scheme)\"\n class=\"text-c-2 group/auth flex items-center leading-[22px] whitespace-nowrap outline-none hover:whitespace-normal\">\n <p\n class=\"bg-b-1 text-c-2 outline-b-3 top-0 z-1 h-full w-full overflow-hidden px-3 py-1.25 text-ellipsis group-hover/auth:absolute group-hover/auth:h-auto group-hover/auth:border-b *:first:line-clamp-1 *:first:text-ellipsis group-hover/auth:*:first:line-clamp-none\">\n {{ generateLabel(scheme) }}\n </p>\n </DataTableCell>\n </DataTableRow>\n\n <!-- Description -->\n <DataTableRow v-if=\"scheme?.description && security.length <= 1\">\n <DataTableCell\n :aria-label=\"scheme.description\"\n class=\"max-h-[auto]\">\n <ScalarMarkdownSummary\n class=\"auth-description bg-b-1 text-c-2 min-w-0 flex-1 px-3 py-1.25\"\n :value=\"scheme.description\" />\n </DataTableCell>\n </DataTableRow>\n\n <!-- HTTP -->\n <template v-if=\"scheme?.type === 'http'\">\n <!-- Bearer -->\n <DataTableRow v-if=\"scheme.scheme === 'bearer'\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :containerClass=\"layout === 'reference' && 'border-t'\"\n :modelValue=\"scheme.token\"\n placeholder=\"Token\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'token', v)\">\n Bearer Token\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- HTTP Basic -->\n <template v-else-if=\"scheme?.scheme === 'basic'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"text-c-2\"\n :modelValue=\"scheme.username\"\n placeholder=\"janedoe\"\n required\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'username', v)\">\n Username\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"scheme.password\"\n placeholder=\"********\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'password', v)\">\n Password\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n </template>\n\n <!-- API Key -->\n <template v-else-if=\"scheme?.type === 'apiKey'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :containerClass=\"layout === 'reference' && 'border-t'\"\n :modelValue=\"scheme.name\"\n placeholder=\"api-key\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'name', v)\">\n Name\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"scheme.value\"\n placeholder=\"QUxMIFlPVVIgQkFTRSBBUkUgQkVMT05HIFRPIFVT\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'value', v)\">\n Value\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n\n <!-- OAuth 2 -->\n <template v-else-if=\"scheme?.type === 'oauth2'\">\n <DataTableRow>\n <div\n v-if=\"Object.keys(scheme.flows).length > 1\"\n class=\"flex min-h-8 border-t text-base\">\n <div class=\"flex h-8 max-w-full gap-2.5 overflow-x-auto px-3\">\n <button\n v-for=\"(_, key, ind) in scheme?.flows\"\n :key=\"key\"\n class=\"floating-bg text-c-3 relative cursor-pointer border-b-[1px] border-transparent py-1 text-base font-medium\"\n :class=\"{\n '!text-c-1 !rounded-none border-b-[1px] !border-current':\n layout !== 'reference' &&\n (activeFlow === key || (ind === 0 && !activeFlow)),\n '!text-c-1 !rounded-none border-b-[1px] !border-current opacity-100':\n layout === 'reference' &&\n (activeFlow === key || (ind === 0 && !activeFlow)),\n }\"\n type=\"button\"\n @click=\"activeFlow = key\">\n <span class=\"relative z-10\">{{ key }}</span>\n </button>\n </div>\n </div>\n </DataTableRow>\n <template\n v-for=\"(flow, key, ind) in scheme?.flows\"\n :key=\"key\">\n <OAuth2\n v-if=\"activeFlow === key || (ind === 0 && !activeFlow)\"\n v-bind=\"dataTableInputProps\"\n :collection=\"collection\"\n :flow=\"flow!\"\n :persistAuth=\"persistAuth\"\n :scheme=\"scheme\"\n :server=\"server\"\n :workspace=\"workspace\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </OAuth2>\n </template>\n </template>\n\n <!-- Open ID Connect -->\n <template v-else-if=\"scheme?.type === 'openIdConnect'\">\n <div\n class=\"text-c-3 bg-b-1 flex min-h-[calc(4rem+1px)] items-center justify-center border-t border-b-0 px-4 text-base\"\n :class=\"{ 'rounded-b-lg': layout === 'reference' }\">\n Coming soon\n </div>\n </template>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarMarkdownSummary } from '@scalar/components'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type {\n Collection,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport type { Path, PathValue } from '@scalar/object-utils/nested'\nimport { capitalize, computed, onMounted, ref } from 'vue'\n\nimport { DataTableCell, DataTableRow } from '@/components/DataTable'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace } from '@/store/store'\nimport { updateScheme as _updateScheme } from '@/views/Request/RequestSection/helpers/update-scheme'\nimport { restoreAuthFromLocalStorage } from '@/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage'\n\nimport OAuth2 from './OAuth2.vue'\nimport RequestAuthDataTableInput from './RequestAuthDataTableInput.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n layout,\n persistAuth = false,\n securitySchemeUids,\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n persistAuth: boolean\n securitySchemeUids: string[]\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst storeContext = useWorkspace()\nconst { securitySchemes } = storeContext\nconst security = computed(() =>\n securitySchemeUids.map((uid) => ({\n scheme: securitySchemes[uid],\n })),\n)\n\nconst activeFlow = ref('')\n\nconst generateLabel = (scheme: SecurityScheme) => {\n // ApiKeyHeader: header\n const description = scheme.description ? `: ${scheme.description}` : ''\n const baseLabel = `${capitalize(scheme.nameKey)}${description || `: ${scheme.type}`}`\n\n if (scheme.type === 'apiKey') {\n return `${capitalize(scheme.nameKey)}${description || `: ${scheme.in}`}`\n }\n\n // OAuth2: Authorization Code\n if (scheme.type === 'oauth2') {\n const firstFlow = Object.values(scheme.flows ?? {})[0]\n\n return `${capitalize(scheme.nameKey)}: ${\n activeFlow.value ? activeFlow.value : (firstFlow?.type ?? '')\n }${description}`\n }\n\n // HTTP: Bearer\n if (scheme.type === 'http') {\n return `${capitalize(scheme.nameKey)}: ${scheme.scheme}${description}`\n }\n\n // Default\n return `${baseLabel}${description}`\n}\n\n/** Wrapper for the updateScheme function */\nconst updateScheme = <\n U extends SecurityScheme['uid'],\n P extends Path<SecurityScheme>,\n>(\n uid: U,\n path: P,\n value: NonNullable<PathValue<SecurityScheme, P>>,\n) => {\n _updateScheme(uid, path, value, storeContext, persistAuth)\n}\n\n// Restore auth from local storage on mount\nonMounted(() => {\n if (!persistAuth) {\n return\n }\n\n restoreAuthFromLocalStorage(storeContext, collection.uid)\n})\n\n/** To make prop drilling a little easier */\nconst dataTableInputProps = {\n environment,\n envVariables,\n workspace,\n}\n</script>\n<template>\n <!-- Loop over for multiple auth selection -->\n <template\n v-for=\"{ scheme } in security\"\n :key=\"scheme?.uid\">\n <!-- Header -->\n <DataTableRow v-if=\"security.length > 1 && scheme\">\n <DataTableCell\n :aria-label=\"generateLabel(scheme)\"\n class=\"text-c-2 group/auth flex items-center leading-[22px] whitespace-nowrap outline-none hover:whitespace-normal\">\n <p\n class=\"bg-b-1 text-c-2 outline-b-3 top-0 z-1 h-full w-full overflow-hidden px-3 py-1.25 text-ellipsis group-hover/auth:absolute group-hover/auth:h-auto group-hover/auth:border-b *:first:line-clamp-1 *:first:text-ellipsis group-hover/auth:*:first:line-clamp-none\">\n {{ generateLabel(scheme) }}\n </p>\n </DataTableCell>\n </DataTableRow>\n\n <!-- Description -->\n <DataTableRow v-if=\"scheme?.description && security.length <= 1\">\n <DataTableCell\n :aria-label=\"scheme.description\"\n class=\"max-h-[auto]\">\n <ScalarMarkdownSummary\n class=\"auth-description bg-b-1 text-c-2 min-w-0 flex-1 px-3 py-1.25\"\n :value=\"scheme.description\" />\n </DataTableCell>\n </DataTableRow>\n\n <!-- HTTP -->\n <template v-if=\"scheme?.type === 'http'\">\n <!-- Bearer -->\n <DataTableRow v-if=\"scheme.scheme === 'bearer'\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :containerClass=\"layout === 'reference' && 'border-t'\"\n :modelValue=\"scheme.token\"\n placeholder=\"Token\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'token', v)\">\n Bearer Token\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- HTTP Basic -->\n <template v-else-if=\"scheme?.scheme === 'basic'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"text-c-2\"\n :modelValue=\"scheme.username\"\n placeholder=\"janedoe\"\n required\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'username', v)\">\n Username\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"scheme.password\"\n placeholder=\"********\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'password', v)\">\n Password\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n </template>\n\n <!-- API Key -->\n <template v-else-if=\"scheme?.type === 'apiKey'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :containerClass=\"layout === 'reference' && 'border-t'\"\n :modelValue=\"scheme.name\"\n placeholder=\"api-key\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'name', v)\">\n Name\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"scheme.value\"\n placeholder=\"QUxMIFlPVVIgQkFTRSBBUkUgQkVMT05HIFRPIFVT\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'value', v)\">\n Value\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n\n <!-- OAuth 2 -->\n <template v-else-if=\"scheme?.type === 'oauth2'\">\n <DataTableRow>\n <div\n v-if=\"Object.keys(scheme.flows).length > 1\"\n class=\"flex min-h-8 border-t text-base\">\n <div class=\"flex h-8 max-w-full gap-2.5 overflow-x-auto px-3\">\n <button\n v-for=\"(_, key, ind) in scheme?.flows\"\n :key=\"key\"\n class=\"floating-bg text-c-3 relative cursor-pointer border-b-[1px] border-transparent py-1 text-base font-medium\"\n :class=\"{\n '!text-c-1 !rounded-none border-b-[1px] !border-current':\n layout !== 'reference' &&\n (activeFlow === key || (ind === 0 && !activeFlow)),\n '!text-c-1 !rounded-none border-b-[1px] !border-current opacity-100':\n layout === 'reference' &&\n (activeFlow === key || (ind === 0 && !activeFlow)),\n }\"\n type=\"button\"\n @click=\"activeFlow = key\">\n <span class=\"relative z-10\">{{ key }}</span>\n </button>\n </div>\n </div>\n </DataTableRow>\n <template\n v-for=\"(flow, key, ind) in scheme?.flows\"\n :key=\"key\">\n <OAuth2\n v-if=\"activeFlow === key || (ind === 0 && !activeFlow)\"\n v-bind=\"dataTableInputProps\"\n :collection=\"collection\"\n :flow=\"flow!\"\n :persistAuth=\"persistAuth\"\n :scheme=\"scheme\"\n :server=\"server\"\n :workspace=\"workspace\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </OAuth2>\n </template>\n </template>\n\n <!-- Open ID Connect -->\n <template v-else-if=\"scheme?.type === 'openIdConnect'\">\n <div\n class=\"text-c-3 bg-b-1 flex min-h-[calc(4rem+1px)] items-center justify-center border-t border-b-0 px-4 text-base\"\n :class=\"{ 'rounded-b-lg': layout === 'reference' }\">\n Coming soon\n </div>\n </template>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { useModal } from '@scalar/components'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type {\n Collection,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { computed, ref, watch } from 'vue'\n\nimport { DataTable } from '@/components/DataTable'\nimport { useWorkspace } from '@/store'\nimport type { EnvVariable } from '@/store/active-entities'\n\nimport DeleteRequestAuthModal from './DeleteRequestAuthModal.vue'\nimport RequestAuthTab from './RequestAuthTab.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n layout = 'client',\n persistAuth = false,\n selectedSchemeOptions = [],\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n persistAuth: boolean\n selectedSchemeOptions: { id: string; label: string }[]\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n activeSchemes: [schemes: SecurityScheme[]]\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst { securitySchemes } = useWorkspace()\nconst deleteSchemeModal = useModal()\nconst selectedScheme = ref<{ id: SecurityScheme['uid']; label: string } | null>(\n null,\n)\n\n/** Add new ref for active tab */\nconst activeAuthIndex = ref(0)\n\n/** Return currently selected schemes including complex auth */\nconst activeScheme = computed(() => {\n if (!selectedSchemeOptions || selectedSchemeOptions.length === 0) {\n return []\n }\n\n const option = selectedSchemeOptions[activeAuthIndex.value]\n if (!option) {\n return []\n }\n\n const keys = option.id.split(',').filter(Boolean)\n return keys.length > 1 ? keys : [option.id]\n})\n\n/** Emit active schemes */\nwatch(\n activeScheme,\n (newActiveSchemes) => {\n emits(\n 'activeSchemes',\n newActiveSchemes\n .map((scheme) => securitySchemes[scheme])\n .filter(isDefined),\n )\n },\n { immediate: true },\n)\n\n/** Return true if there are any active schemes */\nconst hasActiveSchemes = computed(() => activeScheme.value.length > 0)\n\nwatch(\n () => selectedSchemeOptions,\n (newOptions) => {\n if (!newOptions || !newOptions[activeAuthIndex.value]) {\n activeAuthIndex.value = Math.max(0, activeAuthIndex.value - 1)\n }\n },\n)\n</script>\n<template>\n <form @submit.prevent>\n <div\n v-if=\"selectedSchemeOptions.length > 1\"\n class=\"box-content flex flex-wrap gap-x-2.5 overflow-hidden border border-b-0 px-3\"\n :class=\"layout === 'client' && 'border-x-0'\">\n <div\n v-for=\"(option, index) in selectedSchemeOptions\"\n :key=\"option.id\"\n class=\"relative z-1 -mb-[var(--scalar-border-width)] flex h-8 cursor-pointer\"\n :class=\"[activeAuthIndex === index ? 'text-c-1' : 'text-c-3']\">\n <button\n class=\"floating-bg relative cursor-pointer border-b-[1px] border-transparent py-1 text-sm font-medium\"\n type=\"button\"\n @click=\"activeAuthIndex = index\">\n <span class=\"relative z-10 font-medium whitespace-nowrap\">{{\n option.label\n }}</span>\n </button>\n <div\n v-if=\"activeAuthIndex === index\"\n class=\"absolute inset-x-1 bottom-[var(--scalar-border-width)] left-1/2 z-1 h-px w-full -translate-x-1/2 bg-current\" />\n </div>\n </div>\n\n <DataTable\n v-if=\"hasActiveSchemes\"\n class=\"flex-1\"\n :class=\"layout === 'reference' && 'bg-b-1 rounded-b-lg border border-t-0'\"\n :columns=\"['']\"\n presentational>\n <RequestAuthTab\n :collection=\"collection\"\n :envVariables=\"envVariables\"\n :environment=\"environment\"\n :layout=\"layout\"\n :persistAuth=\"persistAuth\"\n :securitySchemeUids=\"activeScheme\"\n :server=\"server\"\n :workspace=\"workspace\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </RequestAuthTab>\n </DataTable>\n\n <div\n v-else\n class=\"text-c-3 bg-b-1 flex min-h-16 items-center justify-center border-t px-4 text-sm\"\n :class=\"\n layout === 'reference' && 'min-h-[calc(4rem+0.5px)] rounded-b-lg border'\n \">\n No authentication selected\n </div>\n\n <DeleteRequestAuthModal\n :scheme=\"selectedScheme\"\n :state=\"deleteSchemeModal\"\n @close=\"deleteSchemeModal.hide()\" />\n </form>\n</template>\n<style scoped>\n.auth-combobox-position {\n margin-left: 120px;\n}\n.scroll-timeline-x {\n overflow: auto;\n scroll-timeline: --scroll-timeline x;\n /* Firefox supports */\n scroll-timeline: --scroll-timeline horizontal;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n.fade-left,\n.fade-right {\n position: sticky;\n content: '';\n height: 100%;\n animation-name: fadein;\n animation-duration: 1ms;\n animation-direction: reverse;\n animation-timeline: --scroll-timeline;\n min-height: 24px;\n pointer-events: none;\n}\n.fade-left {\n background: linear-gradient(\n -90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n min-width: 3px;\n left: -1px;\n animation-direction: normal;\n}\n.fade-right {\n background: linear-gradient(\n 90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n margin-left: -20px;\n min-width: 24px;\n right: -1px;\n top: 0;\n}\n@keyframes fadein {\n 0% {\n opacity: 0;\n }\n 15% {\n opacity: 1;\n }\n}\n\n/* .references-auth-data-table :deep(table td) {\n margin: 0 9px;\n background: var(--scalar-background-2);\n} */\n\n/* More than one selected */\n/* .references-auth-data-table\n :deep(table:has(.group\\/delete) tr:nth-child(2) td) {\n border-radius: var(--scalar-radius) var(--scalar-radius) 0 0;\n border: 0.5px solid var(--scalar-border-color);\n border-bottom: none;\n}\n.references-auth-data-table\n :deep(table:not(:has(.group\\/delete)) tr:nth-child(3) td) {\n border-radius: var(--scalar-radius) var(--scalar-radius) 0 0;\n border: 0.5px solid var(--scalar-border-color);\n border-bottom: none;\n}\n.references-auth-data-table :deep(table tr:last-child td) {\n border-radius: 0 0 var(--scalar-radius) var(--scalar-radius);\n border: 0.5px solid var(--scalar-border-color);\n border-top: none;\n}\n\n.references-auth-data-table :deep(.references-auth-row:last-of-type) td {\n border-radius: 0 0 var(--scalar-radius) var(--scalar-radius);\n background: blue;\n}\n.references-auth-data-table :deep(.scalar-data-table-input-required) {\n background-color: var(--scalar-background-2);\n --tw-bg-base: var(--scalar-background-2);\n --tw-shadow: var(--scalar-background-2);\n} */\n</style>\n","<script setup lang=\"ts\">\nimport { useModal } from '@scalar/components'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type {\n Collection,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { computed, ref, watch } from 'vue'\n\nimport { DataTable } from '@/components/DataTable'\nimport { useWorkspace } from '@/store'\nimport type { EnvVariable } from '@/store/active-entities'\n\nimport DeleteRequestAuthModal from './DeleteRequestAuthModal.vue'\nimport RequestAuthTab from './RequestAuthTab.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n layout = 'client',\n persistAuth = false,\n selectedSchemeOptions = [],\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n persistAuth: boolean\n selectedSchemeOptions: { id: string; label: string }[]\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n activeSchemes: [schemes: SecurityScheme[]]\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst { securitySchemes } = useWorkspace()\nconst deleteSchemeModal = useModal()\nconst selectedScheme = ref<{ id: SecurityScheme['uid']; label: string } | null>(\n null,\n)\n\n/** Add new ref for active tab */\nconst activeAuthIndex = ref(0)\n\n/** Return currently selected schemes including complex auth */\nconst activeScheme = computed(() => {\n if (!selectedSchemeOptions || selectedSchemeOptions.length === 0) {\n return []\n }\n\n const option = selectedSchemeOptions[activeAuthIndex.value]\n if (!option) {\n return []\n }\n\n const keys = option.id.split(',').filter(Boolean)\n return keys.length > 1 ? keys : [option.id]\n})\n\n/** Emit active schemes */\nwatch(\n activeScheme,\n (newActiveSchemes) => {\n emits(\n 'activeSchemes',\n newActiveSchemes\n .map((scheme) => securitySchemes[scheme])\n .filter(isDefined),\n )\n },\n { immediate: true },\n)\n\n/** Return true if there are any active schemes */\nconst hasActiveSchemes = computed(() => activeScheme.value.length > 0)\n\nwatch(\n () => selectedSchemeOptions,\n (newOptions) => {\n if (!newOptions || !newOptions[activeAuthIndex.value]) {\n activeAuthIndex.value = Math.max(0, activeAuthIndex.value - 1)\n }\n },\n)\n</script>\n<template>\n <form @submit.prevent>\n <div\n v-if=\"selectedSchemeOptions.length > 1\"\n class=\"box-content flex flex-wrap gap-x-2.5 overflow-hidden border border-b-0 px-3\"\n :class=\"layout === 'client' && 'border-x-0'\">\n <div\n v-for=\"(option, index) in selectedSchemeOptions\"\n :key=\"option.id\"\n class=\"relative z-1 -mb-[var(--scalar-border-width)] flex h-8 cursor-pointer\"\n :class=\"[activeAuthIndex === index ? 'text-c-1' : 'text-c-3']\">\n <button\n class=\"floating-bg relative cursor-pointer border-b-[1px] border-transparent py-1 text-sm font-medium\"\n type=\"button\"\n @click=\"activeAuthIndex = index\">\n <span class=\"relative z-10 font-medium whitespace-nowrap\">{{\n option.label\n }}</span>\n </button>\n <div\n v-if=\"activeAuthIndex === index\"\n class=\"absolute inset-x-1 bottom-[var(--scalar-border-width)] left-1/2 z-1 h-px w-full -translate-x-1/2 bg-current\" />\n </div>\n </div>\n\n <DataTable\n v-if=\"hasActiveSchemes\"\n class=\"flex-1\"\n :class=\"layout === 'reference' && 'bg-b-1 rounded-b-lg border border-t-0'\"\n :columns=\"['']\"\n presentational>\n <RequestAuthTab\n :collection=\"collection\"\n :envVariables=\"envVariables\"\n :environment=\"environment\"\n :layout=\"layout\"\n :persistAuth=\"persistAuth\"\n :securitySchemeUids=\"activeScheme\"\n :server=\"server\"\n :workspace=\"workspace\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </RequestAuthTab>\n </DataTable>\n\n <div\n v-else\n class=\"text-c-3 bg-b-1 flex min-h-16 items-center justify-center border-t px-4 text-sm\"\n :class=\"\n layout === 'reference' && 'min-h-[calc(4rem+0.5px)] rounded-b-lg border'\n \">\n No authentication selected\n </div>\n\n <DeleteRequestAuthModal\n :scheme=\"selectedScheme\"\n :state=\"deleteSchemeModal\"\n @close=\"deleteSchemeModal.hide()\" />\n </form>\n</template>\n<style scoped>\n.auth-combobox-position {\n margin-left: 120px;\n}\n.scroll-timeline-x {\n overflow: auto;\n scroll-timeline: --scroll-timeline x;\n /* Firefox supports */\n scroll-timeline: --scroll-timeline horizontal;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n.fade-left,\n.fade-right {\n position: sticky;\n content: '';\n height: 100%;\n animation-name: fadein;\n animation-duration: 1ms;\n animation-direction: reverse;\n animation-timeline: --scroll-timeline;\n min-height: 24px;\n pointer-events: none;\n}\n.fade-left {\n background: linear-gradient(\n -90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n min-width: 3px;\n left: -1px;\n animation-direction: normal;\n}\n.fade-right {\n background: linear-gradient(\n 90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n margin-left: -20px;\n min-width: 24px;\n right: -1px;\n top: 0;\n}\n@keyframes fadein {\n 0% {\n opacity: 0;\n }\n 15% {\n opacity: 1;\n }\n}\n\n/* .references-auth-data-table :deep(table td) {\n margin: 0 9px;\n background: var(--scalar-background-2);\n} */\n\n/* More than one selected */\n/* .references-auth-data-table\n :deep(table:has(.group\\/delete) tr:nth-child(2) td) {\n border-radius: var(--scalar-radius) var(--scalar-radius) 0 0;\n border: 0.5px solid var(--scalar-border-color);\n border-bottom: none;\n}\n.references-auth-data-table\n :deep(table:not(:has(.group\\/delete)) tr:nth-child(3) td) {\n border-radius: var(--scalar-radius) var(--scalar-radius) 0 0;\n border: 0.5px solid var(--scalar-border-color);\n border-bottom: none;\n}\n.references-auth-data-table :deep(table tr:last-child td) {\n border-radius: 0 0 var(--scalar-radius) var(--scalar-radius);\n border: 0.5px solid var(--scalar-border-color);\n border-top: none;\n}\n\n.references-auth-data-table :deep(.references-auth-row:last-of-type) td {\n border-radius: 0 0 var(--scalar-radius) var(--scalar-radius);\n background: blue;\n}\n.references-auth-data-table :deep(.scalar-data-table-input-required) {\n background-color: var(--scalar-background-2);\n --tw-bg-base: var(--scalar-background-2);\n --tw-shadow: var(--scalar-background-2);\n} */\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarButton,\n ScalarComboboxMultiselect,\n ScalarIconButton,\n ScalarListboxCheckbox,\n useModal,\n type Icon,\n type ScalarButton as ScalarButtonType,\n} from '@scalar/components'\nimport {\n CLIENT_LS_KEYS,\n safeLocalStorage,\n} from '@scalar/helpers/object/local-storage'\nimport { ScalarIconCaretDown, ScalarIconTrash } from '@scalar/icons'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type { SelectedSecuritySchemeUids } from '@scalar/oas-utils/entities/shared'\nimport type {\n Collection,\n Operation,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { isDefined } from '@scalar/oas-utils/helpers'\nimport { computed, ref, useId } from 'vue'\n\nimport ViewLayoutCollapse from '@/components/ViewLayout/ViewLayoutCollapse.vue'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace } from '@/store/store'\nimport type { SecuritySchemeOption } from '@/views/Request/consts'\nimport {\n formatComplexScheme,\n formatScheme,\n getSchemeOptions,\n getSecurityRequirements,\n} from '@/views/Request/libs'\n\nimport DeleteRequestAuthModal from './DeleteRequestAuthModal.vue'\nimport RequestAuthDataTable from './RequestAuthDataTable.vue'\n\nconst {\n collection,\n isReadOnly = false,\n environment,\n envVariables,\n layout,\n operation,\n persistAuth = false,\n selectedSecuritySchemeUids,\n server,\n title,\n workspace,\n} = defineProps<{\n collection: Collection\n /** Controls whether user can add new auth schemes */\n isReadOnly?: boolean\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n operation?: Operation | undefined\n persistAuth?: boolean\n selectedSecuritySchemeUids: SelectedSecuritySchemeUids\n server: Server | undefined\n title: string\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n /** Emits when the user has authorized with an oauth2 flow */\n authorized: []\n /** Emits the currently active scheme */\n activeSchemes: [schemes: SecurityScheme[]]\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst {\n securitySchemes,\n securitySchemeMutators,\n requestMutators,\n collectionMutators,\n} = useWorkspace()\n\nconst titleId = useId()\n\nconst comboboxButtonRef = ref<typeof ScalarButtonType | null>(null)\nconst deleteSchemeModal = useModal()\nconst selectedScheme = ref<{ id: SecurityScheme['uid']; label: string } | null>(\n null,\n)\nconst isViewLayoutOpen = ref(false)\n\n/** Security requirements for the request */\nconst securityRequirements = computed(() => {\n const requirements = getSecurityRequirements(operation, collection)\n\n /** Filter out empty objects */\n const filteredRequirements = requirements.filter((r) => Object.keys(r).length)\n\n return { filteredRequirements, requirements }\n})\n\n/** Indicates if auth is required */\nconst authIndicator = computed(() => {\n const { filteredRequirements, requirements } = securityRequirements.value\n if (!requirements.length) {\n return null\n }\n\n /**\n * Security is optional if one empty object exists in the array &\n * no complex auth requirements (with multiple auth)\n */\n const hasComplexRequirement = requirements.some(\n (req) => Object.keys(req).length > 1,\n )\n const isOptional =\n !hasComplexRequirement && filteredRequirements.length < requirements.length\n\n const icon: Icon = isOptional ? 'Unlock' : 'Lock'\n\n /** Text to indicate auth requirements */\n const text = isOptional ? 'Optional' : 'Required'\n\n return { icon, text }\n})\n\n/**\n * Currently selected auth schemes on the collection, we store complex auth joined by a comma to represent the array\n * in the string\n */\nconst selectedSchemeOptions = computed<SecuritySchemeOption[]>(() =>\n selectedSecuritySchemeUids\n .map((s) => {\n if (Array.isArray(s)) {\n return formatComplexScheme(s, securitySchemes)\n }\n const scheme = securitySchemes[s ?? '']\n if (!scheme) {\n return undefined\n }\n return formatScheme(scheme)\n })\n .filter(isDefined),\n)\n\n/** Update the selected auth types */\nfunction updateSelectedAuth(entries: SecuritySchemeOption[]) {\n const addNewOption = entries.find((e) => e.payload)\n const _entries = entries\n .filter((e) => !e.payload)\n .map(({ id }) => {\n const arr = id.split(',')\n return arr.length > 1\n ? (arr as SecurityScheme['uid'][])\n : (id as SecurityScheme['uid'])\n })\n\n // Adding new auth\n if (addNewOption?.payload) {\n // Create new scheme\n const scheme = securitySchemeMutators.add(\n addNewOption.payload,\n collection?.uid,\n )\n if (scheme) {\n _entries.push(scheme.uid)\n }\n }\n\n editSelectedSchemeUids(_entries)\n}\n\nconst editSelectedSchemeUids = (uids: SelectedSecuritySchemeUids) => {\n // Set as selected on the collection for the modal\n if (collection.useCollectionSecurity) {\n collectionMutators.edit(collection.uid, 'selectedSecuritySchemeUids', uids)\n\n if (!persistAuth) {\n return\n }\n\n // We must convert the uids to nameKeys first\n const nameKeys = uids.map((uids) => {\n // Handle complex auth\n if (Array.isArray(uids)) {\n return uids.map((uid) => securitySchemes[uid]?.nameKey)\n }\n\n return securitySchemes[uids]?.nameKey\n })\n\n safeLocalStorage().setItem(\n CLIENT_LS_KEYS.SELECTED_SECURITY_SCHEMES,\n JSON.stringify(nameKeys),\n )\n }\n // Set as selected on request\n else if (operation?.uid) {\n requestMutators.edit(operation.uid, 'selectedSecuritySchemeUids', uids)\n }\n}\n\nfunction handleDeleteScheme({ id, label }: { id: string; label: string }) {\n // We cast the type here just to make the combobox happy, TODO: we should make ID be string-like and accept brands\n selectedScheme.value = { id: id as SecurityScheme['uid'], label }\n deleteSchemeModal.show()\n}\n\nconst unselectAuth = (unSelectUid?: string) => {\n if (!unSelectUid) {\n return\n }\n const newUids = selectedSecuritySchemeUids.filter((uid) => {\n const arr = unSelectUid.split(',')\n // Handle complex auth\n if (arr.length > 1 && Array.isArray(uid) && arr.length === uid.length) {\n return uid.every((u) => !arr.includes(u))\n }\n // Standard string auth\n return uid !== unSelectUid\n })\n editSelectedSchemeUids(newUids)\n comboboxButtonRef.value?.$el.focus()\n deleteSchemeModal.hide()\n}\n\n/** Options for the security scheme dropdown */\nconst schemeOptions = computed(() =>\n getSchemeOptions(\n securityRequirements.value.filteredRequirements,\n collection?.securitySchemes ?? [],\n securitySchemes,\n isReadOnly,\n ),\n)\n\nconst openAuthCombobox = (event: Event) => {\n // If the layout is open, we don't want it to close on auth label click\n if (isViewLayoutOpen.value) {\n event.stopPropagation()\n }\n\n comboboxButtonRef.value?.$el.click()\n}\n</script>\n<template>\n <ViewLayoutCollapse\n class=\"group/params relative\"\n :itemCount=\"selectedSchemeOptions.length\"\n :layout=\"layout\"\n @update:modelValue=\"isViewLayoutOpen = $event\">\n <template #title>\n <div\n :id=\"titleId\"\n class=\"inline-flex items-center gap-0.5 leading-[20px]\">\n <span>{{ title }}</span>\n <!-- Authentication indicator -->\n <span\n v-if=\"authIndicator\"\n class=\"text-c-3 hover:bg-b-3 hover:text-c-1 -mr-1 cursor-pointer rounded px-1 py-0.5 text-xs leading-[normal]\"\n :class=\"{ 'text-c-1': authIndicator.text === 'Required' }\"\n @click=\"openAuthCombobox\">\n {{ authIndicator.text }}\n </span>\n </div>\n </template>\n <template #actions>\n <div class=\"flex flex-1\">\n <ScalarComboboxMultiselect\n class=\"w-72 text-xs\"\n :modelValue=\"selectedSchemeOptions\"\n multiple\n :options=\"schemeOptions\"\n placement=\"bottom-end\"\n teleport\n @delete=\"handleDeleteScheme\"\n @update:modelValue=\"updateSelectedAuth\">\n <ScalarButton\n ref=\"comboboxButtonRef\"\n :aria-describedby=\"titleId\"\n class=\"group/combobox-button hover:text-c-1 text-c-2 flex h-fit w-full items-center gap-1 px-0.75 py-0.25 text-base font-normal transition-transform\"\n variant=\"ghost\">\n <template v-if=\"selectedSchemeOptions.length === 1\">\n <span class=\"sr-only\">Selected Auth Type:</span>\n {{ selectedSchemeOptions[0]?.label }}\n </template>\n <template v-else-if=\"selectedSchemeOptions.length > 1\">\n Multiple\n <span class=\"sr-only\">Auth Types Selected</span>\n </template>\n <template v-else>\n <span class=\"sr-only\">Select</span>\n Auth Type\n </template>\n <ScalarIconCaretDown\n class=\"size-3 shrink-0 transition-transform duration-100 group-aria-expanded/combobox-button:rotate-180\"\n weight=\"bold\" />\n </ScalarButton>\n <template #option=\"{ option, selected }\">\n <ScalarListboxCheckbox\n multiselect\n :selected=\"selected\" />\n <div class=\"min-w-0 flex-1 truncate\">\n {{ option.label }}\n </div>\n <ScalarIconButton\n v-if=\"option.isDeletable ?? !isReadOnly\"\n class=\"-m-0.5 shrink-0 p-0.5 opacity-0 group-hover/item:opacity-100\"\n :icon=\"ScalarIconTrash\"\n :label=\"`Delete ${option.label}`\"\n size=\"xs\"\n @click.stop=\"handleDeleteScheme(option)\" />\n </template>\n </ScalarComboboxMultiselect>\n </div>\n </template>\n\n <!-- Auth Table -->\n <RequestAuthDataTable\n :collection=\"collection\"\n :envVariables=\"envVariables\"\n :environment=\"environment\"\n :layout=\"layout\"\n :persistAuth=\"persistAuth\"\n :selectedSchemeOptions=\"selectedSchemeOptions\"\n :server=\"server\"\n :workspace=\"workspace\"\n @activeSchemes=\"emits('activeSchemes', $event)\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </RequestAuthDataTable>\n\n <DeleteRequestAuthModal\n :scheme=\"selectedScheme\"\n :state=\"deleteSchemeModal\"\n @close=\"deleteSchemeModal.hide()\"\n @delete=\"unselectAuth(selectedScheme?.id)\" />\n </ViewLayoutCollapse>\n</template>\n<style scoped>\n.auth-combobox-position {\n margin-left: 120px;\n}\n.scroll-timeline-x {\n overflow: auto;\n scroll-timeline: --scroll-timeline x;\n /* Firefox supports */\n scroll-timeline: --scroll-timeline horizontal;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n.fade-left,\n.fade-right {\n position: sticky;\n content: '';\n height: 100%;\n animation-name: fadein;\n animation-duration: 1ms;\n animation-direction: reverse;\n animation-timeline: --scroll-timeline;\n min-height: 24px;\n pointer-events: none;\n}\n.fade-left {\n background: linear-gradient(\n -90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n min-width: 3px;\n left: -1px;\n animation-direction: normal;\n}\n.fade-right {\n background: linear-gradient(\n 90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n margin-left: -20px;\n min-width: 24px;\n right: -1px;\n top: 0;\n}\n@keyframes fadein {\n 0% {\n opacity: 0;\n }\n 15% {\n opacity: 1;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarButton,\n ScalarComboboxMultiselect,\n ScalarIconButton,\n ScalarListboxCheckbox,\n useModal,\n type Icon,\n type ScalarButton as ScalarButtonType,\n} from '@scalar/components'\nimport {\n CLIENT_LS_KEYS,\n safeLocalStorage,\n} from '@scalar/helpers/object/local-storage'\nimport { ScalarIconCaretDown, ScalarIconTrash } from '@scalar/icons'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type { SelectedSecuritySchemeUids } from '@scalar/oas-utils/entities/shared'\nimport type {\n Collection,\n Operation,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { isDefined } from '@scalar/oas-utils/helpers'\nimport { computed, ref, useId } from 'vue'\n\nimport ViewLayoutCollapse from '@/components/ViewLayout/ViewLayoutCollapse.vue'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace } from '@/store/store'\nimport type { SecuritySchemeOption } from '@/views/Request/consts'\nimport {\n formatComplexScheme,\n formatScheme,\n getSchemeOptions,\n getSecurityRequirements,\n} from '@/views/Request/libs'\n\nimport DeleteRequestAuthModal from './DeleteRequestAuthModal.vue'\nimport RequestAuthDataTable from './RequestAuthDataTable.vue'\n\nconst {\n collection,\n isReadOnly = false,\n environment,\n envVariables,\n layout,\n operation,\n persistAuth = false,\n selectedSecuritySchemeUids,\n server,\n title,\n workspace,\n} = defineProps<{\n collection: Collection\n /** Controls whether user can add new auth schemes */\n isReadOnly?: boolean\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n operation?: Operation | undefined\n persistAuth?: boolean\n selectedSecuritySchemeUids: SelectedSecuritySchemeUids\n server: Server | undefined\n title: string\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n /** Emits when the user has authorized with an oauth2 flow */\n authorized: []\n /** Emits the currently active scheme */\n activeSchemes: [schemes: SecurityScheme[]]\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst {\n securitySchemes,\n securitySchemeMutators,\n requestMutators,\n collectionMutators,\n} = useWorkspace()\n\nconst titleId = useId()\n\nconst comboboxButtonRef = ref<typeof ScalarButtonType | null>(null)\nconst deleteSchemeModal = useModal()\nconst selectedScheme = ref<{ id: SecurityScheme['uid']; label: string } | null>(\n null,\n)\nconst isViewLayoutOpen = ref(false)\n\n/** Security requirements for the request */\nconst securityRequirements = computed(() => {\n const requirements = getSecurityRequirements(operation, collection)\n\n /** Filter out empty objects */\n const filteredRequirements = requirements.filter((r) => Object.keys(r).length)\n\n return { filteredRequirements, requirements }\n})\n\n/** Indicates if auth is required */\nconst authIndicator = computed(() => {\n const { filteredRequirements, requirements } = securityRequirements.value\n if (!requirements.length) {\n return null\n }\n\n /**\n * Security is optional if one empty object exists in the array &\n * no complex auth requirements (with multiple auth)\n */\n const hasComplexRequirement = requirements.some(\n (req) => Object.keys(req).length > 1,\n )\n const isOptional =\n !hasComplexRequirement && filteredRequirements.length < requirements.length\n\n const icon: Icon = isOptional ? 'Unlock' : 'Lock'\n\n /** Text to indicate auth requirements */\n const text = isOptional ? 'Optional' : 'Required'\n\n return { icon, text }\n})\n\n/**\n * Currently selected auth schemes on the collection, we store complex auth joined by a comma to represent the array\n * in the string\n */\nconst selectedSchemeOptions = computed<SecuritySchemeOption[]>(() =>\n selectedSecuritySchemeUids\n .map((s) => {\n if (Array.isArray(s)) {\n return formatComplexScheme(s, securitySchemes)\n }\n const scheme = securitySchemes[s ?? '']\n if (!scheme) {\n return undefined\n }\n return formatScheme(scheme)\n })\n .filter(isDefined),\n)\n\n/** Update the selected auth types */\nfunction updateSelectedAuth(entries: SecuritySchemeOption[]) {\n const addNewOption = entries.find((e) => e.payload)\n const _entries = entries\n .filter((e) => !e.payload)\n .map(({ id }) => {\n const arr = id.split(',')\n return arr.length > 1\n ? (arr as SecurityScheme['uid'][])\n : (id as SecurityScheme['uid'])\n })\n\n // Adding new auth\n if (addNewOption?.payload) {\n // Create new scheme\n const scheme = securitySchemeMutators.add(\n addNewOption.payload,\n collection?.uid,\n )\n if (scheme) {\n _entries.push(scheme.uid)\n }\n }\n\n editSelectedSchemeUids(_entries)\n}\n\nconst editSelectedSchemeUids = (uids: SelectedSecuritySchemeUids) => {\n // Set as selected on the collection for the modal\n if (collection.useCollectionSecurity) {\n collectionMutators.edit(collection.uid, 'selectedSecuritySchemeUids', uids)\n\n if (!persistAuth) {\n return\n }\n\n // We must convert the uids to nameKeys first\n const nameKeys = uids.map((uids) => {\n // Handle complex auth\n if (Array.isArray(uids)) {\n return uids.map((uid) => securitySchemes[uid]?.nameKey)\n }\n\n return securitySchemes[uids]?.nameKey\n })\n\n safeLocalStorage().setItem(\n CLIENT_LS_KEYS.SELECTED_SECURITY_SCHEMES,\n JSON.stringify(nameKeys),\n )\n }\n // Set as selected on request\n else if (operation?.uid) {\n requestMutators.edit(operation.uid, 'selectedSecuritySchemeUids', uids)\n }\n}\n\nfunction handleDeleteScheme({ id, label }: { id: string; label: string }) {\n // We cast the type here just to make the combobox happy, TODO: we should make ID be string-like and accept brands\n selectedScheme.value = { id: id as SecurityScheme['uid'], label }\n deleteSchemeModal.show()\n}\n\nconst unselectAuth = (unSelectUid?: string) => {\n if (!unSelectUid) {\n return\n }\n const newUids = selectedSecuritySchemeUids.filter((uid) => {\n const arr = unSelectUid.split(',')\n // Handle complex auth\n if (arr.length > 1 && Array.isArray(uid) && arr.length === uid.length) {\n return uid.every((u) => !arr.includes(u))\n }\n // Standard string auth\n return uid !== unSelectUid\n })\n editSelectedSchemeUids(newUids)\n comboboxButtonRef.value?.$el.focus()\n deleteSchemeModal.hide()\n}\n\n/** Options for the security scheme dropdown */\nconst schemeOptions = computed(() =>\n getSchemeOptions(\n securityRequirements.value.filteredRequirements,\n collection?.securitySchemes ?? [],\n securitySchemes,\n isReadOnly,\n ),\n)\n\nconst openAuthCombobox = (event: Event) => {\n // If the layout is open, we don't want it to close on auth label click\n if (isViewLayoutOpen.value) {\n event.stopPropagation()\n }\n\n comboboxButtonRef.value?.$el.click()\n}\n</script>\n<template>\n <ViewLayoutCollapse\n class=\"group/params relative\"\n :itemCount=\"selectedSchemeOptions.length\"\n :layout=\"layout\"\n @update:modelValue=\"isViewLayoutOpen = $event\">\n <template #title>\n <div\n :id=\"titleId\"\n class=\"inline-flex items-center gap-0.5 leading-[20px]\">\n <span>{{ title }}</span>\n <!-- Authentication indicator -->\n <span\n v-if=\"authIndicator\"\n class=\"text-c-3 hover:bg-b-3 hover:text-c-1 -mr-1 cursor-pointer rounded px-1 py-0.5 text-xs leading-[normal]\"\n :class=\"{ 'text-c-1': authIndicator.text === 'Required' }\"\n @click=\"openAuthCombobox\">\n {{ authIndicator.text }}\n </span>\n </div>\n </template>\n <template #actions>\n <div class=\"flex flex-1\">\n <ScalarComboboxMultiselect\n class=\"w-72 text-xs\"\n :modelValue=\"selectedSchemeOptions\"\n multiple\n :options=\"schemeOptions\"\n placement=\"bottom-end\"\n teleport\n @delete=\"handleDeleteScheme\"\n @update:modelValue=\"updateSelectedAuth\">\n <ScalarButton\n ref=\"comboboxButtonRef\"\n :aria-describedby=\"titleId\"\n class=\"group/combobox-button hover:text-c-1 text-c-2 flex h-fit w-full items-center gap-1 px-0.75 py-0.25 text-base font-normal transition-transform\"\n variant=\"ghost\">\n <template v-if=\"selectedSchemeOptions.length === 1\">\n <span class=\"sr-only\">Selected Auth Type:</span>\n {{ selectedSchemeOptions[0]?.label }}\n </template>\n <template v-else-if=\"selectedSchemeOptions.length > 1\">\n Multiple\n <span class=\"sr-only\">Auth Types Selected</span>\n </template>\n <template v-else>\n <span class=\"sr-only\">Select</span>\n Auth Type\n </template>\n <ScalarIconCaretDown\n class=\"size-3 shrink-0 transition-transform duration-100 group-aria-expanded/combobox-button:rotate-180\"\n weight=\"bold\" />\n </ScalarButton>\n <template #option=\"{ option, selected }\">\n <ScalarListboxCheckbox\n multiselect\n :selected=\"selected\" />\n <div class=\"min-w-0 flex-1 truncate\">\n {{ option.label }}\n </div>\n <ScalarIconButton\n v-if=\"option.isDeletable ?? !isReadOnly\"\n class=\"-m-0.5 shrink-0 p-0.5 opacity-0 group-hover/item:opacity-100\"\n :icon=\"ScalarIconTrash\"\n :label=\"`Delete ${option.label}`\"\n size=\"xs\"\n @click.stop=\"handleDeleteScheme(option)\" />\n </template>\n </ScalarComboboxMultiselect>\n </div>\n </template>\n\n <!-- Auth Table -->\n <RequestAuthDataTable\n :collection=\"collection\"\n :envVariables=\"envVariables\"\n :environment=\"environment\"\n :layout=\"layout\"\n :persistAuth=\"persistAuth\"\n :selectedSchemeOptions=\"selectedSchemeOptions\"\n :server=\"server\"\n :workspace=\"workspace\"\n @activeSchemes=\"emits('activeSchemes', $event)\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </RequestAuthDataTable>\n\n <DeleteRequestAuthModal\n :scheme=\"selectedScheme\"\n :state=\"deleteSchemeModal\"\n @close=\"deleteSchemeModal.hide()\"\n @delete=\"unselectAuth(selectedScheme?.id)\" />\n </ViewLayoutCollapse>\n</template>\n<style scoped>\n.auth-combobox-position {\n margin-left: 120px;\n}\n.scroll-timeline-x {\n overflow: auto;\n scroll-timeline: --scroll-timeline x;\n /* Firefox supports */\n scroll-timeline: --scroll-timeline horizontal;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n.fade-left,\n.fade-right {\n position: sticky;\n content: '';\n height: 100%;\n animation-name: fadein;\n animation-duration: 1ms;\n animation-direction: reverse;\n animation-timeline: --scroll-timeline;\n min-height: 24px;\n pointer-events: none;\n}\n.fade-left {\n background: linear-gradient(\n -90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n min-width: 3px;\n left: -1px;\n animation-direction: normal;\n}\n.fade-right {\n background: linear-gradient(\n 90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n margin-left: -20px;\n min-width: 24px;\n right: -1px;\n top: 0;\n}\n@keyframes fadein {\n 0% {\n opacity: 0;\n }\n 15% {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"RequestAuth-1cRH3DDn.js","names":["$attrs"],"sources":["../src/views/Request/RequestSection/RequestAuth/DeleteRequestAuthModal.vue","../src/views/Request/RequestSection/RequestAuth/DeleteRequestAuthModal.vue","../src/views/Request/RequestSection/helpers/update-scheme.ts","../src/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage.ts","../src/views/Request/RequestSection/RequestAuth/OAuthScopesInput.vue","../src/views/Request/RequestSection/RequestAuth/OAuthScopesInput.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue","../src/views/Request/RequestSection/RequestAuth/OAuth2.vue","../src/views/Request/RequestSection/RequestAuth/OAuth2.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuth.vue","../src/views/Request/RequestSection/RequestAuth/RequestAuth.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton, ScalarModal } from '@scalar/components'\nimport type { SecurityScheme } from '@scalar/oas-utils/entities/spec'\n\nimport { useWorkspace } from '@/store/store'\n\nconst props = defineProps<{\n state: { open: boolean; show: () => void; hide: () => void }\n scheme: { id: SecurityScheme['uid']; label: string } | null\n}>()\n\nconst emit = defineEmits<{\n (e: 'close'): void\n (e: 'delete'): void\n}>()\n\nconst { securitySchemeMutators } = useWorkspace()\n\nconst deleteScheme = () => {\n if (props.scheme?.id) {\n securitySchemeMutators.delete(props.scheme.id)\n }\n emit('delete')\n}\n</script>\n<template>\n <ScalarModal\n size=\"xxs\"\n :state=\"state\"\n title=\"Delete Security Scheme\">\n <p class=\"text-c-2 mb-4 text-sm leading-normal\">\n This cannot be undone. You're about to delete the\n {{ scheme?.label }} security scheme from the collection.\n </p>\n <div class=\"flex justify-between gap-2\">\n <ScalarButton\n class=\"flex h-8 cursor-pointer items-center gap-1.5 px-3 shadow-none focus:outline-none\"\n type=\"button\"\n variant=\"outlined\"\n @click=\"emit('close')\">\n Cancel\n </ScalarButton>\n <ScalarButton\n class=\"flex h-8 cursor-pointer items-center gap-1.5 px-3 shadow-none focus:outline-none\"\n type=\"submit\"\n @click=\"deleteScheme\">\n Delete {{ scheme?.label }}\n </ScalarButton>\n </div>\n </ScalarModal>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarButton, ScalarModal } from '@scalar/components'\nimport type { SecurityScheme } from '@scalar/oas-utils/entities/spec'\n\nimport { useWorkspace } from '@/store/store'\n\nconst props = defineProps<{\n state: { open: boolean; show: () => void; hide: () => void }\n scheme: { id: SecurityScheme['uid']; label: string } | null\n}>()\n\nconst emit = defineEmits<{\n (e: 'close'): void\n (e: 'delete'): void\n}>()\n\nconst { securitySchemeMutators } = useWorkspace()\n\nconst deleteScheme = () => {\n if (props.scheme?.id) {\n securitySchemeMutators.delete(props.scheme.id)\n }\n emit('delete')\n}\n</script>\n<template>\n <ScalarModal\n size=\"xxs\"\n :state=\"state\"\n title=\"Delete Security Scheme\">\n <p class=\"text-c-2 mb-4 text-sm leading-normal\">\n This cannot be undone. You're about to delete the\n {{ scheme?.label }} security scheme from the collection.\n </p>\n <div class=\"flex justify-between gap-2\">\n <ScalarButton\n class=\"flex h-8 cursor-pointer items-center gap-1.5 px-3 shadow-none focus:outline-none\"\n type=\"button\"\n variant=\"outlined\"\n @click=\"emit('close')\">\n Cancel\n </ScalarButton>\n <ScalarButton\n class=\"flex h-8 cursor-pointer items-center gap-1.5 px-3 shadow-none focus:outline-none\"\n type=\"submit\"\n @click=\"deleteScheme\">\n Delete {{ scheme?.label }}\n </ScalarButton>\n </div>\n </ScalarModal>\n</template>\n","import { CLIENT_LS_KEYS, safeLocalStorage } from '@scalar/helpers/object/local-storage'\nimport type { SecurityScheme } from '@scalar/oas-utils/entities/spec'\nimport type { Path, PathValue } from '@scalar/object-utils/nested'\n\nimport type { WorkspaceStore } from '@/store/store'\n\n/** Shape of the local storage auth object */\nexport type Auth<P extends Path<SecurityScheme>> = Record<string, Record<P, NonNullable<PathValue<SecurityScheme, P>>>>\n\n/** Update the security scheme with side effects */\nexport const updateScheme = <U extends SecurityScheme['uid'], P extends Path<SecurityScheme>>(\n uid: U,\n path: P,\n value: NonNullable<PathValue<SecurityScheme, P>>,\n { securitySchemeMutators, securitySchemes }: WorkspaceStore,\n persistAuth = false,\n) => {\n securitySchemeMutators.edit(uid, path, value)\n\n if (!persistAuth) {\n return\n }\n\n // We persist auth to local storage by name key\n try {\n const auth: Auth<P> = JSON.parse(safeLocalStorage().getItem(CLIENT_LS_KEYS.AUTH) ?? '{}')\n const scheme = securitySchemes[uid]\n\n if (auth && scheme?.nameKey) {\n const nameScheme = (auth[scheme.nameKey] ||= {} as Record<P, NonNullable<PathValue<SecurityScheme, P>>>)\n nameScheme[path] = value\n safeLocalStorage().setItem(CLIENT_LS_KEYS.AUTH, JSON.stringify(auth))\n }\n } catch (e) {\n console.error(e)\n }\n}\n","import { isDefined } from '@scalar/helpers/array/is-defined'\nimport { CLIENT_LS_KEYS, safeLocalStorage } from '@scalar/helpers/object/local-storage'\nimport type { Collection, SecurityScheme } from '@scalar/oas-utils/entities/spec'\nimport type { Path } from '@scalar/object-utils/nested'\nimport type { Entries } from 'type-fest'\n\nimport type { WorkspaceStore } from '@/store/store'\nimport type { Auth } from '@/views/Request/RequestSection/helpers/update-scheme'\n\n/**\n * Manually restore the auth from local storage\n *\n * Only use this if you need to restore auth manually, in the client web + app we load the whole store from\n * local storage so it isn't needed there.\n */\nexport const restoreAuthFromLocalStorage = (store: WorkspaceStore, collectionUid: string) => {\n try {\n const { collectionMutators, securitySchemes, securitySchemeMutators } = store\n const auth: Auth<Path<SecurityScheme>> = JSON.parse(safeLocalStorage().getItem(CLIENT_LS_KEYS.AUTH) ?? '{}')\n\n /** Map the security scheme name key to the uid */\n const dict = Object.keys(securitySchemes).reduce(\n (acc, key) => {\n const scheme = securitySchemes[key]\n if (scheme) {\n acc[scheme.nameKey] = scheme.uid\n }\n return acc\n },\n {} as Record<string, SecurityScheme['uid']>,\n )\n\n /** Now we can use the dict to restore the auth from local storage */\n Object.entries(auth).forEach(([key, entry]) => {\n const uid = dict[key]\n if (uid) {\n const entries = Object.entries(entry) as Entries<typeof entry>\n entries.forEach(([path, value]) => {\n securitySchemeMutators.edit(uid, path, value)\n })\n }\n })\n\n /** Restore the selected security scheme uids */\n const selectedSchemeUids: (string | string[])[] = JSON.parse(\n safeLocalStorage().getItem(CLIENT_LS_KEYS.SELECTED_SECURITY_SCHEMES) ?? '[]',\n )\n\n // Convert back to uids\n const uids = selectedSchemeUids\n .map((nameKeys) => {\n if (Array.isArray(nameKeys)) {\n return nameKeys.map((key) => dict[key]).filter(isDefined)\n }\n return dict[nameKeys]\n })\n .filter(isDefined)\n\n collectionMutators.edit(collectionUid as Collection['uid'], 'selectedSecuritySchemeUids', uids)\n } catch (e) {\n // Nothing to restore\n console.error(e)\n }\n}\n","<script setup lang=\"ts\">\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport { ScalarButton, ScalarIcon } from '@scalar/components'\nimport type { Oauth2Flow } from '@scalar/oas-utils/entities/spec'\nimport { computed } from 'vue'\n\nimport {\n DataTableCell,\n DataTableCheckbox,\n DataTableRow,\n} from '@/components/DataTable'\nimport type { UpdateScheme } from '@/store'\n\nconst { flow, updateScheme } = defineProps<{\n flow: Oauth2Flow\n updateScheme: UpdateScheme\n}>()\n\nconst scopes = computed(() =>\n Object.entries(flow?.scopes ?? {}).map(([key, val]) => ({\n id: key,\n label: key,\n description: val,\n })),\n)\n\n/** An array of the selected scope ids */\nconst selectedScopes = computed(() => flow?.selectedScopes || [])\n\nfunction setScope(id: string, checked: boolean) {\n // Checked - Add scope to list\n if (checked) {\n updateScheme(`flows.${flow.type}.selectedScopes`, [\n ...selectedScopes.value,\n id,\n ])\n }\n // Unchecked - Remove scope from list\n else {\n updateScheme(\n `flows.${flow.type}.selectedScopes`,\n selectedScopes.value.filter((scope) => scope !== id),\n )\n }\n}\n\nconst allScopesSelected = computed(\n () => flow?.selectedScopes?.length === Object.keys(flow?.scopes ?? {}).length,\n)\n\nconst selectAllScopes = () => {\n updateScheme(\n `flows.${flow.type}.selectedScopes`,\n Object.keys(flow?.scopes ?? {}),\n )\n}\n\nconst deselectAllScopes = () => {\n updateScheme(`flows.${flow.type}.selectedScopes`, [])\n}\n</script>\n\n<template>\n <DataTableCell class=\"h-auto !max-h-[initial] min-h-8 items-center\">\n <div class=\"flex h-fit w-full\">\n <div class=\"text-c-1 h-full items-center\"></div>\n <Disclosure\n as=\"div\"\n class=\"bl flex w-full flex-col\">\n <DisclosureButton\n v-slot=\"{ open }\"\n :class=\"[\n 'group/scopes-accordion hover:text-c-1 flex h-auto min-h-8 cursor-pointer items-center gap-1.5 pr-2.25 pl-3 text-left',\n (flow?.selectedScopes?.length || 0) > 0 ? 'text-c-1' : 'text-c-3',\n ]\">\n <div class=\"flex-1\">\n Scopes Selected\n {{ flow?.selectedScopes?.length || 0 }} /\n {{ Object.keys(flow?.scopes ?? {}).length || 0 }}\n </div>\n <div class=\"flex items-center gap-1.75\">\n <!-- Deselect All -->\n <ScalarButton\n v-if=\"allScopesSelected\"\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"deselectAllScopes\">\n Deselect All\n </ScalarButton>\n\n <!-- Select All -->\n <ScalarButton\n v-if=\"!allScopesSelected\"\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"selectAllScopes\">\n Select All\n </ScalarButton>\n\n <ScalarIcon\n class=\"text-c-3 group-hover/scopes-accordion:text-c-2\"\n :icon=\"open ? 'ChevronDown' : 'ChevronRight'\"\n size=\"md\" />\n </div>\n </DisclosureButton>\n <DisclosurePanel as=\"template\">\n <table\n class=\"grid auto-rows-auto\"\n :style=\"{ gridTemplateColumns: '1fr auto' }\">\n <DataTableRow\n v-for=\"{ id, label, description } in scopes\"\n :key=\"id\"\n class=\"text-c-2\"\n @click=\"setScope(id, !selectedScopes.includes(id))\">\n <DataTableCell\n class=\"hover:text-c-1 box-border !max-h-[initial] w-full cursor-pointer px-3 py-1.5\">\n <div v-if=\"description\">\n <span class=\"font-code text-xs\">{{ label }}</span>\n &ndash;\n {{ description }}\n </div>\n </DataTableCell>\n <DataTableCheckbox\n :modelValue=\"selectedScopes.includes(id)\"\n @update:modelValue=\"() => {}\" />\n </DataTableRow>\n </table>\n </DisclosurePanel>\n </Disclosure>\n </div>\n </DataTableCell>\n</template>\n","<script setup lang=\"ts\">\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport { ScalarButton, ScalarIcon } from '@scalar/components'\nimport type { Oauth2Flow } from '@scalar/oas-utils/entities/spec'\nimport { computed } from 'vue'\n\nimport {\n DataTableCell,\n DataTableCheckbox,\n DataTableRow,\n} from '@/components/DataTable'\nimport type { UpdateScheme } from '@/store'\n\nconst { flow, updateScheme } = defineProps<{\n flow: Oauth2Flow\n updateScheme: UpdateScheme\n}>()\n\nconst scopes = computed(() =>\n Object.entries(flow?.scopes ?? {}).map(([key, val]) => ({\n id: key,\n label: key,\n description: val,\n })),\n)\n\n/** An array of the selected scope ids */\nconst selectedScopes = computed(() => flow?.selectedScopes || [])\n\nfunction setScope(id: string, checked: boolean) {\n // Checked - Add scope to list\n if (checked) {\n updateScheme(`flows.${flow.type}.selectedScopes`, [\n ...selectedScopes.value,\n id,\n ])\n }\n // Unchecked - Remove scope from list\n else {\n updateScheme(\n `flows.${flow.type}.selectedScopes`,\n selectedScopes.value.filter((scope) => scope !== id),\n )\n }\n}\n\nconst allScopesSelected = computed(\n () => flow?.selectedScopes?.length === Object.keys(flow?.scopes ?? {}).length,\n)\n\nconst selectAllScopes = () => {\n updateScheme(\n `flows.${flow.type}.selectedScopes`,\n Object.keys(flow?.scopes ?? {}),\n )\n}\n\nconst deselectAllScopes = () => {\n updateScheme(`flows.${flow.type}.selectedScopes`, [])\n}\n</script>\n\n<template>\n <DataTableCell class=\"h-auto !max-h-[initial] min-h-8 items-center\">\n <div class=\"flex h-fit w-full\">\n <div class=\"text-c-1 h-full items-center\"></div>\n <Disclosure\n as=\"div\"\n class=\"bl flex w-full flex-col\">\n <DisclosureButton\n v-slot=\"{ open }\"\n :class=\"[\n 'group/scopes-accordion hover:text-c-1 flex h-auto min-h-8 cursor-pointer items-center gap-1.5 pr-2.25 pl-3 text-left',\n (flow?.selectedScopes?.length || 0) > 0 ? 'text-c-1' : 'text-c-3',\n ]\">\n <div class=\"flex-1\">\n Scopes Selected\n {{ flow?.selectedScopes?.length || 0 }} /\n {{ Object.keys(flow?.scopes ?? {}).length || 0 }}\n </div>\n <div class=\"flex items-center gap-1.75\">\n <!-- Deselect All -->\n <ScalarButton\n v-if=\"allScopesSelected\"\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"deselectAllScopes\">\n Deselect All\n </ScalarButton>\n\n <!-- Select All -->\n <ScalarButton\n v-if=\"!allScopesSelected\"\n class=\"pr-0.75 pl-1 transition-none\"\n size=\"sm\"\n variant=\"ghost\"\n @click.stop=\"selectAllScopes\">\n Select All\n </ScalarButton>\n\n <ScalarIcon\n class=\"text-c-3 group-hover/scopes-accordion:text-c-2\"\n :icon=\"open ? 'ChevronDown' : 'ChevronRight'\"\n size=\"md\" />\n </div>\n </DisclosureButton>\n <DisclosurePanel as=\"template\">\n <table\n class=\"grid auto-rows-auto\"\n :style=\"{ gridTemplateColumns: '1fr auto' }\">\n <DataTableRow\n v-for=\"{ id, label, description } in scopes\"\n :key=\"id\"\n class=\"text-c-2\"\n @click=\"setScope(id, !selectedScopes.includes(id))\">\n <DataTableCell\n class=\"hover:text-c-1 box-border !max-h-[initial] w-full cursor-pointer px-3 py-1.5\">\n <div v-if=\"description\">\n <span class=\"font-code text-xs\">{{ label }}</span>\n &ndash;\n {{ description }}\n </div>\n </DataTableCell>\n <DataTableCheckbox\n :modelValue=\"selectedScopes.includes(id)\"\n @update:modelValue=\"() => {}\" />\n </DataTableRow>\n </table>\n </DisclosurePanel>\n </Disclosure>\n </div>\n </DataTableCell>\n</template>\n","<script setup lang=\"ts\">\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { useId } from 'vue'\n\nimport DataTableInput from '@/components/DataTable/DataTableInput.vue'\nimport type { EnvVariable } from '@/store/active-entities'\nimport type { VueClassProp } from '@/types/vue'\n\nconst props = withDefaults(\n defineProps<{\n type?: string\n containerClass?: VueClassProp\n required?: boolean\n modelValue: string | number\n readOnly?: boolean\n environment: Environment\n envVariables: EnvVariable[]\n workspace: Workspace\n }>(),\n { required: false, readOnly: false },\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: string): void\n (e: 'inputFocus'): void\n (e: 'inputBlur'): void\n (e: 'selectVariable', value: string): void\n}>()\n\nconst id = useId()\n</script>\n<template>\n <DataTableInput\n :id=\"id\"\n :canAddCustomEnumValue=\"!props.readOnly\"\n :containerClass=\"props.containerClass\"\n v-bind=\"$attrs\"\n :envVariables=\"props.envVariables\"\n :environment=\"props.environment\"\n lineWrapping\n :modelValue=\"props.modelValue\"\n :readOnly=\"props.readOnly\"\n :required=\"props.required\"\n :type=\"props.type\"\n :workspace=\"props.workspace\"\n @inputBlur=\"emit('inputBlur')\"\n @inputFocus=\"emit('inputFocus')\"\n @selectVariable=\"emit('selectVariable', $event)\"\n @update:modelValue=\"emit('update:modelValue', $event)\">\n <template #default>\n <label :for=\"id\">\n <slot />\n </label>\n </template>\n <template #icon>\n <slot name=\"icon\" />\n </template>\n </DataTableInput>\n</template>\n","<script setup lang=\"ts\">\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { useId } from 'vue'\n\nimport DataTableInput from '@/components/DataTable/DataTableInput.vue'\nimport type { EnvVariable } from '@/store/active-entities'\nimport type { VueClassProp } from '@/types/vue'\n\nconst props = withDefaults(\n defineProps<{\n type?: string\n containerClass?: VueClassProp\n required?: boolean\n modelValue: string | number\n readOnly?: boolean\n environment: Environment\n envVariables: EnvVariable[]\n workspace: Workspace\n }>(),\n { required: false, readOnly: false },\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: string): void\n (e: 'inputFocus'): void\n (e: 'inputBlur'): void\n (e: 'selectVariable', value: string): void\n}>()\n\nconst id = useId()\n</script>\n<template>\n <DataTableInput\n :id=\"id\"\n :canAddCustomEnumValue=\"!props.readOnly\"\n :containerClass=\"props.containerClass\"\n v-bind=\"$attrs\"\n :envVariables=\"props.envVariables\"\n :environment=\"props.environment\"\n lineWrapping\n :modelValue=\"props.modelValue\"\n :readOnly=\"props.readOnly\"\n :required=\"props.required\"\n :type=\"props.type\"\n :workspace=\"props.workspace\"\n @inputBlur=\"emit('inputBlur')\"\n @inputFocus=\"emit('inputFocus')\"\n @selectVariable=\"emit('selectVariable', $event)\"\n @update:modelValue=\"emit('update:modelValue', $event)\">\n <template #default>\n <label :for=\"id\">\n <slot />\n </label>\n </template>\n <template #icon>\n <slot name=\"icon\" />\n </template>\n </DataTableInput>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarButton, useLoadingState } from '@scalar/components'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport {\n pkceOptions,\n type Collection,\n type Oauth2Flow,\n type SecuritySchemeOauth2,\n type Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { useToasts } from '@scalar/use-toasts'\n\nimport { DataTableRow } from '@/components/DataTable'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace, type UpdateScheme } from '@/store/store'\nimport { authorizeOauth2 } from '@/views/Request/libs'\nimport { updateScheme as _updateScheme } from '@/views/Request/RequestSection/helpers/update-scheme'\n\nimport OAuthScopesInput from './OAuthScopesInput.vue'\nimport RequestAuthDataTableInput from './RequestAuthDataTableInput.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n flow,\n persistAuth = false,\n scheme,\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n flow: Oauth2Flow\n persistAuth: boolean\n scheme: SecuritySchemeOauth2\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst loader = useLoadingState()\nconst { toast } = useToasts()\nconst storeContext = useWorkspace()\n\n/** Update the current scheme */\nconst updateScheme: UpdateScheme = (path, value) =>\n _updateScheme(scheme.uid, path, value, storeContext, persistAuth)\n\n/** Authorize the user using specified flow */\nconst handleAuthorize = async () => {\n if (loader.isActive || !collection?.uid) {\n return\n }\n if (!server) {\n toast('No server selected', 'error')\n return\n }\n loader.start()\n\n const [error, accessToken] = await authorizeOauth2(\n flow,\n server,\n workspace?.proxyUrl,\n )\n\n await loader.clear()\n\n if (accessToken) {\n updateScheme(`flows.${flow.type}.token`, accessToken)\n emits('authorized')\n } else {\n console.error(error)\n toast(error?.message ?? 'Failed to authorize', 'error')\n }\n}\n\n/** To make prop drilling a little easier */\nconst dataTableInputProps = {\n environment,\n envVariables,\n workspace,\n}\n</script>\n\n<template>\n <!-- Access Token Granted -->\n <template v-if=\"flow.token\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"border-r-transparent\"\n :modelValue=\"flow.token\"\n placeholder=\"QUxMIFlPVVIgQkFTRSBBUkUgQkVMT05HIFRPIFVT\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(`flows.${flow.type}.token`, v)\">\n Access Token\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow class=\"min-w-full\">\n <div class=\"flex h-8 items-center justify-end border-t\">\n <ScalarButton\n class=\"mr-1 p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"updateScheme(`flows.${flow.type}.token`, '')\">\n Clear\n </ScalarButton>\n <slot name=\"oauth-actions\" />\n </div>\n </DataTableRow>\n </template>\n\n <template v-else>\n <DataTableRow>\n <!-- Auth URL -->\n <RequestAuthDataTableInput\n v-if=\"'authorizationUrl' in flow\"\n v-bind=\"dataTableInputProps\"\n containerClass=\"border-r-0\"\n :modelValue=\"flow.authorizationUrl\"\n placeholder=\"https://galaxy.scalar.com/authorize\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.authorizationUrl`, v)\n \">\n Auth URL\n </RequestAuthDataTableInput>\n\n <!-- Token URL -->\n <RequestAuthDataTableInput\n v-if=\"'tokenUrl' in flow\"\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.tokenUrl\"\n placeholder=\"https://galaxy.scalar.com/token\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.tokenUrl`, v)\n \">\n Token URL\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"'x-scalar-redirect-uri' in flow\">\n <!-- Redirect URI -->\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow['x-scalar-redirect-uri']\"\n placeholder=\"https://galaxy.scalar.com/callback\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.x-scalar-redirect-uri`, v)\n \">\n Redirect URL\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Username and password -->\n <template v-if=\"flow.type === 'password'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"text-c-2\"\n :modelValue=\"flow.username\"\n placeholder=\"janedoe\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.username`, v)\n \">\n Username\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.password\"\n placeholder=\"********\"\n type=\"password\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.password`, v)\n \">\n Password\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n\n <!-- Client ID -->\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow['x-scalar-client-id']\"\n placeholder=\"12345\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.x-scalar-client-id`, v)\n \">\n Client ID\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Client Secret (Authorization Code / Client Credentials / Password (optional)) -->\n <DataTableRow v-if=\"'clientSecret' in flow\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.clientSecret\"\n placeholder=\"XYZ123\"\n type=\"password\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.clientSecret`, v)\n \">\n Client Secret\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- PKCE -->\n <DataTableRow v-if=\"'x-usePkce' in flow\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :enum=\"pkceOptions\"\n :modelValue=\"flow['x-usePkce']\"\n readOnly\n @update:modelValue=\"\n (v) =>\n updateScheme(\n `flows.${flow.type}.x-usePkce`,\n v as (typeof pkceOptions)[number],\n )\n \">\n Use PKCE\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Scopes -->\n <DataTableRow v-if=\"Object.keys(flow.scopes ?? {}).length\">\n <OAuthScopesInput\n :flow=\"flow\"\n :updateScheme=\"updateScheme\" />\n </DataTableRow>\n\n <!-- Open ID Connect -->\n <!-- <DataTableRow -->\n <!-- v-else-if=\"activeScheme?.type === 'openIdConnect'\" -->\n <!-- class=\"border-r-transparent\"> -->\n <!-- <DataTableInput -->\n <!-- v-model=\"password\" -->\n <!-- placeholder=\"Token\"> -->\n <!-- TODO -->\n <!-- </DataTableInput> -->\n <!-- <DataTableCell class=\"flex items-center\"> -->\n <!-- <ScalarButton size=\"sm\"> Authorize </ScalarButton> -->\n <!-- </DataTableCell> -->\n <!-- </DataTableRow> -->\n </template>\n <template v-if=\"!flow.token\">\n <DataTableRow class=\"min-w-full\">\n <div class=\"flex h-8 w-full items-center justify-end border-t\">\n <ScalarButton\n class=\"mr-0.75 p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"handleAuthorize\">\n Authorize\n </ScalarButton>\n </div>\n </DataTableRow>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarButton, useLoadingState } from '@scalar/components'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport {\n pkceOptions,\n type Collection,\n type Oauth2Flow,\n type SecuritySchemeOauth2,\n type Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { useToasts } from '@scalar/use-toasts'\n\nimport { DataTableRow } from '@/components/DataTable'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace, type UpdateScheme } from '@/store/store'\nimport { authorizeOauth2 } from '@/views/Request/libs'\nimport { updateScheme as _updateScheme } from '@/views/Request/RequestSection/helpers/update-scheme'\n\nimport OAuthScopesInput from './OAuthScopesInput.vue'\nimport RequestAuthDataTableInput from './RequestAuthDataTableInput.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n flow,\n persistAuth = false,\n scheme,\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n flow: Oauth2Flow\n persistAuth: boolean\n scheme: SecuritySchemeOauth2\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst loader = useLoadingState()\nconst { toast } = useToasts()\nconst storeContext = useWorkspace()\n\n/** Update the current scheme */\nconst updateScheme: UpdateScheme = (path, value) =>\n _updateScheme(scheme.uid, path, value, storeContext, persistAuth)\n\n/** Authorize the user using specified flow */\nconst handleAuthorize = async () => {\n if (loader.isActive || !collection?.uid) {\n return\n }\n if (!server) {\n toast('No server selected', 'error')\n return\n }\n loader.start()\n\n const [error, accessToken] = await authorizeOauth2(\n flow,\n server,\n workspace?.proxyUrl,\n )\n\n await loader.clear()\n\n if (accessToken) {\n updateScheme(`flows.${flow.type}.token`, accessToken)\n emits('authorized')\n } else {\n console.error(error)\n toast(error?.message ?? 'Failed to authorize', 'error')\n }\n}\n\n/** To make prop drilling a little easier */\nconst dataTableInputProps = {\n environment,\n envVariables,\n workspace,\n}\n</script>\n\n<template>\n <!-- Access Token Granted -->\n <template v-if=\"flow.token\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"border-r-transparent\"\n :modelValue=\"flow.token\"\n placeholder=\"QUxMIFlPVVIgQkFTRSBBUkUgQkVMT05HIFRPIFVT\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(`flows.${flow.type}.token`, v)\">\n Access Token\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow class=\"min-w-full\">\n <div class=\"flex h-8 items-center justify-end border-t\">\n <ScalarButton\n class=\"mr-1 p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"updateScheme(`flows.${flow.type}.token`, '')\">\n Clear\n </ScalarButton>\n <slot name=\"oauth-actions\" />\n </div>\n </DataTableRow>\n </template>\n\n <template v-else>\n <DataTableRow>\n <!-- Auth URL -->\n <RequestAuthDataTableInput\n v-if=\"'authorizationUrl' in flow\"\n v-bind=\"dataTableInputProps\"\n containerClass=\"border-r-0\"\n :modelValue=\"flow.authorizationUrl\"\n placeholder=\"https://galaxy.scalar.com/authorize\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.authorizationUrl`, v)\n \">\n Auth URL\n </RequestAuthDataTableInput>\n\n <!-- Token URL -->\n <RequestAuthDataTableInput\n v-if=\"'tokenUrl' in flow\"\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.tokenUrl\"\n placeholder=\"https://galaxy.scalar.com/token\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.tokenUrl`, v)\n \">\n Token URL\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"'x-scalar-redirect-uri' in flow\">\n <!-- Redirect URI -->\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow['x-scalar-redirect-uri']\"\n placeholder=\"https://galaxy.scalar.com/callback\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.x-scalar-redirect-uri`, v)\n \">\n Redirect URL\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Username and password -->\n <template v-if=\"flow.type === 'password'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"text-c-2\"\n :modelValue=\"flow.username\"\n placeholder=\"janedoe\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.username`, v)\n \">\n Username\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.password\"\n placeholder=\"********\"\n type=\"password\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.password`, v)\n \">\n Password\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n\n <!-- Client ID -->\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow['x-scalar-client-id']\"\n placeholder=\"12345\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.x-scalar-client-id`, v)\n \">\n Client ID\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Client Secret (Authorization Code / Client Credentials / Password (optional)) -->\n <DataTableRow v-if=\"'clientSecret' in flow\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"flow.clientSecret\"\n placeholder=\"XYZ123\"\n type=\"password\"\n @update:modelValue=\"\n (v) => updateScheme(`flows.${flow.type}.clientSecret`, v)\n \">\n Client Secret\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- PKCE -->\n <DataTableRow v-if=\"'x-usePkce' in flow\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :enum=\"pkceOptions\"\n :modelValue=\"flow['x-usePkce']\"\n readOnly\n @update:modelValue=\"\n (v) =>\n updateScheme(\n `flows.${flow.type}.x-usePkce`,\n v as (typeof pkceOptions)[number],\n )\n \">\n Use PKCE\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Scopes -->\n <DataTableRow v-if=\"Object.keys(flow.scopes ?? {}).length\">\n <OAuthScopesInput\n :flow=\"flow\"\n :updateScheme=\"updateScheme\" />\n </DataTableRow>\n\n <!-- Open ID Connect -->\n <!-- <DataTableRow -->\n <!-- v-else-if=\"activeScheme?.type === 'openIdConnect'\" -->\n <!-- class=\"border-r-transparent\"> -->\n <!-- <DataTableInput -->\n <!-- v-model=\"password\" -->\n <!-- placeholder=\"Token\"> -->\n <!-- TODO -->\n <!-- </DataTableInput> -->\n <!-- <DataTableCell class=\"flex items-center\"> -->\n <!-- <ScalarButton size=\"sm\"> Authorize </ScalarButton> -->\n <!-- </DataTableCell> -->\n <!-- </DataTableRow> -->\n </template>\n <template v-if=\"!flow.token\">\n <DataTableRow class=\"min-w-full\">\n <div class=\"flex h-8 w-full items-center justify-end border-t\">\n <ScalarButton\n class=\"mr-0.75 p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"handleAuthorize\">\n Authorize\n </ScalarButton>\n </div>\n </DataTableRow>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarMarkdownSummary } from '@scalar/components'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type {\n Collection,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport type { Path, PathValue } from '@scalar/object-utils/nested'\nimport { capitalize, computed, onMounted, ref } from 'vue'\n\nimport { DataTableCell, DataTableRow } from '@/components/DataTable'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace } from '@/store/store'\nimport { updateScheme as _updateScheme } from '@/views/Request/RequestSection/helpers/update-scheme'\nimport { restoreAuthFromLocalStorage } from '@/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage'\n\nimport OAuth2 from './OAuth2.vue'\nimport RequestAuthDataTableInput from './RequestAuthDataTableInput.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n layout,\n persistAuth = false,\n securitySchemeUids,\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n persistAuth: boolean\n securitySchemeUids: string[]\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst storeContext = useWorkspace()\nconst { securitySchemes } = storeContext\nconst security = computed(() =>\n securitySchemeUids.map((uid) => ({\n scheme: securitySchemes[uid],\n })),\n)\n\nconst activeFlow = ref('')\n\nconst generateLabel = (scheme: SecurityScheme) => {\n // ApiKeyHeader: header\n const description = scheme.description ? `: ${scheme.description}` : ''\n const baseLabel = `${capitalize(scheme.nameKey)}${description || `: ${scheme.type}`}`\n\n if (scheme.type === 'apiKey') {\n return `${capitalize(scheme.nameKey)}${description || `: ${scheme.in}`}`\n }\n\n // OAuth2: Authorization Code\n if (scheme.type === 'oauth2') {\n const firstFlow = Object.values(scheme.flows ?? {})[0]\n\n return `${capitalize(scheme.nameKey)}: ${\n activeFlow.value ? activeFlow.value : (firstFlow?.type ?? '')\n }${description}`\n }\n\n // HTTP: Bearer\n if (scheme.type === 'http') {\n return `${capitalize(scheme.nameKey)}: ${scheme.scheme}${description}`\n }\n\n // Default\n return `${baseLabel}${description}`\n}\n\n/** Wrapper for the updateScheme function */\nconst updateScheme = <\n U extends SecurityScheme['uid'],\n P extends Path<SecurityScheme>,\n>(\n uid: U,\n path: P,\n value: NonNullable<PathValue<SecurityScheme, P>>,\n) => {\n _updateScheme(uid, path, value, storeContext, persistAuth)\n}\n\n// Restore auth from local storage on mount\nonMounted(() => {\n if (!persistAuth) {\n return\n }\n\n restoreAuthFromLocalStorage(storeContext, collection.uid)\n})\n\n/** To make prop drilling a little easier */\nconst dataTableInputProps = {\n environment,\n envVariables,\n workspace,\n}\n</script>\n<template>\n <!-- Loop over for multiple auth selection -->\n <template\n v-for=\"{ scheme } in security\"\n :key=\"scheme?.uid\">\n <!-- Header -->\n <DataTableRow v-if=\"security.length > 1 && scheme\">\n <DataTableCell\n :aria-label=\"generateLabel(scheme)\"\n class=\"text-c-2 group/auth flex items-center leading-[22px] whitespace-nowrap outline-none hover:whitespace-normal\">\n <p\n class=\"bg-b-1 text-c-2 outline-b-3 top-0 z-1 h-full w-full overflow-hidden px-3 py-1.25 text-ellipsis group-hover/auth:absolute group-hover/auth:h-auto group-hover/auth:border-b *:first:line-clamp-1 *:first:text-ellipsis group-hover/auth:*:first:line-clamp-none\">\n {{ generateLabel(scheme) }}\n </p>\n </DataTableCell>\n </DataTableRow>\n\n <!-- Description -->\n <DataTableRow v-if=\"scheme?.description && security.length <= 1\">\n <DataTableCell\n :aria-label=\"scheme.description\"\n class=\"max-h-[auto]\">\n <ScalarMarkdownSummary\n class=\"auth-description bg-b-1 text-c-2 min-w-0 flex-1 px-3 py-1.25\"\n :value=\"scheme.description\" />\n </DataTableCell>\n </DataTableRow>\n\n <!-- HTTP -->\n <template v-if=\"scheme?.type === 'http'\">\n <!-- Bearer -->\n <DataTableRow v-if=\"scheme.scheme === 'bearer'\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :containerClass=\"layout === 'reference' && 'border-t'\"\n :modelValue=\"scheme.token\"\n placeholder=\"Token\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'token', v)\">\n Bearer Token\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- HTTP Basic -->\n <template v-else-if=\"scheme?.scheme === 'basic'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"text-c-2\"\n :modelValue=\"scheme.username\"\n placeholder=\"janedoe\"\n required\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'username', v)\">\n Username\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"scheme.password\"\n placeholder=\"********\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'password', v)\">\n Password\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n </template>\n\n <!-- API Key -->\n <template v-else-if=\"scheme?.type === 'apiKey'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :containerClass=\"layout === 'reference' && 'border-t'\"\n :modelValue=\"scheme.name\"\n placeholder=\"api-key\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'name', v)\">\n Name\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"scheme.value\"\n placeholder=\"QUxMIFlPVVIgQkFTRSBBUkUgQkVMT05HIFRPIFVT\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'value', v)\">\n Value\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n\n <!-- OAuth 2 -->\n <template v-else-if=\"scheme?.type === 'oauth2'\">\n <DataTableRow>\n <div\n v-if=\"Object.keys(scheme.flows).length > 1\"\n class=\"flex min-h-8 border-t text-base\">\n <div class=\"flex h-8 max-w-full gap-2.5 overflow-x-auto px-3\">\n <button\n v-for=\"(_, key, ind) in scheme?.flows\"\n :key=\"key\"\n class=\"floating-bg text-c-3 relative cursor-pointer border-b-[1px] border-transparent py-1 text-base font-medium\"\n :class=\"{\n '!text-c-1 !rounded-none border-b-[1px] !border-current':\n layout !== 'reference' &&\n (activeFlow === key || (ind === 0 && !activeFlow)),\n '!text-c-1 !rounded-none border-b-[1px] !border-current opacity-100':\n layout === 'reference' &&\n (activeFlow === key || (ind === 0 && !activeFlow)),\n }\"\n type=\"button\"\n @click=\"activeFlow = key\">\n <span class=\"relative z-10\">{{ key }}</span>\n </button>\n </div>\n </div>\n </DataTableRow>\n <template\n v-for=\"(flow, key, ind) in scheme?.flows\"\n :key=\"key\">\n <OAuth2\n v-if=\"activeFlow === key || (ind === 0 && !activeFlow)\"\n v-bind=\"dataTableInputProps\"\n :collection=\"collection\"\n :flow=\"flow!\"\n :persistAuth=\"persistAuth\"\n :scheme=\"scheme\"\n :server=\"server\"\n :workspace=\"workspace\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </OAuth2>\n </template>\n </template>\n\n <!-- Open ID Connect -->\n <template v-else-if=\"scheme?.type === 'openIdConnect'\">\n <div\n class=\"text-c-3 bg-b-1 flex min-h-[calc(4rem+1px)] items-center justify-center border-t border-b-0 px-4 text-base\"\n :class=\"{ 'rounded-b-lg': layout === 'reference' }\">\n Coming soon\n </div>\n </template>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarMarkdownSummary } from '@scalar/components'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type {\n Collection,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport type { Path, PathValue } from '@scalar/object-utils/nested'\nimport { capitalize, computed, onMounted, ref } from 'vue'\n\nimport { DataTableCell, DataTableRow } from '@/components/DataTable'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace } from '@/store/store'\nimport { updateScheme as _updateScheme } from '@/views/Request/RequestSection/helpers/update-scheme'\nimport { restoreAuthFromLocalStorage } from '@/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage'\n\nimport OAuth2 from './OAuth2.vue'\nimport RequestAuthDataTableInput from './RequestAuthDataTableInput.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n layout,\n persistAuth = false,\n securitySchemeUids,\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n persistAuth: boolean\n securitySchemeUids: string[]\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst storeContext = useWorkspace()\nconst { securitySchemes } = storeContext\nconst security = computed(() =>\n securitySchemeUids.map((uid) => ({\n scheme: securitySchemes[uid],\n })),\n)\n\nconst activeFlow = ref('')\n\nconst generateLabel = (scheme: SecurityScheme) => {\n // ApiKeyHeader: header\n const description = scheme.description ? `: ${scheme.description}` : ''\n const baseLabel = `${capitalize(scheme.nameKey)}${description || `: ${scheme.type}`}`\n\n if (scheme.type === 'apiKey') {\n return `${capitalize(scheme.nameKey)}${description || `: ${scheme.in}`}`\n }\n\n // OAuth2: Authorization Code\n if (scheme.type === 'oauth2') {\n const firstFlow = Object.values(scheme.flows ?? {})[0]\n\n return `${capitalize(scheme.nameKey)}: ${\n activeFlow.value ? activeFlow.value : (firstFlow?.type ?? '')\n }${description}`\n }\n\n // HTTP: Bearer\n if (scheme.type === 'http') {\n return `${capitalize(scheme.nameKey)}: ${scheme.scheme}${description}`\n }\n\n // Default\n return `${baseLabel}${description}`\n}\n\n/** Wrapper for the updateScheme function */\nconst updateScheme = <\n U extends SecurityScheme['uid'],\n P extends Path<SecurityScheme>,\n>(\n uid: U,\n path: P,\n value: NonNullable<PathValue<SecurityScheme, P>>,\n) => {\n _updateScheme(uid, path, value, storeContext, persistAuth)\n}\n\n// Restore auth from local storage on mount\nonMounted(() => {\n if (!persistAuth) {\n return\n }\n\n restoreAuthFromLocalStorage(storeContext, collection.uid)\n})\n\n/** To make prop drilling a little easier */\nconst dataTableInputProps = {\n environment,\n envVariables,\n workspace,\n}\n</script>\n<template>\n <!-- Loop over for multiple auth selection -->\n <template\n v-for=\"{ scheme } in security\"\n :key=\"scheme?.uid\">\n <!-- Header -->\n <DataTableRow v-if=\"security.length > 1 && scheme\">\n <DataTableCell\n :aria-label=\"generateLabel(scheme)\"\n class=\"text-c-2 group/auth flex items-center leading-[22px] whitespace-nowrap outline-none hover:whitespace-normal\">\n <p\n class=\"bg-b-1 text-c-2 outline-b-3 top-0 z-1 h-full w-full overflow-hidden px-3 py-1.25 text-ellipsis group-hover/auth:absolute group-hover/auth:h-auto group-hover/auth:border-b *:first:line-clamp-1 *:first:text-ellipsis group-hover/auth:*:first:line-clamp-none\">\n {{ generateLabel(scheme) }}\n </p>\n </DataTableCell>\n </DataTableRow>\n\n <!-- Description -->\n <DataTableRow v-if=\"scheme?.description && security.length <= 1\">\n <DataTableCell\n :aria-label=\"scheme.description\"\n class=\"max-h-[auto]\">\n <ScalarMarkdownSummary\n class=\"auth-description bg-b-1 text-c-2 min-w-0 flex-1 px-3 py-1.25\"\n :value=\"scheme.description\" />\n </DataTableCell>\n </DataTableRow>\n\n <!-- HTTP -->\n <template v-if=\"scheme?.type === 'http'\">\n <!-- Bearer -->\n <DataTableRow v-if=\"scheme.scheme === 'bearer'\">\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :containerClass=\"layout === 'reference' && 'border-t'\"\n :modelValue=\"scheme.token\"\n placeholder=\"Token\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'token', v)\">\n Bearer Token\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- HTTP Basic -->\n <template v-else-if=\"scheme?.scheme === 'basic'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n class=\"text-c-2\"\n :modelValue=\"scheme.username\"\n placeholder=\"janedoe\"\n required\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'username', v)\">\n Username\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"scheme.password\"\n placeholder=\"********\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'password', v)\">\n Password\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n </template>\n\n <!-- API Key -->\n <template v-else-if=\"scheme?.type === 'apiKey'\">\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :containerClass=\"layout === 'reference' && 'border-t'\"\n :modelValue=\"scheme.name\"\n placeholder=\"api-key\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'name', v)\">\n Name\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-bind=\"dataTableInputProps\"\n :modelValue=\"scheme.value\"\n placeholder=\"QUxMIFlPVVIgQkFTRSBBUkUgQkVMT05HIFRPIFVT\"\n type=\"password\"\n @update:modelValue=\"(v) => updateScheme(scheme.uid, 'value', v)\">\n Value\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n\n <!-- OAuth 2 -->\n <template v-else-if=\"scheme?.type === 'oauth2'\">\n <DataTableRow>\n <div\n v-if=\"Object.keys(scheme.flows).length > 1\"\n class=\"flex min-h-8 border-t text-base\">\n <div class=\"flex h-8 max-w-full gap-2.5 overflow-x-auto px-3\">\n <button\n v-for=\"(_, key, ind) in scheme?.flows\"\n :key=\"key\"\n class=\"floating-bg text-c-3 relative cursor-pointer border-b-[1px] border-transparent py-1 text-base font-medium\"\n :class=\"{\n '!text-c-1 !rounded-none border-b-[1px] !border-current':\n layout !== 'reference' &&\n (activeFlow === key || (ind === 0 && !activeFlow)),\n '!text-c-1 !rounded-none border-b-[1px] !border-current opacity-100':\n layout === 'reference' &&\n (activeFlow === key || (ind === 0 && !activeFlow)),\n }\"\n type=\"button\"\n @click=\"activeFlow = key\">\n <span class=\"relative z-10\">{{ key }}</span>\n </button>\n </div>\n </div>\n </DataTableRow>\n <template\n v-for=\"(flow, key, ind) in scheme?.flows\"\n :key=\"key\">\n <OAuth2\n v-if=\"activeFlow === key || (ind === 0 && !activeFlow)\"\n v-bind=\"dataTableInputProps\"\n :collection=\"collection\"\n :flow=\"flow!\"\n :persistAuth=\"persistAuth\"\n :scheme=\"scheme\"\n :server=\"server\"\n :workspace=\"workspace\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </OAuth2>\n </template>\n </template>\n\n <!-- Open ID Connect -->\n <template v-else-if=\"scheme?.type === 'openIdConnect'\">\n <div\n class=\"text-c-3 bg-b-1 flex min-h-[calc(4rem+1px)] items-center justify-center border-t border-b-0 px-4 text-base\"\n :class=\"{ 'rounded-b-lg': layout === 'reference' }\">\n Coming soon\n </div>\n </template>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { useModal } from '@scalar/components'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type {\n Collection,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { computed, ref, watch } from 'vue'\n\nimport { DataTable } from '@/components/DataTable'\nimport { useWorkspace } from '@/store'\nimport type { EnvVariable } from '@/store/active-entities'\n\nimport DeleteRequestAuthModal from './DeleteRequestAuthModal.vue'\nimport RequestAuthTab from './RequestAuthTab.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n layout = 'client',\n persistAuth = false,\n selectedSchemeOptions = [],\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n persistAuth: boolean\n selectedSchemeOptions: { id: string; label: string }[]\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n activeSchemes: [schemes: SecurityScheme[]]\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst { securitySchemes } = useWorkspace()\nconst deleteSchemeModal = useModal()\nconst selectedScheme = ref<{ id: SecurityScheme['uid']; label: string } | null>(\n null,\n)\n\n/** Add new ref for active tab */\nconst activeAuthIndex = ref(0)\n\n/** Return currently selected schemes including complex auth */\nconst activeScheme = computed(() => {\n if (!selectedSchemeOptions || selectedSchemeOptions.length === 0) {\n return []\n }\n\n const option = selectedSchemeOptions[activeAuthIndex.value]\n if (!option) {\n return []\n }\n\n const keys = option.id.split(',').filter(Boolean)\n return keys.length > 1 ? keys : [option.id]\n})\n\n/** Emit active schemes */\nwatch(\n activeScheme,\n (newActiveSchemes) => {\n emits(\n 'activeSchemes',\n newActiveSchemes\n .map((scheme) => securitySchemes[scheme])\n .filter(isDefined),\n )\n },\n { immediate: true },\n)\n\n/** Return true if there are any active schemes */\nconst hasActiveSchemes = computed(() => activeScheme.value.length > 0)\n\nwatch(\n () => selectedSchemeOptions,\n (newOptions) => {\n if (!newOptions || !newOptions[activeAuthIndex.value]) {\n activeAuthIndex.value = Math.max(0, activeAuthIndex.value - 1)\n }\n },\n)\n</script>\n<template>\n <form @submit.prevent>\n <div\n v-if=\"selectedSchemeOptions.length > 1\"\n class=\"box-content flex flex-wrap gap-x-2.5 overflow-hidden border border-b-0 px-3\"\n :class=\"layout === 'client' && 'border-x-0'\">\n <div\n v-for=\"(option, index) in selectedSchemeOptions\"\n :key=\"option.id\"\n class=\"relative z-1 -mb-[var(--scalar-border-width)] flex h-8 cursor-pointer\"\n :class=\"[activeAuthIndex === index ? 'text-c-1' : 'text-c-3']\">\n <button\n class=\"floating-bg relative cursor-pointer border-b-[1px] border-transparent py-1 text-sm font-medium\"\n type=\"button\"\n @click=\"activeAuthIndex = index\">\n <span class=\"relative z-10 font-medium whitespace-nowrap\">{{\n option.label\n }}</span>\n </button>\n <div\n v-if=\"activeAuthIndex === index\"\n class=\"absolute inset-x-1 bottom-[var(--scalar-border-width)] left-1/2 z-1 h-px w-full -translate-x-1/2 bg-current\" />\n </div>\n </div>\n\n <DataTable\n v-if=\"hasActiveSchemes\"\n class=\"flex-1\"\n :class=\"layout === 'reference' && 'bg-b-1 rounded-b-lg border border-t-0'\"\n :columns=\"['']\"\n presentational>\n <RequestAuthTab\n :collection=\"collection\"\n :envVariables=\"envVariables\"\n :environment=\"environment\"\n :layout=\"layout\"\n :persistAuth=\"persistAuth\"\n :securitySchemeUids=\"activeScheme\"\n :server=\"server\"\n :workspace=\"workspace\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </RequestAuthTab>\n </DataTable>\n\n <div\n v-else\n class=\"text-c-3 bg-b-1 flex min-h-16 items-center justify-center border-t px-4 text-sm\"\n :class=\"\n layout === 'reference' && 'min-h-[calc(4rem+0.5px)] rounded-b-lg border'\n \">\n No authentication selected\n </div>\n\n <DeleteRequestAuthModal\n :scheme=\"selectedScheme\"\n :state=\"deleteSchemeModal\"\n @close=\"deleteSchemeModal.hide()\" />\n </form>\n</template>\n<style scoped>\n.auth-combobox-position {\n margin-left: 120px;\n}\n.scroll-timeline-x {\n overflow: auto;\n scroll-timeline: --scroll-timeline x;\n /* Firefox supports */\n scroll-timeline: --scroll-timeline horizontal;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n.fade-left,\n.fade-right {\n position: sticky;\n content: '';\n height: 100%;\n animation-name: fadein;\n animation-duration: 1ms;\n animation-direction: reverse;\n animation-timeline: --scroll-timeline;\n min-height: 24px;\n pointer-events: none;\n}\n.fade-left {\n background: linear-gradient(\n -90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n min-width: 3px;\n left: -1px;\n animation-direction: normal;\n}\n.fade-right {\n background: linear-gradient(\n 90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n margin-left: -20px;\n min-width: 24px;\n right: -1px;\n top: 0;\n}\n@keyframes fadein {\n 0% {\n opacity: 0;\n }\n 15% {\n opacity: 1;\n }\n}\n\n/* .references-auth-data-table :deep(table td) {\n margin: 0 9px;\n background: var(--scalar-background-2);\n} */\n\n/* More than one selected */\n/* .references-auth-data-table\n :deep(table:has(.group\\/delete) tr:nth-child(2) td) {\n border-radius: var(--scalar-radius) var(--scalar-radius) 0 0;\n border: 0.5px solid var(--scalar-border-color);\n border-bottom: none;\n}\n.references-auth-data-table\n :deep(table:not(:has(.group\\/delete)) tr:nth-child(3) td) {\n border-radius: var(--scalar-radius) var(--scalar-radius) 0 0;\n border: 0.5px solid var(--scalar-border-color);\n border-bottom: none;\n}\n.references-auth-data-table :deep(table tr:last-child td) {\n border-radius: 0 0 var(--scalar-radius) var(--scalar-radius);\n border: 0.5px solid var(--scalar-border-color);\n border-top: none;\n}\n\n.references-auth-data-table :deep(.references-auth-row:last-of-type) td {\n border-radius: 0 0 var(--scalar-radius) var(--scalar-radius);\n background: blue;\n}\n.references-auth-data-table :deep(.scalar-data-table-input-required) {\n background-color: var(--scalar-background-2);\n --tw-bg-base: var(--scalar-background-2);\n --tw-shadow: var(--scalar-background-2);\n} */\n</style>\n","<script setup lang=\"ts\">\nimport { useModal } from '@scalar/components'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type {\n Collection,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { computed, ref, watch } from 'vue'\n\nimport { DataTable } from '@/components/DataTable'\nimport { useWorkspace } from '@/store'\nimport type { EnvVariable } from '@/store/active-entities'\n\nimport DeleteRequestAuthModal from './DeleteRequestAuthModal.vue'\nimport RequestAuthTab from './RequestAuthTab.vue'\n\nconst {\n collection,\n environment,\n envVariables,\n layout = 'client',\n persistAuth = false,\n selectedSchemeOptions = [],\n server,\n workspace,\n} = defineProps<{\n collection: Collection\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n persistAuth: boolean\n selectedSchemeOptions: { id: string; label: string }[]\n server: Server | undefined\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n authorized: []\n activeSchemes: [schemes: SecurityScheme[]]\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst { securitySchemes } = useWorkspace()\nconst deleteSchemeModal = useModal()\nconst selectedScheme = ref<{ id: SecurityScheme['uid']; label: string } | null>(\n null,\n)\n\n/** Add new ref for active tab */\nconst activeAuthIndex = ref(0)\n\n/** Return currently selected schemes including complex auth */\nconst activeScheme = computed(() => {\n if (!selectedSchemeOptions || selectedSchemeOptions.length === 0) {\n return []\n }\n\n const option = selectedSchemeOptions[activeAuthIndex.value]\n if (!option) {\n return []\n }\n\n const keys = option.id.split(',').filter(Boolean)\n return keys.length > 1 ? keys : [option.id]\n})\n\n/** Emit active schemes */\nwatch(\n activeScheme,\n (newActiveSchemes) => {\n emits(\n 'activeSchemes',\n newActiveSchemes\n .map((scheme) => securitySchemes[scheme])\n .filter(isDefined),\n )\n },\n { immediate: true },\n)\n\n/** Return true if there are any active schemes */\nconst hasActiveSchemes = computed(() => activeScheme.value.length > 0)\n\nwatch(\n () => selectedSchemeOptions,\n (newOptions) => {\n if (!newOptions || !newOptions[activeAuthIndex.value]) {\n activeAuthIndex.value = Math.max(0, activeAuthIndex.value - 1)\n }\n },\n)\n</script>\n<template>\n <form @submit.prevent>\n <div\n v-if=\"selectedSchemeOptions.length > 1\"\n class=\"box-content flex flex-wrap gap-x-2.5 overflow-hidden border border-b-0 px-3\"\n :class=\"layout === 'client' && 'border-x-0'\">\n <div\n v-for=\"(option, index) in selectedSchemeOptions\"\n :key=\"option.id\"\n class=\"relative z-1 -mb-[var(--scalar-border-width)] flex h-8 cursor-pointer\"\n :class=\"[activeAuthIndex === index ? 'text-c-1' : 'text-c-3']\">\n <button\n class=\"floating-bg relative cursor-pointer border-b-[1px] border-transparent py-1 text-sm font-medium\"\n type=\"button\"\n @click=\"activeAuthIndex = index\">\n <span class=\"relative z-10 font-medium whitespace-nowrap\">{{\n option.label\n }}</span>\n </button>\n <div\n v-if=\"activeAuthIndex === index\"\n class=\"absolute inset-x-1 bottom-[var(--scalar-border-width)] left-1/2 z-1 h-px w-full -translate-x-1/2 bg-current\" />\n </div>\n </div>\n\n <DataTable\n v-if=\"hasActiveSchemes\"\n class=\"flex-1\"\n :class=\"layout === 'reference' && 'bg-b-1 rounded-b-lg border border-t-0'\"\n :columns=\"['']\"\n presentational>\n <RequestAuthTab\n :collection=\"collection\"\n :envVariables=\"envVariables\"\n :environment=\"environment\"\n :layout=\"layout\"\n :persistAuth=\"persistAuth\"\n :securitySchemeUids=\"activeScheme\"\n :server=\"server\"\n :workspace=\"workspace\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </RequestAuthTab>\n </DataTable>\n\n <div\n v-else\n class=\"text-c-3 bg-b-1 flex min-h-16 items-center justify-center border-t px-4 text-sm\"\n :class=\"\n layout === 'reference' && 'min-h-[calc(4rem+0.5px)] rounded-b-lg border'\n \">\n No authentication selected\n </div>\n\n <DeleteRequestAuthModal\n :scheme=\"selectedScheme\"\n :state=\"deleteSchemeModal\"\n @close=\"deleteSchemeModal.hide()\" />\n </form>\n</template>\n<style scoped>\n.auth-combobox-position {\n margin-left: 120px;\n}\n.scroll-timeline-x {\n overflow: auto;\n scroll-timeline: --scroll-timeline x;\n /* Firefox supports */\n scroll-timeline: --scroll-timeline horizontal;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n.fade-left,\n.fade-right {\n position: sticky;\n content: '';\n height: 100%;\n animation-name: fadein;\n animation-duration: 1ms;\n animation-direction: reverse;\n animation-timeline: --scroll-timeline;\n min-height: 24px;\n pointer-events: none;\n}\n.fade-left {\n background: linear-gradient(\n -90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n min-width: 3px;\n left: -1px;\n animation-direction: normal;\n}\n.fade-right {\n background: linear-gradient(\n 90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n margin-left: -20px;\n min-width: 24px;\n right: -1px;\n top: 0;\n}\n@keyframes fadein {\n 0% {\n opacity: 0;\n }\n 15% {\n opacity: 1;\n }\n}\n\n/* .references-auth-data-table :deep(table td) {\n margin: 0 9px;\n background: var(--scalar-background-2);\n} */\n\n/* More than one selected */\n/* .references-auth-data-table\n :deep(table:has(.group\\/delete) tr:nth-child(2) td) {\n border-radius: var(--scalar-radius) var(--scalar-radius) 0 0;\n border: 0.5px solid var(--scalar-border-color);\n border-bottom: none;\n}\n.references-auth-data-table\n :deep(table:not(:has(.group\\/delete)) tr:nth-child(3) td) {\n border-radius: var(--scalar-radius) var(--scalar-radius) 0 0;\n border: 0.5px solid var(--scalar-border-color);\n border-bottom: none;\n}\n.references-auth-data-table :deep(table tr:last-child td) {\n border-radius: 0 0 var(--scalar-radius) var(--scalar-radius);\n border: 0.5px solid var(--scalar-border-color);\n border-top: none;\n}\n\n.references-auth-data-table :deep(.references-auth-row:last-of-type) td {\n border-radius: 0 0 var(--scalar-radius) var(--scalar-radius);\n background: blue;\n}\n.references-auth-data-table :deep(.scalar-data-table-input-required) {\n background-color: var(--scalar-background-2);\n --tw-bg-base: var(--scalar-background-2);\n --tw-shadow: var(--scalar-background-2);\n} */\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarButton,\n ScalarComboboxMultiselect,\n ScalarIconButton,\n ScalarListboxCheckbox,\n useModal,\n type Icon,\n type ScalarButton as ScalarButtonType,\n} from '@scalar/components'\nimport {\n CLIENT_LS_KEYS,\n safeLocalStorage,\n} from '@scalar/helpers/object/local-storage'\nimport { ScalarIconCaretDown, ScalarIconTrash } from '@scalar/icons'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type { SelectedSecuritySchemeUids } from '@scalar/oas-utils/entities/shared'\nimport type {\n Collection,\n Operation,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { isDefined } from '@scalar/oas-utils/helpers'\nimport { computed, ref, useId } from 'vue'\n\nimport ViewLayoutCollapse from '@/components/ViewLayout/ViewLayoutCollapse.vue'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace } from '@/store/store'\nimport type { SecuritySchemeOption } from '@/views/Request/consts'\nimport {\n formatComplexScheme,\n formatScheme,\n getSchemeOptions,\n getSecurityRequirements,\n} from '@/views/Request/libs'\n\nimport DeleteRequestAuthModal from './DeleteRequestAuthModal.vue'\nimport RequestAuthDataTable from './RequestAuthDataTable.vue'\n\nconst {\n collection,\n isReadOnly = false,\n environment,\n envVariables,\n layout,\n operation,\n persistAuth = false,\n selectedSecuritySchemeUids,\n server,\n title,\n workspace,\n} = defineProps<{\n collection: Collection\n /** Controls whether user can add new auth schemes */\n isReadOnly?: boolean\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n operation?: Operation | undefined\n persistAuth?: boolean\n selectedSecuritySchemeUids: SelectedSecuritySchemeUids\n server: Server | undefined\n title: string\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n /** Emits when the user has authorized with an oauth2 flow */\n authorized: []\n /** Emits the currently active scheme */\n activeSchemes: [schemes: SecurityScheme[]]\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst {\n securitySchemes,\n securitySchemeMutators,\n requestMutators,\n collectionMutators,\n} = useWorkspace()\n\nconst titleId = useId()\n\nconst comboboxButtonRef = ref<typeof ScalarButtonType | null>(null)\nconst deleteSchemeModal = useModal()\nconst selectedScheme = ref<{ id: SecurityScheme['uid']; label: string } | null>(\n null,\n)\nconst isViewLayoutOpen = ref(false)\n\n/** Security requirements for the request */\nconst securityRequirements = computed(() => {\n const requirements = getSecurityRequirements(operation, collection)\n\n /** Filter out empty objects */\n const filteredRequirements = requirements.filter((r) => Object.keys(r).length)\n\n return { filteredRequirements, requirements }\n})\n\n/** Indicates if auth is required */\nconst authIndicator = computed(() => {\n const { filteredRequirements, requirements } = securityRequirements.value\n if (!requirements.length) {\n return null\n }\n\n /**\n * Security is optional if one empty object exists in the array &\n * no complex auth requirements (with multiple auth)\n */\n const hasComplexRequirement = requirements.some(\n (req) => Object.keys(req).length > 1,\n )\n const isOptional =\n !hasComplexRequirement && filteredRequirements.length < requirements.length\n\n const icon: Icon = isOptional ? 'Unlock' : 'Lock'\n\n /** Text to indicate auth requirements */\n const text = isOptional ? 'Optional' : 'Required'\n\n return { icon, text }\n})\n\n/**\n * Currently selected auth schemes on the collection, we store complex auth joined by a comma to represent the array\n * in the string\n */\nconst selectedSchemeOptions = computed<SecuritySchemeOption[]>(() =>\n selectedSecuritySchemeUids\n .map((s) => {\n if (Array.isArray(s)) {\n return formatComplexScheme(s, securitySchemes)\n }\n const scheme = securitySchemes[s ?? '']\n if (!scheme) {\n return undefined\n }\n return formatScheme(scheme)\n })\n .filter(isDefined),\n)\n\n/** Update the selected auth types */\nfunction updateSelectedAuth(entries: SecuritySchemeOption[]) {\n const addNewOption = entries.find((e) => e.payload)\n const _entries = entries\n .filter((e) => !e.payload)\n .map(({ id }) => {\n const arr = id.split(',')\n return arr.length > 1\n ? (arr as SecurityScheme['uid'][])\n : (id as SecurityScheme['uid'])\n })\n\n // Adding new auth\n if (addNewOption?.payload) {\n // Create new scheme\n const scheme = securitySchemeMutators.add(\n addNewOption.payload,\n collection?.uid,\n )\n if (scheme) {\n _entries.push(scheme.uid)\n }\n }\n\n editSelectedSchemeUids(_entries)\n}\n\nconst editSelectedSchemeUids = (uids: SelectedSecuritySchemeUids) => {\n // Set as selected on the collection for the modal\n if (collection.useCollectionSecurity) {\n collectionMutators.edit(collection.uid, 'selectedSecuritySchemeUids', uids)\n\n if (!persistAuth) {\n return\n }\n\n // We must convert the uids to nameKeys first\n const nameKeys = uids.map((uids) => {\n // Handle complex auth\n if (Array.isArray(uids)) {\n return uids.map((uid) => securitySchemes[uid]?.nameKey)\n }\n\n return securitySchemes[uids]?.nameKey\n })\n\n safeLocalStorage().setItem(\n CLIENT_LS_KEYS.SELECTED_SECURITY_SCHEMES,\n JSON.stringify(nameKeys),\n )\n }\n // Set as selected on request\n else if (operation?.uid) {\n requestMutators.edit(operation.uid, 'selectedSecuritySchemeUids', uids)\n }\n}\n\nfunction handleDeleteScheme({ id, label }: { id: string; label: string }) {\n // We cast the type here just to make the combobox happy, TODO: we should make ID be string-like and accept brands\n selectedScheme.value = { id: id as SecurityScheme['uid'], label }\n deleteSchemeModal.show()\n}\n\nconst unselectAuth = (unSelectUid?: string) => {\n if (!unSelectUid) {\n return\n }\n const newUids = selectedSecuritySchemeUids.filter((uid) => {\n const arr = unSelectUid.split(',')\n // Handle complex auth\n if (arr.length > 1 && Array.isArray(uid) && arr.length === uid.length) {\n return uid.every((u) => !arr.includes(u))\n }\n // Standard string auth\n return uid !== unSelectUid\n })\n editSelectedSchemeUids(newUids)\n comboboxButtonRef.value?.$el.focus()\n deleteSchemeModal.hide()\n}\n\n/** Options for the security scheme dropdown */\nconst schemeOptions = computed(() =>\n getSchemeOptions(\n securityRequirements.value.filteredRequirements,\n collection?.securitySchemes ?? [],\n securitySchemes,\n isReadOnly,\n ),\n)\n\nconst openAuthCombobox = (event: Event) => {\n // If the layout is open, we don't want it to close on auth label click\n if (isViewLayoutOpen.value) {\n event.stopPropagation()\n }\n\n comboboxButtonRef.value?.$el.click()\n}\n</script>\n<template>\n <ViewLayoutCollapse\n class=\"group/params relative\"\n :itemCount=\"selectedSchemeOptions.length\"\n :layout=\"layout\"\n @update:modelValue=\"isViewLayoutOpen = $event\">\n <template #title>\n <div\n :id=\"titleId\"\n class=\"inline-flex items-center gap-0.5 leading-[20px]\">\n <span>{{ title }}</span>\n <!-- Authentication indicator -->\n <span\n v-if=\"authIndicator\"\n class=\"text-c-3 hover:bg-b-3 hover:text-c-1 -mr-1 cursor-pointer rounded px-1 py-0.5 text-xs leading-[normal]\"\n :class=\"{ 'text-c-1': authIndicator.text === 'Required' }\"\n @click=\"openAuthCombobox\">\n {{ authIndicator.text }}\n </span>\n </div>\n </template>\n <template #actions>\n <div class=\"flex flex-1\">\n <ScalarComboboxMultiselect\n class=\"w-72 text-xs\"\n :modelValue=\"selectedSchemeOptions\"\n multiple\n :options=\"schemeOptions\"\n placement=\"bottom-end\"\n teleport\n @delete=\"handleDeleteScheme\"\n @update:modelValue=\"updateSelectedAuth\">\n <ScalarButton\n ref=\"comboboxButtonRef\"\n :aria-describedby=\"titleId\"\n class=\"group/combobox-button hover:text-c-1 text-c-2 flex h-fit w-full items-center gap-1 px-0.75 py-0.25 text-base font-normal transition-transform\"\n variant=\"ghost\">\n <template v-if=\"selectedSchemeOptions.length === 1\">\n <span class=\"sr-only\">Selected Auth Type:</span>\n {{ selectedSchemeOptions[0]?.label }}\n </template>\n <template v-else-if=\"selectedSchemeOptions.length > 1\">\n Multiple\n <span class=\"sr-only\">Auth Types Selected</span>\n </template>\n <template v-else>\n <span class=\"sr-only\">Select</span>\n Auth Type\n </template>\n <ScalarIconCaretDown\n class=\"size-3 shrink-0 transition-transform duration-100 group-aria-expanded/combobox-button:rotate-180\"\n weight=\"bold\" />\n </ScalarButton>\n <template #option=\"{ option, selected }\">\n <ScalarListboxCheckbox\n multiselect\n :selected=\"selected\" />\n <div class=\"min-w-0 flex-1 truncate\">\n {{ option.label }}\n </div>\n <ScalarIconButton\n v-if=\"option.isDeletable ?? !isReadOnly\"\n class=\"-m-0.5 shrink-0 p-0.5 opacity-0 group-hover/item:opacity-100\"\n :icon=\"ScalarIconTrash\"\n :label=\"`Delete ${option.label}`\"\n size=\"xs\"\n @click.stop=\"handleDeleteScheme(option)\" />\n </template>\n </ScalarComboboxMultiselect>\n </div>\n </template>\n\n <!-- Auth Table -->\n <RequestAuthDataTable\n :collection=\"collection\"\n :envVariables=\"envVariables\"\n :environment=\"environment\"\n :layout=\"layout\"\n :persistAuth=\"persistAuth\"\n :selectedSchemeOptions=\"selectedSchemeOptions\"\n :server=\"server\"\n :workspace=\"workspace\"\n @activeSchemes=\"emits('activeSchemes', $event)\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </RequestAuthDataTable>\n\n <DeleteRequestAuthModal\n :scheme=\"selectedScheme\"\n :state=\"deleteSchemeModal\"\n @close=\"deleteSchemeModal.hide()\"\n @delete=\"unselectAuth(selectedScheme?.id)\" />\n </ViewLayoutCollapse>\n</template>\n<style scoped>\n.auth-combobox-position {\n margin-left: 120px;\n}\n.scroll-timeline-x {\n overflow: auto;\n scroll-timeline: --scroll-timeline x;\n /* Firefox supports */\n scroll-timeline: --scroll-timeline horizontal;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n.fade-left,\n.fade-right {\n position: sticky;\n content: '';\n height: 100%;\n animation-name: fadein;\n animation-duration: 1ms;\n animation-direction: reverse;\n animation-timeline: --scroll-timeline;\n min-height: 24px;\n pointer-events: none;\n}\n.fade-left {\n background: linear-gradient(\n -90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n min-width: 3px;\n left: -1px;\n animation-direction: normal;\n}\n.fade-right {\n background: linear-gradient(\n 90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n margin-left: -20px;\n min-width: 24px;\n right: -1px;\n top: 0;\n}\n@keyframes fadein {\n 0% {\n opacity: 0;\n }\n 15% {\n opacity: 1;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarButton,\n ScalarComboboxMultiselect,\n ScalarIconButton,\n ScalarListboxCheckbox,\n useModal,\n type Icon,\n type ScalarButton as ScalarButtonType,\n} from '@scalar/components'\nimport {\n CLIENT_LS_KEYS,\n safeLocalStorage,\n} from '@scalar/helpers/object/local-storage'\nimport { ScalarIconCaretDown, ScalarIconTrash } from '@scalar/icons'\nimport type { Environment } from '@scalar/oas-utils/entities/environment'\nimport type { SelectedSecuritySchemeUids } from '@scalar/oas-utils/entities/shared'\nimport type {\n Collection,\n Operation,\n SecurityScheme,\n Server,\n} from '@scalar/oas-utils/entities/spec'\nimport type { Workspace } from '@scalar/oas-utils/entities/workspace'\nimport { isDefined } from '@scalar/oas-utils/helpers'\nimport { computed, ref, useId } from 'vue'\n\nimport ViewLayoutCollapse from '@/components/ViewLayout/ViewLayoutCollapse.vue'\nimport type { EnvVariable } from '@/store/active-entities'\nimport { useWorkspace } from '@/store/store'\nimport type { SecuritySchemeOption } from '@/views/Request/consts'\nimport {\n formatComplexScheme,\n formatScheme,\n getSchemeOptions,\n getSecurityRequirements,\n} from '@/views/Request/libs'\n\nimport DeleteRequestAuthModal from './DeleteRequestAuthModal.vue'\nimport RequestAuthDataTable from './RequestAuthDataTable.vue'\n\nconst {\n collection,\n isReadOnly = false,\n environment,\n envVariables,\n layout,\n operation,\n persistAuth = false,\n selectedSecuritySchemeUids,\n server,\n title,\n workspace,\n} = defineProps<{\n collection: Collection\n /** Controls whether user can add new auth schemes */\n isReadOnly?: boolean\n environment: Environment\n envVariables: EnvVariable[]\n layout: 'client' | 'reference'\n operation?: Operation | undefined\n persistAuth?: boolean\n selectedSecuritySchemeUids: SelectedSecuritySchemeUids\n server: Server | undefined\n title: string\n workspace: Workspace\n}>()\n\nconst emits = defineEmits<{\n /** Emits when the user has authorized with an oauth2 flow */\n authorized: []\n /** Emits the currently active scheme */\n activeSchemes: [schemes: SecurityScheme[]]\n}>()\n\ndefineSlots<{\n 'oauth-actions'?: () => unknown\n}>()\n\nconst {\n securitySchemes,\n securitySchemeMutators,\n requestMutators,\n collectionMutators,\n} = useWorkspace()\n\nconst titleId = useId()\n\nconst comboboxButtonRef = ref<typeof ScalarButtonType | null>(null)\nconst deleteSchemeModal = useModal()\nconst selectedScheme = ref<{ id: SecurityScheme['uid']; label: string } | null>(\n null,\n)\nconst isViewLayoutOpen = ref(false)\n\n/** Security requirements for the request */\nconst securityRequirements = computed(() => {\n const requirements = getSecurityRequirements(operation, collection)\n\n /** Filter out empty objects */\n const filteredRequirements = requirements.filter((r) => Object.keys(r).length)\n\n return { filteredRequirements, requirements }\n})\n\n/** Indicates if auth is required */\nconst authIndicator = computed(() => {\n const { filteredRequirements, requirements } = securityRequirements.value\n if (!requirements.length) {\n return null\n }\n\n /**\n * Security is optional if one empty object exists in the array &\n * no complex auth requirements (with multiple auth)\n */\n const hasComplexRequirement = requirements.some(\n (req) => Object.keys(req).length > 1,\n )\n const isOptional =\n !hasComplexRequirement && filteredRequirements.length < requirements.length\n\n const icon: Icon = isOptional ? 'Unlock' : 'Lock'\n\n /** Text to indicate auth requirements */\n const text = isOptional ? 'Optional' : 'Required'\n\n return { icon, text }\n})\n\n/**\n * Currently selected auth schemes on the collection, we store complex auth joined by a comma to represent the array\n * in the string\n */\nconst selectedSchemeOptions = computed<SecuritySchemeOption[]>(() =>\n selectedSecuritySchemeUids\n .map((s) => {\n if (Array.isArray(s)) {\n return formatComplexScheme(s, securitySchemes)\n }\n const scheme = securitySchemes[s ?? '']\n if (!scheme) {\n return undefined\n }\n return formatScheme(scheme)\n })\n .filter(isDefined),\n)\n\n/** Update the selected auth types */\nfunction updateSelectedAuth(entries: SecuritySchemeOption[]) {\n const addNewOption = entries.find((e) => e.payload)\n const _entries = entries\n .filter((e) => !e.payload)\n .map(({ id }) => {\n const arr = id.split(',')\n return arr.length > 1\n ? (arr as SecurityScheme['uid'][])\n : (id as SecurityScheme['uid'])\n })\n\n // Adding new auth\n if (addNewOption?.payload) {\n // Create new scheme\n const scheme = securitySchemeMutators.add(\n addNewOption.payload,\n collection?.uid,\n )\n if (scheme) {\n _entries.push(scheme.uid)\n }\n }\n\n editSelectedSchemeUids(_entries)\n}\n\nconst editSelectedSchemeUids = (uids: SelectedSecuritySchemeUids) => {\n // Set as selected on the collection for the modal\n if (collection.useCollectionSecurity) {\n collectionMutators.edit(collection.uid, 'selectedSecuritySchemeUids', uids)\n\n if (!persistAuth) {\n return\n }\n\n // We must convert the uids to nameKeys first\n const nameKeys = uids.map((uids) => {\n // Handle complex auth\n if (Array.isArray(uids)) {\n return uids.map((uid) => securitySchemes[uid]?.nameKey)\n }\n\n return securitySchemes[uids]?.nameKey\n })\n\n safeLocalStorage().setItem(\n CLIENT_LS_KEYS.SELECTED_SECURITY_SCHEMES,\n JSON.stringify(nameKeys),\n )\n }\n // Set as selected on request\n else if (operation?.uid) {\n requestMutators.edit(operation.uid, 'selectedSecuritySchemeUids', uids)\n }\n}\n\nfunction handleDeleteScheme({ id, label }: { id: string; label: string }) {\n // We cast the type here just to make the combobox happy, TODO: we should make ID be string-like and accept brands\n selectedScheme.value = { id: id as SecurityScheme['uid'], label }\n deleteSchemeModal.show()\n}\n\nconst unselectAuth = (unSelectUid?: string) => {\n if (!unSelectUid) {\n return\n }\n const newUids = selectedSecuritySchemeUids.filter((uid) => {\n const arr = unSelectUid.split(',')\n // Handle complex auth\n if (arr.length > 1 && Array.isArray(uid) && arr.length === uid.length) {\n return uid.every((u) => !arr.includes(u))\n }\n // Standard string auth\n return uid !== unSelectUid\n })\n editSelectedSchemeUids(newUids)\n comboboxButtonRef.value?.$el.focus()\n deleteSchemeModal.hide()\n}\n\n/** Options for the security scheme dropdown */\nconst schemeOptions = computed(() =>\n getSchemeOptions(\n securityRequirements.value.filteredRequirements,\n collection?.securitySchemes ?? [],\n securitySchemes,\n isReadOnly,\n ),\n)\n\nconst openAuthCombobox = (event: Event) => {\n // If the layout is open, we don't want it to close on auth label click\n if (isViewLayoutOpen.value) {\n event.stopPropagation()\n }\n\n comboboxButtonRef.value?.$el.click()\n}\n</script>\n<template>\n <ViewLayoutCollapse\n class=\"group/params relative\"\n :itemCount=\"selectedSchemeOptions.length\"\n :layout=\"layout\"\n @update:modelValue=\"isViewLayoutOpen = $event\">\n <template #title>\n <div\n :id=\"titleId\"\n class=\"inline-flex items-center gap-0.5 leading-[20px]\">\n <span>{{ title }}</span>\n <!-- Authentication indicator -->\n <span\n v-if=\"authIndicator\"\n class=\"text-c-3 hover:bg-b-3 hover:text-c-1 -mr-1 cursor-pointer rounded px-1 py-0.5 text-xs leading-[normal]\"\n :class=\"{ 'text-c-1': authIndicator.text === 'Required' }\"\n @click=\"openAuthCombobox\">\n {{ authIndicator.text }}\n </span>\n </div>\n </template>\n <template #actions>\n <div class=\"flex flex-1\">\n <ScalarComboboxMultiselect\n class=\"w-72 text-xs\"\n :modelValue=\"selectedSchemeOptions\"\n multiple\n :options=\"schemeOptions\"\n placement=\"bottom-end\"\n teleport\n @delete=\"handleDeleteScheme\"\n @update:modelValue=\"updateSelectedAuth\">\n <ScalarButton\n ref=\"comboboxButtonRef\"\n :aria-describedby=\"titleId\"\n class=\"group/combobox-button hover:text-c-1 text-c-2 flex h-fit w-full items-center gap-1 px-0.75 py-0.25 text-base font-normal transition-transform\"\n variant=\"ghost\">\n <template v-if=\"selectedSchemeOptions.length === 1\">\n <span class=\"sr-only\">Selected Auth Type:</span>\n {{ selectedSchemeOptions[0]?.label }}\n </template>\n <template v-else-if=\"selectedSchemeOptions.length > 1\">\n Multiple\n <span class=\"sr-only\">Auth Types Selected</span>\n </template>\n <template v-else>\n <span class=\"sr-only\">Select</span>\n Auth Type\n </template>\n <ScalarIconCaretDown\n class=\"size-3 shrink-0 transition-transform duration-100 group-aria-expanded/combobox-button:rotate-180\"\n weight=\"bold\" />\n </ScalarButton>\n <template #option=\"{ option, selected }\">\n <ScalarListboxCheckbox\n multiselect\n :selected=\"selected\" />\n <div class=\"min-w-0 flex-1 truncate\">\n {{ option.label }}\n </div>\n <ScalarIconButton\n v-if=\"option.isDeletable ?? !isReadOnly\"\n class=\"-m-0.5 shrink-0 p-0.5 opacity-0 group-hover/item:opacity-100\"\n :icon=\"ScalarIconTrash\"\n :label=\"`Delete ${option.label}`\"\n size=\"xs\"\n @click.stop=\"handleDeleteScheme(option)\" />\n </template>\n </ScalarComboboxMultiselect>\n </div>\n </template>\n\n <!-- Auth Table -->\n <RequestAuthDataTable\n :collection=\"collection\"\n :envVariables=\"envVariables\"\n :environment=\"environment\"\n :layout=\"layout\"\n :persistAuth=\"persistAuth\"\n :selectedSchemeOptions=\"selectedSchemeOptions\"\n :server=\"server\"\n :workspace=\"workspace\"\n @activeSchemes=\"emits('activeSchemes', $event)\"\n @authorized=\"emits('authorized')\">\n <template #oauth-actions>\n <slot name=\"oauth-actions\" />\n </template>\n </RequestAuthDataTable>\n\n <DeleteRequestAuthModal\n :scheme=\"selectedScheme\"\n :state=\"deleteSchemeModal\"\n @close=\"deleteSchemeModal.hide()\"\n @delete=\"unselectAuth(selectedScheme?.id)\" />\n </ViewLayoutCollapse>\n</template>\n<style scoped>\n.auth-combobox-position {\n margin-left: 120px;\n}\n.scroll-timeline-x {\n overflow: auto;\n scroll-timeline: --scroll-timeline x;\n /* Firefox supports */\n scroll-timeline: --scroll-timeline horizontal;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n.fade-left,\n.fade-right {\n position: sticky;\n content: '';\n height: 100%;\n animation-name: fadein;\n animation-duration: 1ms;\n animation-direction: reverse;\n animation-timeline: --scroll-timeline;\n min-height: 24px;\n pointer-events: none;\n}\n.fade-left {\n background: linear-gradient(\n -90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n min-width: 3px;\n left: -1px;\n animation-direction: normal;\n}\n.fade-right {\n background: linear-gradient(\n 90deg,\n color-mix(in srgb, var(--scalar-background-1), transparent 100%) 0%,\n color-mix(in srgb, var(--scalar-background-1), transparent 20%) 60%,\n var(--scalar-background-1) 100%\n );\n margin-left: -20px;\n min-width: 24px;\n right: -1px;\n top: 0;\n}\n@keyframes fadein {\n 0% {\n opacity: 0;\n }\n 15% {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":"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"}