@scalar/agent-chat 0.12.2 → 0.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/App.vue.d.ts +1 -1
  2. package/dist/App.vue.d.ts.map +1 -1
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +1 -1
  5. package/dist/api.js.map +1 -1
  6. package/dist/components/ActionsDropdown.vue.d.ts.map +1 -1
  7. package/dist/components/ActionsDropdown.vue.js +1 -1
  8. package/dist/components/ActionsDropdown.vue.js.map +1 -1
  9. package/dist/components/ActionsDropdown.vue.script.js +2 -1
  10. package/dist/components/ActionsDropdown.vue.script.js.map +1 -1
  11. package/dist/components/RequestPreview.vue.js +1 -1
  12. package/dist/components/RequestPreview.vue.js.map +1 -1
  13. package/dist/components/RequestPreview.vue.script.js +1 -1
  14. package/dist/components/RequestPreview.vue.script.js.map +1 -1
  15. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js.map +1 -1
  16. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js +1 -1
  17. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js.map +1 -1
  18. package/dist/components/SearchPopover.vue.d.ts.map +1 -1
  19. package/dist/components/SearchPopover.vue.js +1 -1
  20. package/dist/components/SearchPopover.vue.js.map +1 -1
  21. package/dist/components/SearchPopover.vue.script.js +2 -1
  22. package/dist/components/SearchPopover.vue.script.js.map +1 -1
  23. package/dist/components/Selector.vue.d.ts.map +1 -1
  24. package/dist/components/Selector.vue.js.map +1 -1
  25. package/dist/components/Selector.vue.script.js +2 -1
  26. package/dist/components/Selector.vue.script.js.map +1 -1
  27. package/dist/components/ServerSelector.vue.js.map +1 -1
  28. package/dist/components/ServerSelector.vue.script.js +1 -1
  29. package/dist/components/ServerSelector.vue.script.js.map +1 -1
  30. package/dist/components/UploadSection.vue.js +1 -1
  31. package/dist/components/UploadSection.vue.js.map +1 -1
  32. package/dist/components/UploadSection.vue.script.js +1 -1
  33. package/dist/components/UploadSection.vue.script.js.map +1 -1
  34. package/dist/entities/registry/document.d.ts +1 -1
  35. package/dist/package.json +1 -1
  36. package/dist/state/state.d.ts +2 -2
  37. package/dist/state/state.d.ts.map +1 -1
  38. package/dist/state/state.js +2 -2
  39. package/dist/state/state.js.map +1 -1
  40. package/dist/style.css +202 -202
  41. package/dist/views/Catalog/Catalog.vue.d.ts +1 -1
  42. package/dist/views/Catalog/Catalog.vue.d.ts.map +1 -1
  43. package/dist/views/Catalog/Catalog.vue.js +1 -1
  44. package/dist/views/Catalog/Catalog.vue.js.map +1 -1
  45. package/dist/views/Catalog/Catalog.vue.script.js +3 -1
  46. package/dist/views/Catalog/Catalog.vue.script.js.map +1 -1
  47. package/dist/views/Chat/Messages/AskForAuthentication.vue.js +1 -1
  48. package/dist/views/Chat/Messages/AskForAuthentication.vue.js.map +1 -1
  49. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js +1 -1
  50. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js.map +1 -1
  51. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.js +1 -1
  52. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.js.map +1 -1
  53. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.script.js +1 -1
  54. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.script.js.map +1 -1
  55. package/dist/views/Chat/Messages/Text.vue.js.map +1 -1
  56. package/dist/views/Chat/Messages/Text.vue.script.js +1 -1
  57. package/dist/views/Chat/Messages/Text.vue.script.js.map +1 -1
  58. package/dist/views/PromptForm.vue.d.ts.map +1 -1
  59. package/dist/views/PromptForm.vue.js +1 -1
  60. package/dist/views/PromptForm.vue.js.map +1 -1
  61. package/dist/views/PromptForm.vue.script.js +3 -1
  62. package/dist/views/PromptForm.vue.script.js.map +1 -1
  63. package/dist/views/Settings/Settings.vue.d.ts +1 -1
  64. package/dist/views/Settings/Settings.vue.d.ts.map +1 -1
  65. package/dist/views/Settings/Settings.vue.js +1 -1
  66. package/dist/views/Settings/Settings.vue.js.map +1 -1
  67. package/dist/views/Settings/Settings.vue.script.js +3 -1
  68. package/dist/views/Settings/Settings.vue.script.js.map +1 -1
  69. package/dist/vue-styles.css +98 -98
  70. package/package.json +10 -10
package/dist/App.vue.d.ts CHANGED
@@ -20,7 +20,7 @@ declare const state: {
20
20
  chat: import("@ai-sdk/vue").Chat<import("ai").UIMessage<unknown, import("ai").UIDataTypes, import("./state/state.js").Tools>>;
21
21
  workspaceStore: import("@scalar/workspace-store/client").WorkspaceStore;
22
22
  loading: import("vue").ComputedRef<boolean>;
23
- settingsModal: import("@scalar/components").ModalState;
23
+ settingsModal: import("@scalar/components/modal").ModalState;
24
24
  eventBus: import("@scalar/workspace-store/events").WorkspaceEventBus;
25
25
  proxyUrl: import("vue").ComputedRef<string>;
26
26
  proxyUrlRaw: Ref<string | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"App.vue.d.ts","sourceRoot":"","sources":["../src/App.vue"],"names":[],"mappings":"AAyEA,OAAO,EAAW,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAGvC,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,KAAK,WAAW,GAAG;IACjB,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,MAAM,CAAA;IACpC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACzB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC;AAsBF,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;iBAiCK,CAAC;WAAc,CAAC;;;;;iBAGsB,CAAC;;;;;;;;;;;;;CAvBrD,CAAA;AAIF,MAAM,MAAM,WAAW,GAAG;IACxB,gBAAgB,EAAE,OAAO,KAAK,CAAC,gBAAgB,CAAA;CAChD,CAAA;AA8CD,QAAA,MAAM,YAAY;;;;kFAIhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"App.vue.d.ts","sourceRoot":"","sources":["../src/App.vue"],"names":[],"mappings":"AAyEA,OAAO,EAAW,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAGvC,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,KAAK,WAAW,GAAG;IACjB,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,MAAM,CAAA;IACpC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACzB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC;AAsBF,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;iBAiCW,CAAC;WAAc,CAAC;;;;;iBAGsB,CAAC;;;;;;;;;;;;;CAvB3D,CAAA;AAIF,MAAM,MAAM,WAAW,GAAG;IACxB,gBAAgB,EAAE,OAAO,KAAK,CAAC,gBAAgB,CAAA;CAChD,CAAA;AA8CD,QAAA,MAAM,YAAY;;;;kFAIhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAMA,wBAAgB,0BAA0B,CAAC,EACzC,cAAc,EACd,WAAW,GACZ,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;;;EAYA;AAED,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,cAAc,EACd,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;oBA0E8B,MAAM;;;;;;;;;;;;;;;;;;;;;0BASA;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BvE;AAED,MAAM,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAA"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAMA,wBAAgB,0BAA0B,CAAC,EACzC,cAAc,EACd,WAAW,GACZ,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;;;EAYA;AAED,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,cAAc,EACd,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;oBA6E8B,MAAM;;;;;;;;;;;;;;;;;;;;;0BASA;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BvE;AAED,MAAM,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAA"}
package/dist/api.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { createError } from "./entities/error/helpers.js";
2
2
  import { registryApiMetadata } from "./entities/registry/document.js";
3
- import { n } from "neverpanic";
4
3
  import { array, coerce, object, string, validate } from "@scalar/validation";
4
+ import { n } from "neverpanic";
5
5
  //#region src/api.ts
6
6
  function createAuthorizationHeaders({ getAccessToken, getAgentKey }) {
7
7
  const token = getAccessToken?.();
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","names":[],"sources":["../src/api.ts"],"sourcesContent":["import { n } from 'neverpanic'\nimport { type Schema, type Static, array, coerce, object, string, validate } from '@scalar/validation'\n\nimport { createError } from '@/entities/error/helpers'\nimport { registryApiMetadata } from '@/entities/registry/document'\n\nexport function createAuthorizationHeaders({\n getAccessToken,\n getAgentKey,\n}: {\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const token = getAccessToken?.()\n const agentKey = getAgentKey?.()\n\n return {\n ...(token && {\n Authorization: `Bearer ${token}`,\n }),\n ...(agentKey && {\n 'x-scalar-agent-key': agentKey,\n }),\n }\n}\n\n/** Minimal set of API requests needed for agent chat */\nexport function createApi({\n baseUrl,\n getAccessToken,\n getAgentKey,\n}: {\n baseUrl: string\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const serviceErrorSchema = object({ message: string(), code: string() })\n\n const request = n.safeFn(\n async <T extends Schema>({\n path,\n method = 'get',\n query,\n body,\n responseSchema,\n }: {\n path: string\n method?: string\n query?: Record<string, string>\n body?: object\n responseSchema: T\n }) => {\n const url = `${baseUrl}${path}${query ? `?${new URLSearchParams(query)}` : ''}`\n\n const fetchResult = await n.fromUnsafe(\n async () =>\n fetch(url, {\n method,\n ...(body && { body: JSON.stringify(body) }),\n headers: {\n ...createAuthorizationHeaders({ getAccessToken, getAgentKey }),\n },\n }),\n (originalError) => createError('FAILED_TO_FETCH', originalError),\n )\n\n if (!fetchResult.success) {\n return fetchResult\n }\n\n const fetchDataResult = await n.fromUnsafe(\n async () => fetchResult.data.json(),\n (originalError) => createError('FAILED_TO_FETCH_DATA', originalError),\n )\n\n if (!fetchDataResult.success) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n if (!fetchResult.data.ok) {\n if (!validate(serviceErrorSchema, fetchDataResult.data)) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n const errorData = coerce(serviceErrorSchema, fetchDataResult.data)\n\n return {\n success: false,\n error: createError(errorData.code, errorData.message),\n }\n }\n\n if (!validate(responseSchema, fetchDataResult.data)) {\n return {\n success: false,\n error: createError('INVALID_RESPONSE', 'Invalid response. Please contact support'),\n }\n }\n\n return { success: true, data: coerce(responseSchema, fetchDataResult.data) as Static<T> }\n },\n )\n\n const search = async (query: string) =>\n request({\n path: '/vector/registry/search',\n query: { query },\n responseSchema: object({\n results: array(registryApiMetadata),\n }),\n })\n\n const getDocument = async (params: { namespace: string; slug: string }) =>\n request({\n path: `/vector/registry/document/${params.namespace}/${params.slug}`,\n responseSchema: registryApiMetadata,\n })\n\n const getKeyDocuments = async () =>\n request({\n path: '/vector/registry/documents',\n responseSchema: object({ documents: array(registryApiMetadata) }),\n })\n\n const getCuratedDocuments = async () =>\n request({\n path: '/vector/registry/curated',\n responseSchema: object({\n results: array(registryApiMetadata),\n }),\n })\n\n return {\n search,\n getDocument,\n getKeyDocuments,\n getCuratedDocuments,\n }\n}\n\nexport type Api = ReturnType<typeof createApi>\n"],"mappings":";;;;;AAMA,SAAgB,2BAA2B,EACzC,gBACA,eAIC;CACD,MAAM,QAAQ,kBAAkB;CAChC,MAAM,WAAW,eAAe;AAEhC,QAAO;EACL,GAAI,SAAS,EACX,eAAe,UAAU,SAC1B;EACD,GAAI,YAAY,EACd,sBAAsB,UACvB;EACF;;;AAIH,SAAgB,UAAU,EACxB,SACA,gBACA,eAKC;CACD,MAAM,qBAAqB,OAAO;EAAE,SAAS,QAAQ;EAAE,MAAM,QAAQ;EAAE,CAAC;CAExE,MAAM,UAAU,EAAE,OAChB,OAAyB,EACvB,MACA,SAAS,OACT,OACA,MACA,qBAOI;EACJ,MAAM,MAAM,GAAG,UAAU,OAAO,QAAQ,IAAI,IAAI,gBAAgB,MAAM,KAAK;EAE3E,MAAM,cAAc,MAAM,EAAE,WAC1B,YACE,MAAM,KAAK;GACT;GACA,GAAI,QAAQ,EAAE,MAAM,KAAK,UAAU,KAAK,EAAE;GAC1C,SAAS,EACP,GAAG,2BAA2B;IAAE;IAAgB;IAAa,CAAC,EAC/D;GACF,CAAC,GACH,kBAAkB,YAAY,mBAAmB,cAAc,CACjE;AAED,MAAI,CAAC,YAAY,QACf,QAAO;EAGT,MAAM,kBAAkB,MAAM,EAAE,WAC9B,YAAY,YAAY,KAAK,MAAM,GAClC,kBAAkB,YAAY,wBAAwB,cAAc,CACtE;AAED,MAAI,CAAC,gBAAgB,QACnB,QAAO;GACL,SAAS;GACT,OAAO,YAAY,iBAAiB,kDAAkD;GACvF;AAGH,MAAI,CAAC,YAAY,KAAK,IAAI;AACxB,OAAI,CAAC,SAAS,oBAAoB,gBAAgB,KAAK,CACrD,QAAO;IACL,SAAS;IACT,OAAO,YAAY,iBAAiB,kDAAkD;IACvF;GAGH,MAAM,YAAY,OAAO,oBAAoB,gBAAgB,KAAK;AAElE,UAAO;IACL,SAAS;IACT,OAAO,YAAY,UAAU,MAAM,UAAU,QAAQ;IACtD;;AAGH,MAAI,CAAC,SAAS,gBAAgB,gBAAgB,KAAK,CACjD,QAAO;GACL,SAAS;GACT,OAAO,YAAY,oBAAoB,2CAA2C;GACnF;AAGH,SAAO;GAAE,SAAS;GAAM,MAAM,OAAO,gBAAgB,gBAAgB,KAAK;GAAe;GAE5F;CAED,MAAM,SAAS,OAAO,UACpB,QAAQ;EACN,MAAM;EACN,OAAO,EAAE,OAAO;EAChB,gBAAgB,OAAO,EACrB,SAAS,MAAM,oBAAoB,EACpC,CAAC;EACH,CAAC;CAEJ,MAAM,cAAc,OAAO,WACzB,QAAQ;EACN,MAAM,6BAA6B,OAAO,UAAU,GAAG,OAAO;EAC9D,gBAAgB;EACjB,CAAC;CAEJ,MAAM,kBAAkB,YACtB,QAAQ;EACN,MAAM;EACN,gBAAgB,OAAO,EAAE,WAAW,MAAM,oBAAoB,EAAE,CAAC;EAClE,CAAC;CAEJ,MAAM,sBAAsB,YAC1B,QAAQ;EACN,MAAM;EACN,gBAAgB,OAAO,EACrB,SAAS,MAAM,oBAAoB,EACpC,CAAC;EACH,CAAC;AAEJ,QAAO;EACL;EACA;EACA;EACA;EACD"}
1
+ {"version":3,"file":"api.js","names":[],"sources":["../src/api.ts"],"sourcesContent":["import { type Schema, type Static, array, coerce, object, string, validate } from '@scalar/validation'\nimport { n } from 'neverpanic'\n\nimport { createError } from '@/entities/error/helpers'\nimport { registryApiMetadata } from '@/entities/registry/document'\n\nexport function createAuthorizationHeaders({\n getAccessToken,\n getAgentKey,\n}: {\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const token = getAccessToken?.()\n const agentKey = getAgentKey?.()\n\n return {\n ...(token && {\n Authorization: `Bearer ${token}`,\n }),\n ...(agentKey && {\n 'x-scalar-agent-key': agentKey,\n }),\n }\n}\n\n/** Minimal set of API requests needed for agent chat */\nexport function createApi({\n baseUrl,\n getAccessToken,\n getAgentKey,\n}: {\n baseUrl: string\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const serviceErrorSchema = object({ message: string(), code: string() })\n\n const request = n.safeFn(\n async <T extends Schema>({\n path,\n method = 'get',\n query,\n body,\n responseSchema,\n }: {\n path: string\n method?: string\n query?: Record<string, string>\n body?: object\n responseSchema: T\n }) => {\n const url = `${baseUrl}${path}${query ? `?${new URLSearchParams(query)}` : ''}`\n\n const fetchResult = await n.fromUnsafe(\n async () =>\n fetch(url, {\n method,\n ...(body && { body: JSON.stringify(body) }),\n headers: {\n ...createAuthorizationHeaders({ getAccessToken, getAgentKey }),\n },\n }),\n (originalError) => createError('FAILED_TO_FETCH', originalError),\n )\n\n if (!fetchResult.success) {\n return fetchResult\n }\n\n const fetchDataResult = await n.fromUnsafe(\n async () => fetchResult.data.json(),\n (originalError) => createError('FAILED_TO_FETCH_DATA', originalError),\n )\n\n if (!fetchDataResult.success) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n if (!fetchResult.data.ok) {\n if (!validate(serviceErrorSchema, fetchDataResult.data)) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n const errorData = coerce(serviceErrorSchema, fetchDataResult.data)\n\n return {\n success: false,\n error: createError(errorData.code, errorData.message),\n }\n }\n\n if (!validate(responseSchema, fetchDataResult.data)) {\n return {\n success: false,\n error: createError('INVALID_RESPONSE', 'Invalid response. Please contact support'),\n }\n }\n\n return {\n success: true,\n data: coerce(responseSchema, fetchDataResult.data) as unknown as Static<T>,\n }\n },\n )\n\n const search = async (query: string) =>\n request({\n path: '/vector/registry/search',\n query: { query },\n responseSchema: object({\n results: array(registryApiMetadata),\n }),\n })\n\n const getDocument = async (params: { namespace: string; slug: string }) =>\n request({\n path: `/vector/registry/document/${params.namespace}/${params.slug}`,\n responseSchema: registryApiMetadata,\n })\n\n const getKeyDocuments = async () =>\n request({\n path: '/vector/registry/documents',\n responseSchema: object({ documents: array(registryApiMetadata) }),\n })\n\n const getCuratedDocuments = async () =>\n request({\n path: '/vector/registry/curated',\n responseSchema: object({\n results: array(registryApiMetadata),\n }),\n })\n\n return {\n search,\n getDocument,\n getKeyDocuments,\n getCuratedDocuments,\n }\n}\n\nexport type Api = ReturnType<typeof createApi>\n"],"mappings":";;;;;AAMA,SAAgB,2BAA2B,EACzC,gBACA,eAIC;CACD,MAAM,QAAQ,kBAAkB;CAChC,MAAM,WAAW,eAAe;AAEhC,QAAO;EACL,GAAI,SAAS,EACX,eAAe,UAAU,SAC1B;EACD,GAAI,YAAY,EACd,sBAAsB,UACvB;EACF;;;AAIH,SAAgB,UAAU,EACxB,SACA,gBACA,eAKC;CACD,MAAM,qBAAqB,OAAO;EAAE,SAAS,QAAQ;EAAE,MAAM,QAAQ;EAAE,CAAC;CAExE,MAAM,UAAU,EAAE,OAChB,OAAyB,EACvB,MACA,SAAS,OACT,OACA,MACA,qBAOI;EACJ,MAAM,MAAM,GAAG,UAAU,OAAO,QAAQ,IAAI,IAAI,gBAAgB,MAAM,KAAK;EAE3E,MAAM,cAAc,MAAM,EAAE,WAC1B,YACE,MAAM,KAAK;GACT;GACA,GAAI,QAAQ,EAAE,MAAM,KAAK,UAAU,KAAK,EAAE;GAC1C,SAAS,EACP,GAAG,2BAA2B;IAAE;IAAgB;IAAa,CAAC,EAC/D;GACF,CAAC,GACH,kBAAkB,YAAY,mBAAmB,cAAc,CACjE;AAED,MAAI,CAAC,YAAY,QACf,QAAO;EAGT,MAAM,kBAAkB,MAAM,EAAE,WAC9B,YAAY,YAAY,KAAK,MAAM,GAClC,kBAAkB,YAAY,wBAAwB,cAAc,CACtE;AAED,MAAI,CAAC,gBAAgB,QACnB,QAAO;GACL,SAAS;GACT,OAAO,YAAY,iBAAiB,kDAAkD;GACvF;AAGH,MAAI,CAAC,YAAY,KAAK,IAAI;AACxB,OAAI,CAAC,SAAS,oBAAoB,gBAAgB,KAAK,CACrD,QAAO;IACL,SAAS;IACT,OAAO,YAAY,iBAAiB,kDAAkD;IACvF;GAGH,MAAM,YAAY,OAAO,oBAAoB,gBAAgB,KAAK;AAElE,UAAO;IACL,SAAS;IACT,OAAO,YAAY,UAAU,MAAM,UAAU,QAAQ;IACtD;;AAGH,MAAI,CAAC,SAAS,gBAAgB,gBAAgB,KAAK,CACjD,QAAO;GACL,SAAS;GACT,OAAO,YAAY,oBAAoB,2CAA2C;GACnF;AAGH,SAAO;GACL,SAAS;GACT,MAAM,OAAO,gBAAgB,gBAAgB,KAAK;GACnD;GAEJ;CAED,MAAM,SAAS,OAAO,UACpB,QAAQ;EACN,MAAM;EACN,OAAO,EAAE,OAAO;EAChB,gBAAgB,OAAO,EACrB,SAAS,MAAM,oBAAoB,EACpC,CAAC;EACH,CAAC;CAEJ,MAAM,cAAc,OAAO,WACzB,QAAQ;EACN,MAAM,6BAA6B,OAAO,UAAU,GAAG,OAAO;EAC9D,gBAAgB;EACjB,CAAC;CAEJ,MAAM,kBAAkB,YACtB,QAAQ;EACN,MAAM;EACN,gBAAgB,OAAO,EAAE,WAAW,MAAM,oBAAoB,EAAE,CAAC;EAClE,CAAC;CAEJ,MAAM,sBAAsB,YAC1B,QAAQ;EACN,MAAM;EACN,gBAAgB,OAAO,EACrB,SAAS,MAAM,oBAAoB,EACpC,CAAC;EACH,CAAC;AAEJ,QAAO;EACL;EACA;EACA;EACA;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsDropdown.vue.d.ts","sourceRoot":"","sources":["../../src/components/ActionsDropdown.vue"],"names":[],"mappings":"AAmMA,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAG/C,QAAA,MAAM,UAAU;;;;iFAEd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"ActionsDropdown.vue.d.ts","sourceRoot":"","sources":["../../src/components/ActionsDropdown.vue"],"names":[],"mappings":"AA6LA,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAG/C,QAAA,MAAM,UAAU;;;;iFAEd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../_virtual/_plugin-vue_export-he
2
2
  import ActionsDropdown_vue_vue_type_script_setup_true_lang_default from "./ActionsDropdown.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/components/ActionsDropdown.vue
5
- var ActionsDropdown_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ActionsDropdown_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-2d142bb5"]]);
5
+ var ActionsDropdown_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ActionsDropdown_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-e2c3bd19"]]);
6
6
  //#endregion
7
7
  export { ActionsDropdown_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsDropdown.vue.js","names":[],"sources":["../../src/components/ActionsDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ScalarDropdown,\n ScalarDropdownItem,\n useModal,\n} from '@scalar/components'\nimport { ScalarIconMagnifyingGlass, ScalarIconUpload } from '@scalar/icons'\n\nimport Catalog from '@/views/Catalog/Catalog.vue'\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst catalogModal = useModal()\n</script>\n\n<template>\n <ScalarDropdown :offset=\"{ crossAxis: -5, mainAxis: 5 }\">\n <slot />\n\n <template #items>\n <ScalarDropdownItem @click=\"$emit('uploadApi')\">\n <div class=\"dropdown-item\">\n <ScalarIconUpload />\n Upload API\n </div>\n </ScalarDropdownItem>\n\n <ScalarDropdownItem @click=\"catalogModal.show()\">\n <div class=\"dropdown-item\">\n <ScalarIconMagnifyingGlass />\n Search Catalog\n </div>\n </ScalarDropdownItem>\n </template>\n </ScalarDropdown>\n\n <Catalog\n v-if=\"catalogModal.open\"\n :modal=\"catalogModal\" />\n</template>\n\n<style scoped>\n.dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ActionsDropdown.vue.js","names":[],"sources":["../../src/components/ActionsDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarDropdown, ScalarDropdownItem } from '@scalar/components/dropdown'\nimport { useModal } from '@scalar/components/modal'\nimport { ScalarIconMagnifyingGlass, ScalarIconUpload } from '@scalar/icons'\n\nimport Catalog from '@/views/Catalog/Catalog.vue'\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst catalogModal = useModal()\n</script>\n\n<template>\n <ScalarDropdown :offset=\"{ crossAxis: -5, mainAxis: 5 }\">\n <slot />\n\n <template #items>\n <ScalarDropdownItem @click=\"$emit('uploadApi')\">\n <div class=\"dropdown-item\">\n <ScalarIconUpload />\n Upload API\n </div>\n </ScalarDropdownItem>\n\n <ScalarDropdownItem @click=\"catalogModal.show()\">\n <div class=\"dropdown-item\">\n <ScalarIconMagnifyingGlass />\n Search Catalog\n </div>\n </ScalarDropdownItem>\n </template>\n </ScalarDropdown>\n\n <Catalog\n v-if=\"catalogModal.open\"\n :modal=\"catalogModal\" />\n</template>\n\n<style scoped>\n.dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n</style>\n"],"mappings":""}
@@ -1,7 +1,8 @@
1
1
  import Catalog_default from "../views/Catalog/Catalog.vue.js";
2
2
  import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, renderSlot, unref, withCtx } from "vue";
3
- import { ScalarDropdown, ScalarDropdownItem, useModal } from "@scalar/components";
3
+ import { useModal } from "@scalar/components/modal";
4
4
  import { ScalarIconMagnifyingGlass, ScalarIconUpload } from "@scalar/icons";
5
+ import { ScalarDropdown, ScalarDropdownItem } from "@scalar/components/dropdown";
5
6
  //#region src/components/ActionsDropdown.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = { class: "dropdown-item" };
7
8
  var _hoisted_2 = { class: "dropdown-item" };
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsDropdown.vue.script.js","names":["$emit"],"sources":["../../src/components/ActionsDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ScalarDropdown,\n ScalarDropdownItem,\n useModal,\n} from '@scalar/components'\nimport { ScalarIconMagnifyingGlass, ScalarIconUpload } from '@scalar/icons'\n\nimport Catalog from '@/views/Catalog/Catalog.vue'\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst catalogModal = useModal()\n</script>\n\n<template>\n <ScalarDropdown :offset=\"{ crossAxis: -5, mainAxis: 5 }\">\n <slot />\n\n <template #items>\n <ScalarDropdownItem @click=\"$emit('uploadApi')\">\n <div class=\"dropdown-item\">\n <ScalarIconUpload />\n Upload API\n </div>\n </ScalarDropdownItem>\n\n <ScalarDropdownItem @click=\"catalogModal.show()\">\n <div class=\"dropdown-item\">\n <ScalarIconMagnifyingGlass />\n Search Catalog\n </div>\n </ScalarDropdownItem>\n </template>\n </ScalarDropdown>\n\n <Catalog\n v-if=\"catalogModal.open\"\n :modal=\"catalogModal\" />\n</template>\n\n<style scoped>\n.dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;EAcA,MAAM,eAAe,UAAS;;2DAI5B,YAkBiB,MAAA,eAAA,EAAA,EAlBA,QAAQ;IAAA,WAAA;IAAA,UAAA;IAA8B,EAAA,EAAA;IAG1C,OAAK,cAMO,CALrB,YAKqB,MAAA,mBAAA,EAAA,EALA,SAAK,OAAA,OAAA,OAAA,MAAA,WAAEA,KAAAA,MAAK,YAAA,GAAA,EAAA;4BAIzB,CAHN,mBAGM,OAHN,YAGM,CAFJ,YAAoB,MAAA,iBAAA,CAAA,EAAA,OAAA,OAAA,OAAA,KAAA,gBAAA,gBAEtB,GAAA,EAAA,CAAA,CAAA,CAAA;;QAGF,YAKqB,MAAA,mBAAA,EAAA,EALA,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,aAAY,CAAC,MAAI,GAAA,EAAA;4BAIrC,CAHN,mBAGM,OAHN,YAGM,CAFJ,YAA6B,MAAA,0BAAA,CAAA,EAAA,OAAA,OAAA,OAAA,KAAA,gBAAA,oBAE/B,GAAA,EAAA,CAAA,CAAA,CAAA;;;2BAdI,CAAR,WAAQ,KAAA,QAAA,WAAA,EAAA,EAAA,KAAA,GAAA,KAAA,CAAA,CAAA;;OAoBF,MAAA,aAAY,CAAC,QAAA,WAAA,EADrB,YAE0B,iBAAA;;IAAvB,OAAO,MAAA,aAAY"}
1
+ {"version":3,"file":"ActionsDropdown.vue.script.js","names":["$emit"],"sources":["../../src/components/ActionsDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarDropdown, ScalarDropdownItem } from '@scalar/components/dropdown'\nimport { useModal } from '@scalar/components/modal'\nimport { ScalarIconMagnifyingGlass, ScalarIconUpload } from '@scalar/icons'\n\nimport Catalog from '@/views/Catalog/Catalog.vue'\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst catalogModal = useModal()\n</script>\n\n<template>\n <ScalarDropdown :offset=\"{ crossAxis: -5, mainAxis: 5 }\">\n <slot />\n\n <template #items>\n <ScalarDropdownItem @click=\"$emit('uploadApi')\">\n <div class=\"dropdown-item\">\n <ScalarIconUpload />\n Upload API\n </div>\n </ScalarDropdownItem>\n\n <ScalarDropdownItem @click=\"catalogModal.show()\">\n <div class=\"dropdown-item\">\n <ScalarIconMagnifyingGlass />\n Search Catalog\n </div>\n </ScalarDropdownItem>\n </template>\n </ScalarDropdown>\n\n <Catalog\n v-if=\"catalogModal.open\"\n :modal=\"catalogModal\" />\n</template>\n\n<style scoped>\n.dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;EAWA,MAAM,eAAe,UAAS;;2DAI5B,YAkBiB,MAAA,eAAA,EAAA,EAlBA,QAAQ;IAAA,WAAA;IAAA,UAAA;IAA8B,EAAA,EAAA;IAG1C,OAAK,cAMO,CALrB,YAKqB,MAAA,mBAAA,EAAA,EALA,SAAK,OAAA,OAAA,OAAA,MAAA,WAAEA,KAAAA,MAAK,YAAA,GAAA,EAAA;4BAIzB,CAHN,mBAGM,OAHN,YAGM,CAFJ,YAAoB,MAAA,iBAAA,CAAA,EAAA,OAAA,OAAA,OAAA,KAAA,gBAAA,gBAEtB,GAAA,EAAA,CAAA,CAAA,CAAA;;QAGF,YAKqB,MAAA,mBAAA,EAAA,EALA,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,aAAY,CAAC,MAAI,GAAA,EAAA;4BAIrC,CAHN,mBAGM,OAHN,YAGM,CAFJ,YAA6B,MAAA,0BAAA,CAAA,EAAA,OAAA,OAAA,OAAA,KAAA,gBAAA,oBAE/B,GAAA,EAAA,CAAA,CAAA,CAAA;;;2BAdI,CAAR,WAAQ,KAAA,QAAA,WAAA,EAAA,EAAA,KAAA,GAAA,KAAA,CAAA,CAAA;;OAoBF,MAAA,aAAY,CAAC,QAAA,WAAA,EADrB,YAE0B,iBAAA;;IAAvB,OAAO,MAAA,aAAY"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../_virtual/_plugin-vue_export-he
2
2
  import RequestPreview_vue_vue_type_script_setup_true_lang_default from "./RequestPreview.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/components/RequestPreview.vue
5
- var RequestPreview_default = /* @__PURE__ */ _plugin_vue_export_helper_default(RequestPreview_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-0eb5f95d"]]);
5
+ var RequestPreview_default = /* @__PURE__ */ _plugin_vue_export_helper_default(RequestPreview_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-7595724d"]]);
6
6
  //#endregion
7
7
  export { RequestPreview_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"RequestPreview.vue.js","names":[],"sources":["../../src/components/RequestPreview.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarCodeBlock } from '@scalar/components'\nimport { ScalarIconCaretDown, ScalarIconCaretRight } from '@scalar/icons'\nimport { type DeepPartial } from 'ai'\nimport { computed, ref } from 'vue'\n\nimport AutosendPaused from '@/components/AutosendPaused.vue'\nimport BuildingRequest from '@/components/BuildingRequest.vue'\nimport RequestApproved from '@/components/RequestApproved.vue'\nimport RequestFailed from '@/components/RequestFailed.vue'\nimport RequestRejected from '@/components/RequestRejected.vue'\nimport RequestSuccess from '@/components/RequestSuccess.vue'\nimport { getMediaTypeConfig } from '@/components/ResponseBody/helpers/media-types'\nimport { processResponseBody } from '@/components/ResponseBody/helpers/process-response-body'\nimport ResponseBody from '@/components/ResponseBody/ResponseBody.vue'\nimport ResponseBodyToggle from '@/components/ResponseBody/ResponseBodyToggle.vue'\nimport SendingRequest from '@/components/SendingRequest.vue'\nimport type {\n ExecuteClientSideRequestToolInput,\n ExecuteClientSideRequestToolOutput,\n} from '@/entities/tools/execute-request'\n\nconst { request, response, state } = defineProps<{\n request?:\n | ExecuteClientSideRequestToolInput\n | DeepPartial<ExecuteClientSideRequestToolInput>\n response?: ExecuteClientSideRequestToolOutput\n state:\n | 'requiresApproval'\n | 'sendingRequest'\n | 'requestSucceeded'\n | 'requestFailed'\n | 'approved'\n | 'rejected'\n | 'buildingRequest'\n}>()\n\nconst responseData = computed(() => {\n if (response?.success) {\n return {\n data: response.data.responseBody,\n headers: response.data.headers,\n }\n }\n\n if (response?.error?.code === 'REQUEST_NOT_OK') {\n return {\n data: response.error.detail.responseBody,\n headers: response.error.detail.headers,\n }\n }\n\n return undefined\n})\n\nconst showRequestToggle = ref(false)\n\n/** Show request preview automatically for failed requests or when approval is required. */\nconst shouldShowRequest = computed(() => {\n if (state === 'requestFailed' || state === 'requiresApproval') {\n return true\n }\n return showRequestToggle.value\n})\n\nconst responseBody = computed(() =>\n processResponseBody({\n data: responseData.value?.data,\n headers: responseData.value?.headers,\n }),\n)\n\nconst mediaConfig = computed(() =>\n getMediaTypeConfig(responseBody.value.mimeType?.essence ?? ''),\n)\n\nconst displayToggle = ref<'preview' | 'raw'>()\nfunction toggleDisplay(mode: 'preview' | 'raw') {\n displayToggle.value = mode\n}\n\nconst displayMode = computed(() => {\n if (displayToggle.value) return displayToggle.value\n\n if (mediaConfig.value?.raw && !mediaConfig.value.preview) return 'raw'\n if (mediaConfig.value?.preview) return 'preview'\n\n return 'raw'\n})\n</script>\n\n<template>\n <div\n class=\"requestPreview\"\n :class=\"{\n open: shouldShowRequest,\n succeeded: state === 'requestSucceeded',\n }\">\n <RequestApproved v-if=\"state === 'approved'\" />\n <div\n v-else-if=\"state === 'buildingRequest'\"\n class=\"autosendContainer\">\n <BuildingRequest />\n </div>\n <div\n v-else-if=\"state === 'requiresApproval'\"\n class=\"autosendContainer\">\n <AutosendPaused />\n </div>\n <button\n v-else-if=\"state === 'sendingRequest'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <SendingRequest />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <button\n v-else-if=\"state === 'requestSucceeded'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <RequestSuccess />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <button\n v-else-if=\"state === 'rejected'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <RequestRejected />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <RequestFailed v-else-if=\"state === 'requestFailed'\" />\n <div class=\"requestContent\">\n <div class=\"requestContentInner\">\n <div\n v-if=\"request\"\n class=\"code\">\n <div class=\"requestHeaderContainer\">\n <h1>Request</h1>\n </div>\n <ScalarCodeBlock\n class=\"codeBlock\"\n :content=\"JSON.stringify(request, null, 2)\"\n lang=\"json\" />\n </div>\n <div\n v-if=\"responseData\"\n class=\"code\">\n <div class=\"requestHeaderContainer\">\n <h1>Response</h1>\n <ResponseBodyToggle\n v-if=\"mediaConfig?.raw && mediaConfig.preview\"\n v-model=\"displayMode\"\n @toggle=\"toggleDisplay\" />\n </div>\n <ResponseBody\n :data=\"responseData.data\"\n :display=\"displayMode\"\n :mediaConfig=\"mediaConfig\"\n :responseBody=\"responseBody\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.requestHeaderContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5px;\n}\n\n.requestPreview {\n border-radius: 12px;\n display: flex;\n flex-direction: column;\n width: 100%;\n position: relative;\n}\n\n.requestContent {\n display: grid;\n grid-template-rows: 0fr;\n min-height: 0;\n overflow: hidden;\n transition: grid-template-rows 0.2s ease-out;\n}\n\n.requestPreview.open .requestContent {\n grid-template-rows: 1fr;\n}\n.requestPreview.succeeded {\n padding: 0;\n}\n\n.requestContentInner {\n min-height: 0;\n overflow: hidden;\n}\n.code {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-font-size-4);\n border-radius: 12px;\n background: color-mix(\n in srgb,\n var(--scalar-background-2),\n var(--scalar-background-1)\n );\n overflow: hidden;\n margin-bottom: 12px;\n}\n.dark-mode .code {\n background: var(--scalar-background-2);\n}\n.code h1 {\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-3);\n padding: 8px;\n}\n.code :deep(.codeBlock) {\n max-height: calc(50vh - 100px);\n padding-top: 0;\n}\n.autosendContainer {\n display: flex;\n justify-content: space-between;\n}\n\n.sendButton {\n background: var(--scalar-color-blue);\n color: white;\n font-weight: var(--scalar-semibold);\n padding: 5px 10px;\n}\n.sendButton:hover,\n.sendButton:active {\n background: color-mix(in srgb, var(--scalar-color-blue), black 10%);\n color: white !important;\n}\n\n.toggleButton {\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n position: relative;\n display: flex;\n align-items: center;\n color: var(--scalar-color-3);\n justify-content: space-between;\n border-radius: var(--scalar-radius-lg);\n}\n\n.toggleButton:hover {\n text-decoration: underline;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"RequestPreview.vue.js","names":[],"sources":["../../src/components/RequestPreview.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarCodeBlock } from '@scalar/components/code-block'\nimport { ScalarIconCaretDown, ScalarIconCaretRight } from '@scalar/icons'\nimport { type DeepPartial } from 'ai'\nimport { computed, ref } from 'vue'\n\nimport AutosendPaused from '@/components/AutosendPaused.vue'\nimport BuildingRequest from '@/components/BuildingRequest.vue'\nimport RequestApproved from '@/components/RequestApproved.vue'\nimport RequestFailed from '@/components/RequestFailed.vue'\nimport RequestRejected from '@/components/RequestRejected.vue'\nimport RequestSuccess from '@/components/RequestSuccess.vue'\nimport { getMediaTypeConfig } from '@/components/ResponseBody/helpers/media-types'\nimport { processResponseBody } from '@/components/ResponseBody/helpers/process-response-body'\nimport ResponseBody from '@/components/ResponseBody/ResponseBody.vue'\nimport ResponseBodyToggle from '@/components/ResponseBody/ResponseBodyToggle.vue'\nimport SendingRequest from '@/components/SendingRequest.vue'\nimport type {\n ExecuteClientSideRequestToolInput,\n ExecuteClientSideRequestToolOutput,\n} from '@/entities/tools/execute-request'\n\nconst { request, response, state } = defineProps<{\n request?:\n | ExecuteClientSideRequestToolInput\n | DeepPartial<ExecuteClientSideRequestToolInput>\n response?: ExecuteClientSideRequestToolOutput\n state:\n | 'requiresApproval'\n | 'sendingRequest'\n | 'requestSucceeded'\n | 'requestFailed'\n | 'approved'\n | 'rejected'\n | 'buildingRequest'\n}>()\n\nconst responseData = computed(() => {\n if (response?.success) {\n return {\n data: response.data.responseBody,\n headers: response.data.headers,\n }\n }\n\n if (response?.error?.code === 'REQUEST_NOT_OK') {\n return {\n data: response.error.detail.responseBody,\n headers: response.error.detail.headers,\n }\n }\n\n return undefined\n})\n\nconst showRequestToggle = ref(false)\n\n/** Show request preview automatically for failed requests or when approval is required. */\nconst shouldShowRequest = computed(() => {\n if (state === 'requestFailed' || state === 'requiresApproval') {\n return true\n }\n return showRequestToggle.value\n})\n\nconst responseBody = computed(() =>\n processResponseBody({\n data: responseData.value?.data,\n headers: responseData.value?.headers,\n }),\n)\n\nconst mediaConfig = computed(() =>\n getMediaTypeConfig(responseBody.value.mimeType?.essence ?? ''),\n)\n\nconst displayToggle = ref<'preview' | 'raw'>()\nfunction toggleDisplay(mode: 'preview' | 'raw') {\n displayToggle.value = mode\n}\n\nconst displayMode = computed(() => {\n if (displayToggle.value) return displayToggle.value\n\n if (mediaConfig.value?.raw && !mediaConfig.value.preview) return 'raw'\n if (mediaConfig.value?.preview) return 'preview'\n\n return 'raw'\n})\n</script>\n\n<template>\n <div\n class=\"requestPreview\"\n :class=\"{\n open: shouldShowRequest,\n succeeded: state === 'requestSucceeded',\n }\">\n <RequestApproved v-if=\"state === 'approved'\" />\n <div\n v-else-if=\"state === 'buildingRequest'\"\n class=\"autosendContainer\">\n <BuildingRequest />\n </div>\n <div\n v-else-if=\"state === 'requiresApproval'\"\n class=\"autosendContainer\">\n <AutosendPaused />\n </div>\n <button\n v-else-if=\"state === 'sendingRequest'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <SendingRequest />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <button\n v-else-if=\"state === 'requestSucceeded'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <RequestSuccess />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <button\n v-else-if=\"state === 'rejected'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <RequestRejected />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <RequestFailed v-else-if=\"state === 'requestFailed'\" />\n <div class=\"requestContent\">\n <div class=\"requestContentInner\">\n <div\n v-if=\"request\"\n class=\"code\">\n <div class=\"requestHeaderContainer\">\n <h1>Request</h1>\n </div>\n <ScalarCodeBlock\n class=\"codeBlock\"\n :content=\"JSON.stringify(request, null, 2)\"\n lang=\"json\" />\n </div>\n <div\n v-if=\"responseData\"\n class=\"code\">\n <div class=\"requestHeaderContainer\">\n <h1>Response</h1>\n <ResponseBodyToggle\n v-if=\"mediaConfig?.raw && mediaConfig.preview\"\n v-model=\"displayMode\"\n @toggle=\"toggleDisplay\" />\n </div>\n <ResponseBody\n :data=\"responseData.data\"\n :display=\"displayMode\"\n :mediaConfig=\"mediaConfig\"\n :responseBody=\"responseBody\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.requestHeaderContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5px;\n}\n\n.requestPreview {\n border-radius: 12px;\n display: flex;\n flex-direction: column;\n width: 100%;\n position: relative;\n}\n\n.requestContent {\n display: grid;\n grid-template-rows: 0fr;\n min-height: 0;\n overflow: hidden;\n transition: grid-template-rows 0.2s ease-out;\n}\n\n.requestPreview.open .requestContent {\n grid-template-rows: 1fr;\n}\n.requestPreview.succeeded {\n padding: 0;\n}\n\n.requestContentInner {\n min-height: 0;\n overflow: hidden;\n}\n.code {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-font-size-4);\n border-radius: 12px;\n background: color-mix(\n in srgb,\n var(--scalar-background-2),\n var(--scalar-background-1)\n );\n overflow: hidden;\n margin-bottom: 12px;\n}\n.dark-mode .code {\n background: var(--scalar-background-2);\n}\n.code h1 {\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-3);\n padding: 8px;\n}\n.code :deep(.codeBlock) {\n max-height: calc(50vh - 100px);\n padding-top: 0;\n}\n.autosendContainer {\n display: flex;\n justify-content: space-between;\n}\n\n.sendButton {\n background: var(--scalar-color-blue);\n color: white;\n font-weight: var(--scalar-semibold);\n padding: 5px 10px;\n}\n.sendButton:hover,\n.sendButton:active {\n background: color-mix(in srgb, var(--scalar-color-blue), black 10%);\n color: white !important;\n}\n\n.toggleButton {\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n position: relative;\n display: flex;\n align-items: center;\n color: var(--scalar-color-3);\n justify-content: space-between;\n border-radius: var(--scalar-radius-lg);\n}\n\n.toggleButton:hover {\n text-decoration: underline;\n}\n</style>\n"],"mappings":""}
@@ -10,8 +10,8 @@ import ResponseBody_default from "./ResponseBody/ResponseBody.vue.js";
10
10
  import ResponseBodyToggle_default from "./ResponseBody/ResponseBodyToggle.vue.js";
11
11
  import SendingRequest_default from "./SendingRequest.vue.js";
12
12
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, unref } from "vue";
13
- import { ScalarCodeBlock } from "@scalar/components";
14
13
  import { ScalarIconCaretDown, ScalarIconCaretRight } from "@scalar/icons";
14
+ import { ScalarCodeBlock } from "@scalar/components/code-block";
15
15
  //#region src/components/RequestPreview.vue?vue&type=script&setup=true&lang.ts
16
16
  var _hoisted_1 = {
17
17
  key: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"RequestPreview.vue.script.js","names":[],"sources":["../../src/components/RequestPreview.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarCodeBlock } from '@scalar/components'\nimport { ScalarIconCaretDown, ScalarIconCaretRight } from '@scalar/icons'\nimport { type DeepPartial } from 'ai'\nimport { computed, ref } from 'vue'\n\nimport AutosendPaused from '@/components/AutosendPaused.vue'\nimport BuildingRequest from '@/components/BuildingRequest.vue'\nimport RequestApproved from '@/components/RequestApproved.vue'\nimport RequestFailed from '@/components/RequestFailed.vue'\nimport RequestRejected from '@/components/RequestRejected.vue'\nimport RequestSuccess from '@/components/RequestSuccess.vue'\nimport { getMediaTypeConfig } from '@/components/ResponseBody/helpers/media-types'\nimport { processResponseBody } from '@/components/ResponseBody/helpers/process-response-body'\nimport ResponseBody from '@/components/ResponseBody/ResponseBody.vue'\nimport ResponseBodyToggle from '@/components/ResponseBody/ResponseBodyToggle.vue'\nimport SendingRequest from '@/components/SendingRequest.vue'\nimport type {\n ExecuteClientSideRequestToolInput,\n ExecuteClientSideRequestToolOutput,\n} from '@/entities/tools/execute-request'\n\nconst { request, response, state } = defineProps<{\n request?:\n | ExecuteClientSideRequestToolInput\n | DeepPartial<ExecuteClientSideRequestToolInput>\n response?: ExecuteClientSideRequestToolOutput\n state:\n | 'requiresApproval'\n | 'sendingRequest'\n | 'requestSucceeded'\n | 'requestFailed'\n | 'approved'\n | 'rejected'\n | 'buildingRequest'\n}>()\n\nconst responseData = computed(() => {\n if (response?.success) {\n return {\n data: response.data.responseBody,\n headers: response.data.headers,\n }\n }\n\n if (response?.error?.code === 'REQUEST_NOT_OK') {\n return {\n data: response.error.detail.responseBody,\n headers: response.error.detail.headers,\n }\n }\n\n return undefined\n})\n\nconst showRequestToggle = ref(false)\n\n/** Show request preview automatically for failed requests or when approval is required. */\nconst shouldShowRequest = computed(() => {\n if (state === 'requestFailed' || state === 'requiresApproval') {\n return true\n }\n return showRequestToggle.value\n})\n\nconst responseBody = computed(() =>\n processResponseBody({\n data: responseData.value?.data,\n headers: responseData.value?.headers,\n }),\n)\n\nconst mediaConfig = computed(() =>\n getMediaTypeConfig(responseBody.value.mimeType?.essence ?? ''),\n)\n\nconst displayToggle = ref<'preview' | 'raw'>()\nfunction toggleDisplay(mode: 'preview' | 'raw') {\n displayToggle.value = mode\n}\n\nconst displayMode = computed(() => {\n if (displayToggle.value) return displayToggle.value\n\n if (mediaConfig.value?.raw && !mediaConfig.value.preview) return 'raw'\n if (mediaConfig.value?.preview) return 'preview'\n\n return 'raw'\n})\n</script>\n\n<template>\n <div\n class=\"requestPreview\"\n :class=\"{\n open: shouldShowRequest,\n succeeded: state === 'requestSucceeded',\n }\">\n <RequestApproved v-if=\"state === 'approved'\" />\n <div\n v-else-if=\"state === 'buildingRequest'\"\n class=\"autosendContainer\">\n <BuildingRequest />\n </div>\n <div\n v-else-if=\"state === 'requiresApproval'\"\n class=\"autosendContainer\">\n <AutosendPaused />\n </div>\n <button\n v-else-if=\"state === 'sendingRequest'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <SendingRequest />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <button\n v-else-if=\"state === 'requestSucceeded'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <RequestSuccess />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <button\n v-else-if=\"state === 'rejected'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <RequestRejected />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <RequestFailed v-else-if=\"state === 'requestFailed'\" />\n <div class=\"requestContent\">\n <div class=\"requestContentInner\">\n <div\n v-if=\"request\"\n class=\"code\">\n <div class=\"requestHeaderContainer\">\n <h1>Request</h1>\n </div>\n <ScalarCodeBlock\n class=\"codeBlock\"\n :content=\"JSON.stringify(request, null, 2)\"\n lang=\"json\" />\n </div>\n <div\n v-if=\"responseData\"\n class=\"code\">\n <div class=\"requestHeaderContainer\">\n <h1>Response</h1>\n <ResponseBodyToggle\n v-if=\"mediaConfig?.raw && mediaConfig.preview\"\n v-model=\"displayMode\"\n @toggle=\"toggleDisplay\" />\n </div>\n <ResponseBody\n :data=\"responseData.data\"\n :display=\"displayMode\"\n :mediaConfig=\"mediaConfig\"\n :responseBody=\"responseBody\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.requestHeaderContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5px;\n}\n\n.requestPreview {\n border-radius: 12px;\n display: flex;\n flex-direction: column;\n width: 100%;\n position: relative;\n}\n\n.requestContent {\n display: grid;\n grid-template-rows: 0fr;\n min-height: 0;\n overflow: hidden;\n transition: grid-template-rows 0.2s ease-out;\n}\n\n.requestPreview.open .requestContent {\n grid-template-rows: 1fr;\n}\n.requestPreview.succeeded {\n padding: 0;\n}\n\n.requestContentInner {\n min-height: 0;\n overflow: hidden;\n}\n.code {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-font-size-4);\n border-radius: 12px;\n background: color-mix(\n in srgb,\n var(--scalar-background-2),\n var(--scalar-background-1)\n );\n overflow: hidden;\n margin-bottom: 12px;\n}\n.dark-mode .code {\n background: var(--scalar-background-2);\n}\n.code h1 {\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-3);\n padding: 8px;\n}\n.code :deep(.codeBlock) {\n max-height: calc(50vh - 100px);\n padding-top: 0;\n}\n.autosendContainer {\n display: flex;\n justify-content: space-between;\n}\n\n.sendButton {\n background: var(--scalar-color-blue);\n color: white;\n font-weight: var(--scalar-semibold);\n padding: 5px 10px;\n}\n.sendButton:hover,\n.sendButton:active {\n background: color-mix(in srgb, var(--scalar-color-blue), black 10%);\n color: white !important;\n}\n\n.toggleButton {\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n position: relative;\n display: flex;\n align-items: center;\n color: var(--scalar-color-3);\n justify-content: space-between;\n border-radius: var(--scalar-radius-lg);\n}\n\n.toggleButton:hover {\n text-decoration: underline;\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"RequestPreview.vue.script.js","names":[],"sources":["../../src/components/RequestPreview.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarCodeBlock } from '@scalar/components/code-block'\nimport { ScalarIconCaretDown, ScalarIconCaretRight } from '@scalar/icons'\nimport { type DeepPartial } from 'ai'\nimport { computed, ref } from 'vue'\n\nimport AutosendPaused from '@/components/AutosendPaused.vue'\nimport BuildingRequest from '@/components/BuildingRequest.vue'\nimport RequestApproved from '@/components/RequestApproved.vue'\nimport RequestFailed from '@/components/RequestFailed.vue'\nimport RequestRejected from '@/components/RequestRejected.vue'\nimport RequestSuccess from '@/components/RequestSuccess.vue'\nimport { getMediaTypeConfig } from '@/components/ResponseBody/helpers/media-types'\nimport { processResponseBody } from '@/components/ResponseBody/helpers/process-response-body'\nimport ResponseBody from '@/components/ResponseBody/ResponseBody.vue'\nimport ResponseBodyToggle from '@/components/ResponseBody/ResponseBodyToggle.vue'\nimport SendingRequest from '@/components/SendingRequest.vue'\nimport type {\n ExecuteClientSideRequestToolInput,\n ExecuteClientSideRequestToolOutput,\n} from '@/entities/tools/execute-request'\n\nconst { request, response, state } = defineProps<{\n request?:\n | ExecuteClientSideRequestToolInput\n | DeepPartial<ExecuteClientSideRequestToolInput>\n response?: ExecuteClientSideRequestToolOutput\n state:\n | 'requiresApproval'\n | 'sendingRequest'\n | 'requestSucceeded'\n | 'requestFailed'\n | 'approved'\n | 'rejected'\n | 'buildingRequest'\n}>()\n\nconst responseData = computed(() => {\n if (response?.success) {\n return {\n data: response.data.responseBody,\n headers: response.data.headers,\n }\n }\n\n if (response?.error?.code === 'REQUEST_NOT_OK') {\n return {\n data: response.error.detail.responseBody,\n headers: response.error.detail.headers,\n }\n }\n\n return undefined\n})\n\nconst showRequestToggle = ref(false)\n\n/** Show request preview automatically for failed requests or when approval is required. */\nconst shouldShowRequest = computed(() => {\n if (state === 'requestFailed' || state === 'requiresApproval') {\n return true\n }\n return showRequestToggle.value\n})\n\nconst responseBody = computed(() =>\n processResponseBody({\n data: responseData.value?.data,\n headers: responseData.value?.headers,\n }),\n)\n\nconst mediaConfig = computed(() =>\n getMediaTypeConfig(responseBody.value.mimeType?.essence ?? ''),\n)\n\nconst displayToggle = ref<'preview' | 'raw'>()\nfunction toggleDisplay(mode: 'preview' | 'raw') {\n displayToggle.value = mode\n}\n\nconst displayMode = computed(() => {\n if (displayToggle.value) return displayToggle.value\n\n if (mediaConfig.value?.raw && !mediaConfig.value.preview) return 'raw'\n if (mediaConfig.value?.preview) return 'preview'\n\n return 'raw'\n})\n</script>\n\n<template>\n <div\n class=\"requestPreview\"\n :class=\"{\n open: shouldShowRequest,\n succeeded: state === 'requestSucceeded',\n }\">\n <RequestApproved v-if=\"state === 'approved'\" />\n <div\n v-else-if=\"state === 'buildingRequest'\"\n class=\"autosendContainer\">\n <BuildingRequest />\n </div>\n <div\n v-else-if=\"state === 'requiresApproval'\"\n class=\"autosendContainer\">\n <AutosendPaused />\n </div>\n <button\n v-else-if=\"state === 'sendingRequest'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <SendingRequest />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <button\n v-else-if=\"state === 'requestSucceeded'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <RequestSuccess />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <button\n v-else-if=\"state === 'rejected'\"\n class=\"toggleButton\"\n type=\"button\"\n @click=\"showRequestToggle = !showRequestToggle\">\n <RequestRejected />\n\n <ScalarIconCaretDown v-if=\"shouldShowRequest\" />\n <ScalarIconCaretRight v-else />\n </button>\n <RequestFailed v-else-if=\"state === 'requestFailed'\" />\n <div class=\"requestContent\">\n <div class=\"requestContentInner\">\n <div\n v-if=\"request\"\n class=\"code\">\n <div class=\"requestHeaderContainer\">\n <h1>Request</h1>\n </div>\n <ScalarCodeBlock\n class=\"codeBlock\"\n :content=\"JSON.stringify(request, null, 2)\"\n lang=\"json\" />\n </div>\n <div\n v-if=\"responseData\"\n class=\"code\">\n <div class=\"requestHeaderContainer\">\n <h1>Response</h1>\n <ResponseBodyToggle\n v-if=\"mediaConfig?.raw && mediaConfig.preview\"\n v-model=\"displayMode\"\n @toggle=\"toggleDisplay\" />\n </div>\n <ResponseBody\n :data=\"responseData.data\"\n :display=\"displayMode\"\n :mediaConfig=\"mediaConfig\"\n :responseBody=\"responseBody\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.requestHeaderContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5px;\n}\n\n.requestPreview {\n border-radius: 12px;\n display: flex;\n flex-direction: column;\n width: 100%;\n position: relative;\n}\n\n.requestContent {\n display: grid;\n grid-template-rows: 0fr;\n min-height: 0;\n overflow: hidden;\n transition: grid-template-rows 0.2s ease-out;\n}\n\n.requestPreview.open .requestContent {\n grid-template-rows: 1fr;\n}\n.requestPreview.succeeded {\n padding: 0;\n}\n\n.requestContentInner {\n min-height: 0;\n overflow: hidden;\n}\n.code {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-font-size-4);\n border-radius: 12px;\n background: color-mix(\n in srgb,\n var(--scalar-background-2),\n var(--scalar-background-1)\n );\n overflow: hidden;\n margin-bottom: 12px;\n}\n.dark-mode .code {\n background: var(--scalar-background-2);\n}\n.code h1 {\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-3);\n padding: 8px;\n}\n.code :deep(.codeBlock) {\n max-height: calc(50vh - 100px);\n padding-top: 0;\n}\n.autosendContainer {\n display: flex;\n justify-content: space-between;\n}\n\n.sendButton {\n background: var(--scalar-color-blue);\n color: white;\n font-weight: var(--scalar-semibold);\n padding: 5px 10px;\n}\n.sendButton:hover,\n.sendButton:active {\n background: color-mix(in srgb, var(--scalar-color-blue), black 10%);\n color: white !important;\n}\n\n.toggleButton {\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n position: relative;\n display: flex;\n align-items: center;\n color: var(--scalar-color-3);\n justify-content: space-between;\n border-radius: var(--scalar-radius-lg);\n}\n\n.toggleButton:hover {\n text-decoration: underline;\n}\n</style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBodyRaw.vue.js","names":[],"sources":["../../../src/components/ResponseBody/ResponseBodyRaw.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarCodeBlock } from '@scalar/components'\n\nconst props = defineProps<{\n content: any\n language: string\n}>()\n</script>\n\n<template>\n <ScalarCodeBlock\n class=\"codeBlock\"\n :content=\"props.content\"\n :lang=\"language\" />\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ResponseBodyRaw.vue.js","names":[],"sources":["../../../src/components/ResponseBody/ResponseBodyRaw.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarCodeBlock } from '@scalar/components/code-block'\n\nconst props = defineProps<{\n content: any\n language: string\n}>()\n</script>\n\n<template>\n <ScalarCodeBlock\n class=\"codeBlock\"\n :content=\"props.content\"\n :lang=\"language\" />\n</template>\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { createBlock, defineComponent, openBlock, unref } from "vue";
2
- import { ScalarCodeBlock } from "@scalar/components";
2
+ import { ScalarCodeBlock } from "@scalar/components/code-block";
3
3
  //#region src/components/ResponseBody/ResponseBodyRaw.vue?vue&type=script&setup=true&lang.ts
4
4
  var ResponseBodyRaw_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
5
  __name: "ResponseBodyRaw",
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBodyRaw.vue.script.js","names":[],"sources":["../../../src/components/ResponseBody/ResponseBodyRaw.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarCodeBlock } from '@scalar/components'\n\nconst props = defineProps<{\n content: any\n language: string\n}>()\n</script>\n\n<template>\n <ScalarCodeBlock\n class=\"codeBlock\"\n :content=\"props.content\"\n :lang=\"language\" />\n</template>\n"],"mappings":";;;;;;;;;;EAGA,MAAM,QAAQ;;uBAOZ,YAGqB,MAAA,gBAAA,EAAA;IAFnB,OAAM;IACL,SAAS,MAAM;IACf,MAAM,QAAA"}
1
+ {"version":3,"file":"ResponseBodyRaw.vue.script.js","names":[],"sources":["../../../src/components/ResponseBody/ResponseBodyRaw.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarCodeBlock } from '@scalar/components/code-block'\n\nconst props = defineProps<{\n content: any\n language: string\n}>()\n</script>\n\n<template>\n <ScalarCodeBlock\n class=\"codeBlock\"\n :content=\"props.content\"\n :lang=\"language\" />\n</template>\n"],"mappings":";;;;;;;;;;EAGA,MAAM,QAAQ;;uBAOZ,YAGqB,MAAA,gBAAA,EAAA;IAFnB,OAAM;IACL,SAAS,MAAM;IACf,MAAM,QAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchPopover.vue.d.ts","sourceRoot":"","sources":["../../src/components/SearchPopover.vue"],"names":[],"mappings":"AA8QA,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAK/C,QAAA,MAAM,UAAU,+QACd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"SearchPopover.vue.d.ts","sourceRoot":"","sources":["../../src/components/SearchPopover.vue"],"names":[],"mappings":"AAgRA,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAK/C,QAAA,MAAM,UAAU,+QACd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../_virtual/_plugin-vue_export-he
2
2
  import SearchPopover_vue_vue_type_script_setup_true_lang_default from "./SearchPopover.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/components/SearchPopover.vue
5
- var SearchPopover_default = /* @__PURE__ */ _plugin_vue_export_helper_default(SearchPopover_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-7945f74c"]]);
5
+ var SearchPopover_default = /* @__PURE__ */ _plugin_vue_export_helper_default(SearchPopover_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-3e0405c7"]]);
6
6
  //#endregion
7
7
  export { SearchPopover_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"SearchPopover.vue.js","names":[],"sources":["../../src/components/SearchPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarPopover, ScalarTextInput } from '@scalar/components'\nimport { ScalarIconMagnifyingGlass } from '@scalar/icons'\nimport { computed } from 'vue'\n\nimport { useSearch } from '@/hooks/use-search'\nimport { useState } from '@/state/state'\n\nconst state = useState()\n\nconst search = useSearch()\n\nconst searchOptions = computed(() =>\n search.results.value\n .filter(\n (r) =>\n !state.registryDocuments.value.some(\n (d) => d.namespace === r.namespace && d.slug === r.slug,\n ),\n )\n .map((result) => ({\n ...result,\n label: result.title,\n id: result.id,\n })),\n)\n</script>\n\n<template>\n <ScalarPopover\n :offset=\"0\"\n placement=\"top-start\"\n resize\n style=\"width: 220px\">\n <slot />\n <template #popover=\"{ close }\">\n <ScalarTextInput\n autofocus\n class=\"searchInput\"\n :modelValue=\"search.query.value\"\n placeholder=\"Add an API\"\n @update:modelValue=\"(v) => (search.query.value = v ?? '')\">\n <template #prefix>\n <ScalarIconMagnifyingGlass class=\"searchIcon\" />\n </template>\n </ScalarTextInput>\n\n <template v-if=\"searchOptions.length\">\n <button\n v-for=\"option in searchOptions\"\n :key=\"option.id\"\n class=\"searchItem\"\n type=\"button\"\n @click=\"\n () => {\n state.addDocument(option)\n close()\n }\n \">\n <img\n v-if=\"option.logoUrl\"\n class=\"searchItemLogo\"\n :src=\"option.logoUrl\" />\n <span>{{ option.title }}</span>\n </button>\n </template>\n\n <span\n v-else\n class=\"searchResultsEmpty\">\n No APIs found\n </span>\n </template>\n </ScalarPopover>\n</template>\n\n<style scoped>\n.searchItem {\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 8px 10px;\n font-size: var(--scalar-font-size-3);\n}\n\n.searchInput {\n margin-bottom: 5px;\n}\n\n.searchItem:hover {\n background: var(--scalar-background-2);\n}\n\n.searchItemLogo {\n width: 15px;\n}\n\n.searchIcon {\n margin-right: 7px;\n}\n\n.searchResultsEmpty {\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-2);\n margin: 10px;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"SearchPopover.vue.js","names":[],"sources":["../../src/components/SearchPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarPopover } from '@scalar/components/popover'\nimport { ScalarTextInput } from '@scalar/components/text-input'\nimport { ScalarIconMagnifyingGlass } from '@scalar/icons'\nimport { computed } from 'vue'\n\nimport { useSearch } from '@/hooks/use-search'\nimport { useState } from '@/state/state'\n\nconst state = useState()\n\nconst search = useSearch()\n\nconst searchOptions = computed(() =>\n search.results.value\n .filter(\n (r) =>\n !state.registryDocuments.value.some(\n (d) => d.namespace === r.namespace && d.slug === r.slug,\n ),\n )\n .map((result) => ({\n ...result,\n label: result.title,\n id: result.id,\n })),\n)\n</script>\n\n<template>\n <ScalarPopover\n :offset=\"0\"\n placement=\"top-start\"\n resize\n style=\"width: 220px\">\n <slot />\n <template #popover=\"{ close }\">\n <ScalarTextInput\n autofocus\n class=\"searchInput\"\n :modelValue=\"search.query.value\"\n placeholder=\"Add an API\"\n @update:modelValue=\"(v) => (search.query.value = v ?? '')\">\n <template #prefix>\n <ScalarIconMagnifyingGlass class=\"searchIcon\" />\n </template>\n </ScalarTextInput>\n\n <template v-if=\"searchOptions.length\">\n <button\n v-for=\"option in searchOptions\"\n :key=\"option.id\"\n class=\"searchItem\"\n type=\"button\"\n @click=\"\n () => {\n state.addDocument(option)\n close()\n }\n \">\n <img\n v-if=\"option.logoUrl\"\n class=\"searchItemLogo\"\n :src=\"option.logoUrl\" />\n <span>{{ option.title }}</span>\n </button>\n </template>\n\n <span\n v-else\n class=\"searchResultsEmpty\">\n No APIs found\n </span>\n </template>\n </ScalarPopover>\n</template>\n\n<style scoped>\n.searchItem {\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 8px 10px;\n font-size: var(--scalar-font-size-3);\n}\n\n.searchInput {\n margin-bottom: 5px;\n}\n\n.searchItem:hover {\n background: var(--scalar-background-2);\n}\n\n.searchItemLogo {\n width: 15px;\n}\n\n.searchIcon {\n margin-right: 7px;\n}\n\n.searchResultsEmpty {\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-2);\n margin: 10px;\n}\n</style>\n"],"mappings":""}
@@ -1,8 +1,9 @@
1
1
  import { useState } from "../state/state.js";
2
2
  import { useSearch } from "../hooks/use-search.js";
3
3
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, openBlock, renderList, renderSlot, toDisplayString, unref, withCtx } from "vue";
4
- import { ScalarPopover, ScalarTextInput } from "@scalar/components";
5
4
  import { ScalarIconMagnifyingGlass } from "@scalar/icons";
5
+ import { ScalarPopover } from "@scalar/components/popover";
6
+ import { ScalarTextInput } from "@scalar/components/text-input";
6
7
  //#region src/components/SearchPopover.vue?vue&type=script&setup=true&lang.ts
7
8
  var _hoisted_1 = ["onClick"];
8
9
  var _hoisted_2 = ["src"];
@@ -1 +1 @@
1
- {"version":3,"file":"SearchPopover.vue.script.js","names":[],"sources":["../../src/components/SearchPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarPopover, ScalarTextInput } from '@scalar/components'\nimport { ScalarIconMagnifyingGlass } from '@scalar/icons'\nimport { computed } from 'vue'\n\nimport { useSearch } from '@/hooks/use-search'\nimport { useState } from '@/state/state'\n\nconst state = useState()\n\nconst search = useSearch()\n\nconst searchOptions = computed(() =>\n search.results.value\n .filter(\n (r) =>\n !state.registryDocuments.value.some(\n (d) => d.namespace === r.namespace && d.slug === r.slug,\n ),\n )\n .map((result) => ({\n ...result,\n label: result.title,\n id: result.id,\n })),\n)\n</script>\n\n<template>\n <ScalarPopover\n :offset=\"0\"\n placement=\"top-start\"\n resize\n style=\"width: 220px\">\n <slot />\n <template #popover=\"{ close }\">\n <ScalarTextInput\n autofocus\n class=\"searchInput\"\n :modelValue=\"search.query.value\"\n placeholder=\"Add an API\"\n @update:modelValue=\"(v) => (search.query.value = v ?? '')\">\n <template #prefix>\n <ScalarIconMagnifyingGlass class=\"searchIcon\" />\n </template>\n </ScalarTextInput>\n\n <template v-if=\"searchOptions.length\">\n <button\n v-for=\"option in searchOptions\"\n :key=\"option.id\"\n class=\"searchItem\"\n type=\"button\"\n @click=\"\n () => {\n state.addDocument(option)\n close()\n }\n \">\n <img\n v-if=\"option.logoUrl\"\n class=\"searchItemLogo\"\n :src=\"option.logoUrl\" />\n <span>{{ option.title }}</span>\n </button>\n </template>\n\n <span\n v-else\n class=\"searchResultsEmpty\">\n No APIs found\n </span>\n </template>\n </ScalarPopover>\n</template>\n\n<style scoped>\n.searchItem {\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 8px 10px;\n font-size: var(--scalar-font-size-3);\n}\n\n.searchInput {\n margin-bottom: 5px;\n}\n\n.searchItem:hover {\n background: var(--scalar-background-2);\n}\n\n.searchItemLogo {\n width: 15px;\n}\n\n.searchIcon {\n margin-right: 7px;\n}\n\n.searchResultsEmpty {\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-2);\n margin: 10px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;EAQA,MAAM,QAAQ,UAAS;EAEvB,MAAM,SAAS,WAAU;EAEzB,MAAM,gBAAgB,eACpB,OAAO,QAAQ,MACZ,QACE,MACC,CAAC,MAAM,kBAAkB,MAAM,MAC5B,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,KACpD,CACL,CACC,KAAK,YAAY;GAChB,GAAG;GACH,OAAO,OAAO;GACd,IAAI,OAAO;GACZ,EAAE,CACP;;uBAIE,YA4CgB,MAAA,cAAA,EAAA;IA3Cb,QAAQ;IACT,WAAU;IACV,QAAA;IACA,OAAA,EAAA,SAAA,SAAoB;;IAET,SAAO,SAUE,EAVE,YAAK,CACzB,YASkB,MAAA,gBAAA,EAAA;KARhB,WAAA;KACA,OAAM;KACL,YAAY,MAAA,OAAM,CAAC,MAAM;KAC1B,aAAY;KACX,uBAAiB,OAAA,OAAA,OAAA,MAAG,MAAO,MAAA,OAAM,CAAC,MAAM,QAAQ,KAAC;;KACvC,QAAM,cACiC,CAAhD,YAAgD,MAAA,0BAAA,EAAA,EAArB,OAAM,cAAY,CAAA,CAAA,CAAA;;2BAIjC,cAAA,MAAc,UAAA,UAAA,KAAA,EAC5B,mBAgBS,UAAA,EAAA,KAAA,GAAA,EAAA,WAfU,cAAA,QAAV,WAAM;yBADf,mBAgBS,UAAA;MAdN,KAAK,OAAO;MACb,OAAM;MACN,MAAK;MACJ,eAAA;AAA0C,aAAA,MAAK,CAAC,YAAY,OAAM;AAAgB,cAAK;;SAOhF,OAAO,WAAA,WAAA,EADf,mBAG0B,OAAA;;MADxB,OAAM;MACL,KAAK,OAAO;8DACf,mBAA+B,QAAA,MAAA,gBAAtB,OAAO,MAAK,EAAA,EAAA,CAAA,EAAA,GAAA,WAAA;8BAIzB,mBAIO,QAJP,YAE6B,kBAE7B,EAAA,CAAA;2BArCM,CAAR,WAAQ,KAAA,QAAA,WAAA,EAAA,EAAA,KAAA,GAAA,KAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"SearchPopover.vue.script.js","names":[],"sources":["../../src/components/SearchPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarPopover } from '@scalar/components/popover'\nimport { ScalarTextInput } from '@scalar/components/text-input'\nimport { ScalarIconMagnifyingGlass } from '@scalar/icons'\nimport { computed } from 'vue'\n\nimport { useSearch } from '@/hooks/use-search'\nimport { useState } from '@/state/state'\n\nconst state = useState()\n\nconst search = useSearch()\n\nconst searchOptions = computed(() =>\n search.results.value\n .filter(\n (r) =>\n !state.registryDocuments.value.some(\n (d) => d.namespace === r.namespace && d.slug === r.slug,\n ),\n )\n .map((result) => ({\n ...result,\n label: result.title,\n id: result.id,\n })),\n)\n</script>\n\n<template>\n <ScalarPopover\n :offset=\"0\"\n placement=\"top-start\"\n resize\n style=\"width: 220px\">\n <slot />\n <template #popover=\"{ close }\">\n <ScalarTextInput\n autofocus\n class=\"searchInput\"\n :modelValue=\"search.query.value\"\n placeholder=\"Add an API\"\n @update:modelValue=\"(v) => (search.query.value = v ?? '')\">\n <template #prefix>\n <ScalarIconMagnifyingGlass class=\"searchIcon\" />\n </template>\n </ScalarTextInput>\n\n <template v-if=\"searchOptions.length\">\n <button\n v-for=\"option in searchOptions\"\n :key=\"option.id\"\n class=\"searchItem\"\n type=\"button\"\n @click=\"\n () => {\n state.addDocument(option)\n close()\n }\n \">\n <img\n v-if=\"option.logoUrl\"\n class=\"searchItemLogo\"\n :src=\"option.logoUrl\" />\n <span>{{ option.title }}</span>\n </button>\n </template>\n\n <span\n v-else\n class=\"searchResultsEmpty\">\n No APIs found\n </span>\n </template>\n </ScalarPopover>\n</template>\n\n<style scoped>\n.searchItem {\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 8px 10px;\n font-size: var(--scalar-font-size-3);\n}\n\n.searchInput {\n margin-bottom: 5px;\n}\n\n.searchItem:hover {\n background: var(--scalar-background-2);\n}\n\n.searchItemLogo {\n width: 15px;\n}\n\n.searchIcon {\n margin-right: 7px;\n}\n\n.searchResultsEmpty {\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-2);\n margin: 10px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;EASA,MAAM,QAAQ,UAAS;EAEvB,MAAM,SAAS,WAAU;EAEzB,MAAM,gBAAgB,eACpB,OAAO,QAAQ,MACZ,QACE,MACC,CAAC,MAAM,kBAAkB,MAAM,MAC5B,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,KACpD,CACL,CACC,KAAK,YAAY;GAChB,GAAG;GACH,OAAO,OAAO;GACd,IAAI,OAAO;GACZ,EAAE,CACP;;uBAIE,YA4CgB,MAAA,cAAA,EAAA;IA3Cb,QAAQ;IACT,WAAU;IACV,QAAA;IACA,OAAA,EAAA,SAAA,SAAoB;;IAET,SAAO,SAUE,EAVE,YAAK,CACzB,YASkB,MAAA,gBAAA,EAAA;KARhB,WAAA;KACA,OAAM;KACL,YAAY,MAAA,OAAM,CAAC,MAAM;KAC1B,aAAY;KACX,uBAAiB,OAAA,OAAA,OAAA,MAAG,MAAO,MAAA,OAAM,CAAC,MAAM,QAAQ,KAAC;;KACvC,QAAM,cACiC,CAAhD,YAAgD,MAAA,0BAAA,EAAA,EAArB,OAAM,cAAY,CAAA,CAAA,CAAA;;2BAIjC,cAAA,MAAc,UAAA,UAAA,KAAA,EAC5B,mBAgBS,UAAA,EAAA,KAAA,GAAA,EAAA,WAfU,cAAA,QAAV,WAAM;yBADf,mBAgBS,UAAA;MAdN,KAAK,OAAO;MACb,OAAM;MACN,MAAK;MACJ,eAAA;AAA0C,aAAA,MAAK,CAAC,YAAY,OAAM;AAAgB,cAAK;;SAOhF,OAAO,WAAA,WAAA,EADf,mBAG0B,OAAA;;MADxB,OAAM;MACL,KAAK,OAAO;8DACf,mBAA+B,QAAA,MAAA,gBAAtB,OAAO,MAAK,EAAA,EAAA,CAAA,EAAA,GAAA,WAAA;8BAIzB,mBAIO,QAJP,YAE6B,kBAE7B,EAAA,CAAA;2BArCM,CAAR,WAAQ,KAAA,QAAA,WAAA,EAAA,EAAA,KAAA,GAAA,KAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Selector.vue.d.ts","sourceRoot":"","sources":["../../src/components/Selector.vue"],"names":[],"mappings":"AA8EA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAGhG,KAAK,WAAW,GAAG;IACjB,8BAA8B;IAC9B,cAAc,EAAE,YAAY,GAAG,IAAI,CAAA;IACnC,wBAAwB;IACxB,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAA;CACf,CAAC;AA+LF,QAAA,MAAM,YAAY;;;;;;;;;;;;kFAIhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"Selector.vue.d.ts","sourceRoot":"","sources":["../../src/components/Selector.vue"],"names":[],"mappings":"AAgFA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAGhG,KAAK,WAAW,GAAG;IACjB,8BAA8B;IAC9B,cAAc,EAAE,YAAY,GAAG,IAAI,CAAA;IACnC,wBAAwB;IACxB,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAA;CACf,CAAC;AA+LF,QAAA,MAAM,YAAY;;;;;;;;;;;;kFAIhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Selector.vue.js","names":[],"sources":["../../src/components/Selector.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton, ScalarListbox } from '@scalar/components'\nimport { ScalarIconCaretDown } from '@scalar/icons'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nconst { target, servers, selectedServer } = defineProps<{\n /** The selected server URL */\n selectedServer: ServerObject | null\n /** Available servers */\n servers: ServerObject[]\n /** The id of the target to use for the popover (e.g. address bar) */\n target: string\n}>()\n\nconst emit = defineEmits<{\n /** Emitted when the selected server changes */\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst serverOptions = computed(() =>\n servers.map((server) => ({\n id: server.url,\n label: server.url,\n })),\n)\n\nconst serverUrlWithoutTrailingSlash = computed(\n () => selectedServer?.url?.replace(/\\/$/, '') || '',\n)\n\nconst selectedServerOption = computed(() =>\n serverOptions.value.find((opt) => opt.id === selectedServer?.url),\n)\n\n// For testing\ndefineExpose({\n servers,\n serverUrlWithoutTrailingSlash,\n serverOptions,\n selectedServer,\n})\n</script>\n<template>\n <ScalarListbox\n v-if=\"serverOptions.length > 1\"\n ref=\"elem\"\n class=\"group\"\n :modelValue=\"selectedServerOption\"\n :options=\"serverOptions\"\n placement=\"bottom-start\"\n resize\n :target=\"target\"\n @update:modelValue=\"(e) => emit('update:modelValue', e.id)\">\n <ScalarButton\n class=\"bg-b-1 text-c-1 h-auto w-full justify-start gap-1.5 overflow-x-auto rounded-t-none rounded-b-xl px-3 py-1.5 text-base font-normal whitespace-nowrap -outline-offset-1\"\n variant=\"ghost\">\n <span class=\"sr-only\">Server:</span>\n <span class=\"overflow-x-auto\">{{\n serverUrlWithoutTrailingSlash || 'Select a server'\n }}</span>\n <ScalarIconCaretDown\n class=\"text-c-2 ui-open:rotate-180 mt-0.25 size-3 transition-transform duration-100\"\n weight=\"bold\" />\n </ScalarButton>\n </ScalarListbox>\n <div\n v-else\n class=\"text-c-1 flex h-auto w-full items-center gap-0.75 rounded-b-lg px-3 py-1.5 text-base leading-[20px] whitespace-nowrap\">\n <span class=\"sr-only\">Server:</span>\n <span class=\"overflow-x-auto\">{{ serverUrlWithoutTrailingSlash }}</span>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Selector.vue.js","names":[],"sources":["../../src/components/Selector.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarListbox } from '@scalar/components/listbox'\nimport { ScalarIconCaretDown } from '@scalar/icons'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nconst { target, servers, selectedServer } = defineProps<{\n /** The selected server URL */\n selectedServer: ServerObject | null\n /** Available servers */\n servers: ServerObject[]\n /** The id of the target to use for the popover (e.g. address bar) */\n target: string\n}>()\n\nconst emit = defineEmits<{\n /** Emitted when the selected server changes */\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst serverOptions = computed(() =>\n servers.map((server) => ({\n id: server.url,\n label: server.url,\n })),\n)\n\nconst serverUrlWithoutTrailingSlash = computed(\n () => selectedServer?.url?.replace(/\\/$/, '') || '',\n)\n\nconst selectedServerOption = computed(() =>\n serverOptions.value.find((opt) => opt.id === selectedServer?.url),\n)\n\n// For testing\ndefineExpose({\n servers,\n serverUrlWithoutTrailingSlash,\n serverOptions,\n selectedServer,\n})\n</script>\n<template>\n <ScalarListbox\n v-if=\"serverOptions.length > 1\"\n ref=\"elem\"\n class=\"group\"\n :modelValue=\"selectedServerOption\"\n :options=\"serverOptions\"\n placement=\"bottom-start\"\n resize\n :target=\"target\"\n @update:modelValue=\"(e) => emit('update:modelValue', e.id)\">\n <ScalarButton\n class=\"bg-b-1 text-c-1 h-auto w-full justify-start gap-1.5 overflow-x-auto rounded-t-none rounded-b-xl px-3 py-1.5 text-base font-normal whitespace-nowrap -outline-offset-1\"\n variant=\"ghost\">\n <span class=\"sr-only\">Server:</span>\n <span class=\"overflow-x-auto\">{{\n serverUrlWithoutTrailingSlash || 'Select a server'\n }}</span>\n <ScalarIconCaretDown\n class=\"text-c-2 ui-open:rotate-180 mt-0.25 size-3 transition-transform duration-100\"\n weight=\"bold\" />\n </ScalarButton>\n </ScalarListbox>\n <div\n v-else\n class=\"text-c-1 flex h-auto w-full items-center gap-0.75 rounded-b-lg px-3 py-1.5 text-base leading-[20px] whitespace-nowrap\">\n <span class=\"sr-only\">Server:</span>\n <span class=\"overflow-x-auto\">{{ serverUrlWithoutTrailingSlash }}</span>\n </div>\n</template>\n"],"mappings":""}
@@ -1,6 +1,7 @@
1
1
  import { computed, createBlock, createElementBlock, createElementVNode, createVNode, defineComponent, openBlock, toDisplayString, unref, withCtx } from "vue";
2
- import { ScalarButton, ScalarListbox } from "@scalar/components";
2
+ import { ScalarButton } from "@scalar/components/button";
3
3
  import { ScalarIconCaretDown } from "@scalar/icons";
4
+ import { ScalarListbox } from "@scalar/components/listbox";
4
5
  //#region src/components/Selector.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = { class: "overflow-x-auto" };
6
7
  var _hoisted_2 = {
@@ -1 +1 @@
1
- {"version":3,"file":"Selector.vue.script.js","names":[],"sources":["../../src/components/Selector.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton, ScalarListbox } from '@scalar/components'\nimport { ScalarIconCaretDown } from '@scalar/icons'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nconst { target, servers, selectedServer } = defineProps<{\n /** The selected server URL */\n selectedServer: ServerObject | null\n /** Available servers */\n servers: ServerObject[]\n /** The id of the target to use for the popover (e.g. address bar) */\n target: string\n}>()\n\nconst emit = defineEmits<{\n /** Emitted when the selected server changes */\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst serverOptions = computed(() =>\n servers.map((server) => ({\n id: server.url,\n label: server.url,\n })),\n)\n\nconst serverUrlWithoutTrailingSlash = computed(\n () => selectedServer?.url?.replace(/\\/$/, '') || '',\n)\n\nconst selectedServerOption = computed(() =>\n serverOptions.value.find((opt) => opt.id === selectedServer?.url),\n)\n\n// For testing\ndefineExpose({\n servers,\n serverUrlWithoutTrailingSlash,\n serverOptions,\n selectedServer,\n})\n</script>\n<template>\n <ScalarListbox\n v-if=\"serverOptions.length > 1\"\n ref=\"elem\"\n class=\"group\"\n :modelValue=\"selectedServerOption\"\n :options=\"serverOptions\"\n placement=\"bottom-start\"\n resize\n :target=\"target\"\n @update:modelValue=\"(e) => emit('update:modelValue', e.id)\">\n <ScalarButton\n class=\"bg-b-1 text-c-1 h-auto w-full justify-start gap-1.5 overflow-x-auto rounded-t-none rounded-b-xl px-3 py-1.5 text-base font-normal whitespace-nowrap -outline-offset-1\"\n variant=\"ghost\">\n <span class=\"sr-only\">Server:</span>\n <span class=\"overflow-x-auto\">{{\n serverUrlWithoutTrailingSlash || 'Select a server'\n }}</span>\n <ScalarIconCaretDown\n class=\"text-c-2 ui-open:rotate-180 mt-0.25 size-3 transition-transform duration-100\"\n weight=\"bold\" />\n </ScalarButton>\n </ScalarListbox>\n <div\n v-else\n class=\"text-c-1 flex h-auto w-full items-center gap-0.75 rounded-b-lg px-3 py-1.5 text-base leading-[20px] whitespace-nowrap\">\n <span class=\"sr-only\">Server:</span>\n <span class=\"overflow-x-auto\">{{ serverUrlWithoutTrailingSlash }}</span>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAeA,MAAM,OAAO;EAKb,MAAM,gBAAgB,eACpB,QAAA,QAAQ,KAAK,YAAY;GACvB,IAAI,OAAO;GACX,OAAO,OAAO;GACf,EAAE,CACL;EAEA,MAAM,gCAAgC,eAC9B,QAAA,gBAAgB,KAAK,QAAQ,OAAO,GAAG,IAAI,GACnD;EAEA,MAAM,uBAAuB,eAC3B,cAAc,MAAM,MAAM,QAAQ,IAAI,OAAO,QAAA,gBAAgB,IAAI,CACnE;AAGA,WAAa;GACX,SAAM,QAAA;GACN;GACA;GACA,gBAAa,QAAA;GACd,CAAA;;UAIS,cAAA,MAAc,SAAM,KAAA,WAAA,EAD5B,YAqBgB,MAAA,cAAA,EAAA;;IAnBd,KAAI;IACJ,OAAM;IACL,YAAY,qBAAA;IACZ,SAAS,cAAA;IACV,WAAU;IACV,QAAA;IACC,QAAQ,QAAA;IACR,uBAAiB,OAAA,OAAA,OAAA,MAAG,MAAM,KAAI,qBAAsB,EAAE,GAAE;;2BAW1C,CAVf,YAUe,MAAA,aAAA,EAAA;KATb,OAAM;KACN,SAAQ;;4BAC4B;gCAApC,mBAAoC,QAAA,EAA9B,OAAM,WAAS,EAAC,WAAO,GAAA;MAC7B,mBAES,QAFT,YAES,gBADP,8BAAA,SAA6B,kBAAA,EAAA,EAAA;MAE/B,YAEkB,MAAA,oBAAA,EAAA;OADhB,OAAM;OACN,QAAO;;;;;;;;;;uBAGb,mBAKM,OALN,YAKM,CAAA,OAAA,OAAA,OAAA,KAFJ,mBAAoC,QAAA,EAA9B,OAAM,WAAS,EAAC,WAAO,GAAA,GAC7B,mBAAwE,QAAxE,YAAwE,gBAAvC,8BAAA,MAA6B,EAAA,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"Selector.vue.script.js","names":[],"sources":["../../src/components/Selector.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarListbox } from '@scalar/components/listbox'\nimport { ScalarIconCaretDown } from '@scalar/icons'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nconst { target, servers, selectedServer } = defineProps<{\n /** The selected server URL */\n selectedServer: ServerObject | null\n /** Available servers */\n servers: ServerObject[]\n /** The id of the target to use for the popover (e.g. address bar) */\n target: string\n}>()\n\nconst emit = defineEmits<{\n /** Emitted when the selected server changes */\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst serverOptions = computed(() =>\n servers.map((server) => ({\n id: server.url,\n label: server.url,\n })),\n)\n\nconst serverUrlWithoutTrailingSlash = computed(\n () => selectedServer?.url?.replace(/\\/$/, '') || '',\n)\n\nconst selectedServerOption = computed(() =>\n serverOptions.value.find((opt) => opt.id === selectedServer?.url),\n)\n\n// For testing\ndefineExpose({\n servers,\n serverUrlWithoutTrailingSlash,\n serverOptions,\n selectedServer,\n})\n</script>\n<template>\n <ScalarListbox\n v-if=\"serverOptions.length > 1\"\n ref=\"elem\"\n class=\"group\"\n :modelValue=\"selectedServerOption\"\n :options=\"serverOptions\"\n placement=\"bottom-start\"\n resize\n :target=\"target\"\n @update:modelValue=\"(e) => emit('update:modelValue', e.id)\">\n <ScalarButton\n class=\"bg-b-1 text-c-1 h-auto w-full justify-start gap-1.5 overflow-x-auto rounded-t-none rounded-b-xl px-3 py-1.5 text-base font-normal whitespace-nowrap -outline-offset-1\"\n variant=\"ghost\">\n <span class=\"sr-only\">Server:</span>\n <span class=\"overflow-x-auto\">{{\n serverUrlWithoutTrailingSlash || 'Select a server'\n }}</span>\n <ScalarIconCaretDown\n class=\"text-c-2 ui-open:rotate-180 mt-0.25 size-3 transition-transform duration-100\"\n weight=\"bold\" />\n </ScalarButton>\n </ScalarListbox>\n <div\n v-else\n class=\"text-c-1 flex h-auto w-full items-center gap-0.75 rounded-b-lg px-3 py-1.5 text-base leading-[20px] whitespace-nowrap\">\n <span class=\"sr-only\">Server:</span>\n <span class=\"overflow-x-auto\">{{ serverUrlWithoutTrailingSlash }}</span>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,OAAO;EAKb,MAAM,gBAAgB,eACpB,QAAA,QAAQ,KAAK,YAAY;GACvB,IAAI,OAAO;GACX,OAAO,OAAO;GACf,EAAE,CACL;EAEA,MAAM,gCAAgC,eAC9B,QAAA,gBAAgB,KAAK,QAAQ,OAAO,GAAG,IAAI,GACnD;EAEA,MAAM,uBAAuB,eAC3B,cAAc,MAAM,MAAM,QAAQ,IAAI,OAAO,QAAA,gBAAgB,IAAI,CACnE;AAGA,WAAa;GACX,SAAM,QAAA;GACN;GACA;GACA,gBAAa,QAAA;GACd,CAAA;;UAIS,cAAA,MAAc,SAAM,KAAA,WAAA,EAD5B,YAqBgB,MAAA,cAAA,EAAA;;IAnBd,KAAI;IACJ,OAAM;IACL,YAAY,qBAAA;IACZ,SAAS,cAAA;IACV,WAAU;IACV,QAAA;IACC,QAAQ,QAAA;IACR,uBAAiB,OAAA,OAAA,OAAA,MAAG,MAAM,KAAI,qBAAsB,EAAE,GAAE;;2BAW1C,CAVf,YAUe,MAAA,aAAA,EAAA;KATb,OAAM;KACN,SAAQ;;4BAC4B;gCAApC,mBAAoC,QAAA,EAA9B,OAAM,WAAS,EAAC,WAAO,GAAA;MAC7B,mBAES,QAFT,YAES,gBADP,8BAAA,SAA6B,kBAAA,EAAA,EAAA;MAE/B,YAEkB,MAAA,oBAAA,EAAA;OADhB,OAAM;OACN,QAAO;;;;;;;;;;uBAGb,mBAKM,OALN,YAKM,CAAA,OAAA,OAAA,OAAA,KAFJ,mBAAoC,QAAA,EAA9B,OAAM,WAAS,EAAC,WAAO,GAAA,GAC7B,mBAAwE,QAAxE,YAAwE,gBAAvC,8BAAA,MAA6B,EAAA,EAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ServerSelector.vue.js","names":[],"sources":["../../src/components/ServerSelector.vue"],"sourcesContent":["<script lang=\"ts\">\ntype SelectorProps = {\n /** The event bus to use for emitting events */\n eventBus: WorkspaceEventBus\n /** The selected server */\n selectedServer: ServerObject | null\n /** Available servers */\n servers: ServerObject[]\n}\n\n/**\n * ServerSelector\n *\n * Core component for rendering a server selector block.\n * Handles server selection and emits a 'server:update:selected' event when the selected server changes.\n *\n * @event server:update:selected - Emitted when the selected server changes\n * @event server:update:variables - Emitted when a server variable changes\n */\nexport default {}\n</script>\n\n<script lang=\"ts\" setup>\nimport { ServerVariablesForm } from '@scalar/api-client/components/Server'\nimport { ScalarMarkdown } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { useId } from 'vue'\n\nimport Selector from './Selector.vue'\n\nconst { eventBus, servers, selectedServer } = defineProps<SelectorProps>()\n\nconst id = useId()\n\n/** Update the selected server */\nconst updateServer = (newServer: string) => {\n eventBus.emit('server:update:selected', {\n url: selectedServer?.url === newServer ? '' : newServer,\n meta: {\n type: 'document',\n },\n })\n}\n\n/** Update the server variable */\nconst updateServerVariable = (key: string, value: string) => {\n /** Find the index of the selected server */\n const index = servers.findIndex((s) => s.url === selectedServer?.url)\n if (index === -1) {\n return\n }\n\n eventBus.emit('server:update:variables', {\n index,\n key,\n value,\n meta: {\n type: 'document',\n },\n })\n}\n</script>\n\n<template>\n <label\n class=\"bg-b-2 flex h-8 items-center rounded-t-xl border-x border-t px-3 py-2.5 font-medium\">\n Server\n </label>\n <div\n :id=\"id\"\n class=\"border\"\n :class=\"{\n 'rounded-b-xl':\n !selectedServer?.description && !selectedServer?.variables,\n }\">\n <Selector\n v-if=\"servers.length\"\n :selectedServer\n :servers=\"servers\"\n :target=\"id\"\n @update:modelValue=\"updateServer\" />\n </div>\n <ServerVariablesForm\n layout=\"reference\"\n :variables=\"selectedServer?.variables\"\n @update:variable=\"updateServerVariable\" />\n\n <!-- Description -->\n <ScalarMarkdown\n v-if=\"selectedServer?.description\"\n class=\"text-c-3 rounded-b-xl border-x border-b px-3 py-1.5\"\n :value=\"selectedServer.description\" />\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ServerSelector.vue.js","names":[],"sources":["../../src/components/ServerSelector.vue"],"sourcesContent":["<script lang=\"ts\">\ntype SelectorProps = {\n /** The event bus to use for emitting events */\n eventBus: WorkspaceEventBus\n /** The selected server */\n selectedServer: ServerObject | null\n /** Available servers */\n servers: ServerObject[]\n}\n\n/**\n * ServerSelector\n *\n * Core component for rendering a server selector block.\n * Handles server selection and emits a 'server:update:selected' event when the selected server changes.\n *\n * @event server:update:selected - Emitted when the selected server changes\n * @event server:update:variables - Emitted when a server variable changes\n */\nexport default {}\n</script>\n\n<script lang=\"ts\" setup>\nimport { ServerVariablesForm } from '@scalar/api-client/components/Server'\nimport { ScalarMarkdown } from '@scalar/components/markdown'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { useId } from 'vue'\n\nimport Selector from './Selector.vue'\n\nconst { eventBus, servers, selectedServer } = defineProps<SelectorProps>()\n\nconst id = useId()\n\n/** Update the selected server */\nconst updateServer = (newServer: string) => {\n eventBus.emit('server:update:selected', {\n url: selectedServer?.url === newServer ? '' : newServer,\n meta: {\n type: 'document',\n },\n })\n}\n\n/** Update the server variable */\nconst updateServerVariable = (key: string, value: string) => {\n /** Find the index of the selected server */\n const index = servers.findIndex((s) => s.url === selectedServer?.url)\n if (index === -1) {\n return\n }\n\n eventBus.emit('server:update:variables', {\n index,\n key,\n value,\n meta: {\n type: 'document',\n },\n })\n}\n</script>\n\n<template>\n <label\n class=\"bg-b-2 flex h-8 items-center rounded-t-xl border-x border-t px-3 py-2.5 font-medium\">\n Server\n </label>\n <div\n :id=\"id\"\n class=\"border\"\n :class=\"{\n 'rounded-b-xl':\n !selectedServer?.description && !selectedServer?.variables,\n }\">\n <Selector\n v-if=\"servers.length\"\n :selectedServer\n :servers=\"servers\"\n :target=\"id\"\n @update:modelValue=\"updateServer\" />\n </div>\n <ServerVariablesForm\n layout=\"reference\"\n :variables=\"selectedServer?.variables\"\n @update:variable=\"updateServerVariable\" />\n\n <!-- Description -->\n <ScalarMarkdown\n v-if=\"selectedServer?.description\"\n class=\"text-c-3 rounded-b-xl border-x border-b px-3 py-1.5\"\n :value=\"selectedServer.description\" />\n</template>\n"],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  import Selector_default from "./Selector.vue.js";
2
2
  import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, unref, useId } from "vue";
3
- import { ScalarMarkdown } from "@scalar/components";
3
+ import { ScalarMarkdown } from "@scalar/components/markdown";
4
4
  import { ServerVariablesForm } from "@scalar/api-client/components/Server";
5
5
  //#region src/components/ServerSelector.vue?vue&type=script&setup=true&lang.ts
6
6
  var _hoisted_1 = ["id"];
@@ -1 +1 @@
1
- {"version":3,"file":"ServerSelector.vue.script.js","names":[],"sources":["../../src/components/ServerSelector.vue"],"sourcesContent":["<script lang=\"ts\">\ntype SelectorProps = {\n /** The event bus to use for emitting events */\n eventBus: WorkspaceEventBus\n /** The selected server */\n selectedServer: ServerObject | null\n /** Available servers */\n servers: ServerObject[]\n}\n\n/**\n * ServerSelector\n *\n * Core component for rendering a server selector block.\n * Handles server selection and emits a 'server:update:selected' event when the selected server changes.\n *\n * @event server:update:selected - Emitted when the selected server changes\n * @event server:update:variables - Emitted when a server variable changes\n */\nexport default {}\n</script>\n\n<script lang=\"ts\" setup>\nimport { ServerVariablesForm } from '@scalar/api-client/components/Server'\nimport { ScalarMarkdown } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { useId } from 'vue'\n\nimport Selector from './Selector.vue'\n\nconst { eventBus, servers, selectedServer } = defineProps<SelectorProps>()\n\nconst id = useId()\n\n/** Update the selected server */\nconst updateServer = (newServer: string) => {\n eventBus.emit('server:update:selected', {\n url: selectedServer?.url === newServer ? '' : newServer,\n meta: {\n type: 'document',\n },\n })\n}\n\n/** Update the server variable */\nconst updateServerVariable = (key: string, value: string) => {\n /** Find the index of the selected server */\n const index = servers.findIndex((s) => s.url === selectedServer?.url)\n if (index === -1) {\n return\n }\n\n eventBus.emit('server:update:variables', {\n index,\n key,\n value,\n meta: {\n type: 'document',\n },\n })\n}\n</script>\n\n<template>\n <label\n class=\"bg-b-2 flex h-8 items-center rounded-t-xl border-x border-t px-3 py-2.5 font-medium\">\n Server\n </label>\n <div\n :id=\"id\"\n class=\"border\"\n :class=\"{\n 'rounded-b-xl':\n !selectedServer?.description && !selectedServer?.variables,\n }\">\n <Selector\n v-if=\"servers.length\"\n :selectedServer\n :servers=\"servers\"\n :target=\"id\"\n @update:modelValue=\"updateServer\" />\n </div>\n <ServerVariablesForm\n layout=\"reference\"\n :variables=\"selectedServer?.variables\"\n @update:variable=\"updateServerVariable\" />\n\n <!-- Description -->\n <ScalarMarkdown\n v-if=\"selectedServer?.description\"\n class=\"text-c-3 rounded-b-xl border-x border-b px-3 py-1.5\"\n :value=\"selectedServer.description\" />\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAiCA,MAAM,KAAK,OAAM;;EAGjB,MAAM,gBAAgB,cAAsB;AAC1C,WAAA,SAAS,KAAK,0BAA0B;IACtC,KAAK,QAAA,gBAAgB,QAAQ,YAAY,KAAK;IAC9C,MAAM,EACJ,MAAM,YACP;IACF,CAAA;;;EAIH,MAAM,wBAAwB,KAAa,UAAkB;;GAE3D,MAAM,QAAQ,QAAA,QAAQ,WAAW,MAAM,EAAE,QAAQ,QAAA,gBAAgB,IAAG;AACpE,OAAI,UAAU,GACZ;AAGF,WAAA,SAAS,KAAK,2BAA2B;IACvC;IACA;IACA;IACA,MAAM,EACJ,MAAM,YACP;IACF,CAAA;;;;8BAKD,mBAGQ,SAAA,EAFN,OAAM,uFAAqF,EAAC,YAE9F,GAAA;IACA,mBAaM,OAAA;KAZH,IAAI,MAAA,GAAE;KACP,OAAK,eAAA,CAAC,UAAQ,EAAA,gBAAA,CAC2B,QAAA,gBAAgB,eAAW,CAAK,QAAA,gBAAgB,WAAA,CAAA,CAAA;QAKjF,QAAA,QAAQ,UAAA,WAAA,EADhB,YAKsC,kBAAA;;KAHnC,gBAAA,QAAA;KACA,SAAS,QAAA;KACT,QAAQ,MAAA,GAAE;KACV,uBAAmB;;;;;;IAExB,YAG4C,MAAA,oBAAA,EAAA;KAF1C,QAAO;KACN,WAAW,QAAA,gBAAgB;KAC3B,qBAAiB;;IAIZ,QAAA,gBAAgB,eAAA,WAAA,EADxB,YAGwC,MAAA,eAAA,EAAA;;KADtC,OAAM;KACL,OAAO,QAAA,eAAe"}
1
+ {"version":3,"file":"ServerSelector.vue.script.js","names":[],"sources":["../../src/components/ServerSelector.vue"],"sourcesContent":["<script lang=\"ts\">\ntype SelectorProps = {\n /** The event bus to use for emitting events */\n eventBus: WorkspaceEventBus\n /** The selected server */\n selectedServer: ServerObject | null\n /** Available servers */\n servers: ServerObject[]\n}\n\n/**\n * ServerSelector\n *\n * Core component for rendering a server selector block.\n * Handles server selection and emits a 'server:update:selected' event when the selected server changes.\n *\n * @event server:update:selected - Emitted when the selected server changes\n * @event server:update:variables - Emitted when a server variable changes\n */\nexport default {}\n</script>\n\n<script lang=\"ts\" setup>\nimport { ServerVariablesForm } from '@scalar/api-client/components/Server'\nimport { ScalarMarkdown } from '@scalar/components/markdown'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { useId } from 'vue'\n\nimport Selector from './Selector.vue'\n\nconst { eventBus, servers, selectedServer } = defineProps<SelectorProps>()\n\nconst id = useId()\n\n/** Update the selected server */\nconst updateServer = (newServer: string) => {\n eventBus.emit('server:update:selected', {\n url: selectedServer?.url === newServer ? '' : newServer,\n meta: {\n type: 'document',\n },\n })\n}\n\n/** Update the server variable */\nconst updateServerVariable = (key: string, value: string) => {\n /** Find the index of the selected server */\n const index = servers.findIndex((s) => s.url === selectedServer?.url)\n if (index === -1) {\n return\n }\n\n eventBus.emit('server:update:variables', {\n index,\n key,\n value,\n meta: {\n type: 'document',\n },\n })\n}\n</script>\n\n<template>\n <label\n class=\"bg-b-2 flex h-8 items-center rounded-t-xl border-x border-t px-3 py-2.5 font-medium\">\n Server\n </label>\n <div\n :id=\"id\"\n class=\"border\"\n :class=\"{\n 'rounded-b-xl':\n !selectedServer?.description && !selectedServer?.variables,\n }\">\n <Selector\n v-if=\"servers.length\"\n :selectedServer\n :servers=\"servers\"\n :target=\"id\"\n @update:modelValue=\"updateServer\" />\n </div>\n <ServerVariablesForm\n layout=\"reference\"\n :variables=\"selectedServer?.variables\"\n @update:variable=\"updateServerVariable\" />\n\n <!-- Description -->\n <ScalarMarkdown\n v-if=\"selectedServer?.description\"\n class=\"text-c-3 rounded-b-xl border-x border-b px-3 py-1.5\"\n :value=\"selectedServer.description\" />\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAiCA,MAAM,KAAK,OAAM;;EAGjB,MAAM,gBAAgB,cAAsB;AAC1C,WAAA,SAAS,KAAK,0BAA0B;IACtC,KAAK,QAAA,gBAAgB,QAAQ,YAAY,KAAK;IAC9C,MAAM,EACJ,MAAM,YACP;IACF,CAAA;;;EAIH,MAAM,wBAAwB,KAAa,UAAkB;;GAE3D,MAAM,QAAQ,QAAA,QAAQ,WAAW,MAAM,EAAE,QAAQ,QAAA,gBAAgB,IAAG;AACpE,OAAI,UAAU,GACZ;AAGF,WAAA,SAAS,KAAK,2BAA2B;IACvC;IACA;IACA;IACA,MAAM,EACJ,MAAM,YACP;IACF,CAAA;;;;8BAKD,mBAGQ,SAAA,EAFN,OAAM,uFAAqF,EAAC,YAE9F,GAAA;IACA,mBAaM,OAAA;KAZH,IAAI,MAAA,GAAE;KACP,OAAK,eAAA,CAAC,UAAQ,EAAA,gBAAA,CAC2B,QAAA,gBAAgB,eAAW,CAAK,QAAA,gBAAgB,WAAA,CAAA,CAAA;QAKjF,QAAA,QAAQ,UAAA,WAAA,EADhB,YAKsC,kBAAA;;KAHnC,gBAAA,QAAA;KACA,SAAS,QAAA;KACT,QAAQ,MAAA,GAAE;KACV,uBAAmB;;;;;;IAExB,YAG4C,MAAA,oBAAA,EAAA;KAF1C,QAAO;KACN,WAAW,QAAA,gBAAgB;KAC3B,qBAAiB;;IAIZ,QAAA,gBAAgB,eAAA,WAAA,EADxB,YAGwC,MAAA,eAAA,EAAA;;KADtC,OAAM;KACL,OAAO,QAAA,eAAe"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../_virtual/_plugin-vue_export-he
2
2
  import UploadSection_vue_vue_type_script_setup_true_lang_default from "./UploadSection.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/components/UploadSection.vue
5
- var UploadSection_default = /* @__PURE__ */ _plugin_vue_export_helper_default(UploadSection_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-9551cf83"]]);
5
+ var UploadSection_default = /* @__PURE__ */ _plugin_vue_export_helper_default(UploadSection_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-1e830c40"]]);
6
6
  //#endregion
7
7
  export { UploadSection_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"UploadSection.vue.js","names":[],"sources":["../../src/components/UploadSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarLoading, useLoadingState } from '@scalar/components'\nimport { ScalarIconCheck, ScalarIconXCircle } from '@scalar/icons'\nimport { computed } from 'vue'\n\nimport { type UploadTmpDocumentState } from '@/hooks/use-upload-tmp-document'\n\nconst { uploadState } = defineProps<{\n uploadState: UploadTmpDocumentState\n}>()\n\nconst loadingState = useLoadingState()\n\nconst isLoading = computed(() =>\n ['uploading', 'processing', 'loading'].includes(uploadState.type),\n)\n</script>\n\n<template>\n <div\n class=\"uploadSection\"\n :class=\"{\n error: uploadState.type === 'error',\n done: uploadState.type === 'done',\n }\">\n <div\n v-if=\"isLoading\"\n class=\"flex items-center gap-1.5\">\n <ScalarLoading\n class=\"text-blue\"\n :loader=\"{\n ...loadingState,\n isLoading: true,\n }\"\n size=\"lg\" />\n <strong\n v-if=\"uploadState.type === 'loading'\"\n class=\"uploadText\">\n Loading OpenAPI document…\n </strong>\n <strong\n v-else-if=\"uploadState.type === 'processing'\"\n class=\"uploadText\">\n Processing OpenAPI document…\n </strong>\n <strong\n v-else\n class=\"uploadText\">\n Uploading OpenAPI document…\n </strong>\n </div>\n <strong\n v-if=\"uploadState.type === 'done'\"\n class=\"uploadText flex items-center gap-1.5\">\n <ScalarIconCheck class=\"icon text-green\" />\n Your OpenAPI document has been processed successfully.\n </strong>\n <strong\n v-if=\"uploadState.type === 'error'\"\n class=\"uploadText flex items-center gap-1.5\">\n <ScalarIconXCircle class=\"icon text-red\" />\n {{ uploadState.error }}\n </strong>\n </div>\n</template>\n\n<style scoped>\n.uploadSection {\n width: 100%;\n margin-bottom: -16px;\n padding: 8px 8px 24px 12px;\n position: relative;\n background: color-mix(\n in srgb,\n var(--scalar-color-blue),\n var(--scalar-background-1) 95%\n );\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: 16px 16px 0 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: absolute;\n top: 0;\n transform: translate3d(0, calc(-100% + 16px), 0);\n}\n\n.uploadSection.error {\n background: color-mix(\n in srgb,\n var(--scalar-color-red),\n var(--scalar-background-1) 95%\n );\n}\n\n.uploadSection.done {\n background: color-mix(\n in srgb,\n var(--scalar-color-green),\n var(--scalar-background-1) 95%\n );\n}\n\n.uploadText {\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-font-size-3);\n}\n\n.icon {\n height: 20px;\n width: 20px;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"UploadSection.vue.js","names":[],"sources":["../../src/components/UploadSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarLoading, useLoadingState } from '@scalar/components/loading'\nimport { ScalarIconCheck, ScalarIconXCircle } from '@scalar/icons'\nimport { computed } from 'vue'\n\nimport { type UploadTmpDocumentState } from '@/hooks/use-upload-tmp-document'\n\nconst { uploadState } = defineProps<{\n uploadState: UploadTmpDocumentState\n}>()\n\nconst loadingState = useLoadingState()\n\nconst isLoading = computed(() =>\n ['uploading', 'processing', 'loading'].includes(uploadState.type),\n)\n</script>\n\n<template>\n <div\n class=\"uploadSection\"\n :class=\"{\n error: uploadState.type === 'error',\n done: uploadState.type === 'done',\n }\">\n <div\n v-if=\"isLoading\"\n class=\"flex items-center gap-1.5\">\n <ScalarLoading\n class=\"text-blue\"\n :loader=\"{\n ...loadingState,\n isLoading: true,\n }\"\n size=\"lg\" />\n <strong\n v-if=\"uploadState.type === 'loading'\"\n class=\"uploadText\">\n Loading OpenAPI document…\n </strong>\n <strong\n v-else-if=\"uploadState.type === 'processing'\"\n class=\"uploadText\">\n Processing OpenAPI document…\n </strong>\n <strong\n v-else\n class=\"uploadText\">\n Uploading OpenAPI document…\n </strong>\n </div>\n <strong\n v-if=\"uploadState.type === 'done'\"\n class=\"uploadText flex items-center gap-1.5\">\n <ScalarIconCheck class=\"icon text-green\" />\n Your OpenAPI document has been processed successfully.\n </strong>\n <strong\n v-if=\"uploadState.type === 'error'\"\n class=\"uploadText flex items-center gap-1.5\">\n <ScalarIconXCircle class=\"icon text-red\" />\n {{ uploadState.error }}\n </strong>\n </div>\n</template>\n\n<style scoped>\n.uploadSection {\n width: 100%;\n margin-bottom: -16px;\n padding: 8px 8px 24px 12px;\n position: relative;\n background: color-mix(\n in srgb,\n var(--scalar-color-blue),\n var(--scalar-background-1) 95%\n );\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: 16px 16px 0 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: absolute;\n top: 0;\n transform: translate3d(0, calc(-100% + 16px), 0);\n}\n\n.uploadSection.error {\n background: color-mix(\n in srgb,\n var(--scalar-color-red),\n var(--scalar-background-1) 95%\n );\n}\n\n.uploadSection.done {\n background: color-mix(\n in srgb,\n var(--scalar-color-green),\n var(--scalar-background-1) 95%\n );\n}\n\n.uploadText {\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-font-size-3);\n}\n\n.icon {\n height: 20px;\n width: 20px;\n}\n</style>\n"],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  import { computed, createCommentVNode, createElementBlock, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, toDisplayString, unref } from "vue";
2
- import { ScalarLoading, useLoadingState } from "@scalar/components";
3
2
  import { ScalarIconCheck, ScalarIconXCircle } from "@scalar/icons";
3
+ import { ScalarLoading, useLoadingState } from "@scalar/components/loading";
4
4
  //#region src/components/UploadSection.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = {
6
6
  key: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"UploadSection.vue.script.js","names":[],"sources":["../../src/components/UploadSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarLoading, useLoadingState } from '@scalar/components'\nimport { ScalarIconCheck, ScalarIconXCircle } from '@scalar/icons'\nimport { computed } from 'vue'\n\nimport { type UploadTmpDocumentState } from '@/hooks/use-upload-tmp-document'\n\nconst { uploadState } = defineProps<{\n uploadState: UploadTmpDocumentState\n}>()\n\nconst loadingState = useLoadingState()\n\nconst isLoading = computed(() =>\n ['uploading', 'processing', 'loading'].includes(uploadState.type),\n)\n</script>\n\n<template>\n <div\n class=\"uploadSection\"\n :class=\"{\n error: uploadState.type === 'error',\n done: uploadState.type === 'done',\n }\">\n <div\n v-if=\"isLoading\"\n class=\"flex items-center gap-1.5\">\n <ScalarLoading\n class=\"text-blue\"\n :loader=\"{\n ...loadingState,\n isLoading: true,\n }\"\n size=\"lg\" />\n <strong\n v-if=\"uploadState.type === 'loading'\"\n class=\"uploadText\">\n Loading OpenAPI document…\n </strong>\n <strong\n v-else-if=\"uploadState.type === 'processing'\"\n class=\"uploadText\">\n Processing OpenAPI document…\n </strong>\n <strong\n v-else\n class=\"uploadText\">\n Uploading OpenAPI document…\n </strong>\n </div>\n <strong\n v-if=\"uploadState.type === 'done'\"\n class=\"uploadText flex items-center gap-1.5\">\n <ScalarIconCheck class=\"icon text-green\" />\n Your OpenAPI document has been processed successfully.\n </strong>\n <strong\n v-if=\"uploadState.type === 'error'\"\n class=\"uploadText flex items-center gap-1.5\">\n <ScalarIconXCircle class=\"icon text-red\" />\n {{ uploadState.error }}\n </strong>\n </div>\n</template>\n\n<style scoped>\n.uploadSection {\n width: 100%;\n margin-bottom: -16px;\n padding: 8px 8px 24px 12px;\n position: relative;\n background: color-mix(\n in srgb,\n var(--scalar-color-blue),\n var(--scalar-background-1) 95%\n );\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: 16px 16px 0 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: absolute;\n top: 0;\n transform: translate3d(0, calc(-100% + 16px), 0);\n}\n\n.uploadSection.error {\n background: color-mix(\n in srgb,\n var(--scalar-color-red),\n var(--scalar-background-1) 95%\n );\n}\n\n.uploadSection.done {\n background: color-mix(\n in srgb,\n var(--scalar-color-green),\n var(--scalar-background-1) 95%\n );\n}\n\n.uploadText {\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-font-size-3);\n}\n\n.icon {\n height: 20px;\n width: 20px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWA,MAAM,eAAe,iBAAgB;EAErC,MAAM,YAAY,eAChB;GAAC;GAAa;GAAc;GAAU,CAAC,SAAS,QAAA,YAAY,KAAK,CACnE;;uBAIE,mBA4CM,OAAA,EA3CJ,OAAK,eAAA,CAAC,iBAAe;WACE,QAAA,YAAY,SAAI;UAA0B,QAAA,YAAY,SAAI;;IAKzE,UAAA,SAAA,WAAA,EADR,mBAyBM,OAzBN,YAyBM,CAtBJ,YAMc,MAAA,cAAA,EAAA;KALZ,OAAM;KACL,QAAM;SAAiB,MAAA,aAAY;;;KAIpC,MAAK;6BAEC,QAAA,YAAY,SAAI,aAAA,WAAA,EADxB,mBAIS,UAJT,YAEqB,8BAErB,IAEa,QAAA,YAAY,SAAI,gBAAA,WAAA,EAD7B,mBAIS,UAJT,YAEqB,iCAErB,KAAA,WAAA,EACA,mBAIS,UAJT,YAEqB,gCAErB,EAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;IAGM,QAAA,YAAY,SAAI,UAAA,WAAA,EADxB,mBAKS,UALT,YAKS,CAFP,YAA2C,MAAA,gBAAA,EAAA,EAA1B,OAAM,mBAAiB,CAAA,EAAA,OAAA,OAAA,OAAA,KAAA,gBAAG,4DAE7C,GAAA,EAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;IAEQ,QAAA,YAAY,SAAI,WAAA,WAAA,EADxB,mBAKS,UALT,YAKS,CAFP,YAA2C,MAAA,kBAAA,EAAA,EAAxB,OAAM,iBAAe,CAAA,EAAA,gBAAG,MAC3C,gBAAG,QAAA,YAAY,MAAK,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA"}
1
+ {"version":3,"file":"UploadSection.vue.script.js","names":[],"sources":["../../src/components/UploadSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarLoading, useLoadingState } from '@scalar/components/loading'\nimport { ScalarIconCheck, ScalarIconXCircle } from '@scalar/icons'\nimport { computed } from 'vue'\n\nimport { type UploadTmpDocumentState } from '@/hooks/use-upload-tmp-document'\n\nconst { uploadState } = defineProps<{\n uploadState: UploadTmpDocumentState\n}>()\n\nconst loadingState = useLoadingState()\n\nconst isLoading = computed(() =>\n ['uploading', 'processing', 'loading'].includes(uploadState.type),\n)\n</script>\n\n<template>\n <div\n class=\"uploadSection\"\n :class=\"{\n error: uploadState.type === 'error',\n done: uploadState.type === 'done',\n }\">\n <div\n v-if=\"isLoading\"\n class=\"flex items-center gap-1.5\">\n <ScalarLoading\n class=\"text-blue\"\n :loader=\"{\n ...loadingState,\n isLoading: true,\n }\"\n size=\"lg\" />\n <strong\n v-if=\"uploadState.type === 'loading'\"\n class=\"uploadText\">\n Loading OpenAPI document…\n </strong>\n <strong\n v-else-if=\"uploadState.type === 'processing'\"\n class=\"uploadText\">\n Processing OpenAPI document…\n </strong>\n <strong\n v-else\n class=\"uploadText\">\n Uploading OpenAPI document…\n </strong>\n </div>\n <strong\n v-if=\"uploadState.type === 'done'\"\n class=\"uploadText flex items-center gap-1.5\">\n <ScalarIconCheck class=\"icon text-green\" />\n Your OpenAPI document has been processed successfully.\n </strong>\n <strong\n v-if=\"uploadState.type === 'error'\"\n class=\"uploadText flex items-center gap-1.5\">\n <ScalarIconXCircle class=\"icon text-red\" />\n {{ uploadState.error }}\n </strong>\n </div>\n</template>\n\n<style scoped>\n.uploadSection {\n width: 100%;\n margin-bottom: -16px;\n padding: 8px 8px 24px 12px;\n position: relative;\n background: color-mix(\n in srgb,\n var(--scalar-color-blue),\n var(--scalar-background-1) 95%\n );\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: 16px 16px 0 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: absolute;\n top: 0;\n transform: translate3d(0, calc(-100% + 16px), 0);\n}\n\n.uploadSection.error {\n background: color-mix(\n in srgb,\n var(--scalar-color-red),\n var(--scalar-background-1) 95%\n );\n}\n\n.uploadSection.done {\n background: color-mix(\n in srgb,\n var(--scalar-color-green),\n var(--scalar-background-1) 95%\n );\n}\n\n.uploadText {\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-font-size-3);\n}\n\n.icon {\n height: 20px;\n width: 20px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWA,MAAM,eAAe,iBAAgB;EAErC,MAAM,YAAY,eAChB;GAAC;GAAa;GAAc;GAAU,CAAC,SAAS,QAAA,YAAY,KAAK,CACnE;;uBAIE,mBA4CM,OAAA,EA3CJ,OAAK,eAAA,CAAC,iBAAe;WACE,QAAA,YAAY,SAAI;UAA0B,QAAA,YAAY,SAAI;;IAKzE,UAAA,SAAA,WAAA,EADR,mBAyBM,OAzBN,YAyBM,CAtBJ,YAMc,MAAA,cAAA,EAAA;KALZ,OAAM;KACL,QAAM;SAAiB,MAAA,aAAY;;;KAIpC,MAAK;6BAEC,QAAA,YAAY,SAAI,aAAA,WAAA,EADxB,mBAIS,UAJT,YAEqB,8BAErB,IAEa,QAAA,YAAY,SAAI,gBAAA,WAAA,EAD7B,mBAIS,UAJT,YAEqB,iCAErB,KAAA,WAAA,EACA,mBAIS,UAJT,YAEqB,gCAErB,EAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;IAGM,QAAA,YAAY,SAAI,UAAA,WAAA,EADxB,mBAKS,UALT,YAKS,CAFP,YAA2C,MAAA,gBAAA,EAAA,EAA1B,OAAM,mBAAiB,CAAA,EAAA,OAAA,OAAA,OAAA,KAAA,gBAAG,4DAE7C,GAAA,EAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;IAEQ,QAAA,YAAY,SAAI,WAAA,WAAA,EADxB,mBAKS,UALT,YAKS,CAFP,YAA2C,MAAA,kBAAA,EAAA,EAAxB,OAAM,iBAAe,CAAA,EAAA,gBAAG,MAC3C,gBAAG,QAAA,YAAY,MAAK,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA"}
@@ -6,7 +6,7 @@ export declare const registryApiMetadata: import("@scalar/validation").ObjectSch
6
6
  title: import("@scalar/validation").StringSchema;
7
7
  namespace: import("@scalar/validation").StringSchema;
8
8
  currentVersion: import("@scalar/validation").StringSchema;
9
- logoUrl: import("@scalar/validation").UnionSchema<(import("@scalar/validation").StringSchema | import("@scalar/validation").NullableSchema)[]>;
9
+ logoUrl: import("@scalar/validation").UnionSchema<readonly [import("@scalar/validation").StringSchema, import("@scalar/validation").NullableSchema]>;
10
10
  slug: import("@scalar/validation").StringSchema;
11
11
  }>;
12
12
  export type ApiMetadata = Static<typeof registryApiMetadata> & {
package/dist/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "url": "git+https://github.com/scalar/scalar.git",
11
11
  "directory": "packages/agent-chat"
12
12
  },
13
- "version": "0.12.2",
13
+ "version": "0.12.4",
14
14
  "engines": {
15
15
  "node": ">=22"
16
16
  },
@@ -1,6 +1,6 @@
1
1
  import { Chat } from '@ai-sdk/vue';
2
- import { type ModalState } from '@scalar/components';
3
- import { type ApiReferenceConfigurationRaw } from '@scalar/types/api-reference';
2
+ import { type ModalState } from '@scalar/components/modal';
3
+ import type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference';
4
4
  import { type WorkspaceStore } from '@scalar/workspace-store/client';
5
5
  import type { WorkspaceEventBus } from '@scalar/workspace-store/events';
6
6
  import { type UIDataTypes, type UIMessage } from 'ai';
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}