@scalar/api-client 3.22.0 → 3.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.js +1 -1
  3. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.js.map +1 -1
  4. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.script.js +2 -2
  5. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.script.js.map +1 -1
  6. package/dist/hooks/use-file-dialog.js +1 -1
  7. package/dist/hooks/use-file-dialog.js.map +1 -1
  8. package/dist/style.css +190 -144
  9. package/dist/v2/blocks/operation-block/OperationBlock.vue.js.map +1 -1
  10. package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js.map +1 -1
  11. package/dist/v2/blocks/operation-block/components/Header.vue.d.ts.map +1 -1
  12. package/dist/v2/blocks/operation-block/components/Header.vue.js +1 -1
  13. package/dist/v2/blocks/operation-block/components/Header.vue.js.map +1 -1
  14. package/dist/v2/blocks/operation-block/components/Header.vue.script.js.map +1 -1
  15. package/dist/v2/blocks/operation-block/helpers/persist-response-cookies.d.ts +3 -3
  16. package/dist/v2/blocks/operation-block/helpers/persist-response-cookies.d.ts.map +1 -1
  17. package/dist/v2/blocks/operation-block/helpers/persist-response-cookies.js +4 -4
  18. package/dist/v2/blocks/operation-block/helpers/persist-response-cookies.js.map +1 -1
  19. package/dist/v2/blocks/operation-block/helpers/validate-path-parameters.js +1 -1
  20. package/dist/v2/blocks/operation-block/helpers/validate-path-parameters.js.map +1 -1
  21. package/dist/v2/blocks/request-block/RequestBlock.vue.d.ts.map +1 -1
  22. package/dist/v2/blocks/request-block/RequestBlock.vue.js +1 -1
  23. package/dist/v2/blocks/request-block/RequestBlock.vue.js.map +1 -1
  24. package/dist/v2/blocks/request-block/RequestBlock.vue.script.js +13 -8
  25. package/dist/v2/blocks/request-block/RequestBlock.vue.script.js.map +1 -1
  26. package/dist/v2/blocks/request-block/components/RequestBody.vue.d.ts.map +1 -1
  27. package/dist/v2/blocks/request-block/components/RequestBody.vue.js +1 -1
  28. package/dist/v2/blocks/request-block/components/RequestBody.vue.js.map +1 -1
  29. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js +3 -1
  30. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js.map +1 -1
  31. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.js.map +1 -1
  32. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js.map +1 -1
  33. package/dist/v2/blocks/request-block/components/RequestParams.vue.d.ts +12 -0
  34. package/dist/v2/blocks/request-block/components/RequestParams.vue.d.ts.map +1 -1
  35. package/dist/v2/blocks/request-block/components/RequestParams.vue.js.map +1 -1
  36. package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js +132 -32
  37. package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js.map +1 -1
  38. package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts +3 -1
  39. package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts.map +1 -1
  40. package/dist/v2/blocks/request-block/components/RequestTable.vue.js +1 -1
  41. package/dist/v2/blocks/request-block/components/RequestTable.vue.js.map +1 -1
  42. package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js +13 -2
  43. package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js.map +1 -1
  44. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts +3 -1
  45. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts.map +1 -1
  46. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.js.map +1 -1
  47. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js +6 -2
  48. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js.map +1 -1
  49. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.d.ts.map +1 -1
  50. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js +10 -3
  51. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js.map +1 -1
  52. package/dist/v2/blocks/request-block/helpers/create-parameter-rows.d.ts.map +1 -1
  53. package/dist/v2/blocks/request-block/helpers/create-parameter-rows.js +10 -1
  54. package/dist/v2/blocks/request-block/helpers/create-parameter-rows.js.map +1 -1
  55. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js +1 -1
  56. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js.map +1 -1
  57. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js +1 -1
  58. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js.map +1 -1
  59. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js +4 -4
  60. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js.map +1 -1
  61. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js.map +1 -1
  62. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.d.ts.map +1 -1
  63. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.js.map +1 -1
  64. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js +55 -16
  65. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js.map +1 -1
  66. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts +3 -3
  67. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts.map +1 -1
  68. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.js.map +1 -1
  69. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js +20 -7
  70. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js.map +1 -1
  71. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.d.ts.map +1 -1
  72. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.js.map +1 -1
  73. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js +33 -27
  74. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js.map +1 -1
  75. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-oauth2-metadata.d.ts.map +1 -1
  76. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-oauth2-metadata.js +1 -1
  77. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-oauth2-metadata.js.map +1 -1
  78. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-device-authorization.d.ts.map +1 -1
  79. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-device-authorization.js +1 -1
  80. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-device-authorization.js.map +1 -1
  81. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.d.ts.map +1 -1
  82. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js +2 -0
  83. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js.map +1 -1
  84. package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.d.ts.map +1 -1
  85. package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.js +2 -1
  86. package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.js.map +1 -1
  87. package/dist/v2/components/code-input/CodeInput.vue.js +1 -1
  88. package/dist/v2/components/code-input/CodeInput.vue.js.map +1 -1
  89. package/dist/v2/components/code-input/CodeInput.vue.script.js +4 -4
  90. package/dist/v2/components/code-input/CodeInput.vue.script.js.map +1 -1
  91. package/dist/v2/components/code-input/CodeInputLite.vue.d.ts.map +1 -1
  92. package/dist/v2/components/code-input/CodeInputLite.vue.js +1 -1
  93. package/dist/v2/components/code-input/CodeInputLite.vue.js.map +1 -1
  94. package/dist/v2/components/code-input/CodeInputLite.vue.script.js.map +1 -1
  95. package/dist/v2/components/code-input/PillTooltipHost.vue.d.ts.map +1 -1
  96. package/dist/v2/components/code-input/PillTooltipHost.vue.js.map +1 -1
  97. package/dist/v2/components/code-input/PillTooltipHost.vue.script.js +4 -1
  98. package/dist/v2/components/code-input/PillTooltipHost.vue.script.js.map +1 -1
  99. package/dist/v2/components/code-input/code-variable-widget.js +1 -1
  100. package/dist/v2/components/code-input/code-variable-widget.js.map +1 -1
  101. package/dist/v2/components/data-table/DataTableInput.vue.d.ts +3 -1
  102. package/dist/v2/components/data-table/DataTableInput.vue.d.ts.map +1 -1
  103. package/dist/v2/components/data-table/DataTableInput.vue.js +1 -1
  104. package/dist/v2/components/data-table/DataTableInput.vue.js.map +1 -1
  105. package/dist/v2/components/data-table/DataTableInput.vue.script.js +46 -15
  106. package/dist/v2/components/data-table/DataTableInput.vue.script.js.map +1 -1
  107. package/dist/v2/constants.js +1 -1
  108. package/dist/v2/features/localization/index.d.ts.map +1 -1
  109. package/dist/v2/features/localization/index.js +2 -0
  110. package/dist/v2/features/localization/index.js.map +1 -1
  111. package/dist/v2/features/localization/locales/ar.d.ts +3 -0
  112. package/dist/v2/features/localization/locales/ar.d.ts.map +1 -1
  113. package/dist/v2/features/localization/locales/ar.js +3 -0
  114. package/dist/v2/features/localization/locales/ar.js.map +1 -1
  115. package/dist/v2/features/localization/locales/de.d.ts +3 -0
  116. package/dist/v2/features/localization/locales/de.d.ts.map +1 -1
  117. package/dist/v2/features/localization/locales/de.js +3 -0
  118. package/dist/v2/features/localization/locales/de.js.map +1 -1
  119. package/dist/v2/features/localization/locales/es.d.ts +3 -0
  120. package/dist/v2/features/localization/locales/es.d.ts.map +1 -1
  121. package/dist/v2/features/localization/locales/es.js +3 -0
  122. package/dist/v2/features/localization/locales/es.js.map +1 -1
  123. package/dist/v2/features/localization/locales/fr.d.ts +3 -0
  124. package/dist/v2/features/localization/locales/fr.d.ts.map +1 -1
  125. package/dist/v2/features/localization/locales/fr.js +3 -0
  126. package/dist/v2/features/localization/locales/fr.js.map +1 -1
  127. package/dist/v2/features/localization/locales/pt.d.ts +3 -0
  128. package/dist/v2/features/localization/locales/pt.d.ts.map +1 -1
  129. package/dist/v2/features/localization/locales/pt.js +3 -0
  130. package/dist/v2/features/localization/locales/pt.js.map +1 -1
  131. package/dist/v2/features/localization/locales/ru.d.ts +3 -0
  132. package/dist/v2/features/localization/locales/ru.d.ts.map +1 -1
  133. package/dist/v2/features/localization/locales/ru.js +3 -0
  134. package/dist/v2/features/localization/locales/ru.js.map +1 -1
  135. package/dist/v2/features/localization/locales/zh-cn.d.ts +3 -0
  136. package/dist/v2/features/localization/locales/zh-cn.d.ts.map +1 -1
  137. package/dist/v2/features/localization/locales/zh-cn.js +3 -0
  138. package/dist/v2/features/localization/locales/zh-cn.js.map +1 -1
  139. package/dist/v2/features/localization/locales/zh-tw.d.ts +398 -0
  140. package/dist/v2/features/localization/locales/zh-tw.d.ts.map +1 -0
  141. package/dist/v2/features/localization/locales/zh-tw.js +360 -0
  142. package/dist/v2/features/localization/locales/zh-tw.js.map +1 -0
  143. package/dist/v2/features/localization/translations.d.ts +3 -0
  144. package/dist/v2/features/localization/translations.d.ts.map +1 -1
  145. package/dist/v2/features/localization/translations.js +3 -0
  146. package/dist/v2/features/localization/translations.js.map +1 -1
  147. package/dist/v2/features/modal/Modal.vue.d.ts.map +1 -1
  148. package/dist/v2/features/modal/Modal.vue.js.map +1 -1
  149. package/dist/v2/features/modal/Modal.vue.script.js +1 -0
  150. package/dist/v2/features/modal/Modal.vue.script.js.map +1 -1
  151. package/dist/v2/features/modal/index.d.ts +1 -1
  152. package/dist/v2/features/modal/index.d.ts.map +1 -1
  153. package/dist/v2/features/modal/modal-events.d.ts +3 -1
  154. package/dist/v2/features/modal/modal-events.d.ts.map +1 -1
  155. package/dist/v2/features/modal/modal-events.js +2 -1
  156. package/dist/v2/features/modal/modal-events.js.map +1 -1
  157. package/dist/v2/helpers/handle-hotkeys.d.ts.map +1 -1
  158. package/dist/v2/helpers/handle-hotkeys.js +4 -1
  159. package/dist/v2/helpers/handle-hotkeys.js.map +1 -1
  160. package/dist/v2/workspace-events.d.ts +4 -1
  161. package/dist/v2/workspace-events.d.ts.map +1 -1
  162. package/dist/v2/workspace-events.js +2 -2
  163. package/dist/v2/workspace-events.js.map +1 -1
  164. package/dist/vue-styles.css +51 -51
  165. package/package.json +14 -14
  166. package/dist/v2/blocks/scalar-auth-selector-block/helpers/extract-security-scheme-secrets.d.ts +0 -10
  167. package/dist/v2/blocks/scalar-auth-selector-block/helpers/extract-security-scheme-secrets.d.ts.map +0 -1
  168. package/dist/v2/blocks/scalar-auth-selector-block/helpers/is-allowed-oauth-url.d.ts +0 -3
  169. package/dist/v2/blocks/scalar-auth-selector-block/helpers/is-allowed-oauth-url.d.ts.map +0 -1
  170. package/dist/v2/blocks/scalar-auth-selector-block/helpers/is-allowed-oauth-url.js +0 -8
  171. package/dist/v2/blocks/scalar-auth-selector-block/helpers/is-allowed-oauth-url.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.vue.script.js","names":[],"sources":["../../../../src/v2/features/modal/Modal.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type ModalProps = {\n /** The workspace store must be initialized and passed in */\n workspaceStore: WorkspaceStore\n /** The document must be initialized and passed in. OpenAPI-only — the modal has no AsyncAPI path. */\n document: ComputedRef<OpenApiDocument | null>\n /** The path must be initialized and passed in */\n path: ComputedRef<string | undefined>\n /** The event bus for handling all events */\n eventBus: WorkspaceEventBus\n /** The method must be initialized and passed in */\n method: ComputedRef<string | undefined>\n /** The example name must be initialized and passed in */\n exampleName: ComputedRef<string | undefined>\n /** Whether the active route resolves from `document.webhooks`. */\n isWebhook: ComputedRef<boolean>\n /** Selected anyOf/oneOf request-body variants keyed by schema path */\n requestBodyCompositionSelection: Ref<Record<string, number>>\n /** Controls the visibility of the modal */\n modalState: ModalState\n /** The sidebar state must be initialized and passed in */\n sidebarState: UseModalSidebarReturn\n /** Api client plugins to include in the modal */\n plugins: ClientPlugin[]\n /** Subset of the configuration options for the modal */\n options: MaybeRefOrGetter<ApiClientOptions>\n}\n\n/**\n * Scalar Api Client Modal\n *\n * This component is used to render the API Client Modal\n */\nexport default {}\n</script>\n\n<script setup lang=\"ts\">\nimport type { ScalarListboxOption } from '@scalar/components/listbox'\nimport type { ModalState } from '@scalar/components/modal'\nimport type { ClientPlugin } from '@scalar/oas-utils/helpers'\nimport { ScalarToasts } from '@scalar/use-toasts'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport { type WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getActiveEnvironment } from '@scalar/workspace-store/request-example'\nimport type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport {\n computed,\n onBeforeUnmount,\n ref,\n watch,\n type ComputedRef,\n type MaybeRefOrGetter,\n type Ref,\n} from 'vue'\n\nimport ModalClientContainer from '@/v2/components/modals/ModalClientContainer.vue'\nimport { Sidebar, SidebarToggle } from '@/v2/components/sidebar'\nimport { provideLocalization } from '@/v2/features/localization'\nimport { type UseModalSidebarReturn } from '@/v2/features/modal/hooks/use-modal-sidebar'\nimport { initializeModalEvents } from '@/v2/features/modal/modal-events'\nimport Operation from '@/v2/features/operation/Operation.vue'\nimport { useGlobalHotKeys } from '@/v2/hooks/use-global-hot-keys'\nimport { useScrollLock } from '@/v2/hooks/use-scroll-lock'\nimport type { ApiClientOptions, ApiClientOptionsRef } from '@/v2/types/options'\n\nconst {\n document,\n eventBus,\n modalState,\n options,\n plugins,\n requestBodyCompositionSelection,\n sidebarState,\n workspaceStore,\n} = defineProps<\n Omit<ModalProps, 'options'> & { options: ApiClientOptionsRef }\n>()\n\nconst { translate, locale, direction } = provideLocalization(\n () => options.value.localization,\n)\n\nconst activeWorkspace: ScalarListboxOption = {\n label: 'default',\n id: 'default',\n}\n\n/** Controls the visibility of the sidebar. */\nconst isSidebarOpen = ref(false)\n\n/** Initialize modal events */\ninitializeModalEvents({\n eventBus,\n isSidebarOpen,\n requestBodyCompositionSelection,\n sidebarState,\n modalState,\n store: workspaceStore,\n})\n\n/** Register global hotkeys for the app, passing the workspace event bus and layout state */\nuseGlobalHotKeys(eventBus, 'modal', () => !modalState.open)\n\n/** Clean up on close */\nconst cleanUp = () => {\n eventBus.emit('operation:cancel:request')\n}\n\nconst isLocked = useScrollLock(() => {\n if (typeof window !== 'undefined') {\n return window.document.body\n }\n return null\n})\n\nwatch(\n () => modalState.open,\n (open) => {\n // Make sure scrolling is locked or unlocked when the modal is opened or closed\n isLocked.value = open\n\n if (!open) {\n cleanUp()\n }\n },\n)\n\n// Ensure we add our scalar wrapper class to the headless ui root\nonBeforeUnmount(() => cleanUp())\n\n/** Default sidebar width in pixels. */\nconst DEFAULT_SIDEBAR_WIDTH = 288\n\n/** Width of the sidebar, with fallback to default. */\nconst sidebarWidth = computed(\n () =>\n workspaceStore?.workspace?.['x-scalar-sidebar-width'] ??\n DEFAULT_SIDEBAR_WIDTH,\n)\n\n/** Handler for sidebar width changes. */\nconst handleSidebarWidthUpdate = (width: number) =>\n workspaceStore?.update('x-scalar-sidebar-width', width)\n\n/**\n * Merged environment variables from workspace and document levels.\n * Variables from both sources are combined, with document variables\n * taking precedence in case of naming conflicts.\n */\nconst environment = computed(\n () => getActiveEnvironment(workspaceStore, document.value).environment,\n)\n\ndefineExpose({\n sidebarWidth,\n environment,\n})\n</script>\n\n<template>\n <ModalClientContainer\n :dir=\"direction\"\n :lang=\"locale\"\n :modalState>\n <!-- Toasts -->\n <ScalarToasts />\n\n <!-- If we have a document, path and method, render the operation -->\n <main\n v-if=\"document.value && path?.value && method?.value\"\n class=\"relative flex h-full min-h-0 w-full flex-1\">\n <!--\n The toggle keeps its place inside the panel while the header row is wide\n enough for the address bar to centre itself clear of it. Below `lg` the\n bar fills the row and its method chip reaches the panel edge, so the\n toggle moves onto the backdrop and mirrors the close button in the\n opposite corner, leaving the whole row to the bar.\n -->\n <SidebarToggle\n v-model=\"isSidebarOpen\"\n class=\"absolute top-2 left-4 z-10 max-lg:fixed max-lg:top-2 max-lg:left-2\"\n variant=\"overlay\" />\n <Sidebar\n v-show=\"isSidebarOpen\"\n v-model:sidebarWidth=\"sidebarWidth\"\n :activeWorkspace=\"activeWorkspace\"\n class=\"h-full max-md:absolute! max-md:z-5 max-md:w-full!\"\n :documents=\"[document.value]\"\n :eventBus\n :isDroppable=\"() => false\"\n layout=\"modal\"\n :sidebarState=\"sidebarState.state\"\n :workspaces=\"[]\"\n @selectItem=\"sidebarState.handleSelectItem\"\n @update:sidebarWidth=\"handleSidebarWidthUpdate\" />\n <Operation\n :activeWorkspace=\"activeWorkspace\"\n class=\"flex-1\"\n :document=\"document.value\"\n :documentSlug=\"document.value['x-scalar-navigation']?.name ?? ''\"\n :environment\n :eventBus\n :exampleName=\"exampleName?.value\"\n :isActive=\"modalState.open\"\n :isWebhook=\"isWebhook.value\"\n layout=\"modal\"\n :method=\"method?.value\"\n :options\n :path=\"path?.value\"\n :plugins\n :requestBodyCompositionSelection=\"requestBodyCompositionSelection.value\"\n :workspaceStore />\n </main>\n <!-- Empty state -->\n <div\n v-else\n class=\"flex h-full w-full items-center justify-center\">\n <span class=\"text-c-3\">{{\n translate('apiClient.modal.noDocumentSelected')\n }}</span>\n </div>\n </ModalClientContainer>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8EA,MAAM,EAAE,WAAW,QAAQ,cAAc,0BACjC,QAAA,QAAQ,MAAM,YACtB;EAEA,MAAM,kBAAuC;GAC3C,OAAO;GACP,IAAI;EACN;;EAGA,MAAM,gBAAgB,IAAI,KAAK;;EAG/B,sBAAsB;GACpB,UAAO,QAAA;GACP;GACA,iCAA8B,QAAA;GAC9B,cAAW,QAAA;GACX,YAAS,QAAA;GACT,OAAO,QAAA;EACT,CAAC;;EAGD,iBAAiB,QAAA,UAAU,eAAe,CAAC,QAAA,WAAW,IAAI;;EAG1D,MAAM,gBAAgB;GACpB,QAAA,SAAS,KAAK,0BAA0B;EAC1C;EAEA,MAAM,WAAW,oBAAoB;GACnC,IAAI,OAAO,WAAW,aACpB,OAAO,OAAO,SAAS;GAEzB,OAAO;EACT,CAAC;EAED,YACQ,QAAA,WAAW,OAChB,SAAS;GAER,SAAS,QAAQ;GAEjB,IAAI,CAAC,MACH,QAAQ;EAEZ,CACF;EAGA,sBAAsB,QAAQ,CAAC;;EAG/B,MAAM,wBAAwB;;EAG9B,MAAM,eAAe,eAEjB,QAAA,gBAAgB,YAAY,6BAC5B,qBACJ;;EAGA,MAAM,4BAA4B,UAChC,QAAA,gBAAgB,OAAO,0BAA0B,KAAK;;;;;;EAOxD,MAAM,cAAc,eACZ,qBAAqB,QAAA,gBAAgB,QAAA,SAAS,KAAK,CAAC,CAAC,WAC7D;EAEA,SAAa;GACX;GACA;EACF,CAAC;;uBAIC,YA6DuB,8BAAA;IA5DpB,KAAK,MAAA,SAAA;IACL,MAAM,MAAA,MAAA;IACN,YAAA,QAAA;;2BAEe,CAAhB,YAAgB,MAAA,YAAA,CAAA,GAIR,QAAA,SAAS,SAAS,QAAA,MAAM,SAAS,QAAA,QAAQ,SAAA,UAAA,GADjD,mBA4CO,QA5CP,YA4CO;KAlCL,YAGsB,MAAA,qBAAA,GAAA;kBAFX,cAAA;iFAAa,QAAA;MACtB,OAAM;MACN,SAAQ;;oBACV,YAYoD,MAAA,eAAA,GAAA;MAV1C,cAAc,aAAA;mFAAY,QAAA,SAUZ,wBAAA;MATJ;MAClB,OAAM;MACL,WAAS,CAAG,QAAA,SAAS,KAAK;MAC1B,UAAA,QAAA;MACA,mBAAa;MACd,QAAO;MACN,cAAc,QAAA,aAAa;MAC3B,YAAY,CAAA;MACZ,cAAY,QAAA,aAAa;;;;;;;kBAVlB,cAAA,KAAa,CAAA,CAAA;KAYvB,YAgBoB,mBAAA;MAfA;MAClB,OAAM;MACL,UAAU,QAAA,SAAS;MACnB,cAAc,QAAA,SAAS,MAAK,sBAAA,EAAyB,QAAI;MACzD,aAAA,YAAA;MACA,UAAA,QAAA;MACA,aAAa,QAAA,aAAa;MAC1B,UAAU,QAAA,WAAW;MACrB,WAAW,QAAA,UAAU;MACtB,QAAO;MACN,QAAQ,QAAA,QAAQ;MAChB,SAAA,QAAA;MACA,MAAM,QAAA,MAAM;MACZ,SAAA,QAAA;MACA,iCAAiC,QAAA,gCAAgC;MACjE,gBAAA,QAAA;;;;;;;;;;;;;;;;wBAGL,mBAMM,OANN,YAMM,CAHJ,mBAES,QAFT,YAES,gBADP,MAAA,SAAA,CAAS,CAAA,oCAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"Modal.vue.script.js","names":[],"sources":["../../../../src/v2/features/modal/Modal.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type ModalProps = {\n /** The workspace store must be initialized and passed in */\n workspaceStore: WorkspaceStore\n /** The document must be initialized and passed in. OpenAPI-only — the modal has no AsyncAPI path. */\n document: ComputedRef<OpenApiDocument | null>\n /** The path must be initialized and passed in */\n path: ComputedRef<string | undefined>\n /** The event bus for handling all events */\n eventBus: WorkspaceEventBus\n /** The method must be initialized and passed in */\n method: ComputedRef<string | undefined>\n /** The example name must be initialized and passed in */\n exampleName: ComputedRef<string | undefined>\n /** Whether the active route resolves from `document.webhooks`. */\n isWebhook: ComputedRef<boolean>\n /** Selected anyOf/oneOf request-body variants keyed by schema path */\n requestBodyCompositionSelection: Ref<Record<string, number>>\n /** Controls the visibility of the modal */\n modalState: ModalState\n /** The sidebar state must be initialized and passed in */\n sidebarState: UseModalSidebarReturn\n /** Api client plugins to include in the modal */\n plugins: ClientPlugin[]\n /** Subset of the configuration options for the modal */\n options: MaybeRefOrGetter<ApiClientOptions>\n}\n\n/**\n * Scalar Api Client Modal\n *\n * This component is used to render the API Client Modal\n */\nexport default {}\n</script>\n\n<script setup lang=\"ts\">\nimport type { ScalarListboxOption } from '@scalar/components/listbox'\nimport type { ModalState } from '@scalar/components/modal'\nimport type { ClientPlugin } from '@scalar/oas-utils/helpers'\nimport { ScalarToasts } from '@scalar/use-toasts'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport { type WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getActiveEnvironment } from '@scalar/workspace-store/request-example'\nimport type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport {\n computed,\n onBeforeUnmount,\n ref,\n watch,\n type ComputedRef,\n type MaybeRefOrGetter,\n type Ref,\n} from 'vue'\n\nimport ModalClientContainer from '@/v2/components/modals/ModalClientContainer.vue'\nimport { Sidebar, SidebarToggle } from '@/v2/components/sidebar'\nimport { provideLocalization } from '@/v2/features/localization'\nimport { type UseModalSidebarReturn } from '@/v2/features/modal/hooks/use-modal-sidebar'\nimport { initializeModalEvents } from '@/v2/features/modal/modal-events'\nimport Operation from '@/v2/features/operation/Operation.vue'\nimport { useGlobalHotKeys } from '@/v2/hooks/use-global-hot-keys'\nimport { useScrollLock } from '@/v2/hooks/use-scroll-lock'\nimport type { ApiClientOptions, ApiClientOptionsRef } from '@/v2/types/options'\n\nconst {\n document,\n eventBus,\n modalState,\n options,\n plugins,\n requestBodyCompositionSelection,\n sidebarState,\n workspaceStore,\n} = defineProps<\n Omit<ModalProps, 'options'> & { options: ApiClientOptionsRef }\n>()\n\nconst { translate, locale, direction } = provideLocalization(\n () => options.value.localization,\n)\n\nconst activeWorkspace: ScalarListboxOption = {\n label: 'default',\n id: 'default',\n}\n\n/** Controls the visibility of the sidebar. */\nconst isSidebarOpen = ref(false)\n\n/** Initialize modal events */\ninitializeModalEvents({\n getConfiguredSecuritySchemes: () =>\n options.value.authentication?.securitySchemes,\n eventBus,\n isSidebarOpen,\n requestBodyCompositionSelection,\n sidebarState,\n modalState,\n store: workspaceStore,\n})\n\n/** Register global hotkeys for the app, passing the workspace event bus and layout state */\nuseGlobalHotKeys(eventBus, 'modal', () => !modalState.open)\n\n/** Clean up on close */\nconst cleanUp = () => {\n eventBus.emit('operation:cancel:request')\n}\n\nconst isLocked = useScrollLock(() => {\n if (typeof window !== 'undefined') {\n return window.document.body\n }\n return null\n})\n\nwatch(\n () => modalState.open,\n (open) => {\n // Make sure scrolling is locked or unlocked when the modal is opened or closed\n isLocked.value = open\n\n if (!open) {\n cleanUp()\n }\n },\n)\n\n// Ensure we add our scalar wrapper class to the headless ui root\nonBeforeUnmount(() => cleanUp())\n\n/** Default sidebar width in pixels. */\nconst DEFAULT_SIDEBAR_WIDTH = 288\n\n/** Width of the sidebar, with fallback to default. */\nconst sidebarWidth = computed(\n () =>\n workspaceStore?.workspace?.['x-scalar-sidebar-width'] ??\n DEFAULT_SIDEBAR_WIDTH,\n)\n\n/** Handler for sidebar width changes. */\nconst handleSidebarWidthUpdate = (width: number) =>\n workspaceStore?.update('x-scalar-sidebar-width', width)\n\n/**\n * Merged environment variables from workspace and document levels.\n * Variables from both sources are combined, with document variables\n * taking precedence in case of naming conflicts.\n */\nconst environment = computed(\n () => getActiveEnvironment(workspaceStore, document.value).environment,\n)\n\ndefineExpose({\n sidebarWidth,\n environment,\n})\n</script>\n\n<template>\n <ModalClientContainer\n :dir=\"direction\"\n :lang=\"locale\"\n :modalState>\n <!-- Toasts -->\n <ScalarToasts />\n\n <!-- If we have a document, path and method, render the operation -->\n <main\n v-if=\"document.value && path?.value && method?.value\"\n class=\"relative flex h-full min-h-0 w-full flex-1\">\n <!--\n The toggle keeps its place inside the panel while the header row is wide\n enough for the address bar to centre itself clear of it. Below `lg` the\n bar fills the row and its method chip reaches the panel edge, so the\n toggle moves onto the backdrop and mirrors the close button in the\n opposite corner, leaving the whole row to the bar.\n -->\n <SidebarToggle\n v-model=\"isSidebarOpen\"\n class=\"absolute top-2 left-4 z-10 max-lg:fixed max-lg:top-2 max-lg:left-2\"\n variant=\"overlay\" />\n <Sidebar\n v-show=\"isSidebarOpen\"\n v-model:sidebarWidth=\"sidebarWidth\"\n :activeWorkspace=\"activeWorkspace\"\n class=\"h-full max-md:absolute! max-md:z-5 max-md:w-full!\"\n :documents=\"[document.value]\"\n :eventBus\n :isDroppable=\"() => false\"\n layout=\"modal\"\n :sidebarState=\"sidebarState.state\"\n :workspaces=\"[]\"\n @selectItem=\"sidebarState.handleSelectItem\"\n @update:sidebarWidth=\"handleSidebarWidthUpdate\" />\n <Operation\n :activeWorkspace=\"activeWorkspace\"\n class=\"flex-1\"\n :document=\"document.value\"\n :documentSlug=\"document.value['x-scalar-navigation']?.name ?? ''\"\n :environment\n :eventBus\n :exampleName=\"exampleName?.value\"\n :isActive=\"modalState.open\"\n :isWebhook=\"isWebhook.value\"\n layout=\"modal\"\n :method=\"method?.value\"\n :options\n :path=\"path?.value\"\n :plugins\n :requestBodyCompositionSelection=\"requestBodyCompositionSelection.value\"\n :workspaceStore />\n </main>\n <!-- Empty state -->\n <div\n v-else\n class=\"flex h-full w-full items-center justify-center\">\n <span class=\"text-c-3\">{{\n translate('apiClient.modal.noDocumentSelected')\n }}</span>\n </div>\n </ModalClientContainer>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8EA,MAAM,EAAE,WAAW,QAAQ,cAAc,0BACjC,QAAA,QAAQ,MAAM,YACtB;EAEA,MAAM,kBAAuC;GAC3C,OAAO;GACP,IAAI;EACN;;EAGA,MAAM,gBAAgB,IAAI,KAAK;;EAG/B,sBAAsB;GACpB,oCACE,QAAA,QAAQ,MAAM,gBAAgB;GAChC,UAAO,QAAA;GACP;GACA,iCAA8B,QAAA;GAC9B,cAAW,QAAA;GACX,YAAS,QAAA;GACT,OAAO,QAAA;EACT,CAAC;;EAGD,iBAAiB,QAAA,UAAU,eAAe,CAAC,QAAA,WAAW,IAAI;;EAG1D,MAAM,gBAAgB;GACpB,QAAA,SAAS,KAAK,0BAA0B;EAC1C;EAEA,MAAM,WAAW,oBAAoB;GACnC,IAAI,OAAO,WAAW,aACpB,OAAO,OAAO,SAAS;GAEzB,OAAO;EACT,CAAC;EAED,YACQ,QAAA,WAAW,OAChB,SAAS;GAER,SAAS,QAAQ;GAEjB,IAAI,CAAC,MACH,QAAQ;EAEZ,CACF;EAGA,sBAAsB,QAAQ,CAAC;;EAG/B,MAAM,wBAAwB;;EAG9B,MAAM,eAAe,eAEjB,QAAA,gBAAgB,YAAY,6BAC5B,qBACJ;;EAGA,MAAM,4BAA4B,UAChC,QAAA,gBAAgB,OAAO,0BAA0B,KAAK;;;;;;EAOxD,MAAM,cAAc,eACZ,qBAAqB,QAAA,gBAAgB,QAAA,SAAS,KAAK,CAAC,CAAC,WAC7D;EAEA,SAAa;GACX;GACA;EACF,CAAC;;uBAIC,YA6DuB,8BAAA;IA5DpB,KAAK,MAAA,SAAA;IACL,MAAM,MAAA,MAAA;IACN,YAAA,QAAA;;2BAEe,CAAhB,YAAgB,MAAA,YAAA,CAAA,GAIR,QAAA,SAAS,SAAS,QAAA,MAAM,SAAS,QAAA,QAAQ,SAAA,UAAA,GADjD,mBA4CO,QA5CP,YA4CO;KAlCL,YAGsB,MAAA,qBAAA,GAAA;kBAFX,cAAA;iFAAa,QAAA;MACtB,OAAM;MACN,SAAQ;;oBACV,YAYoD,MAAA,eAAA,GAAA;MAV1C,cAAc,aAAA;mFAAY,QAAA,SAUZ,wBAAA;MATJ;MAClB,OAAM;MACL,WAAS,CAAG,QAAA,SAAS,KAAK;MAC1B,UAAA,QAAA;MACA,mBAAa;MACd,QAAO;MACN,cAAc,QAAA,aAAa;MAC3B,YAAY,CAAA;MACZ,cAAY,QAAA,aAAa;;;;;;;kBAVlB,cAAA,KAAa,CAAA,CAAA;KAYvB,YAgBoB,mBAAA;MAfA;MAClB,OAAM;MACL,UAAU,QAAA,SAAS;MACnB,cAAc,QAAA,SAAS,MAAK,sBAAA,EAAyB,QAAI;MACzD,aAAA,YAAA;MACA,UAAA,QAAA;MACA,aAAa,QAAA,aAAa;MAC1B,UAAU,QAAA,WAAW;MACrB,WAAW,QAAA,UAAU;MACtB,QAAO;MACN,QAAQ,QAAA,QAAQ;MAChB,SAAA,QAAA;MACA,MAAM,QAAA,MAAM;MACZ,SAAA,QAAA;MACA,iCAAiC,QAAA,gCAAgC;MACjE,gBAAA,QAAA;;;;;;;;;;;;;;;;wBAGL,mBAMM,OANN,YAMM,CAHJ,mBAES,QAFT,YAES,gBADP,MAAA,SAAA,CAAS,CAAA,oCAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA"}
@@ -1,6 +1,6 @@
1
+ export type { ApiClientOptions } from '../../../v2/types/options';
1
2
  export { type ApiClientModal, createApiClientModal } from './helpers/create-api-client-modal.js';
2
3
  export { mapHiddenClientsConfig } from './helpers/map-hidden-clients-config.js';
3
4
  export type { RoutePayload } from './helpers/resolve-route-parameters.js';
4
- export type { ApiClientOptions } from '../../../v2/types/options';
5
5
  export { initializeModalEvents } from './modal-events.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/v2/features/modal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,YAAY,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/v2/features/modal/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,OAAO,EAAE,KAAK,cAAc,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,YAAY,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1,14 +1,16 @@
1
1
  import type { ModalState } from '@scalar/components/modal';
2
+ import type { AuthenticationConfiguration } from '@scalar/types/api-reference';
2
3
  import type { WorkspaceStore } from '@scalar/workspace-store/client';
3
4
  import type { WorkspaceEventBus } from '@scalar/workspace-store/events';
4
5
  import { type Ref } from 'vue';
5
6
  import type { UseModalSidebarReturn } from '../../../v2/features/modal/hooks/use-modal-sidebar.js';
6
- export declare function initializeModalEvents({ eventBus, isSidebarOpen, requestBodyCompositionSelection, sidebarState, modalState, store, }: {
7
+ export declare function initializeModalEvents({ eventBus, isSidebarOpen, requestBodyCompositionSelection, sidebarState, modalState, store, getConfiguredSecuritySchemes, }: {
7
8
  eventBus: WorkspaceEventBus;
8
9
  isSidebarOpen: Ref<boolean>;
9
10
  requestBodyCompositionSelection: Ref<Record<string, number>>;
10
11
  sidebarState: UseModalSidebarReturn;
11
12
  modalState: ModalState;
12
13
  store: WorkspaceStore;
14
+ getConfiguredSecuritySchemes?: () => AuthenticationConfiguration['securitySchemes'];
13
15
  }): void;
14
16
  //# sourceMappingURL=modal-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"modal-events.d.ts","sourceRoot":"","sources":["../../../../src/v2/features/modal/modal-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAGvE,OAAO,EAAE,KAAK,GAAG,EAAO,MAAM,KAAK,CAAA;AAEnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAA;AAOxF,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,aAAa,EACb,+BAA+B,EAC/B,YAAY,EACZ,UAAU,EACV,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC3B,+BAA+B,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5D,YAAY,EAAE,qBAAqB,CAAA;IACnC,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,cAAc,CAAA;CACtB,QAiGA"}
1
+ {"version":3,"file":"modal-events.d.ts","sourceRoot":"","sources":["../../../../src/v2/features/modal/modal-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAGvE,OAAO,EAAE,KAAK,GAAG,EAAO,MAAM,KAAK,CAAA;AAEnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAA;AAOxF,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,aAAa,EACb,+BAA+B,EAC/B,YAAY,EACZ,UAAU,EACV,KAAK,EACL,4BAA4B,GAC7B,EAAE;IACD,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC3B,+BAA+B,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5D,YAAY,EAAE,qBAAqB,CAAA;IACnC,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,cAAc,CAAA;IACrB,4BAA4B,CAAC,EAAE,MAAM,2BAA2B,CAAC,iBAAiB,CAAC,CAAA;CACpF,QAkGA"}
@@ -3,9 +3,10 @@ import { ref } from "vue";
3
3
  import { isOpenApiDocument } from "@scalar/workspace-store/schemas/type-guards";
4
4
  //#region src/v2/features/modal/modal-events.ts
5
5
  var EMPTY_REQUEST_BODY_COMPOSITION_SELECTION = Object.freeze({});
6
- function initializeModalEvents({ eventBus, isSidebarOpen, requestBodyCompositionSelection, sidebarState, modalState, store }) {
6
+ function initializeModalEvents({ eventBus, isSidebarOpen, requestBodyCompositionSelection, sidebarState, modalState, store, getConfiguredSecuritySchemes }) {
7
7
  /** Initialize workspace event handlers */
8
8
  initializeWorkspaceEventHandlers({
9
+ getConfiguredSecuritySchemes,
9
10
  eventBus,
10
11
  store: ref(store),
11
12
  hooks: { "operation:create:draft-example": { onAfterExecute: ({ documentName, meta: { path, method }, exampleName }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"modal-events.js","names":[],"sources":["../../../../src/v2/features/modal/modal-events.ts"],"sourcesContent":["import type { ModalState } from '@scalar/components/modal'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { TraversedEntry } from '@scalar/workspace-store/schemas/navigation'\nimport { isOpenApiDocument } from '@scalar/workspace-store/schemas/type-guards'\nimport { type Ref, ref } from 'vue'\n\nimport type { UseModalSidebarReturn } from '@/v2/features/modal/hooks/use-modal-sidebar'\nimport { initializeWorkspaceEventHandlers } from '@/v2/workspace-events'\n\n// Frozen so this shared fallback cannot be mutated in place, which would leak a stale selection into\n// every future open that falls back to empty. Callers only ever reassign the ref, never mutate it.\nconst EMPTY_REQUEST_BODY_COMPOSITION_SELECTION: Record<string, number> = Object.freeze({})\n\nexport function initializeModalEvents({\n eventBus,\n isSidebarOpen,\n requestBodyCompositionSelection,\n sidebarState,\n modalState,\n store,\n}: {\n eventBus: WorkspaceEventBus\n isSidebarOpen: Ref<boolean>\n requestBodyCompositionSelection: Ref<Record<string, number>>\n sidebarState: UseModalSidebarReturn\n modalState: ModalState\n store: WorkspaceStore\n}) {\n /** Initialize workspace event handlers */\n initializeWorkspaceEventHandlers({\n eventBus,\n store: ref(store),\n hooks: {\n 'operation:create:draft-example': {\n onAfterExecute: ({ documentName, meta: { path, method }, exampleName }): void => {\n // The new example must be in the sidebar before its location can be selected.\n store.buildSidebar(documentName)\n const entry = sidebarState.getEntryByLocation({\n document: documentName,\n path,\n method,\n example: exampleName,\n })\n if (entry) {\n sidebarState.handleSelectItem(entry.id)\n }\n },\n },\n },\n })\n\n //------------------------------------------------------------------------------------\n // Navigation Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('scroll-to:nav-item', ({ id }) => sidebarState.handleSelectItem(id))\n\n //------------------------------------------------------------------------------------\n // UI Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('ui:toggle:sidebar', () => (isSidebarOpen.value = !isSidebarOpen.value))\n eventBus.on('ui:close:client-modal', () => modalState.hide())\n eventBus.on('ui:open:client-modal', (payload) => {\n // Every open re-establishes the selection (falling back to empty), so the modal no longer needs\n // to reset it on close.\n const nextRequestBodyCompositionSelection: Record<string, number> =\n payload && 'requestBodyCompositionSelection' in payload && payload.requestBodyCompositionSelection\n ? payload.requestBodyCompositionSelection\n : EMPTY_REQUEST_BODY_COMPOSITION_SELECTION\n\n // Just open the modal\n if (!payload) {\n requestBodyCompositionSelection.value = nextRequestBodyCompositionSelection\n modalState.show()\n return\n }\n\n const previousSelectedId = sidebarState.state.selectedItem.value\n\n // We route to the exact ID\n if ('id' in payload && payload.id) {\n let targetId = payload.id\n\n // If exampleName is provided, try to find the specific example entry\n if ('exampleName' in payload && payload.exampleName) {\n const operationEntry = sidebarState.state.getEntryById(payload.id)\n\n // Try to find the specific example in the operation's children\n if (operationEntry && 'children' in operationEntry && operationEntry.children) {\n const exampleEntry = operationEntry.children.find(\n (child: TraversedEntry) => child.type === 'example' && child.name === payload.exampleName,\n )\n if (exampleEntry) {\n targetId = exampleEntry.id\n }\n }\n }\n\n sidebarState.handleSelectItem(targetId)\n }\n // We must find the ID first from the entries\n else if ('method' in payload && 'path' in payload) {\n const activeDoc = store.workspace.activeDocument\n sidebarState.handleSelectItem(\n sidebarState.getEntryByLocation({\n document: isOpenApiDocument(activeDoc) ? (activeDoc['x-scalar-navigation']?.id ?? '') : '',\n path: payload.path,\n method: payload.method,\n example: payload.exampleName,\n })?.id ?? '',\n )\n }\n\n // Apply the selection after routing so the request body compares it with the selection used\n // for this operation, rather than briefly resetting the operation that was previously open.\n // Reopening the entry already on screen routes nowhere, so a new selection would read as a\n // manual branch switch and discard the edited body.\n const isReopeningVisibleEntry = modalState.open && sidebarState.state.selectedItem.value === previousSelectedId\n\n if (!isReopeningVisibleEntry) {\n requestBodyCompositionSelection.value = nextRequestBodyCompositionSelection\n }\n\n modalState.show()\n })\n}\n"],"mappings":";;;;AAYA,IAAM,2CAAmE,OAAO,OAAO,CAAC,CAAC;AAEzF,SAAgB,sBAAsB,EACpC,UACA,eACA,iCACA,cACA,YACA,SAQC;;CAED,iCAAiC;EAC/B;EACA,OAAO,IAAI,KAAK;EAChB,OAAO,EACL,kCAAkC,EAChC,iBAAiB,EAAE,cAAc,MAAM,EAAE,MAAM,UAAU,kBAAwB;GAE/E,MAAM,aAAa,YAAY;GAC/B,MAAM,QAAQ,aAAa,mBAAmB;IAC5C,UAAU;IACV;IACA;IACA,SAAS;GACX,CAAC;GACD,IAAI,OACF,aAAa,iBAAiB,MAAM,EAAE;EAE1C,EACF,EACF;CACF,CAAC;CAKD,SAAS,GAAG,uBAAuB,EAAE,SAAS,aAAa,iBAAiB,EAAE,CAAC;CAK/E,SAAS,GAAG,2BAA4B,cAAc,QAAQ,CAAC,cAAc,KAAM;CACnF,SAAS,GAAG,+BAA+B,WAAW,KAAK,CAAC;CAC5D,SAAS,GAAG,yBAAyB,YAAY;EAG/C,MAAM,sCACJ,WAAW,qCAAqC,WAAW,QAAQ,kCAC/D,QAAQ,kCACR;EAGN,IAAI,CAAC,SAAS;GACZ,gCAAgC,QAAQ;GACxC,WAAW,KAAK;GAChB;EACF;EAEA,MAAM,qBAAqB,aAAa,MAAM,aAAa;EAG3D,IAAI,QAAQ,WAAW,QAAQ,IAAI;GACjC,IAAI,WAAW,QAAQ;GAGvB,IAAI,iBAAiB,WAAW,QAAQ,aAAa;IACnD,MAAM,iBAAiB,aAAa,MAAM,aAAa,QAAQ,EAAE;IAGjE,IAAI,kBAAkB,cAAc,kBAAkB,eAAe,UAAU;KAC7E,MAAM,eAAe,eAAe,SAAS,MAC1C,UAA0B,MAAM,SAAS,aAAa,MAAM,SAAS,QAAQ,WAChF;KACA,IAAI,cACF,WAAW,aAAa;IAE5B;GACF;GAEA,aAAa,iBAAiB,QAAQ;EACxC,OAEK,IAAI,YAAY,WAAW,UAAU,SAAS;GACjD,MAAM,YAAY,MAAM,UAAU;GAClC,aAAa,iBACX,aAAa,mBAAmB;IAC9B,UAAU,kBAAkB,SAAS,IAAK,UAAU,sBAAsB,EAAE,MAAM,KAAM;IACxF,MAAM,QAAQ;IACd,QAAQ,QAAQ;IAChB,SAAS,QAAQ;GACnB,CAAC,CAAC,EAAE,MAAM,EACZ;EACF;EAQA,IAAI,EAF4B,WAAW,QAAQ,aAAa,MAAM,aAAa,UAAU,qBAG3F,gCAAgC,QAAQ;EAG1C,WAAW,KAAK;CAClB,CAAC;AACH"}
1
+ {"version":3,"file":"modal-events.js","names":[],"sources":["../../../../src/v2/features/modal/modal-events.ts"],"sourcesContent":["import type { ModalState } from '@scalar/components/modal'\nimport type { AuthenticationConfiguration } from '@scalar/types/api-reference'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { TraversedEntry } from '@scalar/workspace-store/schemas/navigation'\nimport { isOpenApiDocument } from '@scalar/workspace-store/schemas/type-guards'\nimport { type Ref, ref } from 'vue'\n\nimport type { UseModalSidebarReturn } from '@/v2/features/modal/hooks/use-modal-sidebar'\nimport { initializeWorkspaceEventHandlers } from '@/v2/workspace-events'\n\n// Frozen so this shared fallback cannot be mutated in place, which would leak a stale selection into\n// every future open that falls back to empty. Callers only ever reassign the ref, never mutate it.\nconst EMPTY_REQUEST_BODY_COMPOSITION_SELECTION: Record<string, number> = Object.freeze({})\n\nexport function initializeModalEvents({\n eventBus,\n isSidebarOpen,\n requestBodyCompositionSelection,\n sidebarState,\n modalState,\n store,\n getConfiguredSecuritySchemes,\n}: {\n eventBus: WorkspaceEventBus\n isSidebarOpen: Ref<boolean>\n requestBodyCompositionSelection: Ref<Record<string, number>>\n sidebarState: UseModalSidebarReturn\n modalState: ModalState\n store: WorkspaceStore\n getConfiguredSecuritySchemes?: () => AuthenticationConfiguration['securitySchemes']\n}) {\n /** Initialize workspace event handlers */\n initializeWorkspaceEventHandlers({\n getConfiguredSecuritySchemes,\n eventBus,\n store: ref(store),\n hooks: {\n 'operation:create:draft-example': {\n onAfterExecute: ({ documentName, meta: { path, method }, exampleName }): void => {\n // The new example must be in the sidebar before its location can be selected.\n store.buildSidebar(documentName)\n const entry = sidebarState.getEntryByLocation({\n document: documentName,\n path,\n method,\n example: exampleName,\n })\n if (entry) {\n sidebarState.handleSelectItem(entry.id)\n }\n },\n },\n },\n })\n\n //------------------------------------------------------------------------------------\n // Navigation Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('scroll-to:nav-item', ({ id }) => sidebarState.handleSelectItem(id))\n\n //------------------------------------------------------------------------------------\n // UI Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('ui:toggle:sidebar', () => (isSidebarOpen.value = !isSidebarOpen.value))\n eventBus.on('ui:close:client-modal', () => modalState.hide())\n eventBus.on('ui:open:client-modal', (payload) => {\n // Every open re-establishes the selection (falling back to empty), so the modal no longer needs\n // to reset it on close.\n const nextRequestBodyCompositionSelection: Record<string, number> =\n payload && 'requestBodyCompositionSelection' in payload && payload.requestBodyCompositionSelection\n ? payload.requestBodyCompositionSelection\n : EMPTY_REQUEST_BODY_COMPOSITION_SELECTION\n\n // Just open the modal\n if (!payload) {\n requestBodyCompositionSelection.value = nextRequestBodyCompositionSelection\n modalState.show()\n return\n }\n\n const previousSelectedId = sidebarState.state.selectedItem.value\n\n // We route to the exact ID\n if ('id' in payload && payload.id) {\n let targetId = payload.id\n\n // If exampleName is provided, try to find the specific example entry\n if ('exampleName' in payload && payload.exampleName) {\n const operationEntry = sidebarState.state.getEntryById(payload.id)\n\n // Try to find the specific example in the operation's children\n if (operationEntry && 'children' in operationEntry && operationEntry.children) {\n const exampleEntry = operationEntry.children.find(\n (child: TraversedEntry) => child.type === 'example' && child.name === payload.exampleName,\n )\n if (exampleEntry) {\n targetId = exampleEntry.id\n }\n }\n }\n\n sidebarState.handleSelectItem(targetId)\n }\n // We must find the ID first from the entries\n else if ('method' in payload && 'path' in payload) {\n const activeDoc = store.workspace.activeDocument\n sidebarState.handleSelectItem(\n sidebarState.getEntryByLocation({\n document: isOpenApiDocument(activeDoc) ? (activeDoc['x-scalar-navigation']?.id ?? '') : '',\n path: payload.path,\n method: payload.method,\n example: payload.exampleName,\n })?.id ?? '',\n )\n }\n\n // Apply the selection after routing so the request body compares it with the selection used\n // for this operation, rather than briefly resetting the operation that was previously open.\n // Reopening the entry already on screen routes nowhere, so a new selection would read as a\n // manual branch switch and discard the edited body.\n const isReopeningVisibleEntry = modalState.open && sidebarState.state.selectedItem.value === previousSelectedId\n\n if (!isReopeningVisibleEntry) {\n requestBodyCompositionSelection.value = nextRequestBodyCompositionSelection\n }\n\n modalState.show()\n })\n}\n"],"mappings":";;;;AAaA,IAAM,2CAAmE,OAAO,OAAO,CAAC,CAAC;AAEzF,SAAgB,sBAAsB,EACpC,UACA,eACA,iCACA,cACA,YACA,OACA,gCASC;;CAED,iCAAiC;EAC/B;EACA;EACA,OAAO,IAAI,KAAK;EAChB,OAAO,EACL,kCAAkC,EAChC,iBAAiB,EAAE,cAAc,MAAM,EAAE,MAAM,UAAU,kBAAwB;GAE/E,MAAM,aAAa,YAAY;GAC/B,MAAM,QAAQ,aAAa,mBAAmB;IAC5C,UAAU;IACV;IACA;IACA,SAAS;GACX,CAAC;GACD,IAAI,OACF,aAAa,iBAAiB,MAAM,EAAE;EAE1C,EACF,EACF;CACF,CAAC;CAKD,SAAS,GAAG,uBAAuB,EAAE,SAAS,aAAa,iBAAiB,EAAE,CAAC;CAK/E,SAAS,GAAG,2BAA4B,cAAc,QAAQ,CAAC,cAAc,KAAM;CACnF,SAAS,GAAG,+BAA+B,WAAW,KAAK,CAAC;CAC5D,SAAS,GAAG,yBAAyB,YAAY;EAG/C,MAAM,sCACJ,WAAW,qCAAqC,WAAW,QAAQ,kCAC/D,QAAQ,kCACR;EAGN,IAAI,CAAC,SAAS;GACZ,gCAAgC,QAAQ;GACxC,WAAW,KAAK;GAChB;EACF;EAEA,MAAM,qBAAqB,aAAa,MAAM,aAAa;EAG3D,IAAI,QAAQ,WAAW,QAAQ,IAAI;GACjC,IAAI,WAAW,QAAQ;GAGvB,IAAI,iBAAiB,WAAW,QAAQ,aAAa;IACnD,MAAM,iBAAiB,aAAa,MAAM,aAAa,QAAQ,EAAE;IAGjE,IAAI,kBAAkB,cAAc,kBAAkB,eAAe,UAAU;KAC7E,MAAM,eAAe,eAAe,SAAS,MAC1C,UAA0B,MAAM,SAAS,aAAa,MAAM,SAAS,QAAQ,WAChF;KACA,IAAI,cACF,WAAW,aAAa;IAE5B;GACF;GAEA,aAAa,iBAAiB,QAAQ;EACxC,OAEK,IAAI,YAAY,WAAW,UAAU,SAAS;GACjD,MAAM,YAAY,MAAM,UAAU;GAClC,aAAa,iBACX,aAAa,mBAAmB;IAC9B,UAAU,kBAAkB,SAAS,IAAK,UAAU,sBAAsB,EAAE,MAAM,KAAM;IACxF,MAAM,QAAQ;IACd,QAAQ,QAAQ;IAChB,SAAS,QAAQ;GACnB,CAAC,CAAC,EAAE,MAAM,EACZ;EACF;EAQA,IAAI,EAF4B,WAAW,QAAQ,aAAa,MAAM,aAAa,UAAU,qBAG3F,gCAAgC,QAAQ;EAG1C,WAAW,KAAK;CAClB,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"handle-hotkeys.d.ts","sourceRoot":"","sources":["../../../src/v2/helpers/handle-hotkeys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAE3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAgFrD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,aAAa,EAAE,UAAU,iBAAiB,EAAE,QAAQ,YAAY,KAAG,IAkCvG,CAAA"}
1
+ {"version":3,"file":"handle-hotkeys.d.ts","sourceRoot":"","sources":["../../../src/v2/helpers/handle-hotkeys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAE3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAqFrD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,aAAa,EAAE,UAAU,iBAAiB,EAAE,QAAQ,YAAY,KAAG,IAkCvG,CAAA"}
@@ -116,7 +116,10 @@ var INPUT_ALLOWED_KEYS = /* @__PURE__ */ new Set([
116
116
  * Checks if all required modifiers are pressed.
117
117
  * Resolves 'default' to metaKey (macOS) or ctrlKey (Windows/Linux).
118
118
  */
119
- var areModifiersPressed = (event, modifiers) => modifiers.length > 0 && modifiers.map((modifier) => modifier === "default" ? isMacOS() ? "metaKey" : "ctrlKey" : modifier).every((key) => event[key] === true);
119
+ var areModifiersPressed = (event, modifiers) => modifiers.length > 0 && modifiers.map((modifier) => {
120
+ if (modifier === "default") return isMacOS() ? "metaKey" : "ctrlKey";
121
+ return modifier;
122
+ }).every((key) => event[key] === true);
120
123
  /**
121
124
  * Determines if the event target is an editable element where hotkeys should be blocked.
122
125
  * Returns true if we should block the hotkey, false otherwise.
@@ -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":"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"}
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) => {\n if (modifier === 'default') {\n return isMacOS() ? 'metaKey' : 'ctrlKey'\n }\n return modifier\n })\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,3 +1,4 @@
1
+ import type { AuthenticationConfiguration } from '@scalar/types/api-reference';
1
2
  import type { WorkspaceStore } from '@scalar/workspace-store/client';
2
3
  import type { ApiReferenceEvents, WorkspaceEventBus } from '@scalar/workspace-store/events';
3
4
  import { type Ref } from 'vue';
@@ -16,10 +17,12 @@ type Hooks = {
16
17
  * @param store The WorkspaceStore instance
17
18
  * @param hooks Object containing optional before/after hooks for each event
18
19
  */
19
- export declare function initializeWorkspaceEventHandlers({ eventBus: bus, store, hooks, }: {
20
+ export declare function initializeWorkspaceEventHandlers({ eventBus: bus, store, hooks, getConfiguredSecuritySchemes, }: {
20
21
  eventBus: WorkspaceEventBus;
21
22
  store: Ref<WorkspaceStore | null>;
22
23
  hooks: Hooks;
24
+ /** Read current defaults when a name is edited, including after a configuration change. */
25
+ getConfiguredSecuritySchemes?: () => AuthenticationConfiguration['securitySchemes'];
23
26
  }): () => void;
24
27
  export {};
25
28
  //# sourceMappingURL=workspace-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-events.d.ts","sourceRoot":"","sources":["../../src/v2/workspace-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAkB,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAE3G,OAAO,EAAE,KAAK,GAAG,EAAY,MAAM,KAAK,CAAA;AAExC,KAAK,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,IAAI,OAAO,CAAC;IACtD,eAAe,EAAE,CACf,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAC3B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;IAClF,cAAc,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzE,CAAC,CAAA;AAEF,KAAK,KAAK,GAAG;KACV,GAAG,IAAI,MAAM,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;CAC9C,CAAA;AA6BD;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAAC,EAC/C,QAAQ,EAAE,GAAG,EACb,KAAK,EACL,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,KAAK,EAAE,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IACjC,KAAK,EAAE,KAAK,CAAA;CACb,GAAG,MAAM,IAAI,CAsVb"}
1
+ {"version":3,"file":"workspace-events.d.ts","sourceRoot":"","sources":["../../src/v2/workspace-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAkB,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAE3G,OAAO,EAAE,KAAK,GAAG,EAAY,MAAM,KAAK,CAAA;AAExC,KAAK,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,IAAI,OAAO,CAAC;IACtD,eAAe,EAAE,CACf,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAC3B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;IAClF,cAAc,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzE,CAAC,CAAA;AAEF,KAAK,KAAK,GAAG;KACV,GAAG,IAAI,MAAM,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;CAC9C,CAAA;AA6BD;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAAC,EAC/C,QAAQ,EAAE,GAAG,EACb,KAAK,EACL,KAAK,EACL,4BAA4B,GAC7B,EAAE;IACD,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,KAAK,EAAE,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IACjC,KAAK,EAAE,KAAK,CAAA;IACZ,2FAA2F;IAC3F,4BAA4B,CAAC,EAAE,MAAM,2BAA2B,CAAC,iBAAiB,CAAC,CAAA;CACpF,GAAG,MAAM,IAAI,CA0Vb"}
@@ -28,7 +28,7 @@ var withHook = (event, fn, hooks) => {
28
28
  * @param store The WorkspaceStore instance
29
29
  * @param hooks Object containing optional before/after hooks for each event
30
30
  */
31
- function initializeWorkspaceEventHandlers({ eventBus: bus, store, hooks }) {
31
+ function initializeWorkspaceEventHandlers({ eventBus: bus, store, hooks, getConfiguredSecuritySchemes }) {
32
32
  const subscriptions = [];
33
33
  const eventBus = { on: (event, listener) => {
34
34
  const unsubscribe = bus.on(event, listener);
@@ -69,7 +69,7 @@ function initializeWorkspaceEventHandlers({ eventBus: bus, store, hooks }) {
69
69
  });
70
70
  eventBus.on("auth:delete:security-scheme", (payload) => withHook("auth:delete:security-scheme", mutators.value.active().auth.deleteSecurityScheme, hooks)(payload));
71
71
  eventBus.on("auth:update:active-index", (payload) => withHook("auth:update:active-index", mutators.value.active().auth.updateSelectedAuthTab, hooks)(payload));
72
- eventBus.on("auth:update:security-scheme", (payload) => withHook("auth:update:security-scheme", mutators.value.active().auth.updateSecurityScheme, hooks)(payload));
72
+ eventBus.on("auth:update:security-scheme", (payload) => withHook("auth:update:security-scheme", (data) => mutators.value.active().auth.updateSecurityScheme(data, getConfiguredSecuritySchemes?.()), hooks)(payload));
73
73
  eventBus.on("auth:update:selected-scopes", (payload) => withHook("auth:update:selected-scopes", mutators.value.active().auth.updateSelectedScopes, hooks)(payload));
74
74
  eventBus.on("auth:upsert:scopes", (payload) => withHook("auth:upsert:scopes", mutators.value.active().auth.upsertScope, hooks)(payload));
75
75
  eventBus.on("auth:delete:scopes", (payload) => withHook("auth:delete:scopes", mutators.value.active().auth.deleteScope, hooks)(payload));
@@ -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: bus,\n store,\n hooks,\n}: {\n eventBus: WorkspaceEventBus\n store: Ref<WorkspaceStore | null>\n hooks: Hooks\n}): () => void {\n const subscriptions: (() => void)[] = []\n const eventBus: Pick<WorkspaceEventBus, 'on'> = {\n on: (event, listener) => {\n const unsubscribe = bus.on(event, listener)\n subscriptions.push(unsubscribe)\n return unsubscribe\n },\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:reset:security-scheme-secret', (payload) =>\n withHook(\n 'auth:reset:security-scheme-secret',\n mutators.value.active().auth.resetSecuritySchemeSecret,\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 return () => subscriptions.splice(0).forEach((unsubscribe) => unsubscribe())\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"workspace-events.js","names":[],"sources":["../../src/v2/workspace-events.ts"],"sourcesContent":["import type { AuthenticationConfiguration } from '@scalar/types/api-reference'\nimport 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: bus,\n store,\n hooks,\n getConfiguredSecuritySchemes,\n}: {\n eventBus: WorkspaceEventBus\n store: Ref<WorkspaceStore | null>\n hooks: Hooks\n /** Read current defaults when a name is edited, including after a configuration change. */\n getConfiguredSecuritySchemes?: () => AuthenticationConfiguration['securitySchemes']\n}): () => void {\n const subscriptions: (() => void)[] = []\n const eventBus: Pick<WorkspaceEventBus, 'on'> = {\n on: (event, listener) => {\n const unsubscribe = bus.on(event, listener)\n subscriptions.push(unsubscribe)\n return unsubscribe\n },\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(\n 'auth:update:security-scheme',\n (data) => mutators.value.active().auth.updateSecurityScheme(data, getConfiguredSecuritySchemes?.()),\n hooks,\n )(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:reset:security-scheme-secret', (payload) =>\n withHook(\n 'auth:reset:security-scheme-secret',\n mutators.value.active().auth.resetSecuritySchemeSecret,\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 return () => subscriptions.splice(0).forEach((unsubscribe) => unsubscribe())\n}\n"],"mappings":";;;;;;;;;;;;;;AA4BA,IAAM,YACJ,OACA,IACA,UACG;CACH,OAAO,OAAO,SAAgC;EAE5C,MAAM,SAAU,MAAM,MAAM,MAAM,EAAE,kBAAkB,IAAI,KAAM;EAEhE,MAAM,GAAG,MAAM;EAEf,MAAM,MAAM,MAAM,EAAE,iBAAiB,MAAM;EAC3C,OAAO;CACT;AACF;;;;;;;;;AAUA,SAAgB,iCAAiC,EAC/C,UAAU,KACV,OACA,OACA,gCAOa;CACb,MAAM,gBAAgC,CAAC;CACvC,MAAM,WAA0C,EAC9C,KAAK,OAAO,aAAa;EACvB,MAAM,cAAc,IAAI,GAAG,OAAO,QAAQ;EAC1C,cAAc,KAAK,WAAW;EAC9B,OAAO;CACT,EACF;CAEA,MAAM,WAAW,eAAe,uBAAuB,MAAM,KAAK,CAAC;;;;;;CAOnE,MAAM,eAAe,EAAE,qBAAqC;EAC1D,IAAI,mBAAmB,YACrB,OAAO,SAAS,MAAM,OAAO;EAE/B,OAAO,SAAS,MAAM,UAAU;CAClC;CAKA,SAAS,GAAG,kCAAkC,YAC5C,SAAS,iCAAiC,SAAS,MAAM,UAAU,CAAC,CAAC,UAAU,mBAAmB,KAAK,CAAC,CAAC,OAAO,CAClH;CACA,SAAS,GAAG,gCAAgC,YAC1C,SAAS,+BAA+B,SAAS,MAAM,UAAU,CAAC,CAAC,UAAU,iBAAiB,KAAK,CAAC,CAAC,OAAO,CAC9G;CACA,SAAS,GAAG,2BAA2B,YACrC,SAAS,0BAA0B,SAAS,MAAM,UAAU,CAAC,CAAC,UAAU,aAAa,KAAK,CAAC,CAAC,OAAO,CACrG;CACA,SAAS,GAAG,qCAAqC,YAC/C,SACE,oCACA,SAAS,MAAM,UAAU,CAAC,CAAC,UAAU,sBACrC,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,sCAAsC,YAChD,SACE,qCACA,SAAS,MAAM,UAAU,CAAC,CAAC,UAAU,uBACrC,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,wCAAwC,YAClD,SACE,uCACA,SAAS,MAAM,UAAU,CAAC,CAAC,UAAU,yBACrC,KACF,CAAC,CAAC,OAAO,CACX;CAKA,SAAS,GAAG,8BAA8B,YACxC,SAAS,6BAA6B,SAAS,MAAM,OAAO,CAAC,CAAC,SAAS,yBAAyB,KAAK,CAAC,CAAC,OAAO,CAChH;CACA,SAAS,GAAG,yBAAyB,YACnC,SAAS,wBAAwB,SAAS,MAAM,OAAO,CAAC,CAAC,SAAS,oBAAoB,KAAK,CAAC,CAAC,OAAO,CACtG;CACA,SAAS,GAAG,yBAAyB,YACnC,SAAS,wBAAwB,SAAS,MAAM,OAAO,CAAC,CAAC,SAAS,oBAAoB,KAAK,CAAC,CAAC,OAAO,CACtG;CACA,SAAS,GAAG,+BAA+B,YACzC,SAAS,8BAA8B,SAAS,MAAM,OAAO,CAAC,CAAC,SAAS,iBAAiB,KAAK,CAAC,CAAC,OAAO,CACzG;CACA,SAAS,GAAG,mCAAmC,YAC7C,SAAS,kCAAkC,SAAS,MAAM,OAAO,CAAC,CAAC,SAAS,qBAAqB,KAAK,CAAC,CAAC,OAAO,CACjH;CACA,SAAS,GAAG,6BAA6B,YACvC,SAAS,4BAA4B,SAAS,MAAM,OAAO,CAAC,CAAC,SAAS,gBAAgB,KAAK,CAAC,CAAC,OAAO,CACtG;CAKA,SAAS,GAAG,mCAAmC,YAC7C,SAAS,kCAAkC,YAAY,OAAO,CAAC,CAAC,YAAY,mBAAmB,KAAK,CAAC,CAAC,OAAO,CAC/G;CACA,SAAS,GAAG,mCAAmC,YAC7C,SAAS,kCAAkC,YAAY,OAAO,CAAC,CAAC,YAAY,mBAAmB,KAAK,CAAC,CAAC,OAAO,CAC/G;CACA,SAAS,GAAG,4CAA4C,YACtD,SACE,2CACA,YAAY,OAAO,CAAC,CAAC,YAAY,2BACjC,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,4CAA4C,YACtD,SACE,2CACA,YAAY,OAAO,CAAC,CAAC,YAAY,2BACjC,KACF,CAAC,CAAC,OAAO,CACX;CAKA,SAAS,GAAG,wBAAwB,OAAO,YAAY;EACrD,MAAM,SAAS,wBAAwB,YAAY,OAAO,CAAC,CAAC,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO;CACjG,CAAC;CACD,SAAS,GAAG,wBAAwB,OAAO,YAAY;EACrD,MAAM,SAAS,wBAAwB,YAAY,OAAO,CAAC,CAAC,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO;CACjG,CAAC;CAKD,SAAS,GAAG,gCAAgC,YAC1C,SAAS,+BAA+B,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,sBAAsB,KAAK,CAAC,CAAC,OAAO,CAC3G;CACA,SAAS,GAAG,6BAA6B,YACvC,SAAS,4BAA4B,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,uBAAuB,KAAK,CAAC,CAAC,OAAO,CACzG;CACA,SAAS,GAAG,gCAAgC,YAC1C,SACE,gCACC,SAAS,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,qBAAqB,MAAM,+BAA+B,CAAC,GAClG,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,gCAAgC,YAC1C,SAAS,+BAA+B,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,sBAAsB,KAAK,CAAC,CAAC,OAAO,CAC3G;CACA,SAAS,GAAG,uBAAuB,YACjC,SAAS,sBAAsB,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,aAAa,KAAK,CAAC,CAAC,OAAO,CACzF;CACA,SAAS,GAAG,uBAAuB,YACjC,SAAS,sBAAsB,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,aAAa,KAAK,CAAC,CAAC,OAAO,CACzF;CACA,SAAS,GAAG,0CAA0C,YACpD,SACE,yCACA,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,+BAC7B,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,yCAAyC,YACnD,SACE,wCACA,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,8BAC7B,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,wCAAwC,YAClD,SACE,uCACA,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,6BAC7B,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,sCAAsC,YAChD,SACE,qCACA,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,2BAC7B,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,uCAAuC,YACjD,SACE,sCACA,SAAS,MAAM,OAAO,CAAC,CAAC,KAAK,4BAC7B,KACF,CAAC,CAAC,OAAO,CACX;CAKA,SAAS,GAAG,8BAA8B,YACxC,SAAS,6BAA6B,SAAS,MAAM,OAAO,CAAC,CAAC,OAAO,mBAAmB,KAAK,CAAC,CAAC,OAAO,CACxG;CACA,SAAS,GAAG,sBAAsB,YAChC,SAAS,qBAAqB,SAAS,MAAM,OAAO,CAAC,CAAC,OAAO,WAAW,KAAK,CAAC,CAAC,OAAO,CACxF;CACA,SAAS,GAAG,yBAAyB,YACnC,SAAS,wBAAwB,SAAS,MAAM,OAAO,CAAC,CAAC,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO,CAC9F;CACA,SAAS,GAAG,yBAAyB,YACnC,SAAS,wBAAwB,SAAS,MAAM,OAAO,CAAC,CAAC,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO,CAC9F;CACA,SAAS,GAAG,yBAAyB,YACnC,SAAS,wBAAwB,SAAS,MAAM,OAAO,CAAC,CAAC,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO,CAC9F;CACA,SAAS,GAAG,4BAA4B,YACtC,SAAS,2BAA2B,SAAS,MAAM,OAAO,CAAC,CAAC,OAAO,uBAAuB,KAAK,CAAC,CAAC,OAAO,CAC1G;CACA,SAAS,GAAG,2BAA2B,YACrC,SAAS,0BAA0B,SAAS,MAAM,OAAO,CAAC,CAAC,OAAO,sBAAsB,KAAK,CAAC,CAAC,OAAO,CACxG;CACA,SAAS,GAAG,oCAAoC,YAC9C,SACE,mCACA,SAAS,MAAM,OAAO,CAAC,CAAC,OAAO,8BAC/B,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,qCAAqC,YAC/C,SACE,oCACA,SAAS,MAAM,OAAO,CAAC,CAAC,OAAO,+BAC/B,KACF,CAAC,CAAC,OAAO,CACX;CAKA,SAAS,GAAG,+BAA+B,YACzC,SAAS,8BAA8B,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,iBAAiB,KAAK,CAAC,CAAC,OAAO,CAC1G;CACA,SAAS,GAAG,gCAAgC,YAC1C,SACE,+BACA,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,2BAClC,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,0BAA0B,YACpC,SAAS,yBAAyB,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,qBAAqB,KAAK,CAAC,CAAC,OAAO,CACzG;CACA,SAAS,GAAG,+BAA+B,YACzC,SAAS,8BAA8B,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,iBAAiB,KAAK,CAAC,CAAC,OAAO,CAC1G;CACA,SAAS,GAAG,mCAAmC,YAC7C,SACE,kCACA,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,6BAClC,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,6BAA6B,YACvC,SAAS,4BAA4B,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,wBAAwB,KAAK,CAAC,CAAC,OAAO,CAC/G;CACA,SAAS,GAAG,6BAA6B,YACvC,SAAS,4BAA4B,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,wBAAwB,KAAK,CAAC,CAAC,OAAO,CAC/G;CACA,SAAS,GAAG,+BAA+B,YACzC,SAAS,8BAA8B,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,0BAA0B,KAAK,CAAC,CAAC,OAAO,CACnH;CACA,SAAS,GAAG,sCAAsC,YAChD,SACE,qCACA,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,gCAClC,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,+BAA+B,YACzC,SAAS,8BAA8B,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,0BAA0B,KAAK,CAAC,CAAC,OAAO,CACnH;CACA,SAAS,GAAG,oCAAoC,YAC9C,SACE,mCACA,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,8BAClC,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,+BAA+B,YACzC,SAAS,8BAA8B,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,0BAA0B,KAAK,CAAC,CAAC,OAAO,CACnH;CAKA,SAAS,GAAG,6CAA6C,YACvD,SACE,4CACA,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,uCAClC,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,uCAAuC,YACjD,SACE,sCACA,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,mCAClC,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,2CAA2C,YACrD,SACE,0CACA,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,qCAClC,KACF,CAAC,CAAC,OAAO,CACX;CACA,SAAS,GAAG,6BAA6B,YACvC,SAAS,4BAA4B,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,wBAAwB,KAAK,CAAC,CAAC,OAAO,CAC/G;CAKA,SAAS,GAAG,mBAAmB,YAC7B,SAAS,kBAAkB,SAAS,MAAM,OAAO,CAAC,CAAC,IAAI,WAAW,KAAK,CAAC,CAAC,OAAO,CAClF;CACA,SAAS,GAAG,iBAAiB,YAC3B,SAAS,gBAAgB,SAAS,MAAM,OAAO,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,OAAO,CAC9E;CACA,SAAS,GAAG,mBAAmB,YAC7B,SAAS,kBAAkB,SAAS,MAAM,OAAO,CAAC,CAAC,IAAI,WAAW,KAAK,CAAC,CAAC,OAAO,CAClF;CAKA,SAAS,GAAG,iBAAiB,YAC3B,SAAS,gBAAgB,SAAS,MAAM,UAAU,CAAC,CAAC,KAAK,QAAQ,KAAK,CAAC,CAAC,OAAO,CACjF;CACA,SAAS,GAAG,mBAAmB,YAC7B,SAAS,kBAAkB,SAAS,MAAM,UAAU,CAAC,CAAC,KAAK,UAAU,KAAK,CAAC,CAAC,OAAO,CACrF;CACA,SAAS,GAAG,0BAA0B,YACpC,SAAS,yBAAyB,SAAS,MAAM,UAAU,CAAC,CAAC,KAAK,gBAAgB,KAAK,CAAC,CAAC,OAAO,CAClG;CACA,SAAS,GAAG,mBAAmB,YAC7B,SAAS,kBAAkB,SAAS,MAAM,UAAU,CAAC,CAAC,KAAK,UAAU,KAAK,CAAC,CAAC,OAAO,CACrF;CACA,SAAS,GAAG,wBAAwB,YAClC,SAAS,uBAAuB,SAAS,MAAM,UAAU,CAAC,CAAC,KAAK,cAAc,KAAK,CAAC,CAAC,OAAO,CAC9F;CACA,SAAS,GAAG,2BAA2B,YACrC,SAAS,0BAA0B,SAAS,MAAM,UAAU,CAAC,CAAC,KAAK,qBAAqB,KAAK,CAAC,CAAC,OAAO,CACxG;CACA,SAAS,GAAG,uBAAuB,YACjC,SAAS,sBAAsB,SAAS,MAAM,UAAU,CAAC,CAAC,KAAK,iBAAiB,KAAK,CAAC,CAAC,OAAO,CAChG;CACA,SAAS,GAAG,qBAAqB,YAC/B,SAAS,oBAAoB,SAAS,MAAM,UAAU,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,OAAO,CACzF;CAKA,SAAS,GAAG,8BAA8B,YACxC,SAAS,6BAA6B,SAAS,MAAM,OAAO,CAAC,CAAC,UAAU,sBAAsB,KAAK,CAAC,CAAC,OAAO,CAC9G;CACA,aAAa,cAAc,OAAO,CAAC,CAAC,CAAC,SAAS,gBAAgB,YAAY,CAAC;AAC7E"}