@scalar/api-client 3.3.1 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/monacoeditorwork/yaml.worker.bundle.js +92 -79
  3. package/dist/style.css +87 -57
  4. package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts +2 -0
  5. package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts.map +1 -1
  6. package/dist/v2/blocks/operation-block/OperationBlock.vue.js.map +1 -1
  7. package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js +5 -0
  8. package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js.map +1 -1
  9. package/dist/v2/blocks/operation-block/components/Header.vue.d.ts +4 -0
  10. package/dist/v2/blocks/operation-block/components/Header.vue.d.ts.map +1 -1
  11. package/dist/v2/blocks/operation-block/components/Header.vue.js +1 -1
  12. package/dist/v2/blocks/operation-block/components/Header.vue.js.map +1 -1
  13. package/dist/v2/blocks/operation-block/components/Header.vue.script.js +6 -0
  14. package/dist/v2/blocks/operation-block/components/Header.vue.script.js.map +1 -1
  15. package/dist/v2/blocks/operation-block/helpers/response-cache.d.ts +2 -1
  16. package/dist/v2/blocks/operation-block/helpers/response-cache.d.ts.map +1 -1
  17. package/dist/v2/blocks/operation-block/helpers/response-cache.js +9 -2
  18. package/dist/v2/blocks/operation-block/helpers/response-cache.js.map +1 -1
  19. package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts +2 -2
  20. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts +2 -2
  21. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts +4 -0
  22. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts.map +1 -1
  23. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js +1 -1
  24. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js.map +1 -1
  25. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js +84 -71
  26. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.script.js.map +1 -1
  27. package/dist/v2/blocks/scalar-address-bar-block/helpers/is-placeholder-path.d.ts +13 -0
  28. package/dist/v2/blocks/scalar-address-bar-block/helpers/is-placeholder-path.d.ts.map +1 -0
  29. package/dist/v2/blocks/scalar-address-bar-block/helpers/is-placeholder-path.js +28 -0
  30. package/dist/v2/blocks/scalar-address-bar-block/helpers/is-placeholder-path.js.map +1 -0
  31. package/dist/v2/blocks/scalar-address-bar-block/helpers/refocus-blur-target.d.ts +16 -0
  32. package/dist/v2/blocks/scalar-address-bar-block/helpers/refocus-blur-target.d.ts.map +1 -0
  33. package/dist/v2/blocks/scalar-address-bar-block/helpers/refocus-blur-target.js +28 -0
  34. package/dist/v2/blocks/scalar-address-bar-block/helpers/refocus-blur-target.js.map +1 -0
  35. package/dist/v2/blocks/scalar-address-bar-block/hooks/use-path-masking.d.ts +31 -0
  36. package/dist/v2/blocks/scalar-address-bar-block/hooks/use-path-masking.d.ts.map +1 -0
  37. package/dist/v2/blocks/scalar-address-bar-block/hooks/use-path-masking.js +18 -0
  38. package/dist/v2/blocks/scalar-address-bar-block/hooks/use-path-masking.js.map +1 -0
  39. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-callback.d.ts +69 -0
  40. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-callback.d.ts.map +1 -0
  41. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-callback.js +75 -0
  42. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-callback.js.map +1 -0
  43. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.d.ts +17 -0
  44. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.d.ts.map +1 -1
  45. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js +43 -44
  46. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js.map +1 -1
  47. package/dist/v2/components/code-input/CodeInput.vue.js +1 -1
  48. package/dist/v2/components/code-input/CodeInput.vue.js.map +1 -1
  49. package/dist/v2/components/code-input/CodeInput.vue.script.js +1 -1
  50. package/dist/v2/components/code-input/CodeInput.vue.script.js.map +1 -1
  51. package/dist/v2/constants.js +1 -1
  52. package/dist/v2/features/app/App.vue.d.ts +25 -1
  53. package/dist/v2/features/app/App.vue.d.ts.map +1 -1
  54. package/dist/v2/features/app/App.vue.js.map +1 -1
  55. package/dist/v2/features/app/App.vue.script.js +54 -39
  56. package/dist/v2/features/app/App.vue.script.js.map +1 -1
  57. package/dist/v2/features/app/app-events.js +4 -4
  58. package/dist/v2/features/app/app-events.js.map +1 -1
  59. package/dist/v2/features/app/app-state.d.ts +20 -14
  60. package/dist/v2/features/app/app-state.d.ts.map +1 -1
  61. package/dist/v2/features/app/app-state.js +89 -55
  62. package/dist/v2/features/app/app-state.js.map +1 -1
  63. package/dist/v2/features/app/components/AppHeader.vue.d.ts +26 -3
  64. package/dist/v2/features/app/components/AppHeader.vue.d.ts.map +1 -1
  65. package/dist/v2/features/app/components/AppHeader.vue.js.map +1 -1
  66. package/dist/v2/features/app/components/AppHeader.vue.script.js +15 -6
  67. package/dist/v2/features/app/components/AppHeader.vue.script.js.map +1 -1
  68. package/dist/v2/features/app/components/AppSidebar.vue.d.ts +2 -2
  69. package/dist/v2/features/app/components/AppSidebar.vue.d.ts.map +1 -1
  70. package/dist/v2/features/app/components/AppSidebar.vue.js +1 -1
  71. package/dist/v2/features/app/components/AppSidebar.vue.js.map +1 -1
  72. package/dist/v2/features/app/components/AppSidebar.vue.script.js +86 -108
  73. package/dist/v2/features/app/components/AppSidebar.vue.script.js.map +1 -1
  74. package/dist/v2/features/app/components/CreateVersionModal.vue.d.ts +28 -0
  75. package/dist/v2/features/app/components/CreateVersionModal.vue.d.ts.map +1 -0
  76. package/dist/v2/features/app/components/CreateVersionModal.vue.js +7 -0
  77. package/dist/v2/features/app/components/CreateVersionModal.vue.js.map +1 -0
  78. package/dist/v2/features/app/components/CreateVersionModal.vue.script.js +84 -0
  79. package/dist/v2/features/app/components/CreateVersionModal.vue.script.js.map +1 -0
  80. package/dist/v2/features/app/components/DocumentBreadcrumb.vue.d.ts +26 -0
  81. package/dist/v2/features/app/components/DocumentBreadcrumb.vue.d.ts.map +1 -0
  82. package/dist/v2/features/app/components/DocumentBreadcrumb.vue.js +9 -0
  83. package/dist/v2/features/app/components/DocumentBreadcrumb.vue.js.map +1 -0
  84. package/dist/v2/features/app/components/DocumentBreadcrumb.vue.script.js +376 -0
  85. package/dist/v2/features/app/components/DocumentBreadcrumb.vue.script.js.map +1 -0
  86. package/dist/v2/features/app/components/DocumentSyncIndicator.vue.d.ts +16 -0
  87. package/dist/v2/features/app/components/DocumentSyncIndicator.vue.d.ts.map +1 -0
  88. package/dist/v2/features/app/components/DocumentSyncIndicator.vue.js +7 -0
  89. package/dist/v2/features/app/components/DocumentSyncIndicator.vue.js.map +1 -0
  90. package/dist/v2/features/app/components/DocumentSyncIndicator.vue.script.js +51 -0
  91. package/dist/v2/features/app/components/DocumentSyncIndicator.vue.script.js.map +1 -0
  92. package/dist/v2/features/app/components/SidebarDocument.vue.d.ts +45 -0
  93. package/dist/v2/features/app/components/SidebarDocument.vue.d.ts.map +1 -0
  94. package/dist/v2/features/app/components/SidebarDocument.vue.js +7 -0
  95. package/dist/v2/features/app/components/SidebarDocument.vue.js.map +1 -0
  96. package/dist/v2/features/app/components/SidebarDocument.vue.script.js +137 -0
  97. package/dist/v2/features/app/components/SidebarDocument.vue.script.js.map +1 -0
  98. package/dist/v2/features/app/helpers/check-version-conflict.d.ts +51 -0
  99. package/dist/v2/features/app/helpers/check-version-conflict.d.ts.map +1 -0
  100. package/dist/v2/features/app/helpers/check-version-conflict.js +79 -0
  101. package/dist/v2/features/app/helpers/check-version-conflict.js.map +1 -0
  102. package/dist/v2/features/app/helpers/compute-version-status.d.ts +45 -0
  103. package/dist/v2/features/app/helpers/compute-version-status.d.ts.map +1 -0
  104. package/dist/v2/features/app/helpers/compute-version-status.js +18 -0
  105. package/dist/v2/features/app/helpers/compute-version-status.js.map +1 -0
  106. package/dist/v2/features/app/helpers/create-draft-registry-document.d.ts +39 -0
  107. package/dist/v2/features/app/helpers/create-draft-registry-document.d.ts.map +1 -0
  108. package/dist/v2/features/app/helpers/create-draft-registry-document.js +64 -0
  109. package/dist/v2/features/app/helpers/create-draft-registry-document.js.map +1 -0
  110. package/dist/v2/features/app/helpers/create-temp-operation.d.ts.map +1 -1
  111. package/dist/v2/features/app/helpers/create-temp-operation.js +5 -8
  112. package/dist/v2/features/app/helpers/create-temp-operation.js.map +1 -1
  113. package/dist/v2/features/app/helpers/detect-document-conflicts.d.ts +26 -0
  114. package/dist/v2/features/app/helpers/detect-document-conflicts.d.ts.map +1 -0
  115. package/dist/v2/features/app/helpers/detect-document-conflicts.js +27 -0
  116. package/dist/v2/features/app/helpers/detect-document-conflicts.js.map +1 -0
  117. package/dist/v2/features/app/helpers/filter-workspaces.d.ts +14 -14
  118. package/dist/v2/features/app/helpers/filter-workspaces.d.ts.map +1 -1
  119. package/dist/v2/features/app/helpers/filter-workspaces.js +15 -15
  120. package/dist/v2/features/app/helpers/filter-workspaces.js.map +1 -1
  121. package/dist/v2/features/app/helpers/group-workspaces.d.ts +23 -3
  122. package/dist/v2/features/app/helpers/group-workspaces.d.ts.map +1 -1
  123. package/dist/v2/features/app/helpers/group-workspaces.js +22 -7
  124. package/dist/v2/features/app/helpers/group-workspaces.js.map +1 -1
  125. package/dist/v2/features/app/helpers/load-registry-document.d.ts +16 -1
  126. package/dist/v2/features/app/helpers/load-registry-document.d.ts.map +1 -1
  127. package/dist/v2/features/app/helpers/load-registry-document.js +7 -6
  128. package/dist/v2/features/app/helpers/load-registry-document.js.map +1 -1
  129. package/dist/v2/features/app/helpers/routes.d.ts +5 -1
  130. package/dist/v2/features/app/helpers/routes.d.ts.map +1 -1
  131. package/dist/v2/features/app/helpers/routes.js +1 -1
  132. package/dist/v2/features/app/helpers/routes.js.map +1 -1
  133. package/dist/v2/features/app/helpers/version-status-presentation.d.ts +24 -0
  134. package/dist/v2/features/app/helpers/version-status-presentation.d.ts.map +1 -0
  135. package/dist/v2/features/app/helpers/version-status-presentation.js +43 -0
  136. package/dist/v2/features/app/helpers/version-status-presentation.js.map +1 -0
  137. package/dist/v2/features/app/hooks/use-active-document-version.d.ts +41 -0
  138. package/dist/v2/features/app/hooks/use-active-document-version.d.ts.map +1 -0
  139. package/dist/v2/features/app/hooks/use-active-document-version.js +60 -0
  140. package/dist/v2/features/app/hooks/use-active-document-version.js.map +1 -0
  141. package/dist/v2/features/app/hooks/use-sidebar-documents.d.ts +71 -23
  142. package/dist/v2/features/app/hooks/use-sidebar-documents.d.ts.map +1 -1
  143. package/dist/v2/features/app/hooks/use-sidebar-documents.js +167 -45
  144. package/dist/v2/features/app/hooks/use-sidebar-documents.js.map +1 -1
  145. package/dist/v2/features/app/hooks/use-version-conflict-check.d.ts +35 -0
  146. package/dist/v2/features/app/hooks/use-version-conflict-check.d.ts.map +1 -0
  147. package/dist/v2/features/app/hooks/use-version-conflict-check.js +62 -0
  148. package/dist/v2/features/app/hooks/use-version-conflict-check.js.map +1 -0
  149. package/dist/v2/features/collection/DocumentCollection.vue.d.ts.map +1 -1
  150. package/dist/v2/features/collection/DocumentCollection.vue.js.map +1 -1
  151. package/dist/v2/features/collection/DocumentCollection.vue.script.js +6 -1
  152. package/dist/v2/features/collection/DocumentCollection.vue.script.js.map +1 -1
  153. package/dist/v2/features/collection/OperationCollection.vue.script.js +1 -0
  154. package/dist/v2/features/collection/OperationCollection.vue.script.js.map +1 -1
  155. package/dist/v2/features/collection/WorkspaceCollection.vue.script.js +1 -0
  156. package/dist/v2/features/collection/WorkspaceCollection.vue.script.js.map +1 -1
  157. package/dist/v2/features/collection/components/Authentication.vue.script.js +1 -0
  158. package/dist/v2/features/collection/components/Authentication.vue.script.js.map +1 -1
  159. package/dist/v2/features/collection/components/Cookies.vue.script.js +1 -0
  160. package/dist/v2/features/collection/components/Cookies.vue.script.js.map +1 -1
  161. package/dist/v2/features/collection/components/Editor/Editor.vue.script.js +1 -0
  162. package/dist/v2/features/collection/components/Editor/Editor.vue.script.js.map +1 -1
  163. package/dist/v2/features/collection/components/Environment.vue.script.js +1 -0
  164. package/dist/v2/features/collection/components/Environment.vue.script.js.map +1 -1
  165. package/dist/v2/features/collection/components/GetStarted.vue.d.ts +12 -4
  166. package/dist/v2/features/collection/components/GetStarted.vue.d.ts.map +1 -1
  167. package/dist/v2/features/collection/components/GetStarted.vue.js.map +1 -1
  168. package/dist/v2/features/collection/components/GetStarted.vue.script.js +56 -13
  169. package/dist/v2/features/collection/components/GetStarted.vue.script.js.map +1 -1
  170. package/dist/v2/features/collection/components/Overview.vue.script.js +1 -0
  171. package/dist/v2/features/collection/components/Overview.vue.script.js.map +1 -1
  172. package/dist/v2/features/collection/components/Runner/components/Runner.vue.script.js +1 -0
  173. package/dist/v2/features/collection/components/Runner/components/Runner.vue.script.js.map +1 -1
  174. package/dist/v2/features/collection/components/Runner/hooks/use-runner-execution.js +2 -2
  175. package/dist/v2/features/collection/components/Runner/hooks/use-runner-execution.js.map +1 -1
  176. package/dist/v2/features/collection/components/Scripts.vue.script.js +1 -0
  177. package/dist/v2/features/collection/components/Scripts.vue.script.js.map +1 -1
  178. package/dist/v2/features/collection/components/Servers.vue.script.js +1 -0
  179. package/dist/v2/features/collection/components/Servers.vue.script.js.map +1 -1
  180. package/dist/v2/features/collection/components/Settings.vue.script.js +1 -0
  181. package/dist/v2/features/collection/components/Settings.vue.script.js.map +1 -1
  182. package/dist/v2/features/editor/hooks/use-three-way-merge-editor.js +1 -1
  183. package/dist/v2/features/operation/Operation.vue.d.ts.map +1 -1
  184. package/dist/v2/features/operation/Operation.vue.js.map +1 -1
  185. package/dist/v2/features/operation/Operation.vue.script.js +3 -0
  186. package/dist/v2/features/operation/Operation.vue.script.js.map +1 -1
  187. package/dist/v2/helpers/safe-run.d.ts +25 -1
  188. package/dist/v2/helpers/safe-run.d.ts.map +1 -1
  189. package/dist/v2/helpers/safe-run.js +26 -2
  190. package/dist/v2/helpers/safe-run.js.map +1 -1
  191. package/package.json +16 -15
@@ -1 +1 @@
1
- {"version":3,"file":"app-events.js","names":[],"sources":["../../../../src/v2/features/app/app-events.ts"],"sourcesContent":["import type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { OperationExampleMeta, WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { type ShallowRef, computed } from 'vue'\nimport { type NavigationFailure, NavigationFailureType, type Router } from 'vue-router'\n\nimport type { ScalarClientAppRouteParams } from '@/v2/features/app/helpers/routes'\nimport { initializeWorkspaceEventHandlers } from '@/v2/workspace-events'\n\nexport function initializeAppEventHandlers({\n eventBus,\n store,\n router,\n rebuildSidebar,\n navigateToCurrentTab,\n onSelectSidebarItem,\n onAfterExampleCreation,\n onCopyTabUrl,\n onToggleSidebar,\n closeSidebar,\n renameWorkspace,\n}: {\n eventBus: WorkspaceEventBus\n store: ShallowRef<WorkspaceStore | null>\n router: Router\n rebuildSidebar: (documentName?: string) => void\n navigateToCurrentTab: () => Promise<void>\n onSelectSidebarItem: (id: string) => void\n onAfterExampleCreation: (o: OperationExampleMeta & { documentName?: string }) => void\n onCopyTabUrl: (tabIndex: number) => void\n onToggleSidebar: () => void\n closeSidebar: () => void\n renameWorkspace: (name: string) => Promise<void>\n}) {\n const currentRoute = computed(() => router.currentRoute?.value)\n\n /**\n * Checks if the current route params match the specified operation meta.\n * Useful for determining if the sidebar or UI needs to be updated after changes to operations/examples.\n *\n * NOTE: It may be beneficial to compare to the active state instead of the router\n */\n const isRouteParamsMatch = ({\n documentName,\n path,\n method,\n exampleName,\n }: {\n documentName: string\n path?: string\n method?: HttpMethod\n exampleName?: string\n }) => {\n if (documentName !== undefined && documentName !== currentRoute.value?.params.documentSlug) {\n return false\n }\n if (path !== undefined && encodeURIComponent(path) !== currentRoute.value?.params.pathEncoded) {\n return false\n }\n if (method !== undefined && method !== currentRoute.value?.params.method) {\n return false\n }\n if (exampleName !== undefined && exampleName !== currentRoute.value?.params.exampleName) {\n return false\n }\n return true\n }\n\n initializeWorkspaceEventHandlers({\n eventBus,\n store,\n hooks: {\n //------------------------------------------------------------------------------------\n // Document Related Hooks\n //------------------------------------------------------------------------------------\n 'document:delete:document': {\n onAfterExecute: async (payload) => {\n // Redirect to the workspace environment page if the document was deleted\n if (currentRoute?.value?.params.documentSlug === payload.name) {\n await router.push({\n name: 'workspace.environment',\n })\n }\n },\n },\n //------------------------------------------------------------------------------------\n // Operation Related Hooks\n //------------------------------------------------------------------------------------\n 'operation:update:pathMethod': {\n onBeforeExecute: (payload) => ({\n ...payload,\n callback: async (status) => {\n // Redirect to the new example if the mutation was successful\n if (status === 'success') {\n // Rebuild the sidebar with the updated order\n rebuildSidebar(store.value?.workspace.activeDocument?.['x-scalar-navigation']?.name)\n\n // Now this redirect works for any example\n await router.replace({\n name: 'example',\n params: {\n method: payload.payload.method,\n pathEncoded: encodeURIComponent(payload.payload.path),\n exampleName: currentRoute.value?.params.exampleName,\n },\n })\n }\n\n payload.callback(status, payload.blurTargetSelector)\n },\n }),\n },\n 'operation:create:operation': {\n onAfterExecute: (payload) => {\n onAfterExampleCreation({\n path: payload.path,\n method: payload.method,\n exampleKey: 'default',\n documentName: payload.documentName,\n })\n },\n },\n 'operation:upsert:parameter': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n 'operation:update:extra-parameters': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n 'operation:reload:history': {\n onAfterExecute: (payload) => onAfterExampleCreation({ ...payload.meta, exampleKey: 'draft' }),\n },\n 'operation:delete:operation': {\n onAfterExecute: async (payload) => {\n rebuildSidebar(payload.documentName)\n const {\n documentName,\n meta: { path, method },\n } = payload\n // Navigate to the document overview page if the operation was deleted\n if (\n isRouteParamsMatch({\n documentName,\n path,\n method,\n })\n ) {\n await router.replace({\n name: 'document.overview',\n params: {\n documentSlug: documentName,\n },\n })\n }\n },\n },\n 'operation:create:draft-example': {\n onAfterExecute: async (payload) => {\n onAfterExampleCreation({ ...payload.meta, exampleKey: payload.exampleName })\n await router.push({\n name: 'example',\n params: {\n documentSlug: payload.documentName,\n pathEncoded: encodeURIComponent(payload.meta.path),\n method: payload.meta.method,\n exampleName: payload.exampleName,\n },\n })\n },\n },\n 'operation:delete:example': {\n onAfterExecute: async (payload) => {\n rebuildSidebar(payload.documentName)\n\n const {\n documentName,\n meta: { path, method, exampleKey },\n } = payload\n // Navigate to the default example if the example was deleted\n if (\n isRouteParamsMatch({\n documentName,\n path,\n method,\n exampleName: exampleKey,\n })\n ) {\n await router.replace({\n name: 'example',\n params: {\n pathEncoded: encodeURIComponent(path),\n method,\n documentSlug: documentName,\n exampleName: 'default',\n },\n })\n }\n },\n },\n 'operation:rename:example': {\n onAfterExecute: async ({ meta, payload, documentName }) => {\n // Refresh sidebar\n onAfterExampleCreation({ ...meta, exampleKey: payload.name, documentName })\n\n // Redirect to the new example if the mutation was successful and we are currently on the example\n if (\n isRouteParamsMatch({ documentName, path: meta.path, method: meta.method, exampleName: meta.exampleKey })\n ) {\n await router.replace({\n name: 'example',\n params: {\n documentSlug: documentName,\n pathEncoded: encodeURIComponent(meta.path),\n method: meta.method,\n exampleName: payload.name,\n },\n })\n }\n },\n },\n //------------------------------------------------------------------------------------\n // Operation Request Body Related Hooks\n //------------------------------------------------------------------------------------\n 'operation:update:requestBody:value': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n 'operation:update:requestBody:formValue': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n //------------------------------------------------------------------------------------\n // Tag Related Event Hooks\n //------------------------------------------------------------------------------------\n 'tag:create:tag': {\n onAfterExecute: (payload) => rebuildSidebar(payload.documentName),\n },\n 'tag:edit:tag': {\n onAfterExecute: async (payload) => {\n rebuildSidebar(payload.documentName)\n\n /**\n * If the currently viewed operation is a child of the renamed tag, redirect to\n * the same route so the sidebar and breadcrumbs reflect the new tag name\n */\n const isNestedUnderTag = payload.tag.children?.some(\n (child) =>\n child.type === 'operation' &&\n isRouteParamsMatch({\n documentName: payload.documentName,\n path: child.path,\n method: child.method,\n }),\n )\n\n if (isNestedUnderTag) {\n await router.replace({ ...currentRoute.value })\n }\n },\n },\n 'tag:delete:tag': {\n onAfterExecute: (payload) => rebuildSidebar(payload.documentName),\n },\n //------------------------------------------------------------------------------------\n // Tabs Related Event Hooks\n //------------------------------------------------------------------------------------\n 'tabs:add:tab': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:close:tab': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:focus:tab': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:focus:tab-last': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:navigate:previous': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:navigate:next': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:update:tabs': {\n onAfterExecute: navigateToCurrentTab,\n },\n },\n })\n\n // Worksapce rename event handler\n eventBus.on('workspace:update:name', (payload) => renameWorkspace(payload))\n\n //------------------------------------------------------------------------------------\n // Navigation Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('scroll-to:nav-item', ({ id }) => onSelectSidebarItem(id))\n\n //------------------------------------------------------------------------------------\n // UI Related Event Handlers\n //------------------------------------------------------------------------------------\n // Note: Command palette handler is colocated with the command palette component\n\n eventBus.on('ui:toggle:sidebar', onToggleSidebar)\n\n /**\n * Bind the inernal navigation to a public api\n */\n eventBus.on('ui:navigate', async (payload) => {\n const { replace = false } = payload\n const fn = replace ? router.replace : router.push\n\n const execCallback = (result: NavigationFailure | void | undefined) => {\n if (!result) {\n // Close the sidebar if it is open\n closeSidebar()\n return payload.callback?.('success')\n }\n\n const navigationFailure: 16 = NavigationFailureType.duplicated\n\n if (result.type !== navigationFailure) {\n return payload.callback?.('error')\n }\n\n return payload.callback?.('success')\n }\n\n type ValidParams = Partial<Record<ScalarClientAppRouteParams, string>>\n\n if (payload.page === 'document') {\n const params = {\n documentSlug: payload.documentSlug,\n workspaceSlug: payload.workspaceSlug,\n namespace: payload.namespace,\n } satisfies ValidParams\n\n if (payload.path === 'overview') {\n return execCallback(await fn({ name: 'document.overview', params }))\n }\n if (payload.path === 'servers') {\n return execCallback(await fn({ name: 'document.servers', params }))\n }\n if (payload.path === 'environment') {\n return execCallback(await fn({ name: 'document.environment', params }))\n }\n if (payload.path === 'authentication') {\n return execCallback(await fn({ name: 'document.authentication', params }))\n }\n if (payload.path === 'cookies') {\n return execCallback(await fn({ name: 'document.cookies', params }))\n }\n if (payload.path === 'settings') {\n return execCallback(await fn({ name: 'document.settings', params }))\n }\n }\n\n if (payload.page === 'workspace') {\n const params = { workspaceSlug: payload.workspaceSlug, namespace: payload.namespace } satisfies ValidParams\n if (payload.path === 'get-started') {\n return execCallback(await fn({ name: 'workspace.get-started', params }))\n }\n if (payload.path === 'environment') {\n return execCallback(await fn({ name: 'workspace.environment', params }))\n }\n if (payload.path === 'cookies') {\n return execCallback(await fn({ name: 'workspace.cookies', params }))\n }\n if (payload.path === 'settings') {\n return execCallback(await fn({ name: 'workspace.settings', params }))\n }\n }\n\n if (payload.page === 'example') {\n const params = {\n namespace: payload.namespace,\n workspaceSlug: payload.workspaceSlug,\n documentSlug: payload.documentSlug,\n pathEncoded: encodeURIComponent(payload.path),\n method: payload.method,\n exampleName: payload.exampleName,\n } satisfies ValidParams\n return execCallback(await fn({ name: 'example', params }))\n }\n\n if (payload.page === 'operation') {\n const params = {\n namespace: payload.namespace,\n workspaceSlug: payload.workspaceSlug,\n documentSlug: payload.documentSlug,\n pathEncoded: encodeURIComponent(payload.operationPath),\n method: payload.method,\n } satisfies ValidParams\n if (payload.path === 'overview') {\n return execCallback(await fn({ name: 'operation.overview', params }))\n }\n if (payload.path === 'servers') {\n return execCallback(await fn({ name: 'operation.servers', params }))\n }\n if (payload.path === 'authentication') {\n return execCallback(await fn({ name: 'operation.authentication', params }))\n }\n }\n })\n\n //------------------------------------------------------------------------------------\n // Tabs Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('tabs:copy:url', (payload) => onCopyTabUrl(payload.index))\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"app-events.js","names":[],"sources":["../../../../src/v2/features/app/app-events.ts"],"sourcesContent":["import type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { OperationExampleMeta, WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { type ShallowRef, computed } from 'vue'\nimport { type NavigationFailure, NavigationFailureType, type Router } from 'vue-router'\n\nimport type { ScalarClientAppRouteParams } from '@/v2/features/app/helpers/routes'\nimport { initializeWorkspaceEventHandlers } from '@/v2/workspace-events'\n\nexport function initializeAppEventHandlers({\n eventBus,\n store,\n router,\n rebuildSidebar,\n navigateToCurrentTab,\n onSelectSidebarItem,\n onAfterExampleCreation,\n onCopyTabUrl,\n onToggleSidebar,\n closeSidebar,\n renameWorkspace,\n}: {\n eventBus: WorkspaceEventBus\n store: ShallowRef<WorkspaceStore | null>\n router: Router\n rebuildSidebar: (documentName?: string) => void\n navigateToCurrentTab: () => Promise<void>\n onSelectSidebarItem: (id: string) => void\n onAfterExampleCreation: (o: OperationExampleMeta & { documentName?: string }) => void\n onCopyTabUrl: (tabIndex: number) => void\n onToggleSidebar: () => void\n closeSidebar: () => void\n renameWorkspace: (name: string) => Promise<void>\n}) {\n const currentRoute = computed(() => router.currentRoute?.value)\n\n /**\n * Checks if the current route params match the specified operation meta.\n * Useful for determining if the sidebar or UI needs to be updated after changes to operations/examples.\n *\n * NOTE: It may be beneficial to compare to the active state instead of the router\n */\n const isRouteParamsMatch = ({\n documentName,\n path,\n method,\n exampleName,\n }: {\n documentName: string\n path?: string\n method?: HttpMethod\n exampleName?: string\n }) => {\n if (documentName !== undefined && documentName !== currentRoute.value?.params.documentSlug) {\n return false\n }\n if (path !== undefined && encodeURIComponent(path) !== currentRoute.value?.params.pathEncoded) {\n return false\n }\n if (method !== undefined && method !== currentRoute.value?.params.method) {\n return false\n }\n if (exampleName !== undefined && exampleName !== currentRoute.value?.params.exampleName) {\n return false\n }\n return true\n }\n\n initializeWorkspaceEventHandlers({\n eventBus,\n store,\n hooks: {\n //------------------------------------------------------------------------------------\n // Document Related Hooks\n //------------------------------------------------------------------------------------\n 'document:delete:document': {\n onAfterExecute: async (payload) => {\n // Redirect to the workspace environment page if the document was deleted\n if (currentRoute?.value?.params.documentSlug === payload.name) {\n await router.push({\n name: 'workspace.environment',\n })\n }\n },\n },\n //------------------------------------------------------------------------------------\n // Operation Related Hooks\n //------------------------------------------------------------------------------------\n 'operation:update:pathMethod': {\n onBeforeExecute: (payload) => ({\n ...payload,\n callback: async (status) => {\n // Redirect to the new example if the mutation was successful\n if (status === 'success') {\n // Rebuild the sidebar with the updated order\n rebuildSidebar(store.value?.workspace.activeDocument?.['x-scalar-navigation']?.name)\n\n // Now this redirect works for any example\n await router.replace({\n name: 'example',\n params: {\n method: payload.payload.method,\n pathEncoded: encodeURIComponent(payload.payload.path),\n exampleName: currentRoute.value?.params.exampleName,\n },\n })\n }\n\n payload.callback(status, payload.blurTargetSelector)\n },\n }),\n },\n 'operation:create:operation': {\n onAfterExecute: (payload) => {\n onAfterExampleCreation({\n path: payload.path,\n method: payload.method,\n exampleKey: 'default',\n documentName: payload.documentName,\n })\n },\n },\n 'operation:upsert:parameter': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n 'operation:update:extra-parameters': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n 'operation:reload:history': {\n onAfterExecute: (payload) => onAfterExampleCreation({ ...payload.meta, exampleKey: 'draft' }),\n },\n 'operation:delete:operation': {\n onAfterExecute: async (payload) => {\n rebuildSidebar(payload.documentName)\n const {\n documentName,\n meta: { path, method },\n } = payload\n // Navigate to the document overview page if the operation was deleted\n if (\n isRouteParamsMatch({\n documentName,\n path,\n method,\n })\n ) {\n await router.replace({\n name: 'document.overview',\n params: {\n documentSlug: documentName,\n },\n })\n }\n },\n },\n 'operation:create:draft-example': {\n onAfterExecute: async (payload) => {\n onAfterExampleCreation({ ...payload.meta, exampleKey: payload.exampleName })\n await router.push({\n name: 'example',\n params: {\n documentSlug: payload.documentName,\n pathEncoded: encodeURIComponent(payload.meta.path),\n method: payload.meta.method,\n exampleName: payload.exampleName,\n },\n })\n },\n },\n 'operation:delete:example': {\n onAfterExecute: async (payload) => {\n rebuildSidebar(payload.documentName)\n\n const {\n documentName,\n meta: { path, method, exampleKey },\n } = payload\n // Navigate to the default example if the example was deleted\n if (\n isRouteParamsMatch({\n documentName,\n path,\n method,\n exampleName: exampleKey,\n })\n ) {\n await router.replace({\n name: 'example',\n params: {\n pathEncoded: encodeURIComponent(path),\n method,\n documentSlug: documentName,\n exampleName: 'default',\n },\n })\n }\n },\n },\n 'operation:rename:example': {\n onAfterExecute: async ({ meta, payload, documentName }) => {\n // Refresh sidebar\n onAfterExampleCreation({ ...meta, exampleKey: payload.name, documentName })\n\n // Redirect to the new example if the mutation was successful and we are currently on the example\n if (\n isRouteParamsMatch({ documentName, path: meta.path, method: meta.method, exampleName: meta.exampleKey })\n ) {\n await router.replace({\n name: 'example',\n params: {\n documentSlug: documentName,\n pathEncoded: encodeURIComponent(meta.path),\n method: meta.method,\n exampleName: payload.name,\n },\n })\n }\n },\n },\n //------------------------------------------------------------------------------------\n // Operation Request Body Related Hooks\n //------------------------------------------------------------------------------------\n 'operation:update:requestBody:value': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n 'operation:update:requestBody:formValue': {\n onAfterExecute: (payload) => onAfterExampleCreation(payload.meta),\n },\n //------------------------------------------------------------------------------------\n // Tag Related Event Hooks\n //------------------------------------------------------------------------------------\n 'tag:create:tag': {\n onAfterExecute: (payload) => rebuildSidebar(payload.documentName),\n },\n 'tag:edit:tag': {\n onAfterExecute: async (payload) => {\n rebuildSidebar(payload.documentName)\n\n /**\n * If the currently viewed operation is a child of the renamed tag, redirect to\n * the same route so the sidebar and breadcrumbs reflect the new tag name\n */\n const isNestedUnderTag = payload.tag.children?.some(\n (child) =>\n child.type === 'operation' &&\n isRouteParamsMatch({\n documentName: payload.documentName,\n path: child.path,\n method: child.method,\n }),\n )\n\n if (isNestedUnderTag) {\n await router.replace({ ...currentRoute.value })\n }\n },\n },\n 'tag:delete:tag': {\n onAfterExecute: (payload) => rebuildSidebar(payload.documentName),\n },\n //------------------------------------------------------------------------------------\n // Tabs Related Event Hooks\n //------------------------------------------------------------------------------------\n 'tabs:add:tab': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:close:tab': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:focus:tab': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:focus:tab-last': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:navigate:previous': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:navigate:next': {\n onAfterExecute: navigateToCurrentTab,\n },\n 'tabs:update:tabs': {\n onAfterExecute: navigateToCurrentTab,\n },\n },\n })\n\n // Worksapce rename event handler\n eventBus.on('workspace:update:name', (payload) => renameWorkspace(payload))\n\n //------------------------------------------------------------------------------------\n // Navigation Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('scroll-to:nav-item', ({ id }) => onSelectSidebarItem(id))\n\n //------------------------------------------------------------------------------------\n // UI Related Event Handlers\n //------------------------------------------------------------------------------------\n // Note: Command palette handler is colocated with the command palette component\n\n eventBus.on('ui:toggle:sidebar', onToggleSidebar)\n\n /**\n * Bind the inernal navigation to a public api\n */\n eventBus.on('ui:navigate', async (payload) => {\n const { replace = false } = payload\n const fn = replace ? router.replace : router.push\n\n const execCallback = (result: NavigationFailure | void | undefined) => {\n if (!result) {\n // Close the sidebar if it is open\n closeSidebar()\n return payload.callback?.('success')\n }\n\n const navigationFailure: 16 = NavigationFailureType.duplicated\n\n if (result.type !== navigationFailure) {\n return payload.callback?.('error')\n }\n\n return payload.callback?.('success')\n }\n\n type ValidParams = Partial<Record<ScalarClientAppRouteParams, string>>\n\n if (payload.page === 'document') {\n const params = {\n documentSlug: payload.documentSlug,\n workspaceSlug: payload.workspaceSlug,\n teamSlug: payload.teamSlug,\n } satisfies ValidParams\n\n if (payload.path === 'overview') {\n return execCallback(await fn({ name: 'document.overview', params }))\n }\n if (payload.path === 'servers') {\n return execCallback(await fn({ name: 'document.servers', params }))\n }\n if (payload.path === 'environment') {\n return execCallback(await fn({ name: 'document.environment', params }))\n }\n if (payload.path === 'authentication') {\n return execCallback(await fn({ name: 'document.authentication', params }))\n }\n if (payload.path === 'cookies') {\n return execCallback(await fn({ name: 'document.cookies', params }))\n }\n if (payload.path === 'settings') {\n return execCallback(await fn({ name: 'document.settings', params }))\n }\n }\n\n if (payload.page === 'workspace') {\n const params = { workspaceSlug: payload.workspaceSlug, teamSlug: payload.teamSlug } satisfies ValidParams\n if (payload.path === 'get-started') {\n return execCallback(await fn({ name: 'workspace.get-started', params }))\n }\n if (payload.path === 'environment') {\n return execCallback(await fn({ name: 'workspace.environment', params }))\n }\n if (payload.path === 'cookies') {\n return execCallback(await fn({ name: 'workspace.cookies', params }))\n }\n if (payload.path === 'settings') {\n return execCallback(await fn({ name: 'workspace.settings', params }))\n }\n }\n\n if (payload.page === 'example') {\n const params = {\n teamSlug: payload.teamSlug,\n workspaceSlug: payload.workspaceSlug,\n documentSlug: payload.documentSlug,\n pathEncoded: encodeURIComponent(payload.path),\n method: payload.method,\n exampleName: payload.exampleName,\n } satisfies ValidParams\n return execCallback(await fn({ name: 'example', params }))\n }\n\n if (payload.page === 'operation') {\n const params = {\n teamSlug: payload.teamSlug,\n workspaceSlug: payload.workspaceSlug,\n documentSlug: payload.documentSlug,\n pathEncoded: encodeURIComponent(payload.operationPath),\n method: payload.method,\n } satisfies ValidParams\n if (payload.path === 'overview') {\n return execCallback(await fn({ name: 'operation.overview', params }))\n }\n if (payload.path === 'servers') {\n return execCallback(await fn({ name: 'operation.servers', params }))\n }\n if (payload.path === 'authentication') {\n return execCallback(await fn({ name: 'operation.authentication', params }))\n }\n }\n })\n\n //------------------------------------------------------------------------------------\n // Tabs Related Event Handlers\n //------------------------------------------------------------------------------------\n eventBus.on('tabs:copy:url', (payload) => onCopyTabUrl(payload.index))\n}\n"],"mappings":"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"}
@@ -21,8 +21,7 @@ export type GetEntryByLocation = (location: {
21
21
  parent?: TraversedEntry | undefined;
22
22
  }) | undefined;
23
23
  type WorkspaceOption = ScalarListboxOption & {
24
- teamUid: string;
25
- namespace: string;
24
+ teamSlug: string;
26
25
  slug: string;
27
26
  };
28
27
  /** Defines the overall application state structure and its main feature modules */
@@ -57,19 +56,17 @@ export type AppState = {
57
56
  workspace: {
58
57
  /** Creates a new workspace and navigates to it */
59
58
  create: (payload: {
60
- teamUid?: string;
61
- namespace?: string;
59
+ teamSlug?: string;
62
60
  slug?: string;
63
61
  name: string;
64
62
  }) => Promise<{
65
63
  name: string;
66
- namespace: string;
67
64
  slug: string;
68
- teamUid: string;
65
+ teamSlug: string;
69
66
  } | undefined>;
70
67
  /** All workspace list */
71
68
  workspaceList: Ref<WorkspaceOption[]>;
72
- /** Filtered workspace list, based on the current teamUid */
69
+ /** Filtered workspace list, based on the current teamSlug */
73
70
  filteredWorkspaceList: ComputedRef<WorkspaceOption[]>;
74
71
  /**
75
72
  * Groups workspaces into team and local categories for display in the workspace picker.
@@ -82,7 +79,7 @@ export type AppState = {
82
79
  label: string;
83
80
  } | null>;
84
81
  /** Navigates to the specified workspace */
85
- navigateToWorkspace: (namespace?: string, slug?: string) => Promise<void>;
82
+ navigateToWorkspace: (teamSlug?: string, slug?: string) => Promise<void>;
86
83
  /** Whether the workspace page is open */
87
84
  isOpen: ComputedRef<boolean>;
88
85
  /**
@@ -104,8 +101,6 @@ export type AppState = {
104
101
  options?: ApiClientAppOptions;
105
102
  /** The currently active entities */
106
103
  activeEntities: {
107
- /** The namespace of the current entity, e.g. "default" or a custom namespace */
108
- namespace: Ref<string | undefined>;
109
104
  /** The slug identifying the current workspace */
110
105
  workspaceSlug: Ref<string | undefined>;
111
106
  /** The slug of the currently selected document in the workspace */
@@ -116,10 +111,10 @@ export type AppState = {
116
111
  method: Ref<HttpMethod | undefined>;
117
112
  /** The name of the currently selected example (for examples within an endpoint) */
118
113
  exampleName: Ref<string | undefined>;
119
- /** The unique identifier for the selected team context (read-only; use setTeamUid to change) */
120
- teamUid: Readonly<Ref<string>>;
121
- /** Sets the current team context by team UID */
122
- setTeamUid: (value: string) => void;
114
+ /** The slug of the selected team context (read-only; use setTeamSlug to change) */
115
+ teamSlug: Readonly<Ref<string>>;
116
+ /** Sets the current team context by team slug */
117
+ setTeamSlug: (value: string) => void;
123
118
  };
124
119
  /** The currently active environment */
125
120
  environment: ComputedRef<XScalarEnvironment>;
@@ -141,6 +136,17 @@ export type AppState = {
141
136
  };
142
137
  telemetry: Ref<boolean>;
143
138
  };
139
+ /** Default slug used when auto-creating a team workspace on demand. */
140
+ export declare const DEFAULT_TEAM_WORKSPACE_SLUG = "default";
141
+ /**
142
+ * Temporary kill switch for team workspace functionality.
143
+ *
144
+ * While the team workspace experience is still being polished we hide the
145
+ * "Team Workspaces" group from the picker and refuse to create new team
146
+ * workspaces. Existing team workspaces remain in storage and can be restored
147
+ * by flipping this flag back to `true`.
148
+ */
149
+ export declare const TEAM_WORKSPACES_ENABLED = false;
144
150
  export declare const createAppState: ({ router, fileLoader, fallbackThemeSlug, customThemes, telemetryDefault, options, }: {
145
151
  router: Router;
146
152
  fileLoader?: LoaderPlugin;
@@ -1 +1 @@
1
- {"version":3,"file":"app-state.d.ts","sourceRoot":"","sources":["../../../../src/v2/features/app/app-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-state.d.ts","sourceRoot":"","sources":["../../../../src/v2/features/app/app-state.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,8 @@ import { initializeAppEventHandlers } from "./app-events.js";
8
8
  import { canLoadWorkspace, filterWorkspacesByTeam } from "./helpers/filter-workspaces.js";
9
9
  import { computed, readonly, ref, shallowRef, watch } from "vue";
10
10
  import { getActiveEnvironment } from "@scalar/workspace-store/request-example";
11
- import { createWorkspaceEventBus } from "@scalar/workspace-store/events";
12
11
  import { isDefined } from "@scalar/helpers/array/is-defined";
12
+ import { createWorkspaceEventBus } from "@scalar/workspace-store/events";
13
13
  import { createWorkspaceStore } from "@scalar/workspace-store/client";
14
14
  import { generateUniqueValue } from "@scalar/workspace-store/helpers/generate-unique-value";
15
15
  import { createSidebarState, generateReverseIndex } from "@scalar/sidebar";
@@ -24,6 +24,10 @@ import { extensions } from "@scalar/workspace-store/schemas/extensions";
24
24
  var DEFAULT_DEBOUNCE_DELAY = 1e3;
25
25
  /** Default sidebar width in pixels. */
26
26
  var DEFAULT_SIDEBAR_WIDTH = 288;
27
+ /** Default slug used when auto-creating a team workspace on demand. */
28
+ var DEFAULT_TEAM_WORKSPACE_SLUG = "default";
29
+ /** Default display name used when auto-creating a team workspace on demand. */
30
+ var DEFAULT_TEAM_WORKSPACE_NAME = "Workspace";
27
31
  var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "default", customThemes = () => [], telemetryDefault, options }) => {
28
32
  /** Workspace event bus for handling workspace-level events. */
29
33
  const eventBus = createWorkspaceEventBus({ debug: false });
@@ -33,8 +37,8 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
33
37
  * This happens once per user and transforms old data structure to new workspace format
34
38
  */
35
39
  await migrateLocalStorageToIndexDb();
36
- const teamUid = ref("local");
37
- const namespace = ref(void 0);
40
+ const teamSlug = ref("local");
41
+ const routeTeamSlug = ref(void 0);
38
42
  const workspaceSlug = ref(void 0);
39
43
  const documentSlug = ref(void 0);
40
44
  const method = ref(void 0);
@@ -45,8 +49,10 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
45
49
  const currentRoute = computed(() => router.currentRoute.value ?? null);
46
50
  const activeWorkspace = shallowRef(null);
47
51
  const workspaces = ref([]);
48
- const filteredWorkspaces = computed(() => filterWorkspacesByTeam(workspaces.value, teamUid.value));
49
- const workspaceGroups = computed(() => groupWorkspacesByTeam(filteredWorkspaces.value, teamUid.value));
52
+ const filteredWorkspaces = computed(() => filterWorkspacesByTeam(workspaces.value, teamSlug.value));
53
+ const workspaceGroups = computed(() => {
54
+ return groupWorkspacesByTeam(filteredWorkspaces.value, "local");
55
+ });
50
56
  /**
51
57
  * `true` when the active workspace is backed by a team (i.e. not the
52
58
  * built-in `'local'` team). We look the workspace up in the full
@@ -58,7 +64,7 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
58
64
  const id = activeWorkspace.value?.id;
59
65
  if (!id) return false;
60
66
  const workspace = workspaces.value.find((w) => w.id === id);
61
- return Boolean(workspace && workspace.teamUid !== "local");
67
+ return Boolean(workspace && workspace.teamSlug !== "local");
62
68
  });
63
69
  const store = shallowRef(null);
64
70
  const persistedTelemetry = workspaceStorage.getTelemetry();
@@ -74,25 +80,24 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
74
80
  */
75
81
  const environment = computed(() => getActiveEnvironment(store.value, activeDocument.value).environment);
76
82
  /** Update the workspace list when the component is mounted */
77
- workspaces.value = await persistence.getAll().then((w) => w.map(({ teamUid, namespace, slug, name }) => ({
78
- id: getWorkspaceId(namespace, slug),
79
- teamUid,
80
- namespace,
83
+ workspaces.value = await persistence.getAll().then((w) => w.map(({ teamSlug, slug, name }) => ({
84
+ id: getWorkspaceId(teamSlug, slug),
85
+ teamSlug,
81
86
  slug,
82
87
  label: name
83
88
  })));
84
89
  /**
85
90
  * Renames the currently active workspace.
86
91
  * Updates the workspace name in persistence and updates activeWorkspace if successful.
87
- * Returns early if namespace or workspaceSlug is not set, or if update fails.
92
+ * Returns early if team slug or workspaceSlug is not set, or if update fails.
88
93
  */
89
94
  const renameWorkspace = async (name) => {
90
- const namespaceValue = namespace.value;
95
+ const teamSlugValue = routeTeamSlug.value;
91
96
  const slugValue = workspaceSlug.value;
92
- if (!namespaceValue || !slugValue) return;
93
- const workspaceId = getWorkspaceId(namespaceValue, slugValue);
97
+ if (!teamSlugValue || !slugValue) return;
98
+ const workspaceId = getWorkspaceId(teamSlugValue, slugValue);
94
99
  if (await persistence.updateName({
95
- namespace: namespaceValue,
100
+ teamSlug: teamSlugValue,
96
101
  slug: slugValue
97
102
  }, name) === void 0) return;
98
103
  workspaces.value = workspaces.value.map((workspace) => {
@@ -110,10 +115,10 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
110
115
  /**
111
116
  * Creates a client-side workspace store with persistence enabled for the given workspace id.
112
117
  */
113
- const createClientStore = async ({ namespace, slug }) => {
118
+ const createClientStore = async ({ teamSlug, slug }) => {
114
119
  return createWorkspaceStore({
115
120
  plugins: [await persistencePlugin({
116
- workspaceId: getWorkspaceId(namespace, slug),
121
+ workspaceId: getWorkspaceId(teamSlug, slug),
117
122
  debounceDelay: DEFAULT_DEBOUNCE_DELAY
118
123
  })],
119
124
  fileLoader,
@@ -124,19 +129,19 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
124
129
  * Attempts to load and activate a workspace by id.
125
130
  * Returns true when the workspace was found and activated.
126
131
  */
127
- const loadWorkspace = async (namespace, slug) => {
132
+ const loadWorkspace = async (teamSlug, slug) => {
128
133
  const workspace = await persistence.getItem({
129
- namespace,
134
+ teamSlug,
130
135
  slug
131
136
  });
132
137
  if (!workspace) return { success: false };
133
138
  const client = await createClientStore({
134
- namespace,
139
+ teamSlug,
135
140
  slug
136
141
  });
137
142
  client.loadWorkspace(workspace.workspace);
138
143
  activeWorkspace.value = {
139
- id: getWorkspaceId(workspace.namespace, workspace.slug),
144
+ id: getWorkspaceId(workspace.teamSlug, workspace.slug),
140
145
  label: workspace.name
141
146
  };
142
147
  store.value = client;
@@ -149,7 +154,7 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
149
154
  * Creates and persists the default workspace with a blank draft document.
150
155
  * Used when no workspaces exist yet.
151
156
  */
152
- const createAndPersistWorkspace = async ({ name, teamUid, namespace, slug }) => {
157
+ const createAndPersistWorkspace = async ({ name, teamSlug, slug }) => {
153
158
  const draftStore = createWorkspaceStore();
154
159
  await draftStore.addDocument({
155
160
  name: "drafts",
@@ -159,23 +164,21 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
159
164
  title: "Drafts",
160
165
  version: "1.0.0"
161
166
  },
162
- paths: { "/": { get: {} } },
167
+ paths: { "/": { get: { summary: "First Request" } } },
163
168
  "x-scalar-original-document-hash": "drafts",
164
169
  "x-scalar-icon": "interface-edit-tool-pencil"
165
170
  }
166
171
  });
167
172
  const workspace = await persistence.setItem({
168
- namespace,
173
+ teamSlug,
169
174
  slug
170
175
  }, {
171
176
  name,
172
- teamUid,
173
177
  workspace: draftStore.exportWorkspace()
174
178
  });
175
179
  workspaces.value.push({
176
- id: getWorkspaceId(workspace.namespace, workspace.slug),
177
- teamUid: workspace.teamUid,
178
- namespace: workspace.namespace,
180
+ id: getWorkspaceId(workspace.teamSlug, workspace.slug),
181
+ teamSlug: workspace.teamSlug,
179
182
  slug: workspace.slug,
180
183
  label: workspace.name
181
184
  });
@@ -184,18 +187,18 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
184
187
  /**
185
188
  * Navigates to the overview page of the specified workspace.
186
189
  *
187
- * @param namespace - The workspace namespace.
190
+ * @param teamSlug - The slug of the team that owns the workspace (used as the URL `@teamSlug` segment).
188
191
  * @param slug - The unique workspace slug (identifier).
189
192
  */
190
- const navigateToWorkspace = async (namespace, slug) => {
191
- if (!namespace || !slug) {
193
+ const navigateToWorkspace = async (teamSlug, slug) => {
194
+ if (!teamSlug || !slug) {
192
195
  await router.push("/");
193
196
  return;
194
197
  }
195
198
  await router.push({
196
199
  name: "example",
197
200
  params: {
198
- namespace,
201
+ teamSlug,
199
202
  workspaceSlug: slug,
200
203
  documentSlug: "drafts",
201
204
  pathEncoded: encodeURIComponent("/"),
@@ -214,12 +217,38 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
214
217
  * await createWorkspace({ name: 'My Awesome API' })
215
218
  * // -> Navigates to /workspace/my-awesome-api (if available)
216
219
  */
217
- const createWorkspace = async ({ teamUid, namespace, slug, name }) => {
220
+ const createWorkspace = async ({ teamSlug, slug, name }) => {
221
+ if (teamSlug && teamSlug !== "local") {
222
+ const existing = workspaces.value.find((w) => w.teamSlug === teamSlug);
223
+ if (existing) {
224
+ await navigateToWorkspace(existing.teamSlug, existing.slug);
225
+ return {
226
+ teamSlug: existing.teamSlug,
227
+ slug: existing.slug,
228
+ name: existing.label
229
+ };
230
+ }
231
+ console.warn("Team workspace creation is currently disabled. Falling back to the local default workspace.");
232
+ await navigateToWorkspace("local", "default");
233
+ return;
234
+ }
235
+ if (teamSlug && teamSlug !== "local") {
236
+ const existing = workspaces.value.find((w) => w.teamSlug === teamSlug);
237
+ if (existing) {
238
+ console.warn(`A workspace already exists for team "${teamSlug}". Navigating to the existing workspace instead.`);
239
+ await navigateToWorkspace(existing.teamSlug, existing.slug);
240
+ return {
241
+ teamSlug: existing.teamSlug,
242
+ slug: existing.slug,
243
+ name: existing.label
244
+ };
245
+ }
246
+ }
218
247
  store.value = null;
219
248
  const newWorkspaceSlug = await generateUniqueValue({
220
249
  defaultValue: slug ?? name,
221
250
  validation: async (value) => !await persistence.has({
222
- namespace: namespace ?? "local",
251
+ teamSlug: teamSlug ?? "local",
223
252
  slug: value
224
253
  }),
225
254
  maxRetries: 100,
@@ -227,12 +256,11 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
227
256
  });
228
257
  if (!newWorkspaceSlug) return;
229
258
  const createdWorkspace = await createAndPersistWorkspace({
230
- teamUid,
231
- namespace,
259
+ teamSlug,
232
260
  slug: newWorkspaceSlug,
233
261
  name
234
262
  });
235
- await navigateToWorkspace(createdWorkspace.namespace, createdWorkspace.slug);
263
+ await navigateToWorkspace(createdWorkspace.teamSlug, createdWorkspace.slug);
236
264
  return createdWorkspace;
237
265
  };
238
266
  /**
@@ -243,12 +271,12 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
243
271
  * - If found, navigates to the active tab path (if available).
244
272
  * - If not found, creates the default workspace and navigates to it.
245
273
  */
246
- const changeWorkspace = async (namespace, slug, to) => {
274
+ const changeWorkspace = async (teamSlug, slug, to) => {
247
275
  /** For initial load we want to fall through to our router default behaviour */
248
276
  const isInitialLoad = activeWorkspace.value === null;
249
277
  store.value = null;
250
278
  isSyncingWorkspace.value = true;
251
- const result = await loadWorkspace(namespace, slug);
279
+ const result = await loadWorkspace(teamSlug, slug);
252
280
  if (result.success) {
253
281
  const index = result.workspace["x-scalar-active-tab"] ?? 0;
254
282
  const tabs = result.workspace["x-scalar-tabs"];
@@ -269,8 +297,8 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
269
297
  isSyncingWorkspace.value = false;
270
298
  return;
271
299
  }
272
- const targetWorkspace = filteredWorkspaces.value.find((workspace) => workspace.teamUid === "local" && workspace.slug === "default") ?? filteredWorkspaces.value[0];
273
- if (targetWorkspace) return navigateToWorkspace(targetWorkspace.namespace, targetWorkspace.slug);
300
+ const targetWorkspace = filteredWorkspaces.value.find((workspace) => workspace.teamSlug === "local" && workspace.slug === "default") ?? filteredWorkspaces.value[0];
301
+ if (targetWorkspace) return navigateToWorkspace(targetWorkspace.teamSlug, targetWorkspace.slug);
274
302
  const createResult = await createWorkspace({
275
303
  name: "Default Workspace",
276
304
  slug: "default"
@@ -283,10 +311,10 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
283
311
  * Sets the current team context. If the active workspace is not accessible
284
312
  * with the new team, navigates to the default workspace for that team.
285
313
  */
286
- const setTeamUid = (value) => {
287
- teamUid.value = value;
288
- const workspace = filteredWorkspaces.value.find((w) => w.namespace === namespace.value && w.slug === workspaceSlug.value);
289
- if (workspace && canLoadWorkspace(workspace.teamUid, value)) return;
314
+ const setTeamSlug = (value) => {
315
+ teamSlug.value = value;
316
+ const workspace = filteredWorkspaces.value.find((w) => w.teamSlug === routeTeamSlug.value && w.slug === workspaceSlug.value);
317
+ if (workspace && canLoadWorkspace(workspace.teamSlug, value)) return;
290
318
  return navigateToWorkspace("local", "default");
291
319
  };
292
320
  const entries = computed(() => {
@@ -529,18 +557,25 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
529
557
  const handleRouteChange = (to) => {
530
558
  const slug = getRouteParam("workspaceSlug", to);
531
559
  const document = getRouteParam("documentSlug", to);
532
- const namespaceValue = getRouteParam("namespace", to);
533
- if (!namespaceValue || !slug) return;
534
- const workspace = workspaces.value.find((workspace) => workspace.slug === slug && workspace.namespace === namespaceValue);
535
- if (workspace && !canLoadWorkspace(workspace.teamUid, teamUid.value)) return navigateToWorkspace("local", "default");
536
- namespace.value = namespaceValue;
560
+ const nextTeamSlug = getRouteParam("teamSlug", to);
561
+ if (!nextTeamSlug || !slug) return;
562
+ const workspace = workspaces.value.find((workspace) => workspace.slug === slug && workspace.teamSlug === nextTeamSlug);
563
+ if (workspace && !canLoadWorkspace(workspace.teamSlug, teamSlug.value)) return navigateToWorkspace("local", "default");
564
+ routeTeamSlug.value = nextTeamSlug;
537
565
  workspaceSlug.value = slug;
538
566
  documentSlug.value = document;
539
567
  method.value = getRouteParam("method", to);
540
568
  path.value = getRouteParam("pathEncoded", to);
541
569
  exampleName.value = getRouteParam("exampleName", to);
542
570
  if (to.path !== "") workspaceStorage.setCurrentPath(to.path);
543
- if (getWorkspaceId(namespace.value, slug) !== activeWorkspace.value?.id) return changeWorkspace(namespace.value, slug, to);
571
+ if (getWorkspaceId(nextTeamSlug, slug) !== activeWorkspace.value?.id) {
572
+ if (nextTeamSlug !== "local" && nextTeamSlug === teamSlug.value && !workspace) return createWorkspace({
573
+ teamSlug: nextTeamSlug,
574
+ slug,
575
+ name: DEFAULT_TEAM_WORKSPACE_NAME
576
+ });
577
+ return changeWorkspace(nextTeamSlug, slug, to);
578
+ }
544
579
  if (document && document !== store.value?.workspace[extensions.workspace.activeDocument]) store?.value?.update("x-scalar-active-document", document);
545
580
  syncTabs(to);
546
581
  syncSidebar(to);
@@ -624,14 +659,13 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
624
659
  currentRoute,
625
660
  loading: isSyncingWorkspace,
626
661
  activeEntities: {
627
- namespace,
628
662
  workspaceSlug,
629
663
  documentSlug,
630
664
  path,
631
665
  method,
632
666
  exampleName,
633
- teamUid: readonly(teamUid),
634
- setTeamUid
667
+ teamSlug: readonly(teamSlug),
668
+ setTeamSlug
635
669
  },
636
670
  environment,
637
671
  document: activeDocument,
@@ -646,6 +680,6 @@ var createAppState = async ({ router, fileLoader, fallbackThemeSlug = () => "def
646
680
  };
647
681
  };
648
682
  //#endregion
649
- export { createAppState };
683
+ export { DEFAULT_TEAM_WORKSPACE_SLUG, createAppState };
650
684
 
651
685
  //# sourceMappingURL=app-state.js.map