@scalar/agent-chat 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/App.vue.d.ts +2 -2
  2. package/dist/App.vue.d.ts.map +1 -1
  3. package/dist/App.vue.js +9 -3
  4. package/dist/App.vue.js.map +1 -1
  5. package/dist/Chat.vue.js +3 -3
  6. package/dist/Chat.vue.js.map +1 -1
  7. package/dist/components/ApprovalSection.vue.d.ts +9 -0
  8. package/dist/components/ApprovalSection.vue.d.ts.map +1 -0
  9. package/dist/components/ApprovalSection.vue.js +8 -0
  10. package/dist/components/ApprovalSection.vue.js.map +1 -0
  11. package/dist/components/ApprovalSection.vue2.js +47 -0
  12. package/dist/components/ApprovalSection.vue2.js.map +1 -0
  13. package/dist/components/AutosendPaused.vue.d.ts +3 -0
  14. package/dist/components/AutosendPaused.vue.d.ts.map +1 -0
  15. package/dist/components/AutosendPaused.vue.js +15 -0
  16. package/dist/components/AutosendPaused.vue.js.map +1 -0
  17. package/dist/components/ContextItem.vue.d.ts.map +1 -1
  18. package/dist/components/ContextItem.vue.js +1 -1
  19. package/dist/components/ContextItem.vue2.js +1 -1
  20. package/dist/components/ContextItem.vue2.js.map +1 -1
  21. package/dist/components/ErrorMessage.vue.d.ts +6 -0
  22. package/dist/components/ErrorMessage.vue.d.ts.map +1 -0
  23. package/dist/components/ErrorMessage.vue.js +8 -0
  24. package/dist/components/ErrorMessage.vue.js.map +1 -0
  25. package/dist/components/ErrorMessage.vue2.js +28 -0
  26. package/dist/components/ErrorMessage.vue2.js.map +1 -0
  27. package/dist/components/LoadingMiniOpenAPIDoc.vue.d.ts.map +1 -1
  28. package/dist/components/LoadingMiniOpenAPIDoc.vue.js +2 -18
  29. package/dist/components/LoadingMiniOpenAPIDoc.vue.js.map +1 -1
  30. package/dist/components/LoadingOpenAPISpecsSummary.vue.d.ts +3 -0
  31. package/dist/components/LoadingOpenAPISpecsSummary.vue.d.ts.map +1 -0
  32. package/dist/components/LoadingOpenAPISpecsSummary.vue.js +16 -0
  33. package/dist/components/LoadingOpenAPISpecsSummary.vue.js.map +1 -0
  34. package/dist/components/RequestApproved.vue.d.ts +3 -0
  35. package/dist/components/RequestApproved.vue.d.ts.map +1 -0
  36. package/dist/components/RequestApproved.vue.js +15 -0
  37. package/dist/components/RequestApproved.vue.js.map +1 -0
  38. package/dist/components/RequestFailed.vue.d.ts +3 -0
  39. package/dist/components/RequestFailed.vue.d.ts.map +1 -0
  40. package/dist/components/RequestFailed.vue.js +26 -0
  41. package/dist/components/RequestFailed.vue.js.map +1 -0
  42. package/dist/components/RequestPreview.vue.d.ts +10 -0
  43. package/dist/components/RequestPreview.vue.d.ts.map +1 -0
  44. package/dist/components/RequestPreview.vue.js +9 -0
  45. package/dist/components/RequestPreview.vue.js.map +1 -0
  46. package/dist/components/RequestPreview.vue2.js +150 -0
  47. package/dist/components/RequestPreview.vue2.js.map +1 -0
  48. package/dist/components/RequestRejected.vue.d.ts +3 -0
  49. package/dist/components/RequestRejected.vue.d.ts.map +1 -0
  50. package/dist/components/RequestRejected.vue.js +24 -0
  51. package/dist/components/RequestRejected.vue.js.map +1 -0
  52. package/dist/components/RequestSuccess.vue.d.ts +3 -0
  53. package/dist/components/RequestSuccess.vue.d.ts.map +1 -0
  54. package/dist/components/RequestSuccess.vue.js +15 -0
  55. package/dist/components/RequestSuccess.vue.js.map +1 -0
  56. package/dist/components/ResponseBody/ResponseBody.vue.d.ts +15 -0
  57. package/dist/components/ResponseBody/ResponseBody.vue.d.ts.map +1 -0
  58. package/dist/components/ResponseBody/ResponseBody.vue.js +45 -0
  59. package/dist/components/ResponseBody/ResponseBody.vue.js.map +1 -0
  60. package/dist/components/ResponseBody/ResponseBody.vue2.js +5 -0
  61. package/dist/components/ResponseBody/ResponseBody.vue2.js.map +1 -0
  62. package/dist/components/ResponseBody/ResponseBodyInfo.vue.d.ts +13 -0
  63. package/dist/components/ResponseBody/ResponseBodyInfo.vue.d.ts.map +1 -0
  64. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js +17 -0
  65. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js.map +1 -0
  66. package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts +10 -0
  67. package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts.map +1 -0
  68. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js +8 -0
  69. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js.map +1 -0
  70. package/dist/components/ResponseBody/ResponseBodyPreview.vue2.js +73 -0
  71. package/dist/components/ResponseBody/ResponseBodyPreview.vue2.js.map +1 -0
  72. package/dist/components/ResponseBody/ResponseBodyRaw.vue.d.ts +7 -0
  73. package/dist/components/ResponseBody/ResponseBodyRaw.vue.d.ts.map +1 -0
  74. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js +23 -0
  75. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js.map +1 -0
  76. package/dist/components/ResponseBody/ResponseBodyRaw.vue2.js +5 -0
  77. package/dist/components/ResponseBody/ResponseBodyRaw.vue2.js.map +1 -0
  78. package/dist/components/ResponseBody/ResponseBodyToggle.vue.d.ts +10 -0
  79. package/dist/components/ResponseBody/ResponseBodyToggle.vue.d.ts.map +1 -0
  80. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js +30 -0
  81. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js.map +1 -0
  82. package/dist/components/ResponseBody/ResponseBodyToggle.vue2.js +5 -0
  83. package/dist/components/ResponseBody/ResponseBodyToggle.vue2.js.map +1 -0
  84. package/dist/components/ResponseBody/helpers/media-types.d.ts +15 -0
  85. package/dist/components/ResponseBody/helpers/media-types.d.ts.map +1 -0
  86. package/dist/components/ResponseBody/helpers/media-types.js +134 -0
  87. package/dist/components/ResponseBody/helpers/media-types.js.map +1 -0
  88. package/dist/components/ResponseBody/helpers/process-response-body.d.ts +10 -0
  89. package/dist/components/ResponseBody/helpers/process-response-body.d.ts.map +1 -0
  90. package/dist/components/ResponseBody/helpers/process-response-body.js +63 -0
  91. package/dist/components/ResponseBody/helpers/process-response-body.js.map +1 -0
  92. package/dist/components/SearchPopover.vue.d.ts +13 -0
  93. package/dist/components/SearchPopover.vue.d.ts.map +1 -0
  94. package/dist/components/SearchPopover.vue.js +8 -0
  95. package/dist/components/SearchPopover.vue.js.map +1 -0
  96. package/dist/components/SearchPopover.vue2.js +78 -0
  97. package/dist/components/SearchPopover.vue2.js.map +1 -0
  98. package/dist/components/SendingRequest.vue.d.ts.map +1 -1
  99. package/dist/components/SendingRequest.vue.js +1 -1
  100. package/dist/components/SendingRequest.vue.js.map +1 -1
  101. package/dist/components/Suggestion.vue.d.ts.map +1 -1
  102. package/dist/components/Suggestion.vue.js +1 -1
  103. package/dist/components/Suggestion.vue2.js +1 -1
  104. package/dist/components/Suggestion.vue2.js.map +1 -1
  105. package/dist/components/TestRequestButton.vue2.js +1 -1
  106. package/dist/components/TestRequestButton.vue2.js.map +1 -1
  107. package/dist/helpers.d.ts +379 -0
  108. package/dist/helpers.d.ts.map +1 -1
  109. package/dist/helpers.js +135 -45
  110. package/dist/helpers.js.map +1 -1
  111. package/dist/hooks/useChatApprovals.d.ts +24 -0
  112. package/dist/hooks/useChatApprovals.d.ts.map +1 -0
  113. package/dist/hooks/useChatApprovals.js +25 -0
  114. package/dist/hooks/useChatApprovals.js.map +1 -0
  115. package/dist/hooks/useChatOperationBlocks.js +1 -1
  116. package/dist/hooks/useSearch.d.ts +26 -0
  117. package/dist/hooks/useSearch.d.ts.map +1 -0
  118. package/dist/hooks/useSearch.js +36 -0
  119. package/dist/hooks/useSearch.js.map +1 -0
  120. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/api.js +1 -0
  121. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js.map +1 -0
  122. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/core.js +20 -11
  123. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/core.js.map +1 -0
  124. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/errors.js.map +1 -0
  125. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js.map +1 -0
  126. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js.map +1 -0
  127. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/schemas.js +3 -3
  128. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js.map +1 -0
  129. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/util.js +24 -0
  130. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/util.js.map +1 -0
  131. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/versions.js +2 -2
  132. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/versions.js.map +1 -0
  133. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/mini/schemas.js +12 -11
  134. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/mini/schemas.js.map +1 -0
  135. package/dist/package.json +9 -5
  136. package/dist/registry/add-documents-to-store.d.ts +21 -0
  137. package/dist/registry/add-documents-to-store.d.ts.map +1 -0
  138. package/dist/registry/add-documents-to-store.js +42 -0
  139. package/dist/registry/add-documents-to-store.js.map +1 -0
  140. package/dist/state/state.d.ts +29 -14
  141. package/dist/state/state.d.ts.map +1 -1
  142. package/dist/state/state.js +45 -40
  143. package/dist/state/state.js.map +1 -1
  144. package/dist/style.css +686 -234
  145. package/dist/views/Chat/Chat.vue.d.ts.map +1 -1
  146. package/dist/views/Chat/Chat.vue.js +1 -1
  147. package/dist/views/Chat/Chat.vue2.js +17 -5
  148. package/dist/views/Chat/Chat.vue2.js.map +1 -1
  149. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.d.ts.map +1 -1
  150. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +1 -1
  151. package/dist/views/Chat/Messages/ExecuteRequestTool.vue2.js +20 -43
  152. package/dist/views/Chat/Messages/ExecuteRequestTool.vue2.js.map +1 -1
  153. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.d.ts.map +1 -1
  154. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js +1 -1
  155. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue2.js +2 -3
  156. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue2.js.map +1 -1
  157. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.d.ts +11 -0
  158. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.d.ts.map +1 -0
  159. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js +32 -0
  160. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js.map +1 -0
  161. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue2.js +5 -0
  162. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue2.js.map +1 -0
  163. package/dist/views/Chat/Messages/Text.vue.js +1 -1
  164. package/dist/views/Chat/Messages/Text.vue.js.map +1 -1
  165. package/dist/views/Layout.vue.d.ts.map +1 -1
  166. package/dist/views/Layout.vue.js +1 -1
  167. package/dist/views/Layout.vue2.js +0 -4
  168. package/dist/views/Layout.vue2.js.map +1 -1
  169. package/dist/views/PromptForm.vue.d.ts.map +1 -1
  170. package/dist/views/PromptForm.vue.js +1 -1
  171. package/dist/views/PromptForm.vue2.js +129 -72
  172. package/dist/views/PromptForm.vue2.js.map +1 -1
  173. package/dist/views/{Auth.vue.d.ts → Settings/Auth.vue.d.ts} +1 -0
  174. package/dist/views/Settings/Auth.vue.d.ts.map +1 -0
  175. package/dist/views/{Auth.vue.js → Settings/Auth.vue.js} +21 -26
  176. package/dist/views/Settings/Auth.vue.js.map +1 -0
  177. package/dist/views/Settings/DocSettings.vue.d.ts +8 -0
  178. package/dist/views/Settings/DocSettings.vue.d.ts.map +1 -0
  179. package/dist/views/Settings/DocSettings.vue.js +8 -0
  180. package/dist/views/Settings/DocSettings.vue.js.map +1 -0
  181. package/dist/views/Settings/DocSettings.vue2.js +50 -0
  182. package/dist/views/Settings/DocSettings.vue2.js.map +1 -0
  183. package/dist/views/Settings/Settings.vue.d.ts.map +1 -0
  184. package/dist/views/{Settings.vue.js → Settings/Settings.vue.js} +2 -2
  185. package/dist/views/Settings/Settings.vue2.js +78 -0
  186. package/dist/views/Settings/Settings.vue2.js.map +1 -0
  187. package/dist/views/Start.vue.d.ts.map +1 -1
  188. package/dist/views/Start.vue.js +1 -1
  189. package/dist/views/Start.vue2.js +0 -1
  190. package/dist/views/Start.vue2.js.map +1 -1
  191. package/package.json +3 -33
  192. package/dist/hooks/useActiveServer.d.ts +0 -2
  193. package/dist/hooks/useActiveServer.d.ts.map +0 -1
  194. package/dist/hooks/useActiveServer.js +0 -20
  195. package/dist/hooks/useActiveServer.js.map +0 -1
  196. package/dist/hooks/useSecuritySchemes.d.ts +0 -2
  197. package/dist/hooks/useSecuritySchemes.d.ts.map +0 -1
  198. package/dist/hooks/useSecuritySchemes.js +0 -29
  199. package/dist/hooks/useSecuritySchemes.js.map +0 -1
  200. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/api.js.map +0 -1
  201. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/core.js.map +0 -1
  202. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/errors.js.map +0 -1
  203. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/parse.js.map +0 -1
  204. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/regexes.js.map +0 -1
  205. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/schemas.js.map +0 -1
  206. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/util.js.map +0 -1
  207. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/versions.js.map +0 -1
  208. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/mini/schemas.js.map +0 -1
  209. package/dist/registry/get-document.d.ts +0 -4
  210. package/dist/registry/get-document.d.ts.map +0 -1
  211. package/dist/registry/get-document.js +0 -23
  212. package/dist/registry/get-document.js.map +0 -1
  213. package/dist/views/Auth.vue.d.ts.map +0 -1
  214. package/dist/views/Auth.vue.js.map +0 -1
  215. package/dist/views/Settings.vue.d.ts.map +0 -1
  216. package/dist/views/Settings.vue2.js +0 -81
  217. package/dist/views/Settings.vue2.js.map +0 -1
  218. /package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/errors.js +0 -0
  219. /package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/parse.js +0 -0
  220. /package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/regexes.js +0 -0
  221. /package/dist/views/{Auth.vue2.js → Settings/Auth.vue2.js} +0 -0
  222. /package/dist/views/{Auth.vue2.js.map → Settings/Auth.vue2.js.map} +0 -0
  223. /package/dist/views/{Settings.vue.d.ts → Settings/Settings.vue.d.ts} +0 -0
  224. /package/dist/views/{Settings.vue.js.map → Settings/Settings.vue.js.map} +0 -0
@@ -1,11 +1,23 @@
1
- import { defineComponent, useTemplateRef, computed, watch, createElementBlock, openBlock, createElementVNode, withModifiers, withDirectives, unref, vModelText, createBlock, normalizeClass, createVNode, createTextVNode } from "vue";
1
+ import { defineComponent, useTemplateRef, computed, watch, createElementBlock, openBlock, Fragment, createBlock, createCommentVNode, createElementVNode, unref, withModifiers, withDirectives, vModelText, createVNode, withCtx, renderList, createTextVNode, toDisplayString } from "vue";
2
2
  import { ScalarIconButton, ScalarLoading } from "@scalar/components";
3
- import { ScalarIconPlay, ScalarIconArrowUp } from "@scalar/icons";
3
+ import { ScalarIconPlus, ScalarIconX, ScalarIconLockSimple, ScalarIconArrowUp } from "@scalar/icons";
4
+ import { MAX_PROMPT_SIZE } from "@scalar-org/entities/agent";
5
+ import ApprovalSection from "../components/ApprovalSection.vue.js";
6
+ import ErrorMessageMessage from "../components/ErrorMessage.vue.js";
7
+ import SearchPopover from "../components/SearchPopover.vue.js";
8
+ import { useChatApprovals } from "../hooks/useChatApprovals.js";
4
9
  import { useState } from "../state/state.js";
5
10
  const _hoisted_1 = { class: "actionContainer" };
6
11
  const _hoisted_2 = ["disabled"];
7
12
  const _hoisted_3 = { class: "inputActionsContainer" };
8
- const _hoisted_4 = { class: "contextContainer" };
13
+ const _hoisted_4 = { class: "inputActionsLeft" };
14
+ const _hoisted_5 = {
15
+ class: "addAPIButton",
16
+ type: "button"
17
+ };
18
+ const _hoisted_6 = ["src"];
19
+ const _hoisted_7 = ["onClick"];
20
+ const _hoisted_8 = { class: "inputActionsRight" };
9
21
  const _sfc_main = /* @__PURE__ */ defineComponent({
10
22
  __name: "PromptForm",
11
23
  emits: ["submit"],
@@ -15,6 +27,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15
27
  const promptRef = useTemplateRef("prompt");
16
28
  const state = useState();
17
29
  const inputHasContent = computed(() => state.prompt.value.trim().length > 0);
30
+ const promptTooLarge = computed(
31
+ () => state.prompt.value.trim().length > MAX_PROMPT_SIZE
32
+ );
18
33
  watch(state.prompt, () => {
19
34
  if (!promptRef?.value) return;
20
35
  if (!state.prompt.value.length) {
@@ -24,9 +39,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
24
39
  promptRef.value.style.height = "auto";
25
40
  promptRef.value.style.height = promptRef.value.scrollHeight + "px";
26
41
  });
27
- function onAutoSendClick() {
28
- state.mode.value = state.mode.value === "agent" ? "search" : "agent";
29
- }
30
42
  function handleSubmit() {
31
43
  if (!inputHasContent.value) return;
32
44
  emit("submit");
@@ -48,74 +60,119 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
48
60
  if (status === "ready" || status === "error") promptRef.value?.focus();
49
61
  }
50
62
  );
63
+ const { respondToToolCalls, approvalRequestedParts } = useChatApprovals();
51
64
  return (_ctx, _cache) => {
52
- return openBlock(), createElementBlock("div", _hoisted_1, [
53
- createElementVNode("form", {
54
- class: "promptForm",
55
- onSubmit: withModifiers(handleSubmit, ["prevent"])
56
- }, [
57
- withDirectives(createElementVNode("textarea", {
58
- ref: "prompt",
59
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => unref(state).prompt.value = $event),
60
- class: "prompt",
61
- disabled: unref(state).loading.value,
62
- name: "prompt",
63
- placeholder: "Ask me anything...",
64
- onKeydown: handlePromptKeydown
65
- }, null, 40, _hoisted_2), [
66
- [vModelText, unref(state).prompt.value]
67
- ]),
68
- createElementVNode("div", _hoisted_3, [
69
- createElementVNode("button", {
70
- class: normalizeClass(["autoSendButton", {
71
- "autoSendButton-enabled": unref(state).mode.value === "agent"
72
- }]),
73
- type: "button",
74
- onClick: onAutoSendClick
75
- }, [
76
- createVNode(unref(ScalarIconPlay), { weight: "bold" }),
77
- _cache[2] || (_cache[2] = createTextVNode(" Agent Mode ", -1))
78
- ], 2),
79
- !unref(state).loading.value ? (openBlock(), createBlock(unref(ScalarIconButton), {
80
- key: 0,
81
- class: "sendButton",
82
- disabled: !inputHasContent.value,
83
- icon: unref(ScalarIconArrowUp),
84
- label: "Scalar",
85
- size: "md",
86
- type: "submit",
87
- weight: "bold"
88
- }, null, 8, ["disabled", "icon"])) : (openBlock(), createBlock(unref(ScalarLoading), {
89
- key: 1,
90
- class: "loader",
91
- loader: {
92
- isLoading: unref(state).loading.value,
93
- isValid: false,
94
- clear: async () => {
95
- },
96
- invalidate: async () => {
97
- },
98
- isInvalid: false,
99
- isActive: false,
100
- validate: async () => {
101
- },
102
- start: () => {
103
- }
104
- },
105
- size: "2xl"
106
- }, null, 8, ["loader"]))
107
- ])
108
- ], 32),
109
- createElementVNode("div", _hoisted_4, [
110
- _cache[3] || (_cache[3] = createElementVNode("span", null, "Type @ to add context from other API's", -1)),
111
- createElementVNode("button", {
112
- class: "settingsButton",
113
- label: "Settings",
114
- type: "button",
115
- onClick: _cache[1] || (_cache[1] = ($event) => unref(state).settingsModal.show())
116
- }, " Settings ")
65
+ return openBlock(), createElementBlock(Fragment, null, [
66
+ unref(state).chat.error ? (openBlock(), createBlock(ErrorMessageMessage, {
67
+ key: 0,
68
+ error: unref(state).chat.error
69
+ }, null, 8, ["error"])) : createCommentVNode("", true),
70
+ unref(approvalRequestedParts).length ? (openBlock(), createBlock(ApprovalSection, {
71
+ key: 1,
72
+ onApprove: _cache[0] || (_cache[0] = ($event) => unref(respondToToolCalls)(true)),
73
+ onReject: _cache[1] || (_cache[1] = ($event) => unref(respondToToolCalls)(false))
74
+ })) : createCommentVNode("", true),
75
+ createElementVNode("div", _hoisted_1, [
76
+ createElementVNode("form", {
77
+ class: "promptForm",
78
+ onSubmit: withModifiers(handleSubmit, ["prevent"])
79
+ }, [
80
+ _cache[4] || (_cache[4] = createElementVNode("label", {
81
+ class: "agentLabel",
82
+ for: "agentTextarea"
83
+ }, " Type a Request To get Started ", -1)),
84
+ withDirectives(createElementVNode("textarea", {
85
+ id: "agentTextarea",
86
+ ref: "prompt",
87
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => unref(state).prompt.value = $event),
88
+ class: "prompt custom-scroll",
89
+ disabled: unref(state).loading.value,
90
+ name: "prompt",
91
+ placeholder: "Ask me anything...",
92
+ onKeydown: handlePromptKeydown
93
+ }, null, 40, _hoisted_2), [
94
+ [vModelText, unref(state).prompt.value]
95
+ ]),
96
+ createElementVNode("div", _hoisted_3, [
97
+ createElementVNode("div", _hoisted_4, [
98
+ createVNode(SearchPopover, null, {
99
+ default: withCtx(() => [
100
+ createElementVNode("button", _hoisted_5, [
101
+ createVNode(unref(ScalarIconPlus), {
102
+ class: "size-4",
103
+ weight: "bold"
104
+ })
105
+ ])
106
+ ]),
107
+ _: 1
108
+ }),
109
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(state).registryDocuments.value, (document2) => {
110
+ return openBlock(), createElementBlock("div", {
111
+ key: document2.id,
112
+ class: "apiPill"
113
+ }, [
114
+ document2.logoUrl ? (openBlock(), createElementBlock("img", {
115
+ key: 0,
116
+ class: "apiPillLogo",
117
+ src: document2.logoUrl
118
+ }, null, 8, _hoisted_6)) : createCommentVNode("", true),
119
+ createTextVNode(" " + toDisplayString(document2.title) + " ", 1),
120
+ createElementVNode("button", {
121
+ class: "apiPillRemove",
122
+ type: "button",
123
+ onClick: ($event) => unref(state).removeDocument(document2)
124
+ }, [
125
+ createVNode(unref(ScalarIconX), {
126
+ class: "size-4",
127
+ weight: "bold"
128
+ })
129
+ ], 8, _hoisted_7)
130
+ ]);
131
+ }), 128))
132
+ ]),
133
+ createElementVNode("div", _hoisted_8, [
134
+ !unref(state).loading.value ? (openBlock(), createBlock(unref(ScalarIconButton), {
135
+ key: 0,
136
+ class: "settingsButton h-7 w-7 p-1.5",
137
+ icon: unref(ScalarIconLockSimple),
138
+ label: "Scalar",
139
+ size: "md",
140
+ weight: "bold",
141
+ onClick: _cache[3] || (_cache[3] = ($event) => unref(state).settingsModal.show())
142
+ }, null, 8, ["icon"])) : createCommentVNode("", true),
143
+ !unref(state).loading.value ? (openBlock(), createBlock(unref(ScalarIconButton), {
144
+ key: 1,
145
+ class: "sendButton h-7 w-7 p-1.5",
146
+ disabled: !inputHasContent.value || promptTooLarge.value,
147
+ icon: unref(ScalarIconArrowUp),
148
+ label: "Scalar",
149
+ size: "md",
150
+ type: "submit",
151
+ weight: "bold"
152
+ }, null, 8, ["disabled", "icon"])) : (openBlock(), createBlock(unref(ScalarLoading), {
153
+ key: 2,
154
+ class: "loader h-7 w-7",
155
+ loader: {
156
+ isLoading: unref(state).loading.value,
157
+ isValid: false,
158
+ clear: async () => {
159
+ },
160
+ invalidate: async () => {
161
+ },
162
+ isInvalid: false,
163
+ isActive: false,
164
+ validate: async () => {
165
+ },
166
+ start: () => {
167
+ }
168
+ },
169
+ size: "2xl"
170
+ }, null, 8, ["loader"]))
171
+ ])
172
+ ])
173
+ ], 32)
117
174
  ])
118
- ]);
175
+ ], 64);
119
176
  };
120
177
  }
121
178
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PromptForm.vue2.js","sources":["../../src/views/PromptForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useTemplateRef, watch } from 'vue'\n\nimport { ScalarIconButton, ScalarLoading } from '@scalar/components'\nimport { ScalarIconArrowUp, ScalarIconPlay } from '@scalar/icons'\n\nimport { useState } from '@/state/state'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n}>()\n\ndefineExpose({ focusPrompt })\n\nconst promptRef = useTemplateRef<HTMLTextAreaElement>('prompt')\n\nconst state = useState()\nconst inputHasContent = computed(() => state.prompt.value.trim().length > 0)\n\nwatch(state.prompt, () => {\n if (!promptRef?.value) return\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 onAutoSendClick() {\n state.mode.value = state.mode.value === 'agent' ? 'search' : 'agent'\n}\n\nfunction handleSubmit() {\n if (!inputHasContent.value) return\n\n emit('submit')\n}\n\nfunction handlePromptKeydown(e: KeyboardEvent) {\n if (state.loading.value) return\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') promptRef.value?.focus()\n },\n)\n</script>\n\n<template>\n <div class=\"actionContainer\">\n <form\n class=\"promptForm\"\n @submit.prevent=\"handleSubmit\">\n <textarea\n ref=\"prompt\"\n v-model=\"state.prompt.value\"\n class=\"prompt\"\n :disabled=\"state.loading.value\"\n name=\"prompt\"\n placeholder=\"Ask me anything...\"\n @keydown=\"handlePromptKeydown\" />\n <div class=\"inputActionsContainer\">\n <button\n class=\"autoSendButton\"\n :class=\"{\n 'autoSendButton-enabled': state.mode.value === 'agent',\n }\"\n type=\"button\"\n @click=\"onAutoSendClick\">\n <ScalarIconPlay weight=\"bold\" />\n Agent Mode\n </button>\n <ScalarIconButton\n v-if=\"!state.loading.value\"\n class=\"sendButton\"\n :disabled=\"!inputHasContent\"\n :icon=\"ScalarIconArrowUp\"\n label=\"Scalar\"\n size=\"md\"\n type=\"submit\"\n weight=\"bold\" />\n <ScalarLoading\n v-else\n class=\"loader\"\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 </form>\n <div class=\"contextContainer\">\n <span>Type @ to add context from other API's</span>\n <button\n class=\"settingsButton\"\n label=\"Settings\"\n type=\"button\"\n @click=\"state.settingsModal.show()\">\n Settings\n </button>\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: 22px 22px 12px 12px;\n width: 100%;\n /* visually hides overflowing text below */\n box-shadow: 0 50px 0 2px var(--scalar-background-1);\n}\n.promptForm {\n width: 100%;\n position: relative;\n display: flex;\n}\n\n.inputActionsContainer {\n display: flex;\n justify-content: space-between;\n position: absolute;\n bottom: 0;\n width: 100%;\n padding: 0 8px 8px 8px;\n pointer-events: none;\n}\n\n.prompt {\n width: 100%;\n resize: none;\n background: var(--scalar-background-1);\n border-radius: 22px;\n box-shadow: var(--scalar-shadow-1);\n outline: none;\n border: none;\n font-family: var(--scalar-font);\n font-size: 16px;\n padding: 12px;\n min-height: 92px;\n field-sizing: content;\n padding-bottom: 48px;\n word-wrap: break-word;\n}\n.dark-mode .prompt {\n background: var(--scalar-background-2);\n box-shadow: 0 0 0 var(--scalar-border-width) var(--scalar-border-color);\n}\n.prompt:focus-within {\n box-shadow: 0 0 0 1.5px var(--scalar-color-blue);\n}\n.prompt:disabled {\n color: var(--scalar-color-3);\n}\n\n.autoSendButton {\n color: var(--scalar-color-3);\n font-size: var(--scalar-font-size-3);\n padding: 0 8px;\n height: 28px;\n font-weight: var(--scalar-bold);\n border-radius: 20px;\n display: flex;\n align-items: center;\n gap: 4px;\n pointer-events: all;\n}\n.autoSendButton: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 .autoSendButton:hover {\n background: var(--scalar-background-3);\n}\n.autoSendButton:active {\n background: var(--scalar-background-2);\n}\n.autoSendButton-enabled,\n.autoSendButton-enabled:hover,\n.dark-mode .autoSendButton-enabled:hover {\n background: color-mix(in srgb, var(--scalar-color-blue), transparent 90%);\n color: var(--scalar-color-blue);\n}\n\n.sendButton {\n background: var(--scalar-agent-blue) !important;\n color: white;\n border-radius: 50% !important;\n margin: 0 !important;\n pointer-events: all;\n width: 28px;\n height: 28px;\n padding: 6px;\n}\n\n.sendButton[aria-disabled='true'] {\n background: var(--scalar-background-2) !important;\n color: var(--scalar-color-3);\n}\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</style>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_unref","_createVNode","_createBlock"],"mappings":"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"}
1
+ {"version":3,"file":"PromptForm.vue2.js","sources":["../../src/views/PromptForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useTemplateRef, watch } from 'vue'\n\nimport { ScalarIconButton, ScalarLoading } from '@scalar/components'\nimport {\n ScalarIconArrowUp,\n ScalarIconLockSimple,\n ScalarIconPlus,\n ScalarIconX,\n} from '@scalar/icons'\nimport { MAX_PROMPT_SIZE } from '@scalar-org/entities/agent'\n\nimport ApprovalSection from '@/components/ApprovalSection.vue'\nimport ErrorMessageMessage from '@/components/ErrorMessage.vue'\nimport SearchPopover from '@/components/SearchPopover.vue'\nimport { useChatApprovals } from '@/hooks/useChatApprovals'\nimport { useState } from '@/state/state'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n}>()\n\ndefineExpose({ focusPrompt })\n\nconst promptRef = useTemplateRef<HTMLTextAreaElement>('prompt')\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\nwatch(state.prompt, () => {\n if (!promptRef?.value) return\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 handleSubmit() {\n if (!inputHasContent.value) return\n\n emit('submit')\n}\n\nfunction handlePromptKeydown(e: KeyboardEvent) {\n if (state.loading.value) return\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') promptRef.value?.focus()\n },\n)\n\nconst { respondToToolCalls, approvalRequestedParts } = useChatApprovals()\n</script>\n\n<template>\n <ErrorMessageMessage\n v-if=\"state.chat.error\"\n :error=\"state.chat.error\" />\n <ApprovalSection\n v-if=\"approvalRequestedParts.length\"\n @approve=\"respondToToolCalls(true)\"\n @reject=\"respondToToolCalls(false)\" />\n <div class=\"actionContainer\">\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=\"prompt\"\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 <SearchPopover>\n <button\n class=\"addAPIButton\"\n type=\"button\">\n <ScalarIconPlus\n class=\"size-4\"\n weight=\"bold\" />\n </button>\n </SearchPopover>\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 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 <ScalarIconButton\n v-if=\"!state.loading.value\"\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\n <ScalarIconButton\n v-if=\"!state.loading.value\"\n class=\"sendButton h-7 w-7 p-1.5\"\n :disabled=\"!inputHasContent || promptTooLarge\"\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 </form>\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: 16px;\n width: 100%;\n /* visually hides overflowing text below */\n box-shadow: 0 50px 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: var(--scalar-shadow-1);\n border-radius: 16px;\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}\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: 16px;\n padding: 0 8px;\n pointer-events: all;\n z-index: 1;\n gap: 4px;\n}\n.apiPillLogo {\n width: 15px;\n}\n\n.apiPillRemove {\n width: 24px;\n height: 24px;\n margin-right: -6px;\n border-radius: 50%;\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: 100%;\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 color: white;\n border-radius: 50% !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-agent-blue) !important;\n color: white;\n border-radius: 50% !important;\n margin: 0 !important;\n z-index: 1;\n}\n.sendButton:not([aria-disabled='true']):hover {\n color: white !important;\n}\n\n.sendButton[aria-disabled='true'] {\n background: var(--scalar-background-2) !important;\n color: var(--scalar-color-3);\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</style>\n"],"names":["_unref","_createBlock","_createElementVNode","_createVNode","_openBlock","_createElementBlock","_Fragment","document","_createTextVNode","_toDisplayString"],"mappings":"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"}
@@ -6,6 +6,7 @@ import type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/o
6
6
  import type { WorkspaceDocument } from '@scalar/workspace-store/schemas/workspace';
7
7
  type __VLS_Props = {
8
8
  options: Pick<ApiReferenceConfigurationRaw, 'authentication' | 'persistAuth' | 'proxyUrl'>;
9
+ name: string;
9
10
  document: WorkspaceDocument | undefined;
10
11
  eventBus: WorkspaceEventBus;
11
12
  securitySchemes: MergedSecuritySchemes;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Auth.vue.d.ts","sourceRoot":"","sources":["../../../src/views/Settings/Auth.vue"],"names":[],"mappings":"AA0FA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,yDAAyD,CAAA;AAKhE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAChG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAMlF,KAAK,WAAW,GAAG;IACf,OAAO,EAAE,IAAI,CACX,4BAA4B,EAC5B,gBAAgB,GAAG,aAAa,GAAG,UAAU,CAC9C,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAA;IACvC,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,eAAe,EAAE,qBAAqB,CAAA;IACtC,cAAc,EAAE,YAAY,GAAG,IAAI,CAAA;IACnC,WAAW,EAAE,kBAAkB,CAAA;CAChC,CAAC;;AA2GJ,wBAEG"}
@@ -1,11 +1,13 @@
1
1
  import { defineComponent, computed, watch, createBlock, createCommentVNode, openBlock, unref } from "vue";
2
2
  import { AuthSelector } from "@scalar/api-client/v2/blocks/scalar-auth-selector-block";
3
3
  import { getSecurityRequirements, getSelectedSecurity } from "@scalar/api-client/v2/features/operation";
4
- import { getDefaultSecurity } from "../helpers.js";
4
+ import { useState } from "../../state/state.js";
5
+ import { authStorage, restoreAuthSecretsFromStorage } from "../../helpers.js";
5
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
7
  __name: "Auth",
7
8
  props: {
8
9
  options: {},
10
+ name: {},
9
11
  document: {},
10
12
  eventBus: {},
11
13
  securitySchemes: {},
@@ -13,6 +15,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
13
15
  environment: {}
14
16
  },
15
17
  setup(__props) {
18
+ const { workspaceStore } = useState();
16
19
  const securityRequirements = computed(
17
20
  () => getSecurityRequirements(__props.document?.security)
18
21
  );
@@ -24,42 +27,34 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
24
27
  )
25
28
  );
26
29
  watch(
27
- () => __props.document?.["x-scalar-selected-security"],
28
- (documentSelectedSecurity) => {
29
- if (typeof documentSelectedSecurity !== "undefined") {
30
- return;
30
+ [() => selectedSecurity, () => __props.securitySchemes],
31
+ () => {
32
+ const authPersistence = authStorage();
33
+ authPersistence.setSchemas(__props.name, __props.securitySchemes);
34
+ if (selectedSecurity.value) {
35
+ authPersistence.setSelectedSchemes(__props.name, {
36
+ "x-scalar-selected-security": selectedSecurity.value
37
+ });
31
38
  }
32
- const defaultSecurity = getDefaultSecurity(
33
- securityRequirements.value,
34
- __props.options.authentication?.preferredSecurityScheme,
35
- __props.securitySchemes
36
- );
37
- if (!defaultSecurity) {
38
- return;
39
- }
40
- __props.eventBus.emit("auth:update:selected-security-schemes", {
41
- selectedRequirements: [defaultSecurity],
42
- newSchemes: [],
43
- meta: { type: "document" }
44
- });
39
+ restoreAuthSecretsFromStorage({ documentName: __props.name, workspaceStore });
45
40
  },
46
- { immediate: true }
41
+ { deep: true }
47
42
  );
48
43
  return (_ctx, _cache) => {
49
- return Object.keys(_ctx.securitySchemes).length ? (openBlock(), createBlock(unref(AuthSelector), {
44
+ return Object.keys(__props.securitySchemes).length ? (openBlock(), createBlock(unref(AuthSelector), {
50
45
  key: 0,
51
- environment: _ctx.environment,
52
- eventBus: _ctx.eventBus,
46
+ environment: __props.environment,
47
+ eventBus: __props.eventBus,
53
48
  isReadOnly: "",
54
49
  isStatic: "",
55
50
  layout: "reference",
56
51
  meta: { type: "document" },
57
- persistAuth: _ctx.options.persistAuth,
58
- proxyUrl: _ctx.options.proxyUrl ?? "",
52
+ persistAuth: __props.options.persistAuth,
53
+ proxyUrl: __props.options.proxyUrl ?? "",
59
54
  securityRequirements: securityRequirements.value,
60
- securitySchemes: _ctx.securitySchemes,
55
+ securitySchemes: __props.securitySchemes,
61
56
  selectedSecurity: selectedSecurity.value,
62
- server: _ctx.selectedServer,
57
+ server: __props.selectedServer,
63
58
  title: "Authentication"
64
59
  }, null, 8, ["environment", "eventBus", "persistAuth", "proxyUrl", "securityRequirements", "securitySchemes", "selectedSecurity", "server"])) : createCommentVNode("", true);
65
60
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Auth.vue.js","sources":["../../../src/views/Settings/Auth.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, watch } from 'vue'\n\nimport {\n AuthSelector,\n type MergedSecuritySchemes,\n} from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport {\n getSecurityRequirements,\n getSelectedSecurity,\n} from '@scalar/api-client/v2/features/operation'\nimport type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport type { WorkspaceDocument } from '@scalar/workspace-store/schemas/workspace'\n\nimport { useState } from '@/state/state'\n\nimport { authStorage, restoreAuthSecretsFromStorage } from '../../helpers'\n\nconst { document, name, environment, eventBus, options, securitySchemes } =\n defineProps<{\n options: Pick<\n ApiReferenceConfigurationRaw,\n 'authentication' | 'persistAuth' | 'proxyUrl'\n >\n name: string\n document: WorkspaceDocument | undefined\n eventBus: WorkspaceEventBus\n securitySchemes: MergedSecuritySchemes\n selectedServer: ServerObject | null\n environment: XScalarEnvironment\n }>()\n\nconst { workspaceStore } = useState()\n\n/** Compute what the security requirements should be for the document */\nconst securityRequirements = computed(() =>\n getSecurityRequirements(document?.security),\n)\n\n/** The selected security keys for the document */\nconst selectedSecurity = computed(() =>\n getSelectedSecurity(\n document?.['x-scalar-selected-security'],\n undefined,\n securityRequirements.value,\n ),\n)\n\nwatch(\n [() => selectedSecurity, () => securitySchemes],\n () => {\n const authPersistence = authStorage()\n\n authPersistence.setSchemas(name, securitySchemes)\n\n if (selectedSecurity.value) {\n authPersistence.setSelectedSchemes(name, {\n 'x-scalar-selected-security': selectedSecurity.value,\n })\n }\n\n restoreAuthSecretsFromStorage({ documentName: name, workspaceStore })\n },\n { deep: true },\n)\n</script>\n<template>\n <AuthSelector\n v-if=\"Object.keys(securitySchemes).length\"\n :environment\n :eventBus\n isReadOnly\n isStatic\n layout=\"reference\"\n :meta=\"{ type: 'document' }\"\n :persistAuth=\"options.persistAuth\"\n :proxyUrl=\"options.proxyUrl ?? ''\"\n :securityRequirements\n :securitySchemes\n :selectedSecurity\n :server=\"selectedServer\"\n title=\"Authentication\" />\n</template>\n"],"names":["_createBlock","_unref"],"mappings":";;;;;;;;;;;;;;;;;AAmCA,UAAM,EAAE,eAAA,IAAmB,SAAA;AAG3B,UAAM,uBAAuB;AAAA,MAAS,MACpC,wBAAwB,kBAAU,QAAQ;AAAA,IAAA;AAI5C,UAAM,mBAAmB;AAAA,MAAS,MAChC;AAAA,QACE,QAAA,WAAW,4BAA4B;AAAA,QACvC;AAAA,QACA,qBAAqB;AAAA,MAAA;AAAA,IACvB;AAGF;AAAA,MACE,CAAC,MAAM,kBAAkB,MAAM,uBAAe;AAAA,MAC9C,MAAM;AACJ,cAAM,kBAAkB,YAAA;AAExB,wBAAgB,WAAW,QAAA,MAAM,QAAA,eAAe;AAEhD,YAAI,iBAAiB,OAAO;AAC1B,0BAAgB,mBAAmB,QAAA,MAAM;AAAA,YACvC,8BAA8B,iBAAiB;AAAA,UAAA,CAChD;AAAA,QACH;AAEA,sCAA8B,EAAE,cAAc,QAAA,MAAM,gBAAgB;AAAA,MACtE;AAAA,MACA,EAAE,MAAM,KAAA;AAAA,IAAK;;AAKL,aAAA,OAAO,KAAK,QAAA,eAAe,EAAE,uBADrCA,YAc2BC,MAAA,YAAA,GAAA;AAAA;QAZxB,aAAA,QAAA;AAAA,QACA,UAAA,QAAA;AAAA,QACD,YAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAO;AAAA,QACN,MAAM,EAAA,MAAA,WAAA;AAAA,QACN,aAAa,QAAA,QAAQ;AAAA,QACrB,UAAU,QAAA,QAAQ,YAAQ;AAAA,QAC1B,sBAAA,qBAAA;AAAA,QACA,iBAAA,QAAA;AAAA,QACA,kBAAA,iBAAA;AAAA,QACA,QAAQ,QAAA;AAAA,QACT,OAAM;AAAA,MAAA;;;;"}
@@ -0,0 +1,8 @@
1
+ import { type WorkspaceDocument } from '@scalar/workspace-store/schemas/workspace';
2
+ type __VLS_Props = {
3
+ document: WorkspaceDocument;
4
+ name: string;
5
+ };
6
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ export default _default;
8
+ //# sourceMappingURL=DocSettings.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocSettings.vue.d.ts","sourceRoot":"","sources":["../../../src/views/Settings/DocSettings.vue"],"names":[],"mappings":"AAwEA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAKlF,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;CACb,CAAC;;AAmGF,wBAEG"}
@@ -0,0 +1,8 @@
1
+ import _sfc_main from "./DocSettings.vue2.js";
2
+ /* empty css */
3
+ import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
4
+ const DocSettings = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7e19eeee"]]);
5
+ export {
6
+ DocSettings as default
7
+ };
8
+ //# sourceMappingURL=DocSettings.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocSettings.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,50 @@
1
+ import { defineComponent, computed, createElementBlock, openBlock, createElementVNode, createVNode, unref } from "vue";
2
+ import { getSelectedServer } from "@scalar/api-client/v2/features/operation";
3
+ import { getActiveEnvironment } from "@scalar/api-client/v2/helpers";
4
+ import { ServerSelector } from "@scalar/api-reference/blocks";
5
+ import { useState } from "../../state/state.js";
6
+ import _sfc_main$1 from "./Auth.vue.js";
7
+ const _hoisted_1 = { class: "docSettings" };
8
+ const _sfc_main = /* @__PURE__ */ defineComponent({
9
+ __name: "DocSettings",
10
+ props: {
11
+ document: {},
12
+ name: {}
13
+ },
14
+ setup(__props) {
15
+ const { workspaceStore, config, eventBus } = useState();
16
+ const environment = computed(
17
+ () => getActiveEnvironment(workspaceStore, __props.document)
18
+ );
19
+ const selectedServer = computed(() => getSelectedServer(__props.document));
20
+ const securitySchemes = computed(
21
+ () => __props.document.components?.securitySchemes ?? {}
22
+ );
23
+ return (_ctx, _cache) => {
24
+ return openBlock(), createElementBlock("div", _hoisted_1, [
25
+ createElementVNode("div", null, [
26
+ createVNode(unref(ServerSelector), {
27
+ eventBus: unref(eventBus),
28
+ selectedServer: selectedServer.value,
29
+ servers: __props.document.servers ?? []
30
+ }, null, 8, ["eventBus", "selectedServer", "servers"])
31
+ ]),
32
+ createElementVNode("div", null, [
33
+ createVNode(_sfc_main$1, {
34
+ document: __props.document,
35
+ environment: environment.value,
36
+ eventBus: unref(eventBus),
37
+ name: __props.name,
38
+ options: unref(config),
39
+ securitySchemes: securitySchemes.value,
40
+ selectedServer: selectedServer.value
41
+ }, null, 8, ["document", "environment", "eventBus", "name", "options", "securitySchemes", "selectedServer"])
42
+ ])
43
+ ]);
44
+ };
45
+ }
46
+ });
47
+ export {
48
+ _sfc_main as default
49
+ };
50
+ //# sourceMappingURL=DocSettings.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocSettings.vue2.js","sources":["../../../src/views/Settings/DocSettings.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { getSelectedServer } from '@scalar/api-client/v2/features/operation'\nimport { getActiveEnvironment } from '@scalar/api-client/v2/helpers'\nimport { ServerSelector } from '@scalar/api-reference/blocks'\nimport { type WorkspaceDocument } from '@scalar/workspace-store/schemas/workspace'\n\nimport { useState } from '@/state/state'\nimport Auth from '@/views/Settings/Auth.vue'\n\nconst { document, name } = defineProps<{\n document: WorkspaceDocument\n name: string\n}>()\n\nconst { workspaceStore, config, eventBus } = useState()\n\nconst environment = computed(() =>\n getActiveEnvironment(workspaceStore, document),\n)\n\nconst selectedServer = computed(() => getSelectedServer(document))\n\nconst securitySchemes = computed(\n () => document.components?.securitySchemes ?? {},\n)\n</script>\n\n<template>\n <div class=\"docSettings\">\n <div>\n <ServerSelector\n :eventBus\n :selectedServer\n :servers=\"document.servers ?? []\" />\n </div>\n <div>\n <Auth\n :document\n :environment\n :eventBus\n :name\n :options=\"config\"\n :securitySchemes\n :selectedServer />\n </div>\n </div>\n</template>\n\n<style scoped>\n.docSettings {\n padding: 10px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n font-size: var(--scalar-font-size-3);\n max-height: 600px;\n overflow-y: scroll;\n}\n\n.documentName {\n font-weight: var(--font-weight-bold);\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_createVNode","_unref","Auth"],"mappings":";;;;;;;;;;;;;;AAgBA,UAAM,EAAE,gBAAgB,QAAQ,SAAA,IAAa,SAAA;AAE7C,UAAM,cAAc;AAAA,MAAS,MAC3B,qBAAqB,gBAAgB,gBAAQ;AAAA,IAAA;AAG/C,UAAM,iBAAiB,SAAS,MAAM,kBAAkB,QAAA,QAAQ,CAAC;AAEjE,UAAM,kBAAkB;AAAA,MACtB,MAAM,QAAA,SAAS,YAAY,mBAAmB,CAAA;AAAA,IAAC;;AAK/C,aAAAA,UAAA,GAAAC,mBAiBM,OAjBN,YAiBM;AAAA,QAhBJC,mBAKM,OAAA,MAAA;AAAA,UAJJC,YAGsCC,MAAA,cAAA,GAAA;AAAA,YAFnC,UAAAA,MAAA,QAAA;AAAA,YACA,gBAAA,eAAA;AAAA,YACA,SAAS,QAAA,SAAS,WAAO,CAAA;AAAA,UAAA;;QAE9BF,mBASM,OAAA,MAAA;AAAA,UARJC,YAOoBE,aAAA;AAAA,YANjB,UAAA,QAAA;AAAA,YACA,aAAA,YAAA;AAAA,YACA,UAAAD,MAAA,QAAA;AAAA,YACA,MAAA,QAAA;AAAA,YACA,SAASA,MAAA,MAAA;AAAA,YACT,iBAAA,gBAAA;AAAA,YACA,gBAAA,eAAA;AAAA,UAAA;;;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Settings.vue.d.ts","sourceRoot":"","sources":["../../../src/views/Settings/Settings.vue"],"names":[],"mappings":"AAwIA,OAAO,EACL,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAA;AAM3B,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAC;;AAoMF,wBAEG"}
@@ -1,8 +1,8 @@
1
1
  import _sfc_main from "./Settings.vue2.js";
2
2
  /* empty css */
3
3
  /* empty css */
4
- import _export_sfc from "../_virtual/_plugin-vue_export-helper.js";
5
- const Settings = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-87a83fbb"]]);
4
+ import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
5
+ const Settings = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-e1a5892c"]]);
6
6
  export {
7
7
  Settings as default
8
8
  };
@@ -0,0 +1,78 @@
1
+ import { defineComponent, createBlock, openBlock, unref, withCtx, createElementVNode, createVNode, createElementBlock, Fragment, renderList, createCommentVNode, normalizeClass, createTextVNode, toDisplayString, isRef } from "vue";
2
+ import { ScalarModal, ScalarColorModeToggle, ScalarTextInput } from "@scalar/components";
3
+ import { ScalarIconCaretDown, ScalarIconCaretRight } from "@scalar/icons";
4
+ import { useState } from "../../state/state.js";
5
+ import DocSettings from "./DocSettings.vue.js";
6
+ const _hoisted_1 = { class: "settingsHeading" };
7
+ const _hoisted_2 = { class: "documentList" };
8
+ const _hoisted_3 = ["onClick"];
9
+ const _hoisted_4 = { key: 0 };
10
+ const _hoisted_5 = {
11
+ key: 1,
12
+ class: "noDocuments"
13
+ };
14
+ const _hoisted_6 = { class: "proxyUrlContainer" };
15
+ const _sfc_main = /* @__PURE__ */ defineComponent({
16
+ __name: "Settings",
17
+ props: {
18
+ modalState: {}
19
+ },
20
+ setup(__props) {
21
+ const { workspaceStore, proxyUrl } = useState();
22
+ function selectDocument(name) {
23
+ workspaceStore.update("x-scalar-active-document", name);
24
+ }
25
+ return (_ctx, _cache) => {
26
+ return openBlock(), createBlock(unref(ScalarModal), { state: __props.modalState }, {
27
+ default: withCtx(() => [
28
+ createElementVNode("div", _hoisted_1, [
29
+ _cache[1] || (_cache[1] = createElementVNode("h1", null, "Settings", -1)),
30
+ createVNode(unref(ScalarColorModeToggle), { class: "colorToggle ml-auto" })
31
+ ]),
32
+ createElementVNode("div", _hoisted_2, [
33
+ _cache[2] || (_cache[2] = createElementVNode("label", null, " APIs ", -1)),
34
+ Object.entries(unref(workspaceStore).workspace.documents).length ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(Object.entries(
35
+ unref(workspaceStore).workspace.documents
36
+ ), ([name, document]) => {
37
+ return openBlock(), createElementBlock("div", {
38
+ key: name,
39
+ class: "document"
40
+ }, [
41
+ createElementVNode("button", {
42
+ class: normalizeClass(["documentName", {
43
+ documentNameActive: unref(workspaceStore).workspace.activeDocument === document
44
+ }]),
45
+ type: "button",
46
+ onClick: ($event) => selectDocument(name)
47
+ }, [
48
+ unref(workspaceStore).workspace.activeDocument === document ? (openBlock(), createBlock(unref(ScalarIconCaretDown), { key: 0 })) : (openBlock(), createBlock(unref(ScalarIconCaretRight), { key: 1 })),
49
+ createTextVNode(" @" + toDisplayString(name), 1)
50
+ ], 10, _hoisted_3),
51
+ unref(workspaceStore).workspace.activeDocument === document ? (openBlock(), createElementBlock("div", _hoisted_4, [
52
+ createVNode(DocSettings, {
53
+ document,
54
+ name
55
+ }, null, 8, ["document", "name"])
56
+ ])) : createCommentVNode("", true)
57
+ ]);
58
+ }), 128)) : (openBlock(), createElementBlock("div", _hoisted_5, " No APIs selected. Use + to add context. "))
59
+ ]),
60
+ createElementVNode("div", _hoisted_6, [
61
+ _cache[3] || (_cache[3] = createElementVNode("label", { for: "proxyUrl" }, "Proxy URL", -1)),
62
+ createVNode(unref(ScalarTextInput), {
63
+ id: "proxyUrl",
64
+ modelValue: unref(proxyUrl),
65
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(proxyUrl) ? proxyUrl.value = $event : null),
66
+ placeholder: "https://proxy.scalar.com"
67
+ }, null, 8, ["modelValue"])
68
+ ])
69
+ ]),
70
+ _: 1
71
+ }, 8, ["state"]);
72
+ };
73
+ }
74
+ });
75
+ export {
76
+ _sfc_main as default
77
+ };
78
+ //# sourceMappingURL=Settings.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Settings.vue2.js","sources":["../../../src/views/Settings/Settings.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n type ModalState,\n ScalarColorModeToggle,\n ScalarModal,\n ScalarTextInput,\n} from '@scalar/components'\nimport { ScalarIconCaretDown, ScalarIconCaretRight } from '@scalar/icons'\n\nimport { useState } from '@/state/state'\nimport DocSettings from '@/views/Settings/DocSettings.vue'\n\nconst { modalState } = defineProps<{\n modalState: ModalState\n}>()\n\nconst { workspaceStore, proxyUrl } = useState()\n\nfunction selectDocument(name: string) {\n workspaceStore.update('x-scalar-active-document', name)\n}\n</script>\n\n<template>\n <ScalarModal :state=\"modalState\">\n <div class=\"settingsHeading\">\n <h1>Settings</h1>\n <ScalarColorModeToggle class=\"colorToggle ml-auto\" />\n </div>\n <div class=\"documentList\">\n <label> APIs </label>\n\n <template\n v-if=\"Object.entries(workspaceStore.workspace.documents).length\">\n <div\n v-for=\"[name, document] of Object.entries(\n workspaceStore.workspace.documents,\n )\"\n :key=\"name\"\n class=\"document\">\n <button\n class=\"documentName\"\n :class=\"{\n documentNameActive:\n workspaceStore.workspace.activeDocument === document,\n }\"\n type=\"button\"\n @click=\"selectDocument(name)\">\n <ScalarIconCaretDown\n v-if=\"workspaceStore.workspace.activeDocument === document\" />\n <ScalarIconCaretRight v-else />\n @{{ name }}\n </button>\n <div v-if=\"workspaceStore.workspace.activeDocument === document\">\n <DocSettings\n :document\n :name />\n </div>\n </div>\n </template>\n <div\n v-else\n class=\"noDocuments\">\n No APIs selected. Use + to add context.\n </div>\n </div>\n\n <div class=\"proxyUrlContainer\">\n <label for=\"proxyUrl\">Proxy URL</label>\n <ScalarTextInput\n id=\"proxyUrl\"\n v-model=\"proxyUrl\"\n placeholder=\"https://proxy.scalar.com\" />\n </div>\n </ScalarModal>\n</template>\n\n<style>\n.scalar-modal-layout {\n z-index: 1000 !important;\n}\n</style>\n\n<style scoped>\n.documentList {\n display: flex;\n flex-direction: column;\n gap: 15px;\n margin-bottom: 10px;\n font-size: var(--scalar-font-size-3);\n}\n\n.document {\n display: flex;\n flex-direction: column;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-xl);\n}\n\n.documentName {\n background: var(--scalar-background-2);\n padding: 5px 10px;\n border-radius: var(--scalar-radius);\n color: var(--scalar-color-3);\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: var(--scalar-font-size-3);\n}\n\n.documentNameActive {\n color: var(--scalar-color-1);\n}\n\n.settingsHeading {\n font-size: 19px;\n margin-bottom: 15px;\n display: flex;\n gap: 5px;\n align-items: center;\n}\n\n.proxyUrlContainer {\n font-size: var(--scalar-font-size-3);\n display: flex;\n gap: 5px;\n flex-direction: column;\n}\n\n.noDocuments {\n color: var(--scalar-color-2);\n margin-bottom: 10px;\n}\n</style>\n"],"names":["_createBlock","_unref","_createElementVNode","_createVNode","_createElementBlock","_Fragment","_renderList","_createTextVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBA,UAAM,EAAE,gBAAgB,SAAA,IAAa,SAAA;AAErC,aAAS,eAAe,MAAc;AACpC,qBAAe,OAAO,4BAA4B,IAAI;AAAA,IACxD;;0BAIEA,YAkDcC,MAAA,WAAA,GAAA,EAlDA,OAAO,QAAA,cAAU;AAAA,yBAC7B,MAGM;AAAA,UAHNC,mBAGM,OAHN,YAGM;AAAA,YAFJ,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAA,mBAAiB,YAAb,YAAQ,EAAA;AAAA,YACZC,YAAqDF,MAAA,qBAAA,GAAA,EAA9B,OAAM,uBAAqB;AAAA,UAAA;UAEpDC,mBAoCM,OApCN,YAoCM;AAAA,YAnCJ,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAA,mBAAqB,eAAd,UAAM,EAAA;AAAA,YAGL,OAAO,QAAQD,MAAA,cAAA,EAAe,UAAU,SAAS,EAAE,2BACzDG,mBAwBMC,UAAA,EAAA,KAAA,KAAAC,WAvBuB,OAAO;AAAA,cAAqBL,MAAA,cAAA,EAAe,UAAU;AAAA,YAAA,GAAxE,CAAA,CAAA,MAAM,QAAQ,MAAA;kCADxBG,mBAwBM,OAAA;AAAA,gBApBH,KAAK;AAAA,gBACN,OAAM;AAAA,cAAA;gBACNF,mBAYS,UAAA;AAAA,kBAXP,uBAAM,gBAAc;AAAA,wCACwCD,MAAA,cAAA,EAAe,UAAU,mBAAmB;AAAA,kBAAA;kBAIxG,MAAK;AAAA,kBACJ,SAAK,CAAA,WAAE,eAAe,IAAI;AAAA,gBAAA;kBAEnBA,MAAA,cAAA,EAAe,UAAU,mBAAmB,yBADpDD,YACgEC,MAAA,mBAAA,GAAA,EAAA,KAAA,GAAA,mBAChED,YAA+BC,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,CAAA;AAAA,kBAAAM,gBAAA,uBAC3B,IAAI,GAAA,CAAA;AAAA,gBAAA;gBAECN,MAAA,cAAA,EAAe,UAAU,mBAAmB,yBAAvDG,mBAIM,OAAA,YAAA;AAAA,kBAHJD,YAEU,aAAA;AAAA,oBADP;AAAA,oBACA;AAAA,kBAAA;;;sCAITC,mBAIM,OAJN,YAEsB,2CAEtB;AAAA,UAAA;UAGFF,mBAMM,OANN,YAMM;AAAA,YALJ,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAA,mBAAuC,SAAA,EAAhC,KAAI,WAAA,GAAW,aAAS,EAAA;AAAA,YAC/BC,YAG2CF,MAAA,eAAA,GAAA;AAAA,cAFzC,IAAG;AAAA,0BACMA,MAAA,QAAA;AAAA,6FAAA,SAAQ,QAAA,SAAA;AAAA,cACjB,aAAY;AAAA,YAAA;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Start.vue.d.ts","sourceRoot":"","sources":["../../src/views/Start.vue"],"names":[],"mappings":";;;;;AAiRA,wBAEG"}
1
+ {"version":3,"file":"Start.vue.d.ts","sourceRoot":"","sources":["../../src/views/Start.vue"],"names":[],"mappings":";;;;;AA8QA,wBAEG"}
@@ -1,7 +1,7 @@
1
1
  import _sfc_main from "./Start.vue2.js";
2
2
  /* empty css */
3
3
  import _export_sfc from "../_virtual/_plugin-vue_export-helper.js";
4
- const Start = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-824d38a8"]]);
4
+ const Start = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-0334ed64"]]);
5
5
  export {
6
6
  Start as default
7
7
  };
@@ -16,7 +16,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16
16
  _cache[4] || (_cache[4] = createElementVNode("h1", { class: "heading" }, "How can I help you today?", -1)),
17
17
  createVNode(PromptForm, {
18
18
  ref: "promptRef",
19
- loading: false,
20
19
  onSubmit: _cache[0] || (_cache[0] = ($event) => emit("submit"))
21
20
  }, null, 512),
22
21
  createElementVNode("div", _hoisted_2, [