@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.
- package/dist/App.vue.d.ts.map +1 -1
- package/dist/App.vue.script.js +1 -1
- package/dist/App.vue.script.js.map +1 -1
- package/dist/Chat.vue.d.ts.map +1 -1
- package/dist/Chat.vue.script.js +1 -1
- package/dist/Chat.vue.script.js.map +1 -1
- package/dist/api.js.map +1 -1
- package/dist/client-tools/execute-request.js.map +1 -1
- package/dist/components/ActionsDropdown.vue.d.ts.map +1 -1
- package/dist/components/ActionsDropdown.vue.js +1 -1
- package/dist/components/ActionsDropdown.vue.script.js +1 -1
- package/dist/components/ActionsDropdown.vue.script.js.map +1 -1
- package/dist/components/ApprovalSection.vue.js +1 -1
- package/dist/components/ApprovalSection.vue.script.js +1 -1
- package/dist/components/ApprovalSection.vue.script.js.map +1 -1
- package/dist/components/AuthenticationProvided.vue.js +1 -1
- package/dist/components/AuthenticationProvided.vue.js.map +1 -1
- package/dist/components/AuthenticationRequired.vue.js +1 -1
- package/dist/components/AuthenticationRequired.vue.js.map +1 -1
- package/dist/components/AutosendPaused.vue.js +1 -1
- package/dist/components/AutosendPaused.vue.js.map +1 -1
- package/dist/components/BuildingRequest.vue.js +1 -1
- package/dist/components/BuildingRequest.vue.js.map +1 -1
- package/dist/components/ContextItem.vue.js +1 -1
- package/dist/components/ContextItem.vue.script.js +1 -1
- package/dist/components/ContextItem.vue.script.js.map +1 -1
- package/dist/components/ErrorMessage.vue.js +1 -1
- package/dist/components/ErrorMessage.vue.script.js +1 -1
- package/dist/components/ErrorMessage.vue.script.js.map +1 -1
- package/dist/components/FreeMessagesInfoSection.vue.js +1 -1
- package/dist/components/FreeMessagesInfoSection.vue.script.js +1 -1
- package/dist/components/FreeMessagesInfoSection.vue.script.js.map +1 -1
- package/dist/components/LoadingOpenAPISpecsSummary.vue.js +1 -1
- package/dist/components/LoadingOpenAPISpecsSummary.vue.js.map +1 -1
- package/dist/components/LoadingSearchOpenAPIOperations.vue.js +1 -1
- package/dist/components/LoadingSearchOpenAPIOperations.vue.js.map +1 -1
- package/dist/components/Logo.vue.js +1 -1
- package/dist/components/PaymentSection.vue.js +1 -1
- package/dist/components/PaymentSection.vue.script.js +1 -1
- package/dist/components/PaymentSection.vue.script.js.map +1 -1
- package/dist/components/RequestApproved.vue.js +1 -1
- package/dist/components/RequestApproved.vue.js.map +1 -1
- package/dist/components/RequestFailed.vue.js +1 -1
- package/dist/components/RequestFailed.vue.js.map +1 -1
- package/dist/components/RequestPreview.vue.d.ts.map +1 -1
- package/dist/components/RequestPreview.vue.js +1 -1
- package/dist/components/RequestPreview.vue.script.js +1 -1
- package/dist/components/RequestPreview.vue.script.js.map +1 -1
- package/dist/components/RequestRejected.vue.js +1 -1
- package/dist/components/RequestRejected.vue.js.map +1 -1
- package/dist/components/RequestSuccess.vue.js +1 -1
- package/dist/components/RequestSuccess.vue.js.map +1 -1
- package/dist/components/ResponseBody/ResponseBody.vue.d.ts.map +1 -1
- package/dist/components/ResponseBody/ResponseBody.vue.js.map +1 -1
- package/dist/components/ResponseBody/ResponseBody.vue.script.js +2 -3
- package/dist/components/ResponseBody/ResponseBody.vue.script.js.map +1 -1
- package/dist/components/ResponseBody/ResponseBodyInfo.vue.js +1 -1
- package/dist/components/ResponseBody/ResponseBodyInfo.vue.js.map +1 -1
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.js +1 -1
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js +1 -1
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js.map +1 -1
- package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js +1 -1
- package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js.map +1 -1
- package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js +1 -1
- package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js.map +1 -1
- package/dist/components/ResponseBody/helpers/media-types.d.ts.map +1 -1
- package/dist/components/ResponseBody/helpers/media-types.js +10 -0
- package/dist/components/ResponseBody/helpers/media-types.js.map +1 -1
- package/dist/components/ResponseBody/helpers/process-response-body.js.map +1 -1
- package/dist/components/SearchPopover.vue.d.ts.map +1 -1
- package/dist/components/SearchPopover.vue.js +1 -1
- package/dist/components/SearchPopover.vue.script.js +1 -1
- package/dist/components/SearchPopover.vue.script.js.map +1 -1
- package/dist/components/Selector.vue.d.ts.map +1 -1
- package/dist/components/Selector.vue.script.js +1 -1
- package/dist/components/Selector.vue.script.js.map +1 -1
- package/dist/components/SendingRequest.vue.js +1 -1
- package/dist/components/SendingRequest.vue.js.map +1 -1
- package/dist/components/ServerSelector.vue.d.ts.map +1 -1
- package/dist/components/ServerSelector.vue.script.js +1 -1
- package/dist/components/ServerSelector.vue.script.js.map +1 -1
- package/dist/components/UploadSection.vue.js +1 -1
- package/dist/components/UploadSection.vue.script.js +1 -1
- package/dist/components/UploadSection.vue.script.js.map +1 -1
- package/dist/consts/urls.js.map +1 -1
- package/dist/entities/error/constants.js.map +1 -1
- package/dist/entities/error/helpers.js.map +1 -1
- package/dist/entities/registry/document.js.map +1 -1
- package/dist/entities/tools/ask-for-authentication.js.map +1 -1
- package/dist/entities/tools/execute-request.js.map +1 -1
- package/dist/entities/tools/search-openapi-operations.js.map +1 -1
- package/dist/helpers.d.ts +16 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +7 -0
- package/dist/helpers.js.map +1 -1
- package/dist/hooks/use-agent-key-documents.js.map +1 -1
- package/dist/hooks/use-chat-approvals.js.map +1 -1
- package/dist/hooks/use-chat-error.js.map +1 -1
- package/dist/hooks/use-chat-pending-client-tool-parts.js.map +1 -1
- package/dist/hooks/use-chat-scroll.js.map +1 -1
- package/dist/hooks/use-curated-documents.js.map +1 -1
- package/dist/hooks/use-search.js.map +1 -1
- package/dist/hooks/use-signup-link.js.map +1 -1
- package/dist/hooks/use-term-and-conditions.js.map +1 -1
- package/dist/hooks/use-upload-tmp-document.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/plugins/persistance.js +6 -1
- package/dist/plugins/persistance.js.map +1 -1
- package/dist/registry/add-documents-to-store.js.map +1 -1
- package/dist/registry/create-document-name.js.map +1 -1
- package/dist/state/state.js.map +1 -1
- package/dist/style.css +318 -322
- package/dist/views/Catalog/Catalog.vue.d.ts.map +1 -1
- package/dist/views/Catalog/Catalog.vue.js +1 -1
- package/dist/views/Catalog/Catalog.vue.script.js +1 -1
- package/dist/views/Catalog/Catalog.vue.script.js.map +1 -1
- package/dist/views/Chat/Chat.vue.d.ts.map +1 -1
- package/dist/views/Chat/Chat.vue.js +1 -1
- package/dist/views/Chat/Chat.vue.script.js +1 -1
- package/dist/views/Chat/Chat.vue.script.js.map +1 -1
- package/dist/views/Chat/Messages/AskForAuthentication.vue.d.ts.map +1 -1
- package/dist/views/Chat/Messages/AskForAuthentication.vue.js +1 -1
- package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js +1 -1
- package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js.map +1 -1
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +1 -1
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js +1 -1
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js.map +1 -1
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js +1 -1
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js.map +1 -1
- package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.js +1 -1
- package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.script.js +1 -1
- package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.script.js.map +1 -1
- package/dist/views/Chat/Messages/Text.vue.script.js +1 -1
- package/dist/views/Chat/Messages/Text.vue.script.js.map +1 -1
- package/dist/views/Layout.vue.d.ts.map +1 -1
- package/dist/views/Layout.vue.js +1 -1
- package/dist/views/Layout.vue.script.js +1 -1
- package/dist/views/Layout.vue.script.js.map +1 -1
- package/dist/views/PromptForm.vue.d.ts.map +1 -1
- package/dist/views/PromptForm.vue.js +1 -1
- package/dist/views/PromptForm.vue.js.map +1 -1
- package/dist/views/PromptForm.vue.script.js +3 -2
- package/dist/views/PromptForm.vue.script.js.map +1 -1
- package/dist/views/Settings/Auth.vue.script.js +1 -1
- package/dist/views/Settings/Auth.vue.script.js.map +1 -1
- package/dist/views/Settings/DocSettings.vue.js +1 -1
- package/dist/views/Settings/DocSettings.vue.script.js +1 -1
- package/dist/views/Settings/DocSettings.vue.script.js.map +1 -1
- package/dist/views/Settings/Settings.vue.js +1 -1
- package/dist/views/Settings/Settings.vue.script.js +1 -1
- package/dist/views/Settings/Settings.vue.script.js.map +1 -1
- package/dist/views/Start.vue.d.ts.map +1 -1
- package/dist/views/Start.vue.js +1 -1
- package/dist/views/Start.vue.script.js +1 -1
- package/dist/views/Start.vue.script.js.map +1 -1
- package/dist/vue-styles.css +39 -39
- 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 =
|
|
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,
|
|
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 =
|
|
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 =
|
|
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,
|
|
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 =
|
|
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 =
|
|
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,
|
|
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":"
|
|
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"}
|
package/dist/views/Start.vue.js
CHANGED
|
@@ -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 =
|
|
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 =
|
|
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,
|
|
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"}
|
package/dist/vue-styles.css
CHANGED
|
@@ -910,7 +910,7 @@
|
|
|
910
910
|
width: 20px;
|
|
911
911
|
}
|
|
912
912
|
|
|
913
|
-
.actionContainer[data-v-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
948
|
+
.inputActionsRight[data-v-ba1161a7] {
|
|
949
949
|
display: flex;
|
|
950
950
|
gap: 5px;
|
|
951
951
|
position: relative;
|
|
952
952
|
}
|
|
953
|
-
.apiPill[data-v-
|
|
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-
|
|
968
|
+
.apiPillLogo[data-v-ba1161a7] {
|
|
969
969
|
width: 15px;
|
|
970
970
|
}
|
|
971
|
-
.apiPillRemove[data-v-
|
|
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-
|
|
980
|
+
.apiPill:hover .apiPillRemove[data-v-ba1161a7] {
|
|
981
981
|
background: var(--scalar-background-2);
|
|
982
982
|
}
|
|
983
|
-
.dark-mode .apiPill:hover .apiPillRemove[data-v-
|
|
983
|
+
.dark-mode .apiPill:hover .apiPillRemove[data-v-ba1161a7] {
|
|
984
984
|
background: var(--scalar-background-3);
|
|
985
985
|
}
|
|
986
|
-
.apiPillRemove[data-v-
|
|
986
|
+
.apiPillRemove[data-v-ba1161a7]:hover {
|
|
987
987
|
color: var(--scalar-color-1);
|
|
988
988
|
}
|
|
989
|
-
.prompt[data-v-
|
|
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-
|
|
1006
|
+
.dark-mode .promptForm[data-v-ba1161a7] {
|
|
1007
1007
|
background: var(--scalar-background-2);
|
|
1008
1008
|
}
|
|
1009
|
-
.prompt[data-v-
|
|
1009
|
+
.prompt[data-v-ba1161a7]:disabled {
|
|
1010
1010
|
color: var(--scalar-color-3);
|
|
1011
1011
|
}
|
|
1012
|
-
.addAPIButton[data-v-
|
|
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-
|
|
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-
|
|
1037
|
+
.dark-mode .addAPIButton[data-v-ba1161a7]:hover {
|
|
1038
1038
|
background: var(--scalar-background-3);
|
|
1039
1039
|
}
|
|
1040
|
-
.settingsButton[data-v-
|
|
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-
|
|
1046
|
+
.settingsButton[aria-disabled='true'][data-v-ba1161a7] {
|
|
1047
1047
|
background: var(--scalar-background-2);
|
|
1048
1048
|
}
|
|
1049
|
-
.dark-mode .settingsButton[data-v-
|
|
1049
|
+
.dark-mode .settingsButton[data-v-ba1161a7]:hover {
|
|
1050
1050
|
background: var(--scalar-background-3);
|
|
1051
1051
|
}
|
|
1052
|
-
.sendButton[data-v-
|
|
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-
|
|
1059
|
+
.sendButton[data-v-ba1161a7]:not([aria-disabled='true']) {
|
|
1060
1060
|
color: white !important;
|
|
1061
1061
|
}
|
|
1062
|
-
.sendButton[data-v-
|
|
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-
|
|
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-
|
|
1074
|
+
.dark-mode .sendButton[aria-disabled='true'][data-v-ba1161a7] {
|
|
1075
1075
|
background: var(--scalar-background-3) !important;
|
|
1076
1076
|
}
|
|
1077
|
-
.contextContainer[data-v-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
1167
|
+
.termsAgree[data-v-ba1161a7]:hover {
|
|
1168
1168
|
color: var(--scalar-color-1);
|
|
1169
1169
|
}
|
|
1170
|
-
.termsAgree:hover .termsAgreeIcon[data-v-
|
|
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-
|
|
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.
|
|
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.
|
|
55
|
-
"@scalar/api-client": "3.
|
|
56
|
-
"@scalar/
|
|
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.
|
|
60
|
-
"@scalar/schemas": "0.8.
|
|
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.
|
|
66
|
+
"@scalar/workspace-store": "0.57.0"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@tailwindcss/cli": "^4.
|
|
70
|
-
"@tailwindcss/vite": "^4.
|
|
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.
|
|
72
|
+
"@vitejs/plugin-vue": "^6.0.8",
|
|
73
73
|
"hono": "^4.12.7",
|
|
74
74
|
"jsdom": "27.4.0",
|
|
75
|
-
"tailwindcss": "^4.
|
|
76
|
-
"vite": "8.
|
|
77
|
-
"vitest": "4.1.
|
|
78
|
-
"@scalar/sidebar": "0.9.
|
|
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",
|