@scalar/api-client 3.14.0 → 3.16.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 +34 -0
- package/dist/assets/computer.ascii.virtual.js.map +1 -1
- package/dist/components/HelpfulLink.vue.script.js +1 -1
- package/dist/components/HelpfulLink.vue.script.js.map +1 -1
- package/dist/components/HttpMethod/HttpMethod.vue.js +1 -1
- package/dist/components/HttpMethod/HttpMethod.vue.script.js +1 -1
- package/dist/components/HttpMethod/HttpMethod.vue.script.js.map +1 -1
- package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.js +1 -1
- package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.script.js +1 -1
- package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.script.js.map +1 -1
- package/dist/components/SectionFilter.vue.d.ts +1 -1
- package/dist/components/SectionFilter.vue.d.ts.map +1 -1
- package/dist/components/SectionFilter.vue.js +1 -1
- package/dist/components/SectionFilter.vue.script.js +2 -2
- package/dist/components/SectionFilter.vue.script.js.map +1 -1
- package/dist/components/SectionFilterButton.vue.script.js +1 -1
- package/dist/components/SectionFilterButton.vue.script.js.map +1 -1
- package/dist/components/Server/ServerVariablesForm.vue.d.ts.map +1 -1
- package/dist/components/Server/ServerVariablesForm.vue.script.js +1 -1
- package/dist/components/Server/ServerVariablesForm.vue.script.js.map +1 -1
- package/dist/components/Server/ServerVariablesSelect.vue.script.js +1 -1
- package/dist/components/Server/ServerVariablesSelect.vue.script.js.map +1 -1
- package/dist/components/Server/ServerVariablesTextbox.vue.script.js +1 -1
- package/dist/components/Server/ServerVariablesTextbox.vue.script.js.map +1 -1
- package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.d.ts.map +1 -1
- package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.script.js +1 -1
- package/dist/components/Sidebar/Actions/DeleteSidebarListElement.vue.script.js.map +1 -1
- package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.d.ts.map +1 -1
- package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.script.js +1 -1
- package/dist/components/Sidebar/Actions/SidebarListElementForm.vue.script.js.map +1 -1
- package/dist/components/ViewLayout/ViewLayout.vue.script.js +1 -1
- package/dist/components/ViewLayout/ViewLayout.vue.script.js.map +1 -1
- package/dist/components/ViewLayout/ViewLayoutContent.vue.js +1 -1
- package/dist/components/ViewLayout/ViewLayoutContent.vue.js.map +1 -1
- package/dist/components/ViewLayout/ViewLayoutSection.vue.script.js +1 -1
- package/dist/components/ViewLayout/ViewLayoutSection.vue.script.js.map +1 -1
- package/dist/hooks/use-file-dialog.js +2 -1
- package/dist/hooks/use-file-dialog.js.map +1 -1
- package/dist/plugins/posthog/index.js.map +1 -1
- package/dist/plugins/posthog/sanitize-event-payload.js +1 -1
- package/dist/plugins/posthog/sanitize-event-payload.js.map +1 -1
- package/dist/style.css +298 -275
- package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts.map +1 -1
- package/dist/v2/blocks/operation-block/OperationBlock.vue.js.map +1 -1
- package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js +38 -6
- package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js.map +1 -1
- package/dist/v2/blocks/operation-block/components/Header.vue.d.ts.map +1 -1
- package/dist/v2/blocks/operation-block/components/Header.vue.js +1 -1
- package/dist/v2/blocks/operation-block/components/Header.vue.script.js +1 -1
- package/dist/v2/blocks/operation-block/components/Header.vue.script.js.map +1 -1
- package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.js +1 -1
- package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.script.js +1 -1
- package/dist/v2/blocks/operation-block/components/OpenApiClientButton.vue.script.js.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/decode-buffer.js.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/get-cookie-header-keys.js.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/har-to-fetch-request.js.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.js.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/persist-response-cookies.js.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/persist-script-environment.d.ts +53 -0
- package/dist/v2/blocks/operation-block/helpers/persist-script-environment.d.ts.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/persist-script-environment.js +91 -0
- package/dist/v2/blocks/operation-block/helpers/persist-script-environment.js.map +1 -0
- package/dist/v2/blocks/operation-block/helpers/response-cache.js.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/send-request.js.map +1 -1
- package/dist/v2/blocks/operation-block/helpers/validate-path-parameters.js.map +1 -1
- package/dist/v2/blocks/request-block/RequestBlock.vue.d.ts.map +1 -1
- package/dist/v2/blocks/request-block/RequestBlock.vue.js +1 -1
- package/dist/v2/blocks/request-block/RequestBlock.vue.js.map +1 -1
- package/dist/v2/blocks/request-block/RequestBlock.vue.script.js +58 -29
- package/dist/v2/blocks/request-block/RequestBlock.vue.script.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestBody.vue.d.ts.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestBody.vue.js +1 -1
- package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js +1 -1
- package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.d.ts.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js +1 -1
- package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.d.ts.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.script.js +1 -1
- package/dist/v2/blocks/request-block/components/RequestBodyStructured.vue.script.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.script.js +1 -1
- package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.script.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.d.ts.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.script.js +1 -1
- package/dist/v2/blocks/request-block/components/RequestCodeSnippet.vue.script.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestParams.vue.d.ts +2 -0
- package/dist/v2/blocks/request-block/components/RequestParams.vue.d.ts.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestParams.vue.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js +5 -3
- package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts +2 -0
- package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestTable.vue.js +1 -1
- package/dist/v2/blocks/request-block/components/RequestTable.vue.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js +6 -3
- package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts +8 -0
- package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestTableRow.vue.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js +29 -16
- package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js.map +1 -1
- package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.script.js +1 -1
- package/dist/v2/blocks/request-block/components/RequestTableTooltip.vue.script.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/create-parameter-rows.js +1 -1
- package/dist/v2/blocks/request-block/helpers/create-parameter-rows.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/files.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/fold-structured-body-rows.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js +10 -5
- package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/get-parameter-content.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/get-parameter-schema.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/get-structured-body-rows.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/group-by.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/group-global-cookies.d.ts +54 -0
- package/dist/v2/blocks/request-block/helpers/group-global-cookies.d.ts.map +1 -0
- package/dist/v2/blocks/request-block/helpers/group-global-cookies.js +56 -0
- package/dist/v2/blocks/request-block/helpers/group-global-cookies.js.map +1 -0
- package/dist/v2/blocks/request-block/helpers/structured-body-codec.js +1 -1
- package/dist/v2/blocks/request-block/helpers/structured-body-codec.js.map +1 -1
- package/dist/v2/blocks/request-block/helpers/validate-parameter.js.map +1 -1
- package/dist/v2/blocks/response-block/ResponseBlock.vue.d.ts.map +1 -1
- package/dist/v2/blocks/response-block/ResponseBlock.vue.js +1 -1
- package/dist/v2/blocks/response-block/ResponseBlock.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/ResponseBlock.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/Headers.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/Headers.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBody.vue.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBody.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBody.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyDownload.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyInfo.vue.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyInfo.vue.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.d.ts.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.script.js +10 -3
- package/dist/v2/blocks/response-block/components/ResponseBodyPreview.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.d.ts.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyStreaming.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyToggle.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseBodyVirtual.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseCookies.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseCookies.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseEmpty.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.d.ts.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseLoadingOverlay.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.script.js +1 -1
- package/dist/v2/blocks/response-block/components/ResponseMetaInformation.vue.script.js.map +1 -1
- package/dist/v2/blocks/response-block/helpers/extract-filename.js.map +1 -1
- package/dist/v2/blocks/response-block/helpers/get-content-length.js.map +1 -1
- package/dist/v2/blocks/response-block/helpers/media-types.d.ts +1 -1
- package/dist/v2/blocks/response-block/helpers/media-types.d.ts.map +1 -1
- package/dist/v2/blocks/response-block/helpers/media-types.js +12 -0
- package/dist/v2/blocks/response-block/helpers/media-types.js.map +1 -1
- package/dist/v2/blocks/response-block/helpers/parse-set-cookie.js.map +1 -1
- package/dist/v2/blocks/response-block/helpers/prettify-jsonc-string.js.map +1 -1
- package/dist/v2/blocks/response-block/helpers/prettify-ndjson.d.ts +12 -0
- package/dist/v2/blocks/response-block/helpers/prettify-ndjson.d.ts.map +1 -0
- package/dist/v2/blocks/response-block/helpers/prettify-ndjson.js +19 -0
- package/dist/v2/blocks/response-block/helpers/prettify-ndjson.js.map +1 -0
- package/dist/v2/blocks/response-block/helpers/process-response-body.js.map +1 -1
- package/dist/v2/blocks/response-block/helpers/resolve-response-body-handler.js.map +1 -1
- package/dist/v2/blocks/response-block/helpers/resolve-response-content-type.js +7 -1
- package/dist/v2/blocks/response-block/helpers/resolve-response-content-type.js.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.script.js +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/EnvironmentSelector.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/httpStatusCodeColors.js +3 -1
- package/dist/v2/blocks/scalar-address-bar-block/components/httpStatusCodeColors.js.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/helpers/is-placeholder-path.js.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/helpers/refocus-blur-target.js.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/hooks/use-loading-animation.js.map +1 -1
- package/dist/v2/blocks/scalar-address-bar-block/hooks/use-path-masking.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.script.js +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/DeleteRequestAuthModal.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.script.js +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesAddModal.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.script.js +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.script.js +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/OpenIDConnect.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.script.js +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTable.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js +3 -3
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js +24 -17
- package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/auth-options.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-openid-connect-discovery.js +5 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-openid-connect-discovery.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-callback.js +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-callback.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-flows.d.ts +20 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-flows.d.ts.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-flows.js +27 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-flows.js.map +1 -0
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js +2 -2
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/resolve-default-oauth2-redirect-url.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/run-oauth2-authorize.js.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.d.ts.map +1 -1
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.js +15 -6
- package/dist/v2/blocks/scalar-auth-selector-block/helpers/security-scheme.js.map +1 -1
- package/dist/v2/components/code-input/CodeInput.vue.d.ts.map +1 -1
- package/dist/v2/components/code-input/CodeInput.vue.js +1 -1
- package/dist/v2/components/code-input/CodeInput.vue.script.js +6 -1
- package/dist/v2/components/code-input/CodeInput.vue.script.js.map +1 -1
- package/dist/v2/components/code-input/CodeInputLite.vue.d.ts.map +1 -1
- package/dist/v2/components/code-input/CodeInputLite.vue.js +1 -1
- package/dist/v2/components/code-input/CodeInputLite.vue.script.js +5 -1
- package/dist/v2/components/code-input/CodeInputLite.vue.script.js.map +1 -1
- package/dist/v2/components/code-input/PillTooltipHost.vue.script.js +1 -1
- package/dist/v2/components/code-input/PillTooltipHost.vue.script.js.map +1 -1
- package/dist/v2/components/code-input/code-variable-widget.js +1 -0
- package/dist/v2/components/code-input/code-variable-widget.js.map +1 -1
- package/dist/v2/components/code-input/helpers/build-pill-context.js.map +1 -1
- package/dist/v2/components/code-input/helpers/lookup-variable-value.js.map +1 -1
- package/dist/v2/components/code-input/helpers/pill-signature.js.map +1 -1
- package/dist/v2/components/code-input/helpers/serialize-value.js.map +1 -1
- package/dist/v2/components/context-menu/ContextMenu.vue.script.js +1 -1
- package/dist/v2/components/context-menu/ContextMenu.vue.script.js.map +1 -1
- package/dist/v2/components/data-table/DataTable.vue.script.js +1 -1
- package/dist/v2/components/data-table/DataTable.vue.script.js.map +1 -1
- package/dist/v2/components/data-table/DataTableCell.vue.script.js +1 -1
- package/dist/v2/components/data-table/DataTableCell.vue.script.js.map +1 -1
- package/dist/v2/components/data-table/DataTableCheckbox.vue.script.js +1 -1
- package/dist/v2/components/data-table/DataTableCheckbox.vue.script.js.map +1 -1
- package/dist/v2/components/data-table/DataTableHeader.vue.script.js +1 -1
- package/dist/v2/components/data-table/DataTableHeader.vue.script.js.map +1 -1
- package/dist/v2/components/data-table/DataTableInput.vue.d.ts.map +1 -1
- package/dist/v2/components/data-table/DataTableInput.vue.js +1 -1
- package/dist/v2/components/data-table/DataTableInput.vue.script.js +1 -1
- package/dist/v2/components/data-table/DataTableInput.vue.script.js.map +1 -1
- package/dist/v2/components/data-table/DataTableInputSelect.vue.d.ts.map +1 -1
- package/dist/v2/components/data-table/DataTableInputSelect.vue.script.js +3 -2
- package/dist/v2/components/data-table/DataTableInputSelect.vue.script.js.map +1 -1
- package/dist/v2/components/data-table/DataTableRow.vue.js +1 -1
- package/dist/v2/components/data-table/DataTableRow.vue.js.map +1 -1
- package/dist/v2/components/data-table/DataTableText.vue.script.js +1 -1
- package/dist/v2/components/data-table/DataTableText.vue.script.js.map +1 -1
- package/dist/v2/components/forms/ConfirmationForm.vue.d.ts.map +1 -1
- package/dist/v2/components/forms/ConfirmationForm.vue.script.js +1 -1
- package/dist/v2/components/forms/ConfirmationForm.vue.script.js.map +1 -1
- package/dist/v2/components/layout/CollapsibleSection.vue.d.ts.map +1 -1
- package/dist/v2/components/layout/CollapsibleSection.vue.script.js +1 -1
- package/dist/v2/components/layout/CollapsibleSection.vue.script.js.map +1 -1
- package/dist/v2/components/layout/ValueEmitter.vue.d.ts +1 -1
- package/dist/v2/components/layout/ValueEmitter.vue.d.ts.map +1 -1
- package/dist/v2/components/layout/ValueEmitter.vue.script.js +1 -1
- package/dist/v2/components/layout/ValueEmitter.vue.script.js.map +1 -1
- package/dist/v2/components/modals/DeleteModal.vue.d.ts.map +1 -1
- package/dist/v2/components/modals/DeleteModal.vue.script.js +1 -1
- package/dist/v2/components/modals/DeleteModal.vue.script.js.map +1 -1
- package/dist/v2/components/modals/ModalClientContainer.vue.js +1 -1
- package/dist/v2/components/modals/ModalClientContainer.vue.script.js +1 -1
- package/dist/v2/components/modals/ModalClientContainer.vue.script.js.map +1 -1
- package/dist/v2/components/resize/Resize.vue.js +1 -1
- package/dist/v2/components/resize/Resize.vue.script.js +1 -1
- package/dist/v2/components/resize/Resize.vue.script.js.map +1 -1
- package/dist/v2/components/resize/use-split-resize.js +4 -2
- package/dist/v2/components/resize/use-split-resize.js.map +1 -1
- package/dist/v2/components/server/ServerDropdown.vue.d.ts.map +1 -1
- package/dist/v2/components/server/ServerDropdown.vue.script.js +1 -1
- package/dist/v2/components/server/ServerDropdown.vue.script.js.map +1 -1
- package/dist/v2/components/server/ServerDropdownItem.vue.d.ts.map +1 -1
- package/dist/v2/components/server/ServerDropdownItem.vue.js +1 -1
- package/dist/v2/components/server/ServerDropdownItem.vue.script.js +1 -1
- package/dist/v2/components/server/ServerDropdownItem.vue.script.js.map +1 -1
- package/dist/v2/components/sidebar/Sidebar.vue.d.ts.map +1 -1
- package/dist/v2/components/sidebar/Sidebar.vue.script.js +3 -3
- package/dist/v2/components/sidebar/Sidebar.vue.script.js.map +1 -1
- package/dist/v2/components/sidebar/SidebarMenu.vue.d.ts.map +1 -1
- package/dist/v2/components/sidebar/SidebarMenu.vue.script.js +1 -1
- package/dist/v2/components/sidebar/SidebarMenu.vue.script.js.map +1 -1
- package/dist/v2/components/sidebar/SidebarToggle.vue.script.js +1 -1
- package/dist/v2/components/sidebar/SidebarToggle.vue.script.js.map +1 -1
- package/dist/v2/constants.js +1 -1
- package/dist/v2/features/command-palette/components/CommandActionForm.vue.script.js +1 -1
- package/dist/v2/features/command-palette/components/CommandActionForm.vue.script.js.map +1 -1
- package/dist/v2/features/command-palette/components/CommandActionInput.vue.script.js +1 -1
- package/dist/v2/features/command-palette/components/CommandActionInput.vue.script.js.map +1 -1
- package/dist/v2/features/environments/EnvironmentsList.vue.d.ts.map +1 -1
- package/dist/v2/features/environments/EnvironmentsList.vue.script.js +1 -1
- package/dist/v2/features/environments/EnvironmentsList.vue.script.js.map +1 -1
- package/dist/v2/features/environments/components/Environment.vue.d.ts.map +1 -1
- package/dist/v2/features/environments/components/Environment.vue.script.js +1 -1
- package/dist/v2/features/environments/components/Environment.vue.script.js.map +1 -1
- package/dist/v2/features/environments/components/EnvironmentColors.vue.script.js +3 -2
- package/dist/v2/features/environments/components/EnvironmentColors.vue.script.js.map +1 -1
- package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.d.ts.map +1 -1
- package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.script.js +1 -1
- package/dist/v2/features/environments/components/EnvironmentCreateModal.vue.script.js.map +1 -1
- package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.d.ts.map +1 -1
- package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.script.js +1 -1
- package/dist/v2/features/environments/components/EnvironmentDeleteModal.vue.script.js.map +1 -1
- package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.d.ts.map +1 -1
- package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js +1 -1
- package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js.map +1 -1
- package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.d.ts.map +1 -1
- package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.js +1 -1
- package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.script.js +1 -1
- package/dist/v2/features/environments/components/EnvironmentVariablesTable.vue.script.js.map +1 -1
- package/dist/v2/features/modal/Modal.vue.d.ts.map +1 -1
- package/dist/v2/features/modal/Modal.vue.script.js +1 -1
- package/dist/v2/features/modal/Modal.vue.script.js.map +1 -1
- package/dist/v2/features/modal/helpers/create-api-client-modal.js +11 -0
- package/dist/v2/features/modal/helpers/create-api-client-modal.js.map +1 -1
- package/dist/v2/features/modal/helpers/map-hidden-clients-config.js.map +1 -1
- package/dist/v2/features/modal/helpers/resolve-route-parameters.js +1 -1
- package/dist/v2/features/modal/helpers/resolve-route-parameters.js.map +1 -1
- package/dist/v2/features/modal/hooks/use-modal-sidebar.js.map +1 -1
- package/dist/v2/features/modal/modal-events.js.map +1 -1
- package/dist/v2/features/operation/Operation.vue.script.js +1 -1
- package/dist/v2/features/operation/Operation.vue.script.js.map +1 -1
- package/dist/v2/features/search/components/DocumentSearchModal.vue.d.ts.map +1 -1
- package/dist/v2/features/search/components/DocumentSearchModal.vue.js +1 -1
- package/dist/v2/features/search/components/DocumentSearchModal.vue.script.js +1 -1
- package/dist/v2/features/search/components/DocumentSearchModal.vue.script.js.map +1 -1
- package/dist/v2/features/search/components/SearchResult.vue.d.ts.map +1 -1
- package/dist/v2/features/search/components/SearchResult.vue.script.js +1 -1
- package/dist/v2/features/search/components/SearchResult.vue.script.js.map +1 -1
- package/dist/v2/features/search/helpers/create-fuse-instance.js.map +1 -1
- package/dist/v2/features/search/helpers/create-search-index.js.map +1 -1
- package/dist/v2/features/search/hooks/use-document-search.js.map +1 -1
- package/dist/v2/features/search/hooks/use-search-index.js.map +1 -1
- package/dist/v2/helpers/generate-location-id.js.map +1 -1
- package/dist/v2/helpers/handle-hotkeys.js +1 -1
- package/dist/v2/helpers/handle-hotkeys.js.map +1 -1
- package/dist/v2/helpers/test-utils.js.map +1 -1
- package/dist/v2/hooks/use-global-hot-keys.js.map +1 -1
- package/dist/v2/hooks/use-scroll-lock.js.map +1 -1
- package/dist/v2/workspace-events.js.map +1 -1
- package/dist/vue-styles.css +229 -236
- package/package.json +20 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-document-search.js","names":[],"sources":["../../../../../src/v2/features/search/hooks/use-document-search.ts"],"sourcesContent":["import type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport type { FuseResult } from 'fuse.js'\nimport { type MaybeRefOrGetter, computed, ref, toValue } from 'vue'\n\nimport { createFuseInstance } from '../helpers/create-fuse-instance'\nimport { createSearchIndex } from '../helpers/create-search-index'\nimport type { FuseData } from '../types'\n\nconst MAX_SEARCH_RESULTS = 25\n\n/**\n * Fuzzy search scoped to a single OpenAPI document.\n *\n * Mirrors the behaviour of the reference search modal (`@scalar/api-reference`)\n * but stays local to api-client so the two packages do not have a circular\n * dependency. The index is rebuilt whenever the source document changes.\n *\n * When the query is empty we surface the first `MAX_SEARCH_RESULTS` entries of\n * the index as a zero-state list, matching the reference UX.\n */\nexport function useDocumentSearch(document: MaybeRefOrGetter<OpenApiDocument | undefined>) {\n const searchIndex = computed<FuseData[]>(() => {\n const doc = toValue(document)\n return doc ? createSearchIndex([doc]) : []\n })\n\n const fuse = computed(() => {\n const instance = createFuseInstance()\n instance.setCollection(searchIndex.value)\n return instance\n })\n\n const query = ref<string>('')\n\n const results = computed<FuseResult<FuseData>[]>(() => {\n const trimmed = query.value.trim()\n if (trimmed) {\n return fuse.value.search(trimmed, { limit: MAX_SEARCH_RESULTS })\n }\n\n return searchIndex.value.slice(0, MAX_SEARCH_RESULTS).map(\n (item, index) =>\n ({\n item,\n refIndex: index,\n }) satisfies FuseResult<FuseData>,\n )\n })\n\n return {\n results,\n query,\n }\n}\n"],"mappings":";;;;AAQA,IAAM,qBAAqB;;;;;;;;;;;AAY3B,SAAgB,kBAAkB,UAAyD;CACzF,MAAM,cAAc,eAA2B;EAC7C,MAAM,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"use-document-search.js","names":[],"sources":["../../../../../src/v2/features/search/hooks/use-document-search.ts"],"sourcesContent":["import type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport type { FuseResult } from 'fuse.js'\nimport { type MaybeRefOrGetter, computed, ref, toValue } from 'vue'\n\nimport { createFuseInstance } from '../helpers/create-fuse-instance'\nimport { createSearchIndex } from '../helpers/create-search-index'\nimport type { FuseData } from '../types'\n\nconst MAX_SEARCH_RESULTS = 25\n\n/**\n * Fuzzy search scoped to a single OpenAPI document.\n *\n * Mirrors the behaviour of the reference search modal (`@scalar/api-reference`)\n * but stays local to api-client so the two packages do not have a circular\n * dependency. The index is rebuilt whenever the source document changes.\n *\n * When the query is empty we surface the first `MAX_SEARCH_RESULTS` entries of\n * the index as a zero-state list, matching the reference UX.\n */\nexport function useDocumentSearch(document: MaybeRefOrGetter<OpenApiDocument | undefined>) {\n const searchIndex = computed<FuseData[]>(() => {\n const doc = toValue(document)\n return doc ? createSearchIndex([doc]) : []\n })\n\n const fuse = computed(() => {\n const instance = createFuseInstance()\n instance.setCollection(searchIndex.value)\n return instance\n })\n\n const query = ref<string>('')\n\n const results = computed<FuseResult<FuseData>[]>(() => {\n const trimmed = query.value.trim()\n if (trimmed) {\n return fuse.value.search(trimmed, { limit: MAX_SEARCH_RESULTS })\n }\n\n return searchIndex.value.slice(0, MAX_SEARCH_RESULTS).map(\n (item, index) =>\n ({\n item,\n refIndex: index,\n }) satisfies FuseResult<FuseData>,\n )\n })\n\n return {\n results,\n query,\n }\n}\n"],"mappings":";;;;AAQA,IAAM,qBAAqB;;;;;;;;;;;AAY3B,SAAgB,kBAAkB,UAAyD;CACzF,MAAM,cAAc,eAA2B;EAC7C,MAAM,MAAM,QAAQ,QAAQ;EAC5B,OAAO,MAAM,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;CAC3C,CAAC;CAED,MAAM,OAAO,eAAe;EAC1B,MAAM,WAAW,mBAAmB;EACpC,SAAS,cAAc,YAAY,KAAK;EACxC,OAAO;CACT,CAAC;CAED,MAAM,QAAQ,IAAY,EAAE;CAiB5B,OAAO;EACL,SAhBc,eAAuC;GACrD,MAAM,UAAU,MAAM,MAAM,KAAK;GACjC,IAAI,SACF,OAAO,KAAK,MAAM,OAAO,SAAS,EAAE,OAAO,mBAAmB,CAAC;GAGjE,OAAO,YAAY,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,KACnD,MAAM,WACJ;IACC;IACA,UAAU;GACZ,EACJ;EACF,CAGE;EACA;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-search-index.js","names":[],"sources":["../../../../../src/v2/features/search/hooks/use-search-index.ts"],"sourcesContent":["import type { Item } from '@scalar/sidebar'\nimport type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { type MaybeRefOrGetter, computed, ref, toValue } from 'vue'\n\nimport { createFuseInstance } from '../helpers/create-fuse-instance'\nimport { createSearchIndex } from '../helpers/create-search-index'\n\nconst MAX_SEARCH_RESULTS = 25\n\n/**\n * Creates the search index from multiple OpenAPI documents\n */\nexport const useSearchIndex = (documents: MaybeRefOrGetter<OpenApiDocument[]>) => {\n /** When the document changes we replace the search index */\n const fuse = computed(() => {\n const instance = createFuseInstance()\n instance.setCollection(createSearchIndex(toValue(documents)))\n return instance\n })\n\n const query = ref<string>('')\n\n const results = computed<Item[] | null>(() => {\n if (query.value.length !== 0) {\n const fuseResults = fuse.value.search(query.value, {\n limit: MAX_SEARCH_RESULTS,\n })\n\n // Lets only show operations for now to match previous behavior\n return fuseResults.flatMap((result) => {\n if (result.item.entry.type !== 'operation') {\n return []\n }\n\n return result.item.entry\n })\n }\n\n return null\n })\n\n return {\n results,\n query,\n }\n}\n"],"mappings":";;;;AAOA,IAAM,qBAAqB;;;;AAK3B,IAAa,kBAAkB,cAAmD;;CAEhF,MAAM,OAAO,eAAe;EAC1B,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"use-search-index.js","names":[],"sources":["../../../../../src/v2/features/search/hooks/use-search-index.ts"],"sourcesContent":["import type { Item } from '@scalar/sidebar'\nimport type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { type MaybeRefOrGetter, computed, ref, toValue } from 'vue'\n\nimport { createFuseInstance } from '../helpers/create-fuse-instance'\nimport { createSearchIndex } from '../helpers/create-search-index'\n\nconst MAX_SEARCH_RESULTS = 25\n\n/**\n * Creates the search index from multiple OpenAPI documents\n */\nexport const useSearchIndex = (documents: MaybeRefOrGetter<OpenApiDocument[]>) => {\n /** When the document changes we replace the search index */\n const fuse = computed(() => {\n const instance = createFuseInstance()\n instance.setCollection(createSearchIndex(toValue(documents)))\n return instance\n })\n\n const query = ref<string>('')\n\n const results = computed<Item[] | null>(() => {\n if (query.value.length !== 0) {\n const fuseResults = fuse.value.search(query.value, {\n limit: MAX_SEARCH_RESULTS,\n })\n\n // Lets only show operations for now to match previous behavior\n return fuseResults.flatMap((result) => {\n if (result.item.entry.type !== 'operation') {\n return []\n }\n\n return result.item.entry\n })\n }\n\n return null\n })\n\n return {\n results,\n query,\n }\n}\n"],"mappings":";;;;AAOA,IAAM,qBAAqB;;;;AAK3B,IAAa,kBAAkB,cAAmD;;CAEhF,MAAM,OAAO,eAAe;EAC1B,MAAM,WAAW,mBAAmB;EACpC,SAAS,cAAc,kBAAkB,QAAQ,SAAS,CAAC,CAAC;EAC5D,OAAO;CACT,CAAC;CAED,MAAM,QAAQ,IAAY,EAAE;CAqB5B,OAAO;EACL,SApBc,eAA8B;GAC5C,IAAI,MAAM,MAAM,WAAW,GAMzB,OALoB,KAAK,MAAM,OAAO,MAAM,OAAO,EACjD,OAAO,mBACT,CAGO,CAAA,CAAY,SAAS,WAAW;IACrC,IAAI,OAAO,KAAK,MAAM,SAAS,aAC7B,OAAO,CAAC;IAGV,OAAO,OAAO,KAAK;GACrB,CAAC;GAGH,OAAO;EACT,CAGE;EACA;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-location-id.js","names":[],"sources":["../../../src/v2/helpers/generate-location-id.ts"],"sourcesContent":["import { isDefined } from '@scalar/helpers/array/is-defined'\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\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 * generateLocationId({ document: 'mydoc', path: '/users', method: 'get', example: 'default' })\n * // => '[\"mydoc\",\"/users\",\"get\",\"default\"]'\n */\nexport const generateLocationId = ({\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"],"mappings":";;;;;;;;;;;;;AAcA,IAAa,sBAAsB,EACjC,UACA,MACA,QACA,cAMI;
|
|
1
|
+
{"version":3,"file":"generate-location-id.js","names":[],"sources":["../../../src/v2/helpers/generate-location-id.ts"],"sourcesContent":["import { isDefined } from '@scalar/helpers/array/is-defined'\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\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 * generateLocationId({ document: 'mydoc', path: '/users', method: 'get', example: 'default' })\n * // => '[\"mydoc\",\"/users\",\"get\",\"default\"]'\n */\nexport const generateLocationId = ({\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"],"mappings":";;;;;;;;;;;;;AAcA,IAAa,sBAAsB,EACjC,UACA,MACA,QACA,cAMI;CACJ,OAAO,KAAK,UAAU;EAAC;EAAU;EAAM;EAAQ;CAAO,CAAC,CAAC,OAAO,SAAS,CAAC;AAC3E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-hotkeys.js","names":[],"sources":["../../../src/v2/helpers/handle-hotkeys.ts"],"sourcesContent":["import { isMacOS } from '@scalar/helpers/general/is-mac-os'\nimport type { ApiReferenceEvents, WorkspaceEventBus } from '@scalar/workspace-store/events'\n\nimport type { ClientLayout } from '@/v2/types/layout'\n\ntype HotKeyModifiers = ('altKey' | 'ctrlKey' | 'shiftKey' | 'metaKey' | 'default')[]\n\n/** Hotkey configuration */\ntype HotKeyConfig = Record<string | number, { event: keyof ApiReferenceEvents; modifiers: HotKeyModifiers }>\n\n/** Default hotkeys available in most contexts */\nconst DEFAULT_HOTKEYS: HotKeyConfig = {\n Enter: { event: 'operation:send:request:hotkey', modifiers: ['default'] },\n b: { event: 'ui:toggle:sidebar', modifiers: ['default'] },\n k: { event: 'ui:open:command-palette', modifiers: ['default'] },\n l: { event: 'ui:focus:address-bar', modifiers: ['default'] },\n j: { event: 'ui:focus:search', modifiers: ['default'] },\n i: { event: 'ui:open:settings', modifiers: ['default'] },\n s: { event: 'ui:save:local-document', modifiers: ['default'] },\n}\n\n/** Hotkey map by layout, we can allow the user to override this later */\nconst HOTKEYS: Record<ClientLayout, HotKeyConfig> = {\n web: DEFAULT_HOTKEYS,\n\n modal: {\n ...DEFAULT_HOTKEYS,\n Escape: { event: 'ui:close:client-modal', modifiers: [] },\n l: { event: 'ui:focus:send-button', modifiers: ['default'] },\n },\n\n desktop: {\n ...DEFAULT_HOTKEYS,\n n: { event: 'ui:open:command-palette', modifiers: ['default'] },\n t: { event: 'tabs:add:tab', modifiers: ['default'] },\n w: { event: 'tabs:close:tab', modifiers: ['default'] },\n ArrowLeft: { event: 'tabs:navigate:previous', modifiers: ['default', 'altKey'] },\n ArrowRight: { event: 'tabs:navigate:next', modifiers: ['default', 'altKey'] },\n 1: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 2: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 3: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 4: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 5: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 6: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 7: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 8: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 9: { event: 'tabs:focus:tab-last', modifiers: ['default'] },\n },\n}\n\n/** Keys that should work in input fields when the modifier is pressed */\nconst INPUT_ALLOWED_KEYS = new Set(['Escape', 'ArrowDown', 'ArrowUp', 'Enter'])\n\n/**\n * Checks if all required modifiers are pressed.\n * Resolves 'default' to metaKey (macOS) or ctrlKey (Windows/Linux).\n */\nconst areModifiersPressed = (event: KeyboardEvent, modifiers: HotKeyModifiers): boolean =>\n modifiers.length > 0 &&\n modifiers\n .map((modifier) => (modifier === 'default' ? (isMacOS() ? 'metaKey' : 'ctrlKey') : modifier))\n .every((key) => event[key] === true)\n\n/**\n * Determines if the event target is an editable element where hotkeys should be blocked.\n * Returns true if we should block the hotkey, false otherwise.\n */\nconst isEditableElement = (event: KeyboardEvent, key: string): boolean => {\n if (!(event.target instanceof HTMLElement)) {\n return false\n }\n\n const target = event.target\n\n // Allow certain functional keys in INPUT fields\n if (target.tagName === 'INPUT') {\n return !INPUT_ALLOWED_KEYS.has(key)\n }\n\n // Block all hotkeys in textareas and contenteditable elements\n return target.tagName === 'TEXTAREA' || target.contentEditable === 'true' || target.hasAttribute('contenteditable')\n}\n\n/**\n * Handles global keyboard shortcuts.\n * Checks modifier keys and input context before emitting events.\n *\n * @param event - the keyboard event\n * @param eventBus - event bus for emitting hotkey actions\n * @param layout - client layout\n */\nexport const handleHotkeys = (event: KeyboardEvent, eventBus: WorkspaceEventBus, layout: ClientLayout): void => {\n /** Special case for space */\n const key = event.key === ' ' ? 'Space' : event.key\n /** Get the discriminated hotkey event with payload */\n const hotkeyEvent = HOTKEYS[layout][key]\n\n if (!hotkeyEvent) {\n return\n }\n\n // Default to sending the keyboard event as the payload\n const payload = { event }\n\n // Escape always fires, regardless of context\n if (key === 'Escape') {\n eventBus.emit(hotkeyEvent.event, payload, { skipUnpackProxy: true })\n return\n }\n\n // If modifiers are pressed, fire the hotkey (even in input fields)\n if (areModifiersPressed(event, hotkeyEvent.modifiers)) {\n eventBus.emit(hotkeyEvent.event, payload, { skipUnpackProxy: true })\n return\n }\n\n // If modifiers are required but missing, do not fire the hotkey.\n if (hotkeyEvent.modifiers.length > 0) {\n return\n }\n\n // Without modifiers, only fire if not in an editable element\n if (!isEditableElement(event, key)) {\n eventBus.emit(hotkeyEvent.event, payload, { skipUnpackProxy: true })\n }\n}\n"],"mappings":";;;AAWA,IAAM,kBAAgC;CACpC,OAAO;EAAE,OAAO;EAAiC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"handle-hotkeys.js","names":[],"sources":["../../../src/v2/helpers/handle-hotkeys.ts"],"sourcesContent":["import { isMacOS } from '@scalar/helpers/general/is-mac-os'\nimport type { ApiReferenceEvents, WorkspaceEventBus } from '@scalar/workspace-store/events'\n\nimport type { ClientLayout } from '@/v2/types/layout'\n\ntype HotKeyModifiers = ('altKey' | 'ctrlKey' | 'shiftKey' | 'metaKey' | 'default')[]\n\n/** Hotkey configuration */\ntype HotKeyConfig = Record<string | number, { event: keyof ApiReferenceEvents; modifiers: HotKeyModifiers }>\n\n/** Default hotkeys available in most contexts */\nconst DEFAULT_HOTKEYS: HotKeyConfig = {\n Enter: { event: 'operation:send:request:hotkey', modifiers: ['default'] },\n b: { event: 'ui:toggle:sidebar', modifiers: ['default'] },\n k: { event: 'ui:open:command-palette', modifiers: ['default'] },\n l: { event: 'ui:focus:address-bar', modifiers: ['default'] },\n j: { event: 'ui:focus:search', modifiers: ['default'] },\n i: { event: 'ui:open:settings', modifiers: ['default'] },\n s: { event: 'ui:save:local-document', modifiers: ['default'] },\n}\n\n/** Hotkey map by layout, we can allow the user to override this later */\nconst HOTKEYS: Record<ClientLayout, HotKeyConfig> = {\n web: DEFAULT_HOTKEYS,\n\n modal: {\n ...DEFAULT_HOTKEYS,\n Escape: { event: 'ui:close:client-modal', modifiers: [] },\n l: { event: 'ui:focus:send-button', modifiers: ['default'] },\n },\n\n desktop: {\n ...DEFAULT_HOTKEYS,\n n: { event: 'ui:open:command-palette', modifiers: ['default'] },\n t: { event: 'tabs:add:tab', modifiers: ['default'] },\n w: { event: 'tabs:close:tab', modifiers: ['default'] },\n ArrowLeft: { event: 'tabs:navigate:previous', modifiers: ['default', 'altKey'] },\n ArrowRight: { event: 'tabs:navigate:next', modifiers: ['default', 'altKey'] },\n 1: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 2: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 3: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 4: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 5: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 6: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 7: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 8: { event: 'tabs:focus:tab', modifiers: ['default'] },\n 9: { event: 'tabs:focus:tab-last', modifiers: ['default'] },\n },\n}\n\n/** Keys that should work in input fields when the modifier is pressed */\nconst INPUT_ALLOWED_KEYS = new Set(['Escape', 'ArrowDown', 'ArrowUp', 'Enter'])\n\n/**\n * Checks if all required modifiers are pressed.\n * Resolves 'default' to metaKey (macOS) or ctrlKey (Windows/Linux).\n */\nconst areModifiersPressed = (event: KeyboardEvent, modifiers: HotKeyModifiers): boolean =>\n modifiers.length > 0 &&\n modifiers\n .map((modifier) => (modifier === 'default' ? (isMacOS() ? 'metaKey' : 'ctrlKey') : modifier))\n .every((key) => event[key] === true)\n\n/**\n * Determines if the event target is an editable element where hotkeys should be blocked.\n * Returns true if we should block the hotkey, false otherwise.\n */\nconst isEditableElement = (event: KeyboardEvent, key: string): boolean => {\n if (!(event.target instanceof HTMLElement)) {\n return false\n }\n\n const target = event.target\n\n // Allow certain functional keys in INPUT fields\n if (target.tagName === 'INPUT') {\n return !INPUT_ALLOWED_KEYS.has(key)\n }\n\n // Block all hotkeys in textareas and contenteditable elements\n return target.tagName === 'TEXTAREA' || target.contentEditable === 'true' || target.hasAttribute('contenteditable')\n}\n\n/**\n * Handles global keyboard shortcuts.\n * Checks modifier keys and input context before emitting events.\n *\n * @param event - the keyboard event\n * @param eventBus - event bus for emitting hotkey actions\n * @param layout - client layout\n */\nexport const handleHotkeys = (event: KeyboardEvent, eventBus: WorkspaceEventBus, layout: ClientLayout): void => {\n /** Special case for space */\n const key = event.key === ' ' ? 'Space' : event.key\n /** Get the discriminated hotkey event with payload */\n const hotkeyEvent = HOTKEYS[layout][key]\n\n if (!hotkeyEvent) {\n return\n }\n\n // Default to sending the keyboard event as the payload\n const payload = { event }\n\n // Escape always fires, regardless of context\n if (key === 'Escape') {\n eventBus.emit(hotkeyEvent.event, payload, { skipUnpackProxy: true })\n return\n }\n\n // If modifiers are pressed, fire the hotkey (even in input fields)\n if (areModifiersPressed(event, hotkeyEvent.modifiers)) {\n eventBus.emit(hotkeyEvent.event, payload, { skipUnpackProxy: true })\n return\n }\n\n // If modifiers are required but missing, do not fire the hotkey.\n if (hotkeyEvent.modifiers.length > 0) {\n return\n }\n\n // Without modifiers, only fire if not in an editable element\n if (!isEditableElement(event, key)) {\n eventBus.emit(hotkeyEvent.event, payload, { skipUnpackProxy: true })\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.js","names":[],"sources":["../../../src/v2/helpers/test-utils.ts"],"sourcesContent":["import type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { vi } from 'vitest'\n\n/** Creates a fresh mock event bus instance for testing */\nexport const createMockEventBus = (): WorkspaceEventBus =>\n ({\n on: vi.fn(() => vi.fn()),\n once: vi.fn(() => vi.fn()),\n off: vi.fn(),\n onAny: vi.fn(() => vi.fn()),\n offAny: vi.fn(),\n emit: vi.fn(() => null),\n flushDebouncedEmits: vi.fn(),\n }) as unknown as WorkspaceEventBus\n\n/** Mock event bus for all your testing needs */\nexport const mockEventBus = createMockEventBus()\n"],"mappings":";;;AAIA,IAAa,4BACV;CACC,IAAI,GAAG,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"test-utils.js","names":[],"sources":["../../../src/v2/helpers/test-utils.ts"],"sourcesContent":["import type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { vi } from 'vitest'\n\n/** Creates a fresh mock event bus instance for testing */\nexport const createMockEventBus = (): WorkspaceEventBus =>\n ({\n on: vi.fn(() => vi.fn()),\n once: vi.fn(() => vi.fn()),\n off: vi.fn(),\n onAny: vi.fn(() => vi.fn()),\n offAny: vi.fn(),\n emit: vi.fn(() => null),\n flushDebouncedEmits: vi.fn(),\n }) as unknown as WorkspaceEventBus\n\n/** Mock event bus for all your testing needs */\nexport const mockEventBus = createMockEventBus()\n"],"mappings":";;;AAIA,IAAa,4BACV;CACC,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC;CACvB,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC;CACzB,KAAK,GAAG,GAAG;CACX,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC;CAC1B,QAAQ,GAAG,GAAG;CACd,MAAM,GAAG,SAAS,IAAI;CACtB,qBAAqB,GAAG,GAAG;AAC7B;;AAGF,IAAa,eAAe,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-global-hot-keys.js","names":[],"sources":["../../../src/v2/hooks/use-global-hot-keys.ts"],"sourcesContent":["import type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { type MaybeRefOrGetter, onBeforeUnmount, onMounted, toValue } from 'vue'\n\nimport { handleHotkeys } from '@/v2/helpers/handle-hotkeys'\nimport type { ClientLayout } from '@/v2/types/layout'\n\n/**\n * Global hotkey handler for the app (web + desktop)\n *\n * @param eventBus - workspace event bus\n * @param layout - client layout\n * @param disableListeners - whether to disable the listeners\n */\nexport const useGlobalHotKeys = (\n eventBus: WorkspaceEventBus,\n layout: ClientLayout,\n disableListeners?: MaybeRefOrGetter<boolean>,\n): void => {\n const handleKeyDown = (ev: KeyboardEvent) => {\n if (toValue(disableListeners)) {\n return\n }\n\n handleHotkeys(ev, eventBus, layout)\n }\n\n // Enable the listeners\n onMounted(() => window.addEventListener('keydown', handleKeyDown))\n onBeforeUnmount(() => window.removeEventListener('keydown', handleKeyDown))\n}\n"],"mappings":";;;;;;;;;;AAaA,IAAa,oBACX,UACA,QACA,qBACS;CACT,MAAM,iBAAiB,OAAsB;
|
|
1
|
+
{"version":3,"file":"use-global-hot-keys.js","names":[],"sources":["../../../src/v2/hooks/use-global-hot-keys.ts"],"sourcesContent":["import type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { type MaybeRefOrGetter, onBeforeUnmount, onMounted, toValue } from 'vue'\n\nimport { handleHotkeys } from '@/v2/helpers/handle-hotkeys'\nimport type { ClientLayout } from '@/v2/types/layout'\n\n/**\n * Global hotkey handler for the app (web + desktop)\n *\n * @param eventBus - workspace event bus\n * @param layout - client layout\n * @param disableListeners - whether to disable the listeners\n */\nexport const useGlobalHotKeys = (\n eventBus: WorkspaceEventBus,\n layout: ClientLayout,\n disableListeners?: MaybeRefOrGetter<boolean>,\n): void => {\n const handleKeyDown = (ev: KeyboardEvent) => {\n if (toValue(disableListeners)) {\n return\n }\n\n handleHotkeys(ev, eventBus, layout)\n }\n\n // Enable the listeners\n onMounted(() => window.addEventListener('keydown', handleKeyDown))\n onBeforeUnmount(() => window.removeEventListener('keydown', handleKeyDown))\n}\n"],"mappings":";;;;;;;;;;AAaA,IAAa,oBACX,UACA,QACA,qBACS;CACT,MAAM,iBAAiB,OAAsB;EAC3C,IAAI,QAAQ,gBAAgB,GAC1B;EAGF,cAAc,IAAI,UAAU,MAAM;CACpC;CAGA,gBAAgB,OAAO,iBAAiB,WAAW,aAAa,CAAC;CACjE,sBAAsB,OAAO,oBAAoB,WAAW,aAAa,CAAC;AAC5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-scroll-lock.js","names":[],"sources":["../../../src/v2/hooks/use-scroll-lock.ts"],"sourcesContent":["import { type MaybeRefOrGetter, computed, onBeforeUnmount, ref, toValue } from 'vue'\n\n/**\n * useScrollLock - A Vue composition function to lock and unlock scrolling on a specific element.\n *\n * This hook provides a computed ref that allows you to enable or disable scrolling on a given HTMLElement.\n * Locking sets the element's `overflow` style to `'hidden'`.\n * Unlocking restores the original `overflow` value.\n *\n * The lock state will be automatically cleaned up (unlocked) when the component is unmounted.\n *\n * @param element - MaybeRefOrGetter for the HTMLElement to lock scrolling on. Can be a ref or a function.\n * @returns A computed ref: assign `true` to lock, `false` to unlock, read for current state.\n *\n * @example\n * ```ts\n * // In your setup():\n * const container = ref<HTMLElement | null>(null)\n * const scrollLock = useScrollLock(container)\n *\n * // To lock scrolling:\n * scrollLock.value = true\n *\n * // To unlock scrolling:\n * scrollLock.value = false\n * ```\n */\nexport const useScrollLock = (element: MaybeRefOrGetter<HTMLElement | null | undefined>) => {\n const initialValue = ref<string>('')\n const isLocked = ref(false)\n\n // Locks scrolling on the provided element and saves the initial overflow style\n const lock = () => {\n const el = toValue(element)\n\n if (!el) {\n return\n }\n\n // Save the initial overflow value\n initialValue.value = el.style.overflow\n el.style.overflow = 'hidden'\n }\n\n // Unlocks scrolling, restoring or removing the original overflow style\n const unlock = () => {\n const el = toValue(element)\n\n if (!el) {\n return\n }\n\n if (initialValue.value !== '') {\n el.style.overflow = initialValue.value\n } else {\n el.style.removeProperty('overflow')\n }\n }\n\n // Computed ref acting as a control interface for scroll lock\n const state = computed({\n get: () => isLocked.value,\n set: (value: boolean) => {\n isLocked.value = value\n value ? lock() : unlock()\n },\n })\n\n // Clean up when component is unmounted\n onBeforeUnmount(() => {\n if (isLocked.value) {\n unlock()\n }\n })\n\n return state\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAa,iBAAiB,YAA8D;CAC1F,MAAM,eAAe,IAAY,
|
|
1
|
+
{"version":3,"file":"use-scroll-lock.js","names":[],"sources":["../../../src/v2/hooks/use-scroll-lock.ts"],"sourcesContent":["import { type MaybeRefOrGetter, computed, onBeforeUnmount, ref, toValue } from 'vue'\n\n/**\n * useScrollLock - A Vue composition function to lock and unlock scrolling on a specific element.\n *\n * This hook provides a computed ref that allows you to enable or disable scrolling on a given HTMLElement.\n * Locking sets the element's `overflow` style to `'hidden'`.\n * Unlocking restores the original `overflow` value.\n *\n * The lock state will be automatically cleaned up (unlocked) when the component is unmounted.\n *\n * @param element - MaybeRefOrGetter for the HTMLElement to lock scrolling on. Can be a ref or a function.\n * @returns A computed ref: assign `true` to lock, `false` to unlock, read for current state.\n *\n * @example\n * ```ts\n * // In your setup():\n * const container = ref<HTMLElement | null>(null)\n * const scrollLock = useScrollLock(container)\n *\n * // To lock scrolling:\n * scrollLock.value = true\n *\n * // To unlock scrolling:\n * scrollLock.value = false\n * ```\n */\nexport const useScrollLock = (element: MaybeRefOrGetter<HTMLElement | null | undefined>) => {\n const initialValue = ref<string>('')\n const isLocked = ref(false)\n\n // Locks scrolling on the provided element and saves the initial overflow style\n const lock = () => {\n const el = toValue(element)\n\n if (!el) {\n return\n }\n\n // Save the initial overflow value\n initialValue.value = el.style.overflow\n el.style.overflow = 'hidden'\n }\n\n // Unlocks scrolling, restoring or removing the original overflow style\n const unlock = () => {\n const el = toValue(element)\n\n if (!el) {\n return\n }\n\n if (initialValue.value !== '') {\n el.style.overflow = initialValue.value\n } else {\n el.style.removeProperty('overflow')\n }\n }\n\n // Computed ref acting as a control interface for scroll lock\n const state = computed({\n get: () => isLocked.value,\n set: (value: boolean) => {\n isLocked.value = value\n value ? lock() : unlock()\n },\n })\n\n // Clean up when component is unmounted\n onBeforeUnmount(() => {\n if (isLocked.value) {\n unlock()\n }\n })\n\n return state\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAa,iBAAiB,YAA8D;CAC1F,MAAM,eAAe,IAAY,EAAE;CACnC,MAAM,WAAW,IAAI,KAAK;CAG1B,MAAM,aAAa;EACjB,MAAM,KAAK,QAAQ,OAAO;EAE1B,IAAI,CAAC,IACH;EAIF,aAAa,QAAQ,GAAG,MAAM;EAC9B,GAAG,MAAM,WAAW;CACtB;CAGA,MAAM,eAAe;EACnB,MAAM,KAAK,QAAQ,OAAO;EAE1B,IAAI,CAAC,IACH;EAGF,IAAI,aAAa,UAAU,IACzB,GAAG,MAAM,WAAW,aAAa;OAEjC,GAAG,MAAM,eAAe,UAAU;CAEtC;CAGA,MAAM,QAAQ,SAAS;EACrB,WAAW,SAAS;EACpB,MAAM,UAAmB;GACvB,SAAS,QAAQ;GACjB,QAAQ,KAAK,IAAI,OAAO;EAC1B;CACF,CAAC;CAGD,sBAAsB;EACpB,IAAI,SAAS,OACX,OAAO;CAEX,CAAC;CAED,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-events.js","names":[],"sources":["../../src/v2/workspace-events.ts"],"sourcesContent":["import type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { ApiReferenceEvents, CollectionType, WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { generateClientMutators } from '@scalar/workspace-store/mutators'\nimport { type Ref, computed } from 'vue'\n\ntype Hook<T extends keyof ApiReferenceEvents> = Partial<{\n onBeforeExecute: (\n payload: ApiReferenceEvents[T],\n ) => void | Promise<void> | ApiReferenceEvents[T] | Promise<ApiReferenceEvents[T]>\n onAfterExecute: (payload: ApiReferenceEvents[T]) => void | Promise<void>\n}>\n\ntype Hooks = {\n [key in keyof ApiReferenceEvents]?: Hook<key>\n}\n\n/**\n * Wraps a given function with optional before/after execution hooks for a specific event.\n * - Calls onBeforeExecute hook before executing the main function.\n * - Calls onAfterExecute hook after executing the main function.\n *\n * @template T The event key from ApiReferenceEvents\n * @param event The event name\n * @param fn The main function to execute\n * @param hooks The hooks object containing before/after hooks for events\n * @returns An async function that runs hooks around the main function\n */\nconst withHook = <T extends keyof ApiReferenceEvents>(\n event: T,\n fn: (args: ApiReferenceEvents[T]) => unknown | Promise<unknown>,\n hooks: Hooks,\n) => {\n return async (args: ApiReferenceEvents[T]) => {\n // Call the before execution hook for this event, if any\n const result = (await hooks[event]?.onBeforeExecute?.(args)) ?? args\n // Execute the main function\n await fn(result)\n // Call the after execution hook for this event, if any\n await hooks[event]?.onAfterExecute?.(result)\n return result\n }\n}\n\n/**\n * Initializes all Workspace Event Handlers by subscribing eventBus listeners\n * to each relevant mutator operation. Hooks are used for before/after execution.\n *\n * @param eventBus The WorkspaceEventBus to subscribe to\n * @param store The WorkspaceStore instance\n * @param hooks Object containing optional before/after hooks for each event\n */\nexport function initializeWorkspaceEventHandlers({\n eventBus,\n store,\n hooks,\n}: {\n eventBus: WorkspaceEventBus\n store: Ref<WorkspaceStore | null>\n hooks: Hooks\n}) {\n // Generate all client mutators for the current workspace store\n const mutators = computed(() => generateClientMutators(store.value))\n\n /**\n * Returns the appropriate mutators depending on the collectionType.\n * If collectionType is 'document', gets the active document mutator,\n * otherwise, gets the workspace mutator.\n */\n const getMutators = ({ collectionType }: CollectionType) => {\n if (collectionType === 'document') {\n return mutators.value.active()\n }\n return mutators.value.workspace()\n }\n\n //------------------------------------------------------------------------------------\n // Workspace Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('workspace:update:active-proxy', (payload) =>\n withHook('workspace:update:active-proxy', mutators.value.workspace().workspace.updateActiveProxy, hooks)(payload),\n )\n eventBus.on('workspace:update:color-mode', (payload) =>\n withHook('workspace:update:color-mode', mutators.value.workspace().workspace.updateColorMode, hooks)(payload),\n )\n eventBus.on('workspace:update:theme', (payload) =>\n withHook('workspace:update:theme', mutators.value.workspace().workspace.updateTheme, hooks)(payload),\n )\n eventBus.on('workspace:update:selected-client', (payload) =>\n withHook(\n 'workspace:update:selected-client',\n mutators.value.workspace().workspace.updateSelectedClient,\n hooks,\n )(payload),\n )\n eventBus.on('workspace:update:selected-example', (payload) =>\n withHook(\n 'workspace:update:selected-example',\n mutators.value.workspace().workspace.updateSelectedExample,\n hooks,\n )(payload),\n )\n eventBus.on('workspace:update:active-environment', (payload) =>\n withHook(\n 'workspace:update:active-environment',\n mutators.value.workspace().workspace.updateActiveEnvironment,\n hooks,\n )(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Document Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('document:update:extension', (payload) =>\n withHook('document:update:extension', mutators.value.active().document.updateDocumentExtension, hooks)(payload),\n )\n eventBus.on('document:update:icon', (payload) =>\n withHook('document:update:icon', mutators.value.active().document.updateDocumentIcon, hooks)(payload),\n )\n eventBus.on('document:update:info', (payload) =>\n withHook('document:update:info', mutators.value.active().document.updateDocumentInfo, hooks)(payload),\n )\n eventBus.on('document:update:watch-mode', (payload) =>\n withHook('document:update:watch-mode', mutators.value.active().document.updateWatchMode, hooks)(payload),\n )\n eventBus.on('document:create:empty-document', (payload) =>\n withHook('document:create:empty-document', mutators.value.active().document.createEmptyDocument, hooks)(payload),\n )\n eventBus.on('document:delete:document', (payload) =>\n withHook('document:delete:document', mutators.value.active().document.deleteDocument, hooks)(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Environment Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('environment:upsert:environment', (payload) =>\n withHook('environment:upsert:environment', getMutators(payload).environment.upsertEnvironment, hooks)(payload),\n )\n eventBus.on('environment:delete:environment', (payload) =>\n withHook('environment:delete:environment', getMutators(payload).environment.deleteEnvironment, hooks)(payload),\n )\n eventBus.on('environment:upsert:environment-variable', (payload) =>\n withHook(\n 'environment:upsert:environment-variable',\n getMutators(payload).environment.upsertEnvironmentVariable,\n hooks,\n )(payload),\n )\n eventBus.on('environment:delete:environment-variable', (payload) =>\n withHook(\n 'environment:delete:environment-variable',\n getMutators(payload).environment.deleteEnvironmentVariable,\n hooks,\n )(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Cookie Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('cookie:upsert:cookie', async (payload) => {\n await withHook('cookie:upsert:cookie', getMutators(payload).cookie.upsertCookie, hooks)(payload)\n })\n eventBus.on('cookie:delete:cookie', async (payload) => {\n await withHook('cookie:delete:cookie', getMutators(payload).cookie.deleteCookie, hooks)(payload)\n })\n\n //------------------------------------------------------------------------------------\n // Auth Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('auth:delete:security-scheme', (payload) =>\n withHook('auth:delete:security-scheme', mutators.value.active().auth.deleteSecurityScheme, hooks)(payload),\n )\n eventBus.on('auth:update:active-index', (payload) =>\n withHook('auth:update:active-index', mutators.value.active().auth.updateSelectedAuthTab, hooks)(payload),\n )\n eventBus.on('auth:update:security-scheme', (payload) =>\n withHook('auth:update:security-scheme', mutators.value.active().auth.updateSecurityScheme, hooks)(payload),\n )\n eventBus.on('auth:update:selected-scopes', (payload) =>\n withHook('auth:update:selected-scopes', mutators.value.active().auth.updateSelectedScopes, hooks)(payload),\n )\n eventBus.on('auth:upsert:scopes', (payload) =>\n withHook('auth:upsert:scopes', mutators.value.active().auth.upsertScope, hooks)(payload),\n )\n eventBus.on('auth:delete:scopes', (payload) =>\n withHook('auth:delete:scopes', mutators.value.active().auth.deleteScope, hooks)(payload),\n )\n eventBus.on('auth:update:selected-security-schemes', (payload) =>\n withHook(\n 'auth:update:selected-security-schemes',\n mutators.value.active().auth.updateSelectedSecuritySchemes,\n hooks,\n )(payload),\n )\n eventBus.on('auth:clear:selected-security-schemes', (payload) =>\n withHook(\n 'auth:clear:selected-security-schemes',\n mutators.value.active().auth.clearSelectedSecuritySchemes,\n hooks,\n )(payload),\n )\n eventBus.on('auth:update:security-scheme-secrets', (payload) =>\n withHook(\n 'auth:update:security-scheme-secrets',\n mutators.value.active().auth.updateSecuritySchemeSecrets,\n hooks,\n )(payload),\n )\n eventBus.on('auth:clear:security-scheme-secrets', (payload) =>\n withHook(\n 'auth:clear:security-scheme-secrets',\n mutators.value.active().auth.clearSecuritySchemeSecrets,\n hooks,\n )(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Server Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('server:initialize:servers', (payload) =>\n withHook('server:initialize:servers', mutators.value.active().server.initializeServers, hooks)(payload),\n )\n eventBus.on('server:add:server', (payload) =>\n withHook('server:add:server', mutators.value.active().server.addServer, hooks)(payload),\n )\n eventBus.on('server:update:server', (payload) =>\n withHook('server:update:server', mutators.value.active().server.updateServer, hooks)(payload),\n )\n eventBus.on('server:delete:server', (payload) =>\n withHook('server:delete:server', mutators.value.active().server.deleteServer, hooks)(payload),\n )\n eventBus.on('server:clear:servers', (payload) =>\n withHook('server:clear:servers', mutators.value.active().server.clearServers, hooks)(payload),\n )\n eventBus.on('server:update:variables', (payload) =>\n withHook('server:update:variables', mutators.value.active().server.updateServerVariables, hooks)(payload),\n )\n eventBus.on('server:update:selected', (payload) =>\n withHook('server:update:selected', mutators.value.active().server.updateSelectedServer, hooks)(payload),\n )\n eventBus.on('asyncapi-server:update:selected', (payload) =>\n withHook(\n 'asyncapi-server:update:selected',\n mutators.value.active().server.updateSelectedAsyncApiServer,\n hooks,\n )(payload),\n )\n eventBus.on('asyncapi-server:update:variables', (payload) =>\n withHook(\n 'asyncapi-server:update:variables',\n mutators.value.active().server.updateAsyncApiServerVariables,\n hooks,\n )(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Operation Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('operation:create:operation', (payload) =>\n withHook('operation:create:operation', mutators.value.active().operation.createOperation, hooks)(payload),\n )\n eventBus.on('operation:update:pathMethod', (payload) =>\n withHook(\n 'operation:update:pathMethod',\n mutators.value.active().operation.updateOperationPathMethod,\n hooks,\n )(payload),\n )\n eventBus.on('operation:update:meta', (payload) =>\n withHook('operation:update:meta', mutators.value.active().operation.updateOperationMeta, hooks)(payload),\n )\n eventBus.on('operation:delete:operation', (payload) =>\n withHook('operation:delete:operation', mutators.value.active().operation.deleteOperation, hooks)(payload),\n )\n eventBus.on('operation:create:draft-example', (payload) =>\n withHook(\n 'operation:create:draft-example',\n mutators.value.active().operation.createOperationDraftExample,\n hooks,\n )(payload),\n )\n eventBus.on('operation:delete:example', (payload) =>\n withHook('operation:delete:example', mutators.value.active().operation.deleteOperationExample, hooks)(payload),\n )\n eventBus.on('operation:rename:example', (payload) =>\n withHook('operation:rename:example', mutators.value.active().operation.renameOperationExample, hooks)(payload),\n )\n eventBus.on('operation:upsert:parameter', (payload) =>\n withHook('operation:upsert:parameter', mutators.value.active().operation.upsertOperationParameter, hooks)(payload),\n )\n eventBus.on('operation:update:extra-parameters', (payload) =>\n withHook(\n 'operation:update:extra-parameters',\n mutators.value.active().operation.updateOperationExtraParameters,\n hooks,\n )(payload),\n )\n eventBus.on('operation:delete:parameter', (payload) =>\n withHook('operation:delete:parameter', mutators.value.active().operation.deleteOperationParameter, hooks)(payload),\n )\n eventBus.on('operation:delete-all:parameters', (payload) =>\n withHook(\n 'operation:delete-all:parameters',\n mutators.value.active().operation.deleteAllOperationParameters,\n hooks,\n )(payload),\n )\n eventBus.on('operation:update:extension', (payload) =>\n withHook('operation:update:extension', mutators.value.active().operation.updateOperationExtension, hooks)(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Operation Request Body Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('operation:update:requestBody:contentType', (payload) =>\n withHook(\n 'operation:update:requestBody:contentType',\n mutators.value.active().operation.updateOperationRequestBodyContentType,\n hooks,\n )(payload),\n )\n eventBus.on('operation:update:requestBody:value', (payload) =>\n withHook(\n 'operation:update:requestBody:value',\n mutators.value.active().operation.updateOperationRequestBodyExample,\n hooks,\n )(payload),\n )\n eventBus.on('operation:update:requestBody:formValue', (payload) =>\n withHook(\n 'operation:update:requestBody:formValue',\n mutators.value.active().operation.updateOperationRequestBodyFormValue,\n hooks,\n )(payload),\n )\n eventBus.on('operation:reload:history', (payload) =>\n withHook('operation:reload:history', mutators.value.active().operation.reloadOperationHistory, hooks)(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Tag Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('tag:create:tag', (payload) =>\n withHook('tag:create:tag', mutators.value.active().tag.createTag, hooks)(payload),\n )\n eventBus.on('tag:edit:tag', (payload) =>\n withHook('tag:edit:tag', mutators.value.active().tag.editTag, hooks)(payload),\n )\n eventBus.on('tag:delete:tag', (payload) =>\n withHook('tag:delete:tag', mutators.value.active().tag.deleteTag, hooks)(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Tabs Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('tabs:add:tab', (payload) =>\n withHook('tabs:add:tab', mutators.value.workspace().tabs.addTab, hooks)(payload),\n )\n eventBus.on('tabs:close:tab', (payload) =>\n withHook('tabs:close:tab', mutators.value.workspace().tabs.closeTab, hooks)(payload),\n )\n eventBus.on('tabs:close:other-tabs', (payload) =>\n withHook('tabs:close:other-tabs', mutators.value.workspace().tabs.closeOtherTabs, hooks)(payload),\n )\n eventBus.on('tabs:focus:tab', (payload) =>\n withHook('tabs:focus:tab', mutators.value.workspace().tabs.focusTab, hooks)(payload),\n )\n eventBus.on('tabs:focus:tab-last', (payload) =>\n withHook('tabs:focus:tab-last', mutators.value.workspace().tabs.focusLastTab, hooks)(payload),\n )\n eventBus.on('tabs:navigate:previous', (payload) =>\n withHook('tabs:navigate:previous', mutators.value.workspace().tabs.navigatePreviousTab, hooks)(payload),\n )\n eventBus.on('tabs:navigate:next', (payload) =>\n withHook('tabs:navigate:next', mutators.value.workspace().tabs.navigateNextTab, hooks)(payload),\n )\n eventBus.on('tabs:update:tabs', (payload) =>\n withHook('tabs:update:tabs', mutators.value.workspace().tabs.updateTabs, hooks)(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Hooks Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('hooks:on:request:complete', (payload) =>\n withHook('hooks:on:request:complete', mutators.value.active().operation.addResponseToHistory, hooks)(payload),\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workspace-events.js","names":[],"sources":["../../src/v2/workspace-events.ts"],"sourcesContent":["import type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { ApiReferenceEvents, CollectionType, WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { generateClientMutators } from '@scalar/workspace-store/mutators'\nimport { type Ref, computed } from 'vue'\n\ntype Hook<T extends keyof ApiReferenceEvents> = Partial<{\n onBeforeExecute: (\n payload: ApiReferenceEvents[T],\n ) => void | Promise<void> | ApiReferenceEvents[T] | Promise<ApiReferenceEvents[T]>\n onAfterExecute: (payload: ApiReferenceEvents[T]) => void | Promise<void>\n}>\n\ntype Hooks = {\n [key in keyof ApiReferenceEvents]?: Hook<key>\n}\n\n/**\n * Wraps a given function with optional before/after execution hooks for a specific event.\n * - Calls onBeforeExecute hook before executing the main function.\n * - Calls onAfterExecute hook after executing the main function.\n *\n * @template T The event key from ApiReferenceEvents\n * @param event The event name\n * @param fn The main function to execute\n * @param hooks The hooks object containing before/after hooks for events\n * @returns An async function that runs hooks around the main function\n */\nconst withHook = <T extends keyof ApiReferenceEvents>(\n event: T,\n fn: (args: ApiReferenceEvents[T]) => unknown | Promise<unknown>,\n hooks: Hooks,\n) => {\n return async (args: ApiReferenceEvents[T]) => {\n // Call the before execution hook for this event, if any\n const result = (await hooks[event]?.onBeforeExecute?.(args)) ?? args\n // Execute the main function\n await fn(result)\n // Call the after execution hook for this event, if any\n await hooks[event]?.onAfterExecute?.(result)\n return result\n }\n}\n\n/**\n * Initializes all Workspace Event Handlers by subscribing eventBus listeners\n * to each relevant mutator operation. Hooks are used for before/after execution.\n *\n * @param eventBus The WorkspaceEventBus to subscribe to\n * @param store The WorkspaceStore instance\n * @param hooks Object containing optional before/after hooks for each event\n */\nexport function initializeWorkspaceEventHandlers({\n eventBus,\n store,\n hooks,\n}: {\n eventBus: WorkspaceEventBus\n store: Ref<WorkspaceStore | null>\n hooks: Hooks\n}) {\n // Generate all client mutators for the current workspace store\n const mutators = computed(() => generateClientMutators(store.value))\n\n /**\n * Returns the appropriate mutators depending on the collectionType.\n * If collectionType is 'document', gets the active document mutator,\n * otherwise, gets the workspace mutator.\n */\n const getMutators = ({ collectionType }: CollectionType) => {\n if (collectionType === 'document') {\n return mutators.value.active()\n }\n return mutators.value.workspace()\n }\n\n //------------------------------------------------------------------------------------\n // Workspace Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('workspace:update:active-proxy', (payload) =>\n withHook('workspace:update:active-proxy', mutators.value.workspace().workspace.updateActiveProxy, hooks)(payload),\n )\n eventBus.on('workspace:update:color-mode', (payload) =>\n withHook('workspace:update:color-mode', mutators.value.workspace().workspace.updateColorMode, hooks)(payload),\n )\n eventBus.on('workspace:update:theme', (payload) =>\n withHook('workspace:update:theme', mutators.value.workspace().workspace.updateTheme, hooks)(payload),\n )\n eventBus.on('workspace:update:selected-client', (payload) =>\n withHook(\n 'workspace:update:selected-client',\n mutators.value.workspace().workspace.updateSelectedClient,\n hooks,\n )(payload),\n )\n eventBus.on('workspace:update:selected-example', (payload) =>\n withHook(\n 'workspace:update:selected-example',\n mutators.value.workspace().workspace.updateSelectedExample,\n hooks,\n )(payload),\n )\n eventBus.on('workspace:update:active-environment', (payload) =>\n withHook(\n 'workspace:update:active-environment',\n mutators.value.workspace().workspace.updateActiveEnvironment,\n hooks,\n )(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Document Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('document:update:extension', (payload) =>\n withHook('document:update:extension', mutators.value.active().document.updateDocumentExtension, hooks)(payload),\n )\n eventBus.on('document:update:icon', (payload) =>\n withHook('document:update:icon', mutators.value.active().document.updateDocumentIcon, hooks)(payload),\n )\n eventBus.on('document:update:info', (payload) =>\n withHook('document:update:info', mutators.value.active().document.updateDocumentInfo, hooks)(payload),\n )\n eventBus.on('document:update:watch-mode', (payload) =>\n withHook('document:update:watch-mode', mutators.value.active().document.updateWatchMode, hooks)(payload),\n )\n eventBus.on('document:create:empty-document', (payload) =>\n withHook('document:create:empty-document', mutators.value.active().document.createEmptyDocument, hooks)(payload),\n )\n eventBus.on('document:delete:document', (payload) =>\n withHook('document:delete:document', mutators.value.active().document.deleteDocument, hooks)(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Environment Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('environment:upsert:environment', (payload) =>\n withHook('environment:upsert:environment', getMutators(payload).environment.upsertEnvironment, hooks)(payload),\n )\n eventBus.on('environment:delete:environment', (payload) =>\n withHook('environment:delete:environment', getMutators(payload).environment.deleteEnvironment, hooks)(payload),\n )\n eventBus.on('environment:upsert:environment-variable', (payload) =>\n withHook(\n 'environment:upsert:environment-variable',\n getMutators(payload).environment.upsertEnvironmentVariable,\n hooks,\n )(payload),\n )\n eventBus.on('environment:delete:environment-variable', (payload) =>\n withHook(\n 'environment:delete:environment-variable',\n getMutators(payload).environment.deleteEnvironmentVariable,\n hooks,\n )(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Cookie Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('cookie:upsert:cookie', async (payload) => {\n await withHook('cookie:upsert:cookie', getMutators(payload).cookie.upsertCookie, hooks)(payload)\n })\n eventBus.on('cookie:delete:cookie', async (payload) => {\n await withHook('cookie:delete:cookie', getMutators(payload).cookie.deleteCookie, hooks)(payload)\n })\n\n //------------------------------------------------------------------------------------\n // Auth Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('auth:delete:security-scheme', (payload) =>\n withHook('auth:delete:security-scheme', mutators.value.active().auth.deleteSecurityScheme, hooks)(payload),\n )\n eventBus.on('auth:update:active-index', (payload) =>\n withHook('auth:update:active-index', mutators.value.active().auth.updateSelectedAuthTab, hooks)(payload),\n )\n eventBus.on('auth:update:security-scheme', (payload) =>\n withHook('auth:update:security-scheme', mutators.value.active().auth.updateSecurityScheme, hooks)(payload),\n )\n eventBus.on('auth:update:selected-scopes', (payload) =>\n withHook('auth:update:selected-scopes', mutators.value.active().auth.updateSelectedScopes, hooks)(payload),\n )\n eventBus.on('auth:upsert:scopes', (payload) =>\n withHook('auth:upsert:scopes', mutators.value.active().auth.upsertScope, hooks)(payload),\n )\n eventBus.on('auth:delete:scopes', (payload) =>\n withHook('auth:delete:scopes', mutators.value.active().auth.deleteScope, hooks)(payload),\n )\n eventBus.on('auth:update:selected-security-schemes', (payload) =>\n withHook(\n 'auth:update:selected-security-schemes',\n mutators.value.active().auth.updateSelectedSecuritySchemes,\n hooks,\n )(payload),\n )\n eventBus.on('auth:clear:selected-security-schemes', (payload) =>\n withHook(\n 'auth:clear:selected-security-schemes',\n mutators.value.active().auth.clearSelectedSecuritySchemes,\n hooks,\n )(payload),\n )\n eventBus.on('auth:update:security-scheme-secrets', (payload) =>\n withHook(\n 'auth:update:security-scheme-secrets',\n mutators.value.active().auth.updateSecuritySchemeSecrets,\n hooks,\n )(payload),\n )\n eventBus.on('auth:clear:security-scheme-secrets', (payload) =>\n withHook(\n 'auth:clear:security-scheme-secrets',\n mutators.value.active().auth.clearSecuritySchemeSecrets,\n hooks,\n )(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Server Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('server:initialize:servers', (payload) =>\n withHook('server:initialize:servers', mutators.value.active().server.initializeServers, hooks)(payload),\n )\n eventBus.on('server:add:server', (payload) =>\n withHook('server:add:server', mutators.value.active().server.addServer, hooks)(payload),\n )\n eventBus.on('server:update:server', (payload) =>\n withHook('server:update:server', mutators.value.active().server.updateServer, hooks)(payload),\n )\n eventBus.on('server:delete:server', (payload) =>\n withHook('server:delete:server', mutators.value.active().server.deleteServer, hooks)(payload),\n )\n eventBus.on('server:clear:servers', (payload) =>\n withHook('server:clear:servers', mutators.value.active().server.clearServers, hooks)(payload),\n )\n eventBus.on('server:update:variables', (payload) =>\n withHook('server:update:variables', mutators.value.active().server.updateServerVariables, hooks)(payload),\n )\n eventBus.on('server:update:selected', (payload) =>\n withHook('server:update:selected', mutators.value.active().server.updateSelectedServer, hooks)(payload),\n )\n eventBus.on('asyncapi-server:update:selected', (payload) =>\n withHook(\n 'asyncapi-server:update:selected',\n mutators.value.active().server.updateSelectedAsyncApiServer,\n hooks,\n )(payload),\n )\n eventBus.on('asyncapi-server:update:variables', (payload) =>\n withHook(\n 'asyncapi-server:update:variables',\n mutators.value.active().server.updateAsyncApiServerVariables,\n hooks,\n )(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Operation Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('operation:create:operation', (payload) =>\n withHook('operation:create:operation', mutators.value.active().operation.createOperation, hooks)(payload),\n )\n eventBus.on('operation:update:pathMethod', (payload) =>\n withHook(\n 'operation:update:pathMethod',\n mutators.value.active().operation.updateOperationPathMethod,\n hooks,\n )(payload),\n )\n eventBus.on('operation:update:meta', (payload) =>\n withHook('operation:update:meta', mutators.value.active().operation.updateOperationMeta, hooks)(payload),\n )\n eventBus.on('operation:delete:operation', (payload) =>\n withHook('operation:delete:operation', mutators.value.active().operation.deleteOperation, hooks)(payload),\n )\n eventBus.on('operation:create:draft-example', (payload) =>\n withHook(\n 'operation:create:draft-example',\n mutators.value.active().operation.createOperationDraftExample,\n hooks,\n )(payload),\n )\n eventBus.on('operation:delete:example', (payload) =>\n withHook('operation:delete:example', mutators.value.active().operation.deleteOperationExample, hooks)(payload),\n )\n eventBus.on('operation:rename:example', (payload) =>\n withHook('operation:rename:example', mutators.value.active().operation.renameOperationExample, hooks)(payload),\n )\n eventBus.on('operation:upsert:parameter', (payload) =>\n withHook('operation:upsert:parameter', mutators.value.active().operation.upsertOperationParameter, hooks)(payload),\n )\n eventBus.on('operation:update:extra-parameters', (payload) =>\n withHook(\n 'operation:update:extra-parameters',\n mutators.value.active().operation.updateOperationExtraParameters,\n hooks,\n )(payload),\n )\n eventBus.on('operation:delete:parameter', (payload) =>\n withHook('operation:delete:parameter', mutators.value.active().operation.deleteOperationParameter, hooks)(payload),\n )\n eventBus.on('operation:delete-all:parameters', (payload) =>\n withHook(\n 'operation:delete-all:parameters',\n mutators.value.active().operation.deleteAllOperationParameters,\n hooks,\n )(payload),\n )\n eventBus.on('operation:update:extension', (payload) =>\n withHook('operation:update:extension', mutators.value.active().operation.updateOperationExtension, hooks)(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Operation Request Body Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('operation:update:requestBody:contentType', (payload) =>\n withHook(\n 'operation:update:requestBody:contentType',\n mutators.value.active().operation.updateOperationRequestBodyContentType,\n hooks,\n )(payload),\n )\n eventBus.on('operation:update:requestBody:value', (payload) =>\n withHook(\n 'operation:update:requestBody:value',\n mutators.value.active().operation.updateOperationRequestBodyExample,\n hooks,\n )(payload),\n )\n eventBus.on('operation:update:requestBody:formValue', (payload) =>\n withHook(\n 'operation:update:requestBody:formValue',\n mutators.value.active().operation.updateOperationRequestBodyFormValue,\n hooks,\n )(payload),\n )\n eventBus.on('operation:reload:history', (payload) =>\n withHook('operation:reload:history', mutators.value.active().operation.reloadOperationHistory, hooks)(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Tag Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('tag:create:tag', (payload) =>\n withHook('tag:create:tag', mutators.value.active().tag.createTag, hooks)(payload),\n )\n eventBus.on('tag:edit:tag', (payload) =>\n withHook('tag:edit:tag', mutators.value.active().tag.editTag, hooks)(payload),\n )\n eventBus.on('tag:delete:tag', (payload) =>\n withHook('tag:delete:tag', mutators.value.active().tag.deleteTag, hooks)(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Tabs Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('tabs:add:tab', (payload) =>\n withHook('tabs:add:tab', mutators.value.workspace().tabs.addTab, hooks)(payload),\n )\n eventBus.on('tabs:close:tab', (payload) =>\n withHook('tabs:close:tab', mutators.value.workspace().tabs.closeTab, hooks)(payload),\n )\n eventBus.on('tabs:close:other-tabs', (payload) =>\n withHook('tabs:close:other-tabs', mutators.value.workspace().tabs.closeOtherTabs, hooks)(payload),\n )\n eventBus.on('tabs:focus:tab', (payload) =>\n withHook('tabs:focus:tab', mutators.value.workspace().tabs.focusTab, hooks)(payload),\n )\n eventBus.on('tabs:focus:tab-last', (payload) =>\n withHook('tabs:focus:tab-last', mutators.value.workspace().tabs.focusLastTab, hooks)(payload),\n )\n eventBus.on('tabs:navigate:previous', (payload) =>\n withHook('tabs:navigate:previous', mutators.value.workspace().tabs.navigatePreviousTab, hooks)(payload),\n )\n eventBus.on('tabs:navigate:next', (payload) =>\n withHook('tabs:navigate:next', mutators.value.workspace().tabs.navigateNextTab, hooks)(payload),\n )\n eventBus.on('tabs:update:tabs', (payload) =>\n withHook('tabs:update:tabs', mutators.value.workspace().tabs.updateTabs, hooks)(payload),\n )\n\n //------------------------------------------------------------------------------------\n // Hooks Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('hooks:on:request:complete', (payload) =>\n withHook('hooks:on:request:complete', mutators.value.active().operation.addResponseToHistory, hooks)(payload),\n )\n}\n"],"mappings":"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"}
|