@scalar/api-client 2.38.4 → 2.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
- package/dist/assets/computer.ascii.virtual.js +6 -0
- package/dist/assets/computer.ascii.virtual.js.map +1 -0
- package/dist/assets/keycap.ascii.virtual.js +6 -0
- package/dist/assets/keycap.ascii.virtual.js.map +1 -0
- package/dist/assets/rabbit.ascii.virtual.js +6 -0
- package/dist/assets/rabbit.ascii.virtual.js.map +1 -0
- package/dist/assets/rabbitjump.ascii.virtual.js +6 -0
- package/dist/assets/rabbitjump.ascii.virtual.js.map +1 -0
- package/dist/components/AddressBar/AddressBar.vue.d.ts +1 -1
- package/dist/components/AddressBar/AddressBar.vue.js +9 -0
- package/dist/components/AddressBar/AddressBar.vue.js.map +1 -0
- package/dist/components/AddressBar/AddressBar.vue.script.js +204 -0
- package/dist/components/AddressBar/AddressBar.vue.script.js.map +1 -0
- package/dist/components/AddressBar/AddressBarHistory.vue.js +9 -0
- package/dist/components/AddressBar/AddressBarHistory.vue.js.map +1 -0
- package/dist/components/AddressBar/AddressBarHistory.vue.script.js +85 -0
- package/dist/components/AddressBar/AddressBarHistory.vue.script.js.map +1 -0
- package/dist/components/AddressBar/httpStatusCodeColors.js +20 -0
- package/dist/components/AddressBar/httpStatusCodeColors.js.map +1 -0
- package/dist/components/AddressBar/index.d.ts +1 -1
- package/dist/components/AddressBar/index.js +1 -4
- package/dist/components/CodeInput/CodeInput.vue.d.ts +1 -1
- package/dist/components/CodeInput/CodeInput.vue.js +10 -0
- package/dist/components/CodeInput/CodeInput.vue.js.map +1 -0
- package/dist/components/CodeInput/CodeInput.vue.script.js +294 -0
- package/dist/components/CodeInput/CodeInput.vue.script.js.map +1 -0
- package/dist/components/CodeInput/codeVariableWidget.d.ts +1 -1
- package/dist/components/CodeInput/codeVariableWidget.js +135 -0
- package/dist/components/CodeInput/codeVariableWidget.js.map +1 -0
- package/dist/components/CodeInput/index.d.ts +1 -1
- package/dist/components/CodeInput/index.js +1 -1
- package/dist/components/CommandPalette/CommandActionForm.vue.js +7 -0
- package/dist/components/CommandPalette/CommandActionForm.vue.js.map +1 -0
- package/dist/components/CommandPalette/CommandActionForm.vue.script.js +42 -0
- package/dist/components/CommandPalette/CommandActionForm.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/CommandActionInput.vue.js +7 -0
- package/dist/components/CommandPalette/CommandActionInput.vue.js.map +1 -0
- package/dist/components/CommandPalette/CommandActionInput.vue.script.js +55 -0
- package/dist/components/CommandPalette/CommandActionInput.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteCollection.vue.js +7 -0
- package/dist/components/CommandPalette/CommandPaletteCollection.vue.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteCollection.vue.script.js +78 -0
- package/dist/components/CommandPalette/CommandPaletteCollection.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteExample.vue.js +7 -0
- package/dist/components/CommandPalette/CommandPaletteExample.vue.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteExample.vue.script.js +104 -0
- package/dist/components/CommandPalette/CommandPaletteExample.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteImport.vue.js +7 -0
- package/dist/components/CommandPalette/CommandPaletteImport.vue.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteImport.vue.script.js +181 -0
- package/dist/components/CommandPalette/CommandPaletteImport.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteImportCurl.vue.js +9 -0
- package/dist/components/CommandPalette/CommandPaletteImportCurl.vue.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteImportCurl.vue.script.js +108 -0
- package/dist/components/CommandPalette/CommandPaletteImportCurl.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteServer.vue.js +7 -0
- package/dist/components/CommandPalette/CommandPaletteServer.vue.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteServer.vue.script.js +108 -0
- package/dist/components/CommandPalette/CommandPaletteServer.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteTag.vue.js +7 -0
- package/dist/components/CommandPalette/CommandPaletteTag.vue.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteTag.vue.script.js +70 -0
- package/dist/components/CommandPalette/CommandPaletteTag.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteWorkspace.vue.js +7 -0
- package/dist/components/CommandPalette/CommandPaletteWorkspace.vue.js.map +1 -0
- package/dist/components/CommandPalette/CommandPaletteWorkspace.vue.script.js +49 -0
- package/dist/components/CommandPalette/CommandPaletteWorkspace.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/TheCommandPalette.vue.js +9 -0
- package/dist/components/CommandPalette/TheCommandPalette.vue.js.map +1 -0
- package/dist/components/CommandPalette/TheCommandPalette.vue.script.js +323 -0
- package/dist/components/CommandPalette/TheCommandPalette.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/WatchModeToggle.vue.js +7 -0
- package/dist/components/CommandPalette/WatchModeToggle.vue.js.map +1 -0
- package/dist/components/CommandPalette/WatchModeToggle.vue.script.js +40 -0
- package/dist/components/CommandPalette/WatchModeToggle.vue.script.js.map +1 -0
- package/dist/components/CommandPalette/index.d.ts +1 -1
- package/dist/components/CommandPalette/index.js +1 -2
- package/dist/components/DataTable/DataTable.vue.js +7 -0
- package/dist/components/DataTable/DataTable.vue.js.map +1 -0
- package/dist/components/DataTable/DataTable.vue.script.js +30 -0
- package/dist/components/DataTable/DataTable.vue.script.js.map +1 -0
- package/dist/components/DataTable/DataTableCell.vue.js +7 -0
- package/dist/components/DataTable/DataTableCell.vue.js.map +1 -0
- package/dist/components/DataTable/DataTableCell.vue.script.js +21 -0
- package/dist/components/DataTable/DataTableCell.vue.script.js.map +1 -0
- package/dist/components/DataTable/DataTableCheckbox.vue.js +7 -0
- package/dist/components/DataTable/DataTableCheckbox.vue.js.map +1 -0
- package/dist/components/DataTable/DataTableCheckbox.vue.script.js +43 -0
- package/dist/components/DataTable/DataTableCheckbox.vue.script.js.map +1 -0
- package/dist/components/DataTable/DataTableHeader.vue.js +7 -0
- package/dist/components/DataTable/DataTableHeader.vue.js.map +1 -0
- package/dist/components/DataTable/DataTableHeader.vue.script.js +20 -0
- package/dist/components/DataTable/DataTableHeader.vue.script.js.map +1 -0
- package/dist/components/DataTable/DataTableInput.vue.d.ts +1 -1
- package/dist/components/DataTable/DataTableInput.vue.js +9 -0
- package/dist/components/DataTable/DataTableInput.vue.js.map +1 -0
- package/dist/components/DataTable/DataTableInput.vue.script.js +164 -0
- package/dist/components/DataTable/DataTableInput.vue.script.js.map +1 -0
- package/dist/components/DataTable/DataTableInputSelect.vue.js +7 -0
- package/dist/components/DataTable/DataTableInputSelect.vue.js.map +1 -0
- package/dist/components/DataTable/DataTableInputSelect.vue.script.js +150 -0
- package/dist/components/DataTable/DataTableInputSelect.vue.script.js.map +1 -0
- package/dist/components/DataTable/DataTableRow.vue.js +13 -0
- package/dist/components/DataTable/DataTableRow.vue.js.map +1 -0
- package/dist/components/DataTable/DataTableText.vue.js +7 -0
- package/dist/components/DataTable/DataTableText.vue.js.map +1 -0
- package/dist/components/DataTable/DataTableText.vue.script.js +20 -0
- package/dist/components/DataTable/DataTableText.vue.script.js.map +1 -0
- package/dist/components/DataTable/index.d.ts +8 -8
- package/dist/components/DataTable/index.js +8 -5
- package/dist/components/EmptyState.vue.js +9 -0
- package/dist/components/EmptyState.vue.js.map +1 -0
- package/dist/components/EmptyState.vue.script.js +41 -0
- package/dist/components/EmptyState.vue.script.js.map +1 -0
- package/dist/components/EnvironmentSelector/EnvironmentSelector.vue.js +7 -0
- package/dist/components/EnvironmentSelector/EnvironmentSelector.vue.js.map +1 -0
- package/dist/components/EnvironmentSelector/EnvironmentSelector.vue.script.js +111 -0
- package/dist/components/EnvironmentSelector/EnvironmentSelector.vue.script.js.map +1 -0
- package/dist/components/Form/Form.vue.js +7 -0
- package/dist/components/Form/Form.vue.js.map +1 -0
- package/dist/components/Form/Form.vue.script.js +82 -0
- package/dist/components/Form/Form.vue.script.js.map +1 -0
- package/dist/components/Form/LabelInput.vue.d.ts +1 -1
- package/dist/components/Form/LabelInput.vue.js +9 -0
- package/dist/components/Form/LabelInput.vue.js.map +1 -0
- package/dist/components/Form/LabelInput.vue.script.js +39 -0
- package/dist/components/Form/LabelInput.vue.script.js.map +1 -0
- package/dist/components/HelpfulLink.vue.js +7 -0
- package/dist/components/HelpfulLink.vue.js.map +1 -0
- package/dist/components/HelpfulLink.vue.script.js +21 -0
- package/dist/components/HelpfulLink.vue.script.js.map +1 -0
- package/dist/components/HttpMethod/HttpMethod.vue.js +9 -0
- package/dist/components/HttpMethod/HttpMethod.vue.js.map +1 -0
- package/dist/components/HttpMethod/HttpMethod.vue.script.js +76 -0
- package/dist/components/HttpMethod/HttpMethod.vue.script.js.map +1 -0
- package/dist/components/HttpMethod/index.d.ts +1 -1
- package/dist/components/HttpMethod/index.js +1 -1
- package/dist/components/IconSelector.vue.js +7 -0
- package/dist/components/IconSelector.vue.js.map +1 -0
- package/dist/components/IconSelector.vue.script.js +65 -0
- package/dist/components/IconSelector.vue.script.js.map +1 -0
- package/dist/components/ImportCollection/DropEventListener.vue.js +7 -0
- package/dist/components/ImportCollection/DropEventListener.vue.js.map +1 -0
- package/dist/components/ImportCollection/DropEventListener.vue.script.js +91 -0
- package/dist/components/ImportCollection/DropEventListener.vue.script.js.map +1 -0
- package/dist/components/ImportCollection/ImportCollectionListener.vue.js +7 -0
- package/dist/components/ImportCollection/ImportCollectionListener.vue.js.map +1 -0
- package/dist/components/ImportCollection/ImportCollectionListener.vue.script.js +102 -0
- package/dist/components/ImportCollection/ImportCollectionListener.vue.script.js.map +1 -0
- package/dist/components/ImportCollection/ImportCollectionModal.vue.d.ts.map +1 -1
- package/dist/components/ImportCollection/ImportCollectionModal.vue.js +8 -0
- package/dist/components/ImportCollection/ImportCollectionModal.vue.js.map +1 -0
- package/dist/components/ImportCollection/ImportCollectionModal.vue.script.js +206 -0
- package/dist/components/ImportCollection/ImportCollectionModal.vue.script.js.map +1 -0
- package/dist/components/ImportCollection/ImportNowButton.vue.js +7 -0
- package/dist/components/ImportCollection/ImportNowButton.vue.js.map +1 -0
- package/dist/components/ImportCollection/ImportNowButton.vue.script.js +82 -0
- package/dist/components/ImportCollection/ImportNowButton.vue.script.js.map +1 -0
- package/dist/components/ImportCollection/IntegrationLogo.vue.js +7 -0
- package/dist/components/ImportCollection/IntegrationLogo.vue.js.map +1 -0
- package/dist/components/ImportCollection/IntegrationLogo.vue.script.js +50 -0
- package/dist/components/ImportCollection/IntegrationLogo.vue.script.js.map +1 -0
- package/dist/components/ImportCollection/PasteEventListener.vue.js +7 -0
- package/dist/components/ImportCollection/PasteEventListener.vue.js.map +1 -0
- package/dist/components/ImportCollection/PasteEventListener.vue.script.js +31 -0
- package/dist/components/ImportCollection/PasteEventListener.vue.script.js.map +1 -0
- package/dist/components/ImportCollection/PrefetchError.vue.js +7 -0
- package/dist/components/ImportCollection/PrefetchError.vue.js.map +1 -0
- package/dist/components/ImportCollection/PrefetchError.vue.script.js +32 -0
- package/dist/components/ImportCollection/PrefetchError.vue.script.js.map +1 -0
- package/dist/components/ImportCollection/UrlQueryParameterChecker.vue.js +7 -0
- package/dist/components/ImportCollection/UrlQueryParameterChecker.vue.js.map +1 -0
- package/dist/components/ImportCollection/UrlQueryParameterChecker.vue.script.js +21 -0
- package/dist/components/ImportCollection/UrlQueryParameterChecker.vue.script.js.map +1 -0
- package/dist/components/ImportCollection/WorkspaceSelector.vue.js +7 -0
- package/dist/components/ImportCollection/WorkspaceSelector.vue.js.map +1 -0
- package/dist/components/ImportCollection/WorkspaceSelector.vue.script.js +114 -0
- package/dist/components/ImportCollection/WorkspaceSelector.vue.script.js.map +1 -0
- package/dist/components/ImportCollection/hooks/useUrlPrefetcher.js +109 -0
- package/dist/components/ImportCollection/hooks/useUrlPrefetcher.js.map +1 -0
- package/dist/components/ImportCollection/index.d.ts +1 -1
- package/dist/components/ImportCollection/index.js +1 -1
- package/dist/components/ImportCollection/utils/get-openapi-version.js +26 -0
- package/dist/components/ImportCollection/utils/get-openapi-version.js.map +1 -0
- package/dist/components/ImportCollection/utils/import-collection.js +23 -0
- package/dist/components/ImportCollection/utils/import-collection.js.map +1 -0
- package/dist/components/ImportCollection/utils/is-document.js +12 -0
- package/dist/components/ImportCollection/utils/is-document.js.map +1 -0
- package/dist/components/ImportCollection/utils/is-url.js +14 -0
- package/dist/components/ImportCollection/utils/is-url.js.map +1 -0
- package/dist/components/ImportCollection/utils/workspace-store-is-empty.js +13 -0
- package/dist/components/ImportCollection/utils/workspace-store-is-empty.js.map +1 -0
- package/dist/components/OpenApiClientButton.vue.js +9 -0
- package/dist/components/OpenApiClientButton.vue.js.map +1 -0
- package/dist/components/OpenApiClientButton.vue.script.js +58 -0
- package/dist/components/OpenApiClientButton.vue.script.js.map +1 -0
- package/dist/components/ScalarAsciiArt.vue.js +9 -0
- package/dist/components/ScalarAsciiArt.vue.js.map +1 -0
- package/dist/components/ScalarAsciiArt.vue.script.js +42 -0
- package/dist/components/ScalarAsciiArt.vue.script.js.map +1 -0
- package/dist/components/Search/useSearch.js +110 -0
- package/dist/components/Search/useSearch.js.map +1 -0
- package/dist/components/SectionFilter.vue.js +9 -0
- package/dist/components/SectionFilter.vue.js.map +1 -0
- package/dist/components/SectionFilter.vue.script.js +69 -0
- package/dist/components/SectionFilter.vue.script.js.map +1 -0
- package/dist/components/SectionFilterButton.vue.js +7 -0
- package/dist/components/SectionFilterButton.vue.js.map +1 -0
- package/dist/components/SectionFilterButton.vue.script.js +30 -0
- package/dist/components/SectionFilterButton.vue.script.js.map +1 -0
- package/dist/components/Server/ServerDropdown.vue.js +7 -0
- package/dist/components/Server/ServerDropdown.vue.js.map +1 -0
- package/dist/components/Server/ServerDropdown.vue.script.js +133 -0
- package/dist/components/Server/ServerDropdown.vue.script.js.map +1 -0
- package/dist/components/Server/ServerDropdownItem.vue.js +9 -0
- package/dist/components/Server/ServerDropdownItem.vue.js.map +1 -0
- package/dist/components/Server/ServerDropdownItem.vue.script.js +90 -0
- package/dist/components/Server/ServerDropdownItem.vue.script.js.map +1 -0
- package/dist/components/Server/ServerSelector.vue.js +7 -0
- package/dist/components/Server/ServerSelector.vue.js.map +1 -0
- package/dist/components/Server/ServerSelector.vue.script.js +87 -0
- package/dist/components/Server/ServerSelector.vue.script.js.map +1 -0
- package/dist/components/Server/ServerVariablesForm.vue.js +7 -0
- package/dist/components/Server/ServerVariablesForm.vue.js.map +1 -0
- package/dist/components/Server/ServerVariablesForm.vue.script.js +64 -0
- package/dist/components/Server/ServerVariablesForm.vue.script.js.map +1 -0
- package/dist/components/Server/ServerVariablesSelect.vue.js +7 -0
- package/dist/components/Server/ServerVariablesSelect.vue.js.map +1 -0
- package/dist/components/Server/ServerVariablesSelect.vue.script.js +53 -0
- package/dist/components/Server/ServerVariablesSelect.vue.script.js.map +1 -0
- package/dist/components/Server/ServerVariablesTextbox.vue.js +7 -0
- package/dist/components/Server/ServerVariablesTextbox.vue.js.map +1 -0
- package/dist/components/Server/ServerVariablesTextbox.vue.script.js +34 -0
- package/dist/components/Server/ServerVariablesTextbox.vue.script.js.map +1 -0
- package/dist/components/Server/index.d.ts +3 -3
- package/dist/components/Server/index.js +3 -2
- package/dist/components/SideNav/DownloadAppButton.vue.js +9 -0
- package/dist/components/SideNav/DownloadAppButton.vue.js.map +1 -0
- package/dist/components/SideNav/DownloadAppButton.vue.script.js +31 -0
- package/dist/components/SideNav/DownloadAppButton.vue.script.js.map +1 -0
- package/dist/components/SideNav/SideHelp.vue.js +7 -0
- package/dist/components/SideNav/SideHelp.vue.js.map +1 -0
- package/dist/components/SideNav/SideHelp.vue.script.js +102 -0
- package/dist/components/SideNav/SideHelp.vue.script.js.map +1 -0
- package/dist/components/SideNav/SideNav.vue.js +7 -0
- package/dist/components/SideNav/SideNav.vue.js.map +1 -0
- package/dist/components/SideNav/SideNav.vue.script.js +80 -0
- package/dist/components/SideNav/SideNav.vue.script.js.map +1 -0
- package/dist/components/SideNav/SideNavGroup.vue.js +7 -0
- package/dist/components/SideNav/SideNavGroup.vue.js.map +1 -0
- package/dist/components/SideNav/SideNavGroup.vue.script.js +16 -0
- package/dist/components/SideNav/SideNavGroup.vue.script.js.map +1 -0
- package/dist/components/SideNav/SideNavLink.vue.js +7 -0
- package/dist/components/SideNav/SideNavLink.vue.js.map +1 -0
- package/dist/components/SideNav/SideNavLink.vue.script.js +32 -0
- package/dist/components/SideNav/SideNavLink.vue.script.js.map +1 -0
- package/dist/components/SideNav/SideNavRouterLink.vue.js +7 -0
- package/dist/components/SideNav/SideNavRouterLink.vue.js.map +1 -0
- package/dist/components/SideNav/SideNavRouterLink.vue.script.js +34 -0
- package/dist/components/SideNav/SideNavRouterLink.vue.script.js.map +1 -0
- package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.js +7 -0
- package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.js.map +1 -0
- package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.script.js +38 -0
- package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.script.js.map +1 -0
- package/dist/components/Sidebar/Actions/EditSidebarListCollection.vue.js +7 -0
- package/dist/components/Sidebar/Actions/EditSidebarListCollection.vue.js.map +1 -0
- package/dist/components/Sidebar/Actions/EditSidebarListCollection.vue.script.js +56 -0
- package/dist/components/Sidebar/Actions/EditSidebarListCollection.vue.script.js.map +1 -0
- package/dist/components/Sidebar/Actions/EditSidebarListElement.vue.js +7 -0
- package/dist/components/Sidebar/Actions/EditSidebarListElement.vue.js.map +1 -0
- package/dist/components/Sidebar/Actions/EditSidebarListElement.vue.script.js +31 -0
- package/dist/components/Sidebar/Actions/EditSidebarListElement.vue.script.js.map +1 -0
- package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.js +7 -0
- package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.js.map +1 -0
- package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.script.js +41 -0
- package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.script.js.map +1 -0
- package/dist/components/Sidebar/Sidebar.vue.js +9 -0
- package/dist/components/Sidebar/Sidebar.vue.js.map +1 -0
- package/dist/components/Sidebar/Sidebar.vue.script.js +71 -0
- package/dist/components/Sidebar/Sidebar.vue.script.js.map +1 -0
- package/dist/components/Sidebar/SidebarButton.vue.js +7 -0
- package/dist/components/Sidebar/SidebarButton.vue.js.map +1 -0
- package/dist/components/Sidebar/SidebarButton.vue.script.js +36 -0
- package/dist/components/Sidebar/SidebarButton.vue.script.js.map +1 -0
- package/dist/components/Sidebar/SidebarList.vue.js +13 -0
- package/dist/components/Sidebar/SidebarList.vue.js.map +1 -0
- package/dist/components/Sidebar/SidebarListElement.vue.js +10 -0
- package/dist/components/Sidebar/SidebarListElement.vue.js.map +1 -0
- package/dist/components/Sidebar/SidebarListElement.vue.script.js +128 -0
- package/dist/components/Sidebar/SidebarListElement.vue.script.js.map +1 -0
- package/dist/components/Sidebar/SidebarListElementActions.vue.js +7 -0
- package/dist/components/Sidebar/SidebarListElementActions.vue.js.map +1 -0
- package/dist/components/Sidebar/SidebarListElementActions.vue.script.js +97 -0
- package/dist/components/Sidebar/SidebarListElementActions.vue.script.js.map +1 -0
- package/dist/components/Sidebar/SidebarToggle.vue.js +7 -0
- package/dist/components/Sidebar/SidebarToggle.vue.js.map +1 -0
- package/dist/components/Sidebar/SidebarToggle.vue.script.js +47 -0
- package/dist/components/Sidebar/SidebarToggle.vue.script.js.map +1 -0
- package/dist/components/Sidebar/index.d.ts +1 -1
- package/dist/components/Sidebar/index.js +1 -1
- package/dist/components/TopNav/TopNav.vue.js +7 -0
- package/dist/components/TopNav/TopNav.vue.js.map +1 -0
- package/dist/components/TopNav/TopNav.vue.script.js +232 -0
- package/dist/components/TopNav/TopNav.vue.script.js.map +1 -0
- package/dist/components/TopNav/TopNavItem.vue.d.ts.map +1 -1
- package/dist/components/TopNav/TopNavItem.vue.js +9 -0
- package/dist/components/TopNav/TopNavItem.vue.js.map +1 -0
- package/dist/components/TopNav/TopNavItem.vue.script.js +129 -0
- package/dist/components/TopNav/TopNavItem.vue.script.js.map +1 -0
- package/dist/components/ViewLayout/ViewLayout.vue.js +7 -0
- package/dist/components/ViewLayout/ViewLayout.vue.js.map +1 -0
- package/dist/components/ViewLayout/ViewLayout.vue.script.js +16 -0
- package/dist/components/ViewLayout/ViewLayout.vue.script.js.map +1 -0
- package/dist/components/ViewLayout/ViewLayoutCollapse.vue.js +7 -0
- package/dist/components/ViewLayout/ViewLayoutCollapse.vue.js.map +1 -0
- package/dist/components/ViewLayout/ViewLayoutCollapse.vue.script.js +84 -0
- package/dist/components/ViewLayout/ViewLayoutCollapse.vue.script.js.map +1 -0
- package/dist/components/ViewLayout/ViewLayoutContent.vue.js +13 -0
- package/dist/components/ViewLayout/ViewLayoutContent.vue.js.map +1 -0
- package/dist/components/ViewLayout/ViewLayoutSection.vue.js +7 -0
- package/dist/components/ViewLayout/ViewLayoutSection.vue.js.map +1 -0
- package/dist/components/ViewLayout/ViewLayoutSection.vue.script.js +21 -0
- package/dist/components/ViewLayout/ViewLayoutSection.vue.script.js.map +1 -0
- package/dist/components/ViewLayout/index.d.ts +1 -1
- package/dist/components/ViewLayout/index.js +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +3 -6
- package/dist/constants.js +27 -0
- package/dist/constants.js.map +1 -0
- package/dist/data/httpHeaders.js +539 -0
- package/dist/data/httpHeaders.js.map +1 -0
- package/dist/hooks/index.d.ts +4 -4
- package/dist/hooks/index.js +4 -2
- package/dist/hooks/useClientConfig.js +10 -0
- package/dist/hooks/useClientConfig.js.map +1 -0
- package/dist/hooks/useFileDialog.js +33 -0
- package/dist/hooks/useFileDialog.js.map +1 -0
- package/dist/hooks/useLayout.js +13 -0
- package/dist/hooks/useLayout.js.map +1 -0
- package/dist/hooks/useResponseBody.js +32 -0
- package/dist/hooks/useResponseBody.js.map +1 -0
- package/dist/hooks/useSidebar.d.ts +1 -1
- package/dist/hooks/useSidebar.js +36 -0
- package/dist/hooks/useSidebar.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -7
- package/dist/layouts/App/ApiClientApp.vue.js +8 -0
- package/dist/layouts/App/ApiClientApp.vue.js.map +1 -0
- package/dist/layouts/App/ApiClientApp.vue.script.js +80 -0
- package/dist/layouts/App/ApiClientApp.vue.script.js.map +1 -0
- package/dist/layouts/App/MainLayout.vue.js +7 -0
- package/dist/layouts/App/MainLayout.vue.js.map +1 -0
- package/dist/layouts/App/MainLayout.vue.script.js +22 -0
- package/dist/layouts/App/MainLayout.vue.script.js.map +1 -0
- package/dist/layouts/App/create-api-client-app.d.ts +1 -1
- package/dist/layouts/App/create-api-client-app.d.ts.map +1 -1
- package/dist/layouts/App/create-api-client-app.js +36 -0
- package/dist/layouts/App/create-api-client-app.js.map +1 -0
- package/dist/layouts/App/hotkeys.js +74 -0
- package/dist/layouts/App/hotkeys.js.map +1 -0
- package/dist/layouts/App/index.d.ts +2 -2
- package/dist/layouts/App/index.js +2 -4
- package/dist/layouts/Modal/ApiClientModal.vue.js +7 -0
- package/dist/layouts/Modal/ApiClientModal.vue.js.map +1 -0
- package/dist/layouts/Modal/ApiClientModal.vue.script.js +41 -0
- package/dist/layouts/Modal/ApiClientModal.vue.script.js.map +1 -0
- package/dist/layouts/Modal/create-api-client-modal.js +34 -0
- package/dist/layouts/Modal/create-api-client-modal.js.map +1 -0
- package/dist/layouts/Modal/index.d.ts +1 -1
- package/dist/layouts/Modal/index.js +1 -2
- package/dist/layouts/Web/ApiClientWeb.vue.js +8 -0
- package/dist/layouts/Web/ApiClientWeb.vue.js.map +1 -0
- package/dist/layouts/Web/ApiClientWeb.vue.script.js +68 -0
- package/dist/layouts/Web/ApiClientWeb.vue.script.js.map +1 -0
- package/dist/layouts/Web/create-api-client-web.d.ts +1 -1
- package/dist/layouts/Web/create-api-client-web.d.ts.map +1 -1
- package/dist/layouts/Web/create-api-client-web.js +33 -0
- package/dist/layouts/Web/create-api-client-web.js.map +1 -0
- package/dist/layouts/Web/index.d.ts +2 -2
- package/dist/layouts/Web/index.js +2 -101
- package/dist/libs/create-client.d.ts +9 -9
- package/dist/libs/create-client.js +178 -0
- package/dist/libs/create-client.js.map +1 -0
- package/dist/libs/electron.js +9 -0
- package/dist/libs/electron.js.map +1 -0
- package/dist/libs/env-helpers.js +9 -0
- package/dist/libs/env-helpers.js.map +1 -0
- package/dist/libs/environment-parser.d.ts +1 -1
- package/dist/libs/environment-parser.js +19 -0
- package/dist/libs/environment-parser.js.map +1 -0
- package/dist/libs/errors.js +34 -0
- package/dist/libs/errors.js.map +1 -0
- package/dist/libs/event-bus.js +43 -0
- package/dist/libs/event-bus.js.map +1 -0
- package/dist/libs/extractAttachmentFilename.js +23 -0
- package/dist/libs/extractAttachmentFilename.js.map +1 -0
- package/dist/libs/find-request.js +40 -0
- package/dist/libs/find-request.js.map +1 -0
- package/dist/libs/formatters.js +36 -0
- package/dist/libs/formatters.js.map +1 -0
- package/dist/libs/get-request-uid-by-path-method.d.ts +1 -1
- package/dist/libs/get-request-uid-by-path-method.js +19 -0
- package/dist/libs/get-request-uid-by-path-method.js.map +1 -0
- package/dist/libs/getOpenApiDocumentDetails.js +45 -0
- package/dist/libs/getOpenApiDocumentDetails.js.map +1 -0
- package/dist/libs/hot-keys.js +92 -0
- package/dist/libs/hot-keys.js.map +1 -0
- package/dist/libs/importers/curl.js +54 -0
- package/dist/libs/importers/curl.js.map +1 -0
- package/dist/libs/importers/index.d.ts +1 -1
- package/dist/libs/importers/index.js +1 -1
- package/dist/libs/index.d.ts +14 -14
- package/dist/libs/index.js +17 -5
- package/dist/libs/isUrl.js +12 -0
- package/dist/libs/isUrl.js.map +1 -0
- package/dist/libs/local-storage.js +40 -0
- package/dist/libs/local-storage.js.map +1 -0
- package/dist/libs/normalize-headers.js +55 -0
- package/dist/libs/normalize-headers.js.map +1 -0
- package/dist/libs/parse-curl.js +106 -0
- package/dist/libs/parse-curl.js.map +1 -0
- package/dist/libs/postman.js +40 -0
- package/dist/libs/postman.js.map +1 -0
- package/dist/libs/send-request/build-request-security.js +41 -0
- package/dist/libs/send-request/build-request-security.js.map +1 -0
- package/dist/libs/send-request/create-fetch-body.js +44 -0
- package/dist/libs/send-request/create-fetch-body.js.map +1 -0
- package/dist/libs/send-request/create-fetch-headers.js +15 -0
- package/dist/libs/send-request/create-fetch-headers.js.map +1 -0
- package/dist/libs/send-request/create-fetch-query-params.js +43 -0
- package/dist/libs/send-request/create-fetch-query-params.js.map +1 -0
- package/dist/libs/send-request/create-request-operation.d.ts +2 -2
- package/dist/libs/send-request/create-request-operation.js +172 -0
- package/dist/libs/send-request/create-request-operation.js.map +1 -0
- package/dist/libs/send-request/decode-buffer.js +13 -0
- package/dist/libs/send-request/decode-buffer.js.map +1 -0
- package/dist/libs/send-request/index.d.ts +3 -3
- package/dist/libs/send-request/index.js +3 -2
- package/dist/libs/send-request/set-request-cookies.js +82 -0
- package/dist/libs/send-request/set-request-cookies.js.map +1 -0
- package/dist/libs/string-template.js +64 -0
- package/dist/libs/string-template.js.map +1 -0
- package/dist/libs/validate-parameters.js +35 -0
- package/dist/libs/validate-parameters.js.map +1 -0
- package/dist/plugins/hooks/usePluginManager.d.ts +1 -1
- package/dist/plugins/hooks/usePluginManager.js +16 -0
- package/dist/plugins/hooks/usePluginManager.js.map +1 -0
- package/dist/plugins/index.d.ts +2 -2
- package/dist/plugins/index.js +2 -1
- package/dist/plugins/plugin-manager.js +38 -0
- package/dist/plugins/plugin-manager.js.map +1 -0
- package/dist/routes.js +225 -0
- package/dist/routes.js.map +1 -0
- package/dist/store/active-entities.js +139 -0
- package/dist/store/active-entities.js.map +1 -0
- package/dist/store/collections.js +76 -0
- package/dist/store/collections.js.map +1 -0
- package/dist/store/cookies.js +16 -0
- package/dist/store/cookies.js.map +1 -0
- package/dist/store/environment.js +38 -0
- package/dist/store/environment.js.map +1 -0
- package/dist/store/events.d.ts +7 -7
- package/dist/store/events.js +17 -0
- package/dist/store/events.js.map +1 -0
- package/dist/store/import-spec.js +56 -0
- package/dist/store/import-spec.js.map +1 -0
- package/dist/store/index.d.ts +2 -2
- package/dist/store/index.js +2 -1
- package/dist/store/request-example.js +43 -0
- package/dist/store/request-example.js.map +1 -0
- package/dist/store/requests.d.ts +1 -1
- package/dist/store/requests.js +104 -0
- package/dist/store/requests.js.map +1 -0
- package/dist/store/router-params.js +27 -0
- package/dist/store/router-params.js.map +1 -0
- package/dist/store/security-schemes.js +45 -0
- package/dist/store/security-schemes.js.map +1 -0
- package/dist/store/servers.js +41 -0
- package/dist/store/servers.js.map +1 -0
- package/dist/store/store.d.ts +1 -1
- package/dist/store/store.js +180 -0
- package/dist/store/store.js.map +1 -0
- package/dist/store/tags.js +54 -0
- package/dist/store/tags.js.map +1 -0
- package/dist/store/workspace.js +57 -0
- package/dist/store/workspace.js.map +1 -0
- package/dist/style.css +2793 -2639
- package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts +2 -2
- package/dist/v2/blocks/operation-block/OperationBlock.vue.js +7 -0
- package/dist/v2/blocks/operation-block/OperationBlock.vue.js.map +1 -0
- package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js +302 -0
- package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js.map +1 -0
- package/dist/v2/blocks/operation-block/components/Header.vue.js +9 -0
- package/dist/v2/blocks/operation-block/components/Header.vue.js.map +1 -0
- package/dist/v2/blocks/operation-block/components/Header.vue.script.js +126 -0
- package/dist/v2/blocks/operation-block/components/Header.vue.script.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/apply-allow-reserved-to-url.js +58 -0
- package/dist/v2/blocks/operation-block/helpers/apply-allow-reserved-to-url.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/build-request-body.js +65 -0
- package/dist/v2/blocks/operation-block/helpers/build-request-body.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/build-request-cookie-header.js +55 -0
- package/dist/v2/blocks/operation-block/helpers/build-request-cookie-header.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/build-request-parameters.js +159 -0
- package/dist/v2/blocks/operation-block/helpers/build-request-parameters.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/build-request-security.d.ts +1 -1
- package/dist/v2/blocks/operation-block/helpers/build-request-security.js +53 -0
- package/dist/v2/blocks/operation-block/helpers/build-request-security.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/build-request.d.ts +1 -1
- package/dist/v2/blocks/operation-block/helpers/build-request.js +102 -0
- package/dist/v2/blocks/operation-block/helpers/build-request.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/de-serialize-parameter.js +41 -0
- package/dist/v2/blocks/operation-block/helpers/de-serialize-parameter.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/decode-buffer.js +17 -0
- package/dist/v2/blocks/operation-block/helpers/decode-buffer.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/filter-global-cookies.js +20 -0
- package/dist/v2/blocks/operation-block/helpers/filter-global-cookies.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/get-cookie-header-keys.js +22 -0
- package/dist/v2/blocks/operation-block/helpers/get-cookie-header-keys.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/get-environment-variables.js +17 -0
- package/dist/v2/blocks/operation-block/helpers/get-environment-variables.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/get-example.js +41 -0
- package/dist/v2/blocks/operation-block/helpers/get-example.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/get-resolved-url.js +32 -0
- package/dist/v2/blocks/operation-block/helpers/get-resolved-url.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/get-selected-body-content-type.js +15 -0
- package/dist/v2/blocks/operation-block/helpers/get-selected-body-content-type.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/get-server-url.js +18 -0
- package/dist/v2/blocks/operation-block/helpers/get-server-url.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/har-to-fetch-request.js +80 -0
- package/dist/v2/blocks/operation-block/helpers/har-to-fetch-request.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.d.ts +1 -1
- package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.js +109 -0
- package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/response-cache.js +34 -0
- package/dist/v2/blocks/operation-block/helpers/response-cache.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/send-request.d.ts +1 -1
- package/dist/v2/blocks/operation-block/helpers/send-request.js +149 -0
- package/dist/v2/blocks/operation-block/helpers/send-request.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/serialize-parameter.js +160 -0
- package/dist/v2/blocks/operation-block/helpers/serialize-parameter.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/validate-path-parameters.js +34 -0
- package/dist/v2/blocks/operation-block/helpers/validate-path-parameters.js.map +1 -0
- package/dist/v2/blocks/operation-block/index.d.ts +4 -4
- package/dist/v2/blocks/operation-block/index.js +4 -19
- package/dist/v2/blocks/operation-code-sample/components/ExamplePicker.vue.js +7 -0
- package/dist/v2/blocks/operation-code-sample/components/ExamplePicker.vue.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/components/ExamplePicker.vue.script.js +52 -0
- package/dist/v2/blocks/operation-code-sample/components/ExamplePicker.vue.script.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/components/HttpMethod.vue.js +7 -0
- package/dist/v2/blocks/operation-code-sample/components/HttpMethod.vue.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/components/HttpMethod.vue.script.js +33 -0
- package/dist/v2/blocks/operation-code-sample/components/HttpMethod.vue.script.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.d.ts.map +1 -1
- package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.js +9 -0
- package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.script.js +246 -0
- package/dist/v2/blocks/operation-code-sample/components/OperationCodeSample.vue.script.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/filter-clients-by-query.d.ts +9 -0
- package/dist/v2/blocks/operation-code-sample/helpers/filter-clients-by-query.d.ts.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/filter-clients-by-query.js +37 -0
- package/dist/v2/blocks/operation-code-sample/helpers/filter-clients-by-query.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/find-client.js +55 -0
- package/dist/v2/blocks/operation-code-sample/helpers/find-client.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/generate-client-options.d.ts.map +1 -1
- package/dist/v2/blocks/operation-code-sample/helpers/generate-client-options.js +40 -0
- package/dist/v2/blocks/operation-code-sample/helpers/generate-client-options.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/generate-code-snippet.d.ts +1 -1
- package/dist/v2/blocks/operation-code-sample/helpers/generate-code-snippet.js +36 -0
- package/dist/v2/blocks/operation-code-sample/helpers/generate-code-snippet.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/get-clients.d.ts.map +1 -1
- package/dist/v2/blocks/operation-code-sample/helpers/get-clients.js +31 -0
- package/dist/v2/blocks/operation-code-sample/helpers/get-clients.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/get-custom-code-samples.js +18 -0
- package/dist/v2/blocks/operation-code-sample/helpers/get-custom-code-samples.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/get-example-from-schema.js +411 -0
- package/dist/v2/blocks/operation-code-sample/helpers/get-example-from-schema.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/get-resolved-ref-deep.js +41 -0
- package/dist/v2/blocks/operation-code-sample/helpers/get-resolved-ref-deep.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/get-secrets.js +18 -0
- package/dist/v2/blocks/operation-code-sample/helpers/get-secrets.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/operation-to-har.js +106 -0
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/operation-to-har.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-body.d.ts +1 -1
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-body.js +112 -0
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-body.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-parameters.js +216 -0
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-parameters.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-security-schemes.js +65 -0
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-security-schemes.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-server-url.js +19 -0
- package/dist/v2/blocks/operation-code-sample/helpers/operation-to-har/process-server-url.js.map +1 -0
- package/dist/v2/blocks/operation-code-sample/index.d.ts +7 -6
- package/dist/v2/blocks/operation-code-sample/index.d.ts.map +1 -1
- package/dist/v2/blocks/operation-code-sample/index.js +8 -2
- package/dist/v2/blocks/operation-code-sample/types.d.ts +7 -6
- package/dist/v2/blocks/operation-code-sample/types.d.ts.map +1 -1
- package/dist/v2/blocks/request-block/RequestBlock.vue.js +9 -0
- package/dist/v2/blocks/request-block/RequestBlock.vue.js.map +1 -0
- package/dist/v2/blocks/request-block/RequestBlock.vue.script.js +412 -0
- package/dist/v2/blocks/request-block/RequestBlock.vue.script.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestBody.vue.js +9 -0
- package/dist/v2/blocks/request-block/components/RequestBody.vue.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js +188 -0
- package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.js +7 -0
- package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js +98 -0
- package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.d.ts +1 -1
- package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.js +7 -0
- package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.script.js +128 -0
- package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.script.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestParams.vue.d.ts +1 -1
- package/dist/v2/blocks/request-block/components/RequestParams.vue.js +7 -0
- package/dist/v2/blocks/request-block/components/RequestParams.vue.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js +97 -0
- package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts +1 -1
- package/dist/v2/blocks/request-block/components/RequestTable.vue.js +9 -0
- package/dist/v2/blocks/request-block/components/RequestTable.vue.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js +113 -0
- package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestTableRow.vue.js +7 -0
- package/dist/v2/blocks/request-block/components/RequestTableRow.vue.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js +226 -0
- package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.js +9 -0
- package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.js.map +1 -0
- package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.script.js +68 -0
- package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.script.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.d.ts +1 -1
- package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js +47 -0
- package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/files.js +11 -0
- package/dist/v2/blocks/request-block/helpers/files.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/get-default-headers.js +61 -0
- package/dist/v2/blocks/request-block/helpers/get-default-headers.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/get-form-body-rows.d.ts +1 -1
- package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js +46 -0
- package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/get-parameter-content.js +17 -0
- package/dist/v2/blocks/request-block/helpers/get-parameter-content.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/get-parameter-schema.js +14 -0
- package/dist/v2/blocks/request-block/helpers/get-parameter-schema.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/get-request-body-example.js +21 -0
- package/dist/v2/blocks/request-block/helpers/get-request-body-example.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/group-by.js +15 -0
- package/dist/v2/blocks/request-block/helpers/group-by.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/is-param-disabled.js +20 -0
- package/dist/v2/blocks/request-block/helpers/is-param-disabled.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/validate-parameter.js +49 -0
- package/dist/v2/blocks/request-block/helpers/validate-parameter.js.map +1 -0
- package/dist/v2/blocks/request-block/index.d.ts +1 -1
- package/dist/v2/blocks/request-block/index.js +1 -8
- package/dist/v2/blocks/response-block/ResponseBlock.vue.js +9 -0
- package/dist/v2/blocks/response-block/ResponseBlock.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/ResponseBlock.vue.script.js +204 -0
- package/dist/v2/blocks/response-block/ResponseBlock.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/Headers.vue.js +7 -0
- package/dist/v2/blocks/response-block/components/Headers.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/Headers.vue.script.js +77 -0
- package/dist/v2/blocks/response-block/components/Headers.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBody.vue.js +9 -0
- package/dist/v2/blocks/response-block/components/ResponseBody.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBody.vue.script.js +90 -0
- package/dist/v2/blocks/response-block/components/ResponseBody.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.js +7 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.script.js +35 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyInfo.vue.js +14 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyInfo.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.js +9 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.script.js +64 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js +9 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js +49 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.js +7 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.script.js +111 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.js +7 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.script.js +25 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.js +8 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.script.js +50 -0
- package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseCookies.vue.js +7 -0
- package/dist/v2/blocks/response-block/components/ResponseCookies.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseCookies.vue.script.js +42 -0
- package/dist/v2/blocks/response-block/components/ResponseCookies.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.js +9 -0
- package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.script.js +69 -0
- package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.js +9 -0
- package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.script.js +52 -0
- package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.js +7 -0
- package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.js.map +1 -0
- package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.script.js +68 -0
- package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.script.js.map +1 -0
- package/dist/v2/blocks/response-block/helpers/extract-filename.js +26 -0
- package/dist/v2/blocks/response-block/helpers/extract-filename.js.map +1 -0
- package/dist/v2/blocks/response-block/helpers/get-content-length.js +12 -0
- package/dist/v2/blocks/response-block/helpers/get-content-length.js.map +1 -0
- package/dist/v2/blocks/response-block/helpers/media-types.js +227 -0
- package/dist/v2/blocks/response-block/helpers/media-types.js.map +1 -0
- package/dist/v2/blocks/response-block/helpers/parse-set-cookie.js +30 -0
- package/dist/v2/blocks/response-block/helpers/parse-set-cookie.js.map +1 -0
- package/dist/v2/blocks/response-block/helpers/process-response-body.js +26 -0
- package/dist/v2/blocks/response-block/helpers/process-response-body.js.map +1 -0
- package/dist/v2/blocks/response-block/index.d.ts +1 -1
- package/dist/v2/blocks/response-block/index.js +1 -5
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js +9 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js +248 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js +9 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js +84 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.js +7 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.script.js +141 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/httpStatusCodeColors.js +20 -0
- package/dist/v2/blocks/scalar-address-bar-block/components/httpStatusCodeColors.js.map +1 -0
- package/dist/v2/blocks/scalar-address-bar-block/hooks/use-loading-animation.js +84 -0
- package/dist/v2/blocks/scalar-address-bar-block/hooks/use-loading-animation.js.map +1 -0
- package/dist/v2/blocks/scalar-address-bar-block/index.d.ts +2 -2
- package/dist/v2/blocks/scalar-address-bar-block/index.js +1 -4
- package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.d.ts +3 -3
- package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.js +7 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js +227 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.js +7 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.script.js +48 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.js +7 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js +285 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.js +9 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.script.js +71 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.js +8 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.script.js +141 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.js +7 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.script.js +89 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.d.ts +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.js +7 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.script.js +95 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.js +7 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js +69 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.js +7 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js +296 -0
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/auth-options.js +92 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/auth-options.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/extract-security-scheme-secrets.js +141 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/extract-security-scheme-secrets.js.map +1 -0
- 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/fetch-openid-connect-discovery.js +45 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-openid-connect-discovery.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/is-auth-optional.js +10 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/is-auth-optional.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/merge-security.js +27 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/merge-security.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.d.ts +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js +183 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.d.ts +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.js +39 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.js +109 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/index.d.ts +4 -4
- package/dist/v2/blocks/scalar-auth-selector-block/index.js +3 -5
- package/dist/v2/components/callout/Callout.vue.js +9 -0
- package/dist/v2/components/callout/Callout.vue.js.map +1 -0
- package/dist/v2/components/callout/Callout.vue.script.js +35 -0
- package/dist/v2/components/callout/Callout.vue.script.js.map +1 -0
- package/dist/v2/components/code-input/CodeInput.vue.js +10 -0
- package/dist/v2/components/code-input/CodeInput.vue.js.map +1 -0
- package/dist/v2/components/code-input/CodeInput.vue.script.js +380 -0
- package/dist/v2/components/code-input/CodeInput.vue.script.js.map +1 -0
- package/dist/v2/components/code-input/code-variable-widget.js +132 -0
- package/dist/v2/components/code-input/code-variable-widget.js.map +1 -0
- package/dist/v2/components/code-input/index.d.ts +1 -1
- package/dist/v2/components/code-input/index.js +1 -1
- package/dist/v2/components/context-menu/ContextMenu.vue.d.ts +27 -0
- package/dist/v2/components/context-menu/ContextMenu.vue.d.ts.map +1 -0
- package/dist/v2/components/context-menu/ContextMenu.vue.js +8 -0
- package/dist/v2/components/context-menu/ContextMenu.vue.js.map +1 -0
- package/dist/v2/components/context-menu/ContextMenu.vue.script.js +53 -0
- package/dist/v2/components/context-menu/ContextMenu.vue.script.js.map +1 -0
- package/dist/v2/components/context-menu/index.d.ts +2 -0
- package/dist/v2/components/context-menu/index.d.ts.map +1 -0
- package/dist/v2/components/context-menu/index.js +2 -0
- package/dist/v2/components/data-table/DataTable.vue.js +7 -0
- package/dist/v2/components/data-table/DataTable.vue.js.map +1 -0
- package/dist/v2/components/data-table/DataTable.vue.script.js +30 -0
- package/dist/v2/components/data-table/DataTable.vue.script.js.map +1 -0
- package/dist/v2/components/data-table/DataTableCell.vue.js +7 -0
- package/dist/v2/components/data-table/DataTableCell.vue.js.map +1 -0
- package/dist/v2/components/data-table/DataTableCell.vue.script.js +21 -0
- package/dist/v2/components/data-table/DataTableCell.vue.script.js.map +1 -0
- package/dist/v2/components/data-table/DataTableCheckbox.vue.js +7 -0
- package/dist/v2/components/data-table/DataTableCheckbox.vue.js.map +1 -0
- package/dist/v2/components/data-table/DataTableCheckbox.vue.script.js +43 -0
- package/dist/v2/components/data-table/DataTableCheckbox.vue.script.js.map +1 -0
- package/dist/v2/components/data-table/DataTableHeader.vue.js +7 -0
- package/dist/v2/components/data-table/DataTableHeader.vue.js.map +1 -0
- package/dist/v2/components/data-table/DataTableHeader.vue.script.js +20 -0
- package/dist/v2/components/data-table/DataTableHeader.vue.script.js.map +1 -0
- package/dist/v2/components/data-table/DataTableInput.vue.js +9 -0
- package/dist/v2/components/data-table/DataTableInput.vue.js.map +1 -0
- package/dist/v2/components/data-table/DataTableInput.vue.script.js +160 -0
- package/dist/v2/components/data-table/DataTableInput.vue.script.js.map +1 -0
- package/dist/v2/components/data-table/DataTableInputSelect.vue.d.ts +1 -1
- package/dist/v2/components/data-table/DataTableInputSelect.vue.js +7 -0
- package/dist/v2/components/data-table/DataTableInputSelect.vue.js.map +1 -0
- package/dist/v2/components/data-table/DataTableInputSelect.vue.script.js +161 -0
- package/dist/v2/components/data-table/DataTableInputSelect.vue.script.js.map +1 -0
- package/dist/v2/components/data-table/DataTableRow.vue.js +13 -0
- package/dist/v2/components/data-table/DataTableRow.vue.js.map +1 -0
- package/dist/v2/components/data-table/DataTableText.vue.js +7 -0
- package/dist/v2/components/data-table/DataTableText.vue.js.map +1 -0
- package/dist/v2/components/data-table/DataTableText.vue.script.js +20 -0
- package/dist/v2/components/data-table/DataTableText.vue.script.js.map +1 -0
- package/dist/v2/components/data-table/index.d.ts +8 -8
- package/dist/v2/components/data-table/index.js +8 -2
- package/dist/v2/components/forms/ConfirmationForm.vue.js +7 -0
- package/dist/v2/components/forms/ConfirmationForm.vue.js.map +1 -0
- package/dist/v2/components/forms/ConfirmationForm.vue.script.js +40 -0
- package/dist/v2/components/forms/ConfirmationForm.vue.script.js.map +1 -0
- package/dist/v2/components/forms/index.d.ts +1 -1
- package/dist/v2/components/forms/index.js +1 -1
- package/dist/v2/components/layout/CollapsibleSection.vue.js +7 -0
- package/dist/v2/components/layout/CollapsibleSection.vue.js.map +1 -0
- package/dist/v2/components/layout/CollapsibleSection.vue.script.js +79 -0
- package/dist/v2/components/layout/CollapsibleSection.vue.script.js.map +1 -0
- package/dist/v2/components/layout/ValueEmitter.vue.js +7 -0
- package/dist/v2/components/layout/ValueEmitter.vue.js.map +1 -0
- package/dist/v2/components/layout/ValueEmitter.vue.script.js +18 -0
- package/dist/v2/components/layout/ValueEmitter.vue.script.js.map +1 -0
- package/dist/v2/components/layout/index.d.ts +1 -1
- package/dist/v2/components/layout/index.js +1 -1
- package/dist/v2/components/modals/DeleteModal.vue.js +7 -0
- package/dist/v2/components/modals/DeleteModal.vue.js.map +1 -0
- package/dist/v2/components/modals/DeleteModal.vue.script.js +36 -0
- package/dist/v2/components/modals/DeleteModal.vue.script.js.map +1 -0
- package/dist/v2/components/modals/ModalClientContainer.vue.js +9 -0
- package/dist/v2/components/modals/ModalClientContainer.vue.js.map +1 -0
- package/dist/v2/components/modals/ModalClientContainer.vue.script.js +62 -0
- package/dist/v2/components/modals/ModalClientContainer.vue.script.js.map +1 -0
- package/dist/v2/components/modals/index.d.ts +1 -1
- package/dist/v2/components/modals/index.js +1 -37
- package/dist/v2/components/resize/Resize.vue.js +10 -0
- package/dist/v2/components/resize/Resize.vue.js.map +1 -0
- package/dist/v2/components/resize/Resize.vue.script.js +52 -0
- package/dist/v2/components/resize/Resize.vue.script.js.map +1 -0
- package/dist/v2/components/resize/index.d.ts +2 -2
- package/dist/v2/components/resize/index.js +2 -1
- package/dist/v2/components/resize/use-split-resize.js +62 -0
- package/dist/v2/components/resize/use-split-resize.js.map +1 -0
- package/dist/v2/components/server/ServerDropdown.vue.js +7 -0
- package/dist/v2/components/server/ServerDropdown.vue.js.map +1 -0
- package/dist/v2/components/server/ServerDropdown.vue.script.js +95 -0
- package/dist/v2/components/server/ServerDropdown.vue.script.js.map +1 -0
- package/dist/v2/components/server/ServerDropdownItem.vue.js +9 -0
- package/dist/v2/components/server/ServerDropdownItem.vue.js.map +1 -0
- package/dist/v2/components/server/ServerDropdownItem.vue.script.js +46 -0
- package/dist/v2/components/server/ServerDropdownItem.vue.script.js.map +1 -0
- package/dist/v2/components/server/index.d.ts +1 -1
- package/dist/v2/components/server/index.js +1 -1
- package/dist/v2/components/sidebar/Sidebar.vue.js +7 -0
- package/dist/v2/components/sidebar/Sidebar.vue.js.map +1 -0
- package/dist/v2/components/sidebar/Sidebar.vue.script.js +117 -0
- package/dist/v2/components/sidebar/Sidebar.vue.script.js.map +1 -0
- package/dist/v2/components/sidebar/SidebarMenu.vue.js +7 -0
- package/dist/v2/components/sidebar/SidebarMenu.vue.js.map +1 -0
- package/dist/v2/components/sidebar/SidebarMenu.vue.script.js +52 -0
- package/dist/v2/components/sidebar/SidebarMenu.vue.script.js.map +1 -0
- package/dist/v2/components/sidebar/SidebarToggle.vue.js +7 -0
- package/dist/v2/components/sidebar/SidebarToggle.vue.js.map +1 -0
- package/dist/v2/components/sidebar/SidebarToggle.vue.script.js +54 -0
- package/dist/v2/components/sidebar/SidebarToggle.vue.script.js.map +1 -0
- package/dist/v2/components/sidebar/index.d.ts +3 -3
- package/dist/v2/components/sidebar/index.js +3 -2
- package/dist/v2/constants.js +7 -0
- package/dist/v2/constants.js.map +1 -0
- package/dist/v2/features/app/App.vue.d.ts +2 -2
- package/dist/v2/features/app/App.vue.d.ts.map +1 -1
- package/dist/v2/features/app/App.vue.js +8 -0
- package/dist/v2/features/app/App.vue.js.map +1 -0
- package/dist/v2/features/app/App.vue.script.js +177 -0
- package/dist/v2/features/app/App.vue.script.js.map +1 -0
- package/dist/v2/features/app/app-events.js +242 -0
- package/dist/v2/features/app/app-events.js.map +1 -0
- package/dist/v2/features/app/app-state.d.ts +3 -1
- package/dist/v2/features/app/app-state.d.ts.map +1 -1
- package/dist/v2/features/app/app-state.js +629 -0
- package/dist/v2/features/app/app-state.js.map +1 -0
- package/dist/v2/features/app/components/AppSidebar.vue.js +9 -0
- package/dist/v2/features/app/components/AppSidebar.vue.js.map +1 -0
- package/dist/v2/features/app/components/AppSidebar.vue.script.js +318 -0
- package/dist/v2/features/app/components/AppSidebar.vue.script.js.map +1 -0
- package/dist/v2/features/app/components/CreateWorkspaceModal.vue.js +7 -0
- package/dist/v2/features/app/components/CreateWorkspaceModal.vue.js.map +1 -0
- package/dist/v2/features/app/components/CreateWorkspaceModal.vue.script.js +58 -0
- package/dist/v2/features/app/components/CreateWorkspaceModal.vue.script.js.map +1 -0
- package/dist/v2/features/app/components/DesktopTab.vue.d.ts.map +1 -1
- package/dist/v2/features/app/components/DesktopTab.vue.js +9 -0
- package/dist/v2/features/app/components/DesktopTab.vue.js.map +1 -0
- package/dist/v2/features/app/components/DesktopTab.vue.script.js +121 -0
- package/dist/v2/features/app/components/DesktopTab.vue.script.js.map +1 -0
- package/dist/v2/features/app/components/DesktopTabs.vue.js +7 -0
- package/dist/v2/features/app/components/DesktopTabs.vue.js.map +1 -0
- package/dist/v2/features/app/components/DesktopTabs.vue.script.js +75 -0
- package/dist/v2/features/app/components/DesktopTabs.vue.script.js.map +1 -0
- package/dist/v2/features/app/components/DownloadAppButton.vue.js +9 -0
- package/dist/v2/features/app/components/DownloadAppButton.vue.js.map +1 -0
- package/dist/v2/features/app/components/DownloadAppButton.vue.script.js +21 -0
- package/dist/v2/features/app/components/DownloadAppButton.vue.script.js.map +1 -0
- package/dist/v2/features/app/components/SidebarItemMenu.vue.js +7 -0
- package/dist/v2/features/app/components/SidebarItemMenu.vue.js.map +1 -0
- package/dist/v2/features/app/components/SidebarItemMenu.vue.script.js +175 -0
- package/dist/v2/features/app/components/SidebarItemMenu.vue.script.js.map +1 -0
- package/dist/v2/features/app/components/SplashScreen.vue.js +9 -0
- package/dist/v2/features/app/components/SplashScreen.vue.js.map +1 -0
- package/dist/v2/features/app/components/SplashScreen.vue.script.js +20 -0
- package/dist/v2/features/app/components/SplashScreen.vue.script.js.map +1 -0
- package/dist/v2/features/app/components/index.d.ts +1 -1
- package/dist/v2/features/app/components/index.js +1 -9
- package/dist/v2/features/app/helpers/create-api-client-app.d.ts +6 -2
- package/dist/v2/features/app/helpers/create-api-client-app.d.ts.map +1 -1
- package/dist/v2/features/app/helpers/create-api-client-app.js +54 -0
- package/dist/v2/features/app/helpers/create-api-client-app.js.map +1 -0
- package/dist/v2/features/app/helpers/filter-workspaces.js +55 -0
- package/dist/v2/features/app/helpers/filter-workspaces.js.map +1 -0
- package/dist/v2/features/app/helpers/get-route-param.d.ts +1 -1
- package/dist/v2/features/app/helpers/get-route-param.js +12 -0
- package/dist/v2/features/app/helpers/get-route-param.js.map +1 -0
- package/dist/v2/features/app/helpers/group-workspaces.js +38 -0
- package/dist/v2/features/app/helpers/group-workspaces.js.map +1 -0
- package/dist/v2/features/app/helpers/routes.d.ts +7 -3
- package/dist/v2/features/app/helpers/routes.d.ts.map +1 -1
- package/dist/v2/features/app/helpers/routes.js +133 -0
- package/dist/v2/features/app/helpers/routes.js.map +1 -0
- package/dist/v2/features/app/hooks/use-document-watcher.js +168 -0
- package/dist/v2/features/app/hooks/use-document-watcher.js.map +1 -0
- package/dist/v2/features/app/hooks/use-theme.d.ts +1 -1
- package/dist/v2/features/app/hooks/use-theme.js +94 -0
- package/dist/v2/features/app/hooks/use-theme.js.map +1 -0
- package/dist/v2/features/app/index.d.ts +7 -7
- package/dist/v2/features/app/index.js +7 -3161
- package/dist/v2/features/collection/DocumentCollection.vue.d.ts +1 -1
- package/dist/v2/features/collection/DocumentCollection.vue.js +8 -0
- package/dist/v2/features/collection/DocumentCollection.vue.js.map +1 -0
- package/dist/v2/features/collection/DocumentCollection.vue.script.js +339 -0
- package/dist/v2/features/collection/DocumentCollection.vue.script.js.map +1 -0
- package/dist/v2/features/collection/OperationCollection.vue.d.ts +1 -1
- package/dist/v2/features/collection/OperationCollection.vue.js +7 -0
- package/dist/v2/features/collection/OperationCollection.vue.js.map +1 -0
- package/dist/v2/features/collection/OperationCollection.vue.script.js +94 -0
- package/dist/v2/features/collection/OperationCollection.vue.script.js.map +1 -0
- package/dist/v2/features/collection/WorkspaceCollection.vue.d.ts +1 -1
- package/dist/v2/features/collection/WorkspaceCollection.vue.js +7 -0
- package/dist/v2/features/collection/WorkspaceCollection.vue.js.map +1 -0
- package/dist/v2/features/collection/WorkspaceCollection.vue.script.js +73 -0
- package/dist/v2/features/collection/WorkspaceCollection.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Authentication.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Authentication.vue.js +9 -0
- package/dist/v2/features/collection/components/Authentication.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Authentication.vue.script.js +166 -0
- package/dist/v2/features/collection/components/Authentication.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Cookies.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Cookies.vue.js +7 -0
- package/dist/v2/features/collection/components/Cookies.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Cookies.vue.script.js +57 -0
- package/dist/v2/features/collection/components/Cookies.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/Editor.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Editor/Editor.vue.js +9 -0
- package/dist/v2/features/collection/components/Editor/Editor.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/Editor.vue.script.js +360 -0
- package/dist/v2/features/collection/components/Editor/Editor.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/components/EditorDiagnosticsPanel.vue.js +7 -0
- package/dist/v2/features/collection/components/Editor/components/EditorDiagnosticsPanel.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/components/EditorDiagnosticsPanel.vue.script.js +69 -0
- package/dist/v2/features/collection/components/Editor/components/EditorDiagnosticsPanel.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/components/EditorSavePanel.vue.js +7 -0
- package/dist/v2/features/collection/components/Editor/components/EditorSavePanel.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/components/EditorSavePanel.vue.script.js +91 -0
- package/dist/v2/features/collection/components/Editor/components/EditorSavePanel.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/helpers/get-diagnostic-counts.js +22 -0
- package/dist/v2/features/collection/components/Editor/helpers/get-diagnostic-counts.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/helpers/get-operation-context.js +17 -0
- package/dist/v2/features/collection/components/Editor/helpers/get-operation-context.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/helpers/get-visible-diagnostics.js +17 -0
- package/dist/v2/features/collection/components/Editor/helpers/get-visible-diagnostics.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/helpers/parse-editor-object.js +34 -0
- package/dist/v2/features/collection/components/Editor/helpers/parse-editor-object.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/helpers/stringify-document.js +18 -0
- package/dist/v2/features/collection/components/Editor/helpers/stringify-document.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/hooks/use-editor-state.js +36 -0
- package/dist/v2/features/collection/components/Editor/hooks/use-editor-state.js.map +1 -0
- package/dist/v2/features/collection/components/Editor/index.d.ts +1 -1
- package/dist/v2/features/collection/components/Editor/index.js +1 -1
- package/dist/v2/features/collection/components/Environment.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Environment.vue.js +7 -0
- package/dist/v2/features/collection/components/Environment.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Environment.vue.script.js +60 -0
- package/dist/v2/features/collection/components/Environment.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Form.vue.js +7 -0
- package/dist/v2/features/collection/components/Form.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Form.vue.script.js +75 -0
- package/dist/v2/features/collection/components/Form.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/LabelInput.vue.js +9 -0
- package/dist/v2/features/collection/components/LabelInput.vue.js.map +1 -0
- package/dist/v2/features/collection/components/LabelInput.vue.script.js +38 -0
- package/dist/v2/features/collection/components/LabelInput.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Overview.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Overview.vue.js +9 -0
- package/dist/v2/features/collection/components/Overview.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Overview.vue.script.js +203 -0
- package/dist/v2/features/collection/components/Overview.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Servers.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Servers.vue.js +7 -0
- package/dist/v2/features/collection/components/Servers.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Servers.vue.script.js +217 -0
- package/dist/v2/features/collection/components/Servers.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Settings.vue.d.ts +4 -4
- package/dist/v2/features/collection/components/Settings.vue.d.ts.map +1 -1
- package/dist/v2/features/collection/components/Settings.vue.js +7 -0
- package/dist/v2/features/collection/components/Settings.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Settings.vue.script.js +80 -0
- package/dist/v2/features/collection/components/Settings.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/SyncConflictResolutionEditor.vue.js +9 -0
- package/dist/v2/features/collection/components/SyncConflictResolutionEditor.vue.js.map +1 -0
- package/dist/v2/features/collection/components/SyncConflictResolutionEditor.vue.script.js +136 -0
- package/dist/v2/features/collection/components/SyncConflictResolutionEditor.vue.script.js.map +1 -0
- package/dist/v2/features/collection/components/Tabs.vue.d.ts +1 -1
- package/dist/v2/features/collection/components/Tabs.vue.js +7 -0
- package/dist/v2/features/collection/components/Tabs.vue.js.map +1 -0
- package/dist/v2/features/collection/components/Tabs.vue.script.js +53 -0
- package/dist/v2/features/collection/components/Tabs.vue.script.js.map +1 -0
- package/dist/v2/features/collection/helpers/get-default-operation-security-toggle.js +19 -0
- package/dist/v2/features/collection/helpers/get-default-operation-security-toggle.js.map +1 -0
- package/dist/v2/features/command-palette/TheCommandPalette.vue.d.ts +1 -1
- package/dist/v2/features/command-palette/TheCommandPalette.vue.js +9 -0
- package/dist/v2/features/command-palette/TheCommandPalette.vue.js.map +1 -0
- package/dist/v2/features/command-palette/TheCommandPalette.vue.script.js +189 -0
- package/dist/v2/features/command-palette/TheCommandPalette.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandActionForm.vue.js +7 -0
- package/dist/v2/features/command-palette/components/CommandActionForm.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandActionForm.vue.script.js +47 -0
- package/dist/v2/features/command-palette/components/CommandActionForm.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandActionInput.vue.js +7 -0
- package/dist/v2/features/command-palette/components/CommandActionInput.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandActionInput.vue.script.js +73 -0
- package/dist/v2/features/command-palette/components/CommandActionInput.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteExample.vue.js +7 -0
- package/dist/v2/features/command-palette/components/CommandPaletteExample.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteExample.vue.script.js +207 -0
- package/dist/v2/features/command-palette/components/CommandPaletteExample.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImport.vue.d.ts +3 -23
- package/dist/v2/features/command-palette/components/CommandPaletteImport.vue.d.ts.map +1 -1
- package/dist/v2/features/command-palette/components/CommandPaletteImport.vue.js +7 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImport.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImport.vue.script.js +206 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImport.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImportCurl.vue.js +9 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImportCurl.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImportCurl.vue.script.js +125 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImportCurl.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImportPostman.vue.d.ts +30 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImportPostman.vue.d.ts.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImportPostman.vue.js +7 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImportPostman.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImportPostman.vue.script.js +151 -0
- package/dist/v2/features/command-palette/components/CommandPaletteImportPostman.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteOpenApiDocument.vue.js +7 -0
- package/dist/v2/features/command-palette/components/CommandPaletteOpenApiDocument.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteOpenApiDocument.vue.script.js +89 -0
- package/dist/v2/features/command-palette/components/CommandPaletteOpenApiDocument.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteRequest.vue.js +7 -0
- package/dist/v2/features/command-palette/components/CommandPaletteRequest.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteRequest.vue.script.js +226 -0
- package/dist/v2/features/command-palette/components/CommandPaletteRequest.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteTag.vue.js +7 -0
- package/dist/v2/features/command-palette/components/CommandPaletteTag.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/CommandPaletteTag.vue.script.js +126 -0
- package/dist/v2/features/command-palette/components/CommandPaletteTag.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/PostmanImportPreview.vue.d.ts +58 -0
- package/dist/v2/features/command-palette/components/PostmanImportPreview.vue.d.ts.map +1 -0
- package/dist/v2/features/command-palette/components/PostmanImportPreview.vue.js +9 -0
- package/dist/v2/features/command-palette/components/PostmanImportPreview.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/PostmanImportPreview.vue.script.js +142 -0
- package/dist/v2/features/command-palette/components/PostmanImportPreview.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/PostmanRequestTreeRow.vue.d.ts +23 -0
- package/dist/v2/features/command-palette/components/PostmanRequestTreeRow.vue.d.ts.map +1 -0
- package/dist/v2/features/command-palette/components/PostmanRequestTreeRow.vue.js +9 -0
- package/dist/v2/features/command-palette/components/PostmanRequestTreeRow.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/PostmanRequestTreeRow.vue.script.js +138 -0
- package/dist/v2/features/command-palette/components/PostmanRequestTreeRow.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/components/WatchModeToggle.vue.js +7 -0
- package/dist/v2/features/command-palette/components/WatchModeToggle.vue.js.map +1 -0
- package/dist/v2/features/command-palette/components/WatchModeToggle.vue.script.js +39 -0
- package/dist/v2/features/command-palette/components/WatchModeToggle.vue.script.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/generate-unique-slug.js +29 -0
- package/dist/v2/features/command-palette/helpers/generate-unique-slug.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/get-merge-key.d.ts +11 -0
- package/dist/v2/features/command-palette/helpers/get-merge-key.d.ts.map +1 -0
- package/dist/v2/features/command-palette/helpers/get-merge-key.js +32 -0
- package/dist/v2/features/command-palette/helpers/get-merge-key.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/get-openapi-document-details.js +56 -0
- package/dist/v2/features/command-palette/helpers/get-openapi-document-details.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/get-openapi-from-postman.d.ts +2 -1
- package/dist/v2/features/command-palette/helpers/get-openapi-from-postman.d.ts.map +1 -1
- package/dist/v2/features/command-palette/helpers/get-openapi-from-postman.js +22 -0
- package/dist/v2/features/command-palette/helpers/get-openapi-from-postman.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/get-operation-from-curl.js +119 -0
- package/dist/v2/features/command-palette/helpers/get-operation-from-curl.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/get-postman-document-details.d.ts +4 -0
- package/dist/v2/features/command-palette/helpers/get-postman-document-details.d.ts.map +1 -1
- package/dist/v2/features/command-palette/helpers/get-postman-document-details.js +36 -0
- package/dist/v2/features/command-palette/helpers/get-postman-document-details.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/import-document-to-workspace.js +70 -0
- package/dist/v2/features/command-palette/helpers/import-document-to-workspace.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/is-postman-collection.js +24 -0
- package/dist/v2/features/command-palette/helpers/is-postman-collection.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/load-document-from-source.js +71 -0
- package/dist/v2/features/command-palette/helpers/load-document-from-source.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/postman-request-collisions.d.ts +11 -0
- package/dist/v2/features/command-palette/helpers/postman-request-collisions.d.ts.map +1 -0
- package/dist/v2/features/command-palette/helpers/postman-request-collisions.js +35 -0
- package/dist/v2/features/command-palette/helpers/postman-request-collisions.js.map +1 -0
- package/dist/v2/features/command-palette/helpers/postman-request-tree.d.ts +41 -0
- package/dist/v2/features/command-palette/helpers/postman-request-tree.d.ts.map +1 -0
- package/dist/v2/features/command-palette/helpers/postman-request-tree.js +139 -0
- package/dist/v2/features/command-palette/helpers/postman-request-tree.js.map +1 -0
- package/dist/v2/features/command-palette/hooks/use-command-palette-state.d.ts +38 -2
- package/dist/v2/features/command-palette/hooks/use-command-palette-state.d.ts.map +1 -1
- package/dist/v2/features/command-palette/hooks/use-command-palette-state.js +207 -0
- package/dist/v2/features/command-palette/hooks/use-command-palette-state.js.map +1 -0
- package/dist/v2/features/command-palette/index.d.ts +2 -2
- package/dist/v2/features/command-palette/index.js +2 -2
- package/dist/v2/features/editor/config.js +19 -0
- package/dist/v2/features/editor/config.js.map +1 -0
- package/dist/v2/features/editor/helpers/configure-language-support.js +48 -0
- package/dist/v2/features/editor/helpers/configure-language-support.js.map +1 -0
- package/dist/v2/features/editor/helpers/ensure-monaco-environment.js +21 -0
- package/dist/v2/features/editor/helpers/ensure-monaco-environment.js.map +1 -0
- package/dist/v2/features/editor/helpers/json/create-json-model.js +31 -0
- package/dist/v2/features/editor/helpers/json/create-json-model.js.map +1 -0
- package/dist/v2/features/editor/helpers/json/get-json-ast-node-from-path.d.ts +1 -1
- package/dist/v2/features/editor/helpers/json/get-json-ast-node-from-path.js +22 -0
- package/dist/v2/features/editor/helpers/json/get-json-ast-node-from-path.js.map +1 -0
- package/dist/v2/features/editor/helpers/json/json-ast.js +32 -0
- package/dist/v2/features/editor/helpers/json/json-ast.js.map +1 -0
- package/dist/v2/features/editor/helpers/json/json-pointer-links.js +104 -0
- package/dist/v2/features/editor/helpers/json/json-pointer-links.js.map +1 -0
- package/dist/v2/features/editor/helpers/json/json-pointer-path.d.ts +1 -1
- package/dist/v2/features/editor/helpers/json/json-pointer-path.js +27 -0
- package/dist/v2/features/editor/helpers/json/json-pointer-path.js.map +1 -0
- package/dist/v2/features/editor/helpers/range-to-whole-line.js +27 -0
- package/dist/v2/features/editor/helpers/range-to-whole-line.js.map +1 -0
- package/dist/v2/features/editor/helpers/theme/apply-scalar-theme.js +84 -0
- package/dist/v2/features/editor/helpers/theme/apply-scalar-theme.js.map +1 -0
- package/dist/v2/features/editor/helpers/theme/load-css-variables.js +41 -0
- package/dist/v2/features/editor/helpers/theme/load-css-variables.js.map +1 -0
- package/dist/v2/features/editor/helpers/yaml/create-yaml-model.js +32 -0
- package/dist/v2/features/editor/helpers/yaml/create-yaml-model.js.map +1 -0
- package/dist/v2/features/editor/helpers/yaml/get-yaml-node-range-from-path.js +70 -0
- package/dist/v2/features/editor/helpers/yaml/get-yaml-node-range-from-path.js.map +1 -0
- package/dist/v2/features/editor/hooks/use-editor-markers.js +37 -0
- package/dist/v2/features/editor/hooks/use-editor-markers.js.map +1 -0
- package/dist/v2/features/editor/hooks/use-editor.js +133 -0
- package/dist/v2/features/editor/hooks/use-editor.js.map +1 -0
- package/dist/v2/features/editor/hooks/use-json-pointer-link-support.js +45 -0
- package/dist/v2/features/editor/hooks/use-json-pointer-link-support.js.map +1 -0
- package/dist/v2/features/editor/hooks/use-three-way-merge-editor.js +396 -0
- package/dist/v2/features/editor/hooks/use-three-way-merge-editor.js.map +1 -0
- package/dist/v2/features/editor/index.d.ts +4 -4
- package/dist/v2/features/editor/index.js +4 -1
- package/dist/v2/features/editor/schemas/openapi-3.1-schema.json.js +51 -0
- package/dist/v2/features/editor/schemas/openapi-3.1-schema.json.js.map +1 -0
- package/dist/v2/features/environments/EnvironmentsList.vue.js +7 -0
- package/dist/v2/features/environments/EnvironmentsList.vue.js.map +1 -0
- package/dist/v2/features/environments/EnvironmentsList.vue.script.js +96 -0
- package/dist/v2/features/environments/EnvironmentsList.vue.script.js.map +1 -0
- package/dist/v2/features/environments/components/Environment.vue.js +7 -0
- package/dist/v2/features/environments/components/Environment.vue.js.map +1 -0
- package/dist/v2/features/environments/components/Environment.vue.script.js +65 -0
- package/dist/v2/features/environments/components/Environment.vue.script.js.map +1 -0
- package/dist/v2/features/environments/components/EnvironmentColors.vue.js +7 -0
- package/dist/v2/features/environments/components/EnvironmentColors.vue.js.map +1 -0
- package/dist/v2/features/environments/components/EnvironmentColors.vue.script.js +158 -0
- package/dist/v2/features/environments/components/EnvironmentColors.vue.script.js.map +1 -0
- package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.js +7 -0
- package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.js.map +1 -0
- package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.script.js +97 -0
- package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.script.js.map +1 -0
- package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.js +7 -0
- package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.js.map +1 -0
- package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.script.js +50 -0
- package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.script.js.map +1 -0
- package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.js +7 -0
- package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.js.map +1 -0
- package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js +113 -0
- package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js.map +1 -0
- package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.js +9 -0
- package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.js.map +1 -0
- package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.script.js +152 -0
- package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.script.js.map +1 -0
- package/dist/v2/features/environments/index.d.ts +1 -1
- package/dist/v2/features/environments/index.js +1 -3
- package/dist/v2/features/global-cookies/components/CookiesTable.vue.js +9 -0
- package/dist/v2/features/global-cookies/components/CookiesTable.vue.js.map +1 -0
- package/dist/v2/features/global-cookies/components/CookiesTable.vue.script.js +186 -0
- package/dist/v2/features/global-cookies/components/CookiesTable.vue.script.js.map +1 -0
- package/dist/v2/features/global-cookies/index.d.ts +1 -1
- package/dist/v2/features/global-cookies/index.js +1 -3
- package/dist/v2/features/modal/Modal.vue.d.ts +1 -1
- package/dist/v2/features/modal/Modal.vue.js +7 -0
- package/dist/v2/features/modal/Modal.vue.js.map +1 -0
- package/dist/v2/features/modal/Modal.vue.script.js +147 -0
- package/dist/v2/features/modal/Modal.vue.script.js.map +1 -0
- package/dist/v2/features/modal/helpers/create-api-client-modal.d.ts +2 -2
- package/dist/v2/features/modal/helpers/create-api-client-modal.js +100 -0
- package/dist/v2/features/modal/helpers/create-api-client-modal.js.map +1 -0
- package/dist/v2/features/modal/helpers/map-hidden-clients-config.js +32 -0
- package/dist/v2/features/modal/helpers/map-hidden-clients-config.js.map +1 -0
- package/dist/v2/features/modal/helpers/resolve-route-parameters.js +92 -0
- package/dist/v2/features/modal/helpers/resolve-route-parameters.js.map +1 -0
- package/dist/v2/features/modal/helpers/restore-workspace-state.js +51 -0
- package/dist/v2/features/modal/helpers/restore-workspace-state.js.map +1 -0
- package/dist/v2/features/modal/hooks/use-modal-sidebar.d.ts +1 -1
- package/dist/v2/features/modal/hooks/use-modal-sidebar.js +142 -0
- package/dist/v2/features/modal/hooks/use-modal-sidebar.js.map +1 -0
- package/dist/v2/features/modal/index.d.ts +3 -3
- package/dist/v2/features/modal/index.js +3 -639
- package/dist/v2/features/modal/modal-events.d.ts +1 -1
- package/dist/v2/features/modal/modal-events.js +41 -0
- package/dist/v2/features/modal/modal-events.js.map +1 -0
- package/dist/v2/features/operation/Operation.vue.d.ts +2 -2
- package/dist/v2/features/operation/Operation.vue.js +7 -0
- package/dist/v2/features/operation/Operation.vue.js.map +1 -0
- package/dist/v2/features/operation/Operation.vue.script.js +182 -0
- package/dist/v2/features/operation/Operation.vue.script.js.map +1 -0
- package/dist/v2/features/operation/helpers/combine-params.js +20 -0
- package/dist/v2/features/operation/helpers/combine-params.js.map +1 -0
- package/dist/v2/features/operation/helpers/get-security-requirements.js +17 -0
- package/dist/v2/features/operation/helpers/get-security-requirements.js.map +1 -0
- package/dist/v2/features/operation/helpers/get-selected-security.js +41 -0
- package/dist/v2/features/operation/helpers/get-selected-security.js.map +1 -0
- package/dist/v2/features/operation/helpers/get-selected-server.js +21 -0
- package/dist/v2/features/operation/helpers/get-selected-server.js.map +1 -0
- package/dist/v2/features/operation/index.d.ts +5 -5
- package/dist/v2/features/operation/index.js +5 -18
- package/dist/v2/features/search/helpers/create-fuse-instance.js +52 -0
- package/dist/v2/features/search/helpers/create-fuse-instance.js.map +1 -0
- package/dist/v2/features/search/helpers/create-search-index.js +76 -0
- package/dist/v2/features/search/helpers/create-search-index.js.map +1 -0
- package/dist/v2/features/search/hooks/use-search-index.js +31 -0
- package/dist/v2/features/search/hooks/use-search-index.js.map +1 -0
- package/dist/v2/features/search/index.d.ts +1 -1
- package/dist/v2/features/search/index.js +1 -1
- package/dist/v2/features/settings/CollectionSettings.vue.d.ts +4 -0
- package/dist/v2/features/settings/CollectionSettings.vue.d.ts.map +1 -1
- package/dist/v2/features/settings/CollectionSettings.vue.js +7 -0
- package/dist/v2/features/settings/CollectionSettings.vue.js.map +1 -0
- package/dist/v2/features/settings/CollectionSettings.vue.script.js +229 -0
- package/dist/v2/features/settings/CollectionSettings.vue.script.js.map +1 -0
- package/dist/v2/features/settings/DocumentSettings.vue.js +7 -0
- package/dist/v2/features/settings/DocumentSettings.vue.js.map +1 -0
- package/dist/v2/features/settings/DocumentSettings.vue.script.js +92 -0
- package/dist/v2/features/settings/DocumentSettings.vue.script.js.map +1 -0
- package/dist/v2/features/settings/components/Appearance.vue.js +7 -0
- package/dist/v2/features/settings/components/Appearance.vue.js.map +1 -0
- package/dist/v2/features/settings/components/Appearance.vue.script.js +63 -0
- package/dist/v2/features/settings/components/Appearance.vue.script.js.map +1 -0
- package/dist/v2/features/settings/components/Section.vue.js +7 -0
- package/dist/v2/features/settings/components/Section.vue.js.map +1 -0
- package/dist/v2/features/settings/components/Section.vue.script.js +30 -0
- package/dist/v2/features/settings/components/Section.vue.script.js.map +1 -0
- package/dist/v2/features/settings/helpers/get-theme-colors.js +68 -0
- package/dist/v2/features/settings/helpers/get-theme-colors.js.map +1 -0
- package/dist/v2/features/settings/index.d.ts +2 -2
- package/dist/v2/features/settings/index.js +2 -1
- package/dist/v2/helpers/drag-handle-factory.d.ts.map +1 -1
- package/dist/v2/helpers/drag-handle-factory.js +258 -0
- package/dist/v2/helpers/drag-handle-factory.js.map +1 -0
- package/dist/v2/helpers/generate-location-id.js +25 -0
- package/dist/v2/helpers/generate-location-id.js.map +1 -0
- package/dist/v2/helpers/get-active-environment.js +19 -0
- package/dist/v2/helpers/get-active-environment.js.map +1 -0
- package/dist/v2/helpers/get-active-proxy-url.js +26 -0
- package/dist/v2/helpers/get-active-proxy-url.js.map +1 -0
- package/dist/v2/helpers/get-servers.js +106 -0
- package/dist/v2/helpers/get-servers.js.map +1 -0
- package/dist/v2/helpers/get-tab-details.d.ts +1 -1
- package/dist/v2/helpers/get-tab-details.js +54 -0
- package/dist/v2/helpers/get-tab-details.js.map +1 -0
- package/dist/v2/helpers/handle-hotkeys.js +151 -0
- package/dist/v2/helpers/handle-hotkeys.js.map +1 -0
- package/dist/v2/helpers/index.d.ts +2 -2
- package/dist/v2/helpers/index.js +2 -2
- package/dist/v2/helpers/is-url.js +9 -0
- package/dist/v2/helpers/is-url.js.map +1 -0
- package/dist/v2/helpers/slugify.js +15 -0
- package/dist/v2/helpers/slugify.js.map +1 -0
- package/dist/v2/helpers/storage.d.ts +8 -0
- package/dist/v2/helpers/storage.d.ts.map +1 -1
- package/dist/v2/helpers/storage.js +37 -0
- package/dist/v2/helpers/storage.js.map +1 -0
- package/dist/v2/hooks/use-color-mode.js +72 -0
- package/dist/v2/hooks/use-color-mode.js.map +1 -0
- package/dist/v2/hooks/use-global-hot-keys.js +22 -0
- package/dist/v2/hooks/use-global-hot-keys.js.map +1 -0
- package/dist/v2/hooks/use-scroll-lock.js +58 -0
- package/dist/v2/hooks/use-scroll-lock.js.map +1 -0
- package/dist/v2/posthog.d.ts +3 -0
- package/dist/v2/posthog.d.ts.map +1 -0
- package/dist/v2/posthog.js +19 -0
- package/dist/v2/posthog.js.map +1 -0
- package/dist/v2/workspace-events.js +109 -0
- package/dist/v2/workspace-events.js.map +1 -0
- package/dist/views/Collection/Collection.vue.js +7 -0
- package/dist/views/Collection/Collection.vue.js.map +1 -0
- package/dist/views/Collection/Collection.vue.script.js +46 -0
- package/dist/views/Collection/Collection.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionAuthentication.vue.js +9 -0
- package/dist/views/Collection/CollectionAuthentication.vue.js.map +1 -0
- package/dist/views/Collection/CollectionAuthentication.vue.script.js +52 -0
- package/dist/views/Collection/CollectionAuthentication.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionCookies.vue.js +7 -0
- package/dist/views/Collection/CollectionCookies.vue.js.map +1 -0
- package/dist/views/Collection/CollectionCookies.vue.script.js +18 -0
- package/dist/views/Collection/CollectionCookies.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionEnvironment.vue.js +8 -0
- package/dist/views/Collection/CollectionEnvironment.vue.js.map +1 -0
- package/dist/views/Collection/CollectionEnvironment.vue.script.js +238 -0
- package/dist/views/Collection/CollectionEnvironment.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionInfoForm.vue.js +9 -0
- package/dist/views/Collection/CollectionInfoForm.vue.js.map +1 -0
- package/dist/views/Collection/CollectionInfoForm.vue.script.js +73 -0
- package/dist/views/Collection/CollectionInfoForm.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionNavigation.vue.js +7 -0
- package/dist/views/Collection/CollectionNavigation.vue.js.map +1 -0
- package/dist/views/Collection/CollectionNavigation.vue.script.js +75 -0
- package/dist/views/Collection/CollectionNavigation.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionOverview.vue.js +7 -0
- package/dist/views/Collection/CollectionOverview.vue.js.map +1 -0
- package/dist/views/Collection/CollectionOverview.vue.script.js +42 -0
- package/dist/views/Collection/CollectionOverview.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionScripts.vue.js +7 -0
- package/dist/views/Collection/CollectionScripts.vue.js.map +1 -0
- package/dist/views/Collection/CollectionScripts.vue.script.js +18 -0
- package/dist/views/Collection/CollectionScripts.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionServerForm.vue.js +7 -0
- package/dist/views/Collection/CollectionServerForm.vue.js.map +1 -0
- package/dist/views/Collection/CollectionServerForm.vue.script.js +76 -0
- package/dist/views/Collection/CollectionServerForm.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionServers.vue.js +7 -0
- package/dist/views/Collection/CollectionServers.vue.js.map +1 -0
- package/dist/views/Collection/CollectionServers.vue.script.js +95 -0
- package/dist/views/Collection/CollectionServers.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionSettings.vue.js +7 -0
- package/dist/views/Collection/CollectionSettings.vue.js.map +1 -0
- package/dist/views/Collection/CollectionSettings.vue.script.js +87 -0
- package/dist/views/Collection/CollectionSettings.vue.script.js.map +1 -0
- package/dist/views/Collection/CollectionSync.vue.js +7 -0
- package/dist/views/Collection/CollectionSync.vue.js.map +1 -0
- package/dist/views/Collection/CollectionSync.vue.script.js +18 -0
- package/dist/views/Collection/CollectionSync.vue.script.js.map +1 -0
- package/dist/views/Collection/components/EnvironmentForm.vue.d.ts +1 -1
- package/dist/views/Collection/components/EnvironmentForm.vue.js +9 -0
- package/dist/views/Collection/components/EnvironmentForm.vue.js.map +1 -0
- package/dist/views/Collection/components/EnvironmentForm.vue.script.js +284 -0
- package/dist/views/Collection/components/EnvironmentForm.vue.script.js.map +1 -0
- package/dist/views/Collection/components/MarkdownInput.vue.d.ts +1 -1
- package/dist/views/Collection/components/MarkdownInput.vue.js +9 -0
- package/dist/views/Collection/components/MarkdownInput.vue.js.map +1 -0
- package/dist/views/Collection/components/MarkdownInput.vue.script.js +92 -0
- package/dist/views/Collection/components/MarkdownInput.vue.script.js.map +1 -0
- package/dist/views/Components/CodeSnippet/CodeSnippet.vue.d.ts +1 -1
- package/dist/views/Components/CodeSnippet/CodeSnippet.vue.js +7 -0
- package/dist/views/Components/CodeSnippet/CodeSnippet.vue.js.map +1 -0
- package/dist/views/Components/CodeSnippet/CodeSnippet.vue.script.js +74 -0
- package/dist/views/Components/CodeSnippet/CodeSnippet.vue.script.js.map +1 -0
- package/dist/views/Components/CodeSnippet/helpers/convert-to-har-request.js +66 -0
- package/dist/views/Components/CodeSnippet/helpers/convert-to-har-request.js.map +1 -0
- package/dist/views/Components/CodeSnippet/helpers/get-har-request.d.ts +1 -1
- package/dist/views/Components/CodeSnippet/helpers/get-har-request.js +86 -0
- package/dist/views/Components/CodeSnippet/helpers/get-har-request.js.map +1 -0
- package/dist/views/Components/CodeSnippet/helpers/get-snippet.d.ts +1 -1
- package/dist/views/Components/CodeSnippet/helpers/get-snippet.js +39 -0
- package/dist/views/Components/CodeSnippet/helpers/get-snippet.js.map +1 -0
- package/dist/views/Components/CodeSnippet/index.d.ts +4 -4
- package/dist/views/Components/CodeSnippet/index.js +4 -2
- package/dist/views/Cookies/CookieForm.vue.js +7 -0
- package/dist/views/Cookies/CookieForm.vue.js.map +1 -0
- package/dist/views/Cookies/CookieForm.vue.script.js +50 -0
- package/dist/views/Cookies/CookieForm.vue.script.js.map +1 -0
- package/dist/views/Cookies/CookieModal.vue.js +9 -0
- package/dist/views/Cookies/CookieModal.vue.js.map +1 -0
- package/dist/views/Cookies/CookieModal.vue.script.js +83 -0
- package/dist/views/Cookies/CookieModal.vue.script.js.map +1 -0
- package/dist/views/Cookies/Cookies.vue.js +7 -0
- package/dist/views/Cookies/Cookies.vue.js.map +1 -0
- package/dist/views/Cookies/Cookies.vue.script.js +156 -0
- package/dist/views/Cookies/Cookies.vue.script.js.map +1 -0
- package/dist/views/Environment/Environment.vue.js +7 -0
- package/dist/views/Environment/Environment.vue.js.map +1 -0
- package/dist/views/Environment/Environment.vue.script.js +384 -0
- package/dist/views/Environment/Environment.vue.script.js.map +1 -0
- package/dist/views/Environment/EnvironmentColorModal.vue.js +7 -0
- package/dist/views/Environment/EnvironmentColorModal.vue.js.map +1 -0
- package/dist/views/Environment/EnvironmentColorModal.vue.script.js +47 -0
- package/dist/views/Environment/EnvironmentColorModal.vue.script.js.map +1 -0
- package/dist/views/Environment/EnvironmentColors.vue.js +7 -0
- package/dist/views/Environment/EnvironmentColors.vue.js.map +1 -0
- package/dist/views/Environment/EnvironmentColors.vue.script.js +126 -0
- package/dist/views/Environment/EnvironmentColors.vue.script.js.map +1 -0
- package/dist/views/Environment/EnvironmentModal.vue.js +7 -0
- package/dist/views/Environment/EnvironmentModal.vue.js.map +1 -0
- package/dist/views/Environment/EnvironmentModal.vue.script.js +122 -0
- package/dist/views/Environment/EnvironmentModal.vue.script.js.map +1 -0
- package/dist/views/Environment/EnvironmentVariableDropdown.vue.d.ts +1 -1
- package/dist/views/Environment/EnvironmentVariableDropdown.vue.js +7 -0
- package/dist/views/Environment/EnvironmentVariableDropdown.vue.js.map +1 -0
- package/dist/views/Environment/EnvironmentVariableDropdown.vue.script.js +133 -0
- package/dist/views/Environment/EnvironmentVariableDropdown.vue.script.js.map +1 -0
- package/dist/views/Environment/handle-drag.d.ts +1 -1
- package/dist/views/Environment/handle-drag.js +38 -0
- package/dist/views/Environment/handle-drag.js.map +1 -0
- package/dist/views/Request/Request.vue.d.ts +1 -1
- package/dist/views/Request/Request.vue.js +9 -0
- package/dist/views/Request/Request.vue.js.map +1 -0
- package/dist/views/Request/Request.vue.script.js +117 -0
- package/dist/views/Request/Request.vue.script.js.map +1 -0
- package/dist/views/Request/RequestRoot.vue.d.ts.map +1 -1
- package/dist/views/Request/RequestRoot.vue.js +9 -0
- package/dist/views/Request/RequestRoot.vue.js.map +1 -0
- package/dist/views/Request/RequestRoot.vue.script.js +158 -0
- package/dist/views/Request/RequestRoot.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/DeleteRequestAuthModal.vue.js +7 -0
- package/dist/views/Request/RequestSection/RequestAuth/DeleteRequestAuthModal.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/DeleteRequestAuthModal.vue.script.js +52 -0
- package/dist/views/Request/RequestSection/RequestAuth/DeleteRequestAuthModal.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/OAuth2.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/OAuth2.vue.js +7 -0
- package/dist/views/Request/RequestSection/RequestAuth/OAuth2.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/OAuth2.vue.script.js +204 -0
- package/dist/views/Request/RequestSection/RequestAuth/OAuth2.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/OAuthScopesInput.vue.js +7 -0
- package/dist/views/Request/RequestSection/RequestAuth/OAuthScopesInput.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/OAuthScopesInput.vue.script.js +106 -0
- package/dist/views/Request/RequestSection/RequestAuth/OAuthScopesInput.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuth.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuth.vue.js +9 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuth.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuth.vue.script.js +216 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuth.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue.js +9 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue.script.js +116 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTable.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue.js +7 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue.script.js +73 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthDataTableInput.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue.js +7 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue.script.js +205 -0
- package/dist/views/Request/RequestSection/RequestAuth/RequestAuthTab.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage.js +39 -0
- package/dist/views/Request/RequestSection/RequestAuth/helpers/restore-auth-from-local-storage.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestAuth/index.d.ts +3 -3
- 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/RequestBody.vue.js +9 -0
- package/dist/views/Request/RequestSection/RequestBody.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestBody.vue.script.js +477 -0
- package/dist/views/Request/RequestSection/RequestBody.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestCodeExample.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestCodeExample.vue.js +9 -0
- package/dist/views/Request/RequestSection/RequestCodeExample.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestCodeExample.vue.script.js +187 -0
- package/dist/views/Request/RequestSection/RequestCodeExample.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestParams.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestParams.vue.js +7 -0
- package/dist/views/Request/RequestSection/RequestParams.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestParams.vue.script.js +180 -0
- package/dist/views/Request/RequestSection/RequestParams.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestPathParams.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestPathParams.vue.js +7 -0
- package/dist/views/Request/RequestSection/RequestPathParams.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestPathParams.vue.script.js +115 -0
- package/dist/views/Request/RequestSection/RequestPathParams.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestSection.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestSection.vue.js +9 -0
- package/dist/views/Request/RequestSection/RequestSection.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestSection.vue.script.js +297 -0
- package/dist/views/Request/RequestSection/RequestSection.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestTable.vue.d.ts +1 -1
- package/dist/views/Request/RequestSection/RequestTable.vue.js +9 -0
- package/dist/views/Request/RequestSection/RequestTable.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestTable.vue.script.js +266 -0
- package/dist/views/Request/RequestSection/RequestTable.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestTableTooltip.vue.js +9 -0
- package/dist/views/Request/RequestSection/RequestTableTooltip.vue.js.map +1 -0
- package/dist/views/Request/RequestSection/RequestTableTooltip.vue.script.js +64 -0
- package/dist/views/Request/RequestSection/RequestTableTooltip.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSection/helpers/filter-security-requirements.js +38 -0
- package/dist/views/Request/RequestSection/helpers/filter-security-requirements.js.map +1 -0
- package/dist/views/Request/RequestSection/helpers/getting-started.js +17 -0
- package/dist/views/Request/RequestSection/helpers/getting-started.js.map +1 -0
- package/dist/views/Request/RequestSection/helpers/update-scheme.d.ts +1 -1
- package/dist/views/Request/RequestSection/helpers/update-scheme.js +22 -0
- package/dist/views/Request/RequestSection/helpers/update-scheme.js.map +1 -0
- package/dist/views/Request/RequestSection/index.d.ts +2 -2
- package/dist/views/Request/RequestSection/index.js +2 -42
- package/dist/views/Request/RequestSidebar.vue.js +9 -0
- package/dist/views/Request/RequestSidebar.vue.js.map +1 -0
- package/dist/views/Request/RequestSidebar.vue.script.js +307 -0
- package/dist/views/Request/RequestSidebar.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSidebarItem.vue.js +10 -0
- package/dist/views/Request/RequestSidebarItem.vue.js.map +1 -0
- package/dist/views/Request/RequestSidebarItem.vue.script.js +475 -0
- package/dist/views/Request/RequestSidebarItem.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSidebarItemMenu.vue.js +9 -0
- package/dist/views/Request/RequestSidebarItemMenu.vue.js.map +1 -0
- package/dist/views/Request/RequestSidebarItemMenu.vue.script.js +222 -0
- package/dist/views/Request/RequestSidebarItemMenu.vue.script.js.map +1 -0
- package/dist/views/Request/RequestSubpageHeader.vue.d.ts +1 -1
- package/dist/views/Request/RequestSubpageHeader.vue.js +9 -0
- package/dist/views/Request/RequestSubpageHeader.vue.js.map +1 -0
- package/dist/views/Request/RequestSubpageHeader.vue.script.js +92 -0
- package/dist/views/Request/RequestSubpageHeader.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/RequestHeaders.vue.js +7 -0
- package/dist/views/Request/ResponseSection/RequestHeaders.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/RequestHeaders.vue.script.js +77 -0
- package/dist/views/Request/ResponseSection/RequestHeaders.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBody.vue.js +9 -0
- package/dist/views/Request/ResponseSection/ResponseBody.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBody.vue.script.js +91 -0
- package/dist/views/Request/ResponseSection/ResponseBody.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyDownload.vue.js +7 -0
- package/dist/views/Request/ResponseSection/ResponseBodyDownload.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyDownload.vue.script.js +35 -0
- package/dist/views/Request/ResponseSection/ResponseBodyDownload.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyInfo.vue.js +14 -0
- package/dist/views/Request/ResponseSection/ResponseBodyInfo.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyPreview.vue.js +9 -0
- package/dist/views/Request/ResponseSection/ResponseBodyPreview.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyPreview.vue.script.js +64 -0
- package/dist/views/Request/ResponseSection/ResponseBodyPreview.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyRaw.vue.js +9 -0
- package/dist/views/Request/ResponseSection/ResponseBodyRaw.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyRaw.vue.script.js +54 -0
- package/dist/views/Request/ResponseSection/ResponseBodyRaw.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyStreaming.vue.js +7 -0
- package/dist/views/Request/ResponseSection/ResponseBodyStreaming.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyStreaming.vue.script.js +85 -0
- package/dist/views/Request/ResponseSection/ResponseBodyStreaming.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyToggle.vue.js +7 -0
- package/dist/views/Request/ResponseSection/ResponseBodyToggle.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyToggle.vue.script.js +25 -0
- package/dist/views/Request/ResponseSection/ResponseBodyToggle.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyVirtual.vue.js +8 -0
- package/dist/views/Request/ResponseSection/ResponseBodyVirtual.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseBodyVirtual.vue.script.js +51 -0
- package/dist/views/Request/ResponseSection/ResponseBodyVirtual.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseCookies.vue.js +7 -0
- package/dist/views/Request/ResponseSection/ResponseCookies.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseCookies.vue.script.js +39 -0
- package/dist/views/Request/ResponseSection/ResponseCookies.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseEmpty.vue.js +9 -0
- package/dist/views/Request/ResponseSection/ResponseEmpty.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseEmpty.vue.script.js +98 -0
- package/dist/views/Request/ResponseSection/ResponseEmpty.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseHeaders.vue.js +7 -0
- package/dist/views/Request/ResponseSection/ResponseHeaders.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseHeaders.vue.script.js +77 -0
- package/dist/views/Request/ResponseSection/ResponseHeaders.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseLoadingOverlay.vue.js +9 -0
- package/dist/views/Request/ResponseSection/ResponseLoadingOverlay.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseLoadingOverlay.vue.script.js +44 -0
- package/dist/views/Request/ResponseSection/ResponseLoadingOverlay.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseMetaInformation.vue.js +7 -0
- package/dist/views/Request/ResponseSection/ResponseMetaInformation.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseMetaInformation.vue.script.js +64 -0
- package/dist/views/Request/ResponseSection/ResponseMetaInformation.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseSection.vue.d.ts +1 -1
- package/dist/views/Request/ResponseSection/ResponseSection.vue.js +9 -0
- package/dist/views/Request/ResponseSection/ResponseSection.vue.js.map +1 -0
- package/dist/views/Request/ResponseSection/ResponseSection.vue.script.js +206 -0
- package/dist/views/Request/ResponseSection/ResponseSection.vue.script.js.map +1 -0
- package/dist/views/Request/ResponseSection/index.d.ts +2 -2
- package/dist/views/Request/ResponseSection/index.js +2 -6
- package/dist/views/Request/components/WorkspaceDropdown.vue.js +7 -0
- package/dist/views/Request/components/WorkspaceDropdown.vue.js.map +1 -0
- package/dist/views/Request/components/WorkspaceDropdown.vue.script.js +182 -0
- package/dist/views/Request/components/WorkspaceDropdown.vue.script.js.map +1 -0
- package/dist/views/Request/components/index.d.ts +1 -1
- package/dist/views/Request/components/index.js +1 -1
- package/dist/views/Request/consts/index.d.ts +2 -2
- package/dist/views/Request/consts/index.js +2 -1
- package/dist/views/Request/consts/mediaTypes.js +231 -0
- package/dist/views/Request/consts/mediaTypes.js.map +1 -0
- package/dist/views/Request/consts/new-auth-options.js +90 -0
- package/dist/views/Request/consts/new-auth-options.js.map +1 -0
- package/dist/views/Request/handle-drag.d.ts +1 -1
- package/dist/views/Request/handle-drag.js +51 -0
- package/dist/views/Request/handle-drag.js.map +1 -0
- package/dist/views/Request/hooks/useOpenApiWatcher.js +96 -0
- package/dist/views/Request/hooks/useOpenApiWatcher.js.map +1 -0
- package/dist/views/Request/libs/auth.js +74 -0
- package/dist/views/Request/libs/auth.js.map +1 -0
- package/dist/views/Request/libs/index.d.ts +3 -3
- package/dist/views/Request/libs/index.js +3 -2
- package/dist/views/Request/libs/oauth2.d.ts +1 -1
- package/dist/views/Request/libs/oauth2.js +178 -0
- package/dist/views/Request/libs/oauth2.js.map +1 -0
- package/dist/views/Request/libs/request.js +46 -0
- package/dist/views/Request/libs/request.js.map +1 -0
- package/dist/views/Request/libs/watch-mode.d.ts +1 -1
- package/dist/views/Request/libs/watch-mode.js +375 -0
- package/dist/views/Request/libs/watch-mode.js.map +1 -0
- package/dist/views/Settings/Settings.vue.js +7 -0
- package/dist/views/Settings/Settings.vue.js.map +1 -0
- package/dist/views/Settings/Settings.vue.script.js +28 -0
- package/dist/views/Settings/Settings.vue.script.js.map +1 -0
- package/dist/views/Settings/SettingsGeneral.vue.js +7 -0
- package/dist/views/Settings/SettingsGeneral.vue.js.map +1 -0
- package/dist/views/Settings/SettingsGeneral.vue.script.js +241 -0
- package/dist/views/Settings/SettingsGeneral.vue.script.js.map +1 -0
- package/dist/views/Settings/components/SettingsAppearance.vue.js +7 -0
- package/dist/views/Settings/components/SettingsAppearance.vue.js.map +1 -0
- package/dist/views/Settings/components/SettingsAppearance.vue.script.js +62 -0
- package/dist/views/Settings/components/SettingsAppearance.vue.script.js.map +1 -0
- package/dist/views/Settings/components/SettingsSection.vue.js +7 -0
- package/dist/views/Settings/components/SettingsSection.vue.js.map +1 -0
- package/dist/views/Settings/components/SettingsSection.vue.script.js +27 -0
- package/dist/views/Settings/components/SettingsSection.vue.script.js.map +1 -0
- package/package.json +19 -14
- package/dist/AddressBar-BOZGKSoz.js +0 -302
- package/dist/AddressBar-BOZGKSoz.js.map +0 -1
- package/dist/App-Ckirvnv1.js +0 -2510
- package/dist/App-Ckirvnv1.js.map +0 -1
- package/dist/App-DHBmpWJI.js +0 -533
- package/dist/App-DHBmpWJI.js.map +0 -1
- package/dist/CodeInput-BTN8cC5h.js +0 -694
- package/dist/CodeInput-BTN8cC5h.js.map +0 -1
- package/dist/CodeSnippet-D7Heh1nd.js +0 -218
- package/dist/CodeSnippet-D7Heh1nd.js.map +0 -1
- package/dist/Collection-BsAG7ms5.js +0 -219
- package/dist/Collection-BsAG7ms5.js.map +0 -1
- package/dist/CollectionAuthentication-BMGhRnpo.js +0 -56
- package/dist/CollectionAuthentication-BMGhRnpo.js.map +0 -1
- package/dist/CollectionCookies-DyjPPMdt.js +0 -19
- package/dist/CollectionCookies-DyjPPMdt.js.map +0 -1
- package/dist/CollectionEnvironment-BY9Gcnln.js +0 -514
- package/dist/CollectionEnvironment-BY9Gcnln.js.map +0 -1
- package/dist/CollectionOverview-C3GvN8GY.js +0 -131
- package/dist/CollectionOverview-C3GvN8GY.js.map +0 -1
- package/dist/CollectionScripts-CMNlBlby.js +0 -19
- package/dist/CollectionScripts-CMNlBlby.js.map +0 -1
- package/dist/CollectionServers-DuOLysNB.js +0 -168
- package/dist/CollectionServers-DuOLysNB.js.map +0 -1
- package/dist/CollectionSettings-FtXNetOh.js +0 -87
- package/dist/CollectionSettings-FtXNetOh.js.map +0 -1
- package/dist/CollectionSync-CAflc5yW.js +0 -19
- package/dist/CollectionSync-CAflc5yW.js.map +0 -1
- package/dist/CommandActionInput-TkcAx6E8.js +0 -97
- package/dist/CommandActionInput-TkcAx6E8.js.map +0 -1
- package/dist/CommandPalette-BxoEK8TY.js +0 -964
- package/dist/CommandPalette-BxoEK8TY.js.map +0 -1
- package/dist/CommandPaletteImport-Diu5dDIY.js +0 -622
- package/dist/CommandPaletteImport-Diu5dDIY.js.map +0 -1
- package/dist/Cookies-BYTv1YIA.js +0 -284
- package/dist/Cookies-BYTv1YIA.js.map +0 -1
- package/dist/DataTable-BqbZKW3K.js +0 -62
- package/dist/DataTable-BqbZKW3K.js.map +0 -1
- package/dist/DataTableHeader-DJVB0jCZ.js +0 -21
- package/dist/DataTableHeader-DJVB0jCZ.js.map +0 -1
- package/dist/DataTableInput-RydMDjn2.js +0 -166
- package/dist/DataTableInput-RydMDjn2.js.map +0 -1
- package/dist/DataTableRow-c3XveEUO.js +0 -57
- package/dist/DataTableRow-c3XveEUO.js.map +0 -1
- package/dist/DeleteSidebarListElement-C-p87d03.js +0 -78
- package/dist/DeleteSidebarListElement-C-p87d03.js.map +0 -1
- package/dist/EditSidebarListElement-CodWPnM6.js +0 -32
- package/dist/EditSidebarListElement-CodWPnM6.js.map +0 -1
- package/dist/Editor-BomsGWHx.js +0 -909
- package/dist/Editor-BomsGWHx.js.map +0 -1
- package/dist/EmptyState-Cnm7hGW5.js +0 -46
- package/dist/EmptyState-Cnm7hGW5.js.map +0 -1
- package/dist/Environment-BIxG7DaO.js +0 -416
- package/dist/Environment-BIxG7DaO.js.map +0 -1
- package/dist/EnvironmentModal-C0lYytkh.js +0 -288
- package/dist/EnvironmentModal-C0lYytkh.js.map +0 -1
- package/dist/Form-KFcdRQp1.js +0 -83
- package/dist/Form-KFcdRQp1.js.map +0 -1
- package/dist/HttpMethod-rnWEgC3T.js +0 -78
- package/dist/HttpMethod-rnWEgC3T.js.map +0 -1
- package/dist/IconSelector-BDC_GQXv.js +0 -67
- package/dist/IconSelector-BDC_GQXv.js.map +0 -1
- package/dist/ImportCollection-CGjySEzP.js +0 -804
- package/dist/ImportCollection-CGjySEzP.js.map +0 -1
- package/dist/IntegrationLogo-B9EDW8db.js +0 -51
- package/dist/IntegrationLogo-B9EDW8db.js.map +0 -1
- package/dist/MainLayout-BnLwst16.js +0 -281
- package/dist/MainLayout-BnLwst16.js.map +0 -1
- package/dist/Modal-CTZ8UNds.js +0 -67
- package/dist/Modal-CTZ8UNds.js.map +0 -1
- package/dist/ModalClientContainer-qHsZi4wQ.js +0 -65
- package/dist/ModalClientContainer-qHsZi4wQ.js.map +0 -1
- package/dist/Request-d0RY0ZhC.js +0 -212
- package/dist/Request-d0RY0ZhC.js.map +0 -1
- package/dist/RequestAuth-1cRH3DDn.js +0 -989
- package/dist/RequestAuth-1cRH3DDn.js.map +0 -1
- package/dist/RequestRoot-pW0yXesG.js +0 -1611
- package/dist/RequestRoot-pW0yXesG.js.map +0 -1
- package/dist/RequestSection-D2BLvDTr.js +0 -1582
- package/dist/RequestSection-D2BLvDTr.js.map +0 -1
- package/dist/ResponseSection-B_YF7l_E.js +0 -949
- package/dist/ResponseSection-B_YF7l_E.js.map +0 -1
- package/dist/ScalarAsciiArt-BjuSnj8e.js +0 -45
- package/dist/ScalarAsciiArt-BjuSnj8e.js.map +0 -1
- package/dist/SectionFilter-hrtoRLwj.js +0 -99
- package/dist/SectionFilter-hrtoRLwj.js.map +0 -1
- package/dist/Server-CEKGIEfE.js +0 -303
- package/dist/Server-CEKGIEfE.js.map +0 -1
- package/dist/ServerVariablesForm-BRZ9XC8o.js +0 -145
- package/dist/ServerVariablesForm-BRZ9XC8o.js.map +0 -1
- package/dist/Settings-BaPvhJ8Y.js +0 -347
- package/dist/Settings-BaPvhJ8Y.js.map +0 -1
- package/dist/Sidebar-CRxdl38Y.js +0 -73
- package/dist/Sidebar-CRxdl38Y.js.map +0 -1
- package/dist/SidebarButton-BAagdMDe.js +0 -37
- package/dist/SidebarButton-BAagdMDe.js.map +0 -1
- package/dist/SidebarListElement-BfTPiihc.js +0 -232
- package/dist/SidebarListElement-BfTPiihc.js.map +0 -1
- package/dist/TheCommandPalette-Dl9TAeke.js +0 -204
- package/dist/TheCommandPalette-Dl9TAeke.js.map +0 -1
- package/dist/ValueEmitter-QYkZ9Hdc.js +0 -20
- package/dist/ValueEmitter-QYkZ9Hdc.js.map +0 -1
- package/dist/ViewLayout-BOXN0IYo.js +0 -17
- package/dist/ViewLayout-BOXN0IYo.js.map +0 -1
- package/dist/ViewLayoutCollapse-CiTb-Uml.js +0 -86
- package/dist/ViewLayoutCollapse-CiTb-Uml.js.map +0 -1
- package/dist/ViewLayoutContent-CvMoJYPF.js +0 -13
- package/dist/ViewLayoutContent-CvMoJYPF.js.map +0 -1
- package/dist/ViewLayoutSection-mUqKbQry.js +0 -23
- package/dist/ViewLayoutSection-mUqKbQry.js.map +0 -1
- package/dist/WatchModeToggle-D_eAiTWJ.js +0 -41
- package/dist/WatchModeToggle-D_eAiTWJ.js.map +0 -1
- package/dist/_plugin-vue_export-helper-BmmBcIzD.js +0 -8
- package/dist/analytics-BZimCWcw.js +0 -7
- package/dist/analytics-BZimCWcw.js.map +0 -1
- package/dist/analytics.d.ts +0 -18
- package/dist/analytics.d.ts.map +0 -1
- package/dist/build-request-security-BQjNr2MD.js +0 -41
- package/dist/build-request-security-BQjNr2MD.js.map +0 -1
- package/dist/code-input-iq-moLxi.js +0 -775
- package/dist/code-input-iq-moLxi.js.map +0 -1
- package/dist/components-B0BwUDFw.js +0 -183
- package/dist/components-B0BwUDFw.js.map +0 -1
- package/dist/components-ChixwQhN.js +0 -61
- package/dist/components-ChixwQhN.js.map +0 -1
- package/dist/computer-D7VW3Ruy.js +0 -562
- package/dist/computer-D7VW3Ruy.js.map +0 -1
- package/dist/consts-CyGRb9dl.js +0 -318
- package/dist/consts-CyGRb9dl.js.map +0 -1
- package/dist/curl-nbw1OxbV.js +0 -54
- package/dist/curl-nbw1OxbV.js.map +0 -1
- package/dist/data-table-PL7e8NRO.js +0 -282
- package/dist/data-table-PL7e8NRO.js.map +0 -1
- package/dist/editor-BZ_J0eze.js +0 -466
- package/dist/editor-BZ_J0eze.js.map +0 -1
- package/dist/environments-ByLK9lnC.js +0 -592
- package/dist/environments-ByLK9lnC.js.map +0 -1
- package/dist/formatters-DOGXZq9R.js +0 -36
- package/dist/formatters-DOGXZq9R.js.map +0 -1
- package/dist/forms-CZX6cFDS.js +0 -42
- package/dist/forms-CZX6cFDS.js.map +0 -1
- package/dist/get-active-environment-CkxyQ1dM.js +0 -19
- package/dist/get-active-environment-CkxyQ1dM.js.map +0 -1
- package/dist/get-resolved-url-SybDPV0U.js +0 -85
- package/dist/get-resolved-url-SybDPV0U.js.map +0 -1
- package/dist/get-server-url-UVN-dx79.js +0 -32
- package/dist/get-server-url-UVN-dx79.js.map +0 -1
- package/dist/get-servers-B_WNlQWB.js +0 -106
- package/dist/get-servers-B_WNlQWB.js.map +0 -1
- package/dist/get-snippet-DBRUSfZ2.js +0 -39
- package/dist/get-snippet-DBRUSfZ2.js.map +0 -1
- package/dist/global-cookies-D3ZS9ON3.js +0 -184
- package/dist/global-cookies-D3ZS9ON3.js.map +0 -1
- package/dist/hooks/useAnalytics.d.ts +0 -19
- package/dist/hooks/useAnalytics.d.ts.map +0 -1
- package/dist/hooks-BvZxH4XB.js +0 -80
- package/dist/hooks-BvZxH4XB.js.map +0 -1
- package/dist/layout-BWiL7dfb.js +0 -81
- package/dist/layout-BWiL7dfb.js.map +0 -1
- package/dist/layouts/Web/index.js.map +0 -1
- package/dist/libs-spbv4P0g.js +0 -249
- package/dist/libs-spbv4P0g.js.map +0 -1
- package/dist/operation-block-B1B3lJPx.js +0 -1674
- package/dist/operation-block-B1B3lJPx.js.map +0 -1
- package/dist/operation-code-sample-DOzAPxLQ.js +0 -1738
- package/dist/operation-code-sample-DOzAPxLQ.js.map +0 -1
- package/dist/parse-curl-BtypQT3D.js +0 -106
- package/dist/parse-curl-BtypQT3D.js.map +0 -1
- package/dist/plugins-B52hCIyZ.js +0 -50
- package/dist/plugins-B52hCIyZ.js.map +0 -1
- package/dist/rabbitjump-CMZXAR6d.js +0 -9
- package/dist/rabbitjump-CMZXAR6d.js.map +0 -1
- package/dist/request-block-C1kLLMEd.js +0 -1466
- package/dist/request-block-C1kLLMEd.js.map +0 -1
- package/dist/resize-D2IYvVdh.js +0 -114
- package/dist/resize-D2IYvVdh.js.map +0 -1
- package/dist/response-block-DmkaDZYs.js +0 -1188
- package/dist/response-block-DmkaDZYs.js.map +0 -1
- package/dist/scalar-address-bar-block-BbysOhkE.js +0 -425
- package/dist/scalar-address-bar-block-BbysOhkE.js.map +0 -1
- package/dist/scalar-auth-selector-block-Bs79QOMA.js +0 -1889
- package/dist/scalar-auth-selector-block-Bs79QOMA.js.map +0 -1
- package/dist/search-CmsQQkjn.js +0 -151
- package/dist/search-CmsQQkjn.js.map +0 -1
- package/dist/send-request-BsTfRiBC.js +0 -348
- package/dist/send-request-BsTfRiBC.js.map +0 -1
- package/dist/server-tcI-OCyx.js +0 -140
- package/dist/server-tcI-OCyx.js.map +0 -1
- package/dist/set-request-cookies-BJJhsU4A.js +0 -88
- package/dist/set-request-cookies-BJJhsU4A.js.map +0 -1
- package/dist/settings-BKk_1lcH.js +0 -455
- package/dist/settings-BKk_1lcH.js.map +0 -1
- package/dist/sidebar-ceSbYmnt.js +0 -217
- package/dist/sidebar-ceSbYmnt.js.map +0 -1
- package/dist/store-DnlAQK5d.js +0 -1512
- package/dist/store-DnlAQK5d.js.map +0 -1
- package/dist/string-template-sS5PtY6T.js +0 -64
- package/dist/string-template-sS5PtY6T.js.map +0 -1
- package/dist/use-global-hot-keys-D8Ai8Qbm.js +0 -274
- package/dist/use-global-hot-keys-D8Ai8Qbm.js.map +0 -1
- package/dist/useSidebar-DLTwHDI-.js +0 -45
- package/dist/useSidebar-DLTwHDI-.js.map +0 -1
- package/dist/v2/components/modals/index.js.map +0 -1
- package/dist/v2/features/app/index.js.map +0 -1
- package/dist/v2/features/modal/index.js.map +0 -1
- package/dist/views/Request/RequestSection/index.js.map +0 -1
- package/dist/watch-mode-Dbaqd9bG.js +0 -375
- package/dist/watch-mode-Dbaqd9bG.js.map +0 -1
package/dist/App-Ckirvnv1.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"App-Ckirvnv1.js","names":[],"sources":["../src/v2/features/app/helpers/get-route-param.ts","../src/v2/features/app/helpers/group-workspaces.ts","../src/v2/features/app/hooks/use-theme.ts","../src/v2/helpers/get-tab-details.ts","../src/v2/helpers/storage.ts","../src/v2/features/app/app-events.ts","../src/v2/features/app/helpers/filter-workspaces.ts","../src/v2/features/app/app-state.ts","../src/v2/features/app/components/CreateWorkspaceModal.vue","../src/v2/features/app/components/CreateWorkspaceModal.vue","../src/v2/features/app/components/SplashScreen.vue","../src/v2/features/app/components/SplashScreen.vue","../src/v2/features/app/hooks/use-document-watcher.ts","../src/v2/hooks/use-color-mode.ts","../src/v2/features/app/components/DownloadAppButton.vue","../src/v2/features/app/components/DownloadAppButton.vue","../src/v2/features/app/components/SidebarItemMenu.vue","../src/v2/features/app/components/SidebarItemMenu.vue","../src/v2/helpers/drag-handle-factory.ts","../src/v2/features/app/components/AppSidebar.vue","../src/v2/features/app/components/AppSidebar.vue","../src/v2/features/app/components/DesktopTab.vue","../src/v2/features/app/components/DesktopTab.vue","../src/v2/features/app/components/DesktopTabs.vue","../src/v2/features/app/components/DesktopTabs.vue","../src/v2/features/app/App.vue","../src/v2/features/app/App.vue"],"sourcesContent":["import type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport { isHttpMethod } from '@scalar/helpers/http/is-http-method'\nimport type { RouteLocationNormalizedGeneric } from 'vue-router'\n\nimport type { ScalarClientAppRouteParams } from '@/v2/features/app/helpers/routes'\n\n/** Extracts a string parameter from the route */\nexport function getRouteParam(paramName: 'method', route: RouteLocationNormalizedGeneric | null): HttpMethod | undefined\nexport function getRouteParam(\n paramName: Exclude<ScalarClientAppRouteParams, 'method'>,\n route: RouteLocationNormalizedGeneric | null,\n): string | undefined\nexport function getRouteParam(\n paramName: ScalarClientAppRouteParams,\n route: RouteLocationNormalizedGeneric | null,\n): string | undefined {\n const param = route?.params[paramName]\n\n if (typeof param !== 'string') {\n return undefined\n }\n\n if (paramName === 'method') {\n return param && isHttpMethod(param) ? param : undefined\n }\n\n return decodeURIComponent(param)\n}\n","import type { ScalarListboxOption, WorkspaceGroup } from '@scalar/components'\n\n/**\n * Represents a workspace with team information.\n * Used to group workspaces by team or local status.\n */\nexport type WorkspaceItem = {\n /** Unique identifier for the workspace. */\n id: string\n /** Display name of the workspace. */\n label: string\n /** Team identifier. Use 'local' for local workspaces. */\n teamUid: string\n}\n\n/**\n * Groups workspaces into team and local categories.\n * Team workspaces are listed first (if not viewing local workspaces),\n * followed by local workspaces.\n *\n * @param workspaces - Array of workspaces to group\n * @param currentTeamUid - Current team identifier ('local' for local team)\n * @returns Array of workspace groups with labels and options\n */\nexport function groupWorkspacesByTeam(workspaces: WorkspaceItem[], currentTeamUid: string): WorkspaceGroup[] {\n // Group workspaces by teamUid\n const workspacesByTeam = workspaces.reduce<Record<string, ScalarListboxOption[]>>((acc, workspace) => {\n const teamUid = workspace.teamUid\n\n if (!acc[teamUid]) {\n acc[teamUid] = []\n }\n\n acc[teamUid].push({\n id: workspace.id,\n label: workspace.label,\n })\n\n return acc\n }, {})\n\n const result: WorkspaceGroup[] = []\n\n // Add current team workspaces (if not local)\n if (currentTeamUid !== 'local') {\n const teamWorkspaces = workspacesByTeam[currentTeamUid] ?? []\n\n if (teamWorkspaces.length > 0) {\n result.push({\n label: 'Team Workspaces',\n options: teamWorkspaces,\n })\n }\n }\n\n // Always add local workspaces section\n result.push({\n label: 'Local Workspaces',\n options: workspacesByTeam['local'] ?? [],\n })\n\n return result\n}\n","import { type Theme, defaultFonts, themePresets } from '@scalar/themes'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport { type MaybeRefOrGetter, computed, toValue } from 'vue'\n\nconst themePresentsMap = new Map<string, Theme>(themePresets.map((theme) => [theme.slug, theme]))\n\n/**\n * Wraps theme CSS styles in a style tag for injection into the DOM.\n */\nconst wrapThemeInStyleTag = (themeStyles: string, dataTestId: string = 'scalar-theme') => {\n return `<style id=\"scalar-theme\" data-testid=\"${dataTestId}\">${themeStyles}</style>`\n}\n\n/**\n * Resolves theme styles by slug from built-in presets or custom themes.\n * Returns undefined if the theme is not found.\n */\nconst resolveThemeStyles = (themeSlug: string, customThemes: Theme[]): string | undefined => {\n const addFonts = (themeStyles?: string) => {\n return `${themeStyles}\\n${defaultFonts}`\n }\n\n // Check built-in theme presets first\n if (themePresentsMap.has(themeSlug)) {\n return addFonts(themePresentsMap.get(themeSlug)?.theme ?? '')\n }\n\n // Check custom themes provided via props\n const customTheme = customThemes.find((theme) => theme.slug === themeSlug)\n if (customTheme) {\n return addFonts(customTheme.theme)\n }\n\n return undefined\n}\n\n/**\n * useTheme\n *\n * Reactive Vue.js hook to resolve and generate a <style> tag string based on the current theme.\n * Automatically selects the appropriate theme styles in the following priority order:\n * 1. Workspace theme (from the provided store, e.g. store.workspace['x-scalar-theme'])\n * 2. Fallback theme (from the fallbackThemeSlug prop)\n * 3. Default built-in theme (with slug \"default\")\n *\n * The returned `themeStyleTag` can be injected into your page to dynamically apply theming.\n *\n * @example\n * ```ts\n * // In a Vue component setup() function\n * import { ref } from 'vue'\n * import { useTheme } from './use-theme'\n *\n * const myThemes = ref([...])\n * const workspaceStore = ref(...)\n * const fallbackThemeSlug = ref('dark')\n *\n * const { themeStyleTag } = useTheme({\n * customThemes: myThemes,\n * fallbackThemeSlug,\n * store: workspaceStore\n * })\n *\n * // To inject in template:\n * // <div v-html=\"themeStyleTag\"></div>\n * ```\n */\nexport const useTheme = ({\n fallbackThemeSlug,\n store,\n customThemes,\n}: {\n customThemes: MaybeRefOrGetter<Theme[]>\n fallbackThemeSlug: MaybeRefOrGetter<string>\n store: MaybeRefOrGetter<WorkspaceStore | null>\n}) => {\n const themeStyles = computed<{ themeStyles: string; themeSlug: string }>(() => {\n // Always-defined fallback: built-in \"default\" theme\n const defaultThemeStyles = { themeStyles: resolveThemeStyles('default', [])!, themeSlug: 'default' }\n\n // Evaluate values\n const storeValue = toValue(store)\n const fallbackThemeSlugValue = toValue(fallbackThemeSlug)\n\n // If the store is not loaded, fall back immediately to default styling\n if (storeValue === null) {\n return defaultThemeStyles\n }\n\n // Determine which theme to use: prefer workspace theme, unless it's 'none'\n const workspaceTheme = storeValue.workspace['x-scalar-theme']\n const themeSlug = workspaceTheme === 'none' ? fallbackThemeSlugValue : workspaceTheme\n\n // First: If no theme slug is set, try fallback theme, else default\n if (!themeSlug) {\n const fallbackStyles = resolveThemeStyles(fallbackThemeSlugValue, toValue(customThemes))\n return fallbackStyles ? { themeStyles: fallbackStyles, themeSlug: fallbackThemeSlugValue } : defaultThemeStyles\n }\n\n // Second: Try resolving styles for the workspace or specified theme\n const themeStyles = resolveThemeStyles(themeSlug, toValue(customThemes))\n if (themeStyles) {\n return { themeStyles: themeStyles, themeSlug }\n }\n\n // Third: If theme not found, try resolving fallback theme\n const fallbackStyles = resolveThemeStyles(fallbackThemeSlugValue, toValue(customThemes))\n if (fallbackStyles) {\n return { themeStyles: fallbackStyles, themeSlug: fallbackThemeSlugValue }\n }\n\n // Last resort: use the built-in default theme\n return defaultThemeStyles\n })\n\n const themeStyleTag = computed(() => {\n return wrapThemeInStyleTag(themeStyles.value.themeStyles, themeStyles.value.themeSlug)\n })\n\n return {\n /**\n * Computed ref containing the resolved theme styles object\n * for the currently active theme. Always returns a style object,\n * never null, with proper fallback logic if custom or workspace themes are missing.\n */\n themeStyles,\n\n /**\n * Computed ref containing a <style> tag as a string,\n * ready to be injected into the DOM.\n * This wraps the currently active theme CSS variables/styles.\n */\n themeStyleTag,\n }\n}\n","import type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport type { Tab } from '@scalar/workspace-store/schemas/extensions/workspace'\n\nimport type { GetEntryByLocation } from '@/v2/features/app/app-state'\n\n/**\n * Returns display details for a tab in the API client UI.\n * Determines the title and icon to use based on workspace, document, path, and method.\n *\n * - If no workspace is provided, returns { title: 'Untitled Tab' }.\n * - If document is present, attempts to fetch an entry using getEntryByLocation, and returns:\n * - { title: entry.title, icon: 'document' } for document entry types,\n * - { title: entry.title, icon: 'request' } for all other types,\n * - If no entry found, returns { title: 'Untitled Tab' }.\n * - If neither document nor entry is available, returns { title: 'Workspace' }.\n *\n * Example:\n * ```\n * const result = getTabDetails({\n * workspace: \"main\",\n * document: \"doc1\",\n * path: \"/users\",\n * method: \"get\",\n * getEntryByLocation: ({ document, path, method }) => {\n * // Mock lookup:\n * if (document === \"doc1\" && path === \"/users\") {\n * return { type: \"document\", title: \"Users\" }\n * }\n * return null\n * }\n * })\n * // result: { title: \"Users\", icon: \"document\" }\n * ```\n */\nexport const getTabDetails = ({\n workspace,\n document,\n path,\n method,\n getEntryByLocation,\n}: {\n workspace?: string\n document?: string\n path?: string\n method?: HttpMethod\n getEntryByLocation: GetEntryByLocation\n}): { title: string; icon?: Tab['icon'] } => {\n if (!workspace) {\n return {\n title: 'Untitled Tab',\n }\n }\n\n if (document) {\n const entry = getEntryByLocation({\n document,\n path,\n method,\n })\n\n if (!entry) {\n return {\n title: 'Untitled Tab',\n }\n }\n\n if (entry.type === 'document') {\n return {\n title: entry.title,\n icon: 'document',\n }\n }\n\n return {\n title: entry.title,\n icon: 'request',\n }\n }\n\n return {\n title: 'Workspace',\n }\n}\n","import { safeLocalStorage } from '@scalar/helpers/object/local-storage'\n\nconst CURRENT_PATH_KEY = 'scalar.currentPath' as const\n\n/**\n * Handles persistence of the active workspace ID in localStorage.\n *\n * Usage example:\n * ```ts\n * // Set the active workspace id\n * workspaceStorage.setActiveWorkspaceId('workspace-1');\n *\n * // Get the currently active workspace id\n * const id = workspaceStorage.getActiveWorkspaceId();\n * ```\n */\nexport const workspaceStorage = {\n /**\n * We keep the currently active path so we can reload it if needed\n */\n setCurrentPath: (path: string): void => {\n // We have an infinite redirect loop if we set the current path to the root path\n if (path === '/') {\n return\n }\n safeLocalStorage().setItem(CURRENT_PATH_KEY, path)\n },\n\n /**\n * Retrieve the last active path\n */\n getLastPath: (): string | null => {\n return safeLocalStorage().getItem(CURRENT_PATH_KEY)\n },\n} as const\n","import type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { OperationExampleMeta, WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { type ShallowRef, computed } from 'vue'\nimport { type NavigationFailure, NavigationFailureType, type Router } from 'vue-router'\n\nimport type { ScalarClientAppRouteParams } from '@/v2/features/app/helpers/routes'\nimport { initializeWorkspaceEventHandlers } from '@/v2/workspace-events'\n\nexport function initializeAppEventHandlers({\n eventBus,\n store,\n router,\n rebuildSidebar,\n navigateToCurrentTab,\n onSelectSidebarItem,\n onAfterExampleCreation,\n onCopyTabUrl,\n onToggleSidebar,\n closeSidebar,\n renameWorkspace,\n}: {\n eventBus: WorkspaceEventBus\n store: ShallowRef<WorkspaceStore | null>\n router: Router\n rebuildSidebar: (documentName?: string) => void\n navigateToCurrentTab: () => Promise<void>\n onSelectSidebarItem: (id: string) => void\n onAfterExampleCreation: (o: OperationExampleMeta & { documentName?: string }) => void\n onCopyTabUrl: (tabIndex: number) => void\n onToggleSidebar: () => void\n closeSidebar: () => void\n renameWorkspace: (name: string) => Promise<void>\n}) {\n const currentRoute = computed(() => router.currentRoute?.value)\n\n /**\n * Checks if the current route params match the specified operation meta.\n * Useful for determining if the sidebar or UI needs to be updated after changes to operations/examples.\n *\n * NOTE: It may be beneficial to compare to the active state instead of the router\n */\n const isRouteParamsMatch = ({\n documentName,\n path,\n method,\n exampleName,\n }: {\n documentName: string\n path?: string\n method?: HttpMethod\n exampleName?: string\n }) => {\n if (documentName !== undefined && documentName !== currentRoute.value?.params.documentSlug) {\n return false\n }\n if (path !== undefined && encodeURIComponent(path) !== currentRoute.value?.params.pathEncoded) {\n return false\n }\n if (method !== undefined && method !== currentRoute.value?.params.method) {\n return false\n }\n if (exampleName !== undefined && exampleName !== currentRoute.value?.params.exampleName) {\n return false\n }\n return true\n }\n\n initializeWorkspaceEventHandlers({\n eventBus,\n store,\n hooks: {\n //------------------------------------------------------------------------------------\n // Document Related Hooks\n //------------------------------------------------------------------------------------\n 'document:delete:document': {\n onAfterExecute: async (payload) => {\n // Redirect to the workspace environment page if the document was deleted\n if (currentRoute?.value?.params.documentSlug === payload.name) {\n await router.push({\n name: 'workspace.environment',\n })\n }\n },\n },\n //------------------------------------------------------------------------------------\n // Operation Related Hooks\n //------------------------------------------------------------------------------------\n 'operation:update:pathMethod': {\n onBeforeExecute: (payload) => ({\n ...payload,\n callback: async (status) => {\n // Redirect to the new example if the mutation was successful\n if (status === 'success') {\n // Rebuild the sidebar with the updated order\n rebuildSidebar(store.value?.workspace.activeDocument?.['x-scalar-navigation']?.name)\n\n await router.replace({\n name: 'example',\n params: {\n method: payload.payload.method,\n pathEncoded: encodeURIComponent(payload.payload.path),\n exampleName: currentRoute.value?.params.exampleName,\n },\n })\n }\n payload.callback(status)\n },\n }),\n },\n 'operation:upsert:parameter': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n 'operation:update:extra-parameters': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n 'operation:reload:history': {\n onAfterExecute: (payload) => onAfterExampleCreation({ ...payload.meta, exampleKey: 'draft' }),\n },\n 'operation:delete:operation': {\n onAfterExecute: async (payload) => {\n rebuildSidebar(payload.documentName)\n const {\n documentName,\n meta: { path, method },\n } = payload\n // Navigate to the document overview page if the operation was deleted\n if (\n isRouteParamsMatch({\n documentName,\n path,\n method,\n })\n ) {\n await router.replace({\n name: 'document.overview',\n params: {\n documentSlug: documentName,\n },\n })\n }\n },\n },\n 'operation:create:draft-example': {\n onAfterExecute: async (payload) => {\n onAfterExampleCreation({ ...payload.meta, exampleKey: payload.exampleName })\n await router.push({\n name: 'example',\n params: {\n documentSlug: payload.documentName,\n pathEncoded: encodeURIComponent(payload.meta.path),\n method: payload.meta.method,\n exampleName: payload.exampleName,\n },\n })\n },\n },\n 'operation:delete:example': {\n onAfterExecute: async (payload) => {\n rebuildSidebar(payload.documentName)\n\n const {\n documentName,\n meta: { path, method, exampleKey },\n } = payload\n // Navigate to the default example if the example was deleted\n if (\n isRouteParamsMatch({\n documentName,\n path,\n method,\n exampleName: exampleKey,\n })\n ) {\n await router.replace({\n name: 'example',\n params: {\n pathEncoded: encodeURIComponent(path),\n method,\n documentSlug: documentName,\n exampleName: 'default',\n },\n })\n }\n },\n },\n 'operation:rename:example': {\n onAfterExecute: async ({ meta, payload, documentName }) => {\n // Refresh sidebar\n onAfterExampleCreation({ ...meta, exampleKey: payload.name, documentName })\n\n // Redirect to the new example if the mutation was successful and we are currently on the example\n if (\n isRouteParamsMatch({ documentName, path: meta.path, method: meta.method, exampleName: meta.exampleKey })\n ) {\n await router.replace({\n name: 'example',\n params: {\n documentSlug: documentName,\n pathEncoded: encodeURIComponent(meta.path),\n method: meta.method,\n exampleName: payload.name,\n },\n })\n }\n },\n },\n //------------------------------------------------------------------------------------\n // Operation Request Body Related Hooks\n //------------------------------------------------------------------------------------\n 'operation:update:requestBody:value': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n 'operation:update:requestBody:formValue': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n //------------------------------------------------------------------------------------\n // Tag Related Event Hooks\n //------------------------------------------------------------------------------------\n 'tag:create:tag': {\n onAfterExecute: (payload) => rebuildSidebar(payload.documentName),\n },\n 'tag:edit:tag': {\n onAfterExecute: async (payload) => {\n rebuildSidebar(payload.documentName)\n\n /**\n * If the currently viewed operation is a child of the renamed tag, redirect to\n * the same route so the sidebar and breadcrumbs reflect the new tag name\n */\n const isNestedUnderTag = payload.tag.children?.some(\n (child) =>\n child.type === 'operation' &&\n isRouteParamsMatch({\n documentName: payload.documentName,\n path: child.path,\n method: child.method,\n }),\n )\n\n if (isNestedUnderTag) {\n await router.replace({ ...currentRoute.value })\n }\n },\n },\n 'tag:delete:tag': {\n onAfterExecute: (payload) => rebuildSidebar(payload.documentName),\n },\n //------------------------------------------------------------------------------------\n // Tabs Related Event Hooks\n //------------------------------------------------------------------------------------\n 'tabs:add:tab': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:close:tab': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:focus:tab': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:focus:tab-last': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:navigate:previous': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:navigate:next': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:update:tabs': {\n onAfterExecute: navigateToCurrentTab,\n },\n },\n })\n\n // Worksapce rename event handler\n eventBus.on('workspace:update:name', (payload) => renameWorkspace(payload))\n\n //------------------------------------------------------------------------------------\n // Navigation Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('scroll-to:nav-item', ({ id }) => onSelectSidebarItem(id))\n\n //------------------------------------------------------------------------------------\n // UI Related Event Handlers\n //------------------------------------------------------------------------------------\n // Note: Command palette handler is colocated with the command palette component\n\n eventBus.on('ui:toggle:sidebar', onToggleSidebar)\n\n /**\n * Bind the inernal navigation to a public api\n */\n eventBus.on('ui:navigate', async (payload) => {\n const { replace = false } = payload\n const fn = replace ? router.replace : router.push\n\n const execCallback = (result: NavigationFailure | void | undefined) => {\n if (!result) {\n // Close the sidebar if it is open\n closeSidebar()\n return payload.callback?.('success')\n }\n\n const navigationFailure: 16 = NavigationFailureType.duplicated\n\n if (result.type !== navigationFailure) {\n return payload.callback?.('error')\n }\n\n return payload.callback?.('success')\n }\n\n type ValidParams = Partial<Record<ScalarClientAppRouteParams, string>>\n\n if (payload.page === 'document') {\n const params = {\n documentSlug: payload.documentSlug,\n workspaceSlug: payload.workspaceSlug,\n namespace: payload.namespace,\n } satisfies ValidParams\n\n if (payload.path === 'overview') {\n return execCallback(await fn({ name: 'document.overview', params }))\n }\n if (payload.path === 'servers') {\n return execCallback(await fn({ name: 'document.servers', params }))\n }\n if (payload.path === 'environment') {\n return execCallback(await fn({ name: 'document.environment', params }))\n }\n if (payload.path === 'authentication') {\n return execCallback(await fn({ name: 'document.authentication', params }))\n }\n if (payload.path === 'cookies') {\n return execCallback(await fn({ name: 'document.cookies', params }))\n }\n if (payload.path === 'settings') {\n return execCallback(await fn({ name: 'document.settings', params }))\n }\n }\n\n if (payload.page === 'workspace') {\n const params = { workspaceSlug: payload.workspaceSlug, namespace: payload.namespace } satisfies ValidParams\n if (payload.path === 'environment') {\n return execCallback(await fn({ name: 'workspace.environment', params }))\n }\n if (payload.path === 'cookies') {\n return execCallback(await fn({ name: 'workspace.cookies', params }))\n }\n if (payload.path === 'settings') {\n return execCallback(await fn({ name: 'workspace.settings', params }))\n }\n }\n\n if (payload.page === 'example') {\n const params = {\n namespace: payload.namespace,\n workspaceSlug: payload.workspaceSlug,\n documentSlug: payload.documentSlug,\n pathEncoded: encodeURIComponent(payload.path),\n method: payload.method,\n exampleName: payload.exampleName,\n } satisfies ValidParams\n return execCallback(await fn({ name: 'example', params }))\n }\n\n if (payload.page === 'operation') {\n const params = {\n namespace: payload.namespace,\n workspaceSlug: payload.workspaceSlug,\n documentSlug: payload.documentSlug,\n pathEncoded: encodeURIComponent(payload.operationPath),\n method: payload.method,\n } satisfies ValidParams\n if (payload.path === 'overview') {\n return execCallback(await fn({ name: 'operation.overview', params }))\n }\n if (payload.path === 'servers') {\n return execCallback(await fn({ name: 'operation.servers', params }))\n }\n if (payload.path === 'authentication') {\n return execCallback(await fn({ name: 'operation.authentication', params }))\n }\n }\n })\n\n //------------------------------------------------------------------------------------\n // Tabs Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('tabs:copy:url', (payload) => onCopyTabUrl(payload.index))\n}\n","/**\n * Filters workspaces to show only those accessible to the current team.\n *\n * A workspace is accessible if:\n * - Its teamUid matches the current team, OR\n * - Its teamUid is 'local' (local workspaces are always accessible)\n *\n * @param workspaces - Array of workspaces to filter\n * @param currentTeamUid - The currently active team identifier\n * @returns Filtered array of workspaces accessible to the current team\n *\n * @example\n * ```ts\n * const workspaces = [\n * { id: '1', teamUid: 'local', name: 'Local' },\n * { id: '2', teamUid: 'team-a', name: 'Team A' },\n * { id: '3', teamUid: 'team-b', name: 'Team B' },\n * ]\n *\n * filterWorkspacesByTeam(workspaces, 'team-a')\n * // => [{ id: '1', teamUid: 'local' }, { id: '2', teamUid: 'team-a' }]\n * ```\n */\nexport const filterWorkspacesByTeam = <T extends { teamUid: string }>(workspaces: T[], currentTeamUid: string): T[] => {\n return workspaces.filter((workspace) => canLoadWorkspace(workspace.teamUid, currentTeamUid))\n}\n\n/**\n * Checks if a workspace can be loaded by the current team.\n *\n * A workspace can be loaded if:\n * - Its teamUid matches the current team, OR\n * - Its teamUid is 'local' (local workspaces are always accessible)\n *\n * This is used during route changes to prevent users from accessing\n * workspaces that do not belong to their active team.\n *\n * @param workspaceTeamUid - The team identifier of the workspace to check\n * @param currentTeamUid - The currently active team identifier\n * @returns true if the workspace can be loaded, false otherwise\n *\n * @example\n * ```ts\n * canLoadWorkspace('team-a', 'team-a') // => true\n * canLoadWorkspace('local', 'team-a') // => true\n * canLoadWorkspace('team-b', 'team-a') // => false\n * ```\n */\nexport const canLoadWorkspace = (workspaceTeamUid: string, currentTeamUid: string): boolean => {\n return workspaceTeamUid === currentTeamUid || workspaceTeamUid === 'local'\n}\n","import type { ScalarListboxOption, WorkspaceGroup } from '@scalar/components'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport { sortByOrder } from '@scalar/helpers/array/sort-by-order'\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport type { LoaderPlugin } from '@scalar/json-magic/bundle'\nimport { migrateLocalStorageToIndexDb } from '@scalar/oas-utils/migrations'\nimport { createSidebarState, generateReverseIndex } from '@scalar/sidebar'\nimport type { Theme } from '@scalar/themes'\nimport { type WorkspaceStore, createWorkspaceStore } from '@scalar/workspace-store/client'\nimport {\n type OperationExampleMeta,\n type WorkspaceEventBus,\n createWorkspaceEventBus,\n} from '@scalar/workspace-store/events'\nimport { generateUniqueValue } from '@scalar/workspace-store/helpers/generate-unique-value'\nimport { getParentEntry } from '@scalar/workspace-store/navigation'\nimport { createWorkspaceStorePersistence, getWorkspaceId } from '@scalar/workspace-store/persistence'\nimport { persistencePlugin } from '@scalar/workspace-store/plugins/client'\nimport type { Workspace, WorkspaceDocument } from '@scalar/workspace-store/schemas'\nimport { extensions } from '@scalar/workspace-store/schemas/extensions'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport type { Tab } from '@scalar/workspace-store/schemas/extensions/workspace/x-scalar-tabs'\nimport type { TraversedEntry } from '@scalar/workspace-store/schemas/navigation'\nimport {\n type ComputedRef,\n type MaybeRefOrGetter,\n type Ref,\n type ShallowRef,\n computed,\n readonly,\n ref,\n shallowRef,\n} from 'vue'\nimport type { RouteLocationNormalizedGeneric, RouteLocationRaw, Router } from 'vue-router'\n\nimport { getRouteParam } from '@/v2/features/app/helpers/get-route-param'\nimport { groupWorkspacesByTeam } from '@/v2/features/app/helpers/group-workspaces'\nimport { useTheme } from '@/v2/features/app/hooks/use-theme'\nimport { getActiveEnvironment } from '@/v2/helpers/get-active-environment'\nimport { getTabDetails } from '@/v2/helpers/get-tab-details'\nimport { slugify } from '@/v2/helpers/slugify'\nimport { workspaceStorage } from '@/v2/helpers/storage'\n\nimport { initializeAppEventHandlers } from './app-events'\nimport { canLoadWorkspace, filterWorkspacesByTeam } from './helpers/filter-workspaces'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\nexport type GetEntryByLocation = (location: {\n document: string\n path?: string\n method?: HttpMethod\n example?: string\n}) =>\n | (TraversedEntry & {\n parent?: TraversedEntry | undefined\n })\n | undefined\n\ntype WorkspaceOption = ScalarListboxOption & { teamUid: string; namespace: string; slug: string }\n\n/** Defines the overall application state structure and its main feature modules */\nexport type AppState = {\n /** The workspace store */\n store: ShallowRef<WorkspaceStore | null>\n /** The sidebar management */\n sidebar: {\n /** The sidebar state */\n state: ReturnType<typeof createSidebarState<TraversedEntry>>\n /** The width of the sidebar */\n width: ComputedRef<number>\n /** Whether the sidebar is open */\n isOpen: Ref<boolean>\n /** Handles the selection of an item in the sidebar */\n handleSelectItem: (id: string) => void\n /** Handles the width update of the sidebar */\n handleSidebarWidthUpdate: (width: number) => void\n /** Gets the entry by location */\n getEntryByLocation: GetEntryByLocation\n }\n /** The tabs management */\n tabs: {\n /** The tabs state */\n state: Ref<Tab[]>\n /** The active tab index */\n activeTabIndex: Ref<number>\n /** Copies the URL of the tab at the given index to the clipboard */\n copyTabUrl: (index: number) => Promise<void>\n }\n /** The workspace management */\n workspace: {\n /** Creates a new workspace and navigates to it */\n create: (payload: {\n teamUid?: string\n namespace?: string\n slug?: string\n name: string\n }) => Promise<{ name: string; namespace: string; slug: string; teamUid: string } | undefined>\n /** All workspace list */\n workspaceList: Ref<WorkspaceOption[]>\n /** Filtered workspace list, based on the current teamUid */\n filteredWorkspaceList: ComputedRef<WorkspaceOption[]>\n /**\n * Groups workspaces into team and local categories for display in the workspace picker.\n * Team workspaces are shown first (when not on local team), followed by local workspaces.\n */\n workspaceGroups: ComputedRef<WorkspaceGroup[]>\n /** The currently active workspace */\n activeWorkspace: ShallowRef<{ id: string; label: string } | null>\n /** Navigates to the specified workspace */\n navigateToWorkspace: (namespace?: string, slug?: string) => Promise<void>\n /** Whether the workspace page is open */\n isOpen: ComputedRef<boolean>\n }\n /** The workspace event bus for handling workspace-level events */\n eventBus: WorkspaceEventBus\n /** The router instance */\n router: Router\n /** The current route derived from the router */\n currentRoute: Ref<RouteLocationNormalizedGeneric | null>\n /** Whether the workspace is currently syncing */\n loading: Ref<boolean>\n /** The currently active entities */\n activeEntities: {\n /** The namespace of the current entity, e.g. \"default\" or a custom namespace */\n namespace: Ref<string | undefined>\n /** The slug identifying the current workspace */\n workspaceSlug: Ref<string | undefined>\n /** The slug of the currently selected document in the workspace */\n documentSlug: Ref<string | undefined>\n /** The API path currently selected (e.g. \"/users/{id}\") */\n path: Ref<string | undefined>\n /** The HTTP method for the currently selected API path (e.g. GET, POST) */\n method: Ref<HttpMethod | undefined>\n /** The name of the currently selected example (for examples within an endpoint) */\n exampleName: Ref<string | undefined>\n /** The unique identifier for the selected team context (read-only; use setTeamUid to change) */\n teamUid: Readonly<Ref<string>>\n /** Sets the current team context by team UID */\n setTeamUid: (value: string) => void\n }\n /** The currently active environment */\n environment: ComputedRef<XScalarEnvironment>\n /** The currently active document */\n document: ComputedRef<WorkspaceDocument | null>\n /** Whether the current color mode is dark */\n isDarkMode: ComputedRef<boolean>\n /** The currently active theme */\n theme: {\n /** The computed CSS styles for the current theme, as a string */\n styles: ComputedRef<{ themeStyles: string; themeSlug: string }>\n /** The computed value for the <style> tag containing the current theme styles */\n themeStyleTag: ComputedRef<string>\n /** The custom themes to use */\n customThemes: MaybeRefOrGetter<Theme[]>\n }\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n/** Default debounce delay in milliseconds for workspace store persistence. */\nconst DEFAULT_DEBOUNCE_DELAY = 1000\n/** Default sidebar width in pixels. */\nconst DEFAULT_SIDEBAR_WIDTH = 288\n\n// ---------------------------------------------------------------------------\n// App State\n// ---------------------------------------------------------------------------\nexport const createAppState = async ({\n router,\n fileLoader,\n fallbackThemeSlug = () => 'default',\n customThemes = () => [],\n}: {\n router: Router\n fileLoader?: LoaderPlugin\n customThemes?: MaybeRefOrGetter<Theme[]>\n fallbackThemeSlug?: MaybeRefOrGetter<string>\n}): Promise<AppState> => {\n /** Workspace event bus for handling workspace-level events. */\n const eventBus = createWorkspaceEventBus({\n debug: import.meta.env.DEV,\n })\n\n const { workspace: persistence } = await createWorkspaceStorePersistence()\n\n /**\n * Run migration from localStorage to IndexedDB if needed\n * This happens once per user and transforms old data structure to new workspace format\n */\n await migrateLocalStorageToIndexDb()\n\n // ---------------------------------------------------------------------------\n // Active entities\n // ---------------------------------------------------------------------------\n const teamUid = ref<string>('local')\n const namespace = ref<string | undefined>(undefined)\n const workspaceSlug = ref<string | undefined>(undefined)\n const documentSlug = ref<string | undefined>(undefined)\n const method = ref<HttpMethod | undefined>(undefined)\n const path = ref<string | undefined>(undefined)\n const exampleName = ref<string | undefined>(undefined)\n\n // ---------------------------------------------------------------------------\n // Loading states\n const isSyncingWorkspace = ref(false)\n\n // ---------------------------------------------------------------------------\n // Router state\n router.afterEach((to) => handleRouteChange(to))\n const currentRoute = computed(() => router.currentRoute.value ?? null)\n\n // ---------------------------------------------------------------------------\n // Workspace persistence state management\n const activeWorkspace = shallowRef<{ id: string; label: string } | null>(null)\n const workspaces = ref<WorkspaceOption[]>([])\n const filteredWorkspaces = computed(() => filterWorkspacesByTeam(workspaces.value, teamUid.value))\n const workspaceGroups = computed(() => groupWorkspacesByTeam(filteredWorkspaces.value, teamUid.value))\n const store = shallowRef<WorkspaceStore | null>(null)\n\n const activeDocument = computed(() => {\n return store.value?.workspace.documents[documentSlug.value ?? ''] || null\n })\n\n /**\n * Merged environment variables from workspace and document levels.\n * Variables from both sources are combined, with document variables\n * taking precedence in case of naming conflicts.\n */\n const environment = computed<XScalarEnvironment>(() => getActiveEnvironment(store.value, activeDocument.value))\n\n /** Update the workspace list when the component is mounted */\n workspaces.value = await persistence.getAll().then((w) =>\n w.map(({ teamUid, namespace, slug, name }) => ({\n id: getWorkspaceId(namespace, slug),\n teamUid,\n namespace,\n slug,\n label: name,\n })),\n )\n\n /**\n * Renames the currently active workspace.\n * Updates the workspace name in persistence and updates activeWorkspace if successful.\n * Returns early if namespace or workspaceSlug is not set, or if update fails.\n */\n const renameWorkspace = async (name: string) => {\n const namespaceValue = namespace.value\n const slugValue = workspaceSlug.value\n if (!namespaceValue || !slugValue) {\n return\n }\n const workspaceId = getWorkspaceId(namespaceValue, slugValue)\n const updateResult = await persistence.updateName({ namespace: namespaceValue, slug: slugValue }, name)\n\n // If the update fails, return early\n if (updateResult === undefined) {\n return\n }\n\n // Update the workspace list\n workspaces.value = workspaces.value.map((workspace) => {\n // If the workspace is the currently active workspace, update the label\n if (workspace.id === workspaceId) {\n return { ...workspace, label: name }\n }\n return workspace\n })\n activeWorkspace.value = { id: workspaceId, label: name }\n }\n\n /**\n * Creates a client-side workspace store with persistence enabled for the given workspace id.\n */\n const createClientStore = async ({\n namespace,\n slug,\n }: {\n namespace: string\n slug: string\n }): Promise<WorkspaceStore> => {\n return createWorkspaceStore({\n plugins: [\n await persistencePlugin({\n workspaceId: getWorkspaceId(namespace, slug),\n debounceDelay: DEFAULT_DEBOUNCE_DELAY,\n }),\n ],\n fileLoader,\n })\n }\n\n /**\n * Attempts to load and activate a workspace by id.\n * Returns true when the workspace was found and activated.\n */\n const loadWorkspace = async (\n namespace: string,\n slug: string,\n ): Promise<{ success: true; workspace: Workspace } | { success: false }> => {\n const workspace = await persistence.getItem({ namespace, slug })\n\n if (!workspace) {\n return {\n success: false,\n }\n }\n\n const client = await createClientStore({ namespace, slug })\n client.loadWorkspace(workspace.workspace)\n activeWorkspace.value = { id: getWorkspaceId(workspace.namespace, workspace.slug), label: workspace.name }\n store.value = client\n\n return {\n success: true,\n workspace: client.workspace,\n }\n }\n\n /**\n * Creates and persists the default workspace with a blank draft document.\n * Used when no workspaces exist yet.\n */\n const createAndPersistWorkspace = async ({\n name,\n teamUid,\n namespace,\n slug,\n }: {\n name: string\n teamUid?: string\n namespace?: string\n slug: string\n }) => {\n const draftStore = createWorkspaceStore()\n await draftStore.addDocument({\n name: 'drafts',\n document: {\n openapi: '3.1.0',\n info: {\n title: 'Drafts',\n version: '1.0.0',\n },\n paths: {\n '/': {\n get: {},\n },\n },\n 'x-scalar-original-document-hash': 'drafts',\n 'x-scalar-icon': 'interface-edit-tool-pencil',\n },\n })\n\n // Persist the workspace\n const workspace = await persistence.setItem(\n { namespace, slug },\n {\n name: name,\n teamUid,\n workspace: draftStore.exportWorkspace(),\n },\n )\n\n // Update the workspace list\n workspaces.value.push({\n id: getWorkspaceId(workspace.namespace, workspace.slug),\n teamUid: workspace.teamUid,\n namespace: workspace.namespace,\n slug: workspace.slug,\n label: workspace.name,\n })\n return workspace\n }\n\n /**\n * Navigates to the overview page of the specified workspace.\n *\n * @param namespace - The workspace namespace.\n * @param slug - The unique workspace slug (identifier).\n */\n const navigateToWorkspace = async (namespace?: string, slug?: string): Promise<void> => {\n if (!namespace || !slug) {\n await router.push('/')\n return\n }\n\n // We should always have this drafts document available in a new workspace\n await router.push({\n name: 'example',\n params: {\n namespace,\n workspaceSlug: slug,\n documentSlug: 'drafts',\n pathEncoded: encodeURIComponent('/'),\n method: 'get',\n exampleName: 'default',\n },\n })\n }\n\n /**\n * Creates a new workspace with the provided name.\n * - Generates a unique slug for the workspace (uses the provided slug if it is unique, otherwise generates a unique slug).\n * - Adds a default blank document (\"drafts\") to the workspace.\n * - Persists the workspace and navigates to it.\n *\n * Example usage:\n * await createWorkspace({ name: 'My Awesome API' })\n * // -> Navigates to /workspace/my-awesome-api (if available)\n */\n const createWorkspace = async ({\n teamUid,\n namespace,\n slug,\n name,\n }: {\n teamUid?: string\n namespace?: string\n slug?: string\n name: string\n }) => {\n // Clear up the current store, in order to show the loading state\n store.value = null\n\n // Generate a unique slug/id for the workspace, based on the name.\n const newWorkspaceSlug = await generateUniqueValue({\n defaultValue: slug ?? name, // Use the provided id if it exists, otherwise use the name\n validation: async (value) => !(await persistence.has({ namespace: namespace ?? 'local', slug: value })),\n maxRetries: 100,\n transformation: slugify,\n })\n\n // Failed to generate a unique workspace id, so we can't create the workspace.\n if (!newWorkspaceSlug) {\n return undefined\n }\n\n const newWorkspaceDetails = {\n teamUid,\n namespace,\n slug: newWorkspaceSlug,\n name,\n }\n\n // Create a new client store with the workspace ID and add a default document.\n const createdWorkspace = await createAndPersistWorkspace(newWorkspaceDetails)\n\n // Navigate to the newly created workspace.\n await navigateToWorkspace(createdWorkspace.namespace, createdWorkspace.slug)\n return createdWorkspace\n }\n\n /**\n * Handles changing the active workspace when the workspace slug changes in the route.\n * This function:\n * - Clears the current workspace store and sets loading state.\n * - Attempts to load the workspace by slug.\n * - If found, navigates to the active tab path (if available).\n * - If not found, creates the default workspace and navigates to it.\n */\n const changeWorkspace = async (namespace: string, slug: string) => {\n // Clear the current store and set loading to true before loading new workspace.\n store.value = null\n isSyncingWorkspace.value = true\n\n // Try to load the workspace\n const result = await loadWorkspace(namespace, slug)\n\n if (result.success) {\n // Navigate to the correct tab if the workspace has a tab already\n const index = result.workspace['x-scalar-active-tab'] ?? 0\n const tabs = result.workspace['x-scalar-tabs']\n const tab = tabs?.[index]\n\n if (tab) {\n // Preserve query parameters when navigating to the active tab\n await router.replace({\n path: tab.path,\n query: currentRoute.value?.query ?? {},\n })\n }\n\n // Heal the active tab index if it is out of bounds\n if (tabs && index >= tabs.length) {\n eventBus.emit('tabs:update:tabs', {\n 'x-scalar-active-tab': 0,\n })\n }\n\n // Initialize the tabs if they does not exist\n if (!tabs) {\n eventBus.emit('tabs:update:tabs', {\n 'x-scalar-tabs': [createTabFromRoute(currentRoute.value)],\n 'x-scalar-active-tab': 0,\n })\n }\n\n isSyncingWorkspace.value = false\n return\n }\n\n // Navigate to the default workspace, or fall back to the first available workspace\n const targetWorkspace =\n filteredWorkspaces.value.find((workspace) => workspace.teamUid === 'local' && workspace.slug === 'default') ??\n filteredWorkspaces.value[0]\n\n if (targetWorkspace) {\n return navigateToWorkspace(targetWorkspace.namespace, targetWorkspace.slug)\n }\n\n // If loading failed (workspace does not exist), create the default workspace and navigate to it.\n const createResult = await createWorkspace({\n name: 'Default Workspace',\n slug: 'default',\n })\n\n isSyncingWorkspace.value = false\n\n if (!createResult) {\n return console.error('Failed to create the default workspace, something went wrong, can not load the workspace')\n }\n\n // Must reset the sidebar state when the workspace changes\n sidebarState.reset()\n }\n\n /**\n * Sets the current team context. If the active workspace is not accessible\n * with the new team, navigates to the default workspace for that team.\n */\n const setTeamUid = (value: string) => {\n // Update the new teamUid\n teamUid.value = value\n\n // Find the current workspace\n const workspace = filteredWorkspaces.value.find(\n (w) => w.namespace === namespace.value && w.slug === workspaceSlug.value,\n )\n\n // Check if new teamUid is accessible to the current workspace\n if (workspace && canLoadWorkspace(workspace.teamUid, value)) {\n return\n }\n\n return navigateToWorkspace('local', 'default')\n }\n\n // ---------------------------------------------------------------------------\n // Sidebar state management\n\n const entries = computed(() => {\n const activeStore = store.value\n if (!activeStore) {\n return []\n }\n\n const order = activeStore.workspace['x-scalar-order'] ?? Object.keys(activeStore.workspace.documents)\n\n return sortByOrder(Object.keys(activeStore.workspace.documents), order, (item) => item)\n .map((doc) => activeStore.workspace.documents[doc]?.['x-scalar-navigation'])\n .filter(isDefined) as TraversedEntry[]\n })\n\n const sidebarState = createSidebarState(entries)\n\n /**\n * Generates a unique string ID for an API location, based on the document, path, method, and example.\n * Filters out undefined values and serializes the composite array into a stable string.\n *\n * @param params - An object containing document, path, method, and optional example name.\n * @returns A stringified array representing the unique location identifier.\n *\n * Example:\n * generateId({ document: 'mydoc', path: '/users', method: 'get', example: 'default' })\n * // => '[\"mydoc\",\"/users\",\"get\",\"default\"]'\n */\n const generateId = ({\n document,\n path,\n method,\n example,\n }: {\n document: string\n path?: string\n method?: HttpMethod\n example?: string\n }) => {\n return JSON.stringify([document, path, method, example].filter(isDefined))\n }\n\n /**\n * Computed index for fast lookup of sidebar nodes by their unique API location.\n *\n * - Only indexes nodes of type 'document', 'operation', or 'example'.\n * - The lookup key is a serialized array of: [documentName, operationPath, operationMethod, exampleName?].\n * - Supports precise resolution of sidebar entries given an API \"location\".\n */\n const locationIndex = computed(() =>\n generateReverseIndex({\n items: entries.value,\n nestedKey: 'children',\n filter: (node) => node.type === 'document' || node.type === 'operation' || node.type === 'example',\n getId: (node) => {\n const document = getParentEntry('document', node)\n const operation = getParentEntry('operation', node)\n return generateId({\n document: document?.name ?? '',\n path: operation?.path,\n method: operation?.method,\n example: node.type === 'example' ? node.name : undefined,\n })\n },\n }),\n )\n\n /**\n * Looks up a sidebar entry by its unique API location.\n * - First tries to find an entry matching all provided properties (including example).\n * - If not found, falls back to matching only the operation (ignores example field).\n * This allows resolving either examples, operations, or documents as appropriate.\n *\n * @param location - Object specifying the document name, path, method, and optional example name.\n * @returns The matching sidebar entry, or undefined if none found.\n *\n * Example:\n * const entry = getEntryByLocation({\n * document: 'pets',\n * path: '/pets',\n * method: 'get',\n * example: 'default',\n * })\n */\n const getEntryByLocation: GetEntryByLocation = (location) => {\n // Try to find an entry with the most-specific location (including example)\n const entryWithExample = locationIndex.value.get(generateId(location))\n\n if (entryWithExample) {\n return entryWithExample\n }\n\n // Fallback to the operation (ignoring example) if an example wasn't found or specified\n return locationIndex.value.get(\n generateId({\n document: location.document,\n path: location.path,\n method: location.method,\n }),\n )\n }\n\n /**\n * Handles item selection from the sidebar and routes navigation accordingly.\n *\n * Example:\n * handleSelectItem('id-of-entry')\n */\n const handleSelectItem = (id: string) => {\n const entry = sidebarState.getEntryById(id)\n\n if (!entry) {\n console.warn(`Could not find sidebar entry with id ${id} to select`)\n return\n }\n\n /** Close sidebar and navigate. Used for every branch that performs navigation. */\n const navigate = (route: RouteLocationRaw) => {\n isSidebarOpen.value = false\n return router.push(route)\n }\n\n // Navigate to the document overview page\n if (entry.type === 'document') {\n // If we are already in the document, just toggle expansion\n if (sidebarState.selectedItem.value === id) {\n sidebarState.setExpanded(id, !sidebarState.isExpanded(id))\n return\n }\n\n // Otherwise, select it\n sidebarState.setSelected(id)\n sidebarState.setExpanded(id, true)\n return navigate({\n name: 'document.overview',\n params: { documentSlug: entry.name },\n })\n }\n\n // Navigate to the example page\n if (entry.type === 'operation') {\n // If we are already in an operation child we just want to toggle the explanstion\n if (sidebarState.isSelected(id) && sidebarState.selectedItem.value !== id) {\n sidebarState.setExpanded(id, !sidebarState.isExpanded(id))\n return\n }\n\n // Otherwise, select the first example\n const firstExample = entry.children?.find((child) => child.type === 'example')\n\n if (firstExample) {\n sidebarState.setSelected(firstExample.id)\n sidebarState.setExpanded(firstExample.id, true)\n } else {\n sidebarState.setSelected(id)\n }\n\n return navigate({\n name: 'example',\n params: {\n documentSlug: getParentEntry('document', entry)?.name,\n pathEncoded: encodeURIComponent(entry.path),\n method: entry.method,\n exampleName: firstExample?.name ?? 'default',\n },\n })\n }\n\n // Navigate to the example page\n if (entry.type === 'example') {\n sidebarState.setSelected(id)\n const operation = getParentEntry('operation', entry)\n return navigate({\n name: 'example',\n params: {\n documentSlug: getParentEntry('document', entry)?.name,\n pathEncoded: encodeURIComponent(operation?.path ?? ''),\n method: operation?.method,\n exampleName: entry.name,\n },\n })\n }\n\n if (entry.type === 'text') {\n return navigate({\n name: 'document.overview',\n params: {\n documentSlug: getParentEntry('document', entry)?.name,\n },\n })\n }\n\n sidebarState.setExpanded(id, !sidebarState.isExpanded(id))\n return\n }\n\n /**\n * Navigates to the currently active tab's path using the router.\n * Returns early if the workspace store or active tab is unavailable.\n */\n const navigateToCurrentTab = async (): Promise<void> => {\n if (!store.value) {\n return\n }\n\n const activeTabIndex = store.value.workspace['x-scalar-active-tab'] ?? 0\n const activeTab = store.value.workspace['x-scalar-tabs']?.[activeTabIndex]\n if (!activeTab) {\n return\n }\n\n await router.replace(activeTab.path)\n }\n\n /**\n * Rebuilds the sidebar for the given document.\n * This is used to refresh the sidebar state after structural changes (e.g. after adding or removing items).\n *\n * @param documentName - The name (id) of the document for which to rebuild the sidebar\n */\n const rebuildSidebar = (documentName: string | undefined) => {\n if (documentName) {\n store.value?.buildSidebar(documentName)\n }\n }\n\n /**\n * Ensures the sidebar is refreshed after a new example is created.\n *\n * If the sidebar entry for the new example does not exist or is of a different type,\n * this will rebuild the sidebar for the current document. This helps keep the sidebar state\n * consistent (e.g., after adding a new example via the UI).\n */\n const refreshSidebarAfterExampleCreation = (payload: OperationExampleMeta & { documentName?: string }) => {\n const documentName = payload.documentName ?? activeDocument.value?.['x-scalar-navigation']?.name\n if (!documentName) {\n return\n }\n\n const entry = getEntryByLocation({\n document: documentName,\n path: payload.path,\n method: payload.method,\n example: payload.exampleKey,\n })\n\n if (!entry || entry.type !== 'example') {\n // Sidebar entry for this example doesn't exist, so rebuild sidebar for consistency.\n rebuildSidebar(documentName)\n if (currentRoute.value) {\n syncSidebar(currentRoute.value)\n }\n }\n return\n }\n\n /** Width of the sidebar, with fallback to default. */\n const sidebarWidth = computed(() => store.value?.workspace?.['x-scalar-sidebar-width'] ?? DEFAULT_SIDEBAR_WIDTH)\n\n /** Handler for sidebar width changes. */\n const handleSidebarWidthUpdate = (width: number) => store.value?.update('x-scalar-sidebar-width', width)\n\n /** Controls the visibility of the sidebar. */\n const isSidebarOpen = ref(false)\n // ---------------------------------------------------------------------------\n // Tab Management\n\n /** Constants for workspace store keys */\n const TABS_KEY = 'x-scalar-tabs' as const\n const ACTIVE_TAB_KEY = 'x-scalar-active-tab' as const\n\n /**\n * Creates a tab object based on the current route and workspace state.\n * Used as a fallback when no tabs exist or when creating new tabs.\n */\n const createTabFromRoute = (to: RouteLocationNormalizedGeneric | null): Tab => {\n const method = getRouteParam('method', to)\n const path = getRouteParam('pathEncoded', to)\n const document = getRouteParam('documentSlug', to)\n const workspace = getRouteParam('workspaceSlug', to)\n return {\n ...getTabDetails({\n workspace,\n document,\n path,\n method,\n getEntryByLocation,\n }),\n path: currentRoute.value?.path ?? '',\n }\n }\n\n const tabs = computed(() => {\n return store.value?.workspace[TABS_KEY] ?? [createTabFromRoute(currentRoute.value)]\n })\n\n const activeTabIndex = computed(() => {\n return store.value?.workspace[ACTIVE_TAB_KEY] ?? 0\n })\n\n /**\n * Copies the URL of the tab at the given index to the clipboard.\n * Constructs the full URL using the current origin and the tab path.\n *\n * Note: Will silently fail if clipboard API is unavailable or the tab does not exist.\n */\n const copyTabUrl = async (index: number): Promise<void> => {\n const tab = tabs.value[index]\n\n if (!tab) {\n console.warn(`Cannot copy URL: tab at index ${index} does not exist`)\n return\n }\n\n const url = `${window.location.origin}${tab.path}`\n\n try {\n await navigator.clipboard.writeText(url)\n } catch (error) {\n console.error('Failed to copy URL to clipboard:', error)\n }\n }\n\n // ---------------------------------------------------------------------------\n // Path syncing\n\n /** When the route changes we need to update the active entities in the store */\n const handleRouteChange = (to: RouteLocationNormalizedGeneric) => {\n const slug = getRouteParam('workspaceSlug', to)\n const document = getRouteParam('documentSlug', to)\n const namespaceValue = getRouteParam('namespace', to)\n\n // Must have an active workspace to syncs\n if (!namespaceValue || !slug) {\n return\n }\n\n // Try to see if the user can load this workspace based on the teamUid and namespace\n const workspace = workspaces.value.find(\n (workspace) => workspace.slug === slug && workspace.namespace === namespaceValue,\n )\n\n // If the workspace is not found or the teamUid does not match, try to redirect to the default workspace\n if (workspace && !canLoadWorkspace(workspace.teamUid, teamUid.value)) {\n // try to redirect to the default workspace\n return navigateToWorkspace('local', 'default')\n }\n\n namespace.value = namespaceValue\n workspaceSlug.value = slug\n documentSlug.value = document\n method.value = getRouteParam('method', to)\n path.value = getRouteParam('pathEncoded', to)\n exampleName.value = getRouteParam('exampleName', to)\n\n // Save the current path to the persistence storage\n if (to.path !== '') {\n workspaceStorage.setCurrentPath(to.path)\n }\n\n if (getWorkspaceId(namespace.value, slug) !== activeWorkspace.value?.id) {\n return changeWorkspace(namespace.value, slug)\n }\n\n // Update the active document if the document slug has changes\n if (document && document !== store.value?.workspace[extensions.workspace.activeDocument]) {\n store?.value?.update('x-scalar-active-document', document)\n }\n\n syncTabs(to)\n syncSidebar(to)\n return\n }\n\n /** Aligns the tabs with any potential slug changes */\n const syncTabs = (to: RouteLocationNormalizedGeneric) => {\n const tabs = store.value?.workspace['x-scalar-tabs'] ?? []\n const index = store.value?.workspace['x-scalar-active-tab'] ?? 0\n\n const tab = tabs[index]\n\n // If there is no tab or the tab path is the same we leave the tab state alone\n if (!tab || tab.path === to.path) {\n // Already on the correct path, do nothing\n return\n }\n\n // Otherwise we replace the tab content with the new route\n tabs[index] = createTabFromRoute(to)\n }\n\n /** Aligns the sidebar state with any potential slug changes */\n const syncSidebar = (to: RouteLocationNormalizedGeneric) => {\n const document = getRouteParam('documentSlug', to)\n\n if (!document) {\n // Reset selection if no document is selected\n sidebarState.setSelected(null)\n return\n }\n\n const entry = getEntryByLocation({\n document,\n path: getRouteParam('pathEncoded', to),\n method: getRouteParam('method', to),\n example: getRouteParam('exampleName', to),\n })\n\n if (entry) {\n sidebarState.setSelected(entry.id)\n sidebarState.setExpanded(entry.id, true)\n }\n }\n\n // ---------------------------------------------------------------------------\n // Events handling\n\n initializeAppEventHandlers({\n eventBus,\n router,\n store,\n navigateToCurrentTab,\n rebuildSidebar,\n onAfterExampleCreation: refreshSidebarAfterExampleCreation,\n onSelectSidebarItem: handleSelectItem,\n onCopyTabUrl: (index) => copyTabUrl(index),\n onToggleSidebar: () => (isSidebarOpen.value = !isSidebarOpen.value),\n closeSidebar: () => (isSidebarOpen.value = false),\n renameWorkspace,\n })\n\n const theme = useTheme({\n fallbackThemeSlug,\n customThemes,\n store: store,\n })\n\n const isDarkMode = computed(() => {\n const colorMode = store.value?.workspace['x-scalar-color-mode'] ?? 'system'\n if (colorMode === 'system') {\n return window.matchMedia?.('(prefers-color-scheme: dark)')?.matches ?? false\n }\n return colorMode === 'dark'\n })\n\n return {\n /** Active workspace store */\n store,\n sidebar: {\n state: sidebarState,\n width: sidebarWidth,\n isOpen: isSidebarOpen,\n handleSelectItem,\n handleSidebarWidthUpdate,\n getEntryByLocation,\n },\n tabs: {\n state: tabs,\n activeTabIndex,\n copyTabUrl,\n },\n workspace: {\n create: createWorkspace,\n workspaceList: workspaces,\n filteredWorkspaceList: filteredWorkspaces,\n workspaceGroups,\n activeWorkspace,\n navigateToWorkspace,\n isOpen: computed(() => Boolean(workspaceSlug.value && !documentSlug.value)),\n },\n eventBus,\n router,\n currentRoute,\n loading: isSyncingWorkspace,\n activeEntities: {\n namespace,\n workspaceSlug,\n documentSlug,\n path,\n method,\n exampleName,\n teamUid: readonly(teamUid),\n setTeamUid,\n },\n environment,\n document: activeDocument,\n isDarkMode,\n theme: {\n styles: theme.themeStyles,\n themeStyleTag: theme.themeStyleTag,\n customThemes,\n },\n }\n}\n","<script setup lang=\"ts\">\nimport { ScalarModal, type ModalState } from '@scalar/components'\nimport { computed, ref, watch, type ComputedRef, type Ref } from 'vue'\n\nimport CommandActionForm from '@/components/CommandPalette/CommandActionForm.vue'\nimport CommandActionInput from '@/components/CommandPalette/CommandActionInput.vue'\n\nconst { state } = defineProps<{\n state: ModalState\n}>()\n\nconst emit = defineEmits<{\n (e: 'create:workspace', payload: { name: string }): void\n}>()\n\n/** Name input for the new workspace. Resets whenever the modal opens. */\nconst name: Ref<string> = ref('')\n\n/** Trimmed version of the name to avoid repeating .trim() in multiple places. */\nconst trimmedName: ComputedRef<string> = computed(() => name.value.trim())\n\n/** Disable submit when the name is empty after trimming. */\nconst isDisabled: ComputedRef<boolean> = computed(\n () => trimmedName.value.length === 0,\n)\n\n/**\n * Ensure the form is reset whenever the modal opens.\n * Avoids stale state if the modal is reopened.\n */\nwatch(\n () => state.open,\n (isOpen) => {\n if (isOpen) {\n name.value = ''\n }\n },\n)\n\n/** Emits an event to create the workspace with the provided name */\nconst handleSubmit = (): void => {\n if (!trimmedName.value) {\n return\n }\n\n emit('create:workspace', {\n name: trimmedName.value,\n })\n state.hide()\n}\n</script>\n\n<template>\n <ScalarModal\n bodyClass=\"border-t-0 rounded-t-lg\"\n size=\"xs\"\n :state=\"state\">\n <CommandActionForm\n :disabled=\"isDisabled\"\n @submit=\"handleSubmit\">\n <CommandActionInput\n v-model=\"name\"\n class=\"-mt-[.5px] !p-0\"\n placeholder=\"Workspace name\" />\n\n <!-- Submit button -->\n <template #submit>Add Workspace</template>\n </CommandActionForm>\n </ScalarModal>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarModal, type ModalState } from '@scalar/components'\nimport { computed, ref, watch, type ComputedRef, type Ref } from 'vue'\n\nimport CommandActionForm from '@/components/CommandPalette/CommandActionForm.vue'\nimport CommandActionInput from '@/components/CommandPalette/CommandActionInput.vue'\n\nconst { state } = defineProps<{\n state: ModalState\n}>()\n\nconst emit = defineEmits<{\n (e: 'create:workspace', payload: { name: string }): void\n}>()\n\n/** Name input for the new workspace. Resets whenever the modal opens. */\nconst name: Ref<string> = ref('')\n\n/** Trimmed version of the name to avoid repeating .trim() in multiple places. */\nconst trimmedName: ComputedRef<string> = computed(() => name.value.trim())\n\n/** Disable submit when the name is empty after trimming. */\nconst isDisabled: ComputedRef<boolean> = computed(\n () => trimmedName.value.length === 0,\n)\n\n/**\n * Ensure the form is reset whenever the modal opens.\n * Avoids stale state if the modal is reopened.\n */\nwatch(\n () => state.open,\n (isOpen) => {\n if (isOpen) {\n name.value = ''\n }\n },\n)\n\n/** Emits an event to create the workspace with the provided name */\nconst handleSubmit = (): void => {\n if (!trimmedName.value) {\n return\n }\n\n emit('create:workspace', {\n name: trimmedName.value,\n })\n state.hide()\n}\n</script>\n\n<template>\n <ScalarModal\n bodyClass=\"border-t-0 rounded-t-lg\"\n size=\"xs\"\n :state=\"state\">\n <CommandActionForm\n :disabled=\"isDisabled\"\n @submit=\"handleSubmit\">\n <CommandActionInput\n v-model=\"name\"\n class=\"-mt-[.5px] !p-0\"\n placeholder=\"Workspace name\" />\n\n <!-- Submit button -->\n <template #submit>Add Workspace</template>\n </CommandActionForm>\n </ScalarModal>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components'\n</script>\n\n<template>\n <div\n class=\"splash-screen bg-b-1 fixed inset-0 z-50 flex items-center justify-center\">\n <div class=\"flex flex-col items-center gap-4\">\n <ScalarIcon\n class=\"logo-icon text-c-1 h-16 w-16\"\n icon=\"Logo\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.splash-screen {\n opacity: 0;\n animation: fadeIn 0.5s ease-in-out forwards;\n}\n\n.logo-icon {\n opacity: 0;\n animation:\n fadeInLogo 0.6s ease-in-out 0.2s forwards,\n pulse 2s ease-in-out 0.8s infinite;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 0.9;\n }\n}\n\n@keyframes fadeInLogo {\n from {\n opacity: 0;\n transform: scale(0.9);\n }\n to {\n opacity: 0.8;\n transform: scale(1);\n }\n}\n\n@keyframes pulse {\n 0%,\n 100% {\n opacity: 0.8;\n }\n 50% {\n opacity: 0.6;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components'\n</script>\n\n<template>\n <div\n class=\"splash-screen bg-b-1 fixed inset-0 z-50 flex items-center justify-center\">\n <div class=\"flex flex-col items-center gap-4\">\n <ScalarIcon\n class=\"logo-icon text-c-1 h-16 w-16\"\n icon=\"Logo\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.splash-screen {\n opacity: 0;\n animation: fadeIn 0.5s ease-in-out forwards;\n}\n\n.logo-icon {\n opacity: 0;\n animation:\n fadeInLogo 0.6s ease-in-out 0.2s forwards,\n pulse 2s ease-in-out 0.8s infinite;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 0.9;\n }\n}\n\n@keyframes fadeInLogo {\n from {\n opacity: 0;\n transform: scale(0.9);\n }\n to {\n opacity: 0.8;\n transform: scale(1);\n }\n}\n\n@keyframes pulse {\n 0%,\n 100% {\n opacity: 0.8;\n }\n 50% {\n opacity: 0.6;\n }\n}\n</style>\n","import type { Difference } from '@scalar/json-magic/diff'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport { type MaybeRefOrGetter, computed, onBeforeUnmount, toValue, watch } from 'vue'\n\n/**\n * Default timeout before the first poll attempt (in milliseconds).\n */\nconst DEFAULT_INITIAL_TIMEOUT = 5 * 1000 // 5 seconds\n\n/**\n * Maximum timeout cap for exponential backoff (in milliseconds).\n */\nconst MAX_TIMEOUT = 60 * 1000 // 60 seconds\n\n/**\n * Creates a timer manager for handling polling timeouts.\n *\n * @returns Object with methods to manage the polling timer.\n */\nconst createTimerManager = () => {\n let timer: ReturnType<typeof setTimeout> | null = null\n\n /**\n * Clears the current timer if it exists.\n */\n const clear = (): void => {\n if (timer) {\n clearTimeout(timer)\n timer = null\n }\n }\n\n /**\n * Schedules the next poll after the specified timeout.\n *\n * @param callback - The function to call when the timeout expires.\n * @param timeout - The delay in milliseconds before calling the callback.\n */\n const schedule = (callback: () => void, timeout: number): void => {\n clear()\n timer = setTimeout(callback, timeout)\n }\n\n return {\n clear,\n schedule,\n }\n}\n\n/**\n * Creates a timeout manager that handles exponential backoff on failures.\n *\n * @param initialTimeout - The initial timeout value in milliseconds.\n * @returns Object with methods to manage timeout values.\n */\nconst createTimeoutManager = (initialTimeout: number) => {\n let currentTimeout = initialTimeout\n\n /**\n * Resets the timeout to its initial value.\n */\n const reset = (): void => {\n currentTimeout = initialTimeout\n }\n\n /**\n * Doubles the timeout with exponential backoff, capped at MAX_TIMEOUT.\n */\n const backoff = (): void => {\n currentTimeout = Math.min(currentTimeout * 2, MAX_TIMEOUT)\n }\n\n /**\n * Gets the current timeout value.\n */\n const get = (): number => currentTimeout\n\n return {\n reset,\n backoff,\n get,\n }\n}\n\n/**\n * Resolves conflicts by preferring remote changes.\n *\n * @param conflicts - Array of conflict tuples from the rebase result.\n * Each tuple contains two arrays: [remote changes, local changes].\n * @returns Array of remote changes to apply.\n */\nconst resolveConflicts = (conflicts: Array<[Difference<unknown>[], Difference<unknown>[]]>): Difference<unknown>[] => {\n return conflicts.flatMap(([remote]) => remote)\n}\n\n/**\n * Watches the specified document in the workspace store and periodically rebases it with its remote source.\n *\n * This utility sets up a watcher on the given document. If the document specifies an 'x-scalar-original-source-url'\n * and watch mode is enabled, this hook polls the remote source and calls `store.rebaseDocument`.\n * If rebase conflicts are detected, it applies automatic conflict resolution by preferring remote changes.\n * Uses exponential backoff on failures to avoid overwhelming the server.\n *\n * @param params - Configuration object for the document watcher.\n * @param params.documentName - The name/key of the document to watch and rebase.\n * @param params.store - The WorkspaceStore instance.\n * @param params.initialTimeout - Initial delay before the first poll attempt (default: 5000ms).\n *\n * @example\n * ```ts\n * import { useDocumentWatcher } from '@/hooks/use-document-watcher'\n * import { useScalarWorkspaceStore } from '@scalar/workspace-store'\n *\n * const store = useScalarWorkspaceStore()\n * useDocumentWatcher({ documentName: 'myApi', store })\n * ```\n */\nexport const useDocumentWatcher = ({\n documentName,\n store,\n initialTimeout = DEFAULT_INITIAL_TIMEOUT,\n}: {\n documentName: MaybeRefOrGetter<string | undefined>\n store: MaybeRefOrGetter<WorkspaceStore | null>\n initialTimeout?: number\n}): void => {\n const document = computed(() => {\n const storeValue = toValue(store)\n const documentNameValue = toValue(documentName)\n if (!storeValue || !documentNameValue) {\n return null\n }\n return storeValue.workspace.documents[documentNameValue]\n })\n\n const timerManager = createTimerManager()\n const timeoutManager = createTimeoutManager(initialTimeout)\n\n /**\n * Handles a successful poll result (with or without changes).\n */\n const handleSuccess = (): void => {\n timeoutManager.reset()\n timerManager.schedule(poll, timeoutManager.get())\n }\n\n /**\n * Handles a failed poll result with exponential backoff.\n */\n const handleFailure = (): void => {\n timeoutManager.backoff()\n timerManager.schedule(poll, timeoutManager.get())\n }\n\n /**\n * Polls the remote document source and attempts to rebase.\n */\n const poll = async (): Promise<void> => {\n const storeValue = toValue(store)\n const documentNameValue = toValue(documentName)\n const sourceUrl = document.value?.['x-scalar-original-source-url']\n\n if (!storeValue || !documentNameValue || !sourceUrl) {\n return\n }\n\n const result = await storeValue.rebaseDocument({\n name: documentNameValue,\n url: sourceUrl,\n })\n\n if (result?.ok) {\n // On conflicts, prefer remote changes by automatically choosing the first option for each conflict tuple\n await result.applyChanges({ resolvedConflicts: resolveConflicts(result.conflicts) })\n handleSuccess()\n } else if (result?.ok === false && result.type === 'NO_CHANGES_DETECTED') {\n // Still a successful call, just nothing changed\n handleSuccess()\n } else {\n // Exponential backoff on failure\n handleFailure()\n }\n }\n\n /**\n * Watches for changes to the document's source URL and watch mode.\n * Starts or stops polling based on these values.\n */\n watch(\n [() => document.value?.['x-scalar-original-source-url'], () => document.value?.['x-scalar-watch-mode']],\n ([sourceUrl, watchMode = false]) => {\n const storeValue = toValue(store)\n\n // Clear timer if store is unavailable\n if (!storeValue) {\n timerManager.clear()\n return\n }\n\n // Clear any existing timer\n timerManager.clear()\n\n // Stop polling if source URL is missing or watch mode is disabled\n if (!sourceUrl || !watchMode) {\n timeoutManager.reset()\n return\n }\n\n // Start polling\n timerManager.schedule(poll, timeoutManager.get())\n },\n { immediate: true },\n )\n\n // Cleanup timer on component unmount\n onBeforeUnmount(() => {\n timerManager.clear()\n })\n}\n","import type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { ColorMode } from '@scalar/workspace-store/schemas/workspace'\nimport { type MaybeRefOrGetter, computed, onMounted, onUnmounted, ref, toValue, watch } from 'vue'\n\n/**\n * Specific dark or light mode, excluding the 'system' option.\n */\ntype DarkLightMode = Exclude<ColorMode, 'system'>\n\n/**\n * Gets the system color mode preference from the browser.\n * Falls back to 'light' if running in a non-browser environment.\n *\n * @returns The system preference for dark or light mode.\n */\nconst getSystemModePreference = (): DarkLightMode => {\n if (typeof window === 'undefined' || typeof window?.matchMedia !== 'function') {\n return 'light'\n }\n\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\n/**\n * Converts a ColorMode to a DarkLightMode by resolving 'system' to the actual system preference.\n *\n * @param mode - The color mode to convert.\n * @returns The resolved dark or light mode.\n */\nconst getDarkLightMode = (mode: ColorMode): DarkLightMode => {\n return mode === 'system' ? getSystemModePreference() : mode\n}\n\n/**\n * Applies the color mode by adding/removing the appropriate CSS classes on the document body.\n * This function is safe to call in non-browser environments (no-op).\n *\n * @param mode - The dark or light mode to apply.\n */\nconst applyColorMode = (mode: DarkLightMode): void => {\n if (typeof document === 'undefined') {\n return\n }\n\n const isDark = mode === 'dark'\n document.body.classList.toggle('dark-mode', isDark)\n document.body.classList.toggle('light-mode', !isDark)\n}\n\n/**\n * Composable hook that manages color mode (dark/light/system) based on workspace store configuration.\n * Automatically listens to system preference changes when mode is set to 'system'.\n *\n * @param options - Configuration options for the color mode hook.\n * @param options.workspaceStore - The workspace store instance that contains the color mode preference.\n * @returns Reactive color mode state and computed properties.\n */\nexport const useColorMode = ({ workspaceStore }: { workspaceStore: MaybeRefOrGetter<WorkspaceStore | null> }) => {\n const colorMode = computed(() => toValue(workspaceStore)?.workspace['x-scalar-color-mode'] ?? 'system')\n const darkLightMode = computed(() => getDarkLightMode(colorMode.value))\n const isDarkMode = computed(() => darkLightMode.value === 'dark')\n\n const mediaQuery = ref<MediaQueryList | null>(null)\n\n /**\n * Handles system preference changes.\n * Only updates the color mode if the current mode is set to 'system'.\n */\n const handleSystemPreferenceChange = (): void => {\n if (colorMode.value === 'system') {\n applyColorMode(getSystemModePreference())\n }\n }\n\n // Watch for colorMode changes and apply them immediately\n watch(colorMode, (mode) => applyColorMode(getDarkLightMode(mode)), { immediate: true })\n\n onMounted(() => {\n // Listen to system preference changes when mode is 'system'\n if (typeof window !== 'undefined' && typeof window?.matchMedia === 'function') {\n mediaQuery.value = window.matchMedia('(prefers-color-scheme: dark)')\n mediaQuery.value.addEventListener('change', handleSystemPreferenceChange)\n }\n })\n\n onUnmounted(() => {\n mediaQuery.value?.removeEventListener('change', handleSystemPreferenceChange)\n })\n\n return {\n /** The current color mode from the workspace store (reactive). */\n colorMode,\n /** Whether the current effective color mode is dark (reactive). */\n isDarkMode,\n }\n}\n","<script setup lang=\"ts\">\nimport { ScalarIconDownloadSimple } from '@scalar/icons'\n</script>\n<template>\n <a\n class=\"download-app-button flex w-full flex-row items-center justify-center gap-2 rounded px-3.5 py-2 text-sm leading-4 font-medium\"\n href=\"https://scalar.com/download?utm_source=web_client&utm_medium=download_button&utm_campaign=topnav\"\n target=\"_blank\"\n type=\"button\">\n <ScalarIconDownloadSimple size=\"sm\" />\n <span class=\"sr-only text-sm font-medium sm:not-sr-only\">\n Download App\n </span>\n </a>\n</template>\n<style scoped>\n.download-app-button {\n box-shadow: 0 0 0 0.5px var(--scalar-border-color);\n background: linear-gradient(rgba(255, 255, 255, 0.75), rgba(0, 0, 0, 0.035));\n}\n\n.dark-mode .download-app-button {\n background: linear-gradient(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.15));\n}\n\n.download-app-button:hover {\n background: linear-gradient(rgba(0, 0, 0, 0.035), rgba(255, 255, 255, 0.75));\n}\n\n.dark-mode .download-app-button:hover {\n background: linear-gradient(rgba(0, 0, 0, 0.15), rgba(255, 255, 255, 0.1));\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ScalarIconDownloadSimple } from '@scalar/icons'\n</script>\n<template>\n <a\n class=\"download-app-button flex w-full flex-row items-center justify-center gap-2 rounded px-3.5 py-2 text-sm leading-4 font-medium\"\n href=\"https://scalar.com/download?utm_source=web_client&utm_medium=download_button&utm_campaign=topnav\"\n target=\"_blank\"\n type=\"button\">\n <ScalarIconDownloadSimple size=\"sm\" />\n <span class=\"sr-only text-sm font-medium sm:not-sr-only\">\n Download App\n </span>\n </a>\n</template>\n<style scoped>\n.download-app-button {\n box-shadow: 0 0 0 0.5px var(--scalar-border-color);\n background: linear-gradient(rgba(255, 255, 255, 0.75), rgba(0, 0, 0, 0.035));\n}\n\n.dark-mode .download-app-button {\n background: linear-gradient(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.15));\n}\n\n.download-app-button:hover {\n background: linear-gradient(rgba(0, 0, 0, 0.035), rgba(255, 255, 255, 0.75));\n}\n\n.dark-mode .download-app-button:hover {\n background: linear-gradient(rgba(0, 0, 0, 0.15), rgba(255, 255, 255, 0.1));\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarDropdown,\n ScalarDropdownDivider,\n ScalarDropdownItem,\n ScalarIcon,\n} from '@scalar/components'\nimport { ScalarIconPencil } from '@scalar/icons'\nimport type { SidebarState } from '@scalar/sidebar'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getParentEntry } from '@scalar/workspace-store/navigation'\nimport type { TraversedEntry } from '@scalar/workspace-store/schemas/navigation'\nimport { nextTick, ref, watch } from 'vue'\n\nconst { item, eventBus, sidebarState, target } = defineProps<{\n /** The item to display the decorator for */\n item: TraversedEntry\n /** The event bus to emit events to */\n eventBus: WorkspaceEventBus\n /** The sidebar state to get the parent entry from */\n sidebarState: SidebarState<TraversedEntry>\n /** The target to position the dropdown relative to */\n target: HTMLElement\n}>()\n\nconst emit = defineEmits<{\n (e: 'closeMenu'): void\n (e: 'showDeleteModal'): void\n}>()\n\nconst open = ref(false)\n\nwatch(open, async (newValue, oldValue) => {\n // Close the menu if it was open and is now closed\n if (!newValue && oldValue) {\n // Wait to let the menu close and clean up the aria attributes\n await nextTick()\n emit('closeMenu')\n }\n})\n\n/** Returns whether the item supports adding operations */\nconst canAddOperation = (): boolean =>\n item.type === 'document' || item.type === 'tag'\n\n/** Returns whether the item supports adding tags */\nconst canAddTag = (): boolean => item.type === 'document'\n\n/** Returns whether the item supports editing tags */\nconst canEditTag = (): boolean => item.type === 'tag'\n\n/** Returns whether the item supports editing examples */\nconst canEditExample = (): boolean => item.type === 'example'\n\n/** Returns whether the item supports adding examples */\nconst canAddExample = (): boolean => item.type === 'operation'\n\n/** Returns whether the item supports deletion */\nconst canDelete = (): boolean =>\n (item.type === 'document' && item.id !== 'drafts') ||\n item.type === 'tag' ||\n item.type === 'operation' ||\n item.type === 'example'\n\nconst handleAddOperation = () => {\n if (item.type === 'document') {\n eventBus.emit('ui:open:command-palette', {\n action: 'create-request',\n payload: {\n documentName: item.name,\n },\n })\n }\n\n if (item.type === 'tag') {\n const itemWithParent = sidebarState.getEntryById(item.id)\n eventBus.emit('ui:open:command-palette', {\n action: 'create-request',\n payload: {\n documentName: getParentEntry('document', itemWithParent)?.name,\n tagId: item.name,\n },\n })\n }\n}\n\nconst handleAddTag = () => {\n if (item.type === 'document') {\n eventBus.emit('ui:open:command-palette', {\n action: 'add-tag',\n payload: {\n documentName: item.name,\n },\n })\n }\n}\n\nconst handleEditTag = () => {\n if (item.type === 'tag') {\n const itemWithParent = sidebarState.getEntryById(item.id)\n eventBus.emit(\n 'ui:open:command-palette',\n {\n action: 'edit-tag',\n payload: {\n tag: item,\n documentName: getParentEntry('document', itemWithParent)?.name ?? '',\n },\n },\n { skipUnpackProxy: true },\n )\n }\n}\n\nconst handleAddExample = () => {\n if (item.type === 'operation') {\n const itemWithParent = sidebarState.getEntryById(item.id)\n eventBus.emit('ui:open:command-palette', {\n action: 'add-example',\n payload: {\n documentName: getParentEntry('document', itemWithParent)?.name,\n operationId: item.id,\n },\n })\n }\n}\n\nconst handleEditExample = () => {\n if (item.type === 'example') {\n const itemWithParent = sidebarState.getEntryById(item.id)\n const parentOperation = getParentEntry('operation', itemWithParent)\n eventBus.emit(\n 'ui:open:command-palette',\n {\n action: 'edit-example',\n payload: {\n example: item,\n documentName: getParentEntry('document', itemWithParent)?.name ?? '',\n operationId: parentOperation?.id ?? '',\n },\n } as any,\n { skipUnpackProxy: true },\n )\n }\n}\n</script>\n<template>\n <ScalarDropdown\n v-model:open=\"open\"\n placement=\"bottom-end\"\n :target=\"target\"\n teleport>\n <template #items>\n <!-- Add operation option for documents and tags -->\n <ScalarDropdownItem\n v-if=\"canAddOperation()\"\n @click=\"handleAddOperation()\">\n <div class=\"flex items-center gap-2\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\" />\n Add Operation\n </div>\n </ScalarDropdownItem>\n\n <!-- Add tag option for documents only -->\n <ScalarDropdownItem\n v-if=\"canAddTag()\"\n @click=\"handleAddTag()\">\n <div class=\"flex items-center gap-2\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\" />\n Add Tag\n </div>\n </ScalarDropdownItem>\n\n <!-- Edit tag option for tags only -->\n <ScalarDropdownItem\n v-if=\"canEditTag()\"\n @click=\"handleEditTag()\">\n <div class=\"flex items-center gap-2\">\n <ScalarIconPencil size=\"sm\" />\n Rename Tag\n </div>\n </ScalarDropdownItem>\n\n <!-- Edit example option for examples only -->\n <ScalarDropdownItem\n v-if=\"canEditExample()\"\n @click=\"handleEditExample()\">\n <div class=\"flex items-center gap-2\">\n <ScalarIconPencil size=\"sm\" />\n Rename Example\n </div>\n </ScalarDropdownItem>\n\n <!-- Add example option for operations -->\n <ScalarDropdownItem\n v-if=\"canAddExample()\"\n @click=\"handleAddExample()\">\n <div class=\"flex items-center gap-2\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\" />\n Add Example\n </div>\n </ScalarDropdownItem>\n <ScalarDropdownDivider\n v-if=\"\n (canAddExample() ||\n canAddOperation() ||\n canAddTag() ||\n canEditExample()) &&\n canDelete()\n \" />\n <ScalarDropdownItem\n v-if=\"canDelete()\"\n @click=\"emit('showDeleteModal')\">\n <div class=\"text-red flex items-center gap-2\">\n <ScalarIcon\n icon=\"Delete\"\n size=\"sm\" />\n Delete\n </div>\n </ScalarDropdownItem>\n </template>\n </ScalarDropdown>\n</template>\n","<script setup lang=\"ts\">\nimport {\n ScalarDropdown,\n ScalarDropdownDivider,\n ScalarDropdownItem,\n ScalarIcon,\n} from '@scalar/components'\nimport { ScalarIconPencil } from '@scalar/icons'\nimport type { SidebarState } from '@scalar/sidebar'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getParentEntry } from '@scalar/workspace-store/navigation'\nimport type { TraversedEntry } from '@scalar/workspace-store/schemas/navigation'\nimport { nextTick, ref, watch } from 'vue'\n\nconst { item, eventBus, sidebarState, target } = defineProps<{\n /** The item to display the decorator for */\n item: TraversedEntry\n /** The event bus to emit events to */\n eventBus: WorkspaceEventBus\n /** The sidebar state to get the parent entry from */\n sidebarState: SidebarState<TraversedEntry>\n /** The target to position the dropdown relative to */\n target: HTMLElement\n}>()\n\nconst emit = defineEmits<{\n (e: 'closeMenu'): void\n (e: 'showDeleteModal'): void\n}>()\n\nconst open = ref(false)\n\nwatch(open, async (newValue, oldValue) => {\n // Close the menu if it was open and is now closed\n if (!newValue && oldValue) {\n // Wait to let the menu close and clean up the aria attributes\n await nextTick()\n emit('closeMenu')\n }\n})\n\n/** Returns whether the item supports adding operations */\nconst canAddOperation = (): boolean =>\n item.type === 'document' || item.type === 'tag'\n\n/** Returns whether the item supports adding tags */\nconst canAddTag = (): boolean => item.type === 'document'\n\n/** Returns whether the item supports editing tags */\nconst canEditTag = (): boolean => item.type === 'tag'\n\n/** Returns whether the item supports editing examples */\nconst canEditExample = (): boolean => item.type === 'example'\n\n/** Returns whether the item supports adding examples */\nconst canAddExample = (): boolean => item.type === 'operation'\n\n/** Returns whether the item supports deletion */\nconst canDelete = (): boolean =>\n (item.type === 'document' && item.id !== 'drafts') ||\n item.type === 'tag' ||\n item.type === 'operation' ||\n item.type === 'example'\n\nconst handleAddOperation = () => {\n if (item.type === 'document') {\n eventBus.emit('ui:open:command-palette', {\n action: 'create-request',\n payload: {\n documentName: item.name,\n },\n })\n }\n\n if (item.type === 'tag') {\n const itemWithParent = sidebarState.getEntryById(item.id)\n eventBus.emit('ui:open:command-palette', {\n action: 'create-request',\n payload: {\n documentName: getParentEntry('document', itemWithParent)?.name,\n tagId: item.name,\n },\n })\n }\n}\n\nconst handleAddTag = () => {\n if (item.type === 'document') {\n eventBus.emit('ui:open:command-palette', {\n action: 'add-tag',\n payload: {\n documentName: item.name,\n },\n })\n }\n}\n\nconst handleEditTag = () => {\n if (item.type === 'tag') {\n const itemWithParent = sidebarState.getEntryById(item.id)\n eventBus.emit(\n 'ui:open:command-palette',\n {\n action: 'edit-tag',\n payload: {\n tag: item,\n documentName: getParentEntry('document', itemWithParent)?.name ?? '',\n },\n },\n { skipUnpackProxy: true },\n )\n }\n}\n\nconst handleAddExample = () => {\n if (item.type === 'operation') {\n const itemWithParent = sidebarState.getEntryById(item.id)\n eventBus.emit('ui:open:command-palette', {\n action: 'add-example',\n payload: {\n documentName: getParentEntry('document', itemWithParent)?.name,\n operationId: item.id,\n },\n })\n }\n}\n\nconst handleEditExample = () => {\n if (item.type === 'example') {\n const itemWithParent = sidebarState.getEntryById(item.id)\n const parentOperation = getParentEntry('operation', itemWithParent)\n eventBus.emit(\n 'ui:open:command-palette',\n {\n action: 'edit-example',\n payload: {\n example: item,\n documentName: getParentEntry('document', itemWithParent)?.name ?? '',\n operationId: parentOperation?.id ?? '',\n },\n } as any,\n { skipUnpackProxy: true },\n )\n }\n}\n</script>\n<template>\n <ScalarDropdown\n v-model:open=\"open\"\n placement=\"bottom-end\"\n :target=\"target\"\n teleport>\n <template #items>\n <!-- Add operation option for documents and tags -->\n <ScalarDropdownItem\n v-if=\"canAddOperation()\"\n @click=\"handleAddOperation()\">\n <div class=\"flex items-center gap-2\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\" />\n Add Operation\n </div>\n </ScalarDropdownItem>\n\n <!-- Add tag option for documents only -->\n <ScalarDropdownItem\n v-if=\"canAddTag()\"\n @click=\"handleAddTag()\">\n <div class=\"flex items-center gap-2\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\" />\n Add Tag\n </div>\n </ScalarDropdownItem>\n\n <!-- Edit tag option for tags only -->\n <ScalarDropdownItem\n v-if=\"canEditTag()\"\n @click=\"handleEditTag()\">\n <div class=\"flex items-center gap-2\">\n <ScalarIconPencil size=\"sm\" />\n Rename Tag\n </div>\n </ScalarDropdownItem>\n\n <!-- Edit example option for examples only -->\n <ScalarDropdownItem\n v-if=\"canEditExample()\"\n @click=\"handleEditExample()\">\n <div class=\"flex items-center gap-2\">\n <ScalarIconPencil size=\"sm\" />\n Rename Example\n </div>\n </ScalarDropdownItem>\n\n <!-- Add example option for operations -->\n <ScalarDropdownItem\n v-if=\"canAddExample()\"\n @click=\"handleAddExample()\">\n <div class=\"flex items-center gap-2\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\" />\n Add Example\n </div>\n </ScalarDropdownItem>\n <ScalarDropdownDivider\n v-if=\"\n (canAddExample() ||\n canAddOperation() ||\n canAddTag() ||\n canEditExample()) &&\n canDelete()\n \" />\n <ScalarDropdownItem\n v-if=\"canDelete()\"\n @click=\"emit('showDeleteModal')\">\n <div class=\"text-red flex items-center gap-2\">\n <ScalarIcon\n icon=\"Delete\"\n size=\"sm\" />\n Delete\n </div>\n </ScalarDropdownItem>\n </template>\n </ScalarDropdown>\n</template>\n","import { sortByOrder } from '@scalar/helpers/array/sort-by-order'\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport { toJsonCompatible } from '@scalar/helpers/object/to-json-compatible'\nimport { dereference, escapeJsonPointer } from '@scalar/openapi-parser'\nimport type { DragOffset, DraggingItem, HoveredItem, SidebarState } from '@scalar/sidebar'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport { unpackProxyObject } from '@scalar/workspace-store/helpers/unpack-proxy'\nimport { getOpenapiObject, getParentEntry } from '@scalar/workspace-store/navigation'\nimport type { WorkspaceDocument } from '@scalar/workspace-store/schemas'\nimport type {\n TraversedDocument,\n TraversedEntry,\n TraversedOperation,\n TraversedTag,\n} from '@scalar/workspace-store/schemas/navigation'\nimport type { OpenApiDocument, TagObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport type { OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/operation'\nimport { type MaybeRefOrGetter, toValue } from 'vue'\n\n/**\n * Reorders items in an array by moving an item from one index to another,\n * adjusting insertion point based on offset.\n * Returns the new order array, or null if indices are invalid.\n */\nconst reorderArray = <T>(array: T[], fromIndex: number, toIndex: number, offset: DragOffset): T[] | null => {\n if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) {\n return null\n }\n\n const newArray = [...array]\n const [removed] = newArray.splice(fromIndex, 1)\n if (removed === undefined) {\n return null\n }\n\n const insertIndex = calculateInsertIndex(fromIndex, toIndex, offset, newArray.length)\n newArray.splice(insertIndex, 0, removed)\n return unpackProxyObject(newArray, { depth: 1 })\n}\n\n/**\n * Calculates the insertion index based on drag offset and direction.\n */\nconst calculateInsertIndex = (fromIndex: number, toIndex: number, offset: DragOffset, arrayLength: number): number => {\n const isMovingDown = fromIndex < toIndex\n\n if (offset === 'after') {\n return isMovingDown ? toIndex : toIndex + 1\n }\n\n if (offset === 'before') {\n return isMovingDown ? toIndex - 1 : toIndex\n }\n\n if (offset === 'into') {\n return arrayLength\n }\n\n return toIndex\n}\n\n/**\n * Type guard to check if an entry's type matches any of the provided types.\n *\n * @template Entry - The traversed entry type (must extend TraversedEntry).\n * @template Type - An array of allowed entry types to check against.\n * @param entry - The sidebar entry to check.\n * @param type - Array of entry types to match (e.g., ['document', 'tag']).\n * @returns {boolean} True if entry.type is included in the provided type array; otherwise, false.\n *\n * @example\n * isEntryType(someEntry, ['document', 'tag']) // true if someEntry.type === 'document' or 'tag'\n */\nconst isEntryType = <Entry extends TraversedEntry, const Type extends TraversedEntry['type'][]>(\n entry: Entry,\n type: Type,\n): entry is Entry & { type: Type[number] } => {\n return type.includes(entry.type)\n}\n\n/**\n * Determines if the hovered item qualifies as a \"reorder\" operation.\n * Reorder means moving before or after another item, not dropping\n * into a parent container.\n */\nconst isReorder = (hoveredItem: HoveredItem): boolean => {\n return hoveredItem.offset === 'before' || hoveredItem.offset === 'after'\n}\n\n/**\n * Determines if the hovered item represents a \"drop into parent\" operation.\n */\nconst isDropIntoParent = (hoveredItem: HoveredItem): boolean => {\n return hoveredItem.offset === 'into'\n}\n\n/**\n * Checks if two sidebar entries (dragging and hovered) share the same parent.\n *\n * This is useful for determining if items can be reordered within the same context,\n * such as reordering tags or operations under the same tag or document, during drag-and-drop operations.\n *\n * @param draggingItem - The entry currently being dragged (must have a parent to compare).\n * @param hoveredItem - The entry currently hovered over (must have a parent to compare).\n * @returns {boolean} True if both entries have the same parent (by id), false otherwise.\n *\n * @example\n * const parent = { id: 'doc-1', type: 'document' };\n * const tagA = { id: 'tag-1', type: 'tag', parent };\n * const tagB = { id: 'tag-2', type: 'tag', parent };\n * itemsShareParent(tagA, tagB); // true\n *\n * const otherParent = { id: 'doc-2', type: 'document' };\n * const tagC = { id: 'tag-3', type: 'tag', parent: otherParent };\n * itemsShareParent(tagA, tagC); // false\n */\nconst itemsShareParent = (\n draggingItem: TraversedEntry & { parent?: TraversedEntry },\n hoveredItem: TraversedEntry & { parent?: TraversedEntry },\n): boolean => {\n if (!draggingItem.parent || !hoveredItem.parent) {\n return false\n }\n return draggingItem.parent.id === hoveredItem.parent.id\n}\n\n/**\n * Triggers rebuilding of the sidebar for a specific document entry.\n * This is called after operations that alter the sidebar structure.\n */\nconst rebuildSidebar = ({ store, entry }: { store: WorkspaceStore; entry: TraversedEntry }): void => {\n const documentEntry = getParentEntry('document', entry)\n if (documentEntry) {\n store.buildSidebar(documentEntry.name)\n }\n}\n\n/**\n * Gets the current order array for a parent entry.\n * Falls back to children IDs if no explicit order exists.\n */\nconst getCurrentOrder = (\n parent: WorkspaceDocument | TagObject,\n parentEntry: TraversedDocument | TraversedTag,\n): string[] => {\n const order = parent['x-scalar-order']\n return order ?? parentEntry.children?.map((child) => child.id) ?? []\n}\n\n/**\n * Handles reordering of entries (tags or operations) within the same parent.\n */\nconst handleReorderWithinParent = (\n store: WorkspaceStore,\n draggingItem: TraversedEntry & { parent?: TraversedEntry },\n hoveredItem: TraversedEntry & { parent?: TraversedEntry },\n offset: DragOffset,\n): boolean => {\n const parentEntry = draggingItem.parent\n if (!parentEntry || !isEntryType(parentEntry, ['tag', 'document'])) {\n return false\n }\n\n const parent = getOpenapiObject({ store, entry: parentEntry })\n if (!parent) {\n return false\n }\n\n const currentOrder = getCurrentOrder(parent, parentEntry)\n const draggedIndex = currentOrder.findIndex((id) => id === draggingItem.id)\n const hoveredIndex = currentOrder.findIndex((id) => id === hoveredItem.id)\n\n const newOrder = reorderArray(currentOrder, draggedIndex, hoveredIndex, offset)\n if (!newOrder) {\n return false\n }\n\n parent['x-scalar-order'] = newOrder\n rebuildSidebar({ store, entry: parentEntry })\n return true\n}\n\n/**\n * Updates operation tags when moving between different parents.\n */\nconst updateOperationTags = (\n operation: OperationObject,\n draggedTag: TraversedTag | null,\n hoveredTag: TraversedTag | null,\n): void => {\n const tags = new Set(operation.tags ?? [])\n\n if (hoveredTag) {\n tags.add(hoveredTag.name)\n }\n\n if (draggedTag) {\n tags.delete(draggedTag.name)\n }\n\n operation.tags = Array.from(tags)\n}\n\n/**\n * Moves an operation from one document to another.\n */\nconst moveOperationBetweenDocuments = (\n draggingDocument: WorkspaceDocument,\n hoveredDocument: WorkspaceDocument,\n draggingItem: TraversedOperation,\n operationCopy: OperationObject,\n): void => {\n // Delete from old location\n if (draggingDocument.paths?.[draggingItem.path]?.[draggingItem.method]) {\n delete draggingDocument.paths[draggingItem.path]![draggingItem.method]\n }\n\n // Add to new location\n if (!hoveredDocument.paths) {\n hoveredDocument.paths = {\n [draggingItem.path]: {\n [draggingItem.method]: operationCopy,\n },\n }\n } else {\n if (!hoveredDocument.paths[draggingItem.path]) {\n hoveredDocument.paths[draggingItem.path] = {}\n }\n hoveredDocument.paths[draggingItem.path]![draggingItem.method] = operationCopy\n }\n}\n\n/**\n * Retrieves the dereferenced operation object for a given path and method.\n * This resolves all $ref references so you always get the full, dereferenced operation.\n */\nconst getDereferencedOperation = (\n document: WorkspaceDocument,\n path: string,\n method: HttpMethod,\n): OperationObject | undefined => {\n const result = dereference(document).schema as OpenApiDocument\n const operation = result.paths?.[path]?.[method]\n\n return toJsonCompatible(operation, { prefix: `#/paths/${escapeJsonPointer(path)}/${method}` }) as\n | OperationObject\n | undefined\n}\n\n/**\n * Handles moving an operation between different documents/tags.\n */\nconst handleMoveOperation = (\n store: WorkspaceStore,\n draggingItem: TraversedOperation,\n hoveredItem: TraversedTag | TraversedDocument,\n): boolean => {\n const draggingDocumentEntry = getParentEntry('document', draggingItem)\n const hoveredDocumentEntry = getParentEntry('document', hoveredItem)\n\n if (!draggingDocumentEntry || !hoveredDocumentEntry) {\n return false\n }\n\n const draggingDocument = getOpenapiObject({ store, entry: draggingDocumentEntry })\n const hoveredDocument = getOpenapiObject({ store, entry: hoveredDocumentEntry })\n\n if (!draggingDocument || !hoveredDocument) {\n return false\n }\n\n const currentOperation = getDereferencedOperation(\n unpackProxyObject(draggingDocument),\n draggingItem.path,\n draggingItem.method,\n )\n\n if (!currentOperation) {\n return false\n }\n\n const draggedTag = getParentEntry('tag', draggingItem) ?? null\n const hoveredTag = getParentEntry('tag', hoveredItem) ?? null\n\n updateOperationTags(currentOperation, draggedTag, hoveredTag)\n\n // Create deep copy to avoid proxy reference issues\n moveOperationBetweenDocuments(draggingDocument, hoveredDocument, draggingItem, currentOperation)\n\n // Rebuild sidebars for both documents\n rebuildSidebar({ store, entry: draggingItem })\n rebuildSidebar({ store, entry: hoveredItem })\n\n return true\n}\n\n/**\n * Handles document reordering.\n */\nconst handleDocumentReorder = (\n store: WorkspaceStore,\n draggingItem: TraversedDocument,\n hoveredItem: TraversedDocument,\n offset: DragOffset,\n): boolean => {\n const order = store.workspace['x-scalar-order'] ?? []\n const documents = Object.keys(store.workspace.documents)\n const currentOrder = sortByOrder(documents, order, (item) => item)\n const draggedIndex = currentOrder.findIndex((id) => id === draggingItem.id)\n const hoveredIndex = currentOrder.findIndex((id) => id === hoveredItem.id)\n\n const newOrder = reorderArray(currentOrder, draggedIndex, hoveredIndex, offset)\n if (!newOrder) {\n return false\n }\n\n store.update('x-scalar-order', newOrder)\n return true\n}\n\n/**\n * Factory function that creates drag and drop handlers for sidebar items.\n * Handles reordering and moving of documents, tags, and operations.\n */\nexport const dragHandleFactory = ({\n store: _store,\n sidebarState,\n}: {\n store: MaybeRefOrGetter<WorkspaceStore | null>\n sidebarState: SidebarState<TraversedEntry>\n}) => {\n /**\n * Handles the end of a drag operation.\n * Returns true if the drag and drop was successful, false otherwise.\n */\n const handleDragEnd = (_draggingItem: DraggingItem, _hoveredItem: HoveredItem): boolean => {\n const store = toValue(_store)\n if (!store) {\n return false\n }\n\n const draggingItem = sidebarState.getEntryById(_draggingItem.id)\n const hoveredItem = sidebarState.getEntryById(_hoveredItem.id)\n\n if (!draggingItem || !hoveredItem) {\n return false\n }\n\n // Handle document reordering\n if (draggingItem.type === 'document') {\n if (hoveredItem.type !== 'document' || !isReorder(_hoveredItem)) {\n return false\n }\n return handleDocumentReorder(store, draggingItem, hoveredItem, _hoveredItem.offset)\n }\n\n // Handle tag reordering\n if (draggingItem.type === 'tag') {\n if (hoveredItem.type !== 'tag' || !isReorder(_hoveredItem) || !itemsShareParent(draggingItem, hoveredItem)) {\n return false\n }\n return handleReorderWithinParent(\n store,\n draggingItem as TraversedEntry & { parent?: TraversedEntry },\n hoveredItem as TraversedEntry & { parent?: TraversedEntry },\n _hoveredItem.offset,\n )\n }\n\n // Handle operation reordering and moving\n if (draggingItem.type === 'operation') {\n // Reorder within same parent\n if (isReorder(_hoveredItem) && itemsShareParent(draggingItem, hoveredItem)) {\n return handleReorderWithinParent(\n store,\n draggingItem as TraversedEntry & { parent?: TraversedEntry },\n hoveredItem as TraversedEntry & { parent?: TraversedEntry },\n _hoveredItem.offset,\n )\n }\n\n // Move between different documents/tags\n if (isEntryType(hoveredItem, ['tag', 'document']) && isDropIntoParent(_hoveredItem)) {\n return handleMoveOperation(store, draggingItem, hoveredItem)\n }\n }\n\n return false\n }\n\n /**\n * Determines if an item can be dropped on another item.\n * Returns true if the drop operation is allowed, false otherwise.\n */\n const isDroppable = (_draggingItem: DraggingItem, _hoveredItem: HoveredItem): boolean => {\n const store = toValue(_store)\n if (!store) {\n return false\n }\n\n const draggingItem = sidebarState.getEntryById(_draggingItem.id)\n const hoveredItem = sidebarState.getEntryById(_hoveredItem.id)\n\n if (!draggingItem || !hoveredItem) {\n return false\n }\n\n // Examples cannot be reordered\n if (draggingItem.type === 'example') {\n return false\n }\n\n // Documents can only be reordered (not dropped into other documents)\n if (draggingItem.type === 'document') {\n return hoveredItem.type === 'document' && isReorder(_hoveredItem)\n }\n\n // Tags can only be reordered within the same parent\n if (draggingItem.type === 'tag') {\n return isReorder(_hoveredItem) && itemsShareParent(draggingItem, hoveredItem)\n }\n\n // Operations can be reordered within the same parent or moved between documents/tags\n if (draggingItem.type === 'operation') {\n const hoveredDocumentEntry = getParentEntry('document', hoveredItem)\n const draggingDocumentEntry = getParentEntry('document', draggingItem)\n\n if (!hoveredDocumentEntry || !draggingDocumentEntry) {\n return false\n }\n\n const hoveredDocument = getOpenapiObject({ store, entry: hoveredDocumentEntry })\n if (!hoveredDocument) {\n return false\n }\n\n const sameParent = itemsShareParent(draggingItem, hoveredItem)\n\n // Don't allow reorder when parents are different\n if (isReorder(_hoveredItem) && !sameParent) {\n return false\n }\n\n // Same parent: allow reorder or drop into tag/document\n if (sameParent) {\n return (\n isReorder(_hoveredItem) || (isDropIntoParent(_hoveredItem) && isEntryType(hoveredItem, ['tag', 'document']))\n )\n }\n\n // Different parents: allow drop into tag/document if no path conflict\n return (\n isDropIntoParent(_hoveredItem) &&\n isEntryType(hoveredItem, ['tag', 'document']) &&\n (draggingDocumentEntry.id === hoveredDocumentEntry.id ||\n hoveredDocument.paths?.[draggingItem.path]?.[draggingItem.method] === undefined)\n )\n }\n\n return false\n }\n\n return {\n handleDragEnd,\n isDroppable,\n }\n}\n","<script setup lang=\"ts\">\nimport {\n ScalarButton,\n ScalarIconButton,\n ScalarModal,\n ScalarSidebarItem,\n useModal,\n type WorkspaceGroup,\n} from '@scalar/components'\nimport { isMacOS } from '@scalar/helpers/general/is-mac-os'\nimport {\n ScalarIconDotsThree,\n ScalarIconGearSix,\n ScalarIconPlus,\n} from '@scalar/icons'\nimport { LibraryIcon } from '@scalar/icons/library'\nimport type { DraggingItem, HoveredItem, SidebarState } from '@scalar/sidebar'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getParentEntry } from '@scalar/workspace-store/navigation'\nimport type {\n TraversedEntry,\n TraversedOperation,\n} from '@scalar/workspace-store/schemas/navigation'\nimport { capitalize, computed, nextTick, ref } from 'vue'\n\nimport Rabbit from '@/assets/rabbit.ascii?raw'\nimport RabbitJump from '@/assets/rabbitjump.ascii?raw'\nimport ScalarAsciiArt from '@/components/ScalarAsciiArt.vue'\nimport DeleteSidebarListElement from '@/components/Sidebar/Actions/DeleteSidebarListElement.vue'\nimport { Sidebar } from '@/v2/components/sidebar'\nimport DownloadAppButton from '@/v2/features/app/components/DownloadAppButton.vue'\nimport SidebarItemMenu from '@/v2/features/app/components/SidebarItemMenu.vue'\nimport { dragHandleFactory } from '@/v2/helpers/drag-handle-factory'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nconst { sidebarState, layout, activeWorkspace, workspaces, store, eventBus } =\n defineProps<{\n /**\n * The current layout of the app (e.g., 'desktop', 'web')\n */\n layout: ClientLayout\n\n /**\n * The sidebar state, holding navigation items and state\n */\n sidebarState: SidebarState<TraversedEntry>\n\n /**\n * Whether the workspace overview sidebar is currently open\n */\n isWorkspaceOpen?: boolean\n /**\n * The currently active workspace.\n * This represents the workspace that the user is currently working in.\n */\n activeWorkspace: { id: string; label: string }\n /**\n * The list of all available workspaces.\n * Used to render options for workspace switching and selection.\n */\n workspaces: WorkspaceGroup[]\n /**\n * The workspace event bus for handling workspace-level events.\n * Used for triggering and responding to workspace changes and actions.\n */\n eventBus: WorkspaceEventBus\n /**\n * The WorkspaceStore instance for managing workspace state and actions.\n * Provides methods and state for interacting with the current workspace.\n */\n store: WorkspaceStore\n }>()\n\nconst emit = defineEmits<{\n /** Emitted when the workspace button in the sidebar is clicked */\n (e: 'click:workspace'): void\n /** Emitted when a navigation or sidebar item is selected by ID */\n (e: 'selectItem', id: string): void\n /** Emitted when a workspace is selected by optional ID */\n (e: 'select:workspace', id?: string): void\n /** Emitted when the user requests to create a new workspace */\n (e: 'create:workspace'): void\n}>()\n\ndefineSlots<{\n /** Slot for customizing the actions section of the sidebar menu. */\n sidebarMenuActions?(): unknown\n}>()\n\n/** The label for the workspace button in the sidebar */\nconst workspaceLabel = computed(() => capitalize(activeWorkspace.label))\n\n/** Controls the visibility of the sidebar */\nconst isSidebarOpen = defineModel<boolean>('isSidebarOpen', {\n required: true,\n})\n\n/** Controls the width of the sidebar */\nconst sidebarWidth = defineModel<number>('sidebarWidth', {\n required: true,\n default: 288,\n})\n\n/** Calculate if we should show the getting started section */\nconst showGettingStarted = computed(() => sidebarState.items.value.length <= 1)\n\n/*\n * Setup drag and drop handlers for sidebar items.\n * The dragHandleFactory takes the current workspace store and sidebar state,\n * and returns the appropriate handlers for drag ending and droppability.\n *\n * We use computed to ensure the handlers are recreated when the store or sidebarState changes,\n * so they always have access to the latest values.\n */\nconst dragHandlers = computed(() =>\n dragHandleFactory({\n store,\n sidebarState,\n }),\n)\n\nconst handleDragEnd = (\n draggingItem: DraggingItem,\n hoveredItem: HoveredItem,\n): boolean => {\n return dragHandlers.value.handleDragEnd(draggingItem, hoveredItem)\n}\n\nconst isDroppable = (\n draggingItem: DraggingItem,\n hoveredItem: HoveredItem,\n): boolean => {\n return dragHandlers.value.isDroppable(draggingItem, hoveredItem)\n}\n\n/** The current target for the dropdown menu */\nconst menuTarget = ref<{\n /** The sidebar item that the menu is targeting */\n item: TraversedEntry\n /** A reference to the element that the menu is for */\n el: HTMLElement\n /** Whether or not to show the menu */\n showMenu: boolean\n} | null>(null)\n\nconst deleteModalState = useModal()\n\n/** Computes the message for the delete modal */\nconst deleteMessage = computed(() => {\n const item = menuTarget.value?.item\n\n if (item?.type === 'document') {\n return \"This cannot be undone. You're about to delete the document and all tags and operations inside it.\"\n }\n\n return `Are you sure you want to delete this ${item?.type ?? 'item'}? This action cannot be undone.`\n})\n\n/** Deletes an item from the sidebar by emitting the appropriate event */\nconst handleDelete = () => {\n const item = menuTarget.value?.item\n\n if (!item) {\n return\n }\n\n const result = sidebarState.getEntryById(item.id)\n\n const document = getParentEntry('document', result)\n const operation = getParentEntry('operation', result)\n\n if (!document) {\n return\n }\n\n if (item.type === 'document') {\n eventBus.emit('document:delete:document', { name: document.name })\n } else if (item.type === 'tag') {\n eventBus.emit('tag:delete:tag', {\n documentName: document.name,\n name: item.name,\n })\n } else if (item.type === 'operation') {\n if (!operation) {\n return\n }\n\n eventBus.emit('operation:delete:operation', {\n meta: {\n method: operation.method,\n path: operation.path,\n },\n documentName: document.name,\n })\n } else if (item.type === 'example') {\n if (!operation) {\n return\n }\n\n eventBus.emit('operation:delete:example', {\n meta: {\n method: operation.method,\n path: operation.path,\n exampleKey: item.name,\n },\n documentName: document.name,\n })\n }\n\n /** Clean up after deletion */\n deleteModalState.hide()\n menuTarget.value = null\n}\n\n/** Opens the dropdown menu for the given item */\nconst openMenu = async (\n event: MouseEvent | KeyboardEvent,\n item: TraversedEntry,\n) => {\n if (menuTarget.value?.showMenu) {\n return\n }\n\n const el = event.currentTarget as HTMLElement\n menuTarget.value = { item, el, showMenu: true }\n\n // Wait for the target to bind to the element\n await nextTick()\n\n // Re-dispatch the event on the target to open the menu\n const cloned =\n event instanceof MouseEvent\n ? new MouseEvent(event.type, event)\n : new KeyboardEvent(event.type, event)\n\n menuTarget.value?.el.dispatchEvent(cloned)\n}\n\n/** Closes the dropdown menu */\nconst closeMenu = () => {\n if (menuTarget.value) {\n menuTarget.value.showMenu = false\n }\n}\n\n/** Opens the command palette with the payload needed to create a request */\nconst handleAddEmptyFolder = (item: TraversedEntry) => {\n const itemWithParent = sidebarState.getEntryById(item.id)\n const documentEntry = getParentEntry('document', itemWithParent)\n const tag = getParentEntry('tag', itemWithParent)\n\n eventBus.emit('ui:open:command-palette', {\n action: 'create-request',\n payload: {\n documentName: documentEntry?.name,\n tagId: tag?.name,\n },\n })\n}\n\n/**\n * Navigates to the operations page for the provided operation item.\n * Emits a navigation event for the operation overview page.\n */\nconst navigateToOperationsPage = (item: TraversedOperation) => {\n const operationWithParent = sidebarState.getEntryById(item.id)\n const documentSlug = getParentEntry('document', operationWithParent)?.name\n\n eventBus.emit('ui:navigate', {\n page: 'operation',\n path: 'overview',\n operationPath: item.path,\n method: item.method,\n documentSlug: documentSlug,\n })\n}\n</script>\n\n<template>\n <div class=\"flex\">\n <Sidebar\n v-model:sidebarWidth=\"sidebarWidth\"\n :activeWorkspace=\"activeWorkspace\"\n :class=\"[\n 'max-md:inset-y-0 max-md:z-2 max-md:w-full!',\n isSidebarOpen ? 'max-md:fixed! max-md:flex!' : 'max-md:hidden!',\n ]\"\n :documents=\"Object.values(store.workspace.documents)\"\n :isDroppable=\"isDroppable\"\n :layout=\"layout\"\n :sidebarState=\"sidebarState\"\n :workspaces=\"workspaces\"\n @create:workspace=\"emit('create:workspace')\"\n @navigate:to:settings=\"\n eventBus.emit('ui:navigate', { page: 'workspace', path: 'settings' })\n \"\n @reorder=\"\n (draggingItem, hoveredItem) => handleDragEnd(draggingItem, hoveredItem)\n \"\n @select:workspace=\"(id) => emit('select:workspace', id)\"\n @selectItem=\"(id) => emit('selectItem', id)\">\n <template #sidebarMenuActions>\n <slot name=\"sidebarMenuActions\" />\n </template>\n <!-- Workspace Identifier -->\n <template #workspaceButton>\n <ScalarSidebarItem\n is=\"button\"\n :active=\"isWorkspaceOpen\"\n @click=\"emit('click:workspace')\">\n {{ workspaceLabel }}\n </ScalarSidebarItem>\n </template>\n\n <!-- Decorator dropdown menu -->\n <template #decorator=\"{ item }\">\n <div class=\"flex items-center gap-0.5\">\n <ScalarIconButton\n v-if=\"item.type === 'operation'\"\n :icon=\"ScalarIconGearSix\"\n label=\"Operation settings\"\n size=\"sm\"\n weight=\"bold\"\n @click.stop=\"navigateToOperationsPage(item)\"\n @keydown.enter.stop=\"navigateToOperationsPage(item)\"\n @keydown.space.stop=\"navigateToOperationsPage(item)\" />\n <ScalarIconButton\n aria-expanded=\"false\"\n aria-haspopup=\"menu\"\n :icon=\"ScalarIconDotsThree\"\n label=\"More options\"\n size=\"sm\"\n weight=\"bold\"\n @click.stop=\"(e: MouseEvent) => openMenu(e, item)\"\n @keydown.down.stop=\"(e: KeyboardEvent) => openMenu(e, item)\"\n @keydown.enter.stop=\"(e: KeyboardEvent) => openMenu(e, item)\"\n @keydown.space.stop=\"(e: KeyboardEvent) => openMenu(e, item)\"\n @keydown.up.stop=\"(e: KeyboardEvent) => openMenu(e, item)\" />\n </div>\n </template>\n\n <!-- Dirty document icon slot -->\n <template #icon=\"{ item }\">\n <template\n v-if=\"\n item.type === 'document' &&\n store.workspace.documents[item.name]?.['x-scalar-is-dirty'] === true\n \">\n <div class=\"relative flex items-center\">\n <LibraryIcon\n class=\"block\"\n :src=\"\n ('icon' in item && item.icon) || 'interface-content-folder'\n \" />\n <div\n class=\"bg-orange absolute -top-1.25 -right-1.25 flex h-2.5 w-2.5 items-center justify-center rounded-full text-[9px] font-bold text-white\">\n !\n </div>\n </div>\n </template>\n </template>\n\n <!-- Empty folder slot -->\n <template #empty=\"{ item }\">\n <ScalarSidebarItem\n is=\"button\"\n @click=\"handleAddEmptyFolder(item)\">\n <template #icon>\n <ScalarIconPlus />\n </template>\n <template #default>Add operation</template>\n </ScalarSidebarItem>\n </template>\n\n <!-- Getting started section -->\n <template\n v-if=\"layout !== 'modal'\"\n #footer>\n <div\n :class=\"{\n 'empty-sidebar-item border-t': showGettingStarted,\n }\">\n <div\n v-if=\"showGettingStarted\"\n class=\"empty-sidebar-item-content overflow-hidden px-2.5 py-2.5\">\n <div class=\"rabbit-ascii relative m-auto mt-2 h-[68px] w-[60px]\">\n <ScalarAsciiArt\n :art=\"Rabbit\"\n class=\"rabbitsit font-bold\" />\n <ScalarAsciiArt\n :art=\"RabbitJump\"\n class=\"rabbitjump absolute top-0 left-0 font-bold\" />\n </div>\n <div class=\"mt-2 mb-2 text-center text-sm text-balance\">\n <b class=\"font-medium\">Let's Get Started</b>\n <p class=\"mt-2 leading-5\">\n Create request, folder, collection or import from\n OpenAPI/Postman\n </p>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-1.5 p-2\">\n <ScalarButton\n v-if=\"showGettingStarted\"\n class=\"w-full\"\n size=\"sm\"\n @click=\"\n eventBus.emit('ui:open:command-palette', {\n action: 'import-from-openapi-swagger-postman-curl',\n payload: undefined,\n })\n \">\n Import Collection\n </ScalarButton>\n\n <ScalarButton\n class=\"w-full\"\n hotkey=\"K\"\n size=\"sm\"\n variant=\"outlined\"\n @click=\"eventBus.emit('ui:open:command-palette')\">\n Add Item \n\n <span\n class=\"text-sidebar-c-2 rounded border px-1.25 py-1 text-xs leading-none font-medium uppercase\">\n <template v-if=\"isMacOS()\">\n <span class=\"sr-only\">Command</span>\n <span aria-hidden=\"true\">⌘</span>\n </template>\n <template v-else>\n <span class=\"sr-only\">CTRL</span>\n <span aria-hidden=\"true\">⌃</span>\n </template>\n K\n </span>\n </ScalarButton>\n <DownloadAppButton v-if=\"layout === 'web'\" />\n </div>\n </div>\n </template>\n </Sidebar>\n <SidebarItemMenu\n v-if=\"menuTarget?.showMenu\"\n :eventBus=\"eventBus\"\n :item=\"menuTarget.item\"\n :sidebarState=\"sidebarState\"\n :target=\"menuTarget.el\"\n @closeMenu=\"closeMenu\"\n @showDeleteModal=\"deleteModalState.show()\" />\n\n <!-- Delete Modal -->\n <ScalarModal\n v-if=\"menuTarget\"\n size=\"xxs\"\n :state=\"deleteModalState\"\n :title=\"`Delete ${menuTarget.item.title}`\">\n <DeleteSidebarListElement\n :variableName=\"menuTarget.item.title\"\n :warningMessage=\"deleteMessage\"\n @close=\"deleteModalState.hide()\"\n @delete=\"handleDelete\" />\n </ScalarModal>\n </div>\n</template>\n\n<style scoped>\n.empty-sidebar-item-content {\n display: none;\n}\n.empty-sidebar-item .empty-sidebar-item-content {\n display: block;\n}\n.rabbitjump {\n opacity: 0;\n}\n.empty-sidebar-item:hover .rabbitjump {\n opacity: 1;\n animation: rabbitAnimation 0.5s steps(1) infinite;\n}\n.empty-sidebar-item:hover .rabbitsit {\n opacity: 0;\n animation: rabbitAnimation2 0.5s steps(1) infinite;\n}\n.empty-sidebar-item:hover .rabbit-ascii {\n animation: rabbitRun 8s infinite linear;\n}\n@keyframes rabbitRun {\n 0% {\n transform: translate3d(0, 0, 0);\n }\n 25% {\n transform: translate3d(250px, 0, 0);\n }\n 25.01% {\n transform: translate3d(-250px, 0, 0);\n }\n 75% {\n transform: translate3d(250px, 0, 0);\n }\n 75.01% {\n transform: translate3d(-250px, 0, 0);\n }\n 100% {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes rabbitAnimation {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n }\n}\n@keyframes rabbitAnimation2 {\n 0%,\n 100% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n transform: translate3d(0, -8px, 0);\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarButton,\n ScalarIconButton,\n ScalarModal,\n ScalarSidebarItem,\n useModal,\n type WorkspaceGroup,\n} from '@scalar/components'\nimport { isMacOS } from '@scalar/helpers/general/is-mac-os'\nimport {\n ScalarIconDotsThree,\n ScalarIconGearSix,\n ScalarIconPlus,\n} from '@scalar/icons'\nimport { LibraryIcon } from '@scalar/icons/library'\nimport type { DraggingItem, HoveredItem, SidebarState } from '@scalar/sidebar'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getParentEntry } from '@scalar/workspace-store/navigation'\nimport type {\n TraversedEntry,\n TraversedOperation,\n} from '@scalar/workspace-store/schemas/navigation'\nimport { capitalize, computed, nextTick, ref } from 'vue'\n\nimport Rabbit from '@/assets/rabbit.ascii?raw'\nimport RabbitJump from '@/assets/rabbitjump.ascii?raw'\nimport ScalarAsciiArt from '@/components/ScalarAsciiArt.vue'\nimport DeleteSidebarListElement from '@/components/Sidebar/Actions/DeleteSidebarListElement.vue'\nimport { Sidebar } from '@/v2/components/sidebar'\nimport DownloadAppButton from '@/v2/features/app/components/DownloadAppButton.vue'\nimport SidebarItemMenu from '@/v2/features/app/components/SidebarItemMenu.vue'\nimport { dragHandleFactory } from '@/v2/helpers/drag-handle-factory'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nconst { sidebarState, layout, activeWorkspace, workspaces, store, eventBus } =\n defineProps<{\n /**\n * The current layout of the app (e.g., 'desktop', 'web')\n */\n layout: ClientLayout\n\n /**\n * The sidebar state, holding navigation items and state\n */\n sidebarState: SidebarState<TraversedEntry>\n\n /**\n * Whether the workspace overview sidebar is currently open\n */\n isWorkspaceOpen?: boolean\n /**\n * The currently active workspace.\n * This represents the workspace that the user is currently working in.\n */\n activeWorkspace: { id: string; label: string }\n /**\n * The list of all available workspaces.\n * Used to render options for workspace switching and selection.\n */\n workspaces: WorkspaceGroup[]\n /**\n * The workspace event bus for handling workspace-level events.\n * Used for triggering and responding to workspace changes and actions.\n */\n eventBus: WorkspaceEventBus\n /**\n * The WorkspaceStore instance for managing workspace state and actions.\n * Provides methods and state for interacting with the current workspace.\n */\n store: WorkspaceStore\n }>()\n\nconst emit = defineEmits<{\n /** Emitted when the workspace button in the sidebar is clicked */\n (e: 'click:workspace'): void\n /** Emitted when a navigation or sidebar item is selected by ID */\n (e: 'selectItem', id: string): void\n /** Emitted when a workspace is selected by optional ID */\n (e: 'select:workspace', id?: string): void\n /** Emitted when the user requests to create a new workspace */\n (e: 'create:workspace'): void\n}>()\n\ndefineSlots<{\n /** Slot for customizing the actions section of the sidebar menu. */\n sidebarMenuActions?(): unknown\n}>()\n\n/** The label for the workspace button in the sidebar */\nconst workspaceLabel = computed(() => capitalize(activeWorkspace.label))\n\n/** Controls the visibility of the sidebar */\nconst isSidebarOpen = defineModel<boolean>('isSidebarOpen', {\n required: true,\n})\n\n/** Controls the width of the sidebar */\nconst sidebarWidth = defineModel<number>('sidebarWidth', {\n required: true,\n default: 288,\n})\n\n/** Calculate if we should show the getting started section */\nconst showGettingStarted = computed(() => sidebarState.items.value.length <= 1)\n\n/*\n * Setup drag and drop handlers for sidebar items.\n * The dragHandleFactory takes the current workspace store and sidebar state,\n * and returns the appropriate handlers for drag ending and droppability.\n *\n * We use computed to ensure the handlers are recreated when the store or sidebarState changes,\n * so they always have access to the latest values.\n */\nconst dragHandlers = computed(() =>\n dragHandleFactory({\n store,\n sidebarState,\n }),\n)\n\nconst handleDragEnd = (\n draggingItem: DraggingItem,\n hoveredItem: HoveredItem,\n): boolean => {\n return dragHandlers.value.handleDragEnd(draggingItem, hoveredItem)\n}\n\nconst isDroppable = (\n draggingItem: DraggingItem,\n hoveredItem: HoveredItem,\n): boolean => {\n return dragHandlers.value.isDroppable(draggingItem, hoveredItem)\n}\n\n/** The current target for the dropdown menu */\nconst menuTarget = ref<{\n /** The sidebar item that the menu is targeting */\n item: TraversedEntry\n /** A reference to the element that the menu is for */\n el: HTMLElement\n /** Whether or not to show the menu */\n showMenu: boolean\n} | null>(null)\n\nconst deleteModalState = useModal()\n\n/** Computes the message for the delete modal */\nconst deleteMessage = computed(() => {\n const item = menuTarget.value?.item\n\n if (item?.type === 'document') {\n return \"This cannot be undone. You're about to delete the document and all tags and operations inside it.\"\n }\n\n return `Are you sure you want to delete this ${item?.type ?? 'item'}? This action cannot be undone.`\n})\n\n/** Deletes an item from the sidebar by emitting the appropriate event */\nconst handleDelete = () => {\n const item = menuTarget.value?.item\n\n if (!item) {\n return\n }\n\n const result = sidebarState.getEntryById(item.id)\n\n const document = getParentEntry('document', result)\n const operation = getParentEntry('operation', result)\n\n if (!document) {\n return\n }\n\n if (item.type === 'document') {\n eventBus.emit('document:delete:document', { name: document.name })\n } else if (item.type === 'tag') {\n eventBus.emit('tag:delete:tag', {\n documentName: document.name,\n name: item.name,\n })\n } else if (item.type === 'operation') {\n if (!operation) {\n return\n }\n\n eventBus.emit('operation:delete:operation', {\n meta: {\n method: operation.method,\n path: operation.path,\n },\n documentName: document.name,\n })\n } else if (item.type === 'example') {\n if (!operation) {\n return\n }\n\n eventBus.emit('operation:delete:example', {\n meta: {\n method: operation.method,\n path: operation.path,\n exampleKey: item.name,\n },\n documentName: document.name,\n })\n }\n\n /** Clean up after deletion */\n deleteModalState.hide()\n menuTarget.value = null\n}\n\n/** Opens the dropdown menu for the given item */\nconst openMenu = async (\n event: MouseEvent | KeyboardEvent,\n item: TraversedEntry,\n) => {\n if (menuTarget.value?.showMenu) {\n return\n }\n\n const el = event.currentTarget as HTMLElement\n menuTarget.value = { item, el, showMenu: true }\n\n // Wait for the target to bind to the element\n await nextTick()\n\n // Re-dispatch the event on the target to open the menu\n const cloned =\n event instanceof MouseEvent\n ? new MouseEvent(event.type, event)\n : new KeyboardEvent(event.type, event)\n\n menuTarget.value?.el.dispatchEvent(cloned)\n}\n\n/** Closes the dropdown menu */\nconst closeMenu = () => {\n if (menuTarget.value) {\n menuTarget.value.showMenu = false\n }\n}\n\n/** Opens the command palette with the payload needed to create a request */\nconst handleAddEmptyFolder = (item: TraversedEntry) => {\n const itemWithParent = sidebarState.getEntryById(item.id)\n const documentEntry = getParentEntry('document', itemWithParent)\n const tag = getParentEntry('tag', itemWithParent)\n\n eventBus.emit('ui:open:command-palette', {\n action: 'create-request',\n payload: {\n documentName: documentEntry?.name,\n tagId: tag?.name,\n },\n })\n}\n\n/**\n * Navigates to the operations page for the provided operation item.\n * Emits a navigation event for the operation overview page.\n */\nconst navigateToOperationsPage = (item: TraversedOperation) => {\n const operationWithParent = sidebarState.getEntryById(item.id)\n const documentSlug = getParentEntry('document', operationWithParent)?.name\n\n eventBus.emit('ui:navigate', {\n page: 'operation',\n path: 'overview',\n operationPath: item.path,\n method: item.method,\n documentSlug: documentSlug,\n })\n}\n</script>\n\n<template>\n <div class=\"flex\">\n <Sidebar\n v-model:sidebarWidth=\"sidebarWidth\"\n :activeWorkspace=\"activeWorkspace\"\n :class=\"[\n 'max-md:inset-y-0 max-md:z-2 max-md:w-full!',\n isSidebarOpen ? 'max-md:fixed! max-md:flex!' : 'max-md:hidden!',\n ]\"\n :documents=\"Object.values(store.workspace.documents)\"\n :isDroppable=\"isDroppable\"\n :layout=\"layout\"\n :sidebarState=\"sidebarState\"\n :workspaces=\"workspaces\"\n @create:workspace=\"emit('create:workspace')\"\n @navigate:to:settings=\"\n eventBus.emit('ui:navigate', { page: 'workspace', path: 'settings' })\n \"\n @reorder=\"\n (draggingItem, hoveredItem) => handleDragEnd(draggingItem, hoveredItem)\n \"\n @select:workspace=\"(id) => emit('select:workspace', id)\"\n @selectItem=\"(id) => emit('selectItem', id)\">\n <template #sidebarMenuActions>\n <slot name=\"sidebarMenuActions\" />\n </template>\n <!-- Workspace Identifier -->\n <template #workspaceButton>\n <ScalarSidebarItem\n is=\"button\"\n :active=\"isWorkspaceOpen\"\n @click=\"emit('click:workspace')\">\n {{ workspaceLabel }}\n </ScalarSidebarItem>\n </template>\n\n <!-- Decorator dropdown menu -->\n <template #decorator=\"{ item }\">\n <div class=\"flex items-center gap-0.5\">\n <ScalarIconButton\n v-if=\"item.type === 'operation'\"\n :icon=\"ScalarIconGearSix\"\n label=\"Operation settings\"\n size=\"sm\"\n weight=\"bold\"\n @click.stop=\"navigateToOperationsPage(item)\"\n @keydown.enter.stop=\"navigateToOperationsPage(item)\"\n @keydown.space.stop=\"navigateToOperationsPage(item)\" />\n <ScalarIconButton\n aria-expanded=\"false\"\n aria-haspopup=\"menu\"\n :icon=\"ScalarIconDotsThree\"\n label=\"More options\"\n size=\"sm\"\n weight=\"bold\"\n @click.stop=\"(e: MouseEvent) => openMenu(e, item)\"\n @keydown.down.stop=\"(e: KeyboardEvent) => openMenu(e, item)\"\n @keydown.enter.stop=\"(e: KeyboardEvent) => openMenu(e, item)\"\n @keydown.space.stop=\"(e: KeyboardEvent) => openMenu(e, item)\"\n @keydown.up.stop=\"(e: KeyboardEvent) => openMenu(e, item)\" />\n </div>\n </template>\n\n <!-- Dirty document icon slot -->\n <template #icon=\"{ item }\">\n <template\n v-if=\"\n item.type === 'document' &&\n store.workspace.documents[item.name]?.['x-scalar-is-dirty'] === true\n \">\n <div class=\"relative flex items-center\">\n <LibraryIcon\n class=\"block\"\n :src=\"\n ('icon' in item && item.icon) || 'interface-content-folder'\n \" />\n <div\n class=\"bg-orange absolute -top-1.25 -right-1.25 flex h-2.5 w-2.5 items-center justify-center rounded-full text-[9px] font-bold text-white\">\n !\n </div>\n </div>\n </template>\n </template>\n\n <!-- Empty folder slot -->\n <template #empty=\"{ item }\">\n <ScalarSidebarItem\n is=\"button\"\n @click=\"handleAddEmptyFolder(item)\">\n <template #icon>\n <ScalarIconPlus />\n </template>\n <template #default>Add operation</template>\n </ScalarSidebarItem>\n </template>\n\n <!-- Getting started section -->\n <template\n v-if=\"layout !== 'modal'\"\n #footer>\n <div\n :class=\"{\n 'empty-sidebar-item border-t': showGettingStarted,\n }\">\n <div\n v-if=\"showGettingStarted\"\n class=\"empty-sidebar-item-content overflow-hidden px-2.5 py-2.5\">\n <div class=\"rabbit-ascii relative m-auto mt-2 h-[68px] w-[60px]\">\n <ScalarAsciiArt\n :art=\"Rabbit\"\n class=\"rabbitsit font-bold\" />\n <ScalarAsciiArt\n :art=\"RabbitJump\"\n class=\"rabbitjump absolute top-0 left-0 font-bold\" />\n </div>\n <div class=\"mt-2 mb-2 text-center text-sm text-balance\">\n <b class=\"font-medium\">Let's Get Started</b>\n <p class=\"mt-2 leading-5\">\n Create request, folder, collection or import from\n OpenAPI/Postman\n </p>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-1.5 p-2\">\n <ScalarButton\n v-if=\"showGettingStarted\"\n class=\"w-full\"\n size=\"sm\"\n @click=\"\n eventBus.emit('ui:open:command-palette', {\n action: 'import-from-openapi-swagger-postman-curl',\n payload: undefined,\n })\n \">\n Import Collection\n </ScalarButton>\n\n <ScalarButton\n class=\"w-full\"\n hotkey=\"K\"\n size=\"sm\"\n variant=\"outlined\"\n @click=\"eventBus.emit('ui:open:command-palette')\">\n Add Item \n\n <span\n class=\"text-sidebar-c-2 rounded border px-1.25 py-1 text-xs leading-none font-medium uppercase\">\n <template v-if=\"isMacOS()\">\n <span class=\"sr-only\">Command</span>\n <span aria-hidden=\"true\">⌘</span>\n </template>\n <template v-else>\n <span class=\"sr-only\">CTRL</span>\n <span aria-hidden=\"true\">⌃</span>\n </template>\n K\n </span>\n </ScalarButton>\n <DownloadAppButton v-if=\"layout === 'web'\" />\n </div>\n </div>\n </template>\n </Sidebar>\n <SidebarItemMenu\n v-if=\"menuTarget?.showMenu\"\n :eventBus=\"eventBus\"\n :item=\"menuTarget.item\"\n :sidebarState=\"sidebarState\"\n :target=\"menuTarget.el\"\n @closeMenu=\"closeMenu\"\n @showDeleteModal=\"deleteModalState.show()\" />\n\n <!-- Delete Modal -->\n <ScalarModal\n v-if=\"menuTarget\"\n size=\"xxs\"\n :state=\"deleteModalState\"\n :title=\"`Delete ${menuTarget.item.title}`\">\n <DeleteSidebarListElement\n :variableName=\"menuTarget.item.title\"\n :warningMessage=\"deleteMessage\"\n @close=\"deleteModalState.hide()\"\n @delete=\"handleDelete\" />\n </ScalarModal>\n </div>\n</template>\n\n<style scoped>\n.empty-sidebar-item-content {\n display: none;\n}\n.empty-sidebar-item .empty-sidebar-item-content {\n display: block;\n}\n.rabbitjump {\n opacity: 0;\n}\n.empty-sidebar-item:hover .rabbitjump {\n opacity: 1;\n animation: rabbitAnimation 0.5s steps(1) infinite;\n}\n.empty-sidebar-item:hover .rabbitsit {\n opacity: 0;\n animation: rabbitAnimation2 0.5s steps(1) infinite;\n}\n.empty-sidebar-item:hover .rabbit-ascii {\n animation: rabbitRun 8s infinite linear;\n}\n@keyframes rabbitRun {\n 0% {\n transform: translate3d(0, 0, 0);\n }\n 25% {\n transform: translate3d(250px, 0, 0);\n }\n 25.01% {\n transform: translate3d(-250px, 0, 0);\n }\n 75% {\n transform: translate3d(250px, 0, 0);\n }\n 75.01% {\n transform: translate3d(-250px, 0, 0);\n }\n 100% {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes rabbitAnimation {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n }\n}\n@keyframes rabbitAnimation2 {\n 0%,\n 100% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n transform: translate3d(0, -8px, 0);\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n ScalarContextMenu,\n ScalarDropdownButton,\n ScalarDropdownDivider,\n ScalarDropdownMenu,\n ScalarFloating,\n ScalarHotkey,\n ScalarTooltip,\n} from '@scalar/components'\nimport { isMacOS } from '@scalar/helpers/general/is-mac-os'\nimport {\n ScalarIconArrowUpRight,\n ScalarIconFolderSimple,\n ScalarIconLinkSimple,\n ScalarIconPlusSquare,\n ScalarIconTabs,\n ScalarIconX,\n ScalarIconXSquare,\n} from '@scalar/icons'\nimport type { ScalarIconComponent } from '@scalar/icons/types'\nimport type { Tab } from '@scalar/workspace-store/schemas/extensions/workspace'\nimport { computed } from 'vue'\n\nconst {\n hotkey,\n active,\n tab,\n isSingleTab = false,\n} = defineProps<{\n /** Optional keyboard shortcut number for the tab */\n hotkey?: string\n /** Whether this tab is currently active */\n active: boolean\n /** Whether this is the only tab (changes styling to header-like appearance) */\n isSingleTab?: boolean\n /** The tab data */\n tab: Tab\n}>()\n\nconst emit = defineEmits<{\n /** Fired when the tab is clicked to activate it */\n (e: 'click'): void\n /** Fired when the close button is clicked */\n (e: 'close'): void\n /** Fired when \"New Tab\" is selected from context menu */\n (e: 'newTab'): void\n /** Fired when \"Copy URL\" is selected from context menu */\n (e: 'copyUrl'): void\n /** Fired when \"Close Other Tabs\" is selected from context menu */\n (e: 'closeOtherTabs'): void\n}>()\n\nconst ICONS: Record<NonNullable<Tab['icon']>, ScalarIconComponent> = {\n request: ScalarIconArrowUpRight,\n document: ScalarIconFolderSimple,\n}\n\n/** Display the appropriate modifier key based on the operating system */\nconst modifierKey = computed(() => (isMacOS() ? '⌘' : '^'))\n\n/** The tooltip content showing the keyboard shortcut */\nconst tooltipContent = computed(() =>\n hotkey ? `${modifierKey.value} ${hotkey}` : '',\n)\n\n/**\n * Handle the close button click.\n * We stop propagation to prevent triggering the tab activation click.\n */\nconst handleClose = (event: MouseEvent): void => {\n event.stopPropagation()\n emit('close')\n}\n</script>\n\n<template>\n <!-- Context menu wrapper provides right-click menu functionality -->\n <ScalarContextMenu\n triggerClass=\"overflow-hidden w-full flex-1 select-none\n\">\n <!-- Tab button trigger with tooltip showing keyboard shortcut -->\n <template #trigger>\n <component\n :is=\"isSingleTab ? 'div' : ScalarTooltip\"\n :content=\"tooltipContent\"\n placement=\"bottom\">\n <!-- Main tab container - clickable area to activate the tab -->\n <div\n class=\"app-no-drag-region\"\n :class=\"[\n isSingleTab ? 'nav-single-tab' : 'nav-item',\n { 'nav-item__active': active && !isSingleTab },\n ]\"\n @click=\"!isSingleTab && emit('click')\">\n <!-- Icon and label container with gradient mask for text overflow -->\n <div\n :class=\"[\n 'flex items-center justify-center gap-1.5',\n isSingleTab\n ? 'custom-scroll h-full w-full whitespace-nowrap'\n : 'nav-item-icon-copy flex-1',\n ]\">\n <component\n :is=\"ICONS[tab.icon]\"\n v-if=\"tab.icon && ICONS[tab.icon]\" />\n <span\n :class=\"[\n isSingleTab ? '' : 'custom-scroll nav-item-copy',\n 'text-sm',\n ]\">\n {{ tab.title }}\n </span>\n </div>\n\n <!-- Close button - appears on hover, stops propagation to prevent tab activation -->\n <!-- Hidden for single tabs -->\n <button\n v-if=\"!isSingleTab\"\n class=\"nav-item-close\"\n type=\"button\"\n @click=\"handleClose\">\n <component :is=\"ScalarIconX\" />\n </button>\n </div>\n </component>\n </template>\n\n <!-- Context menu content shown on right-click -->\n <template #content>\n <ScalarFloating placement=\"right-start\">\n <template #floating>\n <ScalarDropdownMenu class=\"scalar-app scalar-client\">\n <!-- New Tab action (Cmd/Ctrl + T) -->\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"emit('newTab')\">\n <component :is=\"ScalarIconPlusSquare\" />\n New Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"T\" />\n </ScalarDropdownButton>\n\n <!-- Copy URL action -->\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"emit('copyUrl')\">\n <component :is=\"ScalarIconLinkSimple\" />\n Copy URL\n </ScalarDropdownButton>\n\n <template v-if=\"!isSingleTab\">\n <ScalarDropdownDivider />\n\n <!-- Close Tab action (Cmd/Ctrl + W) -->\n <!-- Hidden for single tabs -->\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"emit('close')\">\n <component :is=\"ScalarIconXSquare\" />\n Close Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"W\" />\n </ScalarDropdownButton>\n\n <!-- Close Other Tabs action -->\n <!-- Hidden for single tabs -->\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"emit('closeOtherTabs')\">\n <component :is=\"ScalarIconTabs\" />\n Close Other Tabs\n </ScalarDropdownButton>\n </template>\n </ScalarDropdownMenu>\n </template>\n </ScalarFloating>\n </template>\n </ScalarContextMenu>\n</template>\n\n<style scoped>\n/** Single tab styling - appears as a header without tab-like appearance */\n.nav-single-tab {\n display: flex;\n height: 100%;\n width: 100%;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n color: var(--scalar-color-1);\n}\n\n/** Base tab styling with subtle background and border */\n.nav-item {\n padding: 4.5px 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 min-width: 0;\n overflow: hidden;\n position: relative;\n}\n\n.dark-mode .nav-item {\n background: color-mix(in srgb, var(--scalar-background-2), transparent);\n}\n\n/**\n * Container for the icon and label.\n * Uses a mask gradient to fade out text on the right side,\n * making room for the close button that appears on hover.\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\n/** On hover, shift the gradient to make more room for the close button */\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\n/** Label text with constrained width to prevent overflow */\n.nav-item-copy {\n max-width: calc(100% - 20px);\n}\n\n.nav-item:hover {\n color: var(--scalar-color-1);\n}\n\n/** Active tab state with brighter background and border */\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\n.dark-mode .nav-item__active {\n background-color: var(--scalar-background-2);\n}\n\n/**\n * Close button positioned absolutely on the right.\n * Hidden by default, revealed on tab hover.\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\n.nav-item:hover .nav-item-close {\n opacity: 1;\n}\n\n.nav-item-close:hover {\n background-color: var(--scalar-background-4);\n}\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 ScalarTooltip,\n} from '@scalar/components'\nimport { isMacOS } from '@scalar/helpers/general/is-mac-os'\nimport {\n ScalarIconArrowUpRight,\n ScalarIconFolderSimple,\n ScalarIconLinkSimple,\n ScalarIconPlusSquare,\n ScalarIconTabs,\n ScalarIconX,\n ScalarIconXSquare,\n} from '@scalar/icons'\nimport type { ScalarIconComponent } from '@scalar/icons/types'\nimport type { Tab } from '@scalar/workspace-store/schemas/extensions/workspace'\nimport { computed } from 'vue'\n\nconst {\n hotkey,\n active,\n tab,\n isSingleTab = false,\n} = defineProps<{\n /** Optional keyboard shortcut number for the tab */\n hotkey?: string\n /** Whether this tab is currently active */\n active: boolean\n /** Whether this is the only tab (changes styling to header-like appearance) */\n isSingleTab?: boolean\n /** The tab data */\n tab: Tab\n}>()\n\nconst emit = defineEmits<{\n /** Fired when the tab is clicked to activate it */\n (e: 'click'): void\n /** Fired when the close button is clicked */\n (e: 'close'): void\n /** Fired when \"New Tab\" is selected from context menu */\n (e: 'newTab'): void\n /** Fired when \"Copy URL\" is selected from context menu */\n (e: 'copyUrl'): void\n /** Fired when \"Close Other Tabs\" is selected from context menu */\n (e: 'closeOtherTabs'): void\n}>()\n\nconst ICONS: Record<NonNullable<Tab['icon']>, ScalarIconComponent> = {\n request: ScalarIconArrowUpRight,\n document: ScalarIconFolderSimple,\n}\n\n/** Display the appropriate modifier key based on the operating system */\nconst modifierKey = computed(() => (isMacOS() ? '⌘' : '^'))\n\n/** The tooltip content showing the keyboard shortcut */\nconst tooltipContent = computed(() =>\n hotkey ? `${modifierKey.value} ${hotkey}` : '',\n)\n\n/**\n * Handle the close button click.\n * We stop propagation to prevent triggering the tab activation click.\n */\nconst handleClose = (event: MouseEvent): void => {\n event.stopPropagation()\n emit('close')\n}\n</script>\n\n<template>\n <!-- Context menu wrapper provides right-click menu functionality -->\n <ScalarContextMenu\n triggerClass=\"overflow-hidden w-full flex-1 select-none\n\">\n <!-- Tab button trigger with tooltip showing keyboard shortcut -->\n <template #trigger>\n <component\n :is=\"isSingleTab ? 'div' : ScalarTooltip\"\n :content=\"tooltipContent\"\n placement=\"bottom\">\n <!-- Main tab container - clickable area to activate the tab -->\n <div\n class=\"app-no-drag-region\"\n :class=\"[\n isSingleTab ? 'nav-single-tab' : 'nav-item',\n { 'nav-item__active': active && !isSingleTab },\n ]\"\n @click=\"!isSingleTab && emit('click')\">\n <!-- Icon and label container with gradient mask for text overflow -->\n <div\n :class=\"[\n 'flex items-center justify-center gap-1.5',\n isSingleTab\n ? 'custom-scroll h-full w-full whitespace-nowrap'\n : 'nav-item-icon-copy flex-1',\n ]\">\n <component\n :is=\"ICONS[tab.icon]\"\n v-if=\"tab.icon && ICONS[tab.icon]\" />\n <span\n :class=\"[\n isSingleTab ? '' : 'custom-scroll nav-item-copy',\n 'text-sm',\n ]\">\n {{ tab.title }}\n </span>\n </div>\n\n <!-- Close button - appears on hover, stops propagation to prevent tab activation -->\n <!-- Hidden for single tabs -->\n <button\n v-if=\"!isSingleTab\"\n class=\"nav-item-close\"\n type=\"button\"\n @click=\"handleClose\">\n <component :is=\"ScalarIconX\" />\n </button>\n </div>\n </component>\n </template>\n\n <!-- Context menu content shown on right-click -->\n <template #content>\n <ScalarFloating placement=\"right-start\">\n <template #floating>\n <ScalarDropdownMenu class=\"scalar-app scalar-client\">\n <!-- New Tab action (Cmd/Ctrl + T) -->\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"emit('newTab')\">\n <component :is=\"ScalarIconPlusSquare\" />\n New Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"T\" />\n </ScalarDropdownButton>\n\n <!-- Copy URL action -->\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"emit('copyUrl')\">\n <component :is=\"ScalarIconLinkSimple\" />\n Copy URL\n </ScalarDropdownButton>\n\n <template v-if=\"!isSingleTab\">\n <ScalarDropdownDivider />\n\n <!-- Close Tab action (Cmd/Ctrl + W) -->\n <!-- Hidden for single tabs -->\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"emit('close')\">\n <component :is=\"ScalarIconXSquare\" />\n Close Tab\n <ScalarHotkey\n class=\"bg-b-2 ml-auto\"\n hotkey=\"W\" />\n </ScalarDropdownButton>\n\n <!-- Close Other Tabs action -->\n <!-- Hidden for single tabs -->\n <ScalarDropdownButton\n class=\"flex items-center gap-1.5\"\n @click=\"emit('closeOtherTabs')\">\n <component :is=\"ScalarIconTabs\" />\n Close Other Tabs\n </ScalarDropdownButton>\n </template>\n </ScalarDropdownMenu>\n </template>\n </ScalarFloating>\n </template>\n </ScalarContextMenu>\n</template>\n\n<style scoped>\n/** Single tab styling - appears as a header without tab-like appearance */\n.nav-single-tab {\n display: flex;\n height: 100%;\n width: 100%;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n color: var(--scalar-color-1);\n}\n\n/** Base tab styling with subtle background and border */\n.nav-item {\n padding: 4.5px 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 min-width: 0;\n overflow: hidden;\n position: relative;\n}\n\n.dark-mode .nav-item {\n background: color-mix(in srgb, var(--scalar-background-2), transparent);\n}\n\n/**\n * Container for the icon and label.\n * Uses a mask gradient to fade out text on the right side,\n * making room for the close button that appears on hover.\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\n/** On hover, shift the gradient to make more room for the close button */\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\n/** Label text with constrained width to prevent overflow */\n.nav-item-copy {\n max-width: calc(100% - 20px);\n}\n\n.nav-item:hover {\n color: var(--scalar-color-1);\n}\n\n/** Active tab state with brighter background and border */\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\n.dark-mode .nav-item__active {\n background-color: var(--scalar-background-2);\n}\n\n/**\n * Close button positioned absolutely on the right.\n * Hidden by default, revealed on tab hover.\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\n.nav-item:hover .nav-item-close {\n opacity: 1;\n}\n\n.nav-item-close:hover {\n background-color: var(--scalar-background-4);\n}\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 { ScalarIcon } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { Tab } from '@scalar/workspace-store/schemas/extensions/workspace/x-scalar-tabs'\nimport { computed } from 'vue'\n\nimport DesktopTab from '@/v2/features/app/components/DesktopTab.vue'\n\nconst { tabs, eventBus } = defineProps<{\n /** Tabs state */\n tabs: Tab[]\n /** Current active tab index */\n activeTabIndex: number\n /** Workspace event bus for emitting tab-related events */\n eventBus: WorkspaceEventBus\n}>()\n\n/** Whether there is only a single tab open */\nconst isSingleTab = computed((): boolean => tabs.length === 1)\n\n/** Adds a new tab */\nconst handleAddTab = (): void => {\n eventBus.emit('tabs:add:tab', undefined)\n}\n\n/** Switches to the tab at the specified index */\nconst switchTab = (index: number): void => {\n eventBus.emit('tabs:focus:tab', { index })\n}\n\n/** Closes the tab at the specified index */\nconst handleCloseTab = (index: number): void => {\n eventBus.emit('tabs:close:tab', { index })\n}\n\n/** Closes all tabs except the one at the specified index */\nconst handleCloseOtherTabs = (index: number): void => {\n eventBus.emit('tabs:close:other-tabs', { index })\n}\n\nconst handleCopyTabUrl = (index: number): void => {\n eventBus.emit('tabs:copy:url', { index })\n}\n</script>\n\n<template>\n <nav class=\"t-app__top-nav\">\n <!-- drag region (macos) -->\n <div class=\"mac:app-drag-region\">\n <div class=\"z-1 flex h-10 items-center gap-2 px-2\">\n <DesktopTab\n v-for=\"(tab, index) in tabs\"\n :key=\"index\"\n :active=\"index === activeTabIndex\"\n :hotkey=\"!isSingleTab && index < 9 ? String(index + 1) : undefined\"\n :isSingleTab=\"isSingleTab\"\n :tab=\"tab\"\n @click=\"switchTab(index)\"\n @close=\"handleCloseTab(index)\"\n @closeOtherTabs=\"handleCloseOtherTabs(index)\"\n @copyUrl=\"() => handleCopyTabUrl(index)\"\n @newTab=\"handleAddTab\" />\n\n <button\n class=\"text-c-3 hover:bg-b-3 app-no-drag-region rounded p-1.5\"\n type=\"button\"\n @click=\"handleAddTab\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\"\n thickness=\"2.5\" />\n </button>\n </div>\n </div>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { Tab } from '@scalar/workspace-store/schemas/extensions/workspace/x-scalar-tabs'\nimport { computed } from 'vue'\n\nimport DesktopTab from '@/v2/features/app/components/DesktopTab.vue'\n\nconst { tabs, eventBus } = defineProps<{\n /** Tabs state */\n tabs: Tab[]\n /** Current active tab index */\n activeTabIndex: number\n /** Workspace event bus for emitting tab-related events */\n eventBus: WorkspaceEventBus\n}>()\n\n/** Whether there is only a single tab open */\nconst isSingleTab = computed((): boolean => tabs.length === 1)\n\n/** Adds a new tab */\nconst handleAddTab = (): void => {\n eventBus.emit('tabs:add:tab', undefined)\n}\n\n/** Switches to the tab at the specified index */\nconst switchTab = (index: number): void => {\n eventBus.emit('tabs:focus:tab', { index })\n}\n\n/** Closes the tab at the specified index */\nconst handleCloseTab = (index: number): void => {\n eventBus.emit('tabs:close:tab', { index })\n}\n\n/** Closes all tabs except the one at the specified index */\nconst handleCloseOtherTabs = (index: number): void => {\n eventBus.emit('tabs:close:other-tabs', { index })\n}\n\nconst handleCopyTabUrl = (index: number): void => {\n eventBus.emit('tabs:copy:url', { index })\n}\n</script>\n\n<template>\n <nav class=\"t-app__top-nav\">\n <!-- drag region (macos) -->\n <div class=\"mac:app-drag-region\">\n <div class=\"z-1 flex h-10 items-center gap-2 px-2\">\n <DesktopTab\n v-for=\"(tab, index) in tabs\"\n :key=\"index\"\n :active=\"index === activeTabIndex\"\n :hotkey=\"!isSingleTab && index < 9 ? String(index + 1) : undefined\"\n :isSingleTab=\"isSingleTab\"\n :tab=\"tab\"\n @click=\"switchTab(index)\"\n @close=\"handleCloseTab(index)\"\n @closeOtherTabs=\"handleCloseOtherTabs(index)\"\n @copyUrl=\"() => handleCopyTabUrl(index)\"\n @newTab=\"handleAddTab\" />\n\n <button\n class=\"text-c-3 hover:bg-b-3 app-no-drag-region rounded p-1.5\"\n type=\"button\"\n @click=\"handleAddTab\">\n <ScalarIcon\n icon=\"Add\"\n size=\"sm\"\n thickness=\"2.5\" />\n </button>\n </div>\n </div>\n </nav>\n</template>\n","<script lang=\"ts\">\n/**\n * Main entry point for the API client for electron and web.\n *\n * This component handles all events and store business logic for the application.\n */\nexport default {}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n ScalarTeleportRoot,\n useModal,\n type ModalState,\n} from '@scalar/components'\nimport type { ClientPlugin } from '@scalar/oas-utils/helpers'\nimport { ScalarToasts } from '@scalar/use-toasts'\nimport { extensions } from '@scalar/workspace-store/schemas/extensions'\nimport { computed, toValue } from 'vue'\nimport { RouterView } from 'vue-router'\n\nimport { mergeSecurity } from '@/v2/blocks/scalar-auth-selector-block'\nimport { SidebarToggle } from '@/v2/components/sidebar'\nimport CreateWorkspaceModal from '@/v2/features/app/components/CreateWorkspaceModal.vue'\nimport SplashScreen from '@/v2/features/app/components/SplashScreen.vue'\nimport type { RouteProps } from '@/v2/features/app/helpers/routes'\nimport { useDocumentWatcher } from '@/v2/features/app/hooks/use-document-watcher'\nimport type { CommandPaletteState } from '@/v2/features/command-palette/hooks/use-command-palette-state'\nimport TheCommandPalette from '@/v2/features/command-palette/TheCommandPalette.vue'\nimport { useMonacoEditorConfiguration } from '@/v2/features/editor'\nimport { useColorMode } from '@/v2/hooks/use-color-mode'\nimport { useGlobalHotKeys } from '@/v2/hooks/use-global-hot-keys'\nimport type { ImportDocumentFromRegistry } from '@/v2/types/configuration'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nimport { type AppState } from './app-state'\nimport AppSidebar from './components/AppSidebar.vue'\nimport DesktopTabs from './components/DesktopTabs.vue'\n\nconst {\n layout,\n plugins = [],\n getAppState,\n getCommandPaletteState,\n fetchRegistryDocument,\n} = defineProps<{\n layout: Exclude<ClientLayout, 'modal'>\n plugins?: ClientPlugin[]\n getAppState: () => AppState\n getCommandPaletteState: () => CommandPaletteState\n /** Fetches the full document from registry by meta. Passed through to route props for sync. */\n fetchRegistryDocument?: ImportDocumentFromRegistry\n}>()\n\ndefineSlots<{\n /**\n * Slot for customizing the actions section of the sidebar menu.\n * This slot is used to render custom actions or components within the actions section.\n */\n 'sidebar-menu-actions': () => unknown\n /**\n * Slot for customizing the create workspace modal.\n * This slot is used to render custom actions or components within the create workspace modal.\n */\n 'create-workspace'?: (payload: { state: ModalState }) => unknown\n}>()\n\ndefineExpose({\n openCreateWorkspace: () => createWorkspaceModalState.show(),\n})\n\nconst app = getAppState()\nconst paletteState = getCommandPaletteState()\n\n/** Expose workspace store to window for debugging purposes. */\nif (typeof window !== 'undefined') {\n window.dataDumpWorkspace = () => app.store.value\n window.dumpAppState = () => app\n}\n\n/** Register global hotkeys for the app, passing the workspace event bus and layout state */\nuseGlobalHotKeys(app.eventBus, layout)\n\nconst DEFAULT_DOCUMENT_WATCH_TIMEOUT = 5000\n\n/** Watch the active document for changes and rebase it with its remote source */\nuseDocumentWatcher({\n documentName: () =>\n app.store.value?.workspace[extensions.workspace.activeDocument],\n store: app.store,\n initialTimeout: DEFAULT_DOCUMENT_WATCH_TIMEOUT,\n})\n\n/** Color mode */\nuseColorMode({ workspaceStore: app.store })\n\nconst currentTheme = computed(() => app.theme.styles.value.themeStyles)\nconst isDarkMode = computed(() => app.isDarkMode.value)\n\n/** Setup monaco editor configuration */\nuseMonacoEditorConfiguration({\n theme: currentTheme,\n darkMode: isDarkMode,\n})\n\nconst navigateToWorkspaceOverview = (namespace?: string, slug?: string) => {\n app.eventBus.emit('ui:navigate', {\n page: 'workspace',\n path: 'environment',\n namespace,\n workspaceSlug: slug,\n })\n}\n\n/** Sets the active workspace by ID: finds the workspace in the list and updates app state & navigation. */\nconst setActiveWorkspace = (id?: string) => {\n if (!id) {\n return\n }\n const workspace = app.workspace.workspaceList.value?.find(\n (workspace) => workspace.id === id,\n )\n if (!workspace) {\n return\n }\n\n navigateToWorkspaceOverview(workspace.namespace, workspace.slug)\n}\n\nconst createWorkspaceModalState = useModal()\n\n/** Props to pass to the RouterView component. */\nconst routerViewProps = computed<RouteProps>(() => {\n /** Ensure we have the auth store */\n const securitySchemes = app.store.value?.auth\n ? mergeSecurity(\n app.document.value?.components?.securitySchemes ?? {},\n {},\n app.store.value.auth,\n app.activeEntities.documentSlug.value ?? '',\n )\n : {}\n\n return {\n documentSlug: app.activeEntities.documentSlug.value ?? '',\n document: app.store.value?.workspace.activeDocument ?? null,\n environment: app.environment.value,\n eventBus: app.eventBus,\n exampleName: app.activeEntities.exampleName.value,\n fetchRegistryDocument,\n layout,\n method: app.activeEntities.method.value,\n path: app.activeEntities.path.value,\n workspaceStore: app.store.value!,\n activeWorkspace: app.workspace.activeWorkspace.value!,\n plugins,\n securitySchemes,\n isDarkMode: app.isDarkMode.value,\n currentTheme: app.theme.styles.value.themeStyles,\n customThemes: toValue(app.theme.customThemes),\n }\n})\n</script>\n\n<template>\n <ScalarTeleportRoot>\n <!-- Theme style tag -->\n <div v-html=\"app.theme.themeStyleTag.value\" />\n\n <!-- Toasts -->\n <ScalarToasts />\n\n <!-- Main content -->\n <main\n v-if=\"\n app.store.value !== null &&\n app.workspace.activeWorkspace.value !== null &&\n !app.loading.value\n \">\n <div class=\"relative flex h-dvh w-dvw flex-1 flex-col\">\n <SidebarToggle\n v-model=\"app.sidebar.isOpen.value\"\n class=\"absolute top-4 left-3 z-[60] md:hidden\" />\n <div class=\"flex min-h-0 flex-1 flex-row\">\n <!-- App sidebar -->\n <AppSidebar\n v-model:isSidebarOpen=\"app.sidebar.isOpen.value\"\n :activeWorkspace=\"app.workspace.activeWorkspace.value\"\n :eventBus=\"app.eventBus\"\n :isWorkspaceOpen=\"app.workspace.isOpen.value\"\n :layout\n :sidebarState=\"app.sidebar.state\"\n :sidebarWidth=\"app.sidebar.width.value\"\n :store=\"app.store.value!\"\n :workspaces=\"app.workspace.workspaceGroups.value\"\n @click:workspace=\"navigateToWorkspaceOverview\"\n @create:workspace=\"createWorkspaceModalState.show()\"\n @select:workspace=\"setActiveWorkspace\"\n @selectItem=\"app.sidebar.handleSelectItem\"\n @update:sidebarWidth=\"app.sidebar.handleSidebarWidthUpdate\">\n <template #sidebarMenuActions>\n <slot name=\"sidebar-menu-actions\" />\n </template>\n </AppSidebar>\n\n <div class=\"flex flex-1 flex-col\">\n <!-- App Tabs -->\n <DesktopTabs\n v-if=\"layout === 'desktop'\"\n :activeTabIndex=\"app.tabs.activeTabIndex.value\"\n :eventBus=\"app.eventBus\"\n :tabs=\"app.tabs.state.value\" />\n\n <!-- Router view min-h-0 is required for scrolling, do not remove it -->\n <div class=\"bg-b-1 min-h-0 flex-1\">\n <RouterView v-bind=\"routerViewProps\" />\n </div>\n </div>\n </div>\n </div>\n\n <slot\n name=\"create-workspace\"\n :state=\"createWorkspaceModalState\">\n <!-- Create workspace modal -->\n <CreateWorkspaceModal\n :state=\"createWorkspaceModalState\"\n @create:workspace=\"(payload) => app.workspace.create(payload)\" />\n </slot>\n\n <!-- Popup command palette to add resources from anywhere -->\n <TheCommandPalette\n :eventBus=\"app.eventBus\"\n :paletteState=\"paletteState\"\n :workspaceStore=\"app.store.value!\" />\n </main>\n <!-- Splash screen -->\n <main v-else>\n <SplashScreen />\n </main>\n </ScalarTeleportRoot>\n</template>\n\n<style>\n#scalar-client {\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 lang=\"ts\">\n/**\n * Main entry point for the API client for electron and web.\n *\n * This component handles all events and store business logic for the application.\n */\nexport default {}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n ScalarTeleportRoot,\n useModal,\n type ModalState,\n} from '@scalar/components'\nimport type { ClientPlugin } from '@scalar/oas-utils/helpers'\nimport { ScalarToasts } from '@scalar/use-toasts'\nimport { extensions } from '@scalar/workspace-store/schemas/extensions'\nimport { computed, toValue } from 'vue'\nimport { RouterView } from 'vue-router'\n\nimport { mergeSecurity } from '@/v2/blocks/scalar-auth-selector-block'\nimport { SidebarToggle } from '@/v2/components/sidebar'\nimport CreateWorkspaceModal from '@/v2/features/app/components/CreateWorkspaceModal.vue'\nimport SplashScreen from '@/v2/features/app/components/SplashScreen.vue'\nimport type { RouteProps } from '@/v2/features/app/helpers/routes'\nimport { useDocumentWatcher } from '@/v2/features/app/hooks/use-document-watcher'\nimport type { CommandPaletteState } from '@/v2/features/command-palette/hooks/use-command-palette-state'\nimport TheCommandPalette from '@/v2/features/command-palette/TheCommandPalette.vue'\nimport { useMonacoEditorConfiguration } from '@/v2/features/editor'\nimport { useColorMode } from '@/v2/hooks/use-color-mode'\nimport { useGlobalHotKeys } from '@/v2/hooks/use-global-hot-keys'\nimport type { ImportDocumentFromRegistry } from '@/v2/types/configuration'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nimport { type AppState } from './app-state'\nimport AppSidebar from './components/AppSidebar.vue'\nimport DesktopTabs from './components/DesktopTabs.vue'\n\nconst {\n layout,\n plugins = [],\n getAppState,\n getCommandPaletteState,\n fetchRegistryDocument,\n} = defineProps<{\n layout: Exclude<ClientLayout, 'modal'>\n plugins?: ClientPlugin[]\n getAppState: () => AppState\n getCommandPaletteState: () => CommandPaletteState\n /** Fetches the full document from registry by meta. Passed through to route props for sync. */\n fetchRegistryDocument?: ImportDocumentFromRegistry\n}>()\n\ndefineSlots<{\n /**\n * Slot for customizing the actions section of the sidebar menu.\n * This slot is used to render custom actions or components within the actions section.\n */\n 'sidebar-menu-actions': () => unknown\n /**\n * Slot for customizing the create workspace modal.\n * This slot is used to render custom actions or components within the create workspace modal.\n */\n 'create-workspace'?: (payload: { state: ModalState }) => unknown\n}>()\n\ndefineExpose({\n openCreateWorkspace: () => createWorkspaceModalState.show(),\n})\n\nconst app = getAppState()\nconst paletteState = getCommandPaletteState()\n\n/** Expose workspace store to window for debugging purposes. */\nif (typeof window !== 'undefined') {\n window.dataDumpWorkspace = () => app.store.value\n window.dumpAppState = () => app\n}\n\n/** Register global hotkeys for the app, passing the workspace event bus and layout state */\nuseGlobalHotKeys(app.eventBus, layout)\n\nconst DEFAULT_DOCUMENT_WATCH_TIMEOUT = 5000\n\n/** Watch the active document for changes and rebase it with its remote source */\nuseDocumentWatcher({\n documentName: () =>\n app.store.value?.workspace[extensions.workspace.activeDocument],\n store: app.store,\n initialTimeout: DEFAULT_DOCUMENT_WATCH_TIMEOUT,\n})\n\n/** Color mode */\nuseColorMode({ workspaceStore: app.store })\n\nconst currentTheme = computed(() => app.theme.styles.value.themeStyles)\nconst isDarkMode = computed(() => app.isDarkMode.value)\n\n/** Setup monaco editor configuration */\nuseMonacoEditorConfiguration({\n theme: currentTheme,\n darkMode: isDarkMode,\n})\n\nconst navigateToWorkspaceOverview = (namespace?: string, slug?: string) => {\n app.eventBus.emit('ui:navigate', {\n page: 'workspace',\n path: 'environment',\n namespace,\n workspaceSlug: slug,\n })\n}\n\n/** Sets the active workspace by ID: finds the workspace in the list and updates app state & navigation. */\nconst setActiveWorkspace = (id?: string) => {\n if (!id) {\n return\n }\n const workspace = app.workspace.workspaceList.value?.find(\n (workspace) => workspace.id === id,\n )\n if (!workspace) {\n return\n }\n\n navigateToWorkspaceOverview(workspace.namespace, workspace.slug)\n}\n\nconst createWorkspaceModalState = useModal()\n\n/** Props to pass to the RouterView component. */\nconst routerViewProps = computed<RouteProps>(() => {\n /** Ensure we have the auth store */\n const securitySchemes = app.store.value?.auth\n ? mergeSecurity(\n app.document.value?.components?.securitySchemes ?? {},\n {},\n app.store.value.auth,\n app.activeEntities.documentSlug.value ?? '',\n )\n : {}\n\n return {\n documentSlug: app.activeEntities.documentSlug.value ?? '',\n document: app.store.value?.workspace.activeDocument ?? null,\n environment: app.environment.value,\n eventBus: app.eventBus,\n exampleName: app.activeEntities.exampleName.value,\n fetchRegistryDocument,\n layout,\n method: app.activeEntities.method.value,\n path: app.activeEntities.path.value,\n workspaceStore: app.store.value!,\n activeWorkspace: app.workspace.activeWorkspace.value!,\n plugins,\n securitySchemes,\n isDarkMode: app.isDarkMode.value,\n currentTheme: app.theme.styles.value.themeStyles,\n customThemes: toValue(app.theme.customThemes),\n }\n})\n</script>\n\n<template>\n <ScalarTeleportRoot>\n <!-- Theme style tag -->\n <div v-html=\"app.theme.themeStyleTag.value\" />\n\n <!-- Toasts -->\n <ScalarToasts />\n\n <!-- Main content -->\n <main\n v-if=\"\n app.store.value !== null &&\n app.workspace.activeWorkspace.value !== null &&\n !app.loading.value\n \">\n <div class=\"relative flex h-dvh w-dvw flex-1 flex-col\">\n <SidebarToggle\n v-model=\"app.sidebar.isOpen.value\"\n class=\"absolute top-4 left-3 z-[60] md:hidden\" />\n <div class=\"flex min-h-0 flex-1 flex-row\">\n <!-- App sidebar -->\n <AppSidebar\n v-model:isSidebarOpen=\"app.sidebar.isOpen.value\"\n :activeWorkspace=\"app.workspace.activeWorkspace.value\"\n :eventBus=\"app.eventBus\"\n :isWorkspaceOpen=\"app.workspace.isOpen.value\"\n :layout\n :sidebarState=\"app.sidebar.state\"\n :sidebarWidth=\"app.sidebar.width.value\"\n :store=\"app.store.value!\"\n :workspaces=\"app.workspace.workspaceGroups.value\"\n @click:workspace=\"navigateToWorkspaceOverview\"\n @create:workspace=\"createWorkspaceModalState.show()\"\n @select:workspace=\"setActiveWorkspace\"\n @selectItem=\"app.sidebar.handleSelectItem\"\n @update:sidebarWidth=\"app.sidebar.handleSidebarWidthUpdate\">\n <template #sidebarMenuActions>\n <slot name=\"sidebar-menu-actions\" />\n </template>\n </AppSidebar>\n\n <div class=\"flex flex-1 flex-col\">\n <!-- App Tabs -->\n <DesktopTabs\n v-if=\"layout === 'desktop'\"\n :activeTabIndex=\"app.tabs.activeTabIndex.value\"\n :eventBus=\"app.eventBus\"\n :tabs=\"app.tabs.state.value\" />\n\n <!-- Router view min-h-0 is required for scrolling, do not remove it -->\n <div class=\"bg-b-1 min-h-0 flex-1\">\n <RouterView v-bind=\"routerViewProps\" />\n </div>\n </div>\n </div>\n </div>\n\n <slot\n name=\"create-workspace\"\n :state=\"createWorkspaceModalState\">\n <!-- Create workspace modal -->\n <CreateWorkspaceModal\n :state=\"createWorkspaceModalState\"\n @create:workspace=\"(payload) => app.workspace.create(payload)\" />\n </slot>\n\n <!-- Popup command palette to add resources from anywhere -->\n <TheCommandPalette\n :eventBus=\"app.eventBus\"\n :paletteState=\"paletteState\"\n :workspaceStore=\"app.store.value!\" />\n </main>\n <!-- Splash screen -->\n <main v-else>\n <SplashScreen />\n </main>\n </ScalarTeleportRoot>\n</template>\n\n<style>\n#scalar-client {\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"],"mappings":"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"}
|