@scalar/agent-chat 0.12.24 → 0.12.26

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBody.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ResponseBody/ResponseBody.vue"],"names":[],"mappings":"AAgDA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAIhF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE;QACZ,QAAQ,CAAC,EAAE,QAAQ,CAAA;QACnB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,KAAK,CAAA;CAC5B,CAAC;AAgEF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"ResponseBody.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ResponseBody/ResponseBody.vue"],"names":[],"mappings":"AAuCA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAIhF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE;QACZ,QAAQ,CAAC,EAAE,QAAQ,CAAA;QACnB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,KAAK,CAAA;CAC5B,CAAC;AA2DF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBody.vue.js","names":[],"sources":["../../../src/components/ResponseBody/ResponseBody.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { watch } from 'vue'\n\nimport { type MediaConfig } from '@/components/ResponseBody/helpers/media-types'\nimport ResponseBodyInfo from '@/components/ResponseBody/ResponseBodyInfo.vue'\nimport ResponseBodyPreview from '@/components/ResponseBody/ResponseBodyPreview.vue'\nimport ResponseBodyRaw from '@/components/ResponseBody/ResponseBodyRaw.vue'\nimport type { MimeType } from '@/types/mime-type'\n\nconst { data, responseBody, mediaConfig, display } = defineProps<{\n data: unknown\n responseBody: {\n mimeType?: MimeType\n attachmentFilename: string\n dataUrl: string\n }\n mediaConfig?: MediaConfig\n display?: 'preview' | 'raw'\n}>()\n\nwatch(\n () => display,\n (v) => console.log(v),\n)\n</script>\n\n<template>\n <ResponseBodyRaw\n v-if=\"mediaConfig?.raw && display === 'raw' && mediaConfig.language\"\n :key=\"responseBody.dataUrl\"\n :content=\"data\"\n :language=\"mediaConfig.language\" />\n <ResponseBodyPreview\n v-if=\"mediaConfig?.preview && display === 'preview'\"\n :key=\"responseBody.dataUrl\"\n :alpha=\"mediaConfig.alpha\"\n :mode=\"mediaConfig.preview\"\n :src=\"responseBody.dataUrl\"\n :type=\"responseBody.mimeType?.essence ?? ''\" />\n <ResponseBodyInfo v-if=\"!mediaConfig?.raw && !mediaConfig?.preview\">\n Binary file\n </ResponseBodyInfo>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ResponseBody.vue.js","names":[],"sources":["../../../src/components/ResponseBody/ResponseBody.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { type MediaConfig } from '@/components/ResponseBody/helpers/media-types'\nimport ResponseBodyInfo from '@/components/ResponseBody/ResponseBodyInfo.vue'\nimport ResponseBodyPreview from '@/components/ResponseBody/ResponseBodyPreview.vue'\nimport ResponseBodyRaw from '@/components/ResponseBody/ResponseBodyRaw.vue'\nimport type { MimeType } from '@/types/mime-type'\n\nconst { data, responseBody, mediaConfig, display } = defineProps<{\n data: unknown\n responseBody: {\n mimeType?: MimeType\n attachmentFilename: string\n dataUrl: string\n }\n mediaConfig?: MediaConfig\n display?: 'preview' | 'raw'\n}>()\n</script>\n\n<template>\n <ResponseBodyRaw\n v-if=\"mediaConfig?.raw && display === 'raw' && mediaConfig.language\"\n :key=\"responseBody.dataUrl\"\n :content=\"data\"\n :language=\"mediaConfig.language\" />\n <ResponseBodyPreview\n v-if=\"mediaConfig?.preview && display === 'preview'\"\n :key=\"responseBody.dataUrl\"\n :alpha=\"mediaConfig.alpha\"\n :mode=\"mediaConfig.preview\"\n :src=\"responseBody.dataUrl\"\n :type=\"responseBody.mimeType?.essence ?? ''\" />\n <ResponseBodyInfo v-if=\"!mediaConfig?.raw && !mediaConfig?.preview\">\n Binary file\n </ResponseBodyInfo>\n</template>\n"],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  import ResponseBodyInfo_default from "./ResponseBodyInfo.vue.js";
2
2
  import ResponseBodyPreview_default from "./ResponseBodyPreview.vue.js";
3
3
  import ResponseBodyRaw_default from "./ResponseBodyRaw.vue.js";
4
- import { Fragment, createBlock, createCommentVNode, createElementBlock, createTextVNode, defineComponent, openBlock, watch, withCtx } from "vue";
4
+ import { Fragment, createBlock, createCommentVNode, createElementBlock, createTextVNode, defineComponent, openBlock, withCtx } from "vue";
5
5
  //#region src/components/ResponseBody/ResponseBody.vue?vue&type=script&setup=true&lang.ts
6
6
  var ResponseBody_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  __name: "ResponseBody",
@@ -12,7 +12,6 @@ var ResponseBody_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
12
12
  display: {}
13
13
  },
14
14
  setup(__props) {
15
- watch(() => __props.display, (v) => console.log(v));
16
15
  return (_ctx, _cache) => {
17
16
  return openBlock(), createElementBlock(Fragment, null, [
18
17
  __props.mediaConfig?.raw && __props.display === "raw" && __props.mediaConfig.language ? (openBlock(), createBlock(ResponseBodyRaw_default, {
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseBody.vue.script.js","names":[],"sources":["../../../src/components/ResponseBody/ResponseBody.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { watch } from 'vue'\n\nimport { type MediaConfig } from '@/components/ResponseBody/helpers/media-types'\nimport ResponseBodyInfo from '@/components/ResponseBody/ResponseBodyInfo.vue'\nimport ResponseBodyPreview from '@/components/ResponseBody/ResponseBodyPreview.vue'\nimport ResponseBodyRaw from '@/components/ResponseBody/ResponseBodyRaw.vue'\nimport type { MimeType } from '@/types/mime-type'\n\nconst { data, responseBody, mediaConfig, display } = defineProps<{\n data: unknown\n responseBody: {\n mimeType?: MimeType\n attachmentFilename: string\n dataUrl: string\n }\n mediaConfig?: MediaConfig\n display?: 'preview' | 'raw'\n}>()\n\nwatch(\n () => display,\n (v) => console.log(v),\n)\n</script>\n\n<template>\n <ResponseBodyRaw\n v-if=\"mediaConfig?.raw && display === 'raw' && mediaConfig.language\"\n :key=\"responseBody.dataUrl\"\n :content=\"data\"\n :language=\"mediaConfig.language\" />\n <ResponseBodyPreview\n v-if=\"mediaConfig?.preview && display === 'preview'\"\n :key=\"responseBody.dataUrl\"\n :alpha=\"mediaConfig.alpha\"\n :mode=\"mediaConfig.preview\"\n :src=\"responseBody.dataUrl\"\n :type=\"responseBody.mimeType?.essence ?? ''\" />\n <ResponseBodyInfo v-if=\"!mediaConfig?.raw && !mediaConfig?.preview\">\n Binary file\n </ResponseBodyInfo>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAoBA,YACQ,QAAA,UACL,MAAM,QAAQ,IAAI,CAAC,CACtB;;;IAKU,QAAA,aAAa,OAAO,QAAA,YAAO,SAAc,QAAA,YAAY,YAAA,UAAA,GAD7D,YAIqC,yBAAA;KAFlC,KAAK,QAAA,aAAa;KAClB,SAAS,QAAA;KACT,UAAU,QAAA,YAAY;;IAEjB,QAAA,aAAa,WAAW,QAAA,YAAO,aAAA,UAAA,GADvC,YAMiD,6BAAA;KAJ9C,KAAK,QAAA,aAAa;KAClB,OAAO,QAAA,YAAY;KACnB,MAAM,QAAA,YAAY;KAClB,KAAK,QAAA,aAAa;KAClB,MAAM,QAAA,aAAa,UAAU,WAAO;;;;;;;KACd,QAAA,aAAa,OAAG,CAAK,QAAA,aAAa,WAAA,UAAA,GAA3D,YAEmB,0BAAA,EAAA,KAAA,EAAA,GAAA;4BAAnB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFoE,iBAEpE,EAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"ResponseBody.vue.script.js","names":[],"sources":["../../../src/components/ResponseBody/ResponseBody.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { type MediaConfig } from '@/components/ResponseBody/helpers/media-types'\nimport ResponseBodyInfo from '@/components/ResponseBody/ResponseBodyInfo.vue'\nimport ResponseBodyPreview from '@/components/ResponseBody/ResponseBodyPreview.vue'\nimport ResponseBodyRaw from '@/components/ResponseBody/ResponseBodyRaw.vue'\nimport type { MimeType } from '@/types/mime-type'\n\nconst { data, responseBody, mediaConfig, display } = defineProps<{\n data: unknown\n responseBody: {\n mimeType?: MimeType\n attachmentFilename: string\n dataUrl: string\n }\n mediaConfig?: MediaConfig\n display?: 'preview' | 'raw'\n}>()\n</script>\n\n<template>\n <ResponseBodyRaw\n v-if=\"mediaConfig?.raw && display === 'raw' && mediaConfig.language\"\n :key=\"responseBody.dataUrl\"\n :content=\"data\"\n :language=\"mediaConfig.language\" />\n <ResponseBodyPreview\n v-if=\"mediaConfig?.preview && display === 'preview'\"\n :key=\"responseBody.dataUrl\"\n :alpha=\"mediaConfig.alpha\"\n :mode=\"mediaConfig.preview\"\n :src=\"responseBody.dataUrl\"\n :type=\"responseBody.mimeType?.essence ?? ''\" />\n <ResponseBodyInfo v-if=\"!mediaConfig?.raw && !mediaConfig?.preview\">\n Binary file\n </ResponseBodyInfo>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;IAqBU,QAAA,aAAa,OAAO,QAAA,YAAO,SAAc,QAAA,YAAY,YAAA,UAAA,GAD7D,YAIqC,yBAAA;KAFlC,KAAK,QAAA,aAAa;KAClB,SAAS,QAAA;KACT,UAAU,QAAA,YAAY;;IAEjB,QAAA,aAAa,WAAW,QAAA,YAAO,aAAA,UAAA,GADvC,YAMiD,6BAAA;KAJ9C,KAAK,QAAA,aAAa;KAClB,OAAO,QAAA,YAAY;KACnB,MAAM,QAAA,YAAY;KAClB,KAAK,QAAA,aAAa;KAClB,MAAM,QAAA,aAAa,UAAU,WAAO;;;;;;;KACd,QAAA,aAAa,OAAG,CAAK,QAAA,aAAa,WAAA,UAAA,GAA3D,YAEmB,0BAAA,EAAA,KAAA,EAAA,GAAA;4BAAnB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFoE,iBAEpE,EAAA,CAAA,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"media-types.d.ts","sourceRoot":"","sources":["../../../../src/components/ResponseBody/helpers/media-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAEjE,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAuHD,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAgBxE"}
1
+ {"version":3,"file":"media-types.d.ts","sourceRoot":"","sources":["../../../../src/components/ResponseBody/helpers/media-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAEjE,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AA4HD,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAgBxE"}
@@ -33,6 +33,16 @@ var mediaTypes = {
33
33
  raw: true,
34
34
  language: "json"
35
35
  },
36
+ "application/x-ndjson": {
37
+ extension: ".ndjson",
38
+ raw: true,
39
+ language: "json"
40
+ },
41
+ "application/ndjson": {
42
+ extension: ".ndjson",
43
+ raw: true,
44
+ language: "json"
45
+ },
36
46
  "application/msword": { extension: ".doc" },
37
47
  "application/octet-stream": { extension: ".bin" },
38
48
  "application/ogg": { extension: ".ogx" },
@@ -1 +1 @@
1
- {"version":3,"file":"media-types.js","names":[],"sources":["../../../../src/components/ResponseBody/helpers/media-types.ts"],"sourcesContent":["export type MediaPreview = 'object' | 'image' | 'video' | 'audio'\n\nexport type MediaConfig = {\n preview?: MediaPreview\n alpha?: boolean\n raw?: boolean\n language?: string\n extension: string\n}\n\n/** Media Type (MIME Type) Definitions */\nconst mediaTypes: { [type: string]: MediaConfig | undefined } = {\n 'application/epub+zip': { extension: '.epub' },\n 'application/gzip': { extension: '.gz' },\n 'application/java-archive': { extension: '.jar' },\n 'application/javascript': { extension: '.js', raw: true },\n 'application/json': { extension: '.json', raw: true, language: 'json' },\n 'application/ld+json': { extension: '.jsonld', raw: true, language: 'json' },\n 'application/problem+json': {\n extension: '.json',\n raw: true,\n language: 'json',\n },\n 'application/vnd.api+json': {\n extension: '.json',\n raw: true,\n language: 'json',\n },\n 'application/dns-json': { extension: '.json', raw: true, language: 'json' },\n 'application/msword': { extension: '.doc' },\n 'application/octet-stream': { extension: '.bin' },\n 'application/ogg': { extension: '.ogx' },\n 'application/pdf': { extension: '.pdf', preview: 'object' },\n 'application/rtf': { extension: '.rtf', raw: true },\n 'application/vnd.amazon.ebook': { extension: '.azw' },\n 'application/vnd.apple.installer+xml': {\n extension: '.mpkg',\n raw: true,\n language: 'xml',\n },\n 'application/vnd.mozilla.xul+xml': {\n extension: '.xul',\n raw: true,\n language: 'xml',\n },\n 'application/vnd.ms-excel': { extension: '.xls' },\n 'application/vnd.ms-fontobject': { extension: '.eot' },\n 'application/vnd.ms-powerpoint': { extension: '.ppt' },\n 'application/vnd.oasis.opendocument.presentation': { extension: '.odp' },\n 'application/vnd.oasis.opendocument.spreadsheet': { extension: '.ods' },\n 'application/vnd.oasis.opendocument.text': { extension: '.odt' },\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': {\n extension: '.pptx',\n },\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': {\n extension: '.xlsx',\n },\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': {\n extension: '.docx',\n },\n 'application/vnd.rar': { extension: '.rar' },\n 'application/vnd.visio': { extension: '.vsd' },\n 'application/x-7z-compressed': { extension: '.7z' },\n 'application/x-abiword': { extension: '.abw' },\n 'application/x-bzip': { extension: '.bz' },\n 'application/x-bzip2': { extension: '.bz2' },\n 'application/x-cdf': { extension: '.cda' },\n 'application/x-csh': { extension: '.csh' },\n 'application/x-freearc': { extension: '.arc' },\n 'application/x-httpd-php': { extension: '.php', raw: true },\n 'application/x-sh': { extension: '.sh', raw: true },\n 'application/x-tar': { extension: '.tar' },\n 'application/xhtml+xml': { extension: '.xhtml', raw: true, language: 'html' },\n 'application/xml': { extension: '.xml', raw: true, language: 'xml' },\n 'application/yaml': { extension: '.yaml', raw: true, language: 'yaml' },\n 'application/zip': { extension: '.zip' },\n 'audio/aac': { extension: '.aac' },\n 'audio/midi': { extension: '.midi' },\n 'audio/mpeg': { extension: '.mp3', preview: 'audio' },\n 'audio/ogg': { extension: '.oga' },\n 'audio/wav': { extension: '.wav' },\n 'audio/webm': { extension: '.weba' },\n 'font/otf': { extension: '.otf' },\n 'font/ttf': { extension: '.ttf' },\n 'font/woff': { extension: '.woff' },\n 'font/woff2': { extension: '.woff2' },\n 'image/apng': { extension: '.apng', preview: 'image', alpha: true },\n 'image/avif': { extension: '.avif', preview: 'image' },\n 'image/bmp': { extension: '.bmp', preview: 'image' },\n 'image/gif': { extension: '.gif', preview: 'image', alpha: true },\n 'image/jpeg': { extension: '.jpg', preview: 'image' },\n 'image/png': { extension: '.png', preview: 'image', alpha: true },\n 'image/svg+xml': {\n extension: '.svg',\n raw: true,\n language: 'xml',\n preview: 'image',\n alpha: true,\n },\n 'image/tiff': { extension: '.tiff' },\n 'image/vnd.microsoft.icon': { extension: '.ico', preview: 'image' },\n 'image/webp': { extension: '.webp', preview: 'image', alpha: true },\n 'text/calendar': { extension: '.ics', raw: true },\n 'text/css': { extension: '.css', raw: true, language: 'css' },\n 'text/csv': { extension: '.csv', raw: true },\n 'text/html': {\n extension: '.html',\n raw: true,\n language: 'html',\n preview: 'object',\n },\n 'text/javascript': { extension: '.js', raw: true },\n 'text/plain': { extension: '.txt', raw: true },\n 'text/xml': { extension: '.xml', raw: true, language: 'xml' },\n 'text/yaml': { extension: '.yaml', raw: true, language: 'yaml' },\n 'video/3gpp': { extension: '.3gp' },\n 'audio/3gpp': { extension: '.3gp' },\n 'video/3gpp2': { extension: '.3g2' },\n 'audio/3gpp2': { extension: '.3g2' },\n 'video/mp2t': { extension: '.ts' },\n 'video/mp4': { extension: '.mp4', preview: 'video' },\n 'video/mpeg': { extension: '.mpeg' },\n 'video/ogg': { extension: '.ogv' },\n 'video/webm': { extension: '.webm', preview: 'video' },\n 'video/x-msvideo': { extension: '.avi' },\n}\n\n/** Get the config for a media type */\nexport function getMediaTypeConfig(type: string): MediaConfig | undefined {\n const config = mediaTypes[type]\n if (config) {\n return config\n }\n\n // Fallback for +json types\n if (type.endsWith('+json')) {\n return {\n extension: '.json',\n raw: true,\n language: 'json',\n }\n }\n\n return undefined\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"media-types.js","names":[],"sources":["../../../../src/components/ResponseBody/helpers/media-types.ts"],"sourcesContent":["export type MediaPreview = 'object' | 'image' | 'video' | 'audio'\n\nexport type MediaConfig = {\n preview?: MediaPreview\n alpha?: boolean\n raw?: boolean\n language?: string\n extension: string\n}\n\n/** Media Type (MIME Type) Definitions */\nconst mediaTypes: { [type: string]: MediaConfig | undefined } = {\n 'application/epub+zip': { extension: '.epub' },\n 'application/gzip': { extension: '.gz' },\n 'application/java-archive': { extension: '.jar' },\n 'application/javascript': { extension: '.js', raw: true },\n 'application/json': { extension: '.json', raw: true, language: 'json' },\n 'application/ld+json': { extension: '.jsonld', raw: true, language: 'json' },\n 'application/problem+json': {\n extension: '.json',\n raw: true,\n language: 'json',\n },\n 'application/vnd.api+json': {\n extension: '.json',\n raw: true,\n language: 'json',\n },\n 'application/dns-json': { extension: '.json', raw: true, language: 'json' },\n // Newline-delimited JSON is many JSON objects separated by newlines, not one\n // JSON document, so we show it as raw text with JSON highlighting rather than\n // pretty-printing it as a single object.\n 'application/x-ndjson': { extension: '.ndjson', raw: true, language: 'json' },\n 'application/ndjson': { extension: '.ndjson', raw: true, language: 'json' },\n 'application/msword': { extension: '.doc' },\n 'application/octet-stream': { extension: '.bin' },\n 'application/ogg': { extension: '.ogx' },\n 'application/pdf': { extension: '.pdf', preview: 'object' },\n 'application/rtf': { extension: '.rtf', raw: true },\n 'application/vnd.amazon.ebook': { extension: '.azw' },\n 'application/vnd.apple.installer+xml': {\n extension: '.mpkg',\n raw: true,\n language: 'xml',\n },\n 'application/vnd.mozilla.xul+xml': {\n extension: '.xul',\n raw: true,\n language: 'xml',\n },\n 'application/vnd.ms-excel': { extension: '.xls' },\n 'application/vnd.ms-fontobject': { extension: '.eot' },\n 'application/vnd.ms-powerpoint': { extension: '.ppt' },\n 'application/vnd.oasis.opendocument.presentation': { extension: '.odp' },\n 'application/vnd.oasis.opendocument.spreadsheet': { extension: '.ods' },\n 'application/vnd.oasis.opendocument.text': { extension: '.odt' },\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': {\n extension: '.pptx',\n },\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': {\n extension: '.xlsx',\n },\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': {\n extension: '.docx',\n },\n 'application/vnd.rar': { extension: '.rar' },\n 'application/vnd.visio': { extension: '.vsd' },\n 'application/x-7z-compressed': { extension: '.7z' },\n 'application/x-abiword': { extension: '.abw' },\n 'application/x-bzip': { extension: '.bz' },\n 'application/x-bzip2': { extension: '.bz2' },\n 'application/x-cdf': { extension: '.cda' },\n 'application/x-csh': { extension: '.csh' },\n 'application/x-freearc': { extension: '.arc' },\n 'application/x-httpd-php': { extension: '.php', raw: true },\n 'application/x-sh': { extension: '.sh', raw: true },\n 'application/x-tar': { extension: '.tar' },\n 'application/xhtml+xml': { extension: '.xhtml', raw: true, language: 'html' },\n 'application/xml': { extension: '.xml', raw: true, language: 'xml' },\n 'application/yaml': { extension: '.yaml', raw: true, language: 'yaml' },\n 'application/zip': { extension: '.zip' },\n 'audio/aac': { extension: '.aac' },\n 'audio/midi': { extension: '.midi' },\n 'audio/mpeg': { extension: '.mp3', preview: 'audio' },\n 'audio/ogg': { extension: '.oga' },\n 'audio/wav': { extension: '.wav' },\n 'audio/webm': { extension: '.weba' },\n 'font/otf': { extension: '.otf' },\n 'font/ttf': { extension: '.ttf' },\n 'font/woff': { extension: '.woff' },\n 'font/woff2': { extension: '.woff2' },\n 'image/apng': { extension: '.apng', preview: 'image', alpha: true },\n 'image/avif': { extension: '.avif', preview: 'image' },\n 'image/bmp': { extension: '.bmp', preview: 'image' },\n 'image/gif': { extension: '.gif', preview: 'image', alpha: true },\n 'image/jpeg': { extension: '.jpg', preview: 'image' },\n 'image/png': { extension: '.png', preview: 'image', alpha: true },\n 'image/svg+xml': {\n extension: '.svg',\n raw: true,\n language: 'xml',\n preview: 'image',\n alpha: true,\n },\n 'image/tiff': { extension: '.tiff' },\n 'image/vnd.microsoft.icon': { extension: '.ico', preview: 'image' },\n 'image/webp': { extension: '.webp', preview: 'image', alpha: true },\n 'text/calendar': { extension: '.ics', raw: true },\n 'text/css': { extension: '.css', raw: true, language: 'css' },\n 'text/csv': { extension: '.csv', raw: true },\n 'text/html': {\n extension: '.html',\n raw: true,\n language: 'html',\n preview: 'object',\n },\n 'text/javascript': { extension: '.js', raw: true },\n 'text/plain': { extension: '.txt', raw: true },\n 'text/xml': { extension: '.xml', raw: true, language: 'xml' },\n 'text/yaml': { extension: '.yaml', raw: true, language: 'yaml' },\n 'video/3gpp': { extension: '.3gp' },\n 'audio/3gpp': { extension: '.3gp' },\n 'video/3gpp2': { extension: '.3g2' },\n 'audio/3gpp2': { extension: '.3g2' },\n 'video/mp2t': { extension: '.ts' },\n 'video/mp4': { extension: '.mp4', preview: 'video' },\n 'video/mpeg': { extension: '.mpeg' },\n 'video/ogg': { extension: '.ogv' },\n 'video/webm': { extension: '.webm', preview: 'video' },\n 'video/x-msvideo': { extension: '.avi' },\n}\n\n/** Get the config for a media type */\nexport function getMediaTypeConfig(type: string): MediaConfig | undefined {\n const config = mediaTypes[type]\n if (config) {\n return config\n }\n\n // Fallback for +json types\n if (type.endsWith('+json')) {\n return {\n extension: '.json',\n raw: true,\n language: 'json',\n }\n }\n\n return undefined\n}\n"],"mappings":"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"}
package/dist/helpers.d.ts CHANGED
@@ -103,6 +103,10 @@ export declare const authStorage: () => {
103
103
  'x-scalar-secret-auth-url'?: string | undefined;
104
104
  } & {
105
105
  'x-scalar-secret-token-url'?: string | undefined;
106
+ } & {
107
+ 'x-order'?: number | undefined;
108
+ } & {
109
+ 'x-scalar-ignore'?: boolean | undefined;
106
110
  } & {
107
111
  tokenUrl: string;
108
112
  } & {
@@ -140,6 +144,10 @@ export declare const authStorage: () => {
140
144
  'x-scalar-secret-auth-url'?: string | undefined;
141
145
  } & {
142
146
  'x-scalar-secret-token-url'?: string | undefined;
147
+ } & {
148
+ 'x-order'?: number | undefined;
149
+ } & {
150
+ 'x-scalar-ignore'?: boolean | undefined;
143
151
  } & {
144
152
  authorizationUrl: string;
145
153
  } & {
@@ -170,6 +178,10 @@ export declare const authStorage: () => {
170
178
  'x-scalar-secret-auth-url'?: string | undefined;
171
179
  } & {
172
180
  'x-scalar-secret-token-url'?: string | undefined;
181
+ } & {
182
+ 'x-order'?: number | undefined;
183
+ } & {
184
+ 'x-scalar-ignore'?: boolean | undefined;
173
185
  } & {
174
186
  tokenUrl: string;
175
187
  } & {
@@ -204,6 +216,10 @@ export declare const authStorage: () => {
204
216
  'x-scalar-secret-auth-url'?: string | undefined;
205
217
  } & {
206
218
  'x-scalar-secret-token-url'?: string | undefined;
219
+ } & {
220
+ 'x-order'?: number | undefined;
221
+ } & {
222
+ 'x-scalar-ignore'?: boolean | undefined;
207
223
  } & {
208
224
  authorizationUrl: string;
209
225
  tokenUrl: string;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAEpE,OAAO,EAAE,KAAK,IAAI,EAAc,MAAM,uCAAuC,CAAA;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAA;AAWzF,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,8DAA8D,CAAA;AAEpH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GACwB,eAAe,EAAE,CACxG;AAwBD,mHAAmH;AACnH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,cAAc;;;;;EAuBpE;AAKD;;;;GAIG;AACH,eAAO,MAAM,WAAW;IAMpB;;OAEG;oBACa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAItB;;;OAGG;oBACa,MAAM,SAAS,IAAI;CAItC,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,GAAI,mCAG3C;IACD,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,cAAc,CAAA;CAC/B,KAAG,IAIH,CAAA;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,OAM1C"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAEpE,OAAO,EAAE,KAAK,IAAI,EAAc,MAAM,uCAAuC,CAAA;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAA;AAWzF,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,8DAA8D,CAAA;AAEpH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GACwB,eAAe,EAAE,CACxG;AAwBD,mHAAmH;AACnH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,cAAc;;;;;EAuBpE;AAKD;;;;GAIG;AACH,eAAO,MAAM,WAAW;IAMpB;;OAEG;oBACa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAItB;;;OAGG;oBACa,MAAM,SAAS,IAAI;CAItC,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,GAAI,mCAG3C;IACD,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,cAAc,CAAA;CAC/B,KAAG,IAIH,CAAA;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,OAM1C"}
package/dist/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "url": "git+https://github.com/scalar/scalar.git",
11
11
  "directory": "packages/agent-chat"
12
12
  },
13
- "version": "0.12.24",
13
+ "version": "0.12.26",
14
14
  "engines": {
15
15
  "node": ">=22"
16
16
  },
package/dist/style.css CHANGED
@@ -1997,11 +1997,11 @@ input[data-v-a6f4752a]::placeholder {
1997
1997
  overflow: auto;
1998
1998
  }
1999
1999
 
2000
- .light-mode .bg-preview[data-v-8bc927e4] {
2000
+ .light-mode .bg-preview[data-v-a10b4008] {
2001
2001
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23000' fill-opacity='10%25'%3E%3Crect width='8' height='8' /%3E%3Crect x='8' y='8' width='8' height='8' /%3E%3C/svg%3E");
2002
2002
  }
2003
2003
 
2004
- .dark-mode .bg-preview[data-v-8bc927e4] {
2004
+ .dark-mode .bg-preview[data-v-a10b4008] {
2005
2005
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23FFF' fill-opacity='10%25'%3E%3Crect width='8' height='8' /%3E%3Crect x='8' y='8' width='8' height='8' /%3E%3C/svg%3E");
2006
2006
  }
2007
2007
 
@@ -5306,7 +5306,7 @@ input[data-v-a6f4752a]::placeholder {
5306
5306
  width: 20px;
5307
5307
  }
5308
5308
 
5309
- .actionContainer[data-v-5e4d9063] {
5309
+ .actionContainer[data-v-ba1161a7] {
5310
5310
  background: color-mix(
5311
5311
  in srgb,
5312
5312
  var(--scalar-background-2),
@@ -5319,7 +5319,7 @@ input[data-v-a6f4752a]::placeholder {
5319
5319
  /* visually hides overflowing text below */
5320
5320
  box-shadow: 0 24px 0 2px var(--scalar-background-1);
5321
5321
  }
5322
- .promptForm[data-v-5e4d9063] {
5322
+ .promptForm[data-v-ba1161a7] {
5323
5323
  width: 100%;
5324
5324
  position: relative;
5325
5325
  display: flex;
@@ -5330,23 +5330,23 @@ input[data-v-a6f4752a]::placeholder {
5330
5330
  0 0 0 var(--scalar-border-width) var(--scalar-border-color);
5331
5331
  border-radius: var(--scalar-radius-3xl);
5332
5332
  }
5333
- .inputActionsContainer[data-v-5e4d9063] {
5333
+ .inputActionsContainer[data-v-ba1161a7] {
5334
5334
  display: flex;
5335
5335
  justify-content: space-between;
5336
5336
  padding: 0 8px 8px 8px;
5337
5337
  }
5338
- .inputActionsLeft[data-v-5e4d9063] {
5338
+ .inputActionsLeft[data-v-ba1161a7] {
5339
5339
  display: flex;
5340
5340
  flex-wrap: wrap; /* key: allows pills to go to next line */
5341
5341
  align-items: center;
5342
5342
  gap: 5px; /* spacing between pills */
5343
5343
  }
5344
- .inputActionsRight[data-v-5e4d9063] {
5344
+ .inputActionsRight[data-v-ba1161a7] {
5345
5345
  display: flex;
5346
5346
  gap: 5px;
5347
5347
  position: relative;
5348
5348
  }
5349
- .apiPill[data-v-5e4d9063] {
5349
+ .apiPill[data-v-ba1161a7] {
5350
5350
  font-size: var(--scalar-font-size-3);
5351
5351
  border: var(--scalar-border-width) solid var(--scalar-border-color);
5352
5352
  color: var(--scalar-color-2);
@@ -5361,10 +5361,10 @@ input[data-v-a6f4752a]::placeholder {
5361
5361
  gap: 4px;
5362
5362
  user-select: none;
5363
5363
  }
5364
- .apiPillLogo[data-v-5e4d9063] {
5364
+ .apiPillLogo[data-v-ba1161a7] {
5365
5365
  width: 15px;
5366
5366
  }
5367
- .apiPillRemove[data-v-5e4d9063] {
5367
+ .apiPillRemove[data-v-ba1161a7] {
5368
5368
  width: 24px;
5369
5369
  height: 24px;
5370
5370
  margin-right: -6px;
@@ -5373,16 +5373,16 @@ input[data-v-a6f4752a]::placeholder {
5373
5373
  align-items: center;
5374
5374
  justify-content: center;
5375
5375
  }
5376
- .apiPill:hover .apiPillRemove[data-v-5e4d9063] {
5376
+ .apiPill:hover .apiPillRemove[data-v-ba1161a7] {
5377
5377
  background: var(--scalar-background-2);
5378
5378
  }
5379
- .dark-mode .apiPill:hover .apiPillRemove[data-v-5e4d9063] {
5379
+ .dark-mode .apiPill:hover .apiPillRemove[data-v-ba1161a7] {
5380
5380
  background: var(--scalar-background-3);
5381
5381
  }
5382
- .apiPillRemove[data-v-5e4d9063]:hover {
5382
+ .apiPillRemove[data-v-ba1161a7]:hover {
5383
5383
  color: var(--scalar-color-1);
5384
5384
  }
5385
- .prompt[data-v-5e4d9063] {
5385
+ .prompt[data-v-ba1161a7] {
5386
5386
  width: 100%;
5387
5387
  outline: none;
5388
5388
  border: none;
@@ -5399,13 +5399,13 @@ input[data-v-a6f4752a]::placeholder {
5399
5399
  font-size: 16px;
5400
5400
  padding: 12px 12px 14px 12px;
5401
5401
  }
5402
- .dark-mode .promptForm[data-v-5e4d9063] {
5402
+ .dark-mode .promptForm[data-v-ba1161a7] {
5403
5403
  background: var(--scalar-background-2);
5404
5404
  }
5405
- .prompt[data-v-5e4d9063]:disabled {
5405
+ .prompt[data-v-ba1161a7]:disabled {
5406
5406
  color: var(--scalar-color-3);
5407
5407
  }
5408
- .addAPIButton[data-v-5e4d9063] {
5408
+ .addAPIButton[data-v-ba1161a7] {
5409
5409
  display: flex;
5410
5410
  align-items: center;
5411
5411
  justify-content: center;
@@ -5422,7 +5422,7 @@ input[data-v-a6f4752a]::placeholder {
5422
5422
  z-index: 1;
5423
5423
  box-shadow: 0 0 0 var(--scalar-border-width) var(--scalar-border-color);
5424
5424
  }
5425
- .addAPIButton[data-v-5e4d9063]:hover {
5425
+ .addAPIButton[data-v-ba1161a7]:hover {
5426
5426
  background: color-mix(
5427
5427
  in srgb,
5428
5428
  var(--scalar-background-2),
@@ -5430,47 +5430,47 @@ input[data-v-a6f4752a]::placeholder {
5430
5430
  );
5431
5431
  box-shadow: 0 0 0 var(--scalar-border-width) var(--scalar-border-color);
5432
5432
  }
5433
- .dark-mode .addAPIButton[data-v-5e4d9063]:hover {
5433
+ .dark-mode .addAPIButton[data-v-ba1161a7]:hover {
5434
5434
  background: var(--scalar-background-3);
5435
5435
  }
5436
- .settingsButton[data-v-5e4d9063] {
5436
+ .settingsButton[data-v-ba1161a7] {
5437
5437
  color: var(--scalar-color-3) !important;
5438
5438
  border-radius: var(--scalar-radius-full) !important;
5439
5439
  margin: 0 !important;
5440
5440
  z-index: 1;
5441
5441
  }
5442
- .settingsButton[aria-disabled='true'][data-v-5e4d9063] {
5442
+ .settingsButton[aria-disabled='true'][data-v-ba1161a7] {
5443
5443
  background: var(--scalar-background-2);
5444
5444
  }
5445
- .dark-mode .settingsButton[data-v-5e4d9063]:hover {
5445
+ .dark-mode .settingsButton[data-v-ba1161a7]:hover {
5446
5446
  background: var(--scalar-background-3);
5447
5447
  }
5448
- .sendButton[data-v-5e4d9063] {
5448
+ .sendButton[data-v-ba1161a7] {
5449
5449
  background: var(--scalar-color-blue) !important;
5450
5450
  border-radius: var(--scalar-radius-full) !important;
5451
5451
  margin: 0 !important;
5452
5452
  z-index: 1;
5453
5453
  border: var(--scalar-border-width) solid var(--scalar-color-blue);
5454
5454
  }
5455
- .sendButton[data-v-5e4d9063]:not([aria-disabled='true']) {
5455
+ .sendButton[data-v-ba1161a7]:not([aria-disabled='true']) {
5456
5456
  color: white !important;
5457
5457
  }
5458
- .sendButton[data-v-5e4d9063]:not([aria-disabled='true']):hover {
5458
+ .sendButton[data-v-ba1161a7]:not([aria-disabled='true']):hover {
5459
5459
  background: color-mix(
5460
5460
  in srgb,
5461
5461
  var(--scalar-color-blue),
5462
5462
  transparent 10%
5463
5463
  ) !important;
5464
5464
  }
5465
- .sendButton[aria-disabled='true'][data-v-5e4d9063] {
5465
+ .sendButton[aria-disabled='true'][data-v-ba1161a7] {
5466
5466
  background: var(--scalar-background-2) !important;
5467
5467
  color: var(--scalar-color-3) !important;
5468
5468
  border: var(--scalar-border-width) solid var(--scalar-border-color);
5469
5469
  }
5470
- .dark-mode .sendButton[aria-disabled='true'][data-v-5e4d9063] {
5470
+ .dark-mode .sendButton[aria-disabled='true'][data-v-ba1161a7] {
5471
5471
  background: var(--scalar-background-3) !important;
5472
5472
  }
5473
- .contextContainer[data-v-5e4d9063] {
5473
+ .contextContainer[data-v-ba1161a7] {
5474
5474
  display: flex;
5475
5475
  width: 100%;
5476
5476
  padding: 10px 12px 12px 12px;
@@ -5479,25 +5479,25 @@ input[data-v-a6f4752a]::placeholder {
5479
5479
  user-select: none;
5480
5480
  justify-content: space-between;
5481
5481
  }
5482
- .settingsButton[data-v-5e4d9063] {
5482
+ .settingsButton[data-v-ba1161a7] {
5483
5483
  font-weight: var(--scalar-semibold);
5484
5484
  border-radius: var(--scalar-radius-lg);
5485
5485
  padding: 4px 6px;
5486
5486
  margin: -4px -6px;
5487
5487
  }
5488
- .settingsButton[data-v-5e4d9063]:hover {
5488
+ .settingsButton[data-v-ba1161a7]:hover {
5489
5489
  background: var(--scalar-background-2);
5490
5490
  box-shadow: 0 0 var(--scalar-border-width) 0 var(--scalar-border-color);
5491
5491
  cursor: pointer;
5492
5492
  }
5493
- .agentLabel[data-v-5e4d9063] {
5493
+ .agentLabel[data-v-ba1161a7] {
5494
5494
  font-size: 0px;
5495
5495
  position: absolute;
5496
5496
  width: 100%;
5497
5497
  height: 100%;
5498
5498
  cursor: text;
5499
5499
  }
5500
- .sendCheckboxContinue[data-v-5e4d9063]:has(input) {
5500
+ .sendCheckboxContinue[data-v-ba1161a7]:has(input) {
5501
5501
  display: flex;
5502
5502
  align-items: center;
5503
5503
  border-radius: var(--scalar-radius-3xl);
@@ -5509,11 +5509,11 @@ input[data-v-a6f4752a]::placeholder {
5509
5509
  user-select: none;
5510
5510
  height: 28px;
5511
5511
  }
5512
- .dark-mode .sendCheckboxContinue[data-v-5e4d9063]:has(input) {
5512
+ .dark-mode .sendCheckboxContinue[data-v-ba1161a7]:has(input) {
5513
5513
  background: var(--scalar-background-3);
5514
5514
  box-shadow: 0 0 0 1.5px var(--scalar-background-3);
5515
5515
  }
5516
- .addMoreContext[data-v-5e4d9063] {
5516
+ .addMoreContext[data-v-ba1161a7] {
5517
5517
  height: 40px;
5518
5518
  display: flex;
5519
5519
  position: relative;
@@ -5522,7 +5522,7 @@ input[data-v-a6f4752a]::placeholder {
5522
5522
  padding: 0 8px 0 12px;
5523
5523
  align-items: center;
5524
5524
  }
5525
- .addMoreContext[data-v-5e4d9063]:before {
5525
+ .addMoreContext[data-v-ba1161a7]:before {
5526
5526
  content: '';
5527
5527
  width: 8px;
5528
5528
  height: 8px;
@@ -5539,10 +5539,10 @@ input[data-v-a6f4752a]::placeholder {
5539
5539
  -0.5px -0.5px 0 var(--scalar-border-color),
5540
5540
  inset 0.5px 0.5px 1px var(--scalar-border-color);
5541
5541
  }
5542
- .dark-mode .addMoreContext[data-v-5e4d9063]:before {
5542
+ .dark-mode .addMoreContext[data-v-ba1161a7]:before {
5543
5543
  box-shadow: -0.5px -0.5px 0 var(--scalar-border-color);
5544
5544
  }
5545
- .addAPIContext[data-v-5e4d9063] {
5545
+ .addAPIContext[data-v-ba1161a7] {
5546
5546
  width: 28px;
5547
5547
  height: 28px;
5548
5548
  border-radius: var(--scalar-radius-full);
@@ -5551,7 +5551,7 @@ input[data-v-a6f4752a]::placeholder {
5551
5551
  justify-content: center;
5552
5552
  border: var(--scalar-border-width) solid var(--scalar-border-color);
5553
5553
  }
5554
- .termsAgree[data-v-5e4d9063] {
5554
+ .termsAgree[data-v-ba1161a7] {
5555
5555
  display: flex;
5556
5556
  cursor: pointer;
5557
5557
  height: inherit;
@@ -5560,14 +5560,14 @@ input[data-v-a6f4752a]::placeholder {
5560
5560
  gap: 5px;
5561
5561
  margin: 0px 5px;
5562
5562
  }
5563
- .termsAgree[data-v-5e4d9063]:hover {
5563
+ .termsAgree[data-v-ba1161a7]:hover {
5564
5564
  color: var(--scalar-color-1);
5565
5565
  }
5566
- .termsAgree:hover .termsAgreeIcon[data-v-5e4d9063] {
5566
+ .termsAgree:hover .termsAgreeIcon[data-v-ba1161a7] {
5567
5567
  background: var(--scalar-color-1);
5568
5568
  color: var(--scalar-background-1);
5569
5569
  }
5570
- .termsAgreeIcon[data-v-5e4d9063] {
5570
+ .termsAgreeIcon[data-v-ba1161a7] {
5571
5571
  width: inherit;
5572
5572
  height: inherit;
5573
5573
  padding: 2px;
@@ -1 +1 @@
1
- {"version":3,"file":"PromptForm.vue.d.ts","sourceRoot":"","sources":["../../src/views/PromptForm.vue"],"names":[],"mappings":"AA+pBA,iBAAS,WAAW,SAEnB;AAgkBD,QAAA,MAAM,YAAY;;;;;;;;iFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"PromptForm.vue.d.ts","sourceRoot":"","sources":["../../src/views/PromptForm.vue"],"names":[],"mappings":"AA6qBA,iBAAS,WAAW,SAEnB;AAgkBD,QAAA,MAAM,YAAY;;;;;;;;iFAGhB,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 PromptForm_vue_vue_type_script_setup_true_lang_default from "./PromptForm.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/views/PromptForm.vue
5
- var PromptForm_default = /*#__PURE__*/ _plugin_vue_export_helper_default(PromptForm_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-5e4d9063"]]);
5
+ var PromptForm_default = /*#__PURE__*/ _plugin_vue_export_helper_default(PromptForm_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-ba1161a7"]]);
6
6
  //#endregion
7
7
  export { PromptForm_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"PromptForm.vue.js","names":[],"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":""}
1
+ {"version":3,"file":"PromptForm.vue.js","names":[],"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":""}
@@ -71,6 +71,7 @@ var PromptForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
71
71
  promptRef.value.style.height = promptRef.value.scrollHeight + "px";
72
72
  });
73
73
  function handlePromptKeydown(e) {
74
+ if (e.isComposing) return;
74
75
  if (state.loading.value) return;
75
76
  if (e.key === "Enter" && !e.shiftKey) {
76
77
  e.preventDefault();
@@ -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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"}
@@ -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.24",
13
+ "version": "0.12.26",
14
14
  "engines": {
15
15
  "node": ">=22"
16
16
  },
@@ -52,18 +52,18 @@
52
52
  "neverpanic": "0.0.8",
53
53
  "truncate-json": "3.0.1",
54
54
  "vue": "^3.5.40",
55
- "@scalar/api-client": "3.15.0",
55
+ "@scalar/api-client": "3.16.1",
56
56
  "@scalar/components": "0.27.11",
57
- "@scalar/helpers": "0.10.0",
58
57
  "@scalar/icons": "0.7.5",
58
+ "@scalar/helpers": "0.10.0",
59
+ "@scalar/json-magic": "0.13.0",
59
60
  "@scalar/openapi-types": "0.9.4",
60
61
  "@scalar/schemas": "0.8.1",
61
- "@scalar/json-magic": "0.12.20",
62
62
  "@scalar/themes": "0.17.2",
63
- "@scalar/types": "0.17.1",
63
+ "@scalar/types": "0.18.0",
64
+ "@scalar/workspace-store": "0.57.1",
64
65
  "@scalar/use-toasts": "0.10.4",
65
- "@scalar/validation": "0.6.2",
66
- "@scalar/workspace-store": "0.56.1"
66
+ "@scalar/validation": "0.6.2"
67
67
  },
68
68
  "devDependencies": {
69
69
  "@tailwindcss/cli": "^4.3.3",
@@ -75,7 +75,7 @@
75
75
  "tailwindcss": "^4.3.3",
76
76
  "vite": "8.1.5",
77
77
  "vitest": "4.1.10",
78
- "@scalar/sidebar": "0.9.35"
78
+ "@scalar/sidebar": "0.9.37"
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",