@scalar/agent-chat 0.9.11 → 0.9.13

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 (232) hide show
  1. package/dist/App.vue.d.ts +6 -6
  2. package/dist/App.vue.js +7 -0
  3. package/dist/App.vue.js.map +1 -0
  4. package/dist/App.vue.script.js +41 -0
  5. package/dist/App.vue.script.js.map +1 -0
  6. package/dist/Chat.vue.js +7 -0
  7. package/dist/Chat.vue.js.map +1 -0
  8. package/dist/Chat.vue.script.js +48 -0
  9. package/dist/Chat.vue.script.js.map +1 -0
  10. package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
  11. package/dist/api.d.ts +8 -8
  12. package/dist/api.js +75 -0
  13. package/dist/api.js.map +1 -0
  14. package/dist/client-tools/execute-request.d.ts +7 -7
  15. package/dist/client-tools/execute-request.js +88 -0
  16. package/dist/client-tools/execute-request.js.map +1 -0
  17. package/dist/components/ActionsDropdown.vue.js +9 -0
  18. package/dist/components/ActionsDropdown.vue.js.map +1 -0
  19. package/dist/components/ActionsDropdown.vue.script.js +33 -0
  20. package/dist/components/ActionsDropdown.vue.script.js.map +1 -0
  21. package/dist/components/ApprovalSection.vue.js +9 -0
  22. package/dist/components/ApprovalSection.vue.js.map +1 -0
  23. package/dist/components/ApprovalSection.vue.script.js +26 -0
  24. package/dist/components/ApprovalSection.vue.script.js.map +1 -0
  25. package/dist/components/AuthenticationProvided.vue.js +13 -0
  26. package/dist/components/AuthenticationProvided.vue.js.map +1 -0
  27. package/dist/components/AuthenticationRequired.vue.js +13 -0
  28. package/dist/components/AuthenticationRequired.vue.js.map +1 -0
  29. package/dist/components/AutosendPaused.vue.js +13 -0
  30. package/dist/components/AutosendPaused.vue.js.map +1 -0
  31. package/dist/components/BuildingRequest.vue.js +19 -0
  32. package/dist/components/BuildingRequest.vue.js.map +1 -0
  33. package/dist/components/ContextItem.vue.js +9 -0
  34. package/dist/components/ContextItem.vue.js.map +1 -0
  35. package/dist/components/ContextItem.vue.script.js +13 -0
  36. package/dist/components/ContextItem.vue.script.js.map +1 -0
  37. package/dist/components/ErrorMessage.vue.d.ts +1 -1
  38. package/dist/components/ErrorMessage.vue.js +9 -0
  39. package/dist/components/ErrorMessage.vue.js.map +1 -0
  40. package/dist/components/ErrorMessage.vue.script.js +22 -0
  41. package/dist/components/ErrorMessage.vue.script.js.map +1 -0
  42. package/dist/components/FreeMessagesInfoSection.vue.js +9 -0
  43. package/dist/components/FreeMessagesInfoSection.vue.js.map +1 -0
  44. package/dist/components/FreeMessagesInfoSection.vue.script.js +43 -0
  45. package/dist/components/FreeMessagesInfoSection.vue.script.js.map +1 -0
  46. package/dist/components/LoadingMiniOpenAPIDoc.vue.js +13 -0
  47. package/dist/components/LoadingMiniOpenAPIDoc.vue.js.map +1 -0
  48. package/dist/components/LoadingOpenAPISpecsSummary.vue.js +13 -0
  49. package/dist/components/LoadingOpenAPISpecsSummary.vue.js.map +1 -0
  50. package/dist/components/Logo.vue.js +23 -0
  51. package/dist/components/Logo.vue.js.map +1 -0
  52. package/dist/components/PaymentSection.vue.js +9 -0
  53. package/dist/components/PaymentSection.vue.js.map +1 -0
  54. package/dist/components/PaymentSection.vue.script.js +22 -0
  55. package/dist/components/PaymentSection.vue.script.js.map +1 -0
  56. package/dist/components/RequestApproved.vue.js +13 -0
  57. package/dist/components/RequestApproved.vue.js.map +1 -0
  58. package/dist/components/RequestFailed.vue.js +19 -0
  59. package/dist/components/RequestFailed.vue.js.map +1 -0
  60. package/dist/components/RequestPreview.vue.d.ts +1 -1
  61. package/dist/components/RequestPreview.vue.js +9 -0
  62. package/dist/components/RequestPreview.vue.js.map +1 -0
  63. package/dist/components/RequestPreview.vue.script.js +96 -0
  64. package/dist/components/RequestPreview.vue.script.js.map +1 -0
  65. package/dist/components/RequestRejected.vue.js +19 -0
  66. package/dist/components/RequestRejected.vue.js.map +1 -0
  67. package/dist/components/RequestSuccess.vue.js +13 -0
  68. package/dist/components/RequestSuccess.vue.js.map +1 -0
  69. package/dist/components/ResponseBody/ResponseBody.vue.d.ts +1 -1
  70. package/dist/components/ResponseBody/ResponseBody.vue.js +7 -0
  71. package/dist/components/ResponseBody/ResponseBody.vue.js.map +1 -0
  72. package/dist/components/ResponseBody/ResponseBody.vue.script.js +43 -0
  73. package/dist/components/ResponseBody/ResponseBody.vue.script.js.map +1 -0
  74. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js +12 -0
  75. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js.map +1 -0
  76. package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts +1 -1
  77. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js +9 -0
  78. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js.map +1 -0
  79. package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js +59 -0
  80. package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js.map +1 -0
  81. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js +7 -0
  82. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js.map +1 -0
  83. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js +22 -0
  84. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js.map +1 -0
  85. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js +7 -0
  86. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js.map +1 -0
  87. package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js +23 -0
  88. package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js.map +1 -0
  89. package/dist/components/ResponseBody/helpers/media-types.js +223 -0
  90. package/dist/components/ResponseBody/helpers/media-types.js.map +1 -0
  91. package/dist/components/ResponseBody/helpers/process-response-body.js +33 -0
  92. package/dist/components/ResponseBody/helpers/process-response-body.js.map +1 -0
  93. package/dist/components/SearchPopover.vue.js +9 -0
  94. package/dist/components/SearchPopover.vue.js.map +1 -0
  95. package/dist/components/SearchPopover.vue.script.js +53 -0
  96. package/dist/components/SearchPopover.vue.script.js.map +1 -0
  97. package/dist/components/Selector.vue.js +7 -0
  98. package/dist/components/Selector.vue.js.map +1 -0
  99. package/dist/components/Selector.vue.script.js +62 -0
  100. package/dist/components/Selector.vue.script.js.map +1 -0
  101. package/dist/components/SendingRequest.vue.js +19 -0
  102. package/dist/components/SendingRequest.vue.js.map +1 -0
  103. package/dist/components/ServerSelector.vue.js +7 -0
  104. package/dist/components/ServerSelector.vue.js.map +1 -0
  105. package/dist/components/ServerSelector.vue.script.js +60 -0
  106. package/dist/components/ServerSelector.vue.script.js.map +1 -0
  107. package/dist/components/UploadSection.vue.d.ts +1 -1
  108. package/dist/components/UploadSection.vue.js +9 -0
  109. package/dist/components/UploadSection.vue.js.map +1 -0
  110. package/dist/components/UploadSection.vue.script.js +52 -0
  111. package/dist/components/UploadSection.vue.script.js.map +1 -0
  112. package/dist/consts/urls.js +12 -0
  113. package/dist/consts/urls.js.map +1 -0
  114. package/dist/entities/error/constants.js +6 -0
  115. package/dist/entities/error/constants.js.map +1 -0
  116. package/dist/entities/error/helpers.d.ts +1 -1
  117. package/dist/entities/error/helpers.js +11 -0
  118. package/dist/entities/error/helpers.js.map +1 -0
  119. package/dist/entities/index.d.ts +9 -9
  120. package/dist/entities/index.js +10 -2
  121. package/dist/entities/prompt/constants.js +6 -0
  122. package/dist/entities/prompt/constants.js.map +1 -0
  123. package/dist/entities/registry/document.js +14 -0
  124. package/dist/entities/registry/document.js.map +1 -0
  125. package/dist/entities/tools/ask-for-authentication.js +7 -0
  126. package/dist/entities/tools/ask-for-authentication.js.map +1 -0
  127. package/dist/entities/tools/constants.js +6 -0
  128. package/dist/entities/tools/constants.js.map +1 -0
  129. package/dist/entities/tools/execute-request.d.ts +1 -1
  130. package/dist/entities/tools/execute-request.js +13 -0
  131. package/dist/entities/tools/execute-request.js.map +1 -0
  132. package/dist/entities/tools/get-mini-openapi-spec.js +7 -0
  133. package/dist/entities/tools/get-mini-openapi-spec.js.map +1 -0
  134. package/dist/entities/tools/get-openapi-spec-summary.js +6 -0
  135. package/dist/entities/tools/get-openapi-spec-summary.js.map +1 -0
  136. package/dist/helpers.js +42 -0
  137. package/dist/helpers.js.map +1 -0
  138. package/dist/hooks/use-agent-key-documents.js +24 -0
  139. package/dist/hooks/use-agent-key-documents.js.map +1 -0
  140. package/dist/hooks/use-chat-approvals.d.ts +1 -1
  141. package/dist/hooks/use-chat-approvals.js +38 -0
  142. package/dist/hooks/use-chat-approvals.js.map +1 -0
  143. package/dist/hooks/use-chat-error.js +25 -0
  144. package/dist/hooks/use-chat-error.js.map +1 -0
  145. package/dist/hooks/use-chat-pending-client-tool-parts.js +14 -0
  146. package/dist/hooks/use-chat-pending-client-tool-parts.js.map +1 -0
  147. package/dist/hooks/use-chat-scroll.js +17 -0
  148. package/dist/hooks/use-chat-scroll.js.map +1 -0
  149. package/dist/hooks/use-curated-documents.js +14 -0
  150. package/dist/hooks/use-curated-documents.js.map +1 -0
  151. package/dist/hooks/use-search.d.ts +1 -1
  152. package/dist/hooks/use-search.js +23 -0
  153. package/dist/hooks/use-search.js.map +1 -0
  154. package/dist/hooks/use-signup-link.js +17 -0
  155. package/dist/hooks/use-signup-link.js.map +1 -0
  156. package/dist/hooks/use-term-and-conditions.js +20 -0
  157. package/dist/hooks/use-term-and-conditions.js.map +1 -0
  158. package/dist/hooks/use-upload-tmp-document.js +92 -0
  159. package/dist/hooks/use-upload-tmp-document.js.map +1 -0
  160. package/dist/index.d.ts +2 -2
  161. package/dist/index.js +2 -2065
  162. package/dist/package.json +2 -2
  163. package/dist/plugins/persistance.js +16 -0
  164. package/dist/plugins/persistance.js.map +1 -0
  165. package/dist/registry/add-documents-to-store.d.ts +5 -5
  166. package/dist/registry/add-documents-to-store.js +36 -0
  167. package/dist/registry/add-documents-to-store.js.map +1 -0
  168. package/dist/registry/create-document-name.js +8 -0
  169. package/dist/registry/create-document-name.js.map +1 -0
  170. package/dist/state/state.d.ts +7 -7
  171. package/dist/state/state.js +154 -0
  172. package/dist/state/state.js.map +1 -0
  173. package/dist/views/Catalog/Catalog.vue.js +10 -0
  174. package/dist/views/Catalog/Catalog.vue.js.map +1 -0
  175. package/dist/views/Catalog/Catalog.vue.script.js +50 -0
  176. package/dist/views/Catalog/Catalog.vue.script.js.map +1 -0
  177. package/dist/views/Chat/Chat.vue.js +9 -0
  178. package/dist/views/Chat/Chat.vue.js.map +1 -0
  179. package/dist/views/Chat/Chat.vue.script.js +55 -0
  180. package/dist/views/Chat/Chat.vue.script.js.map +1 -0
  181. package/dist/views/Chat/Messages/AskForAuthentication.vue.d.ts +2 -2
  182. package/dist/views/Chat/Messages/AskForAuthentication.vue.js +9 -0
  183. package/dist/views/Chat/Messages/AskForAuthentication.vue.js.map +1 -0
  184. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js +72 -0
  185. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js.map +1 -0
  186. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.d.ts +2 -2
  187. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +9 -0
  188. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js.map +1 -0
  189. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js +26 -0
  190. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js.map +1 -0
  191. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.d.ts +2 -2
  192. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js +9 -0
  193. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js.map +1 -0
  194. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.script.js +39 -0
  195. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.script.js.map +1 -0
  196. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.d.ts +2 -2
  197. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js +7 -0
  198. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js.map +1 -0
  199. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js +21 -0
  200. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js.map +1 -0
  201. package/dist/views/Chat/Messages/Text.vue.js +7 -0
  202. package/dist/views/Chat/Messages/Text.vue.js.map +1 -0
  203. package/dist/views/Chat/Messages/Text.vue.script.js +14 -0
  204. package/dist/views/Chat/Messages/Text.vue.script.js.map +1 -0
  205. package/dist/views/Layout.vue.js +9 -0
  206. package/dist/views/Layout.vue.js.map +1 -0
  207. package/dist/views/Layout.vue.script.js +25 -0
  208. package/dist/views/Layout.vue.script.js.map +1 -0
  209. package/dist/views/PromptForm.vue.js +9 -0
  210. package/dist/views/PromptForm.vue.js.map +1 -0
  211. package/dist/views/PromptForm.vue.script.js +202 -0
  212. package/dist/views/PromptForm.vue.script.js.map +1 -0
  213. package/dist/views/Settings/Auth.vue.js +7 -0
  214. package/dist/views/Settings/Auth.vue.js.map +1 -0
  215. package/dist/views/Settings/Auth.vue.script.js +63 -0
  216. package/dist/views/Settings/Auth.vue.script.js.map +1 -0
  217. package/dist/views/Settings/DocSettings.vue.js +9 -0
  218. package/dist/views/Settings/DocSettings.vue.js.map +1 -0
  219. package/dist/views/Settings/DocSettings.vue.script.js +48 -0
  220. package/dist/views/Settings/DocSettings.vue.script.js.map +1 -0
  221. package/dist/views/Settings/Settings.vue.js +10 -0
  222. package/dist/views/Settings/Settings.vue.js.map +1 -0
  223. package/dist/views/Settings/Settings.vue.script.js +59 -0
  224. package/dist/views/Settings/Settings.vue.script.js.map +1 -0
  225. package/dist/views/Start.vue.js +9 -0
  226. package/dist/views/Start.vue.js.map +1 -0
  227. package/dist/views/Start.vue.script.js +41 -0
  228. package/dist/views/Start.vue.script.js.map +1 -0
  229. package/package.json +9 -9
  230. package/dist/entities-NWeuOkBB.js +0 -28
  231. package/dist/entities-NWeuOkBB.js.map +0 -1
  232. package/dist/index.js.map +0 -1
package/dist/App.vue.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { type Ref } from 'vue';
2
- import { type RegistryDocument } from '@/state/state';
3
- import { type ChatMode } from '@/types';
2
+ import { type RegistryDocument } from './state/state.js';
3
+ import { type ChatMode } from './types';
4
4
  type __VLS_Props = {
5
5
  registryDocuments: RegistryDocument[];
6
6
  registryUrl: string;
@@ -16,7 +16,7 @@ type __VLS_Props = {
16
16
  };
17
17
  declare const state: {
18
18
  prompt: Ref<string>;
19
- chat: import("@ai-sdk/vue").Chat<import("ai").UIMessage<unknown, import("ai").UIDataTypes, import("@/state/state").Tools>>;
19
+ chat: import("@ai-sdk/vue").Chat<import("ai").UIMessage<unknown, import("ai").UIDataTypes, import("./state/state.js").Tools>>;
20
20
  workspaceStore: import("@scalar/workspace-store/client").WorkspaceStore;
21
21
  loading: import("vue").ComputedRef<boolean>;
22
22
  settingsModal: import("@scalar/components").ModalState;
@@ -28,7 +28,7 @@ declare const state: {
28
28
  dashboardUrl: string;
29
29
  baseUrl: string;
30
30
  isLoggedIn?: Ref<boolean>;
31
- registryDocuments: Ref<import("./entities").ApiMetadata[]>;
31
+ registryDocuments: Ref<import("./entities/index.js").ApiMetadata[]>;
32
32
  pendingDocuments: Record<string, boolean>;
33
33
  mode: ChatMode;
34
34
  terms: {
@@ -52,9 +52,9 @@ declare const state: {
52
52
  }) => void;
53
53
  getAccessToken?: () => string;
54
54
  getAgentKey?: () => string;
55
- api: import("./api").Api;
55
+ api: import("./api.js").Api;
56
56
  uploadedTmpDocumentUrl: Ref<string | undefined>;
57
- curatedDocuments: Ref<import("./entities").ApiMetadata[]>;
57
+ curatedDocuments: Ref<import("./entities/index.js").ApiMetadata[]>;
58
58
  getActiveDocumentJson?: () => string;
59
59
  hideAddApi?: boolean;
60
60
  };
@@ -0,0 +1,7 @@
1
+ import e from "./App.vue.script.js";
2
+ //#region src/App.vue
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
6
+
7
+ //# sourceMappingURL=App.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.vue.js","names":[],"sources":["../src/App.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { provide, type Ref } from 'vue'\n\nimport Chat from '@/Chat.vue'\nimport { createState, STATE_SYMBOL, type RegistryDocument } from '@/state/state'\nimport { type ChatMode } from '@/types'\n\nconst {\n dashboardUrl,\n registryDocuments,\n registryUrl,\n baseUrl,\n mode = 'full',\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n isLoggedIn,\n prefilledMessage,\n hideAddApi,\n} = defineProps<{\n registryDocuments: RegistryDocument[]\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n mode?: ChatMode\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n isLoggedIn?: Ref<boolean>\n prefilledMessage?: Ref<string>\n hideAddApi?: boolean\n}>()\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst state = createState({\n getActiveDocumentJson,\n initialRegistryDocuments: registryDocuments,\n prefilledMessageRef: prefilledMessage,\n registryUrl,\n baseUrl,\n mode,\n getAccessToken,\n getAgentKey,\n isLoggedIn,\n dashboardUrl,\n hideAddApi,\n})\n\nprovide(STATE_SYMBOL, state)\n\nexport type ChatExposed = {\n addDocumentAsync: typeof state.addDocumentAsync\n}\n\ndefineExpose<ChatExposed>({\n addDocumentAsync: state.addDocumentAsync,\n})\n</script>\n\n<template>\n <Chat @uploadApi=\"$emit('uploadApi')\" />\n</template>\n\n<style scoped></style>\n"],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import { STATE_SYMBOL as e, createState as t } from "./state/state.js";
2
+ import n from "./Chat.vue.js";
3
+ import { createBlock as r, defineComponent as i, openBlock as a, provide as o } from "vue";
4
+ //#region src/App.vue?vue&type=script&setup=true&lang.ts
5
+ var s = /* @__PURE__ */ i({
6
+ __name: "App",
7
+ props: {
8
+ registryDocuments: {},
9
+ registryUrl: {},
10
+ dashboardUrl: {},
11
+ baseUrl: {},
12
+ mode: { default: "full" },
13
+ getAccessToken: { type: Function },
14
+ getAgentKey: { type: Function },
15
+ getActiveDocumentJson: { type: Function },
16
+ isLoggedIn: {},
17
+ prefilledMessage: {},
18
+ hideAddApi: { type: Boolean }
19
+ },
20
+ emits: ["uploadApi"],
21
+ setup(i, { expose: s }) {
22
+ let c = t({
23
+ getActiveDocumentJson: i.getActiveDocumentJson,
24
+ initialRegistryDocuments: i.registryDocuments,
25
+ prefilledMessageRef: i.prefilledMessage,
26
+ registryUrl: i.registryUrl,
27
+ baseUrl: i.baseUrl,
28
+ mode: i.mode,
29
+ getAccessToken: i.getAccessToken,
30
+ getAgentKey: i.getAgentKey,
31
+ isLoggedIn: i.isLoggedIn,
32
+ dashboardUrl: i.dashboardUrl,
33
+ hideAddApi: i.hideAddApi
34
+ });
35
+ return o(e, c), s({ addDocumentAsync: c.addDocumentAsync }), (e, t) => (a(), r(n, { onUploadApi: t[0] ||= (t) => e.$emit("uploadApi") }));
36
+ }
37
+ });
38
+ //#endregion
39
+ export { s as default };
40
+
41
+ //# sourceMappingURL=App.vue.script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.vue.script.js","names":["$emit"],"sources":["../src/App.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { provide, type Ref } from 'vue'\n\nimport Chat from '@/Chat.vue'\nimport { createState, STATE_SYMBOL, type RegistryDocument } from '@/state/state'\nimport { type ChatMode } from '@/types'\n\nconst {\n dashboardUrl,\n registryDocuments,\n registryUrl,\n baseUrl,\n mode = 'full',\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n isLoggedIn,\n prefilledMessage,\n hideAddApi,\n} = defineProps<{\n registryDocuments: RegistryDocument[]\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n mode?: ChatMode\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n isLoggedIn?: Ref<boolean>\n prefilledMessage?: Ref<string>\n hideAddApi?: boolean\n}>()\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst state = createState({\n getActiveDocumentJson,\n initialRegistryDocuments: registryDocuments,\n prefilledMessageRef: prefilledMessage,\n registryUrl,\n baseUrl,\n mode,\n getAccessToken,\n getAgentKey,\n isLoggedIn,\n dashboardUrl,\n hideAddApi,\n})\n\nprovide(STATE_SYMBOL, state)\n\nexport type ChatExposed = {\n addDocumentAsync: typeof state.addDocumentAsync\n}\n\ndefineExpose<ChatExposed>({\n addDocumentAsync: state.addDocumentAsync,\n})\n</script>\n\n<template>\n <Chat @uploadApi=\"$emit('uploadApi')\" />\n</template>\n\n<style scoped></style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAqCA,IAAM,IAAQ,EAAY;GACxB,uBAAoB,EAAA;GACpB,0BAA0B,EAAA;GAC1B,qBAAqB,EAAA;GACrB,aAAU,EAAA;GACV,SAAM,EAAA;GACN,MAAG,EAAA;GACH,gBAAa,EAAA;GACb,aAAU,EAAA;GACV,YAAS,EAAA;GACT,cAAW,EAAA;GACX,YAAS,EAAA;GACV,CAAA;SAED,EAAQ,GAAc,EAAK,EAM3B,EAA0B,EACxB,kBAAkB,EAAM,kBACzB,CAAA,kBAIC,EAAwC,GAAA,EAAjC,aAAS,AAAA,EAAA,QAAA,MAAEA,EAAAA,MAAK,YAAA,EAAA,CAAA"}
@@ -0,0 +1,7 @@
1
+ import e from "./Chat.vue.script.js";
2
+ //#region src/Chat.vue
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
6
+
7
+ //# sourceMappingURL=Chat.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.vue.js","names":[],"sources":["../src/Chat.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n createApiClientModal,\n type ApiClientModal,\n} from '@scalar/api-client/v2/features/modal'\nimport { onBeforeUnmount, onMounted, ref, useTemplateRef } from 'vue'\n\nimport { useAgentKeyDocuments } from '@/hooks/use-agent-key-documents'\nimport { useChatScroll } from '@/hooks/use-chat-scroll'\nimport { useCuratedDocuments } from '@/hooks/use-curated-documents'\nimport { getTmpDocFromLocalStorage } from '@/hooks/use-upload-tmp-document'\nimport { useState } from '@/state/state'\nimport Layout from '@/views/Layout.vue'\nimport Settings from '@/views/Settings/Settings.vue'\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst {\n chat,\n prompt,\n settingsModal,\n eventBus,\n workspaceStore,\n config,\n mode,\n addDocument,\n} = useState()\n\nconst clientModalRef = useTemplateRef<HTMLElement>('clientModal')\nconst apiClient = ref<ApiClientModal | null>(null)\n\nonMounted(async () => {\n const tmpDoc = getTmpDocFromLocalStorage()\n\n if (mode === 'preview' && tmpDoc) {\n await addDocument({\n namespace: tmpDoc.namespace,\n slug: tmpDoc.slug,\n removable: false,\n tmp: true,\n })\n }\n\n if (!clientModalRef.value) {\n return\n }\n\n apiClient.value = createApiClientModal({\n el: clientModalRef.value,\n options: config,\n eventBus,\n workspaceStore,\n })\n})\n\nonBeforeUnmount(() => {\n apiClient.value?.app.unmount()\n})\n\nuseChatScroll()\nuseAgentKeyDocuments()\nuseCuratedDocuments()\n\nasync function handleSubmit() {\n await chat.sendMessage({ text: prompt.value })\n}\n</script>\n\n<template>\n <div ref=\"clientModal\" />\n <Layout\n @submit=\"handleSubmit\"\n @uploadApi=\"$emit('uploadApi')\" />\n <Settings :modalState=\"settingsModal\" />\n</template>\n"],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { getTmpDocFromLocalStorage as e } from "./hooks/use-upload-tmp-document.js";
2
+ import { useState as t } from "./state/state.js";
3
+ import { useAgentKeyDocuments as n } from "./hooks/use-agent-key-documents.js";
4
+ import { useChatScroll as r } from "./hooks/use-chat-scroll.js";
5
+ import { useCuratedDocuments as i } from "./hooks/use-curated-documents.js";
6
+ import a from "./views/Layout.vue.js";
7
+ import o from "./views/Settings/Settings.vue.js";
8
+ import { Fragment as s, createElementBlock as c, createElementVNode as l, createVNode as u, defineComponent as d, onBeforeUnmount as f, onMounted as p, openBlock as m, ref as h, unref as g, useTemplateRef as _ } from "vue";
9
+ import { createApiClientModal as v } from "@scalar/api-client/v2/features/modal";
10
+ //#region src/Chat.vue?vue&type=script&setup=true&lang.ts
11
+ var y = { ref: "clientModal" }, b = /* @__PURE__ */ d({
12
+ __name: "Chat",
13
+ emits: ["uploadApi"],
14
+ setup(d) {
15
+ let { chat: b, prompt: x, settingsModal: S, eventBus: C, workspaceStore: w, config: T, mode: E, addDocument: D } = t(), O = _("clientModal"), k = h(null);
16
+ p(async () => {
17
+ let t = e();
18
+ E === "preview" && t && await D({
19
+ namespace: t.namespace,
20
+ slug: t.slug,
21
+ removable: !1,
22
+ tmp: !0
23
+ }), O.value && (k.value = v({
24
+ el: O.value,
25
+ options: T,
26
+ eventBus: C,
27
+ workspaceStore: w
28
+ }));
29
+ }), f(() => {
30
+ k.value?.app.unmount();
31
+ }), r(), n(), i();
32
+ async function A() {
33
+ await b.sendMessage({ text: x.value });
34
+ }
35
+ return (e, t) => (m(), c(s, null, [
36
+ l("div", y, null, 512),
37
+ u(a, {
38
+ onSubmit: A,
39
+ onUploadApi: t[0] ||= (t) => e.$emit("uploadApi")
40
+ }),
41
+ u(o, { modalState: g(S) }, null, 8, ["modalState"])
42
+ ], 64));
43
+ }
44
+ });
45
+ //#endregion
46
+ export { b as default };
47
+
48
+ //# sourceMappingURL=Chat.vue.script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.vue.script.js","names":["$emit"],"sources":["../src/Chat.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n createApiClientModal,\n type ApiClientModal,\n} from '@scalar/api-client/v2/features/modal'\nimport { onBeforeUnmount, onMounted, ref, useTemplateRef } from 'vue'\n\nimport { useAgentKeyDocuments } from '@/hooks/use-agent-key-documents'\nimport { useChatScroll } from '@/hooks/use-chat-scroll'\nimport { useCuratedDocuments } from '@/hooks/use-curated-documents'\nimport { getTmpDocFromLocalStorage } from '@/hooks/use-upload-tmp-document'\nimport { useState } from '@/state/state'\nimport Layout from '@/views/Layout.vue'\nimport Settings from '@/views/Settings/Settings.vue'\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst {\n chat,\n prompt,\n settingsModal,\n eventBus,\n workspaceStore,\n config,\n mode,\n addDocument,\n} = useState()\n\nconst clientModalRef = useTemplateRef<HTMLElement>('clientModal')\nconst apiClient = ref<ApiClientModal | null>(null)\n\nonMounted(async () => {\n const tmpDoc = getTmpDocFromLocalStorage()\n\n if (mode === 'preview' && tmpDoc) {\n await addDocument({\n namespace: tmpDoc.namespace,\n slug: tmpDoc.slug,\n removable: false,\n tmp: true,\n })\n }\n\n if (!clientModalRef.value) {\n return\n }\n\n apiClient.value = createApiClientModal({\n el: clientModalRef.value,\n options: config,\n eventBus,\n workspaceStore,\n })\n})\n\nonBeforeUnmount(() => {\n apiClient.value?.app.unmount()\n})\n\nuseChatScroll()\nuseAgentKeyDocuments()\nuseCuratedDocuments()\n\nasync function handleSubmit() {\n await chat.sendMessage({ text: prompt.value })\n}\n</script>\n\n<template>\n <div ref=\"clientModal\" />\n <Layout\n @submit=\"handleSubmit\"\n @uploadApi=\"$emit('uploadApi')\" />\n <Settings :modalState=\"settingsModal\" />\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAmBA,IAAM,EACJ,SACA,WACA,kBACA,aACA,mBACA,WACA,SACA,mBACE,GAAS,EAEP,IAAiB,EAA4B,cAAa,EAC1D,IAAY,EAA2B,KAAI;AAgCjD,EA9BA,EAAU,YAAY;GACpB,IAAM,IAAS,GAA0B;AAEzC,GAAI,MAAS,aAAa,KACxB,MAAM,EAAY;IAChB,WAAW,EAAO;IAClB,MAAM,EAAO;IACb,WAAW;IACX,KAAK;IACN,CAAA,EAGE,EAAe,UAIpB,EAAU,QAAQ,EAAqB;IACrC,IAAI,EAAe;IACnB,SAAS;IACT;IACA;IACD,CAAA;IACF,EAED,QAAsB;AACpB,KAAU,OAAO,IAAI,SAAQ;IAC9B,EAED,GAAc,EACd,GAAqB,EACrB,GAAoB;EAEpB,eAAe,IAAe;AAC5B,SAAM,EAAK,YAAY,EAAE,MAAM,EAAO,OAAO,CAAA;;;GAK7C,EAAyB,OAAzB,GAAyB,MAAA,IAAA;GACzB,EAEoC,GAAA;IADjC,UAAQ;IACR,aAAS,AAAA,EAAA,QAAA,MAAEA,EAAAA,MAAK,YAAA;;GACnB,EAAwC,GAAA,EAA7B,YAAY,EAAA,EAAa,EAAA,EAAA,MAAA,GAAA,CAAA,aAAA,CAAA"}
@@ -0,0 +1,8 @@
1
+ //#region \0plugin-vue:export-helper
2
+ var e = (e, t) => {
3
+ let n = e.__vccOpts || e;
4
+ for (let [e, r] of t) n[e] = r;
5
+ return n;
6
+ };
7
+ //#endregion
8
+ export { e as default };
package/dist/api.d.ts CHANGED
@@ -15,10 +15,10 @@ export declare function createApi({ baseUrl, proxyUrl, getAccessToken, getAgentK
15
15
  }): {
16
16
  search: (query: string) => Promise<{
17
17
  success: false;
18
- error: import("./entities").AgentChatError<"FAILED_TO_FETCH", unknown>;
18
+ error: import("./entities/index.js").AgentChatError<"FAILED_TO_FETCH", unknown>;
19
19
  } | import("neverpanic").Result<never, null> | {
20
20
  success: false;
21
- error: import("./entities").AgentChatError<string, string>;
21
+ error: import("./entities/index.js").AgentChatError<string, string>;
22
22
  data?: undefined;
23
23
  } | {
24
24
  success: true;
@@ -39,10 +39,10 @@ export declare function createApi({ baseUrl, proxyUrl, getAccessToken, getAgentK
39
39
  slug: string;
40
40
  }) => Promise<{
41
41
  success: false;
42
- error: import("./entities").AgentChatError<"FAILED_TO_FETCH", unknown>;
42
+ error: import("./entities/index.js").AgentChatError<"FAILED_TO_FETCH", unknown>;
43
43
  } | import("neverpanic").Result<never, null> | {
44
44
  success: false;
45
- error: import("./entities").AgentChatError<string, string>;
45
+ error: import("./entities/index.js").AgentChatError<string, string>;
46
46
  data?: undefined;
47
47
  } | {
48
48
  success: true;
@@ -58,10 +58,10 @@ export declare function createApi({ baseUrl, proxyUrl, getAccessToken, getAgentK
58
58
  }>;
59
59
  getKeyDocuments: () => Promise<{
60
60
  success: false;
61
- error: import("./entities").AgentChatError<"FAILED_TO_FETCH", unknown>;
61
+ error: import("./entities/index.js").AgentChatError<"FAILED_TO_FETCH", unknown>;
62
62
  } | import("neverpanic").Result<never, null> | {
63
63
  success: false;
64
- error: import("./entities").AgentChatError<string, string>;
64
+ error: import("./entities/index.js").AgentChatError<string, string>;
65
65
  data?: undefined;
66
66
  } | {
67
67
  success: true;
@@ -79,10 +79,10 @@ export declare function createApi({ baseUrl, proxyUrl, getAccessToken, getAgentK
79
79
  }>;
80
80
  getCuratedDocuments: () => Promise<{
81
81
  success: false;
82
- error: import("./entities").AgentChatError<"FAILED_TO_FETCH", unknown>;
82
+ error: import("./entities/index.js").AgentChatError<"FAILED_TO_FETCH", unknown>;
83
83
  } | import("neverpanic").Result<never, null> | {
84
84
  success: false;
85
- error: import("./entities").AgentChatError<string, string>;
85
+ error: import("./entities/index.js").AgentChatError<string, string>;
86
86
  data?: undefined;
87
87
  } | {
88
88
  success: true;
package/dist/api.js ADDED
@@ -0,0 +1,75 @@
1
+ import { createError as e } from "./entities/error/helpers.js";
2
+ import { registryApiMetadata as t } from "./entities/registry/document.js";
3
+ import { redirectToProxy as n } from "@scalar/helpers/url/redirect-to-proxy";
4
+ import { n as r } from "neverpanic";
5
+ import i from "zod";
6
+ //#region src/api.ts
7
+ function a({ getAccessToken: e, getAgentKey: t }) {
8
+ let n = e?.(), r = t?.();
9
+ return {
10
+ ...n && { Authorization: `Bearer ${n}` },
11
+ ...r && { "x-scalar-agent-key": r }
12
+ };
13
+ }
14
+ function o({ baseUrl: o, proxyUrl: s, getAccessToken: c, getAgentKey: l }) {
15
+ let u = r.safeFn(async ({ path: t, method: u = "get", query: d, body: f, responseSchema: p }) => {
16
+ let m = `${o}${t}${d ? `?${new URLSearchParams(d)}` : ""}`, h = await r.fromUnsafe(async () => fetch(n(s.value, m), {
17
+ method: u,
18
+ ...f && { body: JSON.stringify(f) },
19
+ headers: { ...a({
20
+ getAccessToken: c,
21
+ getAgentKey: l
22
+ }) }
23
+ }), (t) => e("FAILED_TO_FETCH", t));
24
+ if (!h.success) return h;
25
+ let g = await r.fromUnsafe(async () => h.data.json(), (t) => e("FAILED_TO_FETCH_DATA", t));
26
+ if (!g.success) return {
27
+ success: !1,
28
+ error: e("UNKNOWN_ERROR", "Unknown error occurred. Please contact support.")
29
+ };
30
+ if (!h.data.ok) {
31
+ let t = i.object({
32
+ message: i.string(),
33
+ code: i.string()
34
+ }).safeParse(g.data);
35
+ return t.success ? {
36
+ success: !1,
37
+ error: e(t.data.code, t.data.message)
38
+ } : {
39
+ success: !1,
40
+ error: e("UNKNOWN_ERROR", "Unknown error occurred. Please contact support.")
41
+ };
42
+ }
43
+ let _ = p.safeParse(g.data);
44
+ return _.success ? {
45
+ success: !0,
46
+ data: _.data
47
+ } : {
48
+ success: !1,
49
+ error: e("INVALID_RESPONSE", "Invalid response. Please contact support")
50
+ };
51
+ });
52
+ return {
53
+ search: async (e) => u({
54
+ path: "/vector/registry/search",
55
+ query: { query: e },
56
+ responseSchema: i.object({ results: t.array() })
57
+ }),
58
+ getDocument: async (e) => u({
59
+ path: `/vector/registry/document/${e.namespace}/${e.slug}`,
60
+ responseSchema: t
61
+ }),
62
+ getKeyDocuments: async () => u({
63
+ path: "/vector/registry/documents",
64
+ responseSchema: i.object({ documents: t.array() })
65
+ }),
66
+ getCuratedDocuments: async () => u({
67
+ path: "/vector/registry/curated",
68
+ responseSchema: i.object({ results: t.array() })
69
+ })
70
+ };
71
+ }
72
+ //#endregion
73
+ export { o as createApi, a as createAuthorizationHeaders };
74
+
75
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","names":[],"sources":["../src/api.ts"],"sourcesContent":["import { redirectToProxy } from '@scalar/helpers/url/redirect-to-proxy'\nimport { n } from 'neverpanic'\nimport type { Ref } from 'vue'\nimport z from 'zod'\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 proxyUrl,\n getAccessToken,\n getAgentKey,\n}: {\n baseUrl: string\n proxyUrl: Ref<string>\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const request = n.safeFn(\n async <T extends z.ZodType>({\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(redirectToProxy(proxyUrl.value, 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 const serviceError = z.object({ message: z.string(), code: z.string() }).safeParse(fetchDataResult.data)\n\n if (!serviceError.success) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n return {\n success: false,\n error: createError(serviceError.data.code, serviceError.data.message),\n }\n }\n\n const serviceData = responseSchema.safeParse(fetchDataResult.data)\n\n if (!serviceData.success) {\n return {\n success: false,\n error: createError('INVALID_RESPONSE', 'Invalid response. Please contact support'),\n }\n }\n\n return { success: true, data: serviceData.data }\n },\n )\n\n const search = async (query: string) =>\n request({\n path: '/vector/registry/search',\n query: { query },\n responseSchema: z.object({\n results: registryApiMetadata.array(),\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: z.object({ documents: registryApiMetadata.array() }),\n })\n\n const getCuratedDocuments = async () =>\n request({\n path: '/vector/registry/curated',\n responseSchema: z.object({\n results: registryApiMetadata.array(),\n }),\n })\n\n return {\n search,\n getDocument,\n getKeyDocuments,\n getCuratedDocuments,\n }\n}\n\nexport type Api = ReturnType<typeof createApi>\n"],"mappings":";;;;;;AAQA,SAAgB,EAA2B,EACzC,mBACA,kBAIC;CACD,IAAM,IAAQ,KAAkB,EAC1B,IAAW,KAAe;AAEhC,QAAO;EACL,GAAI,KAAS,EACX,eAAe,UAAU,KAC1B;EACD,GAAI,KAAY,EACd,sBAAsB,GACvB;EACF;;AAIH,SAAgB,EAAU,EACxB,YACA,aACA,mBACA,kBAMC;CACD,IAAM,IAAU,EAAE,OAChB,OAA4B,EAC1B,SACA,YAAS,OACT,UACA,SACA,wBAOI;EACJ,IAAM,IAAM,GAAG,IAAU,IAAO,IAAQ,IAAI,IAAI,gBAAgB,EAAM,KAAK,MAErE,IAAc,MAAM,EAAE,WAC1B,YACE,MAAM,EAAgB,EAAS,OAAO,EAAI,EAAE;GAC1C;GACA,GAAI,KAAQ,EAAE,MAAM,KAAK,UAAU,EAAK,EAAE;GAC1C,SAAS,EACP,GAAG,EAA2B;IAAE;IAAgB;IAAa,CAAC,EAC/D;GACF,CAAC,GACH,MAAkB,EAAY,mBAAmB,EAAc,CACjE;AAED,MAAI,CAAC,EAAY,QACf,QAAO;EAGT,IAAM,IAAkB,MAAM,EAAE,WAC9B,YAAY,EAAY,KAAK,MAAM,GAClC,MAAkB,EAAY,wBAAwB,EAAc,CACtE;AAED,MAAI,CAAC,EAAgB,QACnB,QAAO;GACL,SAAS;GACT,OAAO,EAAY,iBAAiB,kDAAkD;GACvF;AAGH,MAAI,CAAC,EAAY,KAAK,IAAI;GACxB,IAAM,IAAe,EAAE,OAAO;IAAE,SAAS,EAAE,QAAQ;IAAE,MAAM,EAAE,QAAQ;IAAE,CAAC,CAAC,UAAU,EAAgB,KAAK;AASxG,UAPK,EAAa,UAOX;IACL,SAAS;IACT,OAAO,EAAY,EAAa,KAAK,MAAM,EAAa,KAAK,QAAQ;IACtE,GATQ;IACL,SAAS;IACT,OAAO,EAAY,iBAAiB,kDAAkD;IACvF;;EASL,IAAM,IAAc,EAAe,UAAU,EAAgB,KAAK;AASlE,SAPK,EAAY,UAOV;GAAE,SAAS;GAAM,MAAM,EAAY;GAAM,GANvC;GACL,SAAS;GACT,OAAO,EAAY,oBAAoB,2CAA2C;GACnF;GAKN;AA+BD,QAAO;EACL,QA9Ba,OAAO,MACpB,EAAQ;GACN,MAAM;GACN,OAAO,EAAE,UAAO;GAChB,gBAAgB,EAAE,OAAO,EACvB,SAAS,EAAoB,OAAO,EACrC,CAAC;GACH,CAAC;EAwBF,aAtBkB,OAAO,MACzB,EAAQ;GACN,MAAM,6BAA6B,EAAO,UAAU,GAAG,EAAO;GAC9D,gBAAgB;GACjB,CAAC;EAmBF,iBAjBsB,YACtB,EAAQ;GACN,MAAM;GACN,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAoB,OAAO,EAAE,CAAC;GACrE,CAAC;EAcF,qBAZ0B,YAC1B,EAAQ;GACN,MAAM;GACN,gBAAgB,EAAE,OAAO,EACvB,SAAS,EAAoB,OAAO,EACrC,CAAC;GACH,CAAC;EAOH"}
@@ -2,7 +2,7 @@ import type { Chat } from '@ai-sdk/vue';
2
2
  import type { SecuritySchemeObjectSecret } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block';
3
3
  import type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
4
4
  import type { UIDataTypes, UIMessage } from 'ai';
5
- import type { Tools } from '@/state/state';
5
+ import type { Tools } from '../state/state.js';
6
6
  /**
7
7
  * Executes an HTTP request with the specified options, including method, path, headers, and security schemes, and returns the processed response.
8
8
  */
@@ -26,12 +26,12 @@ export declare const executeRequestTool: (args_0: {
26
26
  data: never;
27
27
  } | {
28
28
  success: false;
29
- error: import("@/entities").AgentChatError<"FAILED_TO_PARSE_RESPONSE_BODY", {
29
+ error: import("../entities/index.js").AgentChatError<"FAILED_TO_PARSE_RESPONSE_BODY", {
30
30
  originalError: unknown;
31
31
  }>;
32
32
  } | {
33
33
  success: false;
34
- error: import("@/entities").AgentChatError<"REQUEST_NOT_OK", {
34
+ error: import("../entities/index.js").AgentChatError<"REQUEST_NOT_OK", {
35
35
  status: number;
36
36
  url: string;
37
37
  responseBody: any;
@@ -52,22 +52,22 @@ export declare const executeRequestTool: (args_0: {
52
52
  error?: undefined;
53
53
  } | {
54
54
  success: false;
55
- error: import("@/entities").AgentChatError<"FAILED_TO_FETCH", {
55
+ error: import("../entities/index.js").AgentChatError<"FAILED_TO_FETCH", {
56
56
  originalError: unknown;
57
57
  }>;
58
58
  } | {
59
59
  success: false;
60
- error: import("@/entities").AgentChatError<"FAILED_TO_DETERMINE_DOCUMENT", {
60
+ error: import("../entities/index.js").AgentChatError<"FAILED_TO_DETERMINE_DOCUMENT", {
61
61
  namespace: string | undefined;
62
62
  slug: string | undefined;
63
63
  documentIdentifier: string;
64
64
  }>;
65
65
  } | {
66
66
  success: false;
67
- error: import("@/entities").AgentChatError<"DOCUMENT_SETTINGS_COULD_NOT_BE_DETERMINED", {
67
+ error: import("../entities/index.js").AgentChatError<"DOCUMENT_SETTINGS_COULD_NOT_BE_DETERMINED", {
68
68
  documentName: string;
69
69
  namespace: string;
70
70
  slug: string;
71
71
  }>;
72
- }> | import("neverpanic").Result<never, import("@/entities").AgentChatError<"FAILED_TO_EXECUTE_REQUEST", unknown>>;
72
+ }> | import("neverpanic").Result<never, import("../entities/index.js").AgentChatError<"FAILED_TO_EXECUTE_REQUEST", unknown>>;
73
73
  //# sourceMappingURL=execute-request.d.ts.map
@@ -0,0 +1,88 @@
1
+ import { createError as e } from "../entities/error/helpers.js";
2
+ import "../entities/tools/constants.js";
3
+ import { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME as t } from "../entities/tools/execute-request.js";
4
+ import { createDocumentName as n } from "../registry/create-document-name.js";
5
+ import { redirectToProxy as r } from "@scalar/helpers/url/redirect-to-proxy";
6
+ import { n as i } from "neverpanic";
7
+ import { buildRequestSecurity as a, getResolvedUrl as o } from "@scalar/api-client/v2/blocks/operation-block";
8
+ import s from "truncate-json";
9
+ //#region src/client-tools/execute-request.ts
10
+ var c = 5e4, l = i.safeFn(async (e) => e.headers.get("content-type") === "application/json" ? {
11
+ success: !0,
12
+ data: await e.json()
13
+ } : {
14
+ success: !0,
15
+ data: await e.text()
16
+ }, (t) => e("FAILED_TO_PARSE_RESPONSE_BODY", { originalError: t })), u = (e) => JSON.parse(s(JSON.stringify(e), c).jsonString), d = i.safeFn(async (t, n) => {
17
+ let r = await fetch(t, n), i = await l(r);
18
+ return r.ok ? i.success ? {
19
+ success: !0,
20
+ data: {
21
+ status: r.status,
22
+ responseBody: u(i.data),
23
+ headers: Object.fromEntries(r.headers.entries())
24
+ }
25
+ } : i : {
26
+ success: !1,
27
+ error: e("REQUEST_NOT_OK", {
28
+ status: r.status,
29
+ url: r.url,
30
+ responseBody: u(i.success ? i.data : void 0),
31
+ headers: Object.fromEntries(r.headers.entries())
32
+ })
33
+ };
34
+ }, (t) => e("FAILED_TO_FETCH", { originalError: t }));
35
+ function f({ path: e, activeServer: t, proxyUrl: n }) {
36
+ return r(n, o({
37
+ path: e,
38
+ server: t,
39
+ pathVariables: {},
40
+ environment: {
41
+ color: "",
42
+ variables: []
43
+ }
44
+ }));
45
+ }
46
+ var p = i.safeFn(async ({ documentSettings: r, toolCallId: i, chat: o, proxyUrl: s, input: { method: c, path: l, body: u, headers: p, documentIdentifier: m } }) => {
47
+ let [h, g] = m.split("---");
48
+ if (!h || !g) return {
49
+ success: !1,
50
+ error: e("FAILED_TO_DETERMINE_DOCUMENT", {
51
+ namespace: h,
52
+ slug: g,
53
+ documentIdentifier: m
54
+ })
55
+ };
56
+ let _ = n(h, g), v = r[_];
57
+ if (!v) return {
58
+ success: !1,
59
+ error: e("DOCUMENT_SETTINGS_COULD_NOT_BE_DETERMINED", {
60
+ documentName: _,
61
+ namespace: h,
62
+ slug: g
63
+ })
64
+ };
65
+ let y = a(v.securitySchemes), b = {
66
+ method: c,
67
+ body: u,
68
+ ...y,
69
+ headers: {
70
+ ...p,
71
+ ...y.headers
72
+ }
73
+ }, x = await d(f({
74
+ path: l,
75
+ activeServer: v.activeServer,
76
+ proxyUrl: s
77
+ }), b);
78
+ return o.addToolOutput({
79
+ tool: t,
80
+ toolCallId: i,
81
+ output: x,
82
+ state: "output-available"
83
+ }), x;
84
+ }, (t) => e("FAILED_TO_EXECUTE_REQUEST", t));
85
+ //#endregion
86
+ export { p as executeRequestTool };
87
+
88
+ //# sourceMappingURL=execute-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-request.js","names":[],"sources":["../../src/client-tools/execute-request.ts"],"sourcesContent":["import type { Chat } from '@ai-sdk/vue'\nimport { buildRequestSecurity, getResolvedUrl } from '@scalar/api-client/v2/blocks/operation-block'\nimport type { SecuritySchemeObjectSecret } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport { redirectToProxy } from '@scalar/helpers/url/redirect-to-proxy'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport type { UIDataTypes, UIMessage } from 'ai'\nimport { n } from 'neverpanic'\nimport truncateJson from 'truncate-json'\n\nimport { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME, TOOL_NAMESPACE_SLUG_DELIMITER } from '@/entities'\nimport { createError } from '@/entities/error/helpers'\nimport { createDocumentName } from '@/registry/create-document-name'\nimport type { Tools } from '@/state/state'\n\n// The maximum number of bytes the requests response can be.\nconst MAX_RESPONSE_SIZE = 50_000\n\nconst getBody = n.safeFn(\n async (response: Response) => {\n const contentType = response.headers.get('content-type')\n\n if (contentType === 'application/json') {\n return { success: true, data: await response.json() }\n }\n\n return { success: true, data: await response.text() }\n },\n (originalError) => createError('FAILED_TO_PARSE_RESPONSE_BODY', { originalError }),\n)\n\nconst truncateResponse = (response: unknown) =>\n JSON.parse(truncateJson(JSON.stringify(response), MAX_RESPONSE_SIZE).jsonString)\n\n/* Result type wrapper for fetch */\nconst safeFetch = n.safeFn(\n async (url: string, init: RequestInit) => {\n const response = await fetch(url, init)\n\n const responseBodyResult = await getBody(response)\n\n if (!response.ok) {\n return {\n success: false,\n error: createError('REQUEST_NOT_OK', {\n status: response.status,\n url: response.url,\n responseBody: truncateResponse(responseBodyResult.success ? responseBodyResult.data : undefined),\n headers: Object.fromEntries(response.headers.entries()),\n }),\n }\n }\n\n if (!responseBodyResult.success) {\n return responseBodyResult\n }\n\n return {\n success: true,\n data: {\n status: response.status,\n responseBody: truncateResponse(responseBodyResult.data),\n headers: Object.fromEntries(response.headers.entries()),\n },\n }\n },\n (originalError) => createError('FAILED_TO_FETCH', { originalError }),\n)\n\nfunction createUrl({\n path,\n activeServer,\n proxyUrl,\n}: {\n path: string\n activeServer: ServerObject | null\n proxyUrl: string\n}) {\n const resolvedUrl = getResolvedUrl({\n path,\n server: activeServer,\n pathVariables: {},\n environment: {\n color: '',\n variables: [],\n },\n })\n\n return redirectToProxy(proxyUrl, resolvedUrl)\n}\n\n/**\n * Executes an HTTP request with the specified options, including method, path, headers, and security schemes, and returns the processed response.\n */\nexport const executeRequestTool = n.safeFn(\n async ({\n documentSettings,\n toolCallId,\n chat,\n proxyUrl,\n input: { method, path, body, headers, documentIdentifier },\n }: {\n documentSettings: Record<\n string,\n { activeServer: ServerObject | null; securitySchemes: SecuritySchemeObjectSecret[] }\n >\n toolCallId: string\n chat: Chat<UIMessage<unknown, UIDataTypes, Tools>>\n proxyUrl: string\n input: {\n method: string\n path: string\n headers?: Record<string, string>\n body?: string\n documentIdentifier: string\n }\n }) => {\n const [namespace, slug] = documentIdentifier.split(TOOL_NAMESPACE_SLUG_DELIMITER)\n if (!namespace || !slug) {\n return {\n success: false,\n error: createError('FAILED_TO_DETERMINE_DOCUMENT', { namespace, slug, documentIdentifier }),\n }\n }\n\n const documentName = createDocumentName(namespace, slug)\n const settings = documentSettings[documentName]\n\n if (!settings) {\n return {\n success: false,\n error: createError('DOCUMENT_SETTINGS_COULD_NOT_BE_DETERMINED', {\n documentName,\n namespace,\n slug,\n }),\n }\n }\n\n const requestSecurityOptions = buildRequestSecurity(settings.securitySchemes)\n\n const fetchOptions = {\n method,\n body,\n ...requestSecurityOptions,\n headers: {\n ...headers,\n ...requestSecurityOptions.headers,\n },\n }\n\n const url = createUrl({\n path,\n activeServer: settings.activeServer,\n proxyUrl,\n })\n\n const result = await safeFetch(url, fetchOptions)\n\n chat.addToolOutput({\n tool: EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME,\n toolCallId,\n output: result,\n state: 'output-available',\n })\n\n return result\n },\n (originalError) => createError('FAILED_TO_EXECUTE_REQUEST', originalError),\n)\n"],"mappings":";;;;;;;;;AAeA,IAAM,IAAoB,KAEpB,IAAU,EAAE,OAChB,OAAO,MACe,EAAS,QAAQ,IAAI,eAAe,KAEpC,qBACX;CAAE,SAAS;CAAM,MAAM,MAAM,EAAS,MAAM;CAAE,GAGhD;CAAE,SAAS;CAAM,MAAM,MAAM,EAAS,MAAM;CAAE,GAEtD,MAAkB,EAAY,iCAAiC,EAAE,kBAAe,CAAC,CACnF,EAEK,KAAoB,MACxB,KAAK,MAAM,EAAa,KAAK,UAAU,EAAS,EAAE,EAAkB,CAAC,WAAW,EAG5E,IAAY,EAAE,OAClB,OAAO,GAAa,MAAsB;CACxC,IAAM,IAAW,MAAM,MAAM,GAAK,EAAK,EAEjC,IAAqB,MAAM,EAAQ,EAAS;AAkBlD,QAhBK,EAAS,KAYT,EAAmB,UAIjB;EACL,SAAS;EACT,MAAM;GACJ,QAAQ,EAAS;GACjB,cAAc,EAAiB,EAAmB,KAAK;GACvD,SAAS,OAAO,YAAY,EAAS,QAAQ,SAAS,CAAC;GACxD;EACF,GAVQ,IAZA;EACL,SAAS;EACT,OAAO,EAAY,kBAAkB;GACnC,QAAQ,EAAS;GACjB,KAAK,EAAS;GACd,cAAc,EAAiB,EAAmB,UAAU,EAAmB,OAAO,KAAA,EAAU;GAChG,SAAS,OAAO,YAAY,EAAS,QAAQ,SAAS,CAAC;GACxD,CAAC;EACH;IAgBJ,MAAkB,EAAY,mBAAmB,EAAE,kBAAe,CAAC,CACrE;AAED,SAAS,EAAU,EACjB,SACA,iBACA,eAKC;AAWD,QAAO,EAAgB,GAVH,EAAe;EACjC;EACA,QAAQ;EACR,eAAe,EAAE;EACjB,aAAa;GACX,OAAO;GACP,WAAW,EAAE;GACd;EACF,CAAC,CAE2C;;AAM/C,IAAa,IAAqB,EAAE,OAClC,OAAO,EACL,qBACA,eACA,SACA,aACA,OAAO,EAAE,WAAQ,SAAM,SAAM,YAAS,8BAgBlC;CACJ,IAAM,CAAC,GAAW,KAAQ,EAAmB,MAAA,MAAoC;AACjF,KAAI,CAAC,KAAa,CAAC,EACjB,QAAO;EACL,SAAS;EACT,OAAO,EAAY,gCAAgC;GAAE;GAAW;GAAM;GAAoB,CAAC;EAC5F;CAGH,IAAM,IAAe,EAAmB,GAAW,EAAK,EAClD,IAAW,EAAiB;AAElC,KAAI,CAAC,EACH,QAAO;EACL,SAAS;EACT,OAAO,EAAY,6CAA6C;GAC9D;GACA;GACA;GACD,CAAC;EACH;CAGH,IAAM,IAAyB,EAAqB,EAAS,gBAAgB,EAEvE,IAAe;EACnB;EACA;EACA,GAAG;EACH,SAAS;GACP,GAAG;GACH,GAAG,EAAuB;GAC3B;EACF,EAQK,IAAS,MAAM,EANT,EAAU;EACpB;EACA,cAAc,EAAS;EACvB;EACD,CAAC,EAEkC,EAAa;AASjD,QAPA,EAAK,cAAc;EACjB,MAAM;EACN;EACA,QAAQ;EACR,OAAO;EACR,CAAC,EAEK;IAER,MAAkB,EAAY,6BAA6B,EAAc,CAC3E"}
@@ -0,0 +1,9 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./ActionsDropdown.vue.script.js";
3
+ /* empty css */
4
+ //#region src/components/ActionsDropdown.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-2d142bb5"]]);
6
+ //#endregion
7
+ export { n as default };
8
+
9
+ //# sourceMappingURL=ActionsDropdown.vue.js.map
@@ -0,0 +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":""}
@@ -0,0 +1,33 @@
1
+ import e from "../views/Catalog/Catalog.vue.js";
2
+ import { Fragment as t, createBlock as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, createTextVNode as o, createVNode as s, defineComponent as c, openBlock as l, renderSlot as u, unref as d, withCtx as f } from "vue";
3
+ import { ScalarDropdown as p, ScalarDropdownItem as m, useModal as h } from "@scalar/components";
4
+ import { ScalarIconMagnifyingGlass as g, ScalarIconUpload as _ } from "@scalar/icons";
5
+ //#region src/components/ActionsDropdown.vue?vue&type=script&setup=true&lang.ts
6
+ var v = { class: "dropdown-item" }, y = { class: "dropdown-item" }, b = /* @__PURE__ */ c({
7
+ __name: "ActionsDropdown",
8
+ emits: ["uploadApi"],
9
+ setup(c) {
10
+ let b = h();
11
+ return (c, h) => (l(), i(t, null, [s(d(p), { offset: {
12
+ crossAxis: -5,
13
+ mainAxis: 5
14
+ } }, {
15
+ items: f(() => [s(d(m), { onClick: h[0] ||= (e) => c.$emit("uploadApi") }, {
16
+ default: f(() => [a("div", v, [s(d(_)), h[2] ||= o(" Upload API ", -1)])]),
17
+ _: 1
18
+ }), s(d(m), { onClick: h[1] ||= (e) => d(b).show() }, {
19
+ default: f(() => [a("div", y, [s(d(g)), h[3] ||= o(" Search Catalog ", -1)])]),
20
+ _: 1
21
+ })]),
22
+ default: f(() => [u(c.$slots, "default", {}, void 0, !0)]),
23
+ _: 3
24
+ }), d(b).open ? (l(), n(e, {
25
+ key: 0,
26
+ modal: d(b)
27
+ }, null, 8, ["modal"])) : r("", !0)], 64));
28
+ }
29
+ });
30
+ //#endregion
31
+ export { b as default };
32
+
33
+ //# sourceMappingURL=ActionsDropdown.vue.script.js.map
@@ -0,0 +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,IAAM,IAAe,GAAS;qCAI5B,EAkBiB,EAAA,EAAA,EAAA,EAlBA,QAAQ;GAAA,WAAA;GAAA,UAAA;GAA8B,EAAA,EAAA;GAG1C,OAAK,QAMO,CALrB,EAKqB,EAAA,EAAA,EAAA,EALA,SAAK,AAAA,EAAA,QAAA,MAAEA,EAAAA,MAAK,YAAA,EAAA,EAAA;qBAIzB,CAHN,EAGM,OAHN,GAGM,CAFJ,EAAoB,EAAA,EAAA,CAAA,EAAA,AAAA,EAAA,OAAA,EAAA,gBAEtB,GAAA,CAAA,CAAA,CAAA,CAAA;;OAGF,EAKqB,EAAA,EAAA,EAAA,EALA,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,EAAY,CAAC,MAAI,EAAA,EAAA;qBAIrC,CAHN,EAGM,OAHN,GAGM,CAFJ,EAA6B,EAAA,EAAA,CAAA,EAAA,AAAA,EAAA,OAAA,EAAA,oBAE/B,GAAA,CAAA,CAAA,CAAA,CAAA;;;oBAdI,CAAR,EAAQ,EAAA,QAAA,WAAA,EAAA,EAAA,KAAA,GAAA,GAAA,CAAA,CAAA;;MAoBF,EAAA,EAAY,CAAC,QAAA,GAAA,EADrB,EAE0B,GAAA;;GAAvB,OAAO,EAAA,EAAY"}
@@ -0,0 +1,9 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./ApprovalSection.vue.script.js";
3
+ /* empty css */
4
+ //#region src/components/ApprovalSection.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-a7e6c699"]]);
6
+ //#endregion
7
+ export { n as default };
8
+
9
+ //# sourceMappingURL=ApprovalSection.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApprovalSection.vue.js","names":[],"sources":["../../src/components/ApprovalSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIconInfo } from '@scalar/icons'\n\nconst emit = defineEmits<{\n (e: 'approve'): void\n (e: 'reject'): void\n}>()\n</script>\n\n<template>\n <div class=\"approvalSection\">\n <strong class=\"approvalText flex items-center gap-1.5\">\n <ScalarIconInfo\n class=\"text-blue size-4\"\n weight=\"bold\" />\n One or more requests require approval.\n </strong>\n <div class=\"approveContainer\">\n <button\n type=\"button\"\n class=\"actionButton rejectButton\"\n @click=\"emit('reject')\">\n Reject\n </button>\n <button\n type=\"button\"\n class=\"actionButton approveButton\"\n @click=\"emit('approve')\">\n Approve\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n.approvalSection {\n width: 100%;\n margin-bottom: -16px;\n padding: 8px 8px 24px 12px;\n\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.approvalText {\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-font-size-3);\n}\n\n.approveContainer {\n display: flex;\n gap: 5px;\n}\n\n.actionButton {\n display: flex;\n align-items: center;\n font-weight: var(--scalar-semibold);\n border-radius: 50px;\n padding: 6px 12px;\n font-size: var(--scalar-font-size-3);\n}\n\n.rejectButton {\n color: white;\n background: var(--scalar-color-red);\n}\n.rejectButton:hover,\n.rejectButton:active {\n background: color-mix(\n in srgb,\n var(--scalar-color-red),\n var(--scalar-background-1) 10%\n );\n color: white !important;\n}\n\n.approveButton {\n color: white;\n background: var(--scalar-color-blue);\n}\n.approveButton:hover,\n.approveButton:active {\n background: color-mix(\n in srgb,\n var(--scalar-color-blue),\n var(--scalar-background-1) 10%\n );\n color: white !important;\n}\n</style>\n"],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { createElementBlock as e, createElementVNode as t, createTextVNode as n, createVNode as r, defineComponent as i, openBlock as a, unref as o } from "vue";
2
+ import { ScalarIconInfo as s } from "@scalar/icons";
3
+ //#region src/components/ApprovalSection.vue?vue&type=script&setup=true&lang.ts
4
+ var c = { class: "approvalSection" }, l = { class: "approvalText flex items-center gap-1.5" }, u = { class: "approveContainer" }, d = /* @__PURE__ */ i({
5
+ __name: "ApprovalSection",
6
+ emits: ["approve", "reject"],
7
+ setup(i, { emit: d }) {
8
+ let f = d;
9
+ return (i, d) => (a(), e("div", c, [t("strong", l, [r(o(s), {
10
+ class: "text-blue size-4",
11
+ weight: "bold"
12
+ }), d[2] ||= n(" One or more requests require approval. ", -1)]), t("div", u, [t("button", {
13
+ type: "button",
14
+ class: "actionButton rejectButton",
15
+ onClick: d[0] ||= (e) => f("reject")
16
+ }, " Reject "), t("button", {
17
+ type: "button",
18
+ class: "actionButton approveButton",
19
+ onClick: d[1] ||= (e) => f("approve")
20
+ }, " Approve ")])]));
21
+ }
22
+ });
23
+ //#endregion
24
+ export { d as default };
25
+
26
+ //# sourceMappingURL=ApprovalSection.vue.script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApprovalSection.vue.script.js","names":[],"sources":["../../src/components/ApprovalSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIconInfo } from '@scalar/icons'\n\nconst emit = defineEmits<{\n (e: 'approve'): void\n (e: 'reject'): void\n}>()\n</script>\n\n<template>\n <div class=\"approvalSection\">\n <strong class=\"approvalText flex items-center gap-1.5\">\n <ScalarIconInfo\n class=\"text-blue size-4\"\n weight=\"bold\" />\n One or more requests require approval.\n </strong>\n <div class=\"approveContainer\">\n <button\n type=\"button\"\n class=\"actionButton rejectButton\"\n @click=\"emit('reject')\">\n Reject\n </button>\n <button\n type=\"button\"\n class=\"actionButton approveButton\"\n @click=\"emit('approve')\">\n Approve\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n.approvalSection {\n width: 100%;\n margin-bottom: -16px;\n padding: 8px 8px 24px 12px;\n\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.approvalText {\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-font-size-3);\n}\n\n.approveContainer {\n display: flex;\n gap: 5px;\n}\n\n.actionButton {\n display: flex;\n align-items: center;\n font-weight: var(--scalar-semibold);\n border-radius: 50px;\n padding: 6px 12px;\n font-size: var(--scalar-font-size-3);\n}\n\n.rejectButton {\n color: white;\n background: var(--scalar-color-red);\n}\n.rejectButton:hover,\n.rejectButton:active {\n background: color-mix(\n in srgb,\n var(--scalar-color-red),\n var(--scalar-background-1) 10%\n );\n color: white !important;\n}\n\n.approveButton {\n color: white;\n background: var(--scalar-color-blue);\n}\n.approveButton:hover,\n.approveButton:active {\n background: color-mix(\n in srgb,\n var(--scalar-color-blue),\n var(--scalar-background-1) 10%\n );\n color: white !important;\n}\n</style>\n"],"mappings":";;;;;;;EAGA,IAAM,IAAO;yBAOX,EAqBM,OArBN,GAqBM,CApBJ,EAKS,UALT,GAKS,CAJP,EAEkB,EAAA,EAAA,EAAA;GADhB,OAAM;GACN,QAAO;iBAAS,4CAEpB,GAAA,CAAA,CAAA,EACA,EAaM,OAbN,GAaM,CAZJ,EAKS,UAAA;GAJP,MAAK;GACL,OAAM;GACL,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,SAAA;KAAY,WAE1B,EACA,EAKS,UAAA;GAJP,MAAK;GACL,OAAM;GACL,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,UAAA;KAAa,YAE3B,CAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1,13 @@
1
+ /* empty css */
2
+ import e from "../_virtual/_plugin-vue_export-helper.js";
3
+ import { createElementBlock as t, createStaticVNode as n, openBlock as r } from "vue";
4
+ //#region src/components/AuthenticationProvided.vue
5
+ var i = {}, a = { class: "authenticationProvided" };
6
+ function o(e, i) {
7
+ return r(), t("div", a, [...i[0] ||= [n("<svg fill=\"none\" height=\"16\" viewBox=\"0 0 16 16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\" data-v-e3416cd5><rect height=\"14.25\" rx=\"7.125\" width=\"14.25\" x=\"0.875\" y=\"0.875\" data-v-e3416cd5></rect><rect height=\"14.25\" rx=\"7.125\" stroke=\"currentColor\" stroke-width=\"1.75\" width=\"14.25\" x=\"0.875\" y=\"0.875\" data-v-e3416cd5></rect><g clip-path=\"url(#clip0_74_840)\" data-v-e3416cd5><path d=\"M11.6037 6.841L7.59117 10.8535C7.49742 10.9472 7.37029 10.9998 7.23774 10.9998C7.10519 10.9998 6.97806 10.9472 6.8843 10.8535L4.64617 8.6035C4.55257 8.50975 4.5 8.38269 4.5 8.25022C4.5 8.11774 4.55257 7.99068 4.64617 7.89694L5.27117 7.27194C5.36488 7.17862 5.49174 7.12623 5.62399 7.12623C5.75623 7.12623 5.88309 7.17862 5.9768 7.27194L7.25024 8.50694L10.274 5.52037C10.3677 5.42696 10.4946 5.37451 10.627 5.37451C10.7593 5.37451 10.8862 5.42696 10.9799 5.52037L11.6034 6.131C11.6502 6.17746 11.6875 6.23274 11.7129 6.29366C11.7383 6.35458 11.7514 6.41993 11.7514 6.48593C11.7514 6.55194 11.7384 6.6173 11.713 6.67824C11.6877 6.73918 11.6505 6.7945 11.6037 6.841Z\" fill=\"currentColor\" data-v-e3416cd5></path></g><defs data-v-e3416cd5><clipPath id=\"clip0_74_840\" data-v-e3416cd5><rect height=\"8\" rx=\"4\" width=\"8\" x=\"4\" y=\"4\" data-v-e3416cd5></rect></clipPath></defs></svg> Authorized ", 2)]]);
8
+ }
9
+ var s = /* @__PURE__ */ e(i, [["render", o], ["__scopeId", "data-v-e3416cd5"]]);
10
+ //#endregion
11
+ export { s as default };
12
+
13
+ //# sourceMappingURL=AuthenticationProvided.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthenticationProvided.vue.js","names":[],"sources":["../../src/components/AuthenticationProvided.vue"],"sourcesContent":["<template>\n <div class=\"authenticationProvided\">\n <svg\n fill=\"none\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect\n height=\"14.25\"\n rx=\"7.125\"\n width=\"14.25\"\n x=\"0.875\"\n y=\"0.875\" />\n <rect\n height=\"14.25\"\n rx=\"7.125\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n width=\"14.25\"\n x=\"0.875\"\n y=\"0.875\" />\n <g clip-path=\"url(#clip0_74_840)\">\n <path\n d=\"M11.6037 6.841L7.59117 10.8535C7.49742 10.9472 7.37029 10.9998 7.23774 10.9998C7.10519 10.9998 6.97806 10.9472 6.8843 10.8535L4.64617 8.6035C4.55257 8.50975 4.5 8.38269 4.5 8.25022C4.5 8.11774 4.55257 7.99068 4.64617 7.89694L5.27117 7.27194C5.36488 7.17862 5.49174 7.12623 5.62399 7.12623C5.75623 7.12623 5.88309 7.17862 5.9768 7.27194L7.25024 8.50694L10.274 5.52037C10.3677 5.42696 10.4946 5.37451 10.627 5.37451C10.7593 5.37451 10.8862 5.42696 10.9799 5.52037L11.6034 6.131C11.6502 6.17746 11.6875 6.23274 11.7129 6.29366C11.7383 6.35458 11.7514 6.41993 11.7514 6.48593C11.7514 6.55194 11.7384 6.6173 11.713 6.67824C11.6877 6.73918 11.6505 6.7945 11.6037 6.841Z\"\n fill=\"currentColor\" />\n </g>\n <defs>\n <clipPath id=\"clip0_74_840\">\n <rect\n height=\"8\"\n rx=\"4\"\n width=\"8\"\n x=\"4\"\n y=\"4\" />\n </clipPath>\n </defs>\n </svg>\n Authorized\n </div>\n</template>\n\n<style scoped>\n.authenticationProvided {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--scalar-color-1);\n font-weight: var(--scalar-semibold);\n min-height: 40px;\n font-size: var(--scalar-font-size-3);\n position: relative;\n}\n</style>\n"],"mappings":";;;;kBACO,OAAM,0BAAwB;;aAAnC,EAsCM,OAtCN,GAsCM,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAA,izCAAA,EAAA,CAAA,CAAA,CAAA"}