@scalar/agent-chat 0.12.45 → 0.12.48

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 (188) hide show
  1. package/dist/App.vue.d.ts +1 -1
  2. package/dist/App.vue.d.ts.map +1 -1
  3. package/dist/App.vue.js +1 -1
  4. package/dist/App.vue.js.map +1 -1
  5. package/dist/{App.vue.script.js → App.vue_vue_type_script_setup_true_lang.js} +1 -1
  6. package/dist/App.vue_vue_type_script_setup_true_lang.js.map +1 -0
  7. package/dist/Chat.vue.js +1 -1
  8. package/dist/Chat.vue.js.map +1 -1
  9. package/dist/{Chat.vue.script.js → Chat.vue_vue_type_script_setup_true_lang.js} +1 -1
  10. package/dist/Chat.vue_vue_type_script_setup_true_lang.js.map +1 -0
  11. package/dist/client-tools/execute-request.js +3 -2
  12. package/dist/client-tools/execute-request.js.map +1 -1
  13. package/dist/components/ActionsDropdown.vue.js +2 -2
  14. package/dist/components/ActionsDropdown.vue.js.map +1 -1
  15. package/dist/components/{ActionsDropdown.vue.script.js → ActionsDropdown.vue_vue_type_script_setup_true_lang.js} +1 -1
  16. package/dist/components/ActionsDropdown.vue_vue_type_script_setup_true_lang.js.map +1 -0
  17. package/dist/components/ApprovalSection.vue.js +2 -2
  18. package/dist/components/ApprovalSection.vue.js.map +1 -1
  19. package/dist/components/{ApprovalSection.vue.script.js → ApprovalSection.vue_vue_type_script_setup_true_lang.js} +1 -1
  20. package/dist/components/ApprovalSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  21. package/dist/components/AuthenticationProvided.vue.js +1 -1
  22. package/dist/components/AuthenticationProvided.vue.js.map +1 -1
  23. package/dist/components/AuthenticationRequired.vue.js +1 -1
  24. package/dist/components/AuthenticationRequired.vue.js.map +1 -1
  25. package/dist/components/AutosendPaused.vue.js +1 -1
  26. package/dist/components/AutosendPaused.vue.js.map +1 -1
  27. package/dist/components/BuildingRequest.vue.js +1 -1
  28. package/dist/components/BuildingRequest.vue.js.map +1 -1
  29. package/dist/components/ContextItem.vue.js +2 -2
  30. package/dist/components/ContextItem.vue.js.map +1 -1
  31. package/dist/components/{ContextItem.vue.script.js → ContextItem.vue_vue_type_script_setup_true_lang.js} +1 -1
  32. package/dist/components/ContextItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  33. package/dist/components/ErrorMessage.vue.js +2 -2
  34. package/dist/components/ErrorMessage.vue.js.map +1 -1
  35. package/dist/components/{ErrorMessage.vue.script.js → ErrorMessage.vue_vue_type_script_setup_true_lang.js} +1 -1
  36. package/dist/components/ErrorMessage.vue_vue_type_script_setup_true_lang.js.map +1 -0
  37. package/dist/components/FreeMessagesInfoSection.vue.js +2 -2
  38. package/dist/components/FreeMessagesInfoSection.vue.js.map +1 -1
  39. package/dist/components/{FreeMessagesInfoSection.vue.script.js → FreeMessagesInfoSection.vue_vue_type_script_setup_true_lang.js} +1 -1
  40. package/dist/components/FreeMessagesInfoSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  41. package/dist/components/LoadingOpenAPISpecsSummary.vue.js +1 -1
  42. package/dist/components/LoadingOpenAPISpecsSummary.vue.js.map +1 -1
  43. package/dist/components/LoadingSearchOpenAPIOperations.vue.js +1 -1
  44. package/dist/components/LoadingSearchOpenAPIOperations.vue.js.map +1 -1
  45. package/dist/components/Logo.vue.js.map +1 -1
  46. package/dist/components/PaymentSection.vue.js +2 -2
  47. package/dist/components/PaymentSection.vue.js.map +1 -1
  48. package/dist/components/{PaymentSection.vue.script.js → PaymentSection.vue_vue_type_script_setup_true_lang.js} +1 -1
  49. package/dist/components/PaymentSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  50. package/dist/components/RequestApproved.vue.js +1 -1
  51. package/dist/components/RequestApproved.vue.js.map +1 -1
  52. package/dist/components/RequestFailed.vue.js +1 -1
  53. package/dist/components/RequestFailed.vue.js.map +1 -1
  54. package/dist/components/RequestPreview.vue.js +2 -2
  55. package/dist/components/RequestPreview.vue.js.map +1 -1
  56. package/dist/components/{RequestPreview.vue.script.js → RequestPreview.vue_vue_type_script_setup_true_lang.js} +1 -1
  57. package/dist/components/RequestPreview.vue_vue_type_script_setup_true_lang.js.map +1 -0
  58. package/dist/components/RequestRejected.vue.js +1 -1
  59. package/dist/components/RequestRejected.vue.js.map +1 -1
  60. package/dist/components/RequestSuccess.vue.js +1 -1
  61. package/dist/components/RequestSuccess.vue.js.map +1 -1
  62. package/dist/components/ResponseBody/ResponseBody.vue.d.ts +2 -2
  63. package/dist/components/ResponseBody/ResponseBody.vue.js +1 -1
  64. package/dist/components/ResponseBody/ResponseBody.vue.js.map +1 -1
  65. package/dist/components/ResponseBody/{ResponseBody.vue.script.js → ResponseBody.vue_vue_type_script_setup_true_lang.js} +1 -1
  66. package/dist/components/ResponseBody/ResponseBody.vue_vue_type_script_setup_true_lang.js.map +1 -0
  67. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js.map +1 -1
  68. package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts +1 -1
  69. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js +2 -2
  70. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js.map +1 -1
  71. package/dist/components/ResponseBody/{ResponseBodyPreview.vue.script.js → ResponseBodyPreview.vue_vue_type_script_setup_true_lang.js} +1 -1
  72. package/dist/components/ResponseBody/ResponseBodyPreview.vue_vue_type_script_setup_true_lang.js.map +1 -0
  73. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js +1 -1
  74. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js.map +1 -1
  75. package/dist/components/ResponseBody/{ResponseBodyRaw.vue.script.js → ResponseBodyRaw.vue_vue_type_script_setup_true_lang.js} +1 -1
  76. package/dist/components/ResponseBody/ResponseBodyRaw.vue_vue_type_script_setup_true_lang.js.map +1 -0
  77. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js +1 -1
  78. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js.map +1 -1
  79. package/dist/components/ResponseBody/{ResponseBodyToggle.vue.script.js → ResponseBodyToggle.vue_vue_type_script_setup_true_lang.js} +1 -1
  80. package/dist/components/ResponseBody/ResponseBodyToggle.vue_vue_type_script_setup_true_lang.js.map +1 -0
  81. package/dist/components/SearchPopover.vue.js +2 -2
  82. package/dist/components/SearchPopover.vue.js.map +1 -1
  83. package/dist/components/{SearchPopover.vue.script.js → SearchPopover.vue_vue_type_script_setup_true_lang.js} +1 -1
  84. package/dist/components/SearchPopover.vue_vue_type_script_setup_true_lang.js.map +1 -0
  85. package/dist/components/Selector.vue.js +1 -1
  86. package/dist/components/Selector.vue.js.map +1 -1
  87. package/dist/components/{Selector.vue.script.js → Selector.vue_vue_type_script_setup_true_lang.js} +1 -1
  88. package/dist/components/Selector.vue_vue_type_script_setup_true_lang.js.map +1 -0
  89. package/dist/components/SendingRequest.vue.js +1 -1
  90. package/dist/components/SendingRequest.vue.js.map +1 -1
  91. package/dist/components/ServerSelector.vue.js +1 -1
  92. package/dist/components/ServerSelector.vue.js.map +1 -1
  93. package/dist/components/{ServerSelector.vue.script.js → ServerSelector.vue_vue_type_script_setup_true_lang.js} +1 -1
  94. package/dist/components/ServerSelector.vue_vue_type_script_setup_true_lang.js.map +1 -0
  95. package/dist/components/UploadSection.vue.js +2 -2
  96. package/dist/components/UploadSection.vue.js.map +1 -1
  97. package/dist/components/{UploadSection.vue.script.js → UploadSection.vue_vue_type_script_setup_true_lang.js} +1 -1
  98. package/dist/components/UploadSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  99. package/dist/entities/tools/execute-request.d.ts +1 -1
  100. package/dist/helpers.js +4 -2
  101. package/dist/helpers.js.map +1 -1
  102. package/dist/index.js +1 -2
  103. package/dist/package.json +1 -1
  104. package/dist/state/state.d.ts +1 -1
  105. package/dist/style.css +58 -38
  106. package/dist/views/Catalog/Catalog.vue.js +3 -3
  107. package/dist/views/Catalog/Catalog.vue.js.map +1 -1
  108. package/dist/views/Catalog/{Catalog.vue.script.js → Catalog.vue_vue_type_script_setup_true_lang.js} +1 -1
  109. package/dist/views/Catalog/Catalog.vue_vue_type_script_setup_true_lang.js.map +1 -0
  110. package/dist/views/Chat/Chat.vue.js +2 -2
  111. package/dist/views/Chat/Chat.vue.js.map +1 -1
  112. package/dist/views/Chat/{Chat.vue.script.js → Chat.vue_vue_type_script_setup_true_lang.js} +1 -1
  113. package/dist/views/Chat/Chat.vue_vue_type_script_setup_true_lang.js.map +1 -0
  114. package/dist/views/Chat/Messages/AskForAuthentication.vue.js +2 -2
  115. package/dist/views/Chat/Messages/AskForAuthentication.vue.js.map +1 -1
  116. package/dist/views/Chat/Messages/{AskForAuthentication.vue.script.js → AskForAuthentication.vue_vue_type_script_setup_true_lang.js} +1 -1
  117. package/dist/views/Chat/Messages/AskForAuthentication.vue_vue_type_script_setup_true_lang.js.map +1 -0
  118. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +2 -2
  119. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js.map +1 -1
  120. package/dist/views/Chat/Messages/{ExecuteRequestTool.vue.script.js → ExecuteRequestTool.vue_vue_type_script_setup_true_lang.js} +1 -1
  121. package/dist/views/Chat/Messages/ExecuteRequestTool.vue_vue_type_script_setup_true_lang.js.map +1 -0
  122. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js +1 -1
  123. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js.map +1 -1
  124. package/dist/views/Chat/Messages/{GetOpenAPISpecsSummary.vue.script.js → GetOpenAPISpecsSummary.vue_vue_type_script_setup_true_lang.js} +1 -1
  125. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue_vue_type_script_setup_true_lang.js.map +1 -0
  126. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.js +2 -2
  127. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.js.map +1 -1
  128. package/dist/views/Chat/Messages/{SearchOpenAPIOperationsTool.vue.script.js → SearchOpenAPIOperationsTool.vue_vue_type_script_setup_true_lang.js} +1 -1
  129. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue_vue_type_script_setup_true_lang.js.map +1 -0
  130. package/dist/views/Chat/Messages/Text.vue.js +1 -1
  131. package/dist/views/Chat/Messages/Text.vue.js.map +1 -1
  132. package/dist/views/Chat/Messages/{Text.vue.script.js → Text.vue_vue_type_script_setup_true_lang.js} +1 -1
  133. package/dist/views/Chat/Messages/Text.vue_vue_type_script_setup_true_lang.js.map +1 -0
  134. package/dist/views/Layout.vue.js +2 -2
  135. package/dist/views/Layout.vue.js.map +1 -1
  136. package/dist/views/{Layout.vue.script.js → Layout.vue_vue_type_script_setup_true_lang.js} +1 -1
  137. package/dist/views/Layout.vue_vue_type_script_setup_true_lang.js.map +1 -0
  138. package/dist/views/PromptForm.vue.js +2 -2
  139. package/dist/views/PromptForm.vue.js.map +1 -1
  140. package/dist/views/{PromptForm.vue.script.js → PromptForm.vue_vue_type_script_setup_true_lang.js} +1 -1
  141. package/dist/views/PromptForm.vue_vue_type_script_setup_true_lang.js.map +1 -0
  142. package/dist/views/Settings/Auth.vue.js +1 -1
  143. package/dist/views/Settings/Auth.vue.js.map +1 -1
  144. package/dist/views/Settings/{Auth.vue.script.js → Auth.vue_vue_type_script_setup_true_lang.js} +1 -1
  145. package/dist/views/Settings/Auth.vue_vue_type_script_setup_true_lang.js.map +1 -0
  146. package/dist/views/Settings/DocSettings.vue.js +2 -2
  147. package/dist/views/Settings/DocSettings.vue.js.map +1 -1
  148. package/dist/views/Settings/{DocSettings.vue.script.js → DocSettings.vue_vue_type_script_setup_true_lang.js} +1 -1
  149. package/dist/views/Settings/DocSettings.vue_vue_type_script_setup_true_lang.js.map +1 -0
  150. package/dist/views/Settings/Settings.vue.js +3 -3
  151. package/dist/views/Settings/Settings.vue.js.map +1 -1
  152. package/dist/views/Settings/{Settings.vue.script.js → Settings.vue_vue_type_script_setup_true_lang.js} +1 -1
  153. package/dist/views/Settings/Settings.vue_vue_type_script_setup_true_lang.js.map +1 -0
  154. package/dist/views/Start.vue.js +2 -2
  155. package/dist/views/Start.vue.js.map +1 -1
  156. package/dist/views/{Start.vue.script.js → Start.vue_vue_type_script_setup_true_lang.js} +1 -1
  157. package/dist/views/Start.vue_vue_type_script_setup_true_lang.js.map +1 -0
  158. package/package.json +23 -23
  159. package/dist/App.vue.script.js.map +0 -1
  160. package/dist/Chat.vue.script.js.map +0 -1
  161. package/dist/components/ActionsDropdown.vue.script.js.map +0 -1
  162. package/dist/components/ApprovalSection.vue.script.js.map +0 -1
  163. package/dist/components/ContextItem.vue.script.js.map +0 -1
  164. package/dist/components/ErrorMessage.vue.script.js.map +0 -1
  165. package/dist/components/FreeMessagesInfoSection.vue.script.js.map +0 -1
  166. package/dist/components/PaymentSection.vue.script.js.map +0 -1
  167. package/dist/components/RequestPreview.vue.script.js.map +0 -1
  168. package/dist/components/ResponseBody/ResponseBody.vue.script.js.map +0 -1
  169. package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js.map +0 -1
  170. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js.map +0 -1
  171. package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js.map +0 -1
  172. package/dist/components/SearchPopover.vue.script.js.map +0 -1
  173. package/dist/components/Selector.vue.script.js.map +0 -1
  174. package/dist/components/ServerSelector.vue.script.js.map +0 -1
  175. package/dist/components/UploadSection.vue.script.js.map +0 -1
  176. package/dist/views/Catalog/Catalog.vue.script.js.map +0 -1
  177. package/dist/views/Chat/Chat.vue.script.js.map +0 -1
  178. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js.map +0 -1
  179. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js.map +0 -1
  180. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js.map +0 -1
  181. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.script.js.map +0 -1
  182. package/dist/views/Chat/Messages/Text.vue.script.js.map +0 -1
  183. package/dist/views/Layout.vue.script.js.map +0 -1
  184. package/dist/views/PromptForm.vue.script.js.map +0 -1
  185. package/dist/views/Settings/Auth.vue.script.js.map +0 -1
  186. package/dist/views/Settings/DocSettings.vue.script.js.map +0 -1
  187. package/dist/views/Settings/Settings.vue.script.js.map +0 -1
  188. package/dist/views/Start.vue.script.js.map +0 -1
@@ -58,4 +58,4 @@ var UploadSection_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
58
58
  //#endregion
59
59
  export { UploadSection_vue_vue_type_script_setup_true_lang_default as default };
60
60
 
61
- //# sourceMappingURL=UploadSection.vue.script.js.map
61
+ //# sourceMappingURL=UploadSection.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadSection.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_createVNode","_unref","_createCommentVNode","_createTextVNode","_toDisplayString"],"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 API description…\n </strong>\n <strong\n v-else-if=\"uploadState.type === 'processing'\"\n class=\"uploadText\">\n Processing API description…\n </strong>\n <strong\n v-else\n class=\"uploadText\">\n Uploading API description…\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 API description 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: var(--scalar-radius-3xl) var(--scalar-radius-3xl) 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,gBAAgB;EAErC,MAAM,YAAY,eAChB;GAAC;GAAa;GAAc;EAAS,CAAC,CAAC,SAAS,QAAA,YAAY,IAAI,CAClE;;GAIE,OAAAA,UAAA,GAAAC,mBA4CM,OAAA,EA3CJ,OAAKC,eAAA,CAAC,iBAAe;IACE,OAAA,QAAA,YAAY,SAAI;IAA0B,MAAA,QAAA,YAAY,SAAI;;IAKzE,UAAA,SADRF,UAAA,GAAAC,mBAyBM,OAzBN,YAyBM,CAtBJE,YAMcC,MAAA,aAAA,GAAA;KALZ,OAAM;KACL,QAAM;MAAiB,GAAAA,MAAA,YAAA;;;KAIxB,MAAK;I,yBAEC,QAAA,YAAY,SAAI,aADxBJ,UAAA,GAAAC,mBAIS,UAJT,YAEqB,4BAErB,KAEa,QAAA,YAAY,SAAI,gBAD7BD,UAAA,GAAAC,mBAIS,UAJT,YAEqB,+BAErB,MACAD,UAAA,GAAAC,mBAIS,UAJT,YAEqB,8BAErB,E;IAGM,QAAA,YAAY,SAAI,UADxBD,UAAA,GAAAC,mBAKS,UALT,YAKS,CAFPE,YAA2CC,MAAA,eAAA,GAAA,EAA1B,OAAM,kBAAiB,CAAA,GAAG,OAAA,OAAA,OAAA,KAAAE,gBAAA,2DAE7C,EAAA,E;IAEQ,QAAA,YAAY,SAAI,WADxBN,UAAA,GAAAC,mBAKS,UALT,YAKS,CAFPE,YAA2CC,MAAA,iBAAA,GAAA,EAAxB,OAAM,gBAAe,CAAA,GAAGE,gBAAA,MAC3CC,gBAAG,QAAA,YAAY,KAAK,GAAA,CAAA,C"}
@@ -1,6 +1,6 @@
1
1
  import { type Static } from '@scalar/validation';
2
2
  import type { Result } from 'neverpanic';
3
- import type { AgentChatError } from '../../entities/error/constants.js';
3
+ import type { AgentChatError } from '../error/constants.js';
4
4
  export declare const EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME: "execute-request";
5
5
  export declare const executeClientSideRequestToolInputSchema: import("@scalar/validation").ObjectSchema<{
6
6
  method: import("@scalar/validation").StringSchema;
package/dist/helpers.js CHANGED
@@ -19,8 +19,9 @@ function createDocumentSettings(workspaceStore) {
19
19
  const openApiEntries = [];
20
20
  for (const [key, document] of Object.entries(workspaceStore.workspace.documents)) if (isOpenApiDocument(document)) openApiEntries.push([key, document]);
21
21
  return Object.fromEntries(openApiEntries.map(([key, document]) => {
22
+ const servers = getServers(document.servers, { documentUrl: document["x-scalar-original-source-url"] });
22
23
  return [key, {
23
- activeServer: getSelectedServer(document, null, null, getServers(document.servers, { documentUrl: document["x-scalar-original-source-url"] })),
24
+ activeServer: getSelectedServer(document, null, null, servers),
24
25
  securitySchemes: getSecurityFromDocument(key, document, workspaceStore.auth)
25
26
  }];
26
27
  }));
@@ -40,7 +41,8 @@ var authStorage = () => {
40
41
  * Retrieves and coerces the authentication schemes stored in local storage.
41
42
  */
42
43
  getAuth: (slug) => {
43
- return coerceValue(AuthSchema, JSON.parse(storage.getItem(getKey(slug)) ?? "{}"));
44
+ const parsed = JSON.parse(storage.getItem(getKey(slug)) ?? "{}");
45
+ return coerceValue(AuthSchema, parsed);
44
46
  },
45
47
  /**
46
48
  * Stores the authentication schemes in local storage.
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":[],"sources":["../src/helpers.ts"],"sourcesContent":["import { REFERENCE_LS_KEYS, safeLocalStorage } from '@scalar/helpers/object/local-storage'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { AuthStore } from '@scalar/workspace-store/entities/auth'\nimport { type Auth, AuthSchema } from '@scalar/workspace-store/entities/auth'\nimport type { SecuritySchemeObjectSecret } from '@scalar/workspace-store/request-example'\nimport {\n getSecurityRequirements,\n getSecuritySchemes,\n getSelectedSecurity,\n getSelectedServer,\n getServers,\n mergeSecurity,\n} from '@scalar/workspace-store/request-example'\nimport { isOpenApiDocument } from '@scalar/workspace-store/schemas/type-guards'\nimport { coerceValue } from '@scalar/workspace-store/schemas/typebox-coerce'\nimport type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\n\n/** Flattens all security requirements from a document */\nfunction getSecurityFromDocument(\n documentName: string,\n document: OpenApiDocument,\n authStore: AuthStore,\n): SecuritySchemeObjectSecret[] {\n const mergedSecurity = mergeSecurity(document?.components?.securitySchemes, {}, authStore, documentName)\n\n const securityRequirements = getSecurityRequirements(document.security)\n\n const selectedSecurity = getSelectedSecurity(\n authStore.getAuthSelectedSchemas({\n type: 'document',\n documentName,\n }),\n undefined,\n securityRequirements,\n )\n\n return getSecuritySchemes(mergedSecurity, selectedSecurity.selectedSchemes[selectedSecurity.selectedIndex] ?? {})\n}\n\n/** Generate document settings from workspace store. AsyncAPI docs are skipped — this feature is OpenAPI-native. */\nexport function createDocumentSettings(workspaceStore: WorkspaceStore) {\n const openApiEntries: [string, OpenApiDocument][] = []\n for (const [key, document] of Object.entries(workspaceStore.workspace.documents)) {\n if (isOpenApiDocument(document)) {\n openApiEntries.push([key, document])\n }\n }\n\n return Object.fromEntries(\n openApiEntries.map(([key, document]) => {\n const servers = getServers(document.servers, {\n documentUrl: document['x-scalar-original-source-url'],\n })\n\n return [\n key,\n {\n activeServer: getSelectedServer(document, null, null, servers),\n securitySchemes: getSecurityFromDocument(key, document, workspaceStore.auth),\n },\n ]\n }),\n )\n}\n\n// Local storage helper instance, safely wrapped.\nconst storage = safeLocalStorage()\n\n/**\n * Provides an interface to store and retrieve authentication scheme\n * information in local storage, including both the available schemes and\n * the user's selected schemes.\n */\nexport const authStorage = () => {\n const getKey = (slug: string) => {\n return `${REFERENCE_LS_KEYS.AUTH}-${slug}`\n }\n\n return {\n /**\n * Retrieves and coerces the authentication schemes stored in local storage.\n */\n getAuth: (slug: string) => {\n const parsed = JSON.parse(storage.getItem(getKey(slug)) ?? '{}')\n return coerceValue(AuthSchema, parsed)\n },\n /**\n * Stores the authentication schemes in local storage.\n * @param value The Auth object to stringify and store.\n */\n setAuth: (slug: string, value: Auth) => {\n storage.setItem(getKey(slug), JSON.stringify(value))\n },\n }\n}\n\n/**\n * Restores authentication secrets from local storage to the workspace store.\n *\n * This function iterates through stored authentication schemes and restores\n * any secret values (keys starting with x-scalar-secret-) to the active\n * document's security schemes. It uses the current security schemes as the\n * source of truth, only restoring secrets for structures that exist in the\n * current document.\n */\nexport const restoreAuthSecretsFromStorage = ({\n documentName,\n workspaceStore,\n}: {\n documentName: string\n workspaceStore: WorkspaceStore\n}): void => {\n const authPersistence = authStorage()\n const auth = authPersistence.getAuth(documentName)\n workspaceStore.auth.load({ [documentName]: auth })\n}\n\nexport function safeParseJson(value: string) {\n try {\n return JSON.parse(value)\n } catch {\n return\n }\n}\n"],"mappings":";;;;;;;AAkBA,SAAS,wBACP,cACA,UACA,WAC8B;CAC9B,MAAM,iBAAiB,cAAc,UAAU,YAAY,iBAAiB,CAAC,GAAG,WAAW,YAAY;CAEvG,MAAM,uBAAuB,wBAAwB,SAAS,QAAQ;CAEtE,MAAM,mBAAmB,oBACvB,UAAU,uBAAuB;EAC/B,MAAM;EACN;CACF,CAAC,GACD,KAAA,GACA,oBACF;CAEA,OAAO,mBAAmB,gBAAgB,iBAAiB,gBAAgB,iBAAiB,kBAAkB,CAAC,CAAC;AAClH;;AAGA,SAAgB,uBAAuB,gBAAgC;CACrE,MAAM,iBAA8C,CAAC;CACrD,KAAK,MAAM,CAAC,KAAK,aAAa,OAAO,QAAQ,eAAe,UAAU,SAAS,GAC7E,IAAI,kBAAkB,QAAQ,GAC5B,eAAe,KAAK,CAAC,KAAK,QAAQ,CAAC;CAIvC,OAAO,OAAO,YACZ,eAAe,KAAK,CAAC,KAAK,cAAc;EAKtC,OAAO,CACL,KACA;GACE,cAAc,kBAAkB,UAAU,MAAM,MAPpC,WAAW,SAAS,SAAS,EAC3C,aAAa,SAAS,gCACxB,CAK0D,CAAO;GAC7D,iBAAiB,wBAAwB,KAAK,UAAU,eAAe,IAAI;EAC7E,CACF;CACF,CAAC,CACH;AACF;AAGA,IAAM,UAAU,iBAAiB;;;;;;AAOjC,IAAa,oBAAoB;CAC/B,MAAM,UAAU,SAAiB;EAC/B,OAAO,GAAG,kBAAkB,KAAK,GAAG;CACtC;CAEA,OAAO;;;;EAIL,UAAU,SAAiB;GAEzB,OAAO,YAAY,YADJ,KAAK,MAAM,QAAQ,QAAQ,OAAO,IAAI,CAAC,KAAK,IAC5B,CAAM;EACvC;;;;;EAKA,UAAU,MAAc,UAAgB;GACtC,QAAQ,QAAQ,OAAO,IAAI,GAAG,KAAK,UAAU,KAAK,CAAC;EACrD;CACF;AACF;;;;;;;;;;AAWA,IAAa,iCAAiC,EAC5C,cACA,qBAIU;CAEV,MAAM,OADkB,YACX,CAAA,CAAgB,QAAQ,YAAY;CACjD,eAAe,KAAK,KAAK,GAAG,eAAe,KAAK,CAAC;AACnD;AAEA,SAAgB,cAAc,OAAe;CAC3C,IAAI;EACF,OAAO,KAAK,MAAM,KAAK;CACzB,QAAQ;EACN;CACF;AACF"}
1
+ {"version":3,"file":"helpers.js","names":[],"sources":["../src/helpers.ts"],"sourcesContent":["import { REFERENCE_LS_KEYS, safeLocalStorage } from '@scalar/helpers/object/local-storage'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { AuthStore } from '@scalar/workspace-store/entities/auth'\nimport { type Auth, AuthSchema } from '@scalar/workspace-store/entities/auth'\nimport type { SecuritySchemeObjectSecret } from '@scalar/workspace-store/request-example'\nimport {\n getSecurityRequirements,\n getSecuritySchemes,\n getSelectedSecurity,\n getSelectedServer,\n getServers,\n mergeSecurity,\n} from '@scalar/workspace-store/request-example'\nimport { isOpenApiDocument } from '@scalar/workspace-store/schemas/type-guards'\nimport { coerceValue } from '@scalar/workspace-store/schemas/typebox-coerce'\nimport type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\n\n/** Flattens all security requirements from a document */\nfunction getSecurityFromDocument(\n documentName: string,\n document: OpenApiDocument,\n authStore: AuthStore,\n): SecuritySchemeObjectSecret[] {\n const mergedSecurity = mergeSecurity(document?.components?.securitySchemes, {}, authStore, documentName)\n\n const securityRequirements = getSecurityRequirements(document.security)\n\n const selectedSecurity = getSelectedSecurity(\n authStore.getAuthSelectedSchemas({\n type: 'document',\n documentName,\n }),\n undefined,\n securityRequirements,\n )\n\n return getSecuritySchemes(mergedSecurity, selectedSecurity.selectedSchemes[selectedSecurity.selectedIndex] ?? {})\n}\n\n/** Generate document settings from workspace store. AsyncAPI docs are skipped — this feature is OpenAPI-native. */\nexport function createDocumentSettings(workspaceStore: WorkspaceStore) {\n const openApiEntries: [string, OpenApiDocument][] = []\n for (const [key, document] of Object.entries(workspaceStore.workspace.documents)) {\n if (isOpenApiDocument(document)) {\n openApiEntries.push([key, document])\n }\n }\n\n return Object.fromEntries(\n openApiEntries.map(([key, document]) => {\n const servers = getServers(document.servers, {\n documentUrl: document['x-scalar-original-source-url'],\n })\n\n return [\n key,\n {\n activeServer: getSelectedServer(document, null, null, servers),\n securitySchemes: getSecurityFromDocument(key, document, workspaceStore.auth),\n },\n ]\n }),\n )\n}\n\n// Local storage helper instance, safely wrapped.\nconst storage = safeLocalStorage()\n\n/**\n * Provides an interface to store and retrieve authentication scheme\n * information in local storage, including both the available schemes and\n * the user's selected schemes.\n */\nexport const authStorage = () => {\n const getKey = (slug: string) => {\n return `${REFERENCE_LS_KEYS.AUTH}-${slug}`\n }\n\n return {\n /**\n * Retrieves and coerces the authentication schemes stored in local storage.\n */\n getAuth: (slug: string) => {\n const parsed = JSON.parse(storage.getItem(getKey(slug)) ?? '{}')\n return coerceValue(AuthSchema, parsed)\n },\n /**\n * Stores the authentication schemes in local storage.\n * @param value The Auth object to stringify and store.\n */\n setAuth: (slug: string, value: Auth) => {\n storage.setItem(getKey(slug), JSON.stringify(value))\n },\n }\n}\n\n/**\n * Restores authentication secrets from local storage to the workspace store.\n *\n * This function iterates through stored authentication schemes and restores\n * any secret values (keys starting with x-scalar-secret-) to the active\n * document's security schemes. It uses the current security schemes as the\n * source of truth, only restoring secrets for structures that exist in the\n * current document.\n */\nexport const restoreAuthSecretsFromStorage = ({\n documentName,\n workspaceStore,\n}: {\n documentName: string\n workspaceStore: WorkspaceStore\n}): void => {\n const authPersistence = authStorage()\n const auth = authPersistence.getAuth(documentName)\n workspaceStore.auth.load({ [documentName]: auth })\n}\n\nexport function safeParseJson(value: string) {\n try {\n return JSON.parse(value)\n } catch {\n return\n }\n}\n"],"mappings":";;;;;;;AAkBA,SAAS,wBACP,cACA,UACA,WAC8B;CAC9B,MAAM,iBAAiB,cAAc,UAAU,YAAY,iBAAiB,CAAC,GAAG,WAAW,YAAY;CAEvG,MAAM,uBAAuB,wBAAwB,SAAS,QAAQ;CAEtE,MAAM,mBAAmB,oBACvB,UAAU,uBAAuB;EAC/B,MAAM;EACN;CACF,CAAC,GACD,KAAA,GACA,oBACF;CAEA,OAAO,mBAAmB,gBAAgB,iBAAiB,gBAAgB,iBAAiB,kBAAkB,CAAC,CAAC;AAClH;;AAGA,SAAgB,uBAAuB,gBAAgC;CACrE,MAAM,iBAA8C,CAAC;CACrD,KAAK,MAAM,CAAC,KAAK,aAAa,OAAO,QAAQ,eAAe,UAAU,SAAS,GAC7E,IAAI,kBAAkB,QAAQ,GAC5B,eAAe,KAAK,CAAC,KAAK,QAAQ,CAAC;CAIvC,OAAO,OAAO,YACZ,eAAe,KAAK,CAAC,KAAK,cAAc;EACtC,MAAM,UAAU,WAAW,SAAS,SAAS,EAC3C,aAAa,SAAS,gCACxB,CAAC;EAED,OAAO,CACL,KACA;GACE,cAAc,kBAAkB,UAAU,MAAM,MAAM,OAAO;GAC7D,iBAAiB,wBAAwB,KAAK,UAAU,eAAe,IAAI;EAC7E,CACF;CACF,CAAC,CACH;AACF;AAGA,IAAM,UAAU,iBAAiB;;;;;;AAOjC,IAAa,oBAAoB;CAC/B,MAAM,UAAU,SAAiB;EAC/B,OAAO,GAAG,kBAAkB,KAAK,GAAG;CACtC;CAEA,OAAO;;;;EAIL,UAAU,SAAiB;GACzB,MAAM,SAAS,KAAK,MAAM,QAAQ,QAAQ,OAAO,IAAI,CAAC,KAAK,IAAI;GAC/D,OAAO,YAAY,YAAY,MAAM;EACvC;;;;;EAKA,UAAU,MAAc,UAAgB;GACtC,QAAQ,QAAQ,OAAO,IAAI,GAAG,KAAK,UAAU,KAAK,CAAC;EACrD;CACF;AACF;;;;;;;;;;AAWA,IAAa,iCAAiC,EAC5C,cACA,qBAIU;CAEV,MAAM,OADkB,YACX,CAAA,CAAgB,QAAQ,YAAY;CACjD,eAAe,KAAK,KAAK,GAAG,eAAe,KAAK,CAAC;AACnD;AAEA,SAAgB,cAAc,OAAe;CAC3C,IAAI;EACF,OAAO,KAAK,MAAM,KAAK;CACzB,QAAQ;EACN;CACF;AACF"}
package/dist/index.js CHANGED
@@ -1,2 +1 @@
1
- import App_default from "./App.vue.js";
2
- export { App_default as Chat };
1
+ export { default as Chat } from "./App.vue.js";
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.45",
13
+ "version": "0.12.48",
14
14
  "engines": {
15
15
  "node": ">=22"
16
16
  },
@@ -12,7 +12,7 @@ import { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME, type ExecuteClientSideRequestToo
12
12
  import type { GetOpenAPISpecsSummaryToolOutput, SUMMARIZE_OPENAPI_SPECS_TOOL_NAME } from '../entities/tools/get-openapi-specs-summary.js';
13
13
  import type { SEARCH_OPENAPI_OPERATIONS_TOOL_NAME, SearchOpenAPIOperationsToolInput, SearchOpenAPIOperationsToolOutput } from '../entities/tools/search-openapi-operations.js';
14
14
  import { type UploadTmpDocumentState } from '../hooks/use-upload-tmp-document.js';
15
- import type { ChatMode } from '../types';
15
+ import type { ChatMode } from '../types.js';
16
16
  export type RegistryDocument = {
17
17
  namespace: string;
18
18
  slug: string;
package/dist/style.css CHANGED
@@ -195,7 +195,7 @@
195
195
  background-color: var(--scalar-background-3);
196
196
  }
197
197
 
198
- .toggle-icon-ellipse[data-v-60be8692] {
198
+ .toggle-icon-ellipse[data-v-8f507267] {
199
199
  background: var(--scalar-background-1);
200
200
  border-radius: 50%;
201
201
  width: 7px;
@@ -207,7 +207,7 @@
207
207
  box-shadow: inset 0 0 0 1px;
208
208
  }
209
209
 
210
- .toggle-icon-moon-mask[data-v-60be8692] {
210
+ .toggle-icon-moon-mask[data-v-8f507267] {
211
211
  background: var(--scalar-background-1);
212
212
  border: 1px solid;
213
213
  border-radius: 50%;
@@ -221,7 +221,7 @@
221
221
  transform: translate3d(4px, -4px, 0);
222
222
  }
223
223
 
224
- .toggle-icon-sun-ray[data-v-60be8692] {
224
+ .toggle-icon-sun-ray[data-v-8f507267] {
225
225
  background: currentColor;
226
226
  border-radius: 8px;
227
227
  width: 12px;
@@ -230,30 +230,30 @@
230
230
  position: absolute;
231
231
  }
232
232
 
233
- .toggle-icon-sun-ray[data-v-60be8692]:nth-of-type(2) {
233
+ .toggle-icon-sun-ray[data-v-8f507267]:nth-of-type(2) {
234
234
  transform: rotate(90deg);
235
235
  }
236
236
 
237
- .toggle-icon-sun-ray[data-v-60be8692]:nth-of-type(3) {
237
+ .toggle-icon-sun-ray[data-v-8f507267]:nth-of-type(3) {
238
238
  transform: rotate(45deg);
239
239
  }
240
240
 
241
- .toggle-icon-sun-ray[data-v-60be8692]:nth-of-type(4) {
241
+ .toggle-icon-sun-ray[data-v-8f507267]:nth-of-type(4) {
242
242
  transform: rotate(-45deg);
243
243
  }
244
244
 
245
- .toggle-icon-dark .toggle-icon-ellipse[data-v-60be8692] {
245
+ .toggle-icon-dark .toggle-icon-ellipse[data-v-8f507267] {
246
246
  width: 10px;
247
247
  height: 10px;
248
248
  -webkit-mask-image: radial-gradient(circle at 0 100%, pink 10px, #0000 12px);
249
249
  mask-image: radial-gradient(circle at 0 100%, pink 10px, #0000 12px);
250
250
  }
251
251
 
252
- .toggle-icon-dark .toggle-icon-sun-ray[data-v-60be8692] {
252
+ .toggle-icon-dark .toggle-icon-sun-ray[data-v-8f507267] {
253
253
  transform: scale(0);
254
254
  }
255
255
 
256
- .toggle-icon-dark .toggle-icon-moon-mask[data-v-60be8692] {
256
+ .toggle-icon-dark .toggle-icon-moon-mask[data-v-8f507267] {
257
257
  transform: translate3d(0, 0, 0);
258
258
  }
259
259
 
@@ -274,13 +274,13 @@
274
274
  word-break: normal;
275
275
  word-wrap: normal;
276
276
  tab-size: 4;
277
- line-height: 1.4;
278
277
  }
279
278
 
280
279
  .scalar-app code.hljs {
281
280
  all: unset;
282
281
  font-size: inherit;
283
282
  color: var(--scalar-color-2);
283
+ line-height: 1.4;
284
284
  font-family: var(--scalar-font-code);
285
285
  counter-reset: linenumber;
286
286
  }
@@ -1028,22 +1028,22 @@
1028
1028
  display: none;
1029
1029
  }
1030
1030
 
1031
- .scalar-modal-layout[data-v-5bb1dcc2] {
1032
- animation: .3s ease-in-out forwards fadein-layout-5bb1dcc2;
1031
+ .scalar-modal-layout[data-v-b002945c] {
1032
+ animation: .3s ease-in-out forwards fadein-layout-b002945c;
1033
1033
  }
1034
1034
 
1035
- .scalar-modal[data-v-5bb1dcc2] {
1035
+ .scalar-modal[data-v-b002945c] {
1036
1036
  box-shadow: var(--scalar-shadow-2);
1037
- animation: .3s ease-in-out .1s forwards fadein-modal-5bb1dcc2;
1037
+ animation: .3s ease-in-out .1s forwards fadein-modal-b002945c;
1038
1038
  transform: translate3d(0, 10px, 0);
1039
1039
  }
1040
1040
 
1041
- .scalar-modal-layout-full[data-v-5bb1dcc2] {
1041
+ .scalar-modal-layout-full[data-v-b002945c] {
1042
1042
  opacity: 1 !important;
1043
1043
  background: none !important;
1044
1044
  }
1045
1045
 
1046
- .modal-content-search .modal-body[data-v-5bb1dcc2] {
1046
+ .modal-content-search .modal-body[data-v-b002945c] {
1047
1047
  flex-direction: column;
1048
1048
  max-height: 440px;
1049
1049
  padding: 0;
@@ -1052,13 +1052,13 @@
1052
1052
  }
1053
1053
 
1054
1054
  @media (max-width: 720px) and (max-height: 480px) {
1055
- .scalar-modal-layout .scalar-modal[data-v-5bb1dcc2] {
1055
+ .scalar-modal-layout .scalar-modal[data-v-b002945c] {
1056
1056
  max-height: 90svh;
1057
1057
  margin-top: 5svh;
1058
1058
  }
1059
1059
  }
1060
1060
 
1061
- @keyframes fadein-layout-5bb1dcc2 {
1061
+ @keyframes fadein-layout-b002945c {
1062
1062
  0% {
1063
1063
  opacity: 0;
1064
1064
  }
@@ -1068,7 +1068,7 @@
1068
1068
  }
1069
1069
  }
1070
1070
 
1071
- @keyframes fadein-modal-5bb1dcc2 {
1071
+ @keyframes fadein-modal-b002945c {
1072
1072
  0% {
1073
1073
  opacity: 0;
1074
1074
  transform: translate3d(0, 10px, 0);
@@ -1080,10 +1080,10 @@
1080
1080
  }
1081
1081
  }
1082
1082
 
1083
- .full-size-styles[data-v-5bb1dcc2] {
1083
+ .full-size-styles[data-v-b002945c] {
1084
1084
  margin: initial;
1085
1085
  border-right: var(--scalar-border-width) solid var(--scalar-border-color);
1086
- animation: .3s ease-in-out forwards fadein-layout-5bb1dcc2;
1086
+ animation: .3s ease-in-out forwards fadein-layout-b002945c;
1087
1087
  left: 0;
1088
1088
  transform: translate3d(0, 0, 0);
1089
1089
  background-color: var(--scalar-background-1) !important;
@@ -1095,12 +1095,12 @@
1095
1095
  }
1096
1096
 
1097
1097
  @media (min-width: 800px) {
1098
- .full-size-styles[data-v-5bb1dcc2] {
1098
+ .full-size-styles[data-v-b002945c] {
1099
1099
  width: 50dvw !important;
1100
1100
  }
1101
1101
  }
1102
1102
 
1103
- .full-size-styles[data-v-5bb1dcc2]:after {
1103
+ .full-size-styles[data-v-b002945c]:after {
1104
1104
  content: "";
1105
1105
  width: 50dvw;
1106
1106
  height: 100dvh;
@@ -1109,15 +1109,15 @@
1109
1109
  right: -50dvw;
1110
1110
  }
1111
1111
 
1112
- .group\/item > * > .scalar-sidebar-indent .scalar-sidebar-indent-border[data-v-3e080c68] {
1112
+ .group\/item > * > .scalar-sidebar-indent .scalar-sidebar-indent-border[data-v-b2388a0c] {
1113
1113
  inset-block: -1px;
1114
1114
  }
1115
1115
 
1116
- .group\/item:first-child > * > .scalar-sidebar-indent .scalar-sidebar-indent-border[data-v-3e080c68] {
1116
+ .group\/item:first-child > * > .scalar-sidebar-indent .scalar-sidebar-indent-border[data-v-b2388a0c] {
1117
1117
  top: 0;
1118
1118
  }
1119
1119
 
1120
- .group\/item:last-child > * > .scalar-sidebar-indent .scalar-sidebar-indent-border[data-v-3e080c68] {
1120
+ .group\/item:last-child > * > .scalar-sidebar-indent .scalar-sidebar-indent-border[data-v-b2388a0c] {
1121
1121
  bottom: 0;
1122
1122
  }
1123
1123
 
@@ -1354,22 +1354,22 @@
1354
1354
  inherits: false
1355
1355
  }
1356
1356
 
1357
- .scalar-virtual-text-search-input[data-v-95edadbb]::-webkit-search-cancel-button {
1357
+ .scalar-virtual-text-search-input[data-v-b843dc7d]::-webkit-search-cancel-button {
1358
1358
  display: none;
1359
1359
  }
1360
1360
 
1361
- .scalar-virtual-text[data-v-77b9d685]:focus {
1361
+ .scalar-virtual-text[data-v-50a0b01e]:focus {
1362
1362
  outline: none;
1363
1363
  }
1364
1364
 
1365
- .scalar-virtual-text-highlight[data-v-77b9d685] {
1365
+ .scalar-virtual-text-highlight[data-v-50a0b01e] {
1366
1366
  background: var(--scalar-background-accent);
1367
1367
  color: inherit;
1368
1368
  border-radius: var(--scalar-radius);
1369
1369
  padding: 1px 0;
1370
1370
  }
1371
1371
 
1372
- .scalar-virtual-text-highlight-active[data-v-77b9d685] {
1372
+ .scalar-virtual-text-highlight-active[data-v-50a0b01e] {
1373
1373
  background: var(--scalar-color-accent);
1374
1374
  color: var(--scalar-background-1);
1375
1375
  border-radius: var(--scalar-radius);
@@ -1943,38 +1943,38 @@ input[data-v-029a43f5]::placeholder {
1943
1943
  scrollbar-width: none;
1944
1944
  }
1945
1945
 
1946
- .request-section-content[data-v-f9196c85] {
1946
+ .request-section-content[data-v-87ab23d9] {
1947
1947
  --scalar-border-width: .5px;
1948
1948
  }
1949
1949
 
1950
- .request-section-content-filter[data-v-f9196c85] {
1950
+ .request-section-content-filter[data-v-87ab23d9] {
1951
1951
  box-shadow: 0 -10px 0 10px var(--scalar-background-1);
1952
1952
  }
1953
1953
 
1954
- .request-item:focus-within .request-meta-buttons[data-v-f9196c85] {
1954
+ .request-item:focus-within .request-meta-buttons[data-v-87ab23d9] {
1955
1955
  opacity: 1;
1956
1956
  }
1957
1957
 
1958
- .group-hover-input[data-v-f9196c85] {
1958
+ .group-hover-input[data-v-87ab23d9] {
1959
1959
  border-width: var(--scalar-border-width);
1960
1960
  border-color: #0000;
1961
1961
  }
1962
1962
 
1963
- .group:hover .group-hover-input[data-v-f9196c85] {
1963
+ .group:hover .group-hover-input[data-v-87ab23d9] {
1964
1964
  background: var(--scalar-background-1);
1965
1965
  }
1966
1966
 
1967
1967
  @supports (color: color-mix(in lab, red, red)) {
1968
- .group:hover .group-hover-input[data-v-f9196c85] {
1968
+ .group:hover .group-hover-input[data-v-87ab23d9] {
1969
1969
  background: color-mix(in srgb, var(--scalar-background-1), var(--scalar-background-2));
1970
1970
  }
1971
1971
  }
1972
1972
 
1973
- .group:hover .group-hover-input[data-v-f9196c85] {
1973
+ .group:hover .group-hover-input[data-v-87ab23d9] {
1974
1974
  border-color: var(--scalar-border-color);
1975
1975
  }
1976
1976
 
1977
- .group-hover-input[data-v-f9196c85]:focus {
1977
+ .group-hover-input[data-v-87ab23d9]:focus {
1978
1978
  border-color: var(--scalar-border-color) !important;
1979
1979
  background: none !important;
1980
1980
  }
@@ -2658,6 +2658,10 @@ input[data-v-029a43f5]::placeholder {
2658
2658
  margin-bottom: calc(var(--scalar-border-width) * -1);
2659
2659
  }
2660
2660
 
2661
+ .scalar-app .-mb-px {
2662
+ margin-bottom: -1px;
2663
+ }
2664
+
2661
2665
  .scalar-app .ml-auto {
2662
2666
  margin-left: auto;
2663
2667
  }
@@ -3123,6 +3127,10 @@ input[data-v-029a43f5]::placeholder {
3123
3127
  flex-direction: row;
3124
3128
  }
3125
3129
 
3130
+ .scalar-app .flex-nowrap {
3131
+ flex-wrap: nowrap;
3132
+ }
3133
+
3126
3134
  .scalar-app .flex-wrap {
3127
3135
  flex-wrap: wrap;
3128
3136
  }
@@ -4383,11 +4391,23 @@ input[data-v-029a43f5]::placeholder {
4383
4391
  -webkit-app-region: drag;
4384
4392
  }
4385
4393
 
4394
+ .scalar-app .\[\&_\.scalar-card-header-title\]\:flex-1 .scalar-card-header-title {
4395
+ flex: 1;
4396
+ }
4397
+
4398
+ .scalar-app .\[\&_\.scalar-card-header-title\]\:whitespace-normal .scalar-card-header-title {
4399
+ white-space: normal;
4400
+ }
4401
+
4386
4402
  .scalar-app .\[\&_svg\]\:size-\[var\(--schema-glyph-icon\,16px\)\] svg {
4387
4403
  width: var(--schema-glyph-icon, 16px);
4388
4404
  height: var(--schema-glyph-icon, 16px);
4389
4405
  }
4390
4406
 
4407
+ .scalar-app .\[\&\>div\:last-child\]\:shrink-0 > div:last-child {
4408
+ flex-shrink: 0;
4409
+ }
4410
+
4391
4411
  .scalar-app .\[\&\[hidden\=until-found\]\]\:border-s-0[hidden="until-found"] {
4392
4412
  border-inline-start-style: var(--tw-border-style);
4393
4413
  border-inline-start-width: 0;
@@ -1,7 +1,7 @@
1
1
  import _plugin_vue_export_helper_default from "../../_virtual/_plugin-vue_export-helper.js";
2
- import Catalog_vue_vue_type_script_setup_true_lang_default from "./Catalog.vue.script.js";
3
- /* empty css */
4
- /* empty css */
2
+ import Catalog_vue_vue_type_script_setup_true_lang_default from "./Catalog.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ /* empty css */
5
5
  //#region src/views/Catalog/Catalog.vue
6
6
  var Catalog_default = /*#__PURE__*/ _plugin_vue_export_helper_default(Catalog_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-18b2aea2"]]);
7
7
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"Catalog.vue.js","names":[],"sources":["../../../src/views/Catalog/Catalog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components/icon'\nimport { ScalarModal, type ModalState } from '@scalar/components/modal'\nimport { ScalarSearchInput } from '@scalar/components/search-input'\nimport { computed } from 'vue'\n\nimport { useSearch } from '@/hooks/use-search'\nimport { useState } from '@/state/state'\n\ndefineProps<{\n modal: ModalState\n}>()\n\nconst search = useSearch()\n\nconst state = useState()\n\nconst searchOptions = computed(() =>\n search.results.value\n .filter((r) => {\n return !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 <ScalarModal\n class=\"catalogModal\"\n :state=\"modal\">\n <ScalarSearchInput\n autofocus\n class=\"searchInput\"\n :modelValue=\"search.query.value\"\n @update:modelValue=\"(v) => (search.query.value = v ?? '')\" />\n <template v-if=\"searchOptions.length\">\n <div class=\"catalog custom-scroll\">\n <button\n v-for=\"option in searchOptions\"\n :key=\"option.id\"\n class=\"item\"\n type=\"button\"\n @click=\"\n () => {\n state.addDocument(option)\n modal.hide()\n }\n \">\n <div class=\"left\">\n <img\n v-if=\"option.logoUrl\"\n class=\"logo\"\n :src=\"option.logoUrl\" />\n <ScalarIcon\n v-else\n class=\"logo\"\n logo=\"Openapi\" />\n </div>\n\n <div class=\"right\">\n <div class=\"item-top\">\n <span>{{ option.title }}</span>\n\n <span class=\"version\">v{{ option.currentVersion }}</span>\n </div>\n\n <span class=\"description\">\n @{{ option.namespace }}/{{ option.slug }}\n </span>\n </div>\n </button>\n </div>\n </template>\n </ScalarModal>\n</template>\n\n<style>\n.catalogModal .scalar-modal-body {\n display: flex;\n flex-direction: column;\n}\n</style>\n\n<style scoped>\n.searchInput {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n margin-bottom: 10px;\n}\n.catalog {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n overflow-y: scroll;\n font-size: var(--scalar-font-size-3);\n}\n.item {\n display: flex;\n padding: 15px;\n gap: 10px;\n align-items: center;\n background-color: var(--scalar-background-2);\n border-radius: var(--scalar-radius-lg);\n transition: background-color 160ms ease;\n}\n.item:hover {\n background-color: color-mix(\n in srgb,\n var(--scalar-background-3),\n transparent 40%\n ) !important;\n}\n.left {\n align-items: center;\n}\n.right {\n display: flex;\n flex-direction: column;\n}\n.logo {\n width: 25px;\n}\n.item-top {\n display: flex;\n gap: 10px;\n}\n.version {\n background: var(--scalar-background-3);\n padding: 2px 5px;\n border-radius: var(--scalar-radius);\n font-size: var(--scalar-font-size-5);\n color: var(--scalar-color-3);\n}\n.description {\n color: var(--scalar-color-2);\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"Catalog.vue.js","names":["_sfc_main"],"sources":["../../../src/views/Catalog/Catalog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components/icon'\nimport { ScalarModal, type ModalState } from '@scalar/components/modal'\nimport { ScalarSearchInput } from '@scalar/components/search-input'\nimport { computed } from 'vue'\n\nimport { useSearch } from '@/hooks/use-search'\nimport { useState } from '@/state/state'\n\ndefineProps<{\n modal: ModalState\n}>()\n\nconst search = useSearch()\n\nconst state = useState()\n\nconst searchOptions = computed(() =>\n search.results.value\n .filter((r) => {\n return !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 <ScalarModal\n class=\"catalogModal\"\n :state=\"modal\">\n <ScalarSearchInput\n autofocus\n class=\"searchInput\"\n :modelValue=\"search.query.value\"\n @update:modelValue=\"(v) => (search.query.value = v ?? '')\" />\n <template v-if=\"searchOptions.length\">\n <div class=\"catalog custom-scroll\">\n <button\n v-for=\"option in searchOptions\"\n :key=\"option.id\"\n class=\"item\"\n type=\"button\"\n @click=\"\n () => {\n state.addDocument(option)\n modal.hide()\n }\n \">\n <div class=\"left\">\n <img\n v-if=\"option.logoUrl\"\n class=\"logo\"\n :src=\"option.logoUrl\" />\n <ScalarIcon\n v-else\n class=\"logo\"\n logo=\"Openapi\" />\n </div>\n\n <div class=\"right\">\n <div class=\"item-top\">\n <span>{{ option.title }}</span>\n\n <span class=\"version\">v{{ option.currentVersion }}</span>\n </div>\n\n <span class=\"description\">\n @{{ option.namespace }}/{{ option.slug }}\n </span>\n </div>\n </button>\n </div>\n </template>\n </ScalarModal>\n</template>\n\n<style>\n.catalogModal .scalar-modal-body {\n display: flex;\n flex-direction: column;\n}\n</style>\n\n<style scoped>\n.searchInput {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n margin-bottom: 10px;\n}\n.catalog {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n overflow-y: scroll;\n font-size: var(--scalar-font-size-3);\n}\n.item {\n display: flex;\n padding: 15px;\n gap: 10px;\n align-items: center;\n background-color: var(--scalar-background-2);\n border-radius: var(--scalar-radius-lg);\n transition: background-color 160ms ease;\n}\n.item:hover {\n background-color: color-mix(\n in srgb,\n var(--scalar-background-3),\n transparent 40%\n ) !important;\n}\n.left {\n align-items: center;\n}\n.right {\n display: flex;\n flex-direction: column;\n}\n.logo {\n width: 25px;\n}\n.item-top {\n display: flex;\n gap: 10px;\n}\n.version {\n background: var(--scalar-background-3);\n padding: 2px 5px;\n border-radius: var(--scalar-radius);\n font-size: var(--scalar-font-size-5);\n color: var(--scalar-color-3);\n}\n.description {\n color: var(--scalar-color-2);\n}\n</style>\n"],"mappings":""}
@@ -66,4 +66,4 @@ var Catalog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
66
66
  //#endregion
67
67
  export { Catalog_vue_vue_type_script_setup_true_lang_default as default };
68
68
 
69
- //# sourceMappingURL=Catalog.vue.script.js.map
69
+ //# sourceMappingURL=Catalog.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Catalog.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_unref","_withCtx","_createVNode","_createElementBlock","_Fragment","_renderList","_createElementVNode","_toDisplayString","_createCommentVNode"],"sources":["../../../src/views/Catalog/Catalog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components/icon'\nimport { ScalarModal, type ModalState } from '@scalar/components/modal'\nimport { ScalarSearchInput } from '@scalar/components/search-input'\nimport { computed } from 'vue'\n\nimport { useSearch } from '@/hooks/use-search'\nimport { useState } from '@/state/state'\n\ndefineProps<{\n modal: ModalState\n}>()\n\nconst search = useSearch()\n\nconst state = useState()\n\nconst searchOptions = computed(() =>\n search.results.value\n .filter((r) => {\n return !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 <ScalarModal\n class=\"catalogModal\"\n :state=\"modal\">\n <ScalarSearchInput\n autofocus\n class=\"searchInput\"\n :modelValue=\"search.query.value\"\n @update:modelValue=\"(v) => (search.query.value = v ?? '')\" />\n <template v-if=\"searchOptions.length\">\n <div class=\"catalog custom-scroll\">\n <button\n v-for=\"option in searchOptions\"\n :key=\"option.id\"\n class=\"item\"\n type=\"button\"\n @click=\"\n () => {\n state.addDocument(option)\n modal.hide()\n }\n \">\n <div class=\"left\">\n <img\n v-if=\"option.logoUrl\"\n class=\"logo\"\n :src=\"option.logoUrl\" />\n <ScalarIcon\n v-else\n class=\"logo\"\n logo=\"Openapi\" />\n </div>\n\n <div class=\"right\">\n <div class=\"item-top\">\n <span>{{ option.title }}</span>\n\n <span class=\"version\">v{{ option.currentVersion }}</span>\n </div>\n\n <span class=\"description\">\n @{{ option.namespace }}/{{ option.slug }}\n </span>\n </div>\n </button>\n </div>\n </template>\n </ScalarModal>\n</template>\n\n<style>\n.catalogModal .scalar-modal-body {\n display: flex;\n flex-direction: column;\n}\n</style>\n\n<style scoped>\n.searchInput {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n margin-bottom: 10px;\n}\n.catalog {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n overflow-y: scroll;\n font-size: var(--scalar-font-size-3);\n}\n.item {\n display: flex;\n padding: 15px;\n gap: 10px;\n align-items: center;\n background-color: var(--scalar-background-2);\n border-radius: var(--scalar-radius-lg);\n transition: background-color 160ms ease;\n}\n.item:hover {\n background-color: color-mix(\n in srgb,\n var(--scalar-background-3),\n transparent 40%\n ) !important;\n}\n.left {\n align-items: center;\n}\n.right {\n display: flex;\n flex-direction: column;\n}\n.logo {\n width: 25px;\n}\n.item-top {\n display: flex;\n gap: 10px;\n}\n.version {\n background: var(--scalar-background-3);\n padding: 2px 5px;\n border-radius: var(--scalar-radius);\n font-size: var(--scalar-font-size-5);\n color: var(--scalar-color-3);\n}\n.description {\n color: var(--scalar-color-2);\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAaA,MAAM,SAAS,UAAU;EAEzB,MAAM,QAAQ,SAAS;EAEvB,MAAM,gBAAgB,eACpB,OAAO,QAAQ,MACZ,QAAQ,MAAM;GACb,OAAO,CAAC,MAAM,kBAAkB,MAAM,MACnC,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,IACrD;EACF,CAAC,CAAA,CACA,KAAK,YAAY;GAChB,GAAG;GACH,OAAO,OAAO;GACd,IAAI,OAAO;EACb,EAAE,CACN;;GAIE,OAAAA,UAAA,GAAAC,YA8CcC,MAAA,WAAA,GAAA;IA7CZ,OAAM;IACL,OAAO,QAAA;;IACR,SAAAC,cAI+D,CAJ/DC,YAI+DF,MAAA,iBAAA,GAAA;KAH7D,WAAA;KACA,OAAM;KACL,YAAYA,MAAA,MAAA,CAAM,CAAC,MAAM;KACzB,uBAAiB,OAAA,OAAA,OAAA,MAAG,MAAO,MAAA,MAAA,CAAM,CAAC,MAAM,QAAQ,KAAC;I,6BACpC,cAAA,MAAc,UAC5BF,UAAA,GAAAK,mBAmCM,OAnCN,YAmCM,EAlCJL,UAAA,IAAA,GAAAK,mBAiCSC,UAAA,MAAAC,WAhCU,cAAA,QAAV,WAAM;KADf,OAAAP,UAAA,GAAAK,mBAiCS,UAAA;MA/BN,KAAK,OAAO;MACb,OAAM;MACN,MAAK;MACJ,e;OAA0C,MAAA,KAAA,CAAK,CAAC,YAAY,MAAM;OAAgB,QAAA,MAAM,KAAI;;K,IAM7FG,mBASM,OATN,YASM,CAPI,OAAO,WADfR,UAAA,GAAAK,mBAG0B,OAAA;;MADxB,OAAM;MACL,KAAK,OAAO;K,4BACfL,UAAA,GAAAC,YAGmBC,MAAA,UAAA,GAAA;;MADjB,OAAM;MACN,MAAK;K,OAGTM,mBAUM,OAVN,YAUM,CATJA,mBAIM,OAJN,YAIM,CAHJA,mBAA+B,QAAA,MAAAC,gBAAtB,OAAO,KAAK,GAAA,CAAA,GAErBD,mBAAyD,QAAzD,YAAsB,MAACC,gBAAG,OAAO,cAAc,GAAA,CAAA,C,IAGjDD,mBAEO,QAFP,YAA0B,OACvBC,gBAAG,OAAO,SAAS,IAAG,MAACA,gBAAG,OAAO,IAAI,GAAA,CAAA,C"}
@@ -1,6 +1,6 @@
1
1
  import _plugin_vue_export_helper_default from "../../_virtual/_plugin-vue_export-helper.js";
2
- import Chat_vue_vue_type_script_setup_true_lang_default from "./Chat.vue.script.js";
3
- /* empty css */
2
+ import Chat_vue_vue_type_script_setup_true_lang_default from "./Chat.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
4
  //#region src/views/Chat/Chat.vue
5
5
  var Chat_default = /*#__PURE__*/ _plugin_vue_export_helper_default(Chat_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-6573ec87"]]);
6
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.vue.js","names":[],"sources":["../../../src/views/Chat/Chat.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { reactive, toRef } from 'vue'\n\nimport { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '@/entities/tools/ask-for-authentication'\nimport { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME } from '@/entities/tools/execute-request'\nimport { SUMMARIZE_OPENAPI_SPECS_TOOL_NAME } from '@/entities/tools/get-openapi-specs-summary'\nimport { SEARCH_OPENAPI_OPERATIONS_TOOL_NAME } from '@/entities/tools/search-openapi-operations'\nimport { useState } from '@/state/state'\nimport AskForAuthentication from '@/views/Chat/Messages/AskForAuthentication.vue'\nimport ExecuteRequestTool from '@/views/Chat/Messages/ExecuteRequestTool.vue'\nimport GetOpenAPISpecsSummary from '@/views/Chat/Messages/GetOpenAPISpecsSummary.vue'\nimport SearchOpenAPIOperationsTool from '@/views/Chat/Messages/SearchOpenAPIOperationsTool.vue'\nimport Text from '@/views/Chat/Messages/Text.vue'\nimport PromptForm from '@/views/PromptForm.vue'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\nconst state = useState()\n</script>\n\n<template>\n <div class=\"chat\">\n <template\n v-for=\"message in state.chat.messages\"\n :key=\"message.id\">\n <template v-if=\"message.role === 'user'\">\n <div\n v-for=\"(part, index) in message.parts\"\n :key=\"`${message.id}-${index}`\"\n class=\"userMessage\">\n <p v-if=\"part.type === 'text'\">{{ part.text }}</p>\n </div>\n </template>\n <template v-if=\"message.role === 'assistant'\">\n <div\n v-for=\"(part, index) in message.parts\"\n :key=\"`${message.id}-${index}`\">\n <Text\n v-if=\"part.type === 'text'\"\n :messagePart=\"toRef(part)\" />\n <ExecuteRequestTool\n v-if=\"\n part.type ===\n (`tool-${EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME}` as const)\n \"\n :messagePart=\"toRef(part)\" />\n <SearchOpenAPIOperationsTool\n v-if=\"\n part.type ===\n (`tool-${SEARCH_OPENAPI_OPERATIONS_TOOL_NAME}` as const)\n \"\n :message=\"reactive(message)\"\n :messagePart=\"toRef(part)\" />\n <GetOpenAPISpecsSummary\n v-if=\"\n part.type ===\n (`tool-${SUMMARIZE_OPENAPI_SPECS_TOOL_NAME}` as const)\n \"\n :message=\"reactive(message)\"\n :messagePart=\"toRef(part)\" />\n <AskForAuthentication\n v-if=\"\n part.type ===\n (`tool-${ASK_FOR_AUTHENTICATION_TOOL_NAME}` as const)\n \"\n :message=\"reactive(message)\"\n :messagePart=\"toRef(part)\" />\n </div>\n </template>\n </template>\n <div class=\"spacer\"></div>\n </div>\n <div class=\"formContainer\">\n <PromptForm\n @submit=\"emit('submit')\"\n @uploadApi=\"emit('uploadApi')\" />\n </div>\n</template>\n\n<style scoped>\n.chat {\n flex: 1;\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 24px 0;\n max-width: 744px;\n}\n\n.userMessage {\n padding-top: 6px;\n padding-bottom: 6px;\n padding-inline: 16px;\n border-radius: var(--scalar-radius-3xl);\n background: var(--scalar-background-2);\n width: fit-content;\n max-width: 80%;\n margin-left: auto;\n font-size: 16px;\n line-height: 24px;\n color: var(--scalar-color-1);\n margin-bottom: 12px;\n}\ndiv + .userMessage {\n margin-top: 64px;\n}\n.chat > :deep(div:has(.executeRequestTool)) + div:has(.executeRequestTool) {\n margin-top: -12px;\n}\n.spacer {\n min-height: 280px;\n width: 100%;\n}\n\n.formContainer {\n position: fixed;\n bottom: 20px;\n width: 100%;\n max-width: 744px;\n z-index: 1;\n}\n.chat :deep(.markdown) {\n margin-bottom: 12px;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"Chat.vue.js","names":["_sfc_main"],"sources":["../../../src/views/Chat/Chat.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { reactive, toRef } from 'vue'\n\nimport { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '@/entities/tools/ask-for-authentication'\nimport { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME } from '@/entities/tools/execute-request'\nimport { SUMMARIZE_OPENAPI_SPECS_TOOL_NAME } from '@/entities/tools/get-openapi-specs-summary'\nimport { SEARCH_OPENAPI_OPERATIONS_TOOL_NAME } from '@/entities/tools/search-openapi-operations'\nimport { useState } from '@/state/state'\nimport AskForAuthentication from '@/views/Chat/Messages/AskForAuthentication.vue'\nimport ExecuteRequestTool from '@/views/Chat/Messages/ExecuteRequestTool.vue'\nimport GetOpenAPISpecsSummary from '@/views/Chat/Messages/GetOpenAPISpecsSummary.vue'\nimport SearchOpenAPIOperationsTool from '@/views/Chat/Messages/SearchOpenAPIOperationsTool.vue'\nimport Text from '@/views/Chat/Messages/Text.vue'\nimport PromptForm from '@/views/PromptForm.vue'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\nconst state = useState()\n</script>\n\n<template>\n <div class=\"chat\">\n <template\n v-for=\"message in state.chat.messages\"\n :key=\"message.id\">\n <template v-if=\"message.role === 'user'\">\n <div\n v-for=\"(part, index) in message.parts\"\n :key=\"`${message.id}-${index}`\"\n class=\"userMessage\">\n <p v-if=\"part.type === 'text'\">{{ part.text }}</p>\n </div>\n </template>\n <template v-if=\"message.role === 'assistant'\">\n <div\n v-for=\"(part, index) in message.parts\"\n :key=\"`${message.id}-${index}`\">\n <Text\n v-if=\"part.type === 'text'\"\n :messagePart=\"toRef(part)\" />\n <ExecuteRequestTool\n v-if=\"\n part.type ===\n (`tool-${EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME}` as const)\n \"\n :messagePart=\"toRef(part)\" />\n <SearchOpenAPIOperationsTool\n v-if=\"\n part.type ===\n (`tool-${SEARCH_OPENAPI_OPERATIONS_TOOL_NAME}` as const)\n \"\n :message=\"reactive(message)\"\n :messagePart=\"toRef(part)\" />\n <GetOpenAPISpecsSummary\n v-if=\"\n part.type ===\n (`tool-${SUMMARIZE_OPENAPI_SPECS_TOOL_NAME}` as const)\n \"\n :message=\"reactive(message)\"\n :messagePart=\"toRef(part)\" />\n <AskForAuthentication\n v-if=\"\n part.type ===\n (`tool-${ASK_FOR_AUTHENTICATION_TOOL_NAME}` as const)\n \"\n :message=\"reactive(message)\"\n :messagePart=\"toRef(part)\" />\n </div>\n </template>\n </template>\n <div class=\"spacer\"></div>\n </div>\n <div class=\"formContainer\">\n <PromptForm\n @submit=\"emit('submit')\"\n @uploadApi=\"emit('uploadApi')\" />\n </div>\n</template>\n\n<style scoped>\n.chat {\n flex: 1;\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 24px 0;\n max-width: 744px;\n}\n\n.userMessage {\n padding-top: 6px;\n padding-bottom: 6px;\n padding-inline: 16px;\n border-radius: var(--scalar-radius-3xl);\n background: var(--scalar-background-2);\n width: fit-content;\n max-width: 80%;\n margin-left: auto;\n font-size: 16px;\n line-height: 24px;\n color: var(--scalar-color-1);\n margin-bottom: 12px;\n}\ndiv + .userMessage {\n margin-top: 64px;\n}\n.chat > :deep(div:has(.executeRequestTool)) + div:has(.executeRequestTool) {\n margin-top: -12px;\n}\n.spacer {\n min-height: 280px;\n width: 100%;\n}\n\n.formContainer {\n position: fixed;\n bottom: 20px;\n width: 100%;\n max-width: 744px;\n z-index: 1;\n}\n.chat :deep(.markdown) {\n margin-bottom: 12px;\n}\n</style>\n"],"mappings":""}
@@ -64,4 +64,4 @@ var Chat_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
64
64
  //#endregion
65
65
  export { Chat_vue_vue_type_script_setup_true_lang_default as default };
66
66
 
67
- //# sourceMappingURL=Chat.vue.script.js.map
67
+ //# sourceMappingURL=Chat.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_Fragment","_createElementVNode","_renderList","_unref","_toDisplayString","_createCommentVNode","_createBlock","Text","ExecuteRequestTool","SearchOpenAPIOperationsTool","GetOpenAPISpecsSummary","AskForAuthentication","_createVNode","PromptForm"],"sources":["../../../src/views/Chat/Chat.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { reactive, toRef } from 'vue'\n\nimport { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '@/entities/tools/ask-for-authentication'\nimport { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME } from '@/entities/tools/execute-request'\nimport { SUMMARIZE_OPENAPI_SPECS_TOOL_NAME } from '@/entities/tools/get-openapi-specs-summary'\nimport { SEARCH_OPENAPI_OPERATIONS_TOOL_NAME } from '@/entities/tools/search-openapi-operations'\nimport { useState } from '@/state/state'\nimport AskForAuthentication from '@/views/Chat/Messages/AskForAuthentication.vue'\nimport ExecuteRequestTool from '@/views/Chat/Messages/ExecuteRequestTool.vue'\nimport GetOpenAPISpecsSummary from '@/views/Chat/Messages/GetOpenAPISpecsSummary.vue'\nimport SearchOpenAPIOperationsTool from '@/views/Chat/Messages/SearchOpenAPIOperationsTool.vue'\nimport Text from '@/views/Chat/Messages/Text.vue'\nimport PromptForm from '@/views/PromptForm.vue'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\nconst state = useState()\n</script>\n\n<template>\n <div class=\"chat\">\n <template\n v-for=\"message in state.chat.messages\"\n :key=\"message.id\">\n <template v-if=\"message.role === 'user'\">\n <div\n v-for=\"(part, index) in message.parts\"\n :key=\"`${message.id}-${index}`\"\n class=\"userMessage\">\n <p v-if=\"part.type === 'text'\">{{ part.text }}</p>\n </div>\n </template>\n <template v-if=\"message.role === 'assistant'\">\n <div\n v-for=\"(part, index) in message.parts\"\n :key=\"`${message.id}-${index}`\">\n <Text\n v-if=\"part.type === 'text'\"\n :messagePart=\"toRef(part)\" />\n <ExecuteRequestTool\n v-if=\"\n part.type ===\n (`tool-${EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME}` as const)\n \"\n :messagePart=\"toRef(part)\" />\n <SearchOpenAPIOperationsTool\n v-if=\"\n part.type ===\n (`tool-${SEARCH_OPENAPI_OPERATIONS_TOOL_NAME}` as const)\n \"\n :message=\"reactive(message)\"\n :messagePart=\"toRef(part)\" />\n <GetOpenAPISpecsSummary\n v-if=\"\n part.type ===\n (`tool-${SUMMARIZE_OPENAPI_SPECS_TOOL_NAME}` as const)\n \"\n :message=\"reactive(message)\"\n :messagePart=\"toRef(part)\" />\n <AskForAuthentication\n v-if=\"\n part.type ===\n (`tool-${ASK_FOR_AUTHENTICATION_TOOL_NAME}` as const)\n \"\n :message=\"reactive(message)\"\n :messagePart=\"toRef(part)\" />\n </div>\n </template>\n </template>\n <div class=\"spacer\"></div>\n </div>\n <div class=\"formContainer\">\n <PromptForm\n @submit=\"emit('submit')\"\n @uploadApi=\"emit('uploadApi')\" />\n </div>\n</template>\n\n<style scoped>\n.chat {\n flex: 1;\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 24px 0;\n max-width: 744px;\n}\n\n.userMessage {\n padding-top: 6px;\n padding-bottom: 6px;\n padding-inline: 16px;\n border-radius: var(--scalar-radius-3xl);\n background: var(--scalar-background-2);\n width: fit-content;\n max-width: 80%;\n margin-left: auto;\n font-size: 16px;\n line-height: 24px;\n color: var(--scalar-color-1);\n margin-bottom: 12px;\n}\ndiv + .userMessage {\n margin-top: 64px;\n}\n.chat > :deep(div:has(.executeRequestTool)) + div:has(.executeRequestTool) {\n margin-top: -12px;\n}\n.spacer {\n min-height: 280px;\n width: 100%;\n}\n\n.formContainer {\n position: fixed;\n bottom: 20px;\n width: 100%;\n max-width: 744px;\n z-index: 1;\n}\n.chat :deep(.markdown) {\n margin-bottom: 12px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAeA,MAAM,OAAO;EAKb,MAAM,QAAQ,SAAS;;G,wDAIrBG,mBAkDM,OAlDN,YAkDM,EAjDJH,UAAA,IAAA,GAAAC,mBA+CWC,UAAA,MAAAE,WA9CSC,MAAA,KAAA,CAAK,CAAC,KAAK,WAAtB,YAAO;I,mDACR,KAAA,QAAQ,G,IACE,QAAQ,SAAI,UAC1BL,UAAA,IAAA,GAAAC,mBAKMC,UAAA,EAAA,KAAA,EAAA,GAAAE,WAJoB,QAAQ,QAAxB,MAAM,UAAK;KADrB,OAAAJ,UAAA,GAAAC,mBAKM,OAAA;MAHH,KAAG,GAAK,QAAQ,GAAE,GAAI;MACvB,OAAM;K,IACG,KAAK,SAAI,UAAlBD,UAAA,GAAAC,mBAAkD,KAAA,YAAAK,gBAAhB,KAAK,IAAI,GAAA,CAAA,K;I,0CAG/B,QAAQ,SAAI,eAC1BN,UAAA,IAAA,GAAAC,mBAiCMC,UAAA,EAAA,KAAA,EAAA,GAAAE,WAhCoB,QAAQ,QAAxB,MAAM,UAAK;KADrB,OAAAJ,UAAA,GAAAC,mBAiCM,OAAA,EA/BH,KAAG,GAAK,QAAQ,GAAE,GAAI,Q;MAEf,KAAK,SAAI,UADjBD,UAAA,GAAAQ,YAE+BC,cAAA;;OAA5B,aAAa,MAAM,IAAI;;MAEH,KAAK,SAAgC,QAAAJ,MAAAA,iBAAA,OAD5DL,UAAA,GAAAQ,YAK+BE,4BAAA;;OAA5B,aAAa,MAAM,IAAI;;MAEH,KAAK,SAAgC,QAAAL,MAAAA,2BAAA,OAD5DL,UAAA,GAAAQ,YAM+BG,qCAAA;;OAD5B,SAAS,SAAS,OAAO;OACzB,aAAa,MAAM,IAAI;;MAEH,KAAK,SAAgC,QAAAN,MAAAA,yBAAA,OAD5DL,UAAA,GAAAQ,YAM+BI,gCAAA;;OAD5B,SAAS,SAAS,OAAO;OACzB,aAAa,MAAM,IAAI;;MAEH,KAAK,SAAgC,QAAAP,MAAAA,wBAAA,OAD5DL,UAAA,GAAAQ,YAM+BK,8BAAA;;OAD5B,SAAS,SAAS,OAAO;OACzB,aAAa,MAAM,IAAI;;;;G,WAIhC,OAAA,OAAA,OAAA,KAAAV,mBAA0B,OAAA,EAArB,OAAM,SAAQ,GAAA,MAAA,EAAA,E,IAErBA,mBAIM,OAJN,YAIM,CAHJW,YAEmCC,oBAAA;IADhC,UAAM,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;IACZ,aAAS,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,WAAA"}
@@ -1,6 +1,6 @@
1
1
  import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
2
- import AskForAuthentication_vue_vue_type_script_setup_true_lang_default from "./AskForAuthentication.vue.script.js";
3
- /* empty css */
2
+ import AskForAuthentication_vue_vue_type_script_setup_true_lang_default from "./AskForAuthentication.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
4
  //#region src/views/Chat/Messages/AskForAuthentication.vue
5
5
  var AskForAuthentication_default = /*#__PURE__*/ _plugin_vue_export_helper_default(AskForAuthentication_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-508e8718"]]);
6
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"AskForAuthentication.vue.js","names":[],"sources":["../../../../src/views/Chat/Messages/AskForAuthentication.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarIconArrowRight } from '@scalar/icons'\nimport {\n getActiveEnvironment,\n getSelectedServer,\n getServers,\n} from '@scalar/workspace-store/request-example'\nimport { isOpenApiDocument } from '@scalar/workspace-store/schemas/type-guards'\nimport type { ToolUIPart } from 'ai'\nimport { computed, type Ref } from 'vue'\n\nimport AuthenticationProvided from '@/components/AuthenticationProvided.vue'\nimport AuthenticationRequired from '@/components/AuthenticationRequired.vue'\nimport { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '@/entities/tools/ask-for-authentication'\nimport { useState, type Tools } from '@/state/state'\nimport Auth from '@/views/Settings/Auth.vue'\n\nconst { messagePart } = defineProps<{\n messagePart: Ref<\n ToolUIPart<Pick<Tools, typeof ASK_FOR_AUTHENTICATION_TOOL_NAME>>\n >\n}>()\n\nconst { workspaceStore, eventBus, config, chat } = useState()\n\nconst documentName = computed(() => messagePart.value.input?.documentName)\n\nconst document = computed(() => {\n if (!documentName.value) {\n return\n }\n\n const doc = workspaceStore.workspace.documents[documentName.value]\n return isOpenApiDocument(doc) ? doc : undefined\n})\n\nconst environment = computed(() => {\n if (!document.value) {\n return\n }\n\n return getActiveEnvironment(workspaceStore, document.value).environment\n})\n\nconst selectedServer = computed(() => {\n if (!document.value) {\n return\n }\n\n const servers = getServers(document.value.servers, {\n documentUrl: document.value['x-scalar-original-source-url'],\n })\n\n return getSelectedServer(document.value, null, null, servers)\n})\n\nconst isAuthenticationExpanded = computed(\n () => documentName.value && environment.value && selectedServer.value,\n)\n\nasync function authorizeClicked() {\n await chat.addToolOutput({\n toolCallId: messagePart.value.toolCallId,\n output: 'Authentication provided.',\n tool: ASK_FOR_AUTHENTICATION_TOOL_NAME,\n state: 'output-available',\n })\n}\n</script>\n\n<template>\n <div\n class=\"askForAuthentication\"\n :class=\"{\n open: isAuthenticationExpanded,\n }\">\n <p\n v-if=\"messagePart.value.state === 'output-error'\"\n class=\"text-c-2 py-3\"\n role=\"status\">\n {{ messagePart.value.errorText }}\n </p>\n <div class=\"toggleButton\">\n <AuthenticationProvided\n v-if=\"messagePart.value.state === 'output-available'\" />\n <AuthenticationRequired\n v-if=\"messagePart.value.state === 'input-available'\" />\n <ScalarButton\n v-if=\"messagePart.value.state === 'input-available'\"\n class=\"authorizeButton\"\n size=\"xs\"\n @click=\"authorizeClicked\">\n Authorize\n <ScalarIconArrowRight weight=\"bold\" />\n </ScalarButton>\n </div>\n <div class=\"authContent\">\n <div class=\"authContentInner\">\n <Auth\n v-if=\"documentName && document && environment && selectedServer\"\n :authStore=\"workspaceStore.auth\"\n :document\n :environment\n :eventBus\n :name=\"documentName\"\n :options=\"config\"\n :selectedServer />\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.askForAuthentication {\n display: flex;\n flex-direction: column;\n width: 100%;\n position: relative;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n margin-bottom: 12px;\n box-shadow:\n 0 var(--scalar-border-width) 0 var(--scalar-background-1),\n 0 calc(-1 * var(--scalar-border-width)) 0 var(--scalar-background-1);\n padding: 0;\n}\n\n.authContent {\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 max-width: 520px;\n margin: auto;\n width: 100%;\n}\n.authContentInner :deep(> div) {\n margin: 36px 0 48px 0;\n}\n.authContent :deep(.markdown) {\n margin-bottom: 0 !important;\n}\n.askForAuthentication.open .authContent {\n grid-template-rows: 1fr;\n}\n\n.continueButton {\n align-self: flex-end;\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.authContentInner {\n min-height: 0;\n overflow: hidden;\n}\n\n.authorizeButton {\n background: var(--scalar-color-blue) !important;\n color: white !important;\n margin: 0 !important;\n z-index: 1;\n display: flex;\n gap: 5px;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"AskForAuthentication.vue.js","names":["_sfc_main"],"sources":["../../../../src/views/Chat/Messages/AskForAuthentication.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarIconArrowRight } from '@scalar/icons'\nimport {\n getActiveEnvironment,\n getSelectedServer,\n getServers,\n} from '@scalar/workspace-store/request-example'\nimport { isOpenApiDocument } from '@scalar/workspace-store/schemas/type-guards'\nimport type { ToolUIPart } from 'ai'\nimport { computed, type Ref } from 'vue'\n\nimport AuthenticationProvided from '@/components/AuthenticationProvided.vue'\nimport AuthenticationRequired from '@/components/AuthenticationRequired.vue'\nimport { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '@/entities/tools/ask-for-authentication'\nimport { useState, type Tools } from '@/state/state'\nimport Auth from '@/views/Settings/Auth.vue'\n\nconst { messagePart } = defineProps<{\n messagePart: Ref<\n ToolUIPart<Pick<Tools, typeof ASK_FOR_AUTHENTICATION_TOOL_NAME>>\n >\n}>()\n\nconst { workspaceStore, eventBus, config, chat } = useState()\n\nconst documentName = computed(() => messagePart.value.input?.documentName)\n\nconst document = computed(() => {\n if (!documentName.value) {\n return\n }\n\n const doc = workspaceStore.workspace.documents[documentName.value]\n return isOpenApiDocument(doc) ? doc : undefined\n})\n\nconst environment = computed(() => {\n if (!document.value) {\n return\n }\n\n return getActiveEnvironment(workspaceStore, document.value).environment\n})\n\nconst selectedServer = computed(() => {\n if (!document.value) {\n return\n }\n\n const servers = getServers(document.value.servers, {\n documentUrl: document.value['x-scalar-original-source-url'],\n })\n\n return getSelectedServer(document.value, null, null, servers)\n})\n\nconst isAuthenticationExpanded = computed(\n () => documentName.value && environment.value && selectedServer.value,\n)\n\nasync function authorizeClicked() {\n await chat.addToolOutput({\n toolCallId: messagePart.value.toolCallId,\n output: 'Authentication provided.',\n tool: ASK_FOR_AUTHENTICATION_TOOL_NAME,\n state: 'output-available',\n })\n}\n</script>\n\n<template>\n <div\n class=\"askForAuthentication\"\n :class=\"{\n open: isAuthenticationExpanded,\n }\">\n <p\n v-if=\"messagePart.value.state === 'output-error'\"\n class=\"text-c-2 py-3\"\n role=\"status\">\n {{ messagePart.value.errorText }}\n </p>\n <div class=\"toggleButton\">\n <AuthenticationProvided\n v-if=\"messagePart.value.state === 'output-available'\" />\n <AuthenticationRequired\n v-if=\"messagePart.value.state === 'input-available'\" />\n <ScalarButton\n v-if=\"messagePart.value.state === 'input-available'\"\n class=\"authorizeButton\"\n size=\"xs\"\n @click=\"authorizeClicked\">\n Authorize\n <ScalarIconArrowRight weight=\"bold\" />\n </ScalarButton>\n </div>\n <div class=\"authContent\">\n <div class=\"authContentInner\">\n <Auth\n v-if=\"documentName && document && environment && selectedServer\"\n :authStore=\"workspaceStore.auth\"\n :document\n :environment\n :eventBus\n :name=\"documentName\"\n :options=\"config\"\n :selectedServer />\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.askForAuthentication {\n display: flex;\n flex-direction: column;\n width: 100%;\n position: relative;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n margin-bottom: 12px;\n box-shadow:\n 0 var(--scalar-border-width) 0 var(--scalar-background-1),\n 0 calc(-1 * var(--scalar-border-width)) 0 var(--scalar-background-1);\n padding: 0;\n}\n\n.authContent {\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 max-width: 520px;\n margin: auto;\n width: 100%;\n}\n.authContentInner :deep(> div) {\n margin: 36px 0 48px 0;\n}\n.authContent :deep(.markdown) {\n margin-bottom: 0 !important;\n}\n.askForAuthentication.open .authContent {\n grid-template-rows: 1fr;\n}\n\n.continueButton {\n align-self: flex-end;\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.authContentInner {\n min-height: 0;\n overflow: hidden;\n}\n\n.authorizeButton {\n background: var(--scalar-color-blue) !important;\n color: white !important;\n margin: 0 !important;\n z-index: 1;\n display: flex;\n gap: 5px;\n}\n</style>\n"],"mappings":""}
@@ -87,4 +87,4 @@ var AskForAuthentication_vue_vue_type_script_setup_true_lang_default = /*@__PURE
87
87
  //#endregion
88
88
  export { AskForAuthentication_vue_vue_type_script_setup_true_lang_default as default };
89
89
 
90
- //# sourceMappingURL=AskForAuthentication.vue.script.js.map
90
+ //# sourceMappingURL=AskForAuthentication.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskForAuthentication.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_toDisplayString","_createCommentVNode","_createElementVNode","_createBlock","AuthenticationProvided","AuthenticationRequired","_unref","_withCtx","_createTextVNode","_createVNode","Auth"],"sources":["../../../../src/views/Chat/Messages/AskForAuthentication.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarIconArrowRight } from '@scalar/icons'\nimport {\n getActiveEnvironment,\n getSelectedServer,\n getServers,\n} from '@scalar/workspace-store/request-example'\nimport { isOpenApiDocument } from '@scalar/workspace-store/schemas/type-guards'\nimport type { ToolUIPart } from 'ai'\nimport { computed, type Ref } from 'vue'\n\nimport AuthenticationProvided from '@/components/AuthenticationProvided.vue'\nimport AuthenticationRequired from '@/components/AuthenticationRequired.vue'\nimport { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '@/entities/tools/ask-for-authentication'\nimport { useState, type Tools } from '@/state/state'\nimport Auth from '@/views/Settings/Auth.vue'\n\nconst { messagePart } = defineProps<{\n messagePart: Ref<\n ToolUIPart<Pick<Tools, typeof ASK_FOR_AUTHENTICATION_TOOL_NAME>>\n >\n}>()\n\nconst { workspaceStore, eventBus, config, chat } = useState()\n\nconst documentName = computed(() => messagePart.value.input?.documentName)\n\nconst document = computed(() => {\n if (!documentName.value) {\n return\n }\n\n const doc = workspaceStore.workspace.documents[documentName.value]\n return isOpenApiDocument(doc) ? doc : undefined\n})\n\nconst environment = computed(() => {\n if (!document.value) {\n return\n }\n\n return getActiveEnvironment(workspaceStore, document.value).environment\n})\n\nconst selectedServer = computed(() => {\n if (!document.value) {\n return\n }\n\n const servers = getServers(document.value.servers, {\n documentUrl: document.value['x-scalar-original-source-url'],\n })\n\n return getSelectedServer(document.value, null, null, servers)\n})\n\nconst isAuthenticationExpanded = computed(\n () => documentName.value && environment.value && selectedServer.value,\n)\n\nasync function authorizeClicked() {\n await chat.addToolOutput({\n toolCallId: messagePart.value.toolCallId,\n output: 'Authentication provided.',\n tool: ASK_FOR_AUTHENTICATION_TOOL_NAME,\n state: 'output-available',\n })\n}\n</script>\n\n<template>\n <div\n class=\"askForAuthentication\"\n :class=\"{\n open: isAuthenticationExpanded,\n }\">\n <p\n v-if=\"messagePart.value.state === 'output-error'\"\n class=\"text-c-2 py-3\"\n role=\"status\">\n {{ messagePart.value.errorText }}\n </p>\n <div class=\"toggleButton\">\n <AuthenticationProvided\n v-if=\"messagePart.value.state === 'output-available'\" />\n <AuthenticationRequired\n v-if=\"messagePart.value.state === 'input-available'\" />\n <ScalarButton\n v-if=\"messagePart.value.state === 'input-available'\"\n class=\"authorizeButton\"\n size=\"xs\"\n @click=\"authorizeClicked\">\n Authorize\n <ScalarIconArrowRight weight=\"bold\" />\n </ScalarButton>\n </div>\n <div class=\"authContent\">\n <div class=\"authContentInner\">\n <Auth\n v-if=\"documentName && document && environment && selectedServer\"\n :authStore=\"workspaceStore.auth\"\n :document\n :environment\n :eventBus\n :name=\"documentName\"\n :options=\"config\"\n :selectedServer />\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.askForAuthentication {\n display: flex;\n flex-direction: column;\n width: 100%;\n position: relative;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n margin-bottom: 12px;\n box-shadow:\n 0 var(--scalar-border-width) 0 var(--scalar-background-1),\n 0 calc(-1 * var(--scalar-border-width)) 0 var(--scalar-background-1);\n padding: 0;\n}\n\n.authContent {\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 max-width: 520px;\n margin: auto;\n width: 100%;\n}\n.authContentInner :deep(> div) {\n margin: 36px 0 48px 0;\n}\n.authContent :deep(.markdown) {\n margin-bottom: 0 !important;\n}\n.askForAuthentication.open .authContent {\n grid-template-rows: 1fr;\n}\n\n.continueButton {\n align-self: flex-end;\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.authContentInner {\n min-height: 0;\n overflow: hidden;\n}\n\n.authorizeButton {\n background: var(--scalar-color-blue) !important;\n color: white !important;\n margin: 0 !important;\n z-index: 1;\n display: flex;\n gap: 5px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAwBA,MAAM,EAAE,gBAAgB,UAAU,QAAQ,SAAS,SAAS;EAE5D,MAAM,eAAe,eAAe,QAAA,YAAY,MAAM,OAAO,YAAY;EAEzE,MAAM,WAAW,eAAe;GAC9B,IAAI,CAAC,aAAa,OAChB;GAGF,MAAM,MAAM,eAAe,UAAU,UAAU,aAAa;GAC5D,OAAO,kBAAkB,GAAG,IAAI,MAAM,KAAA;EACxC,CAAC;EAED,MAAM,cAAc,eAAe;GACjC,IAAI,CAAC,SAAS,OACZ;GAGF,OAAO,qBAAqB,gBAAgB,SAAS,KAAK,CAAC,CAAC;EAC9D,CAAC;EAED,MAAM,iBAAiB,eAAe;GACpC,IAAI,CAAC,SAAS,OACZ;GAGF,MAAM,UAAU,WAAW,SAAS,MAAM,SAAS,EACjD,aAAa,SAAS,MAAM,gCAC9B,CAAC;GAED,OAAO,kBAAkB,SAAS,OAAO,MAAM,MAAM,OAAO;EAC9D,CAAC;EAED,MAAM,2BAA2B,eACzB,aAAa,SAAS,YAAY,SAAS,eAAe,KAClE;EAEA,eAAe,mBAAmB;GAChC,MAAM,KAAK,cAAc;IACvB,YAAY,QAAA,YAAY,MAAM;IAC9B,QAAQ;IACR,MAAM;IACN,OAAO;GACT,CAAC;EACH;;GAIE,OAAAA,UAAA,GAAAC,mBAsCM,OAAA,EArCJ,OAAKC,eAAA,CAAC,wBAAsB,EACN,MAAA,yBAAA,M;IAId,QAAA,YAAY,MAAM,UAAK,kBAD/BF,UAAA,GAAAC,mBAKI,KALJ,YAKIE,gBADC,QAAA,YAAY,MAAM,SAAS,GAAA,CAAA,K;IAEhCE,mBAaM,OAbN,YAaM;KAXI,QAAA,YAAY,MAAM,UAAK,sBAD/BL,UAAA,GAAAM,YAC0DC,gCAAA,EAAA,KAAA,EAAA,CAAA,K;KAElD,QAAA,YAAY,MAAM,UAAK,qBAD/BP,UAAA,GAAAM,YACyDE,gCAAA,EAAA,KAAA,EAAA,CAAA,K;KAEjD,QAAA,YAAY,MAAM,UAAK,qBAD/BR,UAAA,GAAAM,YAOeG,MAAA,YAAA,GAAA;;MALb,OAAM;MACN,MAAK;MACJ,SAAO;;MAAkB,SAAAC,cAE1B,CAF0B,OAAA,OAAA,OAAA,KAAAC,gBAAA,eAE1B,EAAA,IAAAC,YAAsCH,MAAA,oBAAA,GAAA,EAAhB,QAAO,OAAM,CAAA,C;;;;IAGvCJ,mBAYM,OAZN,YAYM,CAXJA,mBAUM,OAVN,YAUM,CARI,aAAA,SAAgB,SAAA,SAAY,YAAA,SAAe,eAAA,SADnDL,UAAA,GAAAM,YAQoBO,cAAA;;KANjB,WAAWJ,MAAA,cAAA,CAAc,CAAC;KAC1B,UAAA,SAAA;KACA,aAAA,YAAA;KACA,UAAAA,MAAA,QAAA;KACA,MAAM,aAAA;KACN,SAASA,MAAA,MAAA;KACT,gBAAA,eAAA"}
@@ -1,6 +1,6 @@
1
1
  import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
2
- import ExecuteRequestTool_vue_vue_type_script_setup_true_lang_default from "./ExecuteRequestTool.vue.script.js";
3
- /* empty css */
2
+ import ExecuteRequestTool_vue_vue_type_script_setup_true_lang_default from "./ExecuteRequestTool.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
4
  //#region src/views/Chat/Messages/ExecuteRequestTool.vue
5
5
  var ExecuteRequestTool_default = /*#__PURE__*/ _plugin_vue_export_helper_default(ExecuteRequestTool_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-0c85bad4"]]);
6
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ExecuteRequestTool.vue.js","names":[],"sources":["../../../../src/views/Chat/Messages/ExecuteRequestTool.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { type ToolUIPart } from 'ai'\nimport { computed, type Ref } from 'vue'\n\nimport RequestPreview from '@/components/RequestPreview.vue'\nimport type { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME } from '@/entities/tools/execute-request'\nimport { requestPartRequiresApproval } from '@/hooks/use-chat-approvals'\nimport { useState, type Tools } from '@/state/state'\n\nconst { messagePart } = defineProps<{\n messagePart: Ref<\n ToolUIPart<Pick<Tools, typeof EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME>>\n >\n}>()\n\nconst state = useState()\n\nconst requestState = computed(() => {\n if (messagePart.value.state === 'input-streaming') {\n return 'buildingRequest'\n }\n\n if (\n messagePart.value.state === 'approval-responded' &&\n state.chat.status === 'submitted'\n ) {\n return 'sendingRequest'\n }\n\n if (requestPartRequiresApproval(messagePart.value)) {\n return 'requiresApproval'\n }\n\n if (messagePart.value.state === 'output-available') {\n return messagePart.value.output.success\n ? 'requestSucceeded'\n : 'requestFailed'\n }\n\n if (messagePart.value.state === 'output-error') {\n return 'rejected'\n }\n\n return null\n})\n</script>\n\n<template>\n <div class=\"executeRequestTool\">\n <p\n v-if=\"messagePart.value.state === 'output-error'\"\n class=\"text-c-2 py-3\"\n role=\"status\">\n {{ messagePart.value.errorText }}\n </p>\n <RequestPreview\n v-else-if=\"requestState\"\n :request=\"messagePart.value.input\"\n :response=\"messagePart.value.output\"\n :state=\"requestState\" />\n </div>\n</template>\n\n<style scoped>\n.executeRequestTool {\n display: flex;\n flex-direction: column;\n gap: 10px;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n margin-bottom: 12px;\n /* ensures no overlapping border colors when there's two sibling execute request tools */\n box-shadow:\n 0 var(--scalar-border-width) 0 var(--scalar-background-1),\n 0 calc(-1 * var(--scalar-border-width)) 0 var(--scalar-background-1);\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ExecuteRequestTool.vue.js","names":["_sfc_main"],"sources":["../../../../src/views/Chat/Messages/ExecuteRequestTool.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { type ToolUIPart } from 'ai'\nimport { computed, type Ref } from 'vue'\n\nimport RequestPreview from '@/components/RequestPreview.vue'\nimport type { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME } from '@/entities/tools/execute-request'\nimport { requestPartRequiresApproval } from '@/hooks/use-chat-approvals'\nimport { useState, type Tools } from '@/state/state'\n\nconst { messagePart } = defineProps<{\n messagePart: Ref<\n ToolUIPart<Pick<Tools, typeof EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME>>\n >\n}>()\n\nconst state = useState()\n\nconst requestState = computed(() => {\n if (messagePart.value.state === 'input-streaming') {\n return 'buildingRequest'\n }\n\n if (\n messagePart.value.state === 'approval-responded' &&\n state.chat.status === 'submitted'\n ) {\n return 'sendingRequest'\n }\n\n if (requestPartRequiresApproval(messagePart.value)) {\n return 'requiresApproval'\n }\n\n if (messagePart.value.state === 'output-available') {\n return messagePart.value.output.success\n ? 'requestSucceeded'\n : 'requestFailed'\n }\n\n if (messagePart.value.state === 'output-error') {\n return 'rejected'\n }\n\n return null\n})\n</script>\n\n<template>\n <div class=\"executeRequestTool\">\n <p\n v-if=\"messagePart.value.state === 'output-error'\"\n class=\"text-c-2 py-3\"\n role=\"status\">\n {{ messagePart.value.errorText }}\n </p>\n <RequestPreview\n v-else-if=\"requestState\"\n :request=\"messagePart.value.input\"\n :response=\"messagePart.value.output\"\n :state=\"requestState\" />\n </div>\n</template>\n\n<style scoped>\n.executeRequestTool {\n display: flex;\n flex-direction: column;\n gap: 10px;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n margin-bottom: 12px;\n /* ensures no overlapping border colors when there's two sibling execute request tools */\n box-shadow:\n 0 var(--scalar-border-width) 0 var(--scalar-background-1),\n 0 calc(-1 * var(--scalar-border-width)) 0 var(--scalar-background-1);\n}\n</style>\n"],"mappings":""}
@@ -39,4 +39,4 @@ var ExecuteRequestTool_vue_vue_type_script_setup_true_lang_default = /*@__PURE__
39
39
  //#endregion
40
40
  export { ExecuteRequestTool_vue_vue_type_script_setup_true_lang_default as default };
41
41
 
42
- //# sourceMappingURL=ExecuteRequestTool.vue.script.js.map
42
+ //# sourceMappingURL=ExecuteRequestTool.vue_vue_type_script_setup_true_lang.js.map