@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.
- package/CHANGELOG.md +14 -0
- package/dist/{AddressBar-B4xnl66I.js → AddressBar-BOZGKSoz.js} +4 -4
- package/dist/{AddressBar-B4xnl66I.js.map → AddressBar-BOZGKSoz.js.map} +1 -1
- package/dist/{App-CvClwSlM.js → App-Ckirvnv1.js} +2 -2
- package/dist/{App-CvClwSlM.js.map → App-Ckirvnv1.js.map} +1 -1
- package/dist/{App-BVH4lIe8.js → App-DHBmpWJI.js} +4 -4
- package/dist/{App-BVH4lIe8.js.map → App-DHBmpWJI.js.map} +1 -1
- package/dist/{CodeInput-C-igR77V.js → CodeInput-BTN8cC5h.js} +2 -2
- package/dist/{CodeInput-C-igR77V.js.map → CodeInput-BTN8cC5h.js.map} +1 -1
- package/dist/{Collection-4MT9WmDD.js → Collection-BsAG7ms5.js} +2 -2
- package/dist/{Collection-4MT9WmDD.js.map → Collection-BsAG7ms5.js.map} +1 -1
- package/dist/{CollectionAuthentication-MHWQpw74.js → CollectionAuthentication-BMGhRnpo.js} +5 -5
- package/dist/{CollectionAuthentication-MHWQpw74.js.map → CollectionAuthentication-BMGhRnpo.js.map} +1 -1
- package/dist/{CollectionEnvironment-Dw35vIqo.js → CollectionEnvironment-BY9Gcnln.js} +4 -4
- package/dist/{CollectionEnvironment-Dw35vIqo.js.map → CollectionEnvironment-BY9Gcnln.js.map} +1 -1
- package/dist/{CollectionOverview-TUdDIu5f.js → CollectionOverview-C3GvN8GY.js} +3 -3
- package/dist/{CollectionOverview-TUdDIu5f.js.map → CollectionOverview-C3GvN8GY.js.map} +1 -1
- package/dist/{CollectionServers-BrjTCfDe.js → CollectionServers-DuOLysNB.js} +5 -5
- package/dist/{CollectionServers-BrjTCfDe.js.map → CollectionServers-DuOLysNB.js.map} +1 -1
- package/dist/{CollectionSettings-HVSlp2Gv.js → CollectionSettings-FtXNetOh.js} +2 -2
- package/dist/{CollectionSettings-HVSlp2Gv.js.map → CollectionSettings-FtXNetOh.js.map} +1 -1
- package/dist/{CommandPalette-CL8k4CoN.js → CommandPalette-BxoEK8TY.js} +2 -2
- package/dist/{CommandPalette-CL8k4CoN.js.map → CommandPalette-BxoEK8TY.js.map} +1 -1
- package/dist/{Cookies-DbOKTi1f.js → Cookies-BYTv1YIA.js} +8 -8
- package/dist/{Cookies-DbOKTi1f.js.map → Cookies-BYTv1YIA.js.map} +1 -1
- package/dist/{DataTableInput-yaU5g-kP.js → DataTableInput-RydMDjn2.js} +2 -2
- package/dist/{DataTableInput-yaU5g-kP.js.map → DataTableInput-RydMDjn2.js.map} +1 -1
- package/dist/{Environment-DJatRQIg.js → Environment-BIxG7DaO.js} +5 -5
- package/dist/{Environment-DJatRQIg.js.map → Environment-BIxG7DaO.js.map} +1 -1
- package/dist/{EnvironmentModal-DBEJ4Kzj.js → EnvironmentModal-C0lYytkh.js} +2 -2
- package/dist/{EnvironmentModal-DBEJ4Kzj.js.map → EnvironmentModal-C0lYytkh.js.map} +1 -1
- package/dist/{Form-CSKzyHGO.js → Form-KFcdRQp1.js} +3 -3
- package/dist/{Form-CSKzyHGO.js.map → Form-KFcdRQp1.js.map} +1 -1
- package/dist/{ImportCollection-DfX1UQ5u.js → ImportCollection-CGjySEzP.js} +2 -2
- package/dist/{ImportCollection-DfX1UQ5u.js.map → ImportCollection-CGjySEzP.js.map} +1 -1
- package/dist/{MainLayout-BEFMl1ud.js → MainLayout-BnLwst16.js} +3 -3
- package/dist/{MainLayout-BEFMl1ud.js.map → MainLayout-BnLwst16.js.map} +1 -1
- package/dist/{Modal-sQ9vH6MN.js → Modal-CTZ8UNds.js} +2 -2
- package/dist/{Modal-sQ9vH6MN.js.map → Modal-CTZ8UNds.js.map} +1 -1
- package/dist/{Request-gscRsGQ8.js → Request-d0RY0ZhC.js} +10 -10
- package/dist/{Request-gscRsGQ8.js.map → Request-d0RY0ZhC.js.map} +1 -1
- package/dist/{RequestAuth-BzBfIysT.js → RequestAuth-1cRH3DDn.js} +3 -3
- package/dist/{RequestAuth-BzBfIysT.js.map → RequestAuth-1cRH3DDn.js.map} +1 -1
- package/dist/{RequestRoot-3Bj8JZD-.js → RequestRoot-pW0yXesG.js} +7 -7
- package/dist/{RequestRoot-3Bj8JZD-.js.map → RequestRoot-pW0yXesG.js.map} +1 -1
- package/dist/{RequestSection-HhdJj9hW.js → RequestSection-D2BLvDTr.js} +4 -4
- package/dist/{RequestSection-HhdJj9hW.js.map → RequestSection-D2BLvDTr.js.map} +1 -1
- package/dist/{ResponseSection-DMJ0tw8E.js → ResponseSection-B_YF7l_E.js} +3 -3
- package/dist/{ResponseSection-DMJ0tw8E.js.map → ResponseSection-B_YF7l_E.js.map} +1 -1
- package/dist/{Server-DnA_BzPS.js → Server-CEKGIEfE.js} +2 -2
- package/dist/{Server-DnA_BzPS.js.map → Server-CEKGIEfE.js.map} +1 -1
- package/dist/{Settings-CYZzdJPO.js → Settings-BaPvhJ8Y.js} +2 -2
- package/dist/{Settings-CYZzdJPO.js.map → Settings-BaPvhJ8Y.js.map} +1 -1
- package/dist/{Sidebar-C6AdX6-N.js → Sidebar-CRxdl38Y.js} +2 -2
- package/dist/{Sidebar-C6AdX6-N.js.map → Sidebar-CRxdl38Y.js.map} +1 -1
- package/dist/components/AddressBar/AddressBar.vue.d.ts +1 -1
- package/dist/components/AddressBar/index.js +3 -3
- package/dist/components/CodeInput/CodeInput.vue.d.ts +1 -1
- package/dist/components/CodeInput/codeVariableWidget.d.ts +1 -1
- package/dist/components/CodeInput/index.js +1 -1
- package/dist/components/CommandPalette/index.js +1 -1
- package/dist/components/DataTable/DataTableInput.vue.d.ts +2 -2
- package/dist/components/DataTable/index.js +2 -2
- package/dist/components/Form/LabelInput.vue.d.ts +1 -1
- package/dist/components/ImportCollection/index.js +1 -1
- package/dist/components/ImportCollection/utils/import-collection.d.ts +1 -1
- package/dist/components/ImportCollection/utils/workspace-store-is-empty.d.ts +1 -1
- package/dist/components/Server/ServerVariablesForm.vue.d.ts +1 -1
- package/dist/components/Server/index.js +1 -1
- package/dist/components/Sidebar/index.js +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.js +4 -4
- package/dist/{components-CSxJTn6F.js → components-B0BwUDFw.js} +2 -2
- package/dist/{components-CSxJTn6F.js.map → components-B0BwUDFw.js.map} +1 -1
- package/dist/get-resolved-url-SybDPV0U.js +85 -0
- package/dist/get-resolved-url-SybDPV0U.js.map +1 -0
- package/dist/{get-server-url-o3On8CEr.js → get-server-url-UVN-dx79.js} +1 -1
- package/dist/{get-server-url-o3On8CEr.js.map → get-server-url-UVN-dx79.js.map} +1 -1
- package/dist/hooks/useSidebar.d.ts +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +5 -5
- package/dist/layouts/App/create-api-client-app.d.ts +9 -9
- package/dist/layouts/App/index.js +3 -3
- package/dist/layouts/Modal/create-api-client-modal.d.ts +1 -1
- package/dist/layouts/Modal/index.d.ts +1 -1
- package/dist/layouts/Modal/index.js +1 -1
- package/dist/layouts/Web/create-api-client-web.d.ts +9 -9
- package/dist/layouts/Web/index.js +4 -4
- package/dist/libs/create-client.d.ts +3 -3
- package/dist/libs/environment-parser.d.ts +1 -1
- package/dist/libs/get-request-uid-by-path-method.d.ts +1 -1
- package/dist/libs/hot-keys.d.ts +1 -1
- package/dist/libs/index.d.ts +1 -1
- package/dist/libs/index.js +1 -1
- package/dist/libs/local-storage.d.ts +1 -1
- package/dist/libs/send-request/create-request-operation.d.ts +3 -3
- package/dist/{operation-block-BnMIKAOh.js → operation-block-B1B3lJPx.js} +67 -17
- package/dist/operation-block-B1B3lJPx.js.map +1 -0
- package/dist/{operation-code-sample-ZUTueV3v.js → operation-code-sample-DOzAPxLQ.js} +22 -10
- package/dist/operation-code-sample-DOzAPxLQ.js.map +1 -0
- package/dist/plugins/hooks/usePluginManager.d.ts +1 -1
- package/dist/{request-block-DwsGy64Q.js → request-block-C1kLLMEd.js} +4 -4
- package/dist/{request-block-DwsGy64Q.js.map → request-block-C1kLLMEd.js.map} +1 -1
- package/dist/{scalar-address-bar-block--Vs6IBU1.js → scalar-address-bar-block-BbysOhkE.js} +2 -2
- package/dist/{scalar-address-bar-block--Vs6IBU1.js.map → scalar-address-bar-block-BbysOhkE.js.map} +1 -1
- package/dist/{scalar-auth-selector-block-DI3DLag9.js → scalar-auth-selector-block-Bs79QOMA.js} +12 -9
- package/dist/scalar-auth-selector-block-Bs79QOMA.js.map +1 -0
- package/dist/store/collections.d.ts +1 -1
- package/dist/store/environment.d.ts +1 -1
- package/dist/store/events.d.ts +8 -8
- package/dist/store/import-spec.d.ts +2 -2
- package/dist/store/index.js +1 -1
- package/dist/store/request-example.d.ts +1 -1
- package/dist/store/requests.d.ts +1 -1
- package/dist/store/security-schemes.d.ts +1 -1
- package/dist/store/servers.d.ts +1 -1
- package/dist/store/store.d.ts +7 -7
- package/dist/store/tags.d.ts +1 -1
- package/dist/store/workspace.d.ts +1 -1
- package/dist/{store-DpSUVhjp.js → store-DnlAQK5d.js} +15 -15
- package/dist/{store-DpSUVhjp.js.map → store-DnlAQK5d.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts +3 -3
- package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts.map +1 -1
- package/dist/v2/blocks/operation-block/components/Header.vue.d.ts +2 -2
- package/dist/v2/blocks/operation-block/helpers/apply-allow-reserved-to-url.d.ts +6 -0
- package/dist/v2/blocks/operation-block/helpers/apply-allow-reserved-to-url.d.ts.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/build-request-body.d.ts.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/build-request-parameters.d.ts +1 -0
- package/dist/v2/blocks/operation-block/helpers/build-request-parameters.d.ts.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/build-request-security.d.ts +2 -2
- package/dist/v2/blocks/operation-block/helpers/build-request.d.ts +2 -2
- package/dist/v2/blocks/operation-block/helpers/build-request.d.ts.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/get-resolved-url.d.ts +2 -1
- package/dist/v2/blocks/operation-block/helpers/get-resolved-url.d.ts.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.d.ts +1 -1
- package/dist/v2/blocks/operation-block/helpers/send-request.d.ts +1 -1
- package/dist/v2/blocks/operation-block/index.js +11 -11
- package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.d.ts +2 -2
- package/dist/v2/blocks/operation-code-sample/helpers/find-client.d.ts +1 -1
- package/dist/v2/blocks/operation-code-sample/helpers/generate-client-options.d.ts +1 -1
- package/dist/v2/blocks/operation-code-sample/helpers/generate-code-snippet.d.ts +1 -1
- package/dist/v2/blocks/operation-code-sample/helpers/get-clients.d.ts +2 -2
- package/dist/v2/blocks/operation-code-sample/helpers/get-secrets.d.ts +1 -1
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/operation-to-har.d.ts +1 -1
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-body.d.ts.map +1 -1
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-security-schemes.d.ts +1 -1
- package/dist/v2/blocks/operation-code-sample/index.js +1 -1
- package/dist/v2/blocks/request-block/RequestBlock.vue.d.ts +4 -4
- package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.d.ts +1 -1
- package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts +1 -1
- package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.d.ts +1 -1
- package/dist/v2/blocks/request-block/helpers/get-default-headers.d.ts.map +1 -1
- package/dist/v2/blocks/request-block/helpers/get-form-body-rows.d.ts +1 -1
- package/dist/v2/blocks/request-block/index.js +5 -5
- package/dist/v2/blocks/response-block/ResponseBlock.vue.d.ts +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.d.ts +1 -1
- package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.d.ts +1 -1
- package/dist/v2/blocks/response-block/index.js +2 -2
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/index.js +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.d.ts +3 -3
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.d.ts +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.d.ts +2 -2
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.d.ts +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/extract-security-scheme-secrets.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-openid-connect-discovery.d.ts +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.d.ts +2 -2
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/index.js +3 -3
- package/dist/v2/components/code-input/CodeInput.vue.d.ts +1 -1
- package/dist/v2/components/data-table/DataTableInput.vue.d.ts +1 -1
- package/dist/v2/components/data-table/DataTableInputSelect.vue.d.ts +1 -1
- package/dist/v2/components/server/ServerDropdown.vue.d.ts +1 -1
- package/dist/v2/components/sidebar/Sidebar.vue.d.ts +1 -1
- package/dist/v2/constants.d.ts +3 -0
- package/dist/v2/constants.d.ts.map +1 -0
- package/dist/v2/features/app/App.vue.d.ts +3 -3
- package/dist/v2/features/app/components/AppSidebar.vue.d.ts +1 -1
- package/dist/v2/features/app/components/index.js +4 -4
- package/dist/v2/features/app/helpers/create-api-client-app.d.ts +3 -3
- package/dist/v2/features/app/helpers/get-route-param.d.ts +1 -1
- package/dist/v2/features/app/helpers/routes.d.ts +3 -3
- package/dist/v2/features/app/index.d.ts +5 -5
- package/dist/v2/features/app/index.js +14 -14
- package/dist/v2/features/app/index.js.map +1 -1
- package/dist/v2/features/collection/DocumentCollection.vue.d.ts +1 -1
- package/dist/v2/features/collection/OperationCollection.vue.d.ts +1 -1
- package/dist/v2/features/collection/WorkspaceCollection.vue.d.ts +1 -1
- package/dist/v2/features/collection/components/Authentication.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Authentication.vue.d.ts.map +1 -1
- package/dist/v2/features/collection/components/Cookies.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Editor/Editor.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Environment.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Overview.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Servers.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Settings.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Tabs.vue.d.ts +1 -1
- package/dist/v2/features/command-palette/hooks/use-command-palette-state.d.ts +45 -10
- package/dist/v2/features/command-palette/hooks/use-command-palette-state.d.ts.map +1 -1
- package/dist/v2/features/editor/helpers/json/create-json-model.d.ts +1 -1
- package/dist/v2/features/editor/helpers/yaml/create-yaml-model.d.ts +1 -1
- package/dist/v2/features/editor/helpers/yaml/get-yaml-node-range-from-path.d.ts +1 -1
- package/dist/v2/features/editor/hooks/use-editor.d.ts +1 -1
- package/dist/v2/features/editor/hooks/use-json-pointer-link-support.d.ts +1 -1
- package/dist/v2/features/modal/Modal.vue.d.ts +1 -1
- package/dist/v2/features/modal/helpers/create-api-client-modal.d.ts +2 -2
- package/dist/v2/features/modal/hooks/use-modal-sidebar.d.ts +1 -1
- package/dist/v2/features/modal/index.js +10 -10
- package/dist/v2/features/modal/modal-events.d.ts +1 -1
- package/dist/v2/features/operation/Operation.vue.d.ts +2 -2
- package/dist/v2/features/operation/Operation.vue.d.ts.map +1 -1
- package/dist/v2/features/operation/helpers/get-selected-security.d.ts +6 -1
- package/dist/v2/features/operation/helpers/get-selected-security.d.ts.map +1 -1
- package/dist/v2/features/operation/index.js +10 -10
- package/dist/v2/features/search/helpers/create-fuse-instance.d.ts +1 -1
- package/dist/v2/features/search/helpers/create-search-index.d.ts +1 -1
- package/dist/v2/helpers/get-active-proxy-url.d.ts +1 -1
- package/dist/v2/helpers/get-tab-details.d.ts +1 -1
- package/dist/v2/helpers/handle-hotkeys.d.ts +1 -1
- package/dist/v2/hooks/use-global-hot-keys.d.ts +1 -1
- package/dist/views/Collection/components/EnvironmentForm.vue.d.ts +1 -1
- package/dist/views/Collection/components/MarkdownInput.vue.d.ts +1 -1
- package/dist/views/Components/CodeSnippet/CodeSnippet.vue.d.ts +1 -1
- package/dist/views/Components/CodeSnippet/helpers/get-har-request.d.ts +1 -1
- package/dist/views/Components/CodeSnippet/helpers/get-snippet.d.ts +1 -1
- package/dist/views/Environment/EnvironmentVariableDropdown.vue.d.ts +1 -1
- package/dist/views/Environment/handle-drag.d.ts +1 -1
- package/dist/views/Request/Request.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/OAuth2.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/OAuthScopesInput.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuth.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue.d.ts +2 -2
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/index.js +3 -3
- package/dist/views/Request/RequestSection/RequestBody.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestCodeExample.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestParams.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestPathParams.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestSection.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestTable.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/helpers/update-scheme.d.ts +1 -1
- package/dist/views/Request/RequestSection/index.js +4 -4
- package/dist/views/Request/RequestSidebarItem.vue.d.ts +1 -1
- package/dist/views/Request/RequestSidebarItemMenu.vue.d.ts +3 -3
- package/dist/views/Request/RequestSubpageHeader.vue.d.ts +1 -1
- package/dist/views/Request/ResponseSection/ResponseBodyPreview.vue.d.ts +1 -1
- package/dist/views/Request/ResponseSection/ResponseSection.vue.d.ts +1 -1
- package/dist/views/Request/ResponseSection/index.js +3 -3
- package/dist/views/Request/components/index.js +1 -1
- package/dist/views/Request/handle-drag.d.ts +2 -2
- package/dist/views/Request/libs/auth.d.ts +1 -1
- package/dist/views/Request/libs/oauth2.d.ts +1 -1
- package/dist/views/Request/libs/watch-mode.d.ts +2 -2
- package/package.json +12 -12
- package/dist/get-resolved-url-BUCwrBzc.js +0 -30
- package/dist/get-resolved-url-BUCwrBzc.js.map +0 -1
- package/dist/operation-block-BnMIKAOh.js.map +0 -1
- package/dist/operation-code-sample-ZUTueV3v.js.map +0 -1
- package/dist/scalar-auth-selector-block-DI3DLag9.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { n as ROUTES } from "./CommandPalette-
|
|
2
|
-
import { D as routes, O as saveActiveWorkspace, _ as createApiClient, d as handleHotKeyDown, l as DEFAULT_HOTKEYS, r as useWorkspace, w as useActiveEntities } from "./store-
|
|
1
|
+
import { n as ROUTES } from "./CommandPalette-BxoEK8TY.js";
|
|
2
|
+
import { D as routes, O as saveActiveWorkspace, _ as createApiClient, d as handleHotKeyDown, l as DEFAULT_HOTKEYS, r as useWorkspace, w as useActiveEntities } from "./store-DnlAQK5d.js";
|
|
3
3
|
import { r as useSidebar } from "./useSidebar-DLTwHDI-.js";
|
|
4
4
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BmmBcIzD.js";
|
|
5
|
-
import { t as MainLayout_default } from "./MainLayout-
|
|
5
|
+
import { t as MainLayout_default } from "./MainLayout-BnLwst16.js";
|
|
6
6
|
import { t as analytics } from "./analytics-BZimCWcw.js";
|
|
7
7
|
import { Fragment, KeepAlive, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, onBeforeMount, onBeforeUnmount, onMounted, openBlock, reactive, ref, renderList, resolveDynamicComponent, toDisplayString, unref, watch, withCtx } from "vue";
|
|
8
8
|
import { ScalarContextMenu, ScalarDropdownButton, ScalarDropdownDivider, ScalarDropdownMenu, ScalarFloating, ScalarHotkey, ScalarIcon, ScalarTeleportRoot, ScalarTooltip, addScalarClassesToHeadless } from "@scalar/components";
|
|
@@ -530,4 +530,4 @@ var createApiClientApp = async (el, configuration = {}, mountOnInitialize = true
|
|
|
530
530
|
//#endregion
|
|
531
531
|
export { ApiClientApp_default as n, createApiClientApp as t };
|
|
532
532
|
|
|
533
|
-
//# sourceMappingURL=App-
|
|
533
|
+
//# sourceMappingURL=App-DHBmpWJI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App-BVH4lIe8.js","names":["$emit"],"sources":["../src/components/TopNav/TopNavItem.vue","../src/components/TopNav/TopNavItem.vue","../src/components/TopNav/TopNav.vue","../src/components/TopNav/TopNav.vue","../src/layouts/App/hotkeys.ts","../src/layouts/App/ApiClientApp.vue","../src/layouts/App/ApiClientApp.vue","../src/layouts/App/create-api-client-app.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ScalarContextMenu,\n ScalarDropdownButton,\n ScalarDropdownDivider,\n ScalarDropdownMenu,\n ScalarFloating,\n ScalarHotkey,\n ScalarIcon,\n ScalarTooltip,\n type Icon,\n} from '@scalar/components'\nimport { isMacOS } from '@scalar/helpers/general/is-mac-os'\nimport { LibraryIcon } from '@scalar/icons/library'\n\ndefineProps<{\n hotkey?: string\n active: boolean\n label: string\n icon: Icon\n isCollection?: boolean\n}>()\n\ndefineEmits<{\n (e: 'click'): void\n (e: 'close'): void\n (e: 'newTab'): void\n (e: 'copyUrl'): void\n (e: 'closeOtherTabs'): void\n}>()\n</script>\n\n<template>\n <ScalarContextMenu triggerClass=\"overflow-hidden w-full\">\n <template #trigger>\n <ScalarTooltip\n :content=\"`${isMacOS() ? '⌘' : '^'} ${hotkey}`\"\n placement=\"bottom\">\n <div\n class=\"nav-item app-no-drag-region\"\n :class=\"{ 'nav-item__active': active }\"\n @click=\"$emit('click')\">\n <div\n class=\"nav-item-icon-copy flex flex-1 items-center justify-center gap-1.5\">\n <LibraryIcon\n v-if=\"isCollection\"\n class=\"size-3.5 min-w-3.5 stroke-2\"\n :src=\"icon\" />\n <ScalarIcon\n v-else\n :icon=\"icon\"\n size=\"xs\"\n thickness=\"2.5\" />\n <span class=\"custom-scroll nav-item-copy text-sm\">{{ label }}</span>\n </div>\n <button\n class=\"nav-item-close\"\n type=\"button\"\n @click=\"$emit('close')\">\n <ScalarIcon\n icon=\"Close\"\n thickness=\"1.75\" />\n </button>\n </div>\n </ScalarTooltip>\n </template>\n <template #content>\n <ScalarFloating placement=\"right-start\">\n <template #floating>\n <ScalarDropdownMenu class=\"scalar-app scalar-client\">\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('newTab')\">\n <ScalarIcon\n icon=\"AddTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n New Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"T\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('copyUrl')\">\n <ScalarIcon\n icon=\"Link\"\n size=\"sm\"\n thickness=\"1.5\" />\n Copy URL\n </ScalarDropdownButton>\n <ScalarDropdownDivider />\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('close')\">\n <ScalarIcon\n icon=\"CloseTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n Close Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"W\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('closeOtherTabs')\">\n <ScalarIcon\n icon=\"CloseTabs\"\n size=\"sm\"\n thickness=\"1.5\" />\n Close Other Tabs\n </ScalarDropdownButton>\n </ScalarDropdownMenu>\n </template>\n </ScalarFloating>\n </template>\n </ScalarContextMenu>\n</template>\n\n<style scoped>\n.nav-item {\n padding: 0 1rem;\n cursor: pointer;\n flex: 1;\n justify-content: center;\n align-items: center;\n display: flex;\n border-radius: var(--scalar-radius-lg);\n background: var(--scalar-background-3);\n border: var(--scalar-border-width) solid var(--scalar-background-2);\n color: var(--scalar-color-3);\n padding: 4.5px;\n min-width: 0;\n overflow: hidden;\n position: relative;\n}\n.dark-mode .nav-item {\n background: color-mix(in srgb, var(--scalar-background-2), transparent);\n}\n.nav-item-icon-copy {\n max-width: 100%;\n white-space: nowrap;\n overflow: hidden;\n mask-image: linear-gradient(\n to left,\n transparent 0,\n var(--scalar-background-2) 20px\n );\n}\n.nav-item:hover .nav-item-icon-copy {\n mask-image: linear-gradient(\n to left,\n transparent 20px,\n var(--scalar-background-2) 40px\n );\n}\n.nav-item-copy {\n max-width: calc(100% - 20px);\n}\n.nav-item:hover {\n color: var(--scalar-color-1);\n}\n.nav-item__active {\n background-color: var(--scalar-background-1);\n color: var(--scalar-color-1);\n border-color: var(--scalar-border-color);\n}\n.dark-mode .nav-item__active {\n background-color: var(--scalar-background-2);\n}\n.nav-item-close {\n position: absolute;\n right: 3px;\n padding: 2px;\n border-radius: var(--scalar-radius);\n background: transparent;\n max-width: 20px;\n stroke-width: 1.5px;\n color: var(--scalar-color-3);\n margin-left: -20px;\n opacity: 0;\n}\n.nav-item:hover .nav-item-close {\n opacity: 1;\n}\n.nav-item-close:hover {\n background-color: var(--scalar-background-4);\n}\n.nav-item__active .nav-item-close:hover {\n background-color: var(--scalar-background-2);\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarContextMenu,\n ScalarDropdownButton,\n ScalarDropdownDivider,\n ScalarDropdownMenu,\n ScalarFloating,\n ScalarHotkey,\n ScalarIcon,\n ScalarTooltip,\n type Icon,\n} from '@scalar/components'\nimport { isMacOS } from '@scalar/helpers/general/is-mac-os'\nimport { LibraryIcon } from '@scalar/icons/library'\n\ndefineProps<{\n hotkey?: string\n active: boolean\n label: string\n icon: Icon\n isCollection?: boolean\n}>()\n\ndefineEmits<{\n (e: 'click'): void\n (e: 'close'): void\n (e: 'newTab'): void\n (e: 'copyUrl'): void\n (e: 'closeOtherTabs'): void\n}>()\n</script>\n\n<template>\n <ScalarContextMenu triggerClass=\"overflow-hidden w-full\">\n <template #trigger>\n <ScalarTooltip\n :content=\"`${isMacOS() ? '⌘' : '^'} ${hotkey}`\"\n placement=\"bottom\">\n <div\n class=\"nav-item app-no-drag-region\"\n :class=\"{ 'nav-item__active': active }\"\n @click=\"$emit('click')\">\n <div\n class=\"nav-item-icon-copy flex flex-1 items-center justify-center gap-1.5\">\n <LibraryIcon\n v-if=\"isCollection\"\n class=\"size-3.5 min-w-3.5 stroke-2\"\n :src=\"icon\" />\n <ScalarIcon\n v-else\n :icon=\"icon\"\n size=\"xs\"\n thickness=\"2.5\" />\n <span class=\"custom-scroll nav-item-copy text-sm\">{{ label }}</span>\n </div>\n <button\n class=\"nav-item-close\"\n type=\"button\"\n @click=\"$emit('close')\">\n <ScalarIcon\n icon=\"Close\"\n thickness=\"1.75\" />\n </button>\n </div>\n </ScalarTooltip>\n </template>\n <template #content>\n <ScalarFloating placement=\"right-start\">\n <template #floating>\n <ScalarDropdownMenu class=\"scalar-app scalar-client\">\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('newTab')\">\n <ScalarIcon\n icon=\"AddTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n New Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"T\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('copyUrl')\">\n <ScalarIcon\n icon=\"Link\"\n size=\"sm\"\n thickness=\"1.5\" />\n Copy URL\n </ScalarDropdownButton>\n <ScalarDropdownDivider />\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('close')\">\n <ScalarIcon\n icon=\"CloseTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n Close Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"W\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('closeOtherTabs')\">\n <ScalarIcon\n icon=\"CloseTabs\"\n size=\"sm\"\n thickness=\"1.5\" />\n Close Other Tabs\n </ScalarDropdownButton>\n </ScalarDropdownMenu>\n </template>\n </ScalarFloating>\n </template>\n </ScalarContextMenu>\n</template>\n\n<style scoped>\n.nav-item {\n padding: 0 1rem;\n cursor: pointer;\n flex: 1;\n justify-content: center;\n align-items: center;\n display: flex;\n border-radius: var(--scalar-radius-lg);\n background: var(--scalar-background-3);\n border: var(--scalar-border-width) solid var(--scalar-background-2);\n color: var(--scalar-color-3);\n padding: 4.5px;\n min-width: 0;\n overflow: hidden;\n position: relative;\n}\n.dark-mode .nav-item {\n background: color-mix(in srgb, var(--scalar-background-2), transparent);\n}\n.nav-item-icon-copy {\n max-width: 100%;\n white-space: nowrap;\n overflow: hidden;\n mask-image: linear-gradient(\n to left,\n transparent 0,\n var(--scalar-background-2) 20px\n );\n}\n.nav-item:hover .nav-item-icon-copy {\n mask-image: linear-gradient(\n to left,\n transparent 20px,\n var(--scalar-background-2) 40px\n );\n}\n.nav-item-copy {\n max-width: calc(100% - 20px);\n}\n.nav-item:hover {\n color: var(--scalar-color-1);\n}\n.nav-item__active {\n background-color: var(--scalar-background-1);\n color: var(--scalar-color-1);\n border-color: var(--scalar-border-color);\n}\n.dark-mode .nav-item__active {\n background-color: var(--scalar-background-2);\n}\n.nav-item-close {\n position: absolute;\n right: 3px;\n padding: 2px;\n border-radius: var(--scalar-radius);\n background: transparent;\n max-width: 20px;\n stroke-width: 1.5px;\n color: var(--scalar-color-3);\n margin-left: -20px;\n opacity: 0;\n}\n.nav-item:hover .nav-item-close {\n opacity: 1;\n}\n.nav-item-close:hover {\n background-color: var(--scalar-background-4);\n}\n.nav-item__active .nav-item-close:hover {\n background-color: var(--scalar-background-2);\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarContextMenu,\n ScalarDropdownButton,\n ScalarDropdownMenu,\n ScalarFloating,\n ScalarHotkey,\n ScalarIcon,\n type Icon,\n} from '@scalar/components'\nimport { LibraryIcon } from '@scalar/icons/library'\nimport type { Collection } from '@scalar/oas-utils/entities/spec'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { computed, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport { ROUTES } from '@/constants'\nimport type { HotKeyEvent } from '@/libs'\nimport { useWorkspace } from '@/store'\nimport { useActiveEntities } from '@/store/active-entities'\n\nimport TopNavItem from './TopNavItem.vue'\n\nconst props = defineProps<{\n openNewTab: { name: string; uid: string } | null\n}>()\nconst { activeRequest, activeCollection } = useActiveEntities()\nconst router = useRouter()\nconst { events } = useWorkspace()\nconst { copyToClipboard } = useClipboard()\n\n/** Nav Items list */\nconst topNavItems = reactive([\n {\n label: '',\n path: '',\n icon: 'Add' as Icon | Collection['x-scalar-icon'],\n isCollection: false,\n },\n])\nconst activeNavItemIdx = ref(0)\nconst activeNavItemIdxValue = computed(() => activeNavItemIdx.value)\n\n/**\n * Check if the current route is a collection\n */\nconst isCollection = computed(() => {\n return router.currentRoute.value.name?.toString().startsWith('collection.')\n})\n\n/**\n * Logic to handle adding a nav item\n * based on the current route\n */\nfunction handleNavLabelAdd() {\n // Collection\n if (isCollection.value) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeCollection.value?.info?.title || 'Untitled Collection',\n path: router.currentRoute.value.path,\n icon: activeCollection.value?.['x-scalar-icon'] || 'Collection',\n isCollection: true,\n }\n\n return\n }\n\n // Request\n if (router.currentRoute.value.name?.toString().startsWith('request')) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeRequest.value?.summary || '',\n path: router.currentRoute.value.path,\n icon: 'ExternalLink',\n isCollection: false,\n }\n\n return\n }\n\n // Something from the sidebar\n const activeRoute = ROUTES.find((route) => {\n return route.to.name.startsWith(\n router.currentRoute.value.name?.toString() ?? '',\n )\n })\n\n if (activeRoute) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeRoute.displayName,\n path: router.currentRoute.value.path,\n icon: activeRoute.icon,\n isCollection: false,\n }\n\n return\n }\n}\n\nfunction handleNavRoute() {\n const path = topNavItems[activeNavItemIdx.value]?.path\n if (path) {\n router.push(path)\n }\n}\n\n/**\n * adding a nav item sets the new index and nav item\n * based on the route\n */\nfunction addNavItem() {\n topNavItems.push({\n label: '',\n path: '',\n icon: 'Add' as Icon,\n isCollection: false,\n })\n activeNavItemIdx.value = topNavItems.length - 1\n handleNavLabelAdd()\n}\n\nfunction setNavItemIdx(idx: number) {\n activeNavItemIdx.value = idx\n handleNavRoute()\n}\n\n// when the route changes we need update the active nav item\nwatch(\n () => router.currentRoute.value.path,\n () => {\n handleNavLabelAdd()\n },\n { immediate: true },\n)\n\nfunction removeNavItem(idx: number) {\n topNavItems.splice(idx, 1)\n activeNavItemIdx.value = Math.min(\n activeNavItemIdx.value,\n topNavItems.length - 1,\n )\n handleNavRoute()\n}\n\nconst copyUrl = async (idx: number) => {\n if (!topNavItems[idx]?.path) {\n return\n }\n\n const fullUrl = new URL(window.location.href)\n fullUrl.pathname = topNavItems[idx].path\n await copyToClipboard(fullUrl.toString())\n}\n\nconst closeOtherTabs = (idx: number) => {\n topNavItems.splice(0, idx)\n topNavItems.splice(1)\n activeNavItemIdx.value = 0\n handleNavRoute()\n}\n\n/** Handle hotkeys */\nconst handleHotKey = (event?: HotKeyEvent) => {\n if (!event) {\n return\n }\n if (event.addTopNav) {\n addNavItem()\n }\n if (event.closeTopNav) {\n removeNavItem(activeNavItemIdx.value)\n }\n if (event.navigateTopNavLeft) {\n setNavItemIdx(Math.max(activeNavItemIdx.value - 1, 0))\n }\n if (event.navigateTopNavRight) {\n setNavItemIdx(Math.min(activeNavItemIdx.value + 1, topNavItems.length - 1))\n }\n if (event.jumpToTab) {\n const tabIndex = Number(event.jumpToTab.key) - 1\n if (tabIndex >= 0 && tabIndex < topNavItems.length) {\n setNavItemIdx(tabIndex)\n }\n }\n if (event.jumpToLastTab) {\n setNavItemIdx(topNavItems.length - 1)\n }\n}\n\nconst addTopNavTab = (item: { name: string; uid: string }) => {\n topNavItems.push({\n label: item.name,\n path: item.uid,\n icon: 'ExternalLink',\n isCollection: false,\n })\n}\n\nwatch(\n () => props.openNewTab,\n (openNewTab) => {\n if (openNewTab) {\n addTopNavTab(openNewTab)\n }\n },\n { immediate: true },\n)\n\nonMounted(() => events.hotKeys.on(handleHotKey))\nonBeforeUnmount(() => events.hotKeys.off(handleHotKey))\n</script>\n<template>\n <nav class=\"mac:pl-[72px] t-app__top-nav relative flex h-10 pl-2\">\n <!-- Add a draggable overlay -->\n <div class=\"app-drag-region absolute inset-0\" />\n <div\n class=\"relative flex h-10 flex-1 items-center gap-1.5 overflow-hidden pr-2.5 text-base font-medium\">\n <template v-if=\"topNavItems.length === 1\">\n <div class=\"h-full w-full overflow-hidden\">\n <ScalarContextMenu\n triggerClass=\"flex custom-scroll gap-1.5 h-full items-center justify-center w-full whitespace-nowrap\">\n <template #trigger>\n <LibraryIcon\n v-if=\"isCollection\"\n class=\"size-3.5 min-w-3.5 stroke-2\"\n :src=\"activeCollection?.['x-scalar-icon'] || 'Collection'\" />\n <ScalarIcon\n v-else-if=\"topNavItems[0]?.icon\"\n :icon=\"topNavItems[0]?.icon as Icon\"\n size=\"xs\"\n thickness=\"2.5\" />\n <span>{{ topNavItems[0]?.label }}</span>\n </template>\n <template #content>\n <ScalarFloating placement=\"right-start\">\n <template #floating>\n <ScalarDropdownMenu class=\"scalar-app scalar-client\">\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"addNavItem\">\n <ScalarIcon\n icon=\"AddTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n New Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"T\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"copyUrl(activeNavItemIdxValue)\">\n <ScalarIcon\n icon=\"Link\"\n size=\"sm\"\n thickness=\"1.5\" />\n Copy URL\n </ScalarDropdownButton>\n </ScalarDropdownMenu>\n </template>\n </ScalarFloating>\n </template>\n </ScalarContextMenu>\n </div>\n </template>\n <template v-else>\n <TopNavItem\n v-for=\"(topNavItem, index) in topNavItems\"\n :key=\"topNavItem.path\"\n :active=\"index === activeNavItemIdxValue\"\n :hotkey=\"(index + 1).toString()\"\n :icon=\"\n topNavItem.isCollection\n ? ((activeCollection?.['x-scalar-icon'] || 'Collection') as Icon)\n : (topNavItem.icon as Icon)\n \"\n :isCollection=\"topNavItem.isCollection || false\"\n :label=\"topNavItem.label\"\n @click=\"setNavItemIdx(index)\"\n @close=\"removeNavItem(index)\"\n @closeOtherTabs=\"closeOtherTabs(index)\"\n @copyUrl=\"copyUrl(index)\"\n @newTab=\"addNavItem\" />\n </template>\n <button\n class=\"text-c-3 hover:bg-b-3 app-no-drag-region rounded p-1.5\"\n type=\"button\"\n @click=\"addNavItem\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\"\n thickness=\"2.5\" />\n </button>\n </div>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport {\n ScalarContextMenu,\n ScalarDropdownButton,\n ScalarDropdownMenu,\n ScalarFloating,\n ScalarHotkey,\n ScalarIcon,\n type Icon,\n} from '@scalar/components'\nimport { LibraryIcon } from '@scalar/icons/library'\nimport type { Collection } from '@scalar/oas-utils/entities/spec'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { computed, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport { ROUTES } from '@/constants'\nimport type { HotKeyEvent } from '@/libs'\nimport { useWorkspace } from '@/store'\nimport { useActiveEntities } from '@/store/active-entities'\n\nimport TopNavItem from './TopNavItem.vue'\n\nconst props = defineProps<{\n openNewTab: { name: string; uid: string } | null\n}>()\nconst { activeRequest, activeCollection } = useActiveEntities()\nconst router = useRouter()\nconst { events } = useWorkspace()\nconst { copyToClipboard } = useClipboard()\n\n/** Nav Items list */\nconst topNavItems = reactive([\n {\n label: '',\n path: '',\n icon: 'Add' as Icon | Collection['x-scalar-icon'],\n isCollection: false,\n },\n])\nconst activeNavItemIdx = ref(0)\nconst activeNavItemIdxValue = computed(() => activeNavItemIdx.value)\n\n/**\n * Check if the current route is a collection\n */\nconst isCollection = computed(() => {\n return router.currentRoute.value.name?.toString().startsWith('collection.')\n})\n\n/**\n * Logic to handle adding a nav item\n * based on the current route\n */\nfunction handleNavLabelAdd() {\n // Collection\n if (isCollection.value) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeCollection.value?.info?.title || 'Untitled Collection',\n path: router.currentRoute.value.path,\n icon: activeCollection.value?.['x-scalar-icon'] || 'Collection',\n isCollection: true,\n }\n\n return\n }\n\n // Request\n if (router.currentRoute.value.name?.toString().startsWith('request')) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeRequest.value?.summary || '',\n path: router.currentRoute.value.path,\n icon: 'ExternalLink',\n isCollection: false,\n }\n\n return\n }\n\n // Something from the sidebar\n const activeRoute = ROUTES.find((route) => {\n return route.to.name.startsWith(\n router.currentRoute.value.name?.toString() ?? '',\n )\n })\n\n if (activeRoute) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeRoute.displayName,\n path: router.currentRoute.value.path,\n icon: activeRoute.icon,\n isCollection: false,\n }\n\n return\n }\n}\n\nfunction handleNavRoute() {\n const path = topNavItems[activeNavItemIdx.value]?.path\n if (path) {\n router.push(path)\n }\n}\n\n/**\n * adding a nav item sets the new index and nav item\n * based on the route\n */\nfunction addNavItem() {\n topNavItems.push({\n label: '',\n path: '',\n icon: 'Add' as Icon,\n isCollection: false,\n })\n activeNavItemIdx.value = topNavItems.length - 1\n handleNavLabelAdd()\n}\n\nfunction setNavItemIdx(idx: number) {\n activeNavItemIdx.value = idx\n handleNavRoute()\n}\n\n// when the route changes we need update the active nav item\nwatch(\n () => router.currentRoute.value.path,\n () => {\n handleNavLabelAdd()\n },\n { immediate: true },\n)\n\nfunction removeNavItem(idx: number) {\n topNavItems.splice(idx, 1)\n activeNavItemIdx.value = Math.min(\n activeNavItemIdx.value,\n topNavItems.length - 1,\n )\n handleNavRoute()\n}\n\nconst copyUrl = async (idx: number) => {\n if (!topNavItems[idx]?.path) {\n return\n }\n\n const fullUrl = new URL(window.location.href)\n fullUrl.pathname = topNavItems[idx].path\n await copyToClipboard(fullUrl.toString())\n}\n\nconst closeOtherTabs = (idx: number) => {\n topNavItems.splice(0, idx)\n topNavItems.splice(1)\n activeNavItemIdx.value = 0\n handleNavRoute()\n}\n\n/** Handle hotkeys */\nconst handleHotKey = (event?: HotKeyEvent) => {\n if (!event) {\n return\n }\n if (event.addTopNav) {\n addNavItem()\n }\n if (event.closeTopNav) {\n removeNavItem(activeNavItemIdx.value)\n }\n if (event.navigateTopNavLeft) {\n setNavItemIdx(Math.max(activeNavItemIdx.value - 1, 0))\n }\n if (event.navigateTopNavRight) {\n setNavItemIdx(Math.min(activeNavItemIdx.value + 1, topNavItems.length - 1))\n }\n if (event.jumpToTab) {\n const tabIndex = Number(event.jumpToTab.key) - 1\n if (tabIndex >= 0 && tabIndex < topNavItems.length) {\n setNavItemIdx(tabIndex)\n }\n }\n if (event.jumpToLastTab) {\n setNavItemIdx(topNavItems.length - 1)\n }\n}\n\nconst addTopNavTab = (item: { name: string; uid: string }) => {\n topNavItems.push({\n label: item.name,\n path: item.uid,\n icon: 'ExternalLink',\n isCollection: false,\n })\n}\n\nwatch(\n () => props.openNewTab,\n (openNewTab) => {\n if (openNewTab) {\n addTopNavTab(openNewTab)\n }\n },\n { immediate: true },\n)\n\nonMounted(() => events.hotKeys.on(handleHotKey))\nonBeforeUnmount(() => events.hotKeys.off(handleHotKey))\n</script>\n<template>\n <nav class=\"mac:pl-[72px] t-app__top-nav relative flex h-10 pl-2\">\n <!-- Add a draggable overlay -->\n <div class=\"app-drag-region absolute inset-0\" />\n <div\n class=\"relative flex h-10 flex-1 items-center gap-1.5 overflow-hidden pr-2.5 text-base font-medium\">\n <template v-if=\"topNavItems.length === 1\">\n <div class=\"h-full w-full overflow-hidden\">\n <ScalarContextMenu\n triggerClass=\"flex custom-scroll gap-1.5 h-full items-center justify-center w-full whitespace-nowrap\">\n <template #trigger>\n <LibraryIcon\n v-if=\"isCollection\"\n class=\"size-3.5 min-w-3.5 stroke-2\"\n :src=\"activeCollection?.['x-scalar-icon'] || 'Collection'\" />\n <ScalarIcon\n v-else-if=\"topNavItems[0]?.icon\"\n :icon=\"topNavItems[0]?.icon as Icon\"\n size=\"xs\"\n thickness=\"2.5\" />\n <span>{{ topNavItems[0]?.label }}</span>\n </template>\n <template #content>\n <ScalarFloating placement=\"right-start\">\n <template #floating>\n <ScalarDropdownMenu class=\"scalar-app scalar-client\">\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"addNavItem\">\n <ScalarIcon\n icon=\"AddTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n New Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"T\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"copyUrl(activeNavItemIdxValue)\">\n <ScalarIcon\n icon=\"Link\"\n size=\"sm\"\n thickness=\"1.5\" />\n Copy URL\n </ScalarDropdownButton>\n </ScalarDropdownMenu>\n </template>\n </ScalarFloating>\n </template>\n </ScalarContextMenu>\n </div>\n </template>\n <template v-else>\n <TopNavItem\n v-for=\"(topNavItem, index) in topNavItems\"\n :key=\"topNavItem.path\"\n :active=\"index === activeNavItemIdxValue\"\n :hotkey=\"(index + 1).toString()\"\n :icon=\"\n topNavItem.isCollection\n ? ((activeCollection?.['x-scalar-icon'] || 'Collection') as Icon)\n : (topNavItem.icon as Icon)\n \"\n :isCollection=\"topNavItem.isCollection || false\"\n :label=\"topNavItem.label\"\n @click=\"setNavItemIdx(index)\"\n @close=\"removeNavItem(index)\"\n @closeOtherTabs=\"closeOtherTabs(index)\"\n @copyUrl=\"copyUrl(index)\"\n @newTab=\"addNavItem\" />\n </template>\n <button\n class=\"text-c-3 hover:bg-b-3 app-no-drag-region rounded p-1.5\"\n type=\"button\"\n @click=\"addNavItem\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\"\n thickness=\"2.5\" />\n </button>\n </div>\n </nav>\n</template>\n","import type { HotKeyConfig } from '@scalar/oas-utils/entities/workspace'\n\n/**\n * Default set of keybindings for the client app\n */\nexport const APP_HOTKEYS: HotKeyConfig = {\n t: { event: 'addTopNav', modifiers: ['default'] },\n w: { event: 'closeTopNav', modifiers: ['default'] },\n ArrowLeft: { event: 'navigateTopNavLeft', modifiers: ['default', 'Alt'] },\n ArrowRight: { event: 'navigateTopNavRight', modifiers: ['default', 'Alt'] },\n l: { event: 'focusAddressBar', modifiers: ['default'] },\n 1: { event: 'jumpToTab', modifiers: ['default'] },\n 2: { event: 'jumpToTab', modifiers: ['default'] },\n 3: { event: 'jumpToTab', modifiers: ['default'] },\n 4: { event: 'jumpToTab', modifiers: ['default'] },\n 5: { event: 'jumpToTab', modifiers: ['default'] },\n 6: { event: 'jumpToTab', modifiers: ['default'] },\n 7: { event: 'jumpToTab', modifiers: ['default'] },\n 8: { event: 'jumpToTab', modifiers: ['default'] },\n 9: { event: 'jumpToLastTab', modifiers: ['default'] },\n f: { event: 'focusRequestSearch', modifiers: ['default'] },\n n: { event: 'createNew', modifiers: ['default'] },\n}\n","<script setup lang=\"ts\">\n// TODO: Disabled until we polished the UI.\n// import { ImportCollectionListener } from '@/components/ImportCollection'\nimport {\n addScalarClassesToHeadless,\n ScalarTeleportRoot,\n} from '@scalar/components'\nimport { getThemeStyles } from '@scalar/themes'\nimport { useBreakpoints } from '@scalar/use-hooks/useBreakpoints'\nimport { useColorMode } from '@scalar/use-hooks/useColorMode'\nimport { ScalarToasts } from '@scalar/use-toasts'\nimport {\n computed,\n onBeforeMount,\n onBeforeUnmount,\n onMounted,\n ref,\n watch,\n} from 'vue'\nimport { RouterView } from 'vue-router'\n\nimport TopNav from '@/components/TopNav/TopNav.vue'\nimport { useSidebar } from '@/hooks/useSidebar'\nimport MainLayout from '@/layouts/App/MainLayout.vue'\nimport { DEFAULT_HOTKEYS, handleHotKeyDown, type HotKeyEvent } from '@/libs'\nimport { useWorkspace } from '@/store'\nimport { useActiveEntities } from '@/store/active-entities'\n\nimport { APP_HOTKEYS } from './hotkeys'\n\ndefineEmits<{\n (e: 'newTab', item: { name: string; uid: string }): void\n}>()\n\nconst hotKeys = { ...DEFAULT_HOTKEYS, ...APP_HOTKEYS }\n\nconst newTab = ref<{ name: string; uid: string } | null>(null)\n\nconst handleNewTab = (item: { name: string; uid: string }) => {\n newTab.value = item\n}\n\n// Initialize color mode state globally\nuseColorMode()\n\nconst { activeWorkspace } = useActiveEntities()\nconst { events } = useWorkspace()\n\n// Ensure we add our scalar wrapper class to the headless ui root\nonBeforeMount(() => addScalarClassesToHeadless())\n\n/** Handles the hotkey events, we will pass in custom hotkeys here */\nconst handleKeyDown = (ev: KeyboardEvent) =>\n handleHotKeyDown(ev, events.hotKeys, { hotKeys })\n\nconst handleHotKey = (event?: HotKeyEvent) => {\n if (!event) {\n return\n }\n\n // We prevent default on open command so we can use it on the web\n if (event.openCommandPalette) {\n event.openCommandPalette.preventDefault()\n events.commandPalette.emit()\n }\n}\n\n// Hotkey listeners\nonMounted(() => {\n window.addEventListener('keydown', handleKeyDown)\n events.hotKeys.on(handleHotKey)\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKeyDown)\n events.hotKeys.off(handleHotKey)\n})\n\nconst { mediaQueries } = useBreakpoints()\nconst { setSidebarOpen } = useSidebar()\n\n// Single watcher instance for handling responsive behavior\nwatch(mediaQueries.xl, setSidebarOpen, {\n immediate: true,\n})\n\nconst themeStyleTag = computed(\n () =>\n activeWorkspace.value &&\n `<style>${getThemeStyles(activeWorkspace.value?.themeId)}</style>`,\n)\n</script>\n<template>\n <ScalarTeleportRoot>\n <div\n id=\"scalar-client-app\"\n class=\"contents\">\n <!-- Listen for paste and drop events, and look for `url` query parameters to import collections -->\n <!-- <ImportCollectionListener> -->\n <div v-html=\"themeStyleTag\" />\n <TopNav :openNewTab=\"newTab\" />\n\n <!-- Ensure we have the workspace loaded from localStorage above -->\n <MainLayout v-if=\"activeWorkspace?.uid\">\n <RouterView\n v-slot=\"{ Component }\"\n @newTab=\"handleNewTab\">\n <keep-alive>\n <component :is=\"Component\" />\n </keep-alive>\n </RouterView>\n </MainLayout>\n\n <ScalarToasts />\n <!-- </ImportCollectionListener> -->\n </div>\n </ScalarTeleportRoot>\n</template>\n<style>\n#scalar-client {\n display: flex;\n flex-direction: column;\n height: 100dvh;\n width: 100dvw;\n position: relative;\n background-color: var(--scalar-background-2);\n}\n.dark-mode #scalar-client {\n background-color: color-mix(in srgb, var(--scalar-background-1) 65%, black);\n}\n</style>\n","<script setup lang=\"ts\">\n// TODO: Disabled until we polished the UI.\n// import { ImportCollectionListener } from '@/components/ImportCollection'\nimport {\n addScalarClassesToHeadless,\n ScalarTeleportRoot,\n} from '@scalar/components'\nimport { getThemeStyles } from '@scalar/themes'\nimport { useBreakpoints } from '@scalar/use-hooks/useBreakpoints'\nimport { useColorMode } from '@scalar/use-hooks/useColorMode'\nimport { ScalarToasts } from '@scalar/use-toasts'\nimport {\n computed,\n onBeforeMount,\n onBeforeUnmount,\n onMounted,\n ref,\n watch,\n} from 'vue'\nimport { RouterView } from 'vue-router'\n\nimport TopNav from '@/components/TopNav/TopNav.vue'\nimport { useSidebar } from '@/hooks/useSidebar'\nimport MainLayout from '@/layouts/App/MainLayout.vue'\nimport { DEFAULT_HOTKEYS, handleHotKeyDown, type HotKeyEvent } from '@/libs'\nimport { useWorkspace } from '@/store'\nimport { useActiveEntities } from '@/store/active-entities'\n\nimport { APP_HOTKEYS } from './hotkeys'\n\ndefineEmits<{\n (e: 'newTab', item: { name: string; uid: string }): void\n}>()\n\nconst hotKeys = { ...DEFAULT_HOTKEYS, ...APP_HOTKEYS }\n\nconst newTab = ref<{ name: string; uid: string } | null>(null)\n\nconst handleNewTab = (item: { name: string; uid: string }) => {\n newTab.value = item\n}\n\n// Initialize color mode state globally\nuseColorMode()\n\nconst { activeWorkspace } = useActiveEntities()\nconst { events } = useWorkspace()\n\n// Ensure we add our scalar wrapper class to the headless ui root\nonBeforeMount(() => addScalarClassesToHeadless())\n\n/** Handles the hotkey events, we will pass in custom hotkeys here */\nconst handleKeyDown = (ev: KeyboardEvent) =>\n handleHotKeyDown(ev, events.hotKeys, { hotKeys })\n\nconst handleHotKey = (event?: HotKeyEvent) => {\n if (!event) {\n return\n }\n\n // We prevent default on open command so we can use it on the web\n if (event.openCommandPalette) {\n event.openCommandPalette.preventDefault()\n events.commandPalette.emit()\n }\n}\n\n// Hotkey listeners\nonMounted(() => {\n window.addEventListener('keydown', handleKeyDown)\n events.hotKeys.on(handleHotKey)\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKeyDown)\n events.hotKeys.off(handleHotKey)\n})\n\nconst { mediaQueries } = useBreakpoints()\nconst { setSidebarOpen } = useSidebar()\n\n// Single watcher instance for handling responsive behavior\nwatch(mediaQueries.xl, setSidebarOpen, {\n immediate: true,\n})\n\nconst themeStyleTag = computed(\n () =>\n activeWorkspace.value &&\n `<style>${getThemeStyles(activeWorkspace.value?.themeId)}</style>`,\n)\n</script>\n<template>\n <ScalarTeleportRoot>\n <div\n id=\"scalar-client-app\"\n class=\"contents\">\n <!-- Listen for paste and drop events, and look for `url` query parameters to import collections -->\n <!-- <ImportCollectionListener> -->\n <div v-html=\"themeStyleTag\" />\n <TopNav :openNewTab=\"newTab\" />\n\n <!-- Ensure we have the workspace loaded from localStorage above -->\n <MainLayout v-if=\"activeWorkspace?.uid\">\n <RouterView\n v-slot=\"{ Component }\"\n @newTab=\"handleNewTab\">\n <keep-alive>\n <component :is=\"Component\" />\n </keep-alive>\n </RouterView>\n </MainLayout>\n\n <ScalarToasts />\n <!-- </ImportCollectionListener> -->\n </div>\n </ScalarTeleportRoot>\n</template>\n<style>\n#scalar-client {\n display: flex;\n flex-direction: column;\n height: 100dvh;\n width: 100dvw;\n position: relative;\n background-color: var(--scalar-background-2);\n}\n.dark-mode #scalar-client {\n background-color: color-mix(in srgb, var(--scalar-background-1) 65%, black);\n}\n</style>\n","import type { ApiClientConfiguration } from '@scalar/types/api-reference'\nimport { createRouter, createWebHistory } from 'vue-router'\n\nimport { analytics } from '@/analytics'\nimport { createApiClient } from '@/libs'\nimport { routes, saveActiveWorkspace } from '@/routes'\n\nimport ApiClientApp from './ApiClientApp.vue'\n\n/**\n * Mount the full-blown API Client modal to a given element.\n */\nexport const createApiClientApp = async (\n /** Element to mount the references to */\n el: HTMLElement | null,\n /** Configuration object for API client */\n configuration: Partial<ApiClientConfiguration> = {},\n /**\n * Will attempt to mount the references immediately\n * For SSR this may need to be blocked and done client side\n */\n mountOnInitialize = true,\n) => {\n const router = createRouter({\n history: createWebHistory(),\n routes,\n })\n\n const client = createApiClient({\n el,\n appComponent: ApiClientApp,\n configuration: configuration,\n mountOnInitialize,\n router,\n layout: 'desktop',\n })\n\n const { importSpecFile, importSpecFromUrl } = client.store\n\n router.afterEach((to, from) => {\n if (configuration.telemetry) {\n analytics?.capture('page-view', {\n hostname: window.location.hostname,\n to: to.path, // capture path excluding query params\n from: from.path,\n })\n }\n\n saveActiveWorkspace(to)\n })\n\n // Import the spec if needed\n if (configuration.url) {\n await importSpecFromUrl(configuration.url, 'default', {\n proxyUrl: configuration.proxyUrl,\n })\n } else if (configuration.content) {\n await importSpecFile(configuration.content, 'default')\n }\n\n return {\n client,\n router,\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"App-DHBmpWJI.js","names":["$emit"],"sources":["../src/components/TopNav/TopNavItem.vue","../src/components/TopNav/TopNavItem.vue","../src/components/TopNav/TopNav.vue","../src/components/TopNav/TopNav.vue","../src/layouts/App/hotkeys.ts","../src/layouts/App/ApiClientApp.vue","../src/layouts/App/ApiClientApp.vue","../src/layouts/App/create-api-client-app.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ScalarContextMenu,\n ScalarDropdownButton,\n ScalarDropdownDivider,\n ScalarDropdownMenu,\n ScalarFloating,\n ScalarHotkey,\n ScalarIcon,\n ScalarTooltip,\n type Icon,\n} from '@scalar/components'\nimport { isMacOS } from '@scalar/helpers/general/is-mac-os'\nimport { LibraryIcon } from '@scalar/icons/library'\n\ndefineProps<{\n hotkey?: string\n active: boolean\n label: string\n icon: Icon\n isCollection?: boolean\n}>()\n\ndefineEmits<{\n (e: 'click'): void\n (e: 'close'): void\n (e: 'newTab'): void\n (e: 'copyUrl'): void\n (e: 'closeOtherTabs'): void\n}>()\n</script>\n\n<template>\n <ScalarContextMenu triggerClass=\"overflow-hidden w-full\">\n <template #trigger>\n <ScalarTooltip\n :content=\"`${isMacOS() ? '⌘' : '^'} ${hotkey}`\"\n placement=\"bottom\">\n <div\n class=\"nav-item app-no-drag-region\"\n :class=\"{ 'nav-item__active': active }\"\n @click=\"$emit('click')\">\n <div\n class=\"nav-item-icon-copy flex flex-1 items-center justify-center gap-1.5\">\n <LibraryIcon\n v-if=\"isCollection\"\n class=\"size-3.5 min-w-3.5 stroke-2\"\n :src=\"icon\" />\n <ScalarIcon\n v-else\n :icon=\"icon\"\n size=\"xs\"\n thickness=\"2.5\" />\n <span class=\"custom-scroll nav-item-copy text-sm\">{{ label }}</span>\n </div>\n <button\n class=\"nav-item-close\"\n type=\"button\"\n @click=\"$emit('close')\">\n <ScalarIcon\n icon=\"Close\"\n thickness=\"1.75\" />\n </button>\n </div>\n </ScalarTooltip>\n </template>\n <template #content>\n <ScalarFloating placement=\"right-start\">\n <template #floating>\n <ScalarDropdownMenu class=\"scalar-app scalar-client\">\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('newTab')\">\n <ScalarIcon\n icon=\"AddTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n New Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"T\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('copyUrl')\">\n <ScalarIcon\n icon=\"Link\"\n size=\"sm\"\n thickness=\"1.5\" />\n Copy URL\n </ScalarDropdownButton>\n <ScalarDropdownDivider />\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('close')\">\n <ScalarIcon\n icon=\"CloseTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n Close Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"W\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('closeOtherTabs')\">\n <ScalarIcon\n icon=\"CloseTabs\"\n size=\"sm\"\n thickness=\"1.5\" />\n Close Other Tabs\n </ScalarDropdownButton>\n </ScalarDropdownMenu>\n </template>\n </ScalarFloating>\n </template>\n </ScalarContextMenu>\n</template>\n\n<style scoped>\n.nav-item {\n padding: 0 1rem;\n cursor: pointer;\n flex: 1;\n justify-content: center;\n align-items: center;\n display: flex;\n border-radius: var(--scalar-radius-lg);\n background: var(--scalar-background-3);\n border: var(--scalar-border-width) solid var(--scalar-background-2);\n color: var(--scalar-color-3);\n padding: 4.5px;\n min-width: 0;\n overflow: hidden;\n position: relative;\n}\n.dark-mode .nav-item {\n background: color-mix(in srgb, var(--scalar-background-2), transparent);\n}\n.nav-item-icon-copy {\n max-width: 100%;\n white-space: nowrap;\n overflow: hidden;\n mask-image: linear-gradient(\n to left,\n transparent 0,\n var(--scalar-background-2) 20px\n );\n}\n.nav-item:hover .nav-item-icon-copy {\n mask-image: linear-gradient(\n to left,\n transparent 20px,\n var(--scalar-background-2) 40px\n );\n}\n.nav-item-copy {\n max-width: calc(100% - 20px);\n}\n.nav-item:hover {\n color: var(--scalar-color-1);\n}\n.nav-item__active {\n background-color: var(--scalar-background-1);\n color: var(--scalar-color-1);\n border-color: var(--scalar-border-color);\n}\n.dark-mode .nav-item__active {\n background-color: var(--scalar-background-2);\n}\n.nav-item-close {\n position: absolute;\n right: 3px;\n padding: 2px;\n border-radius: var(--scalar-radius);\n background: transparent;\n max-width: 20px;\n stroke-width: 1.5px;\n color: var(--scalar-color-3);\n margin-left: -20px;\n opacity: 0;\n}\n.nav-item:hover .nav-item-close {\n opacity: 1;\n}\n.nav-item-close:hover {\n background-color: var(--scalar-background-4);\n}\n.nav-item__active .nav-item-close:hover {\n background-color: var(--scalar-background-2);\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarContextMenu,\n ScalarDropdownButton,\n ScalarDropdownDivider,\n ScalarDropdownMenu,\n ScalarFloating,\n ScalarHotkey,\n ScalarIcon,\n ScalarTooltip,\n type Icon,\n} from '@scalar/components'\nimport { isMacOS } from '@scalar/helpers/general/is-mac-os'\nimport { LibraryIcon } from '@scalar/icons/library'\n\ndefineProps<{\n hotkey?: string\n active: boolean\n label: string\n icon: Icon\n isCollection?: boolean\n}>()\n\ndefineEmits<{\n (e: 'click'): void\n (e: 'close'): void\n (e: 'newTab'): void\n (e: 'copyUrl'): void\n (e: 'closeOtherTabs'): void\n}>()\n</script>\n\n<template>\n <ScalarContextMenu triggerClass=\"overflow-hidden w-full\">\n <template #trigger>\n <ScalarTooltip\n :content=\"`${isMacOS() ? '⌘' : '^'} ${hotkey}`\"\n placement=\"bottom\">\n <div\n class=\"nav-item app-no-drag-region\"\n :class=\"{ 'nav-item__active': active }\"\n @click=\"$emit('click')\">\n <div\n class=\"nav-item-icon-copy flex flex-1 items-center justify-center gap-1.5\">\n <LibraryIcon\n v-if=\"isCollection\"\n class=\"size-3.5 min-w-3.5 stroke-2\"\n :src=\"icon\" />\n <ScalarIcon\n v-else\n :icon=\"icon\"\n size=\"xs\"\n thickness=\"2.5\" />\n <span class=\"custom-scroll nav-item-copy text-sm\">{{ label }}</span>\n </div>\n <button\n class=\"nav-item-close\"\n type=\"button\"\n @click=\"$emit('close')\">\n <ScalarIcon\n icon=\"Close\"\n thickness=\"1.75\" />\n </button>\n </div>\n </ScalarTooltip>\n </template>\n <template #content>\n <ScalarFloating placement=\"right-start\">\n <template #floating>\n <ScalarDropdownMenu class=\"scalar-app scalar-client\">\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('newTab')\">\n <ScalarIcon\n icon=\"AddTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n New Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"T\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('copyUrl')\">\n <ScalarIcon\n icon=\"Link\"\n size=\"sm\"\n thickness=\"1.5\" />\n Copy URL\n </ScalarDropdownButton>\n <ScalarDropdownDivider />\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('close')\">\n <ScalarIcon\n icon=\"CloseTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n Close Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"W\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"$emit('closeOtherTabs')\">\n <ScalarIcon\n icon=\"CloseTabs\"\n size=\"sm\"\n thickness=\"1.5\" />\n Close Other Tabs\n </ScalarDropdownButton>\n </ScalarDropdownMenu>\n </template>\n </ScalarFloating>\n </template>\n </ScalarContextMenu>\n</template>\n\n<style scoped>\n.nav-item {\n padding: 0 1rem;\n cursor: pointer;\n flex: 1;\n justify-content: center;\n align-items: center;\n display: flex;\n border-radius: var(--scalar-radius-lg);\n background: var(--scalar-background-3);\n border: var(--scalar-border-width) solid var(--scalar-background-2);\n color: var(--scalar-color-3);\n padding: 4.5px;\n min-width: 0;\n overflow: hidden;\n position: relative;\n}\n.dark-mode .nav-item {\n background: color-mix(in srgb, var(--scalar-background-2), transparent);\n}\n.nav-item-icon-copy {\n max-width: 100%;\n white-space: nowrap;\n overflow: hidden;\n mask-image: linear-gradient(\n to left,\n transparent 0,\n var(--scalar-background-2) 20px\n );\n}\n.nav-item:hover .nav-item-icon-copy {\n mask-image: linear-gradient(\n to left,\n transparent 20px,\n var(--scalar-background-2) 40px\n );\n}\n.nav-item-copy {\n max-width: calc(100% - 20px);\n}\n.nav-item:hover {\n color: var(--scalar-color-1);\n}\n.nav-item__active {\n background-color: var(--scalar-background-1);\n color: var(--scalar-color-1);\n border-color: var(--scalar-border-color);\n}\n.dark-mode .nav-item__active {\n background-color: var(--scalar-background-2);\n}\n.nav-item-close {\n position: absolute;\n right: 3px;\n padding: 2px;\n border-radius: var(--scalar-radius);\n background: transparent;\n max-width: 20px;\n stroke-width: 1.5px;\n color: var(--scalar-color-3);\n margin-left: -20px;\n opacity: 0;\n}\n.nav-item:hover .nav-item-close {\n opacity: 1;\n}\n.nav-item-close:hover {\n background-color: var(--scalar-background-4);\n}\n.nav-item__active .nav-item-close:hover {\n background-color: var(--scalar-background-2);\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarContextMenu,\n ScalarDropdownButton,\n ScalarDropdownMenu,\n ScalarFloating,\n ScalarHotkey,\n ScalarIcon,\n type Icon,\n} from '@scalar/components'\nimport { LibraryIcon } from '@scalar/icons/library'\nimport type { Collection } from '@scalar/oas-utils/entities/spec'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { computed, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport { ROUTES } from '@/constants'\nimport type { HotKeyEvent } from '@/libs'\nimport { useWorkspace } from '@/store'\nimport { useActiveEntities } from '@/store/active-entities'\n\nimport TopNavItem from './TopNavItem.vue'\n\nconst props = defineProps<{\n openNewTab: { name: string; uid: string } | null\n}>()\nconst { activeRequest, activeCollection } = useActiveEntities()\nconst router = useRouter()\nconst { events } = useWorkspace()\nconst { copyToClipboard } = useClipboard()\n\n/** Nav Items list */\nconst topNavItems = reactive([\n {\n label: '',\n path: '',\n icon: 'Add' as Icon | Collection['x-scalar-icon'],\n isCollection: false,\n },\n])\nconst activeNavItemIdx = ref(0)\nconst activeNavItemIdxValue = computed(() => activeNavItemIdx.value)\n\n/**\n * Check if the current route is a collection\n */\nconst isCollection = computed(() => {\n return router.currentRoute.value.name?.toString().startsWith('collection.')\n})\n\n/**\n * Logic to handle adding a nav item\n * based on the current route\n */\nfunction handleNavLabelAdd() {\n // Collection\n if (isCollection.value) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeCollection.value?.info?.title || 'Untitled Collection',\n path: router.currentRoute.value.path,\n icon: activeCollection.value?.['x-scalar-icon'] || 'Collection',\n isCollection: true,\n }\n\n return\n }\n\n // Request\n if (router.currentRoute.value.name?.toString().startsWith('request')) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeRequest.value?.summary || '',\n path: router.currentRoute.value.path,\n icon: 'ExternalLink',\n isCollection: false,\n }\n\n return\n }\n\n // Something from the sidebar\n const activeRoute = ROUTES.find((route) => {\n return route.to.name.startsWith(\n router.currentRoute.value.name?.toString() ?? '',\n )\n })\n\n if (activeRoute) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeRoute.displayName,\n path: router.currentRoute.value.path,\n icon: activeRoute.icon,\n isCollection: false,\n }\n\n return\n }\n}\n\nfunction handleNavRoute() {\n const path = topNavItems[activeNavItemIdx.value]?.path\n if (path) {\n router.push(path)\n }\n}\n\n/**\n * adding a nav item sets the new index and nav item\n * based on the route\n */\nfunction addNavItem() {\n topNavItems.push({\n label: '',\n path: '',\n icon: 'Add' as Icon,\n isCollection: false,\n })\n activeNavItemIdx.value = topNavItems.length - 1\n handleNavLabelAdd()\n}\n\nfunction setNavItemIdx(idx: number) {\n activeNavItemIdx.value = idx\n handleNavRoute()\n}\n\n// when the route changes we need update the active nav item\nwatch(\n () => router.currentRoute.value.path,\n () => {\n handleNavLabelAdd()\n },\n { immediate: true },\n)\n\nfunction removeNavItem(idx: number) {\n topNavItems.splice(idx, 1)\n activeNavItemIdx.value = Math.min(\n activeNavItemIdx.value,\n topNavItems.length - 1,\n )\n handleNavRoute()\n}\n\nconst copyUrl = async (idx: number) => {\n if (!topNavItems[idx]?.path) {\n return\n }\n\n const fullUrl = new URL(window.location.href)\n fullUrl.pathname = topNavItems[idx].path\n await copyToClipboard(fullUrl.toString())\n}\n\nconst closeOtherTabs = (idx: number) => {\n topNavItems.splice(0, idx)\n topNavItems.splice(1)\n activeNavItemIdx.value = 0\n handleNavRoute()\n}\n\n/** Handle hotkeys */\nconst handleHotKey = (event?: HotKeyEvent) => {\n if (!event) {\n return\n }\n if (event.addTopNav) {\n addNavItem()\n }\n if (event.closeTopNav) {\n removeNavItem(activeNavItemIdx.value)\n }\n if (event.navigateTopNavLeft) {\n setNavItemIdx(Math.max(activeNavItemIdx.value - 1, 0))\n }\n if (event.navigateTopNavRight) {\n setNavItemIdx(Math.min(activeNavItemIdx.value + 1, topNavItems.length - 1))\n }\n if (event.jumpToTab) {\n const tabIndex = Number(event.jumpToTab.key) - 1\n if (tabIndex >= 0 && tabIndex < topNavItems.length) {\n setNavItemIdx(tabIndex)\n }\n }\n if (event.jumpToLastTab) {\n setNavItemIdx(topNavItems.length - 1)\n }\n}\n\nconst addTopNavTab = (item: { name: string; uid: string }) => {\n topNavItems.push({\n label: item.name,\n path: item.uid,\n icon: 'ExternalLink',\n isCollection: false,\n })\n}\n\nwatch(\n () => props.openNewTab,\n (openNewTab) => {\n if (openNewTab) {\n addTopNavTab(openNewTab)\n }\n },\n { immediate: true },\n)\n\nonMounted(() => events.hotKeys.on(handleHotKey))\nonBeforeUnmount(() => events.hotKeys.off(handleHotKey))\n</script>\n<template>\n <nav class=\"mac:pl-[72px] t-app__top-nav relative flex h-10 pl-2\">\n <!-- Add a draggable overlay -->\n <div class=\"app-drag-region absolute inset-0\" />\n <div\n class=\"relative flex h-10 flex-1 items-center gap-1.5 overflow-hidden pr-2.5 text-base font-medium\">\n <template v-if=\"topNavItems.length === 1\">\n <div class=\"h-full w-full overflow-hidden\">\n <ScalarContextMenu\n triggerClass=\"flex custom-scroll gap-1.5 h-full items-center justify-center w-full whitespace-nowrap\">\n <template #trigger>\n <LibraryIcon\n v-if=\"isCollection\"\n class=\"size-3.5 min-w-3.5 stroke-2\"\n :src=\"activeCollection?.['x-scalar-icon'] || 'Collection'\" />\n <ScalarIcon\n v-else-if=\"topNavItems[0]?.icon\"\n :icon=\"topNavItems[0]?.icon as Icon\"\n size=\"xs\"\n thickness=\"2.5\" />\n <span>{{ topNavItems[0]?.label }}</span>\n </template>\n <template #content>\n <ScalarFloating placement=\"right-start\">\n <template #floating>\n <ScalarDropdownMenu class=\"scalar-app scalar-client\">\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"addNavItem\">\n <ScalarIcon\n icon=\"AddTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n New Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"T\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"copyUrl(activeNavItemIdxValue)\">\n <ScalarIcon\n icon=\"Link\"\n size=\"sm\"\n thickness=\"1.5\" />\n Copy URL\n </ScalarDropdownButton>\n </ScalarDropdownMenu>\n </template>\n </ScalarFloating>\n </template>\n </ScalarContextMenu>\n </div>\n </template>\n <template v-else>\n <TopNavItem\n v-for=\"(topNavItem, index) in topNavItems\"\n :key=\"topNavItem.path\"\n :active=\"index === activeNavItemIdxValue\"\n :hotkey=\"(index + 1).toString()\"\n :icon=\"\n topNavItem.isCollection\n ? ((activeCollection?.['x-scalar-icon'] || 'Collection') as Icon)\n : (topNavItem.icon as Icon)\n \"\n :isCollection=\"topNavItem.isCollection || false\"\n :label=\"topNavItem.label\"\n @click=\"setNavItemIdx(index)\"\n @close=\"removeNavItem(index)\"\n @closeOtherTabs=\"closeOtherTabs(index)\"\n @copyUrl=\"copyUrl(index)\"\n @newTab=\"addNavItem\" />\n </template>\n <button\n class=\"text-c-3 hover:bg-b-3 app-no-drag-region rounded p-1.5\"\n type=\"button\"\n @click=\"addNavItem\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\"\n thickness=\"2.5\" />\n </button>\n </div>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport {\n ScalarContextMenu,\n ScalarDropdownButton,\n ScalarDropdownMenu,\n ScalarFloating,\n ScalarHotkey,\n ScalarIcon,\n type Icon,\n} from '@scalar/components'\nimport { LibraryIcon } from '@scalar/icons/library'\nimport type { Collection } from '@scalar/oas-utils/entities/spec'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { computed, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport { ROUTES } from '@/constants'\nimport type { HotKeyEvent } from '@/libs'\nimport { useWorkspace } from '@/store'\nimport { useActiveEntities } from '@/store/active-entities'\n\nimport TopNavItem from './TopNavItem.vue'\n\nconst props = defineProps<{\n openNewTab: { name: string; uid: string } | null\n}>()\nconst { activeRequest, activeCollection } = useActiveEntities()\nconst router = useRouter()\nconst { events } = useWorkspace()\nconst { copyToClipboard } = useClipboard()\n\n/** Nav Items list */\nconst topNavItems = reactive([\n {\n label: '',\n path: '',\n icon: 'Add' as Icon | Collection['x-scalar-icon'],\n isCollection: false,\n },\n])\nconst activeNavItemIdx = ref(0)\nconst activeNavItemIdxValue = computed(() => activeNavItemIdx.value)\n\n/**\n * Check if the current route is a collection\n */\nconst isCollection = computed(() => {\n return router.currentRoute.value.name?.toString().startsWith('collection.')\n})\n\n/**\n * Logic to handle adding a nav item\n * based on the current route\n */\nfunction handleNavLabelAdd() {\n // Collection\n if (isCollection.value) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeCollection.value?.info?.title || 'Untitled Collection',\n path: router.currentRoute.value.path,\n icon: activeCollection.value?.['x-scalar-icon'] || 'Collection',\n isCollection: true,\n }\n\n return\n }\n\n // Request\n if (router.currentRoute.value.name?.toString().startsWith('request')) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeRequest.value?.summary || '',\n path: router.currentRoute.value.path,\n icon: 'ExternalLink',\n isCollection: false,\n }\n\n return\n }\n\n // Something from the sidebar\n const activeRoute = ROUTES.find((route) => {\n return route.to.name.startsWith(\n router.currentRoute.value.name?.toString() ?? '',\n )\n })\n\n if (activeRoute) {\n topNavItems[activeNavItemIdx.value] = {\n label: activeRoute.displayName,\n path: router.currentRoute.value.path,\n icon: activeRoute.icon,\n isCollection: false,\n }\n\n return\n }\n}\n\nfunction handleNavRoute() {\n const path = topNavItems[activeNavItemIdx.value]?.path\n if (path) {\n router.push(path)\n }\n}\n\n/**\n * adding a nav item sets the new index and nav item\n * based on the route\n */\nfunction addNavItem() {\n topNavItems.push({\n label: '',\n path: '',\n icon: 'Add' as Icon,\n isCollection: false,\n })\n activeNavItemIdx.value = topNavItems.length - 1\n handleNavLabelAdd()\n}\n\nfunction setNavItemIdx(idx: number) {\n activeNavItemIdx.value = idx\n handleNavRoute()\n}\n\n// when the route changes we need update the active nav item\nwatch(\n () => router.currentRoute.value.path,\n () => {\n handleNavLabelAdd()\n },\n { immediate: true },\n)\n\nfunction removeNavItem(idx: number) {\n topNavItems.splice(idx, 1)\n activeNavItemIdx.value = Math.min(\n activeNavItemIdx.value,\n topNavItems.length - 1,\n )\n handleNavRoute()\n}\n\nconst copyUrl = async (idx: number) => {\n if (!topNavItems[idx]?.path) {\n return\n }\n\n const fullUrl = new URL(window.location.href)\n fullUrl.pathname = topNavItems[idx].path\n await copyToClipboard(fullUrl.toString())\n}\n\nconst closeOtherTabs = (idx: number) => {\n topNavItems.splice(0, idx)\n topNavItems.splice(1)\n activeNavItemIdx.value = 0\n handleNavRoute()\n}\n\n/** Handle hotkeys */\nconst handleHotKey = (event?: HotKeyEvent) => {\n if (!event) {\n return\n }\n if (event.addTopNav) {\n addNavItem()\n }\n if (event.closeTopNav) {\n removeNavItem(activeNavItemIdx.value)\n }\n if (event.navigateTopNavLeft) {\n setNavItemIdx(Math.max(activeNavItemIdx.value - 1, 0))\n }\n if (event.navigateTopNavRight) {\n setNavItemIdx(Math.min(activeNavItemIdx.value + 1, topNavItems.length - 1))\n }\n if (event.jumpToTab) {\n const tabIndex = Number(event.jumpToTab.key) - 1\n if (tabIndex >= 0 && tabIndex < topNavItems.length) {\n setNavItemIdx(tabIndex)\n }\n }\n if (event.jumpToLastTab) {\n setNavItemIdx(topNavItems.length - 1)\n }\n}\n\nconst addTopNavTab = (item: { name: string; uid: string }) => {\n topNavItems.push({\n label: item.name,\n path: item.uid,\n icon: 'ExternalLink',\n isCollection: false,\n })\n}\n\nwatch(\n () => props.openNewTab,\n (openNewTab) => {\n if (openNewTab) {\n addTopNavTab(openNewTab)\n }\n },\n { immediate: true },\n)\n\nonMounted(() => events.hotKeys.on(handleHotKey))\nonBeforeUnmount(() => events.hotKeys.off(handleHotKey))\n</script>\n<template>\n <nav class=\"mac:pl-[72px] t-app__top-nav relative flex h-10 pl-2\">\n <!-- Add a draggable overlay -->\n <div class=\"app-drag-region absolute inset-0\" />\n <div\n class=\"relative flex h-10 flex-1 items-center gap-1.5 overflow-hidden pr-2.5 text-base font-medium\">\n <template v-if=\"topNavItems.length === 1\">\n <div class=\"h-full w-full overflow-hidden\">\n <ScalarContextMenu\n triggerClass=\"flex custom-scroll gap-1.5 h-full items-center justify-center w-full whitespace-nowrap\">\n <template #trigger>\n <LibraryIcon\n v-if=\"isCollection\"\n class=\"size-3.5 min-w-3.5 stroke-2\"\n :src=\"activeCollection?.['x-scalar-icon'] || 'Collection'\" />\n <ScalarIcon\n v-else-if=\"topNavItems[0]?.icon\"\n :icon=\"topNavItems[0]?.icon as Icon\"\n size=\"xs\"\n thickness=\"2.5\" />\n <span>{{ topNavItems[0]?.label }}</span>\n </template>\n <template #content>\n <ScalarFloating placement=\"right-start\">\n <template #floating>\n <ScalarDropdownMenu class=\"scalar-app scalar-client\">\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"addNavItem\">\n <ScalarIcon\n icon=\"AddTab\"\n size=\"sm\"\n thickness=\"1.5\" />\n New Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"T\" />\n </ScalarDropdownButton>\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"copyUrl(activeNavItemIdxValue)\">\n <ScalarIcon\n icon=\"Link\"\n size=\"sm\"\n thickness=\"1.5\" />\n Copy URL\n </ScalarDropdownButton>\n </ScalarDropdownMenu>\n </template>\n </ScalarFloating>\n </template>\n </ScalarContextMenu>\n </div>\n </template>\n <template v-else>\n <TopNavItem\n v-for=\"(topNavItem, index) in topNavItems\"\n :key=\"topNavItem.path\"\n :active=\"index === activeNavItemIdxValue\"\n :hotkey=\"(index + 1).toString()\"\n :icon=\"\n topNavItem.isCollection\n ? ((activeCollection?.['x-scalar-icon'] || 'Collection') as Icon)\n : (topNavItem.icon as Icon)\n \"\n :isCollection=\"topNavItem.isCollection || false\"\n :label=\"topNavItem.label\"\n @click=\"setNavItemIdx(index)\"\n @close=\"removeNavItem(index)\"\n @closeOtherTabs=\"closeOtherTabs(index)\"\n @copyUrl=\"copyUrl(index)\"\n @newTab=\"addNavItem\" />\n </template>\n <button\n class=\"text-c-3 hover:bg-b-3 app-no-drag-region rounded p-1.5\"\n type=\"button\"\n @click=\"addNavItem\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\"\n thickness=\"2.5\" />\n </button>\n </div>\n </nav>\n</template>\n","import type { HotKeyConfig } from '@scalar/oas-utils/entities/workspace'\n\n/**\n * Default set of keybindings for the client app\n */\nexport const APP_HOTKEYS: HotKeyConfig = {\n t: { event: 'addTopNav', modifiers: ['default'] },\n w: { event: 'closeTopNav', modifiers: ['default'] },\n ArrowLeft: { event: 'navigateTopNavLeft', modifiers: ['default', 'Alt'] },\n ArrowRight: { event: 'navigateTopNavRight', modifiers: ['default', 'Alt'] },\n l: { event: 'focusAddressBar', modifiers: ['default'] },\n 1: { event: 'jumpToTab', modifiers: ['default'] },\n 2: { event: 'jumpToTab', modifiers: ['default'] },\n 3: { event: 'jumpToTab', modifiers: ['default'] },\n 4: { event: 'jumpToTab', modifiers: ['default'] },\n 5: { event: 'jumpToTab', modifiers: ['default'] },\n 6: { event: 'jumpToTab', modifiers: ['default'] },\n 7: { event: 'jumpToTab', modifiers: ['default'] },\n 8: { event: 'jumpToTab', modifiers: ['default'] },\n 9: { event: 'jumpToLastTab', modifiers: ['default'] },\n f: { event: 'focusRequestSearch', modifiers: ['default'] },\n n: { event: 'createNew', modifiers: ['default'] },\n}\n","<script setup lang=\"ts\">\n// TODO: Disabled until we polished the UI.\n// import { ImportCollectionListener } from '@/components/ImportCollection'\nimport {\n addScalarClassesToHeadless,\n ScalarTeleportRoot,\n} from '@scalar/components'\nimport { getThemeStyles } from '@scalar/themes'\nimport { useBreakpoints } from '@scalar/use-hooks/useBreakpoints'\nimport { useColorMode } from '@scalar/use-hooks/useColorMode'\nimport { ScalarToasts } from '@scalar/use-toasts'\nimport {\n computed,\n onBeforeMount,\n onBeforeUnmount,\n onMounted,\n ref,\n watch,\n} from 'vue'\nimport { RouterView } from 'vue-router'\n\nimport TopNav from '@/components/TopNav/TopNav.vue'\nimport { useSidebar } from '@/hooks/useSidebar'\nimport MainLayout from '@/layouts/App/MainLayout.vue'\nimport { DEFAULT_HOTKEYS, handleHotKeyDown, type HotKeyEvent } from '@/libs'\nimport { useWorkspace } from '@/store'\nimport { useActiveEntities } from '@/store/active-entities'\n\nimport { APP_HOTKEYS } from './hotkeys'\n\ndefineEmits<{\n (e: 'newTab', item: { name: string; uid: string }): void\n}>()\n\nconst hotKeys = { ...DEFAULT_HOTKEYS, ...APP_HOTKEYS }\n\nconst newTab = ref<{ name: string; uid: string } | null>(null)\n\nconst handleNewTab = (item: { name: string; uid: string }) => {\n newTab.value = item\n}\n\n// Initialize color mode state globally\nuseColorMode()\n\nconst { activeWorkspace } = useActiveEntities()\nconst { events } = useWorkspace()\n\n// Ensure we add our scalar wrapper class to the headless ui root\nonBeforeMount(() => addScalarClassesToHeadless())\n\n/** Handles the hotkey events, we will pass in custom hotkeys here */\nconst handleKeyDown = (ev: KeyboardEvent) =>\n handleHotKeyDown(ev, events.hotKeys, { hotKeys })\n\nconst handleHotKey = (event?: HotKeyEvent) => {\n if (!event) {\n return\n }\n\n // We prevent default on open command so we can use it on the web\n if (event.openCommandPalette) {\n event.openCommandPalette.preventDefault()\n events.commandPalette.emit()\n }\n}\n\n// Hotkey listeners\nonMounted(() => {\n window.addEventListener('keydown', handleKeyDown)\n events.hotKeys.on(handleHotKey)\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKeyDown)\n events.hotKeys.off(handleHotKey)\n})\n\nconst { mediaQueries } = useBreakpoints()\nconst { setSidebarOpen } = useSidebar()\n\n// Single watcher instance for handling responsive behavior\nwatch(mediaQueries.xl, setSidebarOpen, {\n immediate: true,\n})\n\nconst themeStyleTag = computed(\n () =>\n activeWorkspace.value &&\n `<style>${getThemeStyles(activeWorkspace.value?.themeId)}</style>`,\n)\n</script>\n<template>\n <ScalarTeleportRoot>\n <div\n id=\"scalar-client-app\"\n class=\"contents\">\n <!-- Listen for paste and drop events, and look for `url` query parameters to import collections -->\n <!-- <ImportCollectionListener> -->\n <div v-html=\"themeStyleTag\" />\n <TopNav :openNewTab=\"newTab\" />\n\n <!-- Ensure we have the workspace loaded from localStorage above -->\n <MainLayout v-if=\"activeWorkspace?.uid\">\n <RouterView\n v-slot=\"{ Component }\"\n @newTab=\"handleNewTab\">\n <keep-alive>\n <component :is=\"Component\" />\n </keep-alive>\n </RouterView>\n </MainLayout>\n\n <ScalarToasts />\n <!-- </ImportCollectionListener> -->\n </div>\n </ScalarTeleportRoot>\n</template>\n<style>\n#scalar-client {\n display: flex;\n flex-direction: column;\n height: 100dvh;\n width: 100dvw;\n position: relative;\n background-color: var(--scalar-background-2);\n}\n.dark-mode #scalar-client {\n background-color: color-mix(in srgb, var(--scalar-background-1) 65%, black);\n}\n</style>\n","<script setup lang=\"ts\">\n// TODO: Disabled until we polished the UI.\n// import { ImportCollectionListener } from '@/components/ImportCollection'\nimport {\n addScalarClassesToHeadless,\n ScalarTeleportRoot,\n} from '@scalar/components'\nimport { getThemeStyles } from '@scalar/themes'\nimport { useBreakpoints } from '@scalar/use-hooks/useBreakpoints'\nimport { useColorMode } from '@scalar/use-hooks/useColorMode'\nimport { ScalarToasts } from '@scalar/use-toasts'\nimport {\n computed,\n onBeforeMount,\n onBeforeUnmount,\n onMounted,\n ref,\n watch,\n} from 'vue'\nimport { RouterView } from 'vue-router'\n\nimport TopNav from '@/components/TopNav/TopNav.vue'\nimport { useSidebar } from '@/hooks/useSidebar'\nimport MainLayout from '@/layouts/App/MainLayout.vue'\nimport { DEFAULT_HOTKEYS, handleHotKeyDown, type HotKeyEvent } from '@/libs'\nimport { useWorkspace } from '@/store'\nimport { useActiveEntities } from '@/store/active-entities'\n\nimport { APP_HOTKEYS } from './hotkeys'\n\ndefineEmits<{\n (e: 'newTab', item: { name: string; uid: string }): void\n}>()\n\nconst hotKeys = { ...DEFAULT_HOTKEYS, ...APP_HOTKEYS }\n\nconst newTab = ref<{ name: string; uid: string } | null>(null)\n\nconst handleNewTab = (item: { name: string; uid: string }) => {\n newTab.value = item\n}\n\n// Initialize color mode state globally\nuseColorMode()\n\nconst { activeWorkspace } = useActiveEntities()\nconst { events } = useWorkspace()\n\n// Ensure we add our scalar wrapper class to the headless ui root\nonBeforeMount(() => addScalarClassesToHeadless())\n\n/** Handles the hotkey events, we will pass in custom hotkeys here */\nconst handleKeyDown = (ev: KeyboardEvent) =>\n handleHotKeyDown(ev, events.hotKeys, { hotKeys })\n\nconst handleHotKey = (event?: HotKeyEvent) => {\n if (!event) {\n return\n }\n\n // We prevent default on open command so we can use it on the web\n if (event.openCommandPalette) {\n event.openCommandPalette.preventDefault()\n events.commandPalette.emit()\n }\n}\n\n// Hotkey listeners\nonMounted(() => {\n window.addEventListener('keydown', handleKeyDown)\n events.hotKeys.on(handleHotKey)\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKeyDown)\n events.hotKeys.off(handleHotKey)\n})\n\nconst { mediaQueries } = useBreakpoints()\nconst { setSidebarOpen } = useSidebar()\n\n// Single watcher instance for handling responsive behavior\nwatch(mediaQueries.xl, setSidebarOpen, {\n immediate: true,\n})\n\nconst themeStyleTag = computed(\n () =>\n activeWorkspace.value &&\n `<style>${getThemeStyles(activeWorkspace.value?.themeId)}</style>`,\n)\n</script>\n<template>\n <ScalarTeleportRoot>\n <div\n id=\"scalar-client-app\"\n class=\"contents\">\n <!-- Listen for paste and drop events, and look for `url` query parameters to import collections -->\n <!-- <ImportCollectionListener> -->\n <div v-html=\"themeStyleTag\" />\n <TopNav :openNewTab=\"newTab\" />\n\n <!-- Ensure we have the workspace loaded from localStorage above -->\n <MainLayout v-if=\"activeWorkspace?.uid\">\n <RouterView\n v-slot=\"{ Component }\"\n @newTab=\"handleNewTab\">\n <keep-alive>\n <component :is=\"Component\" />\n </keep-alive>\n </RouterView>\n </MainLayout>\n\n <ScalarToasts />\n <!-- </ImportCollectionListener> -->\n </div>\n </ScalarTeleportRoot>\n</template>\n<style>\n#scalar-client {\n display: flex;\n flex-direction: column;\n height: 100dvh;\n width: 100dvw;\n position: relative;\n background-color: var(--scalar-background-2);\n}\n.dark-mode #scalar-client {\n background-color: color-mix(in srgb, var(--scalar-background-1) 65%, black);\n}\n</style>\n","import type { ApiClientConfiguration } from '@scalar/types/api-reference'\nimport { createRouter, createWebHistory } from 'vue-router'\n\nimport { analytics } from '@/analytics'\nimport { createApiClient } from '@/libs'\nimport { routes, saveActiveWorkspace } from '@/routes'\n\nimport ApiClientApp from './ApiClientApp.vue'\n\n/**\n * Mount the full-blown API Client modal to a given element.\n */\nexport const createApiClientApp = async (\n /** Element to mount the references to */\n el: HTMLElement | null,\n /** Configuration object for API client */\n configuration: Partial<ApiClientConfiguration> = {},\n /**\n * Will attempt to mount the references immediately\n * For SSR this may need to be blocked and done client side\n */\n mountOnInitialize = true,\n) => {\n const router = createRouter({\n history: createWebHistory(),\n routes,\n })\n\n const client = createApiClient({\n el,\n appComponent: ApiClientApp,\n configuration: configuration,\n mountOnInitialize,\n router,\n layout: 'desktop',\n })\n\n const { importSpecFile, importSpecFromUrl } = client.store\n\n router.afterEach((to, from) => {\n if (configuration.telemetry) {\n analytics?.capture('page-view', {\n hostname: window.location.hostname,\n to: to.path, // capture path excluding query params\n from: from.path,\n })\n }\n\n saveActiveWorkspace(to)\n })\n\n // Import the spec if needed\n if (configuration.url) {\n await importSpecFromUrl(configuration.url, 'default', {\n proxyUrl: configuration.proxyUrl,\n })\n } else if (configuration.content) {\n await importSpecFile(configuration.content, 'default')\n }\n\n return {\n client,\n router,\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { T as PathId, g as getEnvColor, h as parseEnvVariables, w as useActiveEntities } from "./store-
|
|
1
|
+
import { T as PathId, g as getEnvColor, h as parseEnvVariables, w as useActiveEntities } from "./store-DnlAQK5d.js";
|
|
2
2
|
import { a as useLayout } from "./useSidebar-DLTwHDI-.js";
|
|
3
3
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BmmBcIzD.js";
|
|
4
4
|
import { Fragment, computed, createApp, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, h, mergeProps, nextTick, normalizeClass, normalizeStyle, onMounted, openBlock, ref, renderList, renderSlot, toDisplayString, toRef, unref, useAttrs, vModelText, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
|
|
@@ -691,4 +691,4 @@ var CodeInput_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__
|
|
|
691
691
|
//#endregion
|
|
692
692
|
export { DataTableInputSelect_default as n, CodeInput_default as t };
|
|
693
693
|
|
|
694
|
-
//# sourceMappingURL=CodeInput-
|
|
694
|
+
//# sourceMappingURL=CodeInput-BTN8cC5h.js.map
|