@scalar/agent-chat 0.12.23 → 0.12.25

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 (157) hide show
  1. package/dist/App.vue.d.ts.map +1 -1
  2. package/dist/App.vue.script.js +1 -1
  3. package/dist/App.vue.script.js.map +1 -1
  4. package/dist/Chat.vue.d.ts.map +1 -1
  5. package/dist/Chat.vue.script.js +1 -1
  6. package/dist/Chat.vue.script.js.map +1 -1
  7. package/dist/api.js.map +1 -1
  8. package/dist/client-tools/execute-request.js.map +1 -1
  9. package/dist/components/ActionsDropdown.vue.d.ts.map +1 -1
  10. package/dist/components/ActionsDropdown.vue.js +1 -1
  11. package/dist/components/ActionsDropdown.vue.script.js +1 -1
  12. package/dist/components/ActionsDropdown.vue.script.js.map +1 -1
  13. package/dist/components/ApprovalSection.vue.js +1 -1
  14. package/dist/components/ApprovalSection.vue.script.js +1 -1
  15. package/dist/components/ApprovalSection.vue.script.js.map +1 -1
  16. package/dist/components/AuthenticationProvided.vue.js +1 -1
  17. package/dist/components/AuthenticationProvided.vue.js.map +1 -1
  18. package/dist/components/AuthenticationRequired.vue.js +1 -1
  19. package/dist/components/AuthenticationRequired.vue.js.map +1 -1
  20. package/dist/components/AutosendPaused.vue.js +1 -1
  21. package/dist/components/AutosendPaused.vue.js.map +1 -1
  22. package/dist/components/BuildingRequest.vue.js +1 -1
  23. package/dist/components/BuildingRequest.vue.js.map +1 -1
  24. package/dist/components/ContextItem.vue.js +1 -1
  25. package/dist/components/ContextItem.vue.script.js +1 -1
  26. package/dist/components/ContextItem.vue.script.js.map +1 -1
  27. package/dist/components/ErrorMessage.vue.js +1 -1
  28. package/dist/components/ErrorMessage.vue.script.js +1 -1
  29. package/dist/components/ErrorMessage.vue.script.js.map +1 -1
  30. package/dist/components/FreeMessagesInfoSection.vue.js +1 -1
  31. package/dist/components/FreeMessagesInfoSection.vue.script.js +1 -1
  32. package/dist/components/FreeMessagesInfoSection.vue.script.js.map +1 -1
  33. package/dist/components/LoadingOpenAPISpecsSummary.vue.js +1 -1
  34. package/dist/components/LoadingOpenAPISpecsSummary.vue.js.map +1 -1
  35. package/dist/components/LoadingSearchOpenAPIOperations.vue.js +1 -1
  36. package/dist/components/LoadingSearchOpenAPIOperations.vue.js.map +1 -1
  37. package/dist/components/Logo.vue.js +1 -1
  38. package/dist/components/PaymentSection.vue.js +1 -1
  39. package/dist/components/PaymentSection.vue.script.js +1 -1
  40. package/dist/components/PaymentSection.vue.script.js.map +1 -1
  41. package/dist/components/RequestApproved.vue.js +1 -1
  42. package/dist/components/RequestApproved.vue.js.map +1 -1
  43. package/dist/components/RequestFailed.vue.js +1 -1
  44. package/dist/components/RequestFailed.vue.js.map +1 -1
  45. package/dist/components/RequestPreview.vue.d.ts.map +1 -1
  46. package/dist/components/RequestPreview.vue.js +1 -1
  47. package/dist/components/RequestPreview.vue.script.js +1 -1
  48. package/dist/components/RequestPreview.vue.script.js.map +1 -1
  49. package/dist/components/RequestRejected.vue.js +1 -1
  50. package/dist/components/RequestRejected.vue.js.map +1 -1
  51. package/dist/components/RequestSuccess.vue.js +1 -1
  52. package/dist/components/RequestSuccess.vue.js.map +1 -1
  53. package/dist/components/ResponseBody/ResponseBody.vue.d.ts.map +1 -1
  54. package/dist/components/ResponseBody/ResponseBody.vue.js.map +1 -1
  55. package/dist/components/ResponseBody/ResponseBody.vue.script.js +2 -3
  56. package/dist/components/ResponseBody/ResponseBody.vue.script.js.map +1 -1
  57. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js +1 -1
  58. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js.map +1 -1
  59. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js +1 -1
  60. package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js +1 -1
  61. package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js.map +1 -1
  62. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js +1 -1
  63. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js.map +1 -1
  64. package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js +1 -1
  65. package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js.map +1 -1
  66. package/dist/components/ResponseBody/helpers/media-types.d.ts.map +1 -1
  67. package/dist/components/ResponseBody/helpers/media-types.js +10 -0
  68. package/dist/components/ResponseBody/helpers/media-types.js.map +1 -1
  69. package/dist/components/ResponseBody/helpers/process-response-body.js.map +1 -1
  70. package/dist/components/SearchPopover.vue.d.ts.map +1 -1
  71. package/dist/components/SearchPopover.vue.js +1 -1
  72. package/dist/components/SearchPopover.vue.script.js +1 -1
  73. package/dist/components/SearchPopover.vue.script.js.map +1 -1
  74. package/dist/components/Selector.vue.d.ts.map +1 -1
  75. package/dist/components/Selector.vue.script.js +1 -1
  76. package/dist/components/Selector.vue.script.js.map +1 -1
  77. package/dist/components/SendingRequest.vue.js +1 -1
  78. package/dist/components/SendingRequest.vue.js.map +1 -1
  79. package/dist/components/ServerSelector.vue.d.ts.map +1 -1
  80. package/dist/components/ServerSelector.vue.script.js +1 -1
  81. package/dist/components/ServerSelector.vue.script.js.map +1 -1
  82. package/dist/components/UploadSection.vue.js +1 -1
  83. package/dist/components/UploadSection.vue.script.js +1 -1
  84. package/dist/components/UploadSection.vue.script.js.map +1 -1
  85. package/dist/consts/urls.js.map +1 -1
  86. package/dist/entities/error/constants.js.map +1 -1
  87. package/dist/entities/error/helpers.js.map +1 -1
  88. package/dist/entities/registry/document.js.map +1 -1
  89. package/dist/entities/tools/ask-for-authentication.js.map +1 -1
  90. package/dist/entities/tools/execute-request.js.map +1 -1
  91. package/dist/entities/tools/search-openapi-operations.js.map +1 -1
  92. package/dist/helpers.d.ts +16 -0
  93. package/dist/helpers.d.ts.map +1 -1
  94. package/dist/helpers.js +7 -0
  95. package/dist/helpers.js.map +1 -1
  96. package/dist/hooks/use-agent-key-documents.js.map +1 -1
  97. package/dist/hooks/use-chat-approvals.js.map +1 -1
  98. package/dist/hooks/use-chat-error.js.map +1 -1
  99. package/dist/hooks/use-chat-pending-client-tool-parts.js.map +1 -1
  100. package/dist/hooks/use-chat-scroll.js.map +1 -1
  101. package/dist/hooks/use-curated-documents.js.map +1 -1
  102. package/dist/hooks/use-search.js.map +1 -1
  103. package/dist/hooks/use-signup-link.js.map +1 -1
  104. package/dist/hooks/use-term-and-conditions.js.map +1 -1
  105. package/dist/hooks/use-upload-tmp-document.js.map +1 -1
  106. package/dist/package.json +1 -1
  107. package/dist/plugins/persistance.js +6 -1
  108. package/dist/plugins/persistance.js.map +1 -1
  109. package/dist/registry/add-documents-to-store.js.map +1 -1
  110. package/dist/registry/create-document-name.js.map +1 -1
  111. package/dist/state/state.js.map +1 -1
  112. package/dist/style.css +318 -322
  113. package/dist/views/Catalog/Catalog.vue.d.ts.map +1 -1
  114. package/dist/views/Catalog/Catalog.vue.js +1 -1
  115. package/dist/views/Catalog/Catalog.vue.script.js +1 -1
  116. package/dist/views/Catalog/Catalog.vue.script.js.map +1 -1
  117. package/dist/views/Chat/Chat.vue.d.ts.map +1 -1
  118. package/dist/views/Chat/Chat.vue.js +1 -1
  119. package/dist/views/Chat/Chat.vue.script.js +1 -1
  120. package/dist/views/Chat/Chat.vue.script.js.map +1 -1
  121. package/dist/views/Chat/Messages/AskForAuthentication.vue.d.ts.map +1 -1
  122. package/dist/views/Chat/Messages/AskForAuthentication.vue.js +1 -1
  123. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js +1 -1
  124. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js.map +1 -1
  125. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +1 -1
  126. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js +1 -1
  127. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js.map +1 -1
  128. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js +1 -1
  129. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js.map +1 -1
  130. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.js +1 -1
  131. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.script.js +1 -1
  132. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.script.js.map +1 -1
  133. package/dist/views/Chat/Messages/Text.vue.script.js +1 -1
  134. package/dist/views/Chat/Messages/Text.vue.script.js.map +1 -1
  135. package/dist/views/Layout.vue.d.ts.map +1 -1
  136. package/dist/views/Layout.vue.js +1 -1
  137. package/dist/views/Layout.vue.script.js +1 -1
  138. package/dist/views/Layout.vue.script.js.map +1 -1
  139. package/dist/views/PromptForm.vue.d.ts.map +1 -1
  140. package/dist/views/PromptForm.vue.js +1 -1
  141. package/dist/views/PromptForm.vue.js.map +1 -1
  142. package/dist/views/PromptForm.vue.script.js +3 -2
  143. package/dist/views/PromptForm.vue.script.js.map +1 -1
  144. package/dist/views/Settings/Auth.vue.script.js +1 -1
  145. package/dist/views/Settings/Auth.vue.script.js.map +1 -1
  146. package/dist/views/Settings/DocSettings.vue.js +1 -1
  147. package/dist/views/Settings/DocSettings.vue.script.js +1 -1
  148. package/dist/views/Settings/DocSettings.vue.script.js.map +1 -1
  149. package/dist/views/Settings/Settings.vue.js +1 -1
  150. package/dist/views/Settings/Settings.vue.script.js +1 -1
  151. package/dist/views/Settings/Settings.vue.script.js.map +1 -1
  152. package/dist/views/Start.vue.d.ts.map +1 -1
  153. package/dist/views/Start.vue.js +1 -1
  154. package/dist/views/Start.vue.script.js +1 -1
  155. package/dist/views/Start.vue.script.js.map +1 -1
  156. package/dist/vue-styles.css +39 -39
  157. package/package.json +17 -17
@@ -1 +1 @@
1
- {"version":3,"file":"PromptForm.vue.script.js","names":["$emit"],"sources":["../../src/views/PromptForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIconButton } from '@scalar/components/icon-button'\nimport { ScalarLoading } from '@scalar/components/loading'\nimport { ScalarTooltip } from '@scalar/components/tooltip'\nimport {\n ScalarIconArrowUp,\n ScalarIconCheck,\n ScalarIconLockSimple,\n ScalarIconPlus,\n ScalarIconX,\n} from '@scalar/icons'\nimport { computed, useTemplateRef, watch } from 'vue'\n\nimport ActionsDropdown from '@/components/ActionsDropdown.vue'\nimport ApprovalSection from '@/components/ApprovalSection.vue'\nimport ErrorMessageMessage from '@/components/ErrorMessage.vue'\nimport FreeMessagesInfoSection from '@/components/FreeMessagesInfoSection.vue'\nimport PaymentSection from '@/components/PaymentSection.vue'\nimport SearchPopover from '@/components/SearchPopover.vue'\nimport UploadSection from '@/components/UploadSection.vue'\nimport { AgentErrorCodes } from '@/entities/error/constants'\nimport { MAX_PROMPT_SIZE } from '@/entities/prompt/constants'\nimport { useRequestApprovals } from '@/hooks/use-chat-approvals'\nimport { useChatError } from '@/hooks/use-chat-error'\nimport { useChatPendingClientToolParts } from '@/hooks/use-chat-pending-client-tool-parts'\nimport { useUploadTmpDocument } from '@/hooks/use-upload-tmp-document'\nimport { useState } from '@/state/state'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\ndefineExpose({ focusPrompt })\n\nconst promptRef = useTemplateRef<HTMLTextAreaElement>('agentPrompt')\n\nconst state = useState()\n\nconst inputHasContent = computed(() => state.prompt.value.trim().length > 0)\nconst promptTooLarge = computed(\n () => state.prompt.value.trim().length > MAX_PROMPT_SIZE,\n)\n\n/** Show free messages info only after at least one message has been sent and when no API key is set. */\nconst showFreeMessagesInfo = computed(\n () =>\n state.chat.messages.length > 1 &&\n !state.getAgentKey?.() &&\n chatError?.value?.code !== AgentErrorCodes.LIMIT_REACHED,\n)\n\nwatch(state.prompt, () => {\n if (!promptRef?.value) {\n return\n }\n\n if (!state.prompt.value.length) {\n promptRef.value.style.height = '0px'\n return\n }\n\n promptRef.value.style.height = 'auto'\n promptRef.value.style.height = promptRef.value.scrollHeight + 'px'\n})\n\nfunction handlePromptKeydown(e: KeyboardEvent) {\n if (state.loading.value) {\n return\n }\n\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSubmit()\n window.scrollTo(0, document.body.scrollHeight)\n }\n}\n\nfunction focusPrompt() {\n promptRef.value?.focus()\n}\n\nwatch(\n () => state.chat.status,\n (status) => {\n if (status === 'ready' || status === 'error') {\n promptRef.value?.focus()\n }\n },\n)\n\nconst { approvalRequiredParts, respondToRequestApprovals } =\n useRequestApprovals()\n\nconst { pendingClientToolParts } = useChatPendingClientToolParts()\n\nconst uploadTmpDoc = useUploadTmpDocument()\n\nfunction acceptTerms() {\n state.terms.accept()\n\n if (state.mode === 'preview' && state.getActiveDocumentJson) {\n uploadTmpDoc.uploadTempDocument(state.getActiveDocumentJson(), true)\n }\n}\n\nconst isPending = computed(() =>\n Object.values(state.pendingDocuments).some(Boolean),\n)\n\nconst submitDisabled = computed(() => {\n const tooLarge = promptTooLarge.value\n const missingInput = !inputHasContent.value\n const awaitingApproval = approvalRequiredParts.value.length > 0\n const pendingToolParts = pendingClientToolParts.value.length > 0\n\n const isPreview = state.mode === 'preview'\n\n const termsNotAccepted = isPreview && !state.terms.accepted.value\n const uploadingTmpDoc = isPreview && !!uploadTmpDoc.uploadState.value\n const isLoading = isPending.value\n\n return (\n tooLarge ||\n missingInput ||\n awaitingApproval ||\n pendingToolParts ||\n termsNotAccepted ||\n uploadingTmpDoc ||\n isLoading\n )\n})\n\nfunction handleSubmit() {\n if (submitDisabled.value) {\n return\n }\n\n emit('submit')\n}\n\nconst chatError = useChatError()\n</script>\n\n<template>\n <div class=\"actionContainer\">\n <UploadSection\n v-if=\"uploadTmpDoc.uploadState.value || isPending\"\n :uploadState=\"uploadTmpDoc.uploadState.value ?? { type: 'loading' }\" />\n <ErrorMessageMessage\n v-if=\"chatError\"\n :error=\"chatError\" />\n <ApprovalSection\n v-if=\"approvalRequiredParts.length\"\n @approve=\"respondToRequestApprovals(true)\"\n @reject=\"respondToRequestApprovals(false)\" />\n <PaymentSection v-if=\"chatError?.code === AgentErrorCodes.LIMIT_REACHED\" />\n <FreeMessagesInfoSection v-if=\"showFreeMessagesInfo\" />\n <form\n class=\"promptForm\"\n @submit.prevent=\"handleSubmit\">\n <label\n class=\"agentLabel\"\n for=\"agentTextarea\">\n Type a Request To get Started\n </label>\n <textarea\n id=\"agentTextarea\"\n ref=\"agentPrompt\"\n v-model=\"state.prompt.value\"\n class=\"prompt custom-scroll\"\n :disabled=\"state.loading.value\"\n name=\"prompt\"\n placeholder=\"Ask me anything…\"\n @keydown=\"handlePromptKeydown\" />\n <div class=\"inputActionsContainer\">\n <div class=\"inputActionsLeft\">\n <template v-if=\"!state.hideAddApi\">\n <SearchPopover v-if=\"!state.isLoggedIn?.value\">\n <button\n class=\"addAPIButton\"\n type=\"button\">\n <ScalarIconPlus\n class=\"size-4\"\n weight=\"bold\" />\n </button>\n </SearchPopover>\n <ActionsDropdown\n v-else\n @uploadApi=\"$emit('uploadApi')\">\n <button\n class=\"addAPIButton\"\n type=\"button\">\n <ScalarIconPlus\n class=\"size-4\"\n weight=\"bold\" />\n </button>\n </ActionsDropdown>\n </template>\n <div\n v-for=\"document in state.registryDocuments.value\"\n :key=\"document.id\"\n class=\"apiPill\">\n <img\n v-if=\"document.logoUrl\"\n class=\"apiPillLogo\"\n :src=\"document.logoUrl\" />\n {{ document.title }}\n <button\n v-if=\"document.removable\"\n class=\"apiPillRemove\"\n type=\"button\"\n @click=\"state.removeDocument(document)\">\n <ScalarIconX\n class=\"size-4\"\n weight=\"bold\" />\n </button>\n </div>\n </div>\n\n <div class=\"inputActionsRight\">\n <template v-if=\"!state.loading.value\">\n <ScalarTooltip content=\"Settings\">\n <ScalarIconButton\n class=\"settingsButton h-7 w-7 p-1.5\"\n :icon=\"ScalarIconLockSimple\"\n label=\"Scalar\"\n size=\"md\"\n weight=\"bold\"\n @click=\"state.settingsModal.show()\" />\n </ScalarTooltip>\n </template>\n <div class=\"sendCheckboxContinue\">\n <div\n v-if=\"!state.terms.accepted.value && state.mode === 'preview'\"\n class=\"relative flex items-center gap-1.5\">\n <input\n id=\"agentTermsAgree\"\n class=\"sr-only\"\n type=\"checkbox\"\n @change=\"acceptTerms\" />\n <label\n class=\"termsAgree\"\n for=\"agentTermsAgree\">\n <ScalarIconCheck\n class=\"termsAgreeIcon\"\n weight=\"bold\" />\n Agree to Terms & Conditions\n </label>\n </div>\n <ScalarIconButton\n v-if=\"!state.loading.value\"\n class=\"sendButton h-7 w-7 p-1.5\"\n :disabled=\"submitDisabled\"\n :icon=\"ScalarIconArrowUp\"\n label=\"Scalar\"\n size=\"md\"\n type=\"submit\"\n weight=\"bold\" />\n <ScalarLoading\n v-else\n class=\"loader h-7 w-7\"\n :loader=\"{\n isLoading: state.loading.value,\n isValid: false,\n clear: async () => {},\n invalidate: async () => {},\n isInvalid: false,\n isActive: false,\n validate: async () => {},\n start: () => {},\n }\"\n size=\"2xl\" />\n </div>\n </div>\n </div>\n </form>\n\n <div\n v-if=\"state.chat.messages.length <= 1 && !state.hideAddApi\"\n class=\"addMoreContext\">\n <span>Load additional APIs</span>\n <div class=\"ml-auto flex items-center gap-1\">\n <button\n v-for=\"doc of state.curatedDocuments.value\"\n :key=\"doc.id\"\n class=\"addAPIContext\"\n type=\"button\"\n @click=\"state.addDocument(doc)\">\n <img\n v-if=\"doc.logoUrl\"\n :alt=\"doc.title\"\n class=\"size-4\"\n :src=\"doc.logoUrl\" />\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.actionContainer {\n background: color-mix(\n in srgb,\n var(--scalar-background-2),\n var(--scalar-background-1)\n );\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-3xl);\n width: 100%;\n position: relative;\n /* visually hides overflowing text below */\n box-shadow: 0 24px 0 2px var(--scalar-background-1);\n}\n.promptForm {\n width: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n background: var(--scalar-background-1);\n box-shadow:\n var(--scalar-shadow-1),\n 0 0 0 var(--scalar-border-width) var(--scalar-border-color);\n border-radius: var(--scalar-radius-3xl);\n}\n\n.inputActionsContainer {\n display: flex;\n justify-content: space-between;\n padding: 0 8px 8px 8px;\n}\n\n.inputActionsLeft {\n display: flex;\n flex-wrap: wrap; /* key: allows pills to go to next line */\n align-items: center;\n gap: 5px; /* spacing between pills */\n}\n\n.inputActionsRight {\n display: flex;\n gap: 5px;\n position: relative;\n}\n\n.apiPill {\n font-size: var(--scalar-font-size-3);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n color: var(--scalar-color-2);\n font-weight: var(--scalar-semibold);\n height: 28px;\n align-items: center;\n display: flex;\n border-radius: var(--scalar-radius-3xl);\n padding: 0 8px;\n pointer-events: all;\n z-index: 1;\n gap: 4px;\n user-select: none;\n}\n.apiPillLogo {\n width: 15px;\n}\n\n.apiPillRemove {\n width: 24px;\n height: 24px;\n margin-right: -6px;\n border-radius: var(--scalar-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.apiPill:hover .apiPillRemove {\n background: var(--scalar-background-2);\n}\n.dark-mode .apiPill:hover .apiPillRemove {\n background: var(--scalar-background-3);\n}\n\n.apiPillRemove:hover {\n color: var(--scalar-color-1);\n}\n\n.prompt {\n width: 100%;\n outline: none;\n border: none;\n resize: none;\n field-sizing: content;\n min-height: 64px;\n z-index: 1;\n max-height: 250px;\n max-width: 100%;\n overflow-y: auto;\n scrollbar-width: thin;\n word-wrap: break-word;\n font-family: var(--scalar-font);\n font-size: 16px;\n padding: 12px 12px 14px 12px;\n}\n.dark-mode .promptForm {\n background: var(--scalar-background-2);\n}\n\n.prompt:disabled {\n color: var(--scalar-color-3);\n}\n\n.addAPIButton {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--scalar-color-2);\n font-size: var(--scalar-font-size-3);\n height: 28px;\n width: 28px;\n font-weight: var(--scalar-bold);\n border-radius: var(--scalar-radius-full);\n display: flex;\n align-items: center;\n gap: 4px;\n pointer-events: all;\n z-index: 1;\n box-shadow: 0 0 0 var(--scalar-border-width) var(--scalar-border-color);\n}\n.addAPIButton:hover {\n background: color-mix(\n in srgb,\n var(--scalar-background-2),\n var(--scalar-background-1)\n );\n box-shadow: 0 0 0 var(--scalar-border-width) var(--scalar-border-color);\n}\n.dark-mode .addAPIButton:hover {\n background: var(--scalar-background-3);\n}\n\n.settingsButton {\n color: var(--scalar-color-3) !important;\n border-radius: var(--scalar-radius-full) !important;\n margin: 0 !important;\n z-index: 1;\n}\n.settingsButton[aria-disabled='true'] {\n background: var(--scalar-background-2);\n}\n.dark-mode .settingsButton:hover {\n background: var(--scalar-background-3);\n}\n\n.sendButton {\n background: var(--scalar-color-blue) !important;\n border-radius: var(--scalar-radius-full) !important;\n margin: 0 !important;\n z-index: 1;\n border: var(--scalar-border-width) solid var(--scalar-color-blue);\n}\n.sendButton:not([aria-disabled='true']) {\n color: white !important;\n}\n.sendButton:not([aria-disabled='true']):hover {\n background: color-mix(\n in srgb,\n var(--scalar-color-blue),\n transparent 10%\n ) !important;\n}\n.sendButton[aria-disabled='true'] {\n background: var(--scalar-background-2) !important;\n color: var(--scalar-color-3) !important;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.dark-mode .sendButton[aria-disabled='true'] {\n background: var(--scalar-background-3) !important;\n}\n.contextContainer {\n display: flex;\n width: 100%;\n padding: 10px 12px 12px 12px;\n color: var(--scalar-color-2);\n font-size: var(--scalar-font-size-3);\n user-select: none;\n justify-content: space-between;\n}\n\n.settingsButton {\n font-weight: var(--scalar-semibold);\n border-radius: var(--scalar-radius-lg);\n padding: 4px 6px;\n margin: -4px -6px;\n}\n.settingsButton:hover {\n background: var(--scalar-background-2);\n box-shadow: 0 0 var(--scalar-border-width) 0 var(--scalar-border-color);\n cursor: pointer;\n}\n\n.agentLabel {\n font-size: 0px;\n position: absolute;\n width: 100%;\n height: 100%;\n cursor: text;\n}\n.sendCheckboxContinue:has(input) {\n display: flex;\n align-items: center;\n border-radius: var(--scalar-radius-3xl);\n background: var(--scalar-background-2);\n box-shadow: 0 0 0 1.5px var(--scalar-background-2);\n color: var(--scalar-color-2);\n font-size: var(--scalar-font-size-3);\n font-weight: var(--scalar-semibold);\n user-select: none;\n height: 28px;\n}\n.dark-mode .sendCheckboxContinue:has(input) {\n background: var(--scalar-background-3);\n box-shadow: 0 0 0 1.5px var(--scalar-background-3);\n}\n\n.addMoreContext {\n height: 40px;\n display: flex;\n position: relative;\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-3);\n padding: 0 8px 0 12px;\n align-items: center;\n}\n.addMoreContext:before {\n content: '';\n width: 8px;\n height: 8px;\n background: color-mix(\n in srgb,\n var(--scalar-background-1),\n var(--scalar-background-2)\n );\n transform: rotate(45deg);\n left: 18px;\n top: -3px;\n position: absolute;\n box-shadow:\n -0.5px -0.5px 0 var(--scalar-border-color),\n inset 0.5px 0.5px 1px var(--scalar-border-color);\n}\n.dark-mode .addMoreContext:before {\n box-shadow: -0.5px -0.5px 0 var(--scalar-border-color);\n}\n.addAPIContext {\n width: 28px;\n height: 28px;\n border-radius: var(--scalar-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.termsAgree {\n display: flex;\n cursor: pointer;\n height: inherit;\n align-items: center;\n border-radius: var(--scalar-radius-3xl);\n gap: 5px;\n margin: 0px 5px;\n}\n\n.termsAgree:hover {\n color: var(--scalar-color-1);\n}\n\n.termsAgree:hover .termsAgreeIcon {\n background: var(--scalar-color-1);\n color: var(--scalar-background-1);\n}\n\n.termsAgreeIcon {\n width: inherit;\n height: inherit;\n padding: 2px;\n border-radius: var(--scalar-radius-full);\n background: var(--scalar-background-2);\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"PromptForm.vue.script.js","names":["$emit"],"sources":["../../src/views/PromptForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIconButton } from '@scalar/components/icon-button'\nimport { ScalarLoading } from '@scalar/components/loading'\nimport { ScalarTooltip } from '@scalar/components/tooltip'\nimport {\n ScalarIconArrowUp,\n ScalarIconCheck,\n ScalarIconLockSimple,\n ScalarIconPlus,\n ScalarIconX,\n} from '@scalar/icons'\nimport { computed, useTemplateRef, watch } from 'vue'\n\nimport ActionsDropdown from '@/components/ActionsDropdown.vue'\nimport ApprovalSection from '@/components/ApprovalSection.vue'\nimport ErrorMessageMessage from '@/components/ErrorMessage.vue'\nimport FreeMessagesInfoSection from '@/components/FreeMessagesInfoSection.vue'\nimport PaymentSection from '@/components/PaymentSection.vue'\nimport SearchPopover from '@/components/SearchPopover.vue'\nimport UploadSection from '@/components/UploadSection.vue'\nimport { AgentErrorCodes } from '@/entities/error/constants'\nimport { MAX_PROMPT_SIZE } from '@/entities/prompt/constants'\nimport { useRequestApprovals } from '@/hooks/use-chat-approvals'\nimport { useChatError } from '@/hooks/use-chat-error'\nimport { useChatPendingClientToolParts } from '@/hooks/use-chat-pending-client-tool-parts'\nimport { useUploadTmpDocument } from '@/hooks/use-upload-tmp-document'\nimport { useState } from '@/state/state'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\ndefineExpose({ focusPrompt })\n\nconst promptRef = useTemplateRef<HTMLTextAreaElement>('agentPrompt')\n\nconst state = useState()\n\nconst inputHasContent = computed(() => state.prompt.value.trim().length > 0)\nconst promptTooLarge = computed(\n () => state.prompt.value.trim().length > MAX_PROMPT_SIZE,\n)\n\n/** Show free messages info only after at least one message has been sent and when no API key is set. */\nconst showFreeMessagesInfo = computed(\n () =>\n state.chat.messages.length > 1 &&\n !state.getAgentKey?.() &&\n chatError?.value?.code !== AgentErrorCodes.LIMIT_REACHED,\n)\n\nwatch(state.prompt, () => {\n if (!promptRef?.value) {\n return\n }\n\n if (!state.prompt.value.length) {\n promptRef.value.style.height = '0px'\n return\n }\n\n promptRef.value.style.height = 'auto'\n promptRef.value.style.height = promptRef.value.scrollHeight + 'px'\n})\n\nfunction handlePromptKeydown(e: KeyboardEvent) {\n // Ignore the Enter that only commits an IME composition (e.g. Japanese, Chinese,\n // Korean). On macOS Chrome that keydown still reports key === 'Enter' with\n // isComposing === true, so without this guard the message sends mid-composition.\n if (e.isComposing) {\n return\n }\n\n if (state.loading.value) {\n return\n }\n\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSubmit()\n window.scrollTo(0, document.body.scrollHeight)\n }\n}\n\nfunction focusPrompt() {\n promptRef.value?.focus()\n}\n\nwatch(\n () => state.chat.status,\n (status) => {\n if (status === 'ready' || status === 'error') {\n promptRef.value?.focus()\n }\n },\n)\n\nconst { approvalRequiredParts, respondToRequestApprovals } =\n useRequestApprovals()\n\nconst { pendingClientToolParts } = useChatPendingClientToolParts()\n\nconst uploadTmpDoc = useUploadTmpDocument()\n\nfunction acceptTerms() {\n state.terms.accept()\n\n if (state.mode === 'preview' && state.getActiveDocumentJson) {\n uploadTmpDoc.uploadTempDocument(state.getActiveDocumentJson(), true)\n }\n}\n\nconst isPending = computed(() =>\n Object.values(state.pendingDocuments).some(Boolean),\n)\n\nconst submitDisabled = computed(() => {\n const tooLarge = promptTooLarge.value\n const missingInput = !inputHasContent.value\n const awaitingApproval = approvalRequiredParts.value.length > 0\n const pendingToolParts = pendingClientToolParts.value.length > 0\n\n const isPreview = state.mode === 'preview'\n\n const termsNotAccepted = isPreview && !state.terms.accepted.value\n const uploadingTmpDoc = isPreview && !!uploadTmpDoc.uploadState.value\n const isLoading = isPending.value\n\n return (\n tooLarge ||\n missingInput ||\n awaitingApproval ||\n pendingToolParts ||\n termsNotAccepted ||\n uploadingTmpDoc ||\n isLoading\n )\n})\n\nfunction handleSubmit() {\n if (submitDisabled.value) {\n return\n }\n\n emit('submit')\n}\n\nconst chatError = useChatError()\n</script>\n\n<template>\n <div class=\"actionContainer\">\n <UploadSection\n v-if=\"uploadTmpDoc.uploadState.value || isPending\"\n :uploadState=\"uploadTmpDoc.uploadState.value ?? { type: 'loading' }\" />\n <ErrorMessageMessage\n v-if=\"chatError\"\n :error=\"chatError\" />\n <ApprovalSection\n v-if=\"approvalRequiredParts.length\"\n @approve=\"respondToRequestApprovals(true)\"\n @reject=\"respondToRequestApprovals(false)\" />\n <PaymentSection v-if=\"chatError?.code === AgentErrorCodes.LIMIT_REACHED\" />\n <FreeMessagesInfoSection v-if=\"showFreeMessagesInfo\" />\n <form\n class=\"promptForm\"\n @submit.prevent=\"handleSubmit\">\n <label\n class=\"agentLabel\"\n for=\"agentTextarea\">\n Type a Request To get Started\n </label>\n <textarea\n id=\"agentTextarea\"\n ref=\"agentPrompt\"\n v-model=\"state.prompt.value\"\n class=\"prompt custom-scroll\"\n :disabled=\"state.loading.value\"\n name=\"prompt\"\n placeholder=\"Ask me anything…\"\n @keydown=\"handlePromptKeydown\" />\n <div class=\"inputActionsContainer\">\n <div class=\"inputActionsLeft\">\n <template v-if=\"!state.hideAddApi\">\n <SearchPopover v-if=\"!state.isLoggedIn?.value\">\n <button\n class=\"addAPIButton\"\n type=\"button\">\n <ScalarIconPlus\n class=\"size-4\"\n weight=\"bold\" />\n </button>\n </SearchPopover>\n <ActionsDropdown\n v-else\n @uploadApi=\"$emit('uploadApi')\">\n <button\n class=\"addAPIButton\"\n type=\"button\">\n <ScalarIconPlus\n class=\"size-4\"\n weight=\"bold\" />\n </button>\n </ActionsDropdown>\n </template>\n <div\n v-for=\"document in state.registryDocuments.value\"\n :key=\"document.id\"\n class=\"apiPill\">\n <img\n v-if=\"document.logoUrl\"\n class=\"apiPillLogo\"\n :src=\"document.logoUrl\" />\n {{ document.title }}\n <button\n v-if=\"document.removable\"\n class=\"apiPillRemove\"\n type=\"button\"\n @click=\"state.removeDocument(document)\">\n <ScalarIconX\n class=\"size-4\"\n weight=\"bold\" />\n </button>\n </div>\n </div>\n\n <div class=\"inputActionsRight\">\n <template v-if=\"!state.loading.value\">\n <ScalarTooltip content=\"Settings\">\n <ScalarIconButton\n class=\"settingsButton h-7 w-7 p-1.5\"\n :icon=\"ScalarIconLockSimple\"\n label=\"Scalar\"\n size=\"md\"\n weight=\"bold\"\n @click=\"state.settingsModal.show()\" />\n </ScalarTooltip>\n </template>\n <div class=\"sendCheckboxContinue\">\n <div\n v-if=\"!state.terms.accepted.value && state.mode === 'preview'\"\n class=\"relative flex items-center gap-1.5\">\n <input\n id=\"agentTermsAgree\"\n class=\"sr-only\"\n type=\"checkbox\"\n @change=\"acceptTerms\" />\n <label\n class=\"termsAgree\"\n for=\"agentTermsAgree\">\n <ScalarIconCheck\n class=\"termsAgreeIcon\"\n weight=\"bold\" />\n Agree to Terms & Conditions\n </label>\n </div>\n <ScalarIconButton\n v-if=\"!state.loading.value\"\n class=\"sendButton h-7 w-7 p-1.5\"\n :disabled=\"submitDisabled\"\n :icon=\"ScalarIconArrowUp\"\n label=\"Scalar\"\n size=\"md\"\n type=\"submit\"\n weight=\"bold\" />\n <ScalarLoading\n v-else\n class=\"loader h-7 w-7\"\n :loader=\"{\n isLoading: state.loading.value,\n isValid: false,\n clear: async () => {},\n invalidate: async () => {},\n isInvalid: false,\n isActive: false,\n validate: async () => {},\n start: () => {},\n }\"\n size=\"2xl\" />\n </div>\n </div>\n </div>\n </form>\n\n <div\n v-if=\"state.chat.messages.length <= 1 && !state.hideAddApi\"\n class=\"addMoreContext\">\n <span>Load additional APIs</span>\n <div class=\"ml-auto flex items-center gap-1\">\n <button\n v-for=\"doc of state.curatedDocuments.value\"\n :key=\"doc.id\"\n class=\"addAPIContext\"\n type=\"button\"\n @click=\"state.addDocument(doc)\">\n <img\n v-if=\"doc.logoUrl\"\n :alt=\"doc.title\"\n class=\"size-4\"\n :src=\"doc.logoUrl\" />\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.actionContainer {\n background: color-mix(\n in srgb,\n var(--scalar-background-2),\n var(--scalar-background-1)\n );\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-3xl);\n width: 100%;\n position: relative;\n /* visually hides overflowing text below */\n box-shadow: 0 24px 0 2px var(--scalar-background-1);\n}\n.promptForm {\n width: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n background: var(--scalar-background-1);\n box-shadow:\n var(--scalar-shadow-1),\n 0 0 0 var(--scalar-border-width) var(--scalar-border-color);\n border-radius: var(--scalar-radius-3xl);\n}\n\n.inputActionsContainer {\n display: flex;\n justify-content: space-between;\n padding: 0 8px 8px 8px;\n}\n\n.inputActionsLeft {\n display: flex;\n flex-wrap: wrap; /* key: allows pills to go to next line */\n align-items: center;\n gap: 5px; /* spacing between pills */\n}\n\n.inputActionsRight {\n display: flex;\n gap: 5px;\n position: relative;\n}\n\n.apiPill {\n font-size: var(--scalar-font-size-3);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n color: var(--scalar-color-2);\n font-weight: var(--scalar-semibold);\n height: 28px;\n align-items: center;\n display: flex;\n border-radius: var(--scalar-radius-3xl);\n padding: 0 8px;\n pointer-events: all;\n z-index: 1;\n gap: 4px;\n user-select: none;\n}\n.apiPillLogo {\n width: 15px;\n}\n\n.apiPillRemove {\n width: 24px;\n height: 24px;\n margin-right: -6px;\n border-radius: var(--scalar-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.apiPill:hover .apiPillRemove {\n background: var(--scalar-background-2);\n}\n.dark-mode .apiPill:hover .apiPillRemove {\n background: var(--scalar-background-3);\n}\n\n.apiPillRemove:hover {\n color: var(--scalar-color-1);\n}\n\n.prompt {\n width: 100%;\n outline: none;\n border: none;\n resize: none;\n field-sizing: content;\n min-height: 64px;\n z-index: 1;\n max-height: 250px;\n max-width: 100%;\n overflow-y: auto;\n scrollbar-width: thin;\n word-wrap: break-word;\n font-family: var(--scalar-font);\n font-size: 16px;\n padding: 12px 12px 14px 12px;\n}\n.dark-mode .promptForm {\n background: var(--scalar-background-2);\n}\n\n.prompt:disabled {\n color: var(--scalar-color-3);\n}\n\n.addAPIButton {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--scalar-color-2);\n font-size: var(--scalar-font-size-3);\n height: 28px;\n width: 28px;\n font-weight: var(--scalar-bold);\n border-radius: var(--scalar-radius-full);\n display: flex;\n align-items: center;\n gap: 4px;\n pointer-events: all;\n z-index: 1;\n box-shadow: 0 0 0 var(--scalar-border-width) var(--scalar-border-color);\n}\n.addAPIButton:hover {\n background: color-mix(\n in srgb,\n var(--scalar-background-2),\n var(--scalar-background-1)\n );\n box-shadow: 0 0 0 var(--scalar-border-width) var(--scalar-border-color);\n}\n.dark-mode .addAPIButton:hover {\n background: var(--scalar-background-3);\n}\n\n.settingsButton {\n color: var(--scalar-color-3) !important;\n border-radius: var(--scalar-radius-full) !important;\n margin: 0 !important;\n z-index: 1;\n}\n.settingsButton[aria-disabled='true'] {\n background: var(--scalar-background-2);\n}\n.dark-mode .settingsButton:hover {\n background: var(--scalar-background-3);\n}\n\n.sendButton {\n background: var(--scalar-color-blue) !important;\n border-radius: var(--scalar-radius-full) !important;\n margin: 0 !important;\n z-index: 1;\n border: var(--scalar-border-width) solid var(--scalar-color-blue);\n}\n.sendButton:not([aria-disabled='true']) {\n color: white !important;\n}\n.sendButton:not([aria-disabled='true']):hover {\n background: color-mix(\n in srgb,\n var(--scalar-color-blue),\n transparent 10%\n ) !important;\n}\n.sendButton[aria-disabled='true'] {\n background: var(--scalar-background-2) !important;\n color: var(--scalar-color-3) !important;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.dark-mode .sendButton[aria-disabled='true'] {\n background: var(--scalar-background-3) !important;\n}\n.contextContainer {\n display: flex;\n width: 100%;\n padding: 10px 12px 12px 12px;\n color: var(--scalar-color-2);\n font-size: var(--scalar-font-size-3);\n user-select: none;\n justify-content: space-between;\n}\n\n.settingsButton {\n font-weight: var(--scalar-semibold);\n border-radius: var(--scalar-radius-lg);\n padding: 4px 6px;\n margin: -4px -6px;\n}\n.settingsButton:hover {\n background: var(--scalar-background-2);\n box-shadow: 0 0 var(--scalar-border-width) 0 var(--scalar-border-color);\n cursor: pointer;\n}\n\n.agentLabel {\n font-size: 0px;\n position: absolute;\n width: 100%;\n height: 100%;\n cursor: text;\n}\n.sendCheckboxContinue:has(input) {\n display: flex;\n align-items: center;\n border-radius: var(--scalar-radius-3xl);\n background: var(--scalar-background-2);\n box-shadow: 0 0 0 1.5px var(--scalar-background-2);\n color: var(--scalar-color-2);\n font-size: var(--scalar-font-size-3);\n font-weight: var(--scalar-semibold);\n user-select: none;\n height: 28px;\n}\n.dark-mode .sendCheckboxContinue:has(input) {\n background: var(--scalar-background-3);\n box-shadow: 0 0 0 1.5px var(--scalar-background-3);\n}\n\n.addMoreContext {\n height: 40px;\n display: flex;\n position: relative;\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-3);\n padding: 0 8px 0 12px;\n align-items: center;\n}\n.addMoreContext:before {\n content: '';\n width: 8px;\n height: 8px;\n background: color-mix(\n in srgb,\n var(--scalar-background-1),\n var(--scalar-background-2)\n );\n transform: rotate(45deg);\n left: 18px;\n top: -3px;\n position: absolute;\n box-shadow:\n -0.5px -0.5px 0 var(--scalar-border-color),\n inset 0.5px 0.5px 1px var(--scalar-border-color);\n}\n.dark-mode .addMoreContext:before {\n box-shadow: -0.5px -0.5px 0 var(--scalar-border-color);\n}\n.addAPIContext {\n width: 28px;\n height: 28px;\n border-radius: var(--scalar-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.termsAgree {\n display: flex;\n cursor: pointer;\n height: inherit;\n align-items: center;\n border-radius: var(--scalar-radius-3xl);\n gap: 5px;\n margin: 0px 5px;\n}\n\n.termsAgree:hover {\n color: var(--scalar-color-1);\n}\n\n.termsAgree:hover .termsAgreeIcon {\n background: var(--scalar-color-1);\n color: var(--scalar-background-1);\n}\n\n.termsAgreeIcon {\n width: inherit;\n height: inherit;\n padding: 2px;\n border-radius: var(--scalar-radius-full);\n background: var(--scalar-background-2);\n}\n</style>\n"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { getSecurityRequirements, getSelectedSecurity, mergeSecurity } from "@sc
4
4
  import { AuthSelector } from "@scalar/api-client/blocks/scalar-auth-selector-block";
5
5
  import { useFocusWithin } from "@vueuse/core";
6
6
  //#region src/views/Settings/Auth.vue?vue&type=script&setup=true&lang.ts
7
- var Auth_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var Auth_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  __name: "Auth",
9
9
  props: {
10
10
  options: {},
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.vue.script.js","names":[],"sources":["../../../src/views/Settings/Auth.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AuthSelector } from '@scalar/api-client/blocks/scalar-auth-selector-block'\nimport type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference'\nimport type { AuthStore } from '@scalar/workspace-store/entities/auth'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport {\n getSecurityRequirements,\n getSelectedSecurity,\n mergeSecurity,\n} from '@scalar/workspace-store/request-example'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport type {\n OpenApiDocument,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { useFocusWithin } from '@vueuse/core'\nimport { computed, shallowRef, watch } from 'vue'\n\nimport { useState } from '@/state/state'\n\nconst { document, name, environment, eventBus, options, authStore } =\n defineProps<{\n options: Pick<\n ApiReferenceConfigurationRaw,\n 'authentication' | 'persistAuth' | 'proxyUrl'\n >\n name: string\n authStore: AuthStore\n document: OpenApiDocument | undefined\n eventBus: WorkspaceEventBus\n selectedServer: ServerObject | null\n environment: XScalarEnvironment\n }>()\n\nconst { workspaceStore } = useState()\n\n/** Compute what the security requirements should be for the document */\nconst securityRequirements = computed(() =>\n getSecurityRequirements(document?.security),\n)\n\n/** Merge the security schemes with the authentication config and the auth store */\nconst securitySchemes = computed(() =>\n mergeSecurity(\n document?.components?.securitySchemes ?? {},\n options.authentication?.securitySchemes,\n authStore,\n name,\n ),\n)\n\n/** The selected security keys for the document */\nconst selectedSecurity = computed(() =>\n getSelectedSecurity(\n authStore.getAuthSelectedSchemas({\n type: 'document',\n documentName: name,\n }),\n undefined,\n securityRequirements.value,\n securitySchemes.value,\n options.authentication?.preferredSecurityScheme,\n ),\n)\n\nconst focusRef = shallowRef()\nconst { focused } = useFocusWithin(focusRef)\n\nwatch(focused, (isFocused) => {\n if (!isFocused) {\n return\n }\n\n workspaceStore.update('x-scalar-active-document', name)\n})\n</script>\n<template>\n <div\n ref=\"focusRef\"\n tabindex=\"0\">\n <AuthSelector\n v-if=\"Object.keys(securitySchemes).length\"\n :authStore\n :documentSlug=\"name\"\n :environment\n :eventBus\n isReadOnly\n isStatic\n layout=\"reference\"\n :meta=\"{ type: 'document' }\"\n :persistAuth=\"options.persistAuth\"\n :proxyUrl=\"options.proxyUrl ?? ''\"\n :securityRequirements\n :securitySchemes\n :selectedSecurity\n :server=\"selectedServer\"\n title=\"Authentication\" />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAkCA,MAAM,EAAE,mBAAmB,UAAS;;EAGpC,MAAM,uBAAuB,eAC3B,wBAAwB,QAAA,UAAU,SAAS,CAC7C;;EAGA,MAAM,kBAAkB,eACtB,cACE,QAAA,UAAU,YAAY,mBAAmB,EAAE,EAC3C,QAAA,QAAQ,gBAAgB,iBACxB,QAAA,WACA,QAAA,KACD,CACH;;EAGA,MAAM,mBAAmB,eACvB,oBACE,QAAA,UAAU,uBAAuB;GAC/B,MAAM;GACN,cAAc,QAAA;GACf,CAAC,EACF,KAAA,GACA,qBAAqB,OACrB,gBAAgB,OAChB,QAAA,QAAQ,gBAAgB,wBACzB,CACH;EAEA,MAAM,WAAW,YAAW;EAC5B,MAAM,EAAE,YAAY,eAAe,SAAQ;AAE3C,QAAM,UAAU,cAAc;AAC5B,OAAI,CAAC,UACH;AAGF,kBAAe,OAAO,4BAA4B,QAAA,KAAI;IACvD;;uBAGC,mBAoBM,OAAA;aAnBA;IAAJ,KAAI;IACJ,UAAS;OAED,OAAO,KAAK,gBAAA,MAAe,CAAE,UAAA,WAAA,EADrC,YAgB2B,MAAA,aAAA,EAAA;;IAdxB,WAAA,QAAA;IACA,cAAc,QAAA;IACd,aAAA,QAAA;IACA,UAAA,QAAA;IACD,YAAA;IACA,UAAA;IACA,QAAO;IACN,MAAM,EAAA,MAAA,YAAoB;IAC1B,aAAa,QAAA,QAAQ;IACrB,UAAU,QAAA,QAAQ,YAAQ;IAC1B,sBAAA,qBAAA;IACA,iBAAA,gBAAA;IACA,kBAAA,iBAAA;IACA,QAAQ,QAAA;IACT,OAAM"}
1
+ {"version":3,"file":"Auth.vue.script.js","names":[],"sources":["../../../src/views/Settings/Auth.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AuthSelector } from '@scalar/api-client/blocks/scalar-auth-selector-block'\nimport type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference'\nimport type { AuthStore } from '@scalar/workspace-store/entities/auth'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport {\n getSecurityRequirements,\n getSelectedSecurity,\n mergeSecurity,\n} from '@scalar/workspace-store/request-example'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport type {\n OpenApiDocument,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { useFocusWithin } from '@vueuse/core'\nimport { computed, shallowRef, watch } from 'vue'\n\nimport { useState } from '@/state/state'\n\nconst { document, name, environment, eventBus, options, authStore } =\n defineProps<{\n options: Pick<\n ApiReferenceConfigurationRaw,\n 'authentication' | 'persistAuth' | 'proxyUrl'\n >\n name: string\n authStore: AuthStore\n document: OpenApiDocument | undefined\n eventBus: WorkspaceEventBus\n selectedServer: ServerObject | null\n environment: XScalarEnvironment\n }>()\n\nconst { workspaceStore } = useState()\n\n/** Compute what the security requirements should be for the document */\nconst securityRequirements = computed(() =>\n getSecurityRequirements(document?.security),\n)\n\n/** Merge the security schemes with the authentication config and the auth store */\nconst securitySchemes = computed(() =>\n mergeSecurity(\n document?.components?.securitySchemes ?? {},\n options.authentication?.securitySchemes,\n authStore,\n name,\n ),\n)\n\n/** The selected security keys for the document */\nconst selectedSecurity = computed(() =>\n getSelectedSecurity(\n authStore.getAuthSelectedSchemas({\n type: 'document',\n documentName: name,\n }),\n undefined,\n securityRequirements.value,\n securitySchemes.value,\n options.authentication?.preferredSecurityScheme,\n ),\n)\n\nconst focusRef = shallowRef()\nconst { focused } = useFocusWithin(focusRef)\n\nwatch(focused, (isFocused) => {\n if (!isFocused) {\n return\n }\n\n workspaceStore.update('x-scalar-active-document', name)\n})\n</script>\n<template>\n <div\n ref=\"focusRef\"\n tabindex=\"0\">\n <AuthSelector\n v-if=\"Object.keys(securitySchemes).length\"\n :authStore\n :documentSlug=\"name\"\n :environment\n :eventBus\n isReadOnly\n isStatic\n layout=\"reference\"\n :meta=\"{ type: 'document' }\"\n :persistAuth=\"options.persistAuth\"\n :proxyUrl=\"options.proxyUrl ?? ''\"\n :securityRequirements\n :securitySchemes\n :selectedSecurity\n :server=\"selectedServer\"\n title=\"Authentication\" />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAkCA,MAAM,EAAE,mBAAmB,SAAS;;EAGpC,MAAM,uBAAuB,eAC3B,wBAAwB,QAAA,UAAU,QAAQ,CAC5C;;EAGA,MAAM,kBAAkB,eACtB,cACE,QAAA,UAAU,YAAY,mBAAmB,CAAC,GAC1C,QAAA,QAAQ,gBAAgB,iBACxB,QAAA,WACA,QAAA,IACF,CACF;;EAGA,MAAM,mBAAmB,eACvB,oBACE,QAAA,UAAU,uBAAuB;GAC/B,MAAM;GACN,cAAc,QAAA;EAChB,CAAC,GACD,KAAA,GACA,qBAAqB,OACrB,gBAAgB,OAChB,QAAA,QAAQ,gBAAgB,uBAC1B,CACF;EAEA,MAAM,WAAW,WAAW;EAC5B,MAAM,EAAE,YAAY,eAAe,QAAQ;EAE3C,MAAM,UAAU,cAAc;GAC5B,IAAI,CAAC,WACH;GAGF,eAAe,OAAO,4BAA4B,QAAA,IAAI;EACxD,CAAC;;uBAGC,mBAoBM,OAAA;aAnBA;IAAJ,KAAI;IACJ,UAAS;OAED,OAAO,KAAK,gBAAA,KAAe,CAAA,CAAE,UAAA,UAAA,GADrC,YAgB2B,MAAA,YAAA,GAAA;;IAdxB,WAAA,QAAA;IACA,cAAc,QAAA;IACd,aAAA,QAAA;IACA,UAAA,QAAA;IACD,YAAA;IACA,UAAA;IACA,QAAO;IACN,MAAM,EAAA,MAAA,WAAA;IACN,aAAa,QAAA,QAAQ;IACrB,UAAU,QAAA,QAAQ,YAAQ;IAC1B,sBAAA,qBAAA;IACA,iBAAA,gBAAA;IACA,kBAAA,iBAAA;IACA,QAAQ,QAAA;IACT,OAAM"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../_virtual/_plugin-vue_export
2
2
  import DocSettings_vue_vue_type_script_setup_true_lang_default from "./DocSettings.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/views/Settings/DocSettings.vue
5
- var DocSettings_default = /* @__PURE__ */ _plugin_vue_export_helper_default(DocSettings_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-01a25619"]]);
5
+ var DocSettings_default = /*#__PURE__*/ _plugin_vue_export_helper_default(DocSettings_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-01a25619"]]);
6
6
  //#endregion
7
7
  export { DocSettings_default as default };
8
8
 
@@ -5,7 +5,7 @@ import { computed, createElementBlock, createElementVNode, createVNode, defineCo
5
5
  import { getActiveEnvironment, getSelectedServer, getServers } from "@scalar/workspace-store/request-example";
6
6
  //#region src/views/Settings/DocSettings.vue?vue&type=script&setup=true&lang.ts
7
7
  var _hoisted_1 = { class: "docSettings" };
8
- var DocSettings_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
8
+ var DocSettings_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
9
9
  __name: "DocSettings",
10
10
  props: {
11
11
  document: {},
@@ -1 +1 @@
1
- {"version":3,"file":"DocSettings.vue.script.js","names":[],"sources":["../../../src/views/Settings/DocSettings.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n getActiveEnvironment,\n getSelectedServer,\n getServers,\n} from '@scalar/workspace-store/request-example'\nimport type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport ServerSelector from '@/components/ServerSelector.vue'\nimport { useState } from '@/state/state'\nimport Auth from '@/views/Settings/Auth.vue'\n\nconst { document, name } = defineProps<{\n document: OpenApiDocument\n name: string\n}>()\n\nconst { workspaceStore, config, eventBus } = useState()\n\nconst environment = computed(\n () => getActiveEnvironment(workspaceStore, document).environment,\n)\n\nconst selectedServer = computed(() => {\n const servers = getServers(document.servers, {\n documentUrl: document['x-scalar-original-source-url'],\n })\n\n return getSelectedServer(document, null, null, servers)\n})\n\nconst securitySchemes = computed(\n () => document.components?.securitySchemes ?? {},\n)\n</script>\n\n<template>\n <div class=\"docSettings\">\n <div>\n <Auth\n :authStore=\"workspaceStore.auth\"\n :document\n :environment\n :eventBus\n :name\n :options=\"config\"\n :securitySchemes\n :selectedServer />\n </div>\n <div>\n <ServerSelector\n :eventBus\n :selectedServer\n :servers=\"document.servers ?? []\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.docSettings {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 12px;\n font-size: var(--scalar-font-size-3);\n max-height: 600px;\n}\n\n.documentName {\n font-weight: var(--scalar-semibold);\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;EAkBA,MAAM,EAAE,gBAAgB,QAAQ,aAAa,UAAS;EAEtD,MAAM,cAAc,eACZ,qBAAqB,gBAAgB,QAAA,SAAS,CAAC,YACvD;EAEA,MAAM,iBAAiB,eAAe;GACpC,MAAM,UAAU,WAAW,QAAA,SAAS,SAAS,EAC3C,aAAa,QAAA,SAAS,iCACvB,CAAA;AAED,UAAO,kBAAkB,QAAA,UAAU,MAAM,MAAM,QAAO;IACvD;EAED,MAAM,kBAAkB,eAChB,QAAA,SAAS,YAAY,mBAAmB,EAAE,CAClD;;uBAIE,mBAkBM,OAlBN,YAkBM,CAjBJ,mBAUM,OAAA,MAAA,CATJ,YAQoB,cAAA;IAPjB,WAAW,MAAA,eAAc,CAAC;IAC1B,UAAA,QAAA;IACA,aAAA,YAAA;IACA,UAAA,MAAA,SAAQ;IACR,MAAA,QAAA;IACA,SAAS,MAAA,OAAM;IACf,iBAAA,gBAAA;IACA,gBAAA,eAAA;;;;;;;;;;SAEL,mBAKM,OAAA,MAAA,CAJJ,YAGsC,wBAAA;IAFnC,UAAA,MAAA,SAAQ;IACR,gBAAA,eAAA;IACA,SAAS,QAAA,SAAS,WAAO,EAAA"}
1
+ {"version":3,"file":"DocSettings.vue.script.js","names":[],"sources":["../../../src/views/Settings/DocSettings.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n getActiveEnvironment,\n getSelectedServer,\n getServers,\n} from '@scalar/workspace-store/request-example'\nimport type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport ServerSelector from '@/components/ServerSelector.vue'\nimport { useState } from '@/state/state'\nimport Auth from '@/views/Settings/Auth.vue'\n\nconst { document, name } = defineProps<{\n document: OpenApiDocument\n name: string\n}>()\n\nconst { workspaceStore, config, eventBus } = useState()\n\nconst environment = computed(\n () => getActiveEnvironment(workspaceStore, document).environment,\n)\n\nconst selectedServer = computed(() => {\n const servers = getServers(document.servers, {\n documentUrl: document['x-scalar-original-source-url'],\n })\n\n return getSelectedServer(document, null, null, servers)\n})\n\nconst securitySchemes = computed(\n () => document.components?.securitySchemes ?? {},\n)\n</script>\n\n<template>\n <div class=\"docSettings\">\n <div>\n <Auth\n :authStore=\"workspaceStore.auth\"\n :document\n :environment\n :eventBus\n :name\n :options=\"config\"\n :securitySchemes\n :selectedServer />\n </div>\n <div>\n <ServerSelector\n :eventBus\n :selectedServer\n :servers=\"document.servers ?? []\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.docSettings {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 12px;\n font-size: var(--scalar-font-size-3);\n max-height: 600px;\n}\n\n.documentName {\n font-weight: var(--scalar-semibold);\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;EAkBA,MAAM,EAAE,gBAAgB,QAAQ,aAAa,SAAS;EAEtD,MAAM,cAAc,eACZ,qBAAqB,gBAAgB,QAAA,QAAQ,CAAC,CAAC,WACvD;EAEA,MAAM,iBAAiB,eAAe;GACpC,MAAM,UAAU,WAAW,QAAA,SAAS,SAAS,EAC3C,aAAa,QAAA,SAAS,gCACxB,CAAC;GAED,OAAO,kBAAkB,QAAA,UAAU,MAAM,MAAM,OAAO;EACxD,CAAC;EAED,MAAM,kBAAkB,eAChB,QAAA,SAAS,YAAY,mBAAmB,CAAC,CACjD;;uBAIE,mBAkBM,OAlBN,YAkBM,CAjBJ,mBAUM,OAAA,MAAA,CATJ,YAQoB,cAAA;IAPjB,WAAW,MAAA,cAAA,CAAc,CAAC;IAC1B,UAAA,QAAA;IACA,aAAA,YAAA;IACA,UAAA,MAAA,QAAA;IACA,MAAA,QAAA;IACA,SAAS,MAAA,MAAA;IACT,iBAAA,gBAAA;IACA,gBAAA,eAAA;;;;;;;;;;SAEL,mBAKM,OAAA,MAAA,CAJJ,YAGsC,wBAAA;IAFnC,UAAA,MAAA,QAAA;IACA,gBAAA,eAAA;IACA,SAAS,QAAA,SAAS,WAAO,CAAA"}
@@ -3,7 +3,7 @@ import Settings_vue_vue_type_script_setup_true_lang_default from "./Settings.vue
3
3
  /* empty css */
4
4
  /* empty css */
5
5
  //#region src/views/Settings/Settings.vue
6
- var Settings_default = /* @__PURE__ */ _plugin_vue_export_helper_default(Settings_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-dd2544e6"]]);
6
+ var Settings_default = /*#__PURE__*/ _plugin_vue_export_helper_default(Settings_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-dd2544e6"]]);
7
7
  //#endregion
8
8
  export { Settings_default as default };
9
9
 
@@ -18,7 +18,7 @@ var _hoisted_5 = {
18
18
  };
19
19
  var _hoisted_6 = { class: "proxyUrlContainer" };
20
20
  var _hoisted_7 = ["href"];
21
- var Settings_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
21
+ var Settings_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
22
22
  __name: "Settings",
23
23
  props: { modalState: {} },
24
24
  setup(__props) {
@@ -1 +1 @@
1
- {"version":3,"file":"Settings.vue.script.js","names":[],"sources":["../../../src/views/Settings/Settings.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarColorModeToggle } from '@scalar/components/color-mode-toggle'\nimport { ScalarModal, type ModalState } from '@scalar/components/modal'\nimport { ScalarTextInput } from '@scalar/components/text-input'\nimport { ScalarIconCaretDown, ScalarIconCaretRight } from '@scalar/icons'\nimport { isOpenApiDocument } from '@scalar/workspace-store/schemas/type-guards'\n\nimport { URLS } from '@/consts/urls'\nimport { useState } from '@/state/state'\nimport DocSettings from '@/views/Settings/DocSettings.vue'\n\nconst { modalState } = defineProps<{\n modalState: ModalState\n}>()\n\nconst { workspaceStore, proxyUrlRaw } = useState()\n\nfunction selectDocument(name: string) {\n workspaceStore.update('x-scalar-active-document', name)\n}\n</script>\n\n<template>\n <ScalarModal\n class=\"settingsModal\"\n :state=\"modalState\">\n <div class=\"settingsHeading\">\n <h1>Settings</h1>\n <ScalarColorModeToggle class=\"colorToggle ml-auto\" />\n </div>\n <div class=\"documentList\">\n <template\n v-if=\"Object.entries(workspaceStore.workspace.documents).length\">\n <div\n v-for=\"[name, document] of Object.entries(\n workspaceStore.workspace.documents,\n )\"\n :key=\"name\"\n class=\"document\">\n <button\n class=\"documentName\"\n :class=\"{\n documentNameActive:\n workspaceStore.workspace.activeDocument === document,\n }\"\n type=\"button\"\n @click=\"selectDocument(name)\">\n @{{ name }}\n <ScalarIconCaretDown\n v-if=\"workspaceStore.workspace.activeDocument === document\" />\n <ScalarIconCaretRight v-else />\n </button>\n <div\n v-if=\"\n workspaceStore.workspace.activeDocument === document &&\n isOpenApiDocument(document)\n \">\n <DocSettings\n :document\n :name />\n </div>\n </div>\n </template>\n <div\n v-else\n class=\"noDocuments\">\n There's no API definition loaded. Use the + button to load APIs.\n </div>\n </div>\n\n <div class=\"proxyUrlContainer\">\n <label for=\"proxyUrl\">CORS Proxy</label>\n <p>\n All requests will be sent through the specified proxy URL to help avoid\n CORS (Cross-Origin Resource Sharing) issues.\n <a\n class=\"underline\"\n :href=\"URLS.PROXY_SOURCE_CODE\"\n target=\"_blank\">\n Read more\n </a>\n </p>\n <ScalarTextInput\n id=\"proxyUrl\"\n v-model=\"proxyUrlRaw\"\n label=\"Proxy URL\"\n :placeholder=\"URLS.DEFAULT_PROXY_URL\" />\n </div>\n </ScalarModal>\n</template>\n\n<style>\n/* Prevent auth method dropdown from going behind the modal */\n.settingsModal .scalar-modal-layout {\n z-index: 10 !important;\n}\n\n.settingsModal .scalar-modal-body {\n overflow-y: auto;\n overflow-x: hidden;\n}\n</style>\n\n<style scoped>\n.documentList {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-font-size-3);\n margin-bottom: 12px;\n}\n\n.document {\n display: flex;\n flex-direction: column;\n width: calc(100% + 24px);\n left: -12px;\n position: relative;\n padding: 0 12px;\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}\n.document:first-of-type:not(:last-of-type) {\n border-bottom: none;\n}\n\n.documentName {\n gap: 4px;\n display: flex;\n align-items: center;\n font-weight: var(--scalar-semibold);\n color: var(--scalar-color-2);\n padding: 12px 0;\n}\n\n.documentNameActive {\n color: var(--scalar-color-1);\n}\n\n.settingsHeading {\n font-size: 19px;\n margin-bottom: 12px;\n display: flex;\n gap: 5px;\n align-items: center;\n font-weight: var(--scalar-semibold);\n}\n\n.proxyUrlContainer {\n font-size: var(--scalar-font-size-3);\n display: flex;\n gap: 5px;\n flex-direction: column;\n}\n.proxyUrlContainer label {\n font-weight: var(--scalar-semibold);\n}\n.noDocuments {\n color: var(--scalar-color-2);\n margin-bottom: 10px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAeA,MAAM,EAAE,gBAAgB,gBAAgB,UAAS;EAEjD,SAAS,eAAe,MAAc;AACpC,kBAAe,OAAO,4BAA4B,KAAI;;;uBAKtD,YAiEc,MAAA,YAAA,EAAA;IAhEZ,OAAM;IACL,OAAO,QAAA;;2BAIF;KAHN,mBAGM,OAHN,YAGM,CAAA,OAAA,OAAA,OAAA,KAFJ,mBAAiB,MAAA,MAAb,YAAQ,GAAA,GACZ,YAAqD,MAAA,sBAAA,EAAA,EAA9B,OAAM,uBAAqB,CAAA,CAAA,CAAA;KAEpD,mBAsCM,OAtCN,YAsCM,CApCI,OAAO,QAAQ,MAAA,eAAc,CAAC,UAAU,UAAS,CAAE,UAAA,UAAA,KAAA,EACzD,mBA4BM,UAAA,EAAA,KAAA,GAAA,EAAA,WA3BuB,OAAO,QAAqB,MAAA,eAAc,CAAC,UAAU,UAAA,GAAA,CAAxE,MAAM,cAAQ;0BADxB,mBA4BM,OAAA;OAxBH,KAAK;OACN,OAAM;UACN,mBAYS,UAAA;OAXP,OAAK,eAAA,CAAC,gBAAc,EAAA,oBACwC,MAAA,eAAc,CAAC,UAAU,mBAAmB,UAAA,CAAA,CAAA;OAIxG,MAAK;OACJ,UAAK,WAAE,eAAe,KAAI;0BAAG,OAC7B,gBAAG,KAAI,GAAG,KACX,EAAA,EACQ,MAAA,eAAc,CAAC,UAAU,mBAAmB,YAAA,WAAA,EADpD,YACgE,MAAA,oBAAA,EAAA,EAAA,KAAA,GAAA,CAAA,KAAA,WAAA,EAChE,YAA+B,MAAA,qBAAA,EAAA,EAAA,KAAA,GAAA,CAAA,EAAA,EAAA,IAAA,WAAA,EAGV,MAAA,eAAc,CAAC,UAAU,mBAAmB,YAA0B,MAAA,kBAAiB,CAAC,SAAQ,IAAA,WAAA,EADvH,mBAQM,OAAA,YAAA,CAHJ,YAEU,qBAAA;OADP;OACA;;+BAIT,mBAIM,OAJN,YAEsB,qEAEtB,EAAA,CAAA;KAGF,mBAiBM,OAjBN,YAiBM;gCAhBJ,mBAAwC,SAAA,EAAjC,KAAI,YAAU,EAAC,cAAU,GAAA;MAChC,mBASI,KAAA,MAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBATD,0HAGD,GAAA,GAAA,mBAKI,KAAA;OAJF,OAAM;OACL,MAAM,MAAA,KAAI,CAAC;OACZ,QAAO;SAAS,eAElB,GAAA,WAAA,CAAA,CAAA;MAEF,YAI0C,MAAA,gBAAA,EAAA;OAHxC,IAAG;mBACM,MAAA,YAAW;qGAAA,QAAA,SAAA;OACpB,OAAM;OACL,aAAa,MAAA,KAAI,CAAC"}
1
+ {"version":3,"file":"Settings.vue.script.js","names":[],"sources":["../../../src/views/Settings/Settings.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarColorModeToggle } from '@scalar/components/color-mode-toggle'\nimport { ScalarModal, type ModalState } from '@scalar/components/modal'\nimport { ScalarTextInput } from '@scalar/components/text-input'\nimport { ScalarIconCaretDown, ScalarIconCaretRight } from '@scalar/icons'\nimport { isOpenApiDocument } from '@scalar/workspace-store/schemas/type-guards'\n\nimport { URLS } from '@/consts/urls'\nimport { useState } from '@/state/state'\nimport DocSettings from '@/views/Settings/DocSettings.vue'\n\nconst { modalState } = defineProps<{\n modalState: ModalState\n}>()\n\nconst { workspaceStore, proxyUrlRaw } = useState()\n\nfunction selectDocument(name: string) {\n workspaceStore.update('x-scalar-active-document', name)\n}\n</script>\n\n<template>\n <ScalarModal\n class=\"settingsModal\"\n :state=\"modalState\">\n <div class=\"settingsHeading\">\n <h1>Settings</h1>\n <ScalarColorModeToggle class=\"colorToggle ml-auto\" />\n </div>\n <div class=\"documentList\">\n <template\n v-if=\"Object.entries(workspaceStore.workspace.documents).length\">\n <div\n v-for=\"[name, document] of Object.entries(\n workspaceStore.workspace.documents,\n )\"\n :key=\"name\"\n class=\"document\">\n <button\n class=\"documentName\"\n :class=\"{\n documentNameActive:\n workspaceStore.workspace.activeDocument === document,\n }\"\n type=\"button\"\n @click=\"selectDocument(name)\">\n @{{ name }}\n <ScalarIconCaretDown\n v-if=\"workspaceStore.workspace.activeDocument === document\" />\n <ScalarIconCaretRight v-else />\n </button>\n <div\n v-if=\"\n workspaceStore.workspace.activeDocument === document &&\n isOpenApiDocument(document)\n \">\n <DocSettings\n :document\n :name />\n </div>\n </div>\n </template>\n <div\n v-else\n class=\"noDocuments\">\n There's no API definition loaded. Use the + button to load APIs.\n </div>\n </div>\n\n <div class=\"proxyUrlContainer\">\n <label for=\"proxyUrl\">CORS Proxy</label>\n <p>\n All requests will be sent through the specified proxy URL to help avoid\n CORS (Cross-Origin Resource Sharing) issues.\n <a\n class=\"underline\"\n :href=\"URLS.PROXY_SOURCE_CODE\"\n target=\"_blank\">\n Read more\n </a>\n </p>\n <ScalarTextInput\n id=\"proxyUrl\"\n v-model=\"proxyUrlRaw\"\n label=\"Proxy URL\"\n :placeholder=\"URLS.DEFAULT_PROXY_URL\" />\n </div>\n </ScalarModal>\n</template>\n\n<style>\n/* Prevent auth method dropdown from going behind the modal */\n.settingsModal .scalar-modal-layout {\n z-index: 10 !important;\n}\n\n.settingsModal .scalar-modal-body {\n overflow-y: auto;\n overflow-x: hidden;\n}\n</style>\n\n<style scoped>\n.documentList {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-font-size-3);\n margin-bottom: 12px;\n}\n\n.document {\n display: flex;\n flex-direction: column;\n width: calc(100% + 24px);\n left: -12px;\n position: relative;\n padding: 0 12px;\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}\n.document:first-of-type:not(:last-of-type) {\n border-bottom: none;\n}\n\n.documentName {\n gap: 4px;\n display: flex;\n align-items: center;\n font-weight: var(--scalar-semibold);\n color: var(--scalar-color-2);\n padding: 12px 0;\n}\n\n.documentNameActive {\n color: var(--scalar-color-1);\n}\n\n.settingsHeading {\n font-size: 19px;\n margin-bottom: 12px;\n display: flex;\n gap: 5px;\n align-items: center;\n font-weight: var(--scalar-semibold);\n}\n\n.proxyUrlContainer {\n font-size: var(--scalar-font-size-3);\n display: flex;\n gap: 5px;\n flex-direction: column;\n}\n.proxyUrlContainer label {\n font-weight: var(--scalar-semibold);\n}\n.noDocuments {\n color: var(--scalar-color-2);\n margin-bottom: 10px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAeA,MAAM,EAAE,gBAAgB,gBAAgB,SAAS;EAEjD,SAAS,eAAe,MAAc;GACpC,eAAe,OAAO,4BAA4B,IAAI;EACxD;;uBAIE,YAiEc,MAAA,WAAA,GAAA;IAhEZ,OAAM;IACL,OAAO,QAAA;;2BAIF;KAHN,mBAGM,OAHN,YAGM,CAAA,OAAA,OAAA,OAAA,KAFJ,mBAAiB,MAAA,MAAb,YAAQ,EAAA,IACZ,YAAqD,MAAA,qBAAA,GAAA,EAA9B,OAAM,sBAAqB,CAAA,CAAA,CAAA;KAEpD,mBAsCM,OAtCN,YAsCM,CApCI,OAAO,QAAQ,MAAA,cAAA,CAAc,CAAC,UAAU,SAAS,CAAA,CAAE,UAAA,UAAA,IAAA,GACzD,mBA4BM,UAAA,EAAA,KAAA,EAAA,GAAA,WA3BuB,OAAO,QAAqB,MAAA,cAAA,CAAc,CAAC,UAAU,SAAA,IAAA,CAAxE,MAAM,cAAQ;0BADxB,mBA4BM,OAAA;OAxBH,KAAK;OACN,OAAM;UACN,mBAYS,UAAA;OAXP,OAAK,eAAA,CAAC,gBAAc,EAAA,oBACwC,MAAA,cAAA,CAAc,CAAC,UAAU,mBAAmB,SAAA,CAAA,CAAA;OAIxG,MAAK;OACJ,UAAK,WAAE,eAAe,IAAI;0BAAG,OAC7B,gBAAG,IAAI,IAAG,KACX,CAAA,GACQ,MAAA,cAAA,CAAc,CAAC,UAAU,mBAAmB,YAAA,UAAA,GADpD,YACgE,MAAA,mBAAA,GAAA,EAAA,KAAA,EAAA,CAAA,MAAA,UAAA,GAChE,YAA+B,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,CAAA,EAAA,GAAA,IAAA,UAAA,GAGV,MAAA,cAAA,CAAc,CAAC,UAAU,mBAAmB,YAA0B,MAAA,iBAAA,CAAiB,CAAC,QAAQ,KAAA,UAAA,GADvH,mBAQM,OAAA,YAAA,CAHJ,YAEU,qBAAA;OADP;OACA;;+BAIT,mBAIM,OAJN,YAEsB,oEAEtB,EAAA,CAAA;KAGF,mBAiBM,OAjBN,YAiBM;gCAhBJ,mBAAwC,SAAA,EAAjC,KAAI,WAAU,GAAC,cAAU,EAAA;MAChC,mBASI,KAAA,MAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBATD,0HAGD,EAAA,IAAA,mBAKI,KAAA;OAJF,OAAM;OACL,MAAM,MAAA,IAAA,CAAI,CAAC;OACZ,QAAO;SAAS,eAElB,GAAA,UAAA,CAAA,CAAA;MAEF,YAI0C,MAAA,eAAA,GAAA;OAHxC,IAAG;mBACM,MAAA,WAAA;qGAAW,QAAA,SAAA;OACpB,OAAM;OACL,aAAa,MAAA,IAAA,CAAI,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Start.vue.d.ts","sourceRoot":"","sources":["../../src/views/Start.vue"],"names":[],"mappings":"AAqMA,QAAA,MAAM,YAAY;;;;;;iFAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"Start.vue.d.ts","sourceRoot":"","sources":["../../src/views/Start.vue"],"names":[],"mappings":"AAuMA,QAAA,MAAM,YAAY;;;;;;iFAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../_virtual/_plugin-vue_export-he
2
2
  import Start_vue_vue_type_script_setup_true_lang_default from "./Start.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/views/Start.vue
5
- var Start_default = /* @__PURE__ */ _plugin_vue_export_helper_default(Start_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-f9ec1d34"]]);
5
+ var Start_default = /*#__PURE__*/ _plugin_vue_export_helper_default(Start_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-f9ec1d34"]]);
6
6
  //#endregion
7
7
  export { Start_default as default };
8
8
 
@@ -8,7 +8,7 @@ var _hoisted_1 = { class: "startContainer" };
8
8
  var _hoisted_2 = { class: "disclaimerText" };
9
9
  var _hoisted_3 = ["href"];
10
10
  var _hoisted_4 = ["href"];
11
- var Start_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
11
+ var Start_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
12
  __name: "Start",
13
13
  emits: ["submit", "uploadApi"],
14
14
  setup(__props, { emit: __emit }) {
@@ -1 +1 @@
1
- {"version":3,"file":"Start.vue.script.js","names":[],"sources":["../../src/views/Start.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport Logo from '@/components/Logo.vue'\nimport { URLS } from '@/consts/urls'\nimport { useState } from '@/state/state'\nimport PromptForm from '@/views/PromptForm.vue'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\nconst { mode } = useState()\n</script>\n\n<template>\n <div class=\"startContainer\">\n <Logo class=\"agentLogo\" />\n <p class=\"promptText\">How can I help you today?</p>\n <PromptForm\n ref=\"promptFormField\"\n @submit=\"emit('submit')\"\n @uploadApi=\"emit('uploadApi')\" />\n <p class=\"disclaimerText\">\n <template v-if=\"mode === 'preview'\">\n By messaging Agent Scalar your OpenAPI document will be temporarily\n uploaded to Scalar's servers. You must agree to our\n </template>\n <template v-else>By messaging Agent Scalar you agree to our </template>\n <a\n class=\"disclaimerLink\"\n :href=\"URLS.TERMS_AND_CONDITIONS\"\n target=\"_blank\"\n >Terms</a\n >\n and\n <a\n class=\"disclaimerLink\"\n :href=\"URLS.PRIVACY_POLICY\"\n target=\"_blank\"\n >Privacy Policy</a\n >.\n </p>\n </div>\n</template>\n\n<style scoped>\n.agentLogo {\n margin-bottom: 15px;\n}\n\n.startContainer {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n max-width: 720px;\n position: relative;\n}\n\n.promptText {\n font-size: 1.5rem;\n font-weight: var(--scalar-font-bold);\n margin-bottom: 50px;\n}\n\n.disclaimerText {\n text-align: center;\n color: var(--scalar-color-3);\n font-size: var(--scalar-font-size-3);\n text-wrap: balance;\n line-height: 1.44;\n margin-top: 40px;\n}\n\n.disclaimerLink {\n text-decoration: underline;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;EAMA,MAAM,OAAO;EAKb,MAAM,EAAE,SAAS,UAAS;;uBAIxB,mBA2BM,OA3BN,YA2BM;IA1BJ,YAA0B,cAAA,EAApB,OAAM,aAAW,CAAA;8BACvB,mBAAmD,KAAA,EAAhD,OAAM,cAAY,EAAC,6BAAyB,GAAA;IAC/C,YAGmC,oBAAA;KAFjC,KAAI;KACH,UAAM,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,SAAA;KACZ,aAAS,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,YAAA;;IAClB,mBAmBI,KAnBJ,YAmBI;KAlBc,MAAA,KAAI,KAAA,aAAA,WAAA,EAApB,mBAGW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAHyB,4HAGpC,CAAA,EAAA,GAAA,KAAA,WAAA,EACA,mBAAuE,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAtD,8CAA2C,CAAA,EAAA,GAAA;KAC5D,mBAKC,KAAA;MAJC,OAAM;MACL,MAAM,MAAA,KAAI,CAAC;MACZ,QAAO;QACN,SAAK,GAAA,WAAA;+CACP,SAED,GAAA;KAAA,mBAKC,KAAA;MAJC,OAAM;MACL,MAAM,MAAA,KAAI,CAAC;MACZ,QAAO;QACN,kBAAc,GAAA,WAAA;+CAChB,MACH,GAAA"}
1
+ {"version":3,"file":"Start.vue.script.js","names":[],"sources":["../../src/views/Start.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport Logo from '@/components/Logo.vue'\nimport { URLS } from '@/consts/urls'\nimport { useState } from '@/state/state'\nimport PromptForm from '@/views/PromptForm.vue'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\nconst { mode } = useState()\n</script>\n\n<template>\n <div class=\"startContainer\">\n <Logo class=\"agentLogo\" />\n <p class=\"promptText\">How can I help you today?</p>\n <PromptForm\n ref=\"promptFormField\"\n @submit=\"emit('submit')\"\n @uploadApi=\"emit('uploadApi')\" />\n <p class=\"disclaimerText\">\n <template v-if=\"mode === 'preview'\">\n By messaging Agent Scalar your OpenAPI document will be temporarily\n uploaded to Scalar's servers. You must agree to our\n </template>\n <template v-else>By messaging Agent Scalar you agree to our </template>\n <a\n class=\"disclaimerLink\"\n :href=\"URLS.TERMS_AND_CONDITIONS\"\n target=\"_blank\"\n >Terms</a\n >\n and\n <a\n class=\"disclaimerLink\"\n :href=\"URLS.PRIVACY_POLICY\"\n target=\"_blank\"\n >Privacy Policy</a\n >.\n </p>\n </div>\n</template>\n\n<style scoped>\n.agentLogo {\n margin-bottom: 15px;\n}\n\n.startContainer {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n max-width: 720px;\n position: relative;\n}\n\n.promptText {\n font-size: 1.5rem;\n font-weight: var(--scalar-font-bold);\n margin-bottom: 50px;\n}\n\n.disclaimerText {\n text-align: center;\n color: var(--scalar-color-3);\n font-size: var(--scalar-font-size-3);\n text-wrap: balance;\n line-height: 1.44;\n margin-top: 40px;\n}\n\n.disclaimerLink {\n text-decoration: underline;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;EAMA,MAAM,OAAO;EAKb,MAAM,EAAE,SAAS,SAAS;;uBAIxB,mBA2BM,OA3BN,YA2BM;IA1BJ,YAA0B,cAAA,EAApB,OAAM,YAAW,CAAA;8BACvB,mBAAmD,KAAA,EAAhD,OAAM,aAAY,GAAC,6BAAyB,EAAA;IAC/C,YAGmC,oBAAA;KAFjC,KAAI;KACH,UAAM,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;KACZ,aAAS,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,WAAA;;IAClB,mBAmBI,KAnBJ,YAmBI;KAlBc,MAAA,IAAA,MAAI,aAAA,UAAA,GAApB,mBAGW,UAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBAHyB,2HAGpC,CAAA,GAAA,EAAA,MAAA,UAAA,GACA,mBAAuE,UAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBAAtD,6CAA2C,CAAA,GAAA,EAAA;KAC5D,mBAKC,KAAA;MAJC,OAAM;MACL,MAAM,MAAA,IAAA,CAAI,CAAC;MACZ,QAAO;QACN,SAAK,GAAA,UAAA;+CACP,SAED,EAAA;KAAA,mBAKC,KAAA;MAJC,OAAM;MACL,MAAM,MAAA,IAAA,CAAI,CAAC;MACZ,QAAO;QACN,kBAAc,GAAA,UAAA;+CAChB,MACH,EAAA"}
@@ -910,7 +910,7 @@
910
910
  width: 20px;
911
911
  }
912
912
 
913
- .actionContainer[data-v-5e4d9063] {
913
+ .actionContainer[data-v-ba1161a7] {
914
914
  background: color-mix(
915
915
  in srgb,
916
916
  var(--scalar-background-2),
@@ -923,7 +923,7 @@
923
923
  /* visually hides overflowing text below */
924
924
  box-shadow: 0 24px 0 2px var(--scalar-background-1);
925
925
  }
926
- .promptForm[data-v-5e4d9063] {
926
+ .promptForm[data-v-ba1161a7] {
927
927
  width: 100%;
928
928
  position: relative;
929
929
  display: flex;
@@ -934,23 +934,23 @@
934
934
  0 0 0 var(--scalar-border-width) var(--scalar-border-color);
935
935
  border-radius: var(--scalar-radius-3xl);
936
936
  }
937
- .inputActionsContainer[data-v-5e4d9063] {
937
+ .inputActionsContainer[data-v-ba1161a7] {
938
938
  display: flex;
939
939
  justify-content: space-between;
940
940
  padding: 0 8px 8px 8px;
941
941
  }
942
- .inputActionsLeft[data-v-5e4d9063] {
942
+ .inputActionsLeft[data-v-ba1161a7] {
943
943
  display: flex;
944
944
  flex-wrap: wrap; /* key: allows pills to go to next line */
945
945
  align-items: center;
946
946
  gap: 5px; /* spacing between pills */
947
947
  }
948
- .inputActionsRight[data-v-5e4d9063] {
948
+ .inputActionsRight[data-v-ba1161a7] {
949
949
  display: flex;
950
950
  gap: 5px;
951
951
  position: relative;
952
952
  }
953
- .apiPill[data-v-5e4d9063] {
953
+ .apiPill[data-v-ba1161a7] {
954
954
  font-size: var(--scalar-font-size-3);
955
955
  border: var(--scalar-border-width) solid var(--scalar-border-color);
956
956
  color: var(--scalar-color-2);
@@ -965,10 +965,10 @@
965
965
  gap: 4px;
966
966
  user-select: none;
967
967
  }
968
- .apiPillLogo[data-v-5e4d9063] {
968
+ .apiPillLogo[data-v-ba1161a7] {
969
969
  width: 15px;
970
970
  }
971
- .apiPillRemove[data-v-5e4d9063] {
971
+ .apiPillRemove[data-v-ba1161a7] {
972
972
  width: 24px;
973
973
  height: 24px;
974
974
  margin-right: -6px;
@@ -977,16 +977,16 @@
977
977
  align-items: center;
978
978
  justify-content: center;
979
979
  }
980
- .apiPill:hover .apiPillRemove[data-v-5e4d9063] {
980
+ .apiPill:hover .apiPillRemove[data-v-ba1161a7] {
981
981
  background: var(--scalar-background-2);
982
982
  }
983
- .dark-mode .apiPill:hover .apiPillRemove[data-v-5e4d9063] {
983
+ .dark-mode .apiPill:hover .apiPillRemove[data-v-ba1161a7] {
984
984
  background: var(--scalar-background-3);
985
985
  }
986
- .apiPillRemove[data-v-5e4d9063]:hover {
986
+ .apiPillRemove[data-v-ba1161a7]:hover {
987
987
  color: var(--scalar-color-1);
988
988
  }
989
- .prompt[data-v-5e4d9063] {
989
+ .prompt[data-v-ba1161a7] {
990
990
  width: 100%;
991
991
  outline: none;
992
992
  border: none;
@@ -1003,13 +1003,13 @@
1003
1003
  font-size: 16px;
1004
1004
  padding: 12px 12px 14px 12px;
1005
1005
  }
1006
- .dark-mode .promptForm[data-v-5e4d9063] {
1006
+ .dark-mode .promptForm[data-v-ba1161a7] {
1007
1007
  background: var(--scalar-background-2);
1008
1008
  }
1009
- .prompt[data-v-5e4d9063]:disabled {
1009
+ .prompt[data-v-ba1161a7]:disabled {
1010
1010
  color: var(--scalar-color-3);
1011
1011
  }
1012
- .addAPIButton[data-v-5e4d9063] {
1012
+ .addAPIButton[data-v-ba1161a7] {
1013
1013
  display: flex;
1014
1014
  align-items: center;
1015
1015
  justify-content: center;
@@ -1026,7 +1026,7 @@
1026
1026
  z-index: 1;
1027
1027
  box-shadow: 0 0 0 var(--scalar-border-width) var(--scalar-border-color);
1028
1028
  }
1029
- .addAPIButton[data-v-5e4d9063]:hover {
1029
+ .addAPIButton[data-v-ba1161a7]:hover {
1030
1030
  background: color-mix(
1031
1031
  in srgb,
1032
1032
  var(--scalar-background-2),
@@ -1034,47 +1034,47 @@
1034
1034
  );
1035
1035
  box-shadow: 0 0 0 var(--scalar-border-width) var(--scalar-border-color);
1036
1036
  }
1037
- .dark-mode .addAPIButton[data-v-5e4d9063]:hover {
1037
+ .dark-mode .addAPIButton[data-v-ba1161a7]:hover {
1038
1038
  background: var(--scalar-background-3);
1039
1039
  }
1040
- .settingsButton[data-v-5e4d9063] {
1040
+ .settingsButton[data-v-ba1161a7] {
1041
1041
  color: var(--scalar-color-3) !important;
1042
1042
  border-radius: var(--scalar-radius-full) !important;
1043
1043
  margin: 0 !important;
1044
1044
  z-index: 1;
1045
1045
  }
1046
- .settingsButton[aria-disabled='true'][data-v-5e4d9063] {
1046
+ .settingsButton[aria-disabled='true'][data-v-ba1161a7] {
1047
1047
  background: var(--scalar-background-2);
1048
1048
  }
1049
- .dark-mode .settingsButton[data-v-5e4d9063]:hover {
1049
+ .dark-mode .settingsButton[data-v-ba1161a7]:hover {
1050
1050
  background: var(--scalar-background-3);
1051
1051
  }
1052
- .sendButton[data-v-5e4d9063] {
1052
+ .sendButton[data-v-ba1161a7] {
1053
1053
  background: var(--scalar-color-blue) !important;
1054
1054
  border-radius: var(--scalar-radius-full) !important;
1055
1055
  margin: 0 !important;
1056
1056
  z-index: 1;
1057
1057
  border: var(--scalar-border-width) solid var(--scalar-color-blue);
1058
1058
  }
1059
- .sendButton[data-v-5e4d9063]:not([aria-disabled='true']) {
1059
+ .sendButton[data-v-ba1161a7]:not([aria-disabled='true']) {
1060
1060
  color: white !important;
1061
1061
  }
1062
- .sendButton[data-v-5e4d9063]:not([aria-disabled='true']):hover {
1062
+ .sendButton[data-v-ba1161a7]:not([aria-disabled='true']):hover {
1063
1063
  background: color-mix(
1064
1064
  in srgb,
1065
1065
  var(--scalar-color-blue),
1066
1066
  transparent 10%
1067
1067
  ) !important;
1068
1068
  }
1069
- .sendButton[aria-disabled='true'][data-v-5e4d9063] {
1069
+ .sendButton[aria-disabled='true'][data-v-ba1161a7] {
1070
1070
  background: var(--scalar-background-2) !important;
1071
1071
  color: var(--scalar-color-3) !important;
1072
1072
  border: var(--scalar-border-width) solid var(--scalar-border-color);
1073
1073
  }
1074
- .dark-mode .sendButton[aria-disabled='true'][data-v-5e4d9063] {
1074
+ .dark-mode .sendButton[aria-disabled='true'][data-v-ba1161a7] {
1075
1075
  background: var(--scalar-background-3) !important;
1076
1076
  }
1077
- .contextContainer[data-v-5e4d9063] {
1077
+ .contextContainer[data-v-ba1161a7] {
1078
1078
  display: flex;
1079
1079
  width: 100%;
1080
1080
  padding: 10px 12px 12px 12px;
@@ -1083,25 +1083,25 @@
1083
1083
  user-select: none;
1084
1084
  justify-content: space-between;
1085
1085
  }
1086
- .settingsButton[data-v-5e4d9063] {
1086
+ .settingsButton[data-v-ba1161a7] {
1087
1087
  font-weight: var(--scalar-semibold);
1088
1088
  border-radius: var(--scalar-radius-lg);
1089
1089
  padding: 4px 6px;
1090
1090
  margin: -4px -6px;
1091
1091
  }
1092
- .settingsButton[data-v-5e4d9063]:hover {
1092
+ .settingsButton[data-v-ba1161a7]:hover {
1093
1093
  background: var(--scalar-background-2);
1094
1094
  box-shadow: 0 0 var(--scalar-border-width) 0 var(--scalar-border-color);
1095
1095
  cursor: pointer;
1096
1096
  }
1097
- .agentLabel[data-v-5e4d9063] {
1097
+ .agentLabel[data-v-ba1161a7] {
1098
1098
  font-size: 0px;
1099
1099
  position: absolute;
1100
1100
  width: 100%;
1101
1101
  height: 100%;
1102
1102
  cursor: text;
1103
1103
  }
1104
- .sendCheckboxContinue[data-v-5e4d9063]:has(input) {
1104
+ .sendCheckboxContinue[data-v-ba1161a7]:has(input) {
1105
1105
  display: flex;
1106
1106
  align-items: center;
1107
1107
  border-radius: var(--scalar-radius-3xl);
@@ -1113,11 +1113,11 @@
1113
1113
  user-select: none;
1114
1114
  height: 28px;
1115
1115
  }
1116
- .dark-mode .sendCheckboxContinue[data-v-5e4d9063]:has(input) {
1116
+ .dark-mode .sendCheckboxContinue[data-v-ba1161a7]:has(input) {
1117
1117
  background: var(--scalar-background-3);
1118
1118
  box-shadow: 0 0 0 1.5px var(--scalar-background-3);
1119
1119
  }
1120
- .addMoreContext[data-v-5e4d9063] {
1120
+ .addMoreContext[data-v-ba1161a7] {
1121
1121
  height: 40px;
1122
1122
  display: flex;
1123
1123
  position: relative;
@@ -1126,7 +1126,7 @@
1126
1126
  padding: 0 8px 0 12px;
1127
1127
  align-items: center;
1128
1128
  }
1129
- .addMoreContext[data-v-5e4d9063]:before {
1129
+ .addMoreContext[data-v-ba1161a7]:before {
1130
1130
  content: '';
1131
1131
  width: 8px;
1132
1132
  height: 8px;
@@ -1143,10 +1143,10 @@
1143
1143
  -0.5px -0.5px 0 var(--scalar-border-color),
1144
1144
  inset 0.5px 0.5px 1px var(--scalar-border-color);
1145
1145
  }
1146
- .dark-mode .addMoreContext[data-v-5e4d9063]:before {
1146
+ .dark-mode .addMoreContext[data-v-ba1161a7]:before {
1147
1147
  box-shadow: -0.5px -0.5px 0 var(--scalar-border-color);
1148
1148
  }
1149
- .addAPIContext[data-v-5e4d9063] {
1149
+ .addAPIContext[data-v-ba1161a7] {
1150
1150
  width: 28px;
1151
1151
  height: 28px;
1152
1152
  border-radius: var(--scalar-radius-full);
@@ -1155,7 +1155,7 @@
1155
1155
  justify-content: center;
1156
1156
  border: var(--scalar-border-width) solid var(--scalar-border-color);
1157
1157
  }
1158
- .termsAgree[data-v-5e4d9063] {
1158
+ .termsAgree[data-v-ba1161a7] {
1159
1159
  display: flex;
1160
1160
  cursor: pointer;
1161
1161
  height: inherit;
@@ -1164,14 +1164,14 @@
1164
1164
  gap: 5px;
1165
1165
  margin: 0px 5px;
1166
1166
  }
1167
- .termsAgree[data-v-5e4d9063]:hover {
1167
+ .termsAgree[data-v-ba1161a7]:hover {
1168
1168
  color: var(--scalar-color-1);
1169
1169
  }
1170
- .termsAgree:hover .termsAgreeIcon[data-v-5e4d9063] {
1170
+ .termsAgree:hover .termsAgreeIcon[data-v-ba1161a7] {
1171
1171
  background: var(--scalar-color-1);
1172
1172
  color: var(--scalar-background-1);
1173
1173
  }
1174
- .termsAgreeIcon[data-v-5e4d9063] {
1174
+ .termsAgreeIcon[data-v-ba1161a7] {
1175
1175
  width: inherit;
1176
1176
  height: inherit;
1177
1177
  padding: 2px;
package/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.23",
13
+ "version": "0.12.25",
14
14
  "engines": {
15
15
  "node": ">=22"
16
16
  },
@@ -51,31 +51,31 @@
51
51
  "js-base64": "^3.7.8",
52
52
  "neverpanic": "0.0.8",
53
53
  "truncate-json": "3.0.1",
54
- "vue": "^3.5.30",
55
- "@scalar/api-client": "3.14.0",
56
- "@scalar/components": "0.27.10",
57
- "@scalar/helpers": "0.9.2",
54
+ "vue": "^3.5.40",
55
+ "@scalar/api-client": "3.16.0",
56
+ "@scalar/helpers": "0.10.0",
58
57
  "@scalar/icons": "0.7.5",
59
- "@scalar/json-magic": "0.12.19",
60
- "@scalar/schemas": "0.8.0",
61
- "@scalar/use-toasts": "0.10.4",
58
+ "@scalar/json-magic": "0.12.20",
59
+ "@scalar/schemas": "0.8.1",
62
60
  "@scalar/openapi-types": "0.9.4",
63
- "@scalar/types": "0.17.0",
64
61
  "@scalar/themes": "0.17.2",
62
+ "@scalar/use-toasts": "0.10.4",
63
+ "@scalar/components": "0.27.11",
64
+ "@scalar/types": "0.18.0",
65
65
  "@scalar/validation": "0.6.2",
66
- "@scalar/workspace-store": "0.56.0"
66
+ "@scalar/workspace-store": "0.57.0"
67
67
  },
68
68
  "devDependencies": {
69
- "@tailwindcss/cli": "^4.2.4",
70
- "@tailwindcss/vite": "^4.2.0",
69
+ "@tailwindcss/cli": "^4.3.3",
70
+ "@tailwindcss/vite": "^4.3.3",
71
71
  "@types/jsdom": "28.0.1",
72
- "@vitejs/plugin-vue": "^6.0.3",
72
+ "@vitejs/plugin-vue": "^6.0.8",
73
73
  "hono": "^4.12.7",
74
74
  "jsdom": "27.4.0",
75
- "tailwindcss": "^4.1.18",
76
- "vite": "8.0.0",
77
- "vitest": "4.1.0",
78
- "@scalar/sidebar": "0.9.34"
75
+ "tailwindcss": "^4.3.3",
76
+ "vite": "8.1.5",
77
+ "vitest": "4.1.10",
78
+ "@scalar/sidebar": "0.9.36"
79
79
  },
80
80
  "scripts": {
81
81
  "build": "vite build && pnpm build:styles && vue-tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && shx cp package.json dist",