@scalar/api-client 3.22.0 → 3.23.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 (171) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.js +1 -1
  3. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.js.map +1 -1
  4. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.script.js +2 -2
  5. package/dist/components/ScalarAsciiArt/ScalarAsciiArt.vue.script.js.map +1 -1
  6. package/dist/hooks/use-file-dialog.js +1 -1
  7. package/dist/hooks/use-file-dialog.js.map +1 -1
  8. package/dist/style.css +190 -144
  9. package/dist/v2/blocks/operation-block/OperationBlock.vue.js.map +1 -1
  10. package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js.map +1 -1
  11. package/dist/v2/blocks/operation-block/components/Header.vue.d.ts.map +1 -1
  12. package/dist/v2/blocks/operation-block/components/Header.vue.js +1 -1
  13. package/dist/v2/blocks/operation-block/components/Header.vue.js.map +1 -1
  14. package/dist/v2/blocks/operation-block/components/Header.vue.script.js.map +1 -1
  15. package/dist/v2/blocks/operation-block/helpers/persist-response-cookies.d.ts +3 -3
  16. package/dist/v2/blocks/operation-block/helpers/persist-response-cookies.d.ts.map +1 -1
  17. package/dist/v2/blocks/operation-block/helpers/persist-response-cookies.js +4 -4
  18. package/dist/v2/blocks/operation-block/helpers/persist-response-cookies.js.map +1 -1
  19. package/dist/v2/blocks/operation-block/helpers/validate-path-parameters.js +1 -1
  20. package/dist/v2/blocks/operation-block/helpers/validate-path-parameters.js.map +1 -1
  21. package/dist/v2/blocks/request-block/RequestBlock.vue.d.ts.map +1 -1
  22. package/dist/v2/blocks/request-block/RequestBlock.vue.js +1 -1
  23. package/dist/v2/blocks/request-block/RequestBlock.vue.js.map +1 -1
  24. package/dist/v2/blocks/request-block/RequestBlock.vue.script.js +13 -8
  25. package/dist/v2/blocks/request-block/RequestBlock.vue.script.js.map +1 -1
  26. package/dist/v2/blocks/request-block/components/RequestBody.vue.d.ts.map +1 -1
  27. package/dist/v2/blocks/request-block/components/RequestBody.vue.js +1 -1
  28. package/dist/v2/blocks/request-block/components/RequestBody.vue.js.map +1 -1
  29. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js +3 -1
  30. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js.map +1 -1
  31. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.js.map +1 -1
  32. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js.map +1 -1
  33. package/dist/v2/blocks/request-block/components/RequestParams.vue.d.ts +12 -0
  34. package/dist/v2/blocks/request-block/components/RequestParams.vue.d.ts.map +1 -1
  35. package/dist/v2/blocks/request-block/components/RequestParams.vue.js.map +1 -1
  36. package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js +132 -32
  37. package/dist/v2/blocks/request-block/components/RequestParams.vue.script.js.map +1 -1
  38. package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts +3 -1
  39. package/dist/v2/blocks/request-block/components/RequestTable.vue.d.ts.map +1 -1
  40. package/dist/v2/blocks/request-block/components/RequestTable.vue.js +1 -1
  41. package/dist/v2/blocks/request-block/components/RequestTable.vue.js.map +1 -1
  42. package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js +13 -2
  43. package/dist/v2/blocks/request-block/components/RequestTable.vue.script.js.map +1 -1
  44. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts +3 -1
  45. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts.map +1 -1
  46. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.js.map +1 -1
  47. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js +6 -2
  48. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.script.js.map +1 -1
  49. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.d.ts.map +1 -1
  50. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js +10 -3
  51. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js.map +1 -1
  52. package/dist/v2/blocks/request-block/helpers/create-parameter-rows.d.ts.map +1 -1
  53. package/dist/v2/blocks/request-block/helpers/create-parameter-rows.js +10 -1
  54. package/dist/v2/blocks/request-block/helpers/create-parameter-rows.js.map +1 -1
  55. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js +1 -1
  56. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js.map +1 -1
  57. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js +1 -1
  58. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.js.map +1 -1
  59. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js +4 -4
  60. package/dist/v2/blocks/response-block/components/ResponseBodyRaw.vue.script.js.map +1 -1
  61. package/dist/v2/blocks/scalar-auth-selector-block/components/AuthSelector.vue.script.js.map +1 -1
  62. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.d.ts.map +1 -1
  63. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.js.map +1 -1
  64. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js +55 -16
  65. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js.map +1 -1
  66. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts +3 -3
  67. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts.map +1 -1
  68. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.js.map +1 -1
  69. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js +20 -7
  70. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js.map +1 -1
  71. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.d.ts.map +1 -1
  72. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.js.map +1 -1
  73. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js +33 -27
  74. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js.map +1 -1
  75. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-oauth2-metadata.d.ts.map +1 -1
  76. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-oauth2-metadata.js +1 -1
  77. package/dist/v2/blocks/scalar-auth-selector-block/helpers/fetch-oauth2-metadata.js.map +1 -1
  78. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-device-authorization.d.ts.map +1 -1
  79. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-device-authorization.js +1 -1
  80. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-device-authorization.js.map +1 -1
  81. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.d.ts.map +1 -1
  82. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js +2 -0
  83. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js.map +1 -1
  84. package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.d.ts.map +1 -1
  85. package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.js +2 -1
  86. package/dist/v2/blocks/scalar-auth-selector-block/helpers/openid-discovery-to-flows.js.map +1 -1
  87. package/dist/v2/components/code-input/CodeInput.vue.js +1 -1
  88. package/dist/v2/components/code-input/CodeInput.vue.js.map +1 -1
  89. package/dist/v2/components/code-input/CodeInput.vue.script.js +4 -4
  90. package/dist/v2/components/code-input/CodeInput.vue.script.js.map +1 -1
  91. package/dist/v2/components/code-input/CodeInputLite.vue.d.ts.map +1 -1
  92. package/dist/v2/components/code-input/CodeInputLite.vue.js +1 -1
  93. package/dist/v2/components/code-input/CodeInputLite.vue.js.map +1 -1
  94. package/dist/v2/components/code-input/CodeInputLite.vue.script.js.map +1 -1
  95. package/dist/v2/components/code-input/PillTooltipHost.vue.d.ts.map +1 -1
  96. package/dist/v2/components/code-input/PillTooltipHost.vue.js.map +1 -1
  97. package/dist/v2/components/code-input/PillTooltipHost.vue.script.js +4 -1
  98. package/dist/v2/components/code-input/PillTooltipHost.vue.script.js.map +1 -1
  99. package/dist/v2/components/code-input/code-variable-widget.js +1 -1
  100. package/dist/v2/components/code-input/code-variable-widget.js.map +1 -1
  101. package/dist/v2/components/data-table/DataTableInput.vue.d.ts +3 -1
  102. package/dist/v2/components/data-table/DataTableInput.vue.d.ts.map +1 -1
  103. package/dist/v2/components/data-table/DataTableInput.vue.js +1 -1
  104. package/dist/v2/components/data-table/DataTableInput.vue.js.map +1 -1
  105. package/dist/v2/components/data-table/DataTableInput.vue.script.js +46 -15
  106. package/dist/v2/components/data-table/DataTableInput.vue.script.js.map +1 -1
  107. package/dist/v2/constants.js +1 -1
  108. package/dist/v2/features/localization/index.d.ts.map +1 -1
  109. package/dist/v2/features/localization/index.js +2 -0
  110. package/dist/v2/features/localization/index.js.map +1 -1
  111. package/dist/v2/features/localization/locales/ar.d.ts +3 -0
  112. package/dist/v2/features/localization/locales/ar.d.ts.map +1 -1
  113. package/dist/v2/features/localization/locales/ar.js +3 -0
  114. package/dist/v2/features/localization/locales/ar.js.map +1 -1
  115. package/dist/v2/features/localization/locales/de.d.ts +3 -0
  116. package/dist/v2/features/localization/locales/de.d.ts.map +1 -1
  117. package/dist/v2/features/localization/locales/de.js +3 -0
  118. package/dist/v2/features/localization/locales/de.js.map +1 -1
  119. package/dist/v2/features/localization/locales/es.d.ts +3 -0
  120. package/dist/v2/features/localization/locales/es.d.ts.map +1 -1
  121. package/dist/v2/features/localization/locales/es.js +3 -0
  122. package/dist/v2/features/localization/locales/es.js.map +1 -1
  123. package/dist/v2/features/localization/locales/fr.d.ts +3 -0
  124. package/dist/v2/features/localization/locales/fr.d.ts.map +1 -1
  125. package/dist/v2/features/localization/locales/fr.js +3 -0
  126. package/dist/v2/features/localization/locales/fr.js.map +1 -1
  127. package/dist/v2/features/localization/locales/pt.d.ts +3 -0
  128. package/dist/v2/features/localization/locales/pt.d.ts.map +1 -1
  129. package/dist/v2/features/localization/locales/pt.js +3 -0
  130. package/dist/v2/features/localization/locales/pt.js.map +1 -1
  131. package/dist/v2/features/localization/locales/ru.d.ts +3 -0
  132. package/dist/v2/features/localization/locales/ru.d.ts.map +1 -1
  133. package/dist/v2/features/localization/locales/ru.js +3 -0
  134. package/dist/v2/features/localization/locales/ru.js.map +1 -1
  135. package/dist/v2/features/localization/locales/zh-cn.d.ts +3 -0
  136. package/dist/v2/features/localization/locales/zh-cn.d.ts.map +1 -1
  137. package/dist/v2/features/localization/locales/zh-cn.js +3 -0
  138. package/dist/v2/features/localization/locales/zh-cn.js.map +1 -1
  139. package/dist/v2/features/localization/locales/zh-tw.d.ts +398 -0
  140. package/dist/v2/features/localization/locales/zh-tw.d.ts.map +1 -0
  141. package/dist/v2/features/localization/locales/zh-tw.js +360 -0
  142. package/dist/v2/features/localization/locales/zh-tw.js.map +1 -0
  143. package/dist/v2/features/localization/translations.d.ts +3 -0
  144. package/dist/v2/features/localization/translations.d.ts.map +1 -1
  145. package/dist/v2/features/localization/translations.js +3 -0
  146. package/dist/v2/features/localization/translations.js.map +1 -1
  147. package/dist/v2/features/modal/Modal.vue.d.ts.map +1 -1
  148. package/dist/v2/features/modal/Modal.vue.js.map +1 -1
  149. package/dist/v2/features/modal/Modal.vue.script.js +1 -0
  150. package/dist/v2/features/modal/Modal.vue.script.js.map +1 -1
  151. package/dist/v2/features/modal/index.d.ts +1 -1
  152. package/dist/v2/features/modal/index.d.ts.map +1 -1
  153. package/dist/v2/features/modal/modal-events.d.ts +3 -1
  154. package/dist/v2/features/modal/modal-events.d.ts.map +1 -1
  155. package/dist/v2/features/modal/modal-events.js +2 -1
  156. package/dist/v2/features/modal/modal-events.js.map +1 -1
  157. package/dist/v2/helpers/handle-hotkeys.d.ts.map +1 -1
  158. package/dist/v2/helpers/handle-hotkeys.js +4 -1
  159. package/dist/v2/helpers/handle-hotkeys.js.map +1 -1
  160. package/dist/v2/workspace-events.d.ts +4 -1
  161. package/dist/v2/workspace-events.d.ts.map +1 -1
  162. package/dist/v2/workspace-events.js +2 -2
  163. package/dist/v2/workspace-events.js.map +1 -1
  164. package/dist/vue-styles.css +51 -51
  165. package/package.json +14 -14
  166. package/dist/v2/blocks/scalar-auth-selector-block/helpers/extract-security-scheme-secrets.d.ts +0 -10
  167. package/dist/v2/blocks/scalar-auth-selector-block/helpers/extract-security-scheme-secrets.d.ts.map +0 -1
  168. package/dist/v2/blocks/scalar-auth-selector-block/helpers/is-allowed-oauth-url.d.ts +0 -3
  169. package/dist/v2/blocks/scalar-auth-selector-block/helpers/is-allowed-oauth-url.d.ts.map +0 -1
  170. package/dist/v2/blocks/scalar-auth-selector-block/helpers/is-allowed-oauth-url.js +0 -8
  171. package/dist/v2/blocks/scalar-auth-selector-block/helpers/is-allowed-oauth-url.js.map +0 -1
@@ -9,8 +9,8 @@ import { ScalarButton } from "@scalar/components/button";
9
9
  import { getEnvironmentVariables } from "@scalar/workspace-store/request-example";
10
10
  import { useToasts } from "@scalar/use-toasts";
11
11
  import { useLoadingState } from "@scalar/components/loading";
12
+ import { canResetSecretField, isSecretFieldCleared } from "@scalar/workspace-store/helpers/auth-secret-fields";
12
13
  import { pkceOptions } from "@scalar/types/entities";
13
- import { isSecretFieldCleared } from "@scalar/workspace-store/helpers/auth-secret-fields";
14
14
  //#region src/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue?vue&type=script&setup=true&lang.ts
15
15
  var _hoisted_1 = { class: "flex h-8 items-center justify-end gap-2 border-t" };
16
16
  var _hoisted_2 = { class: "w-full p-2" };
@@ -109,6 +109,16 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
109
109
  field
110
110
  });
111
111
  };
112
+ /**
113
+ * Reset needs a default to restore, otherwise it would only clear the field like the clear
114
+ * action does. A cleared access token is the exception: the token view stays open while it is
115
+ * cleared, and Reset is the only way back to the Authorize form.
116
+ */
117
+ const canReset = (field, value) => {
118
+ if (field === "x-scalar-secret-token" && isSecretFieldCleared(flow.value, field)) return true;
119
+ const fallback = field === "x-scalar-secret-redirect-uri" && !__props.options.captureOAuth2Callback ? resolveDefaultOAuth2RedirectUri(__props.options) : "";
120
+ return canResetSecretField(flow.value, field, value, fallback);
121
+ };
112
122
  /** Fixed-choice fields must never write an empty string into the document. */
113
123
  const handlePkceUpdate = (value) => {
114
124
  if (value === "SHA-256" || value === "plain" || value === "no") handleOauth2Update({ "x-usePkce": value });
@@ -217,7 +227,7 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
217
227
  return Boolean(flow.value["x-scalar-secret-token"]) || unref(isSecretFieldCleared)(flow.value, "x-scalar-secret-token") ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
218
228
  createVNode(unref(DataTableRow_default), null, {
219
229
  default: withCtx(() => [createVNode(RequestAuthDataTableInput_default, {
220
- canReset: "",
230
+ canReset: canReset("x-scalar-secret-token", flow.value["x-scalar-secret-token"]),
221
231
  class: "border-r-transparent",
222
232
  environment: __props.environment,
223
233
  modelValue: flow.value["x-scalar-secret-token"],
@@ -228,7 +238,11 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
228
238
  }, {
229
239
  default: withCtx(() => [createTextVNode(toDisplayString(unref(translate)("apiClient.oauth2.accessToken")), 1)]),
230
240
  _: 1
231
- }, 8, ["environment", "modelValue"])]),
241
+ }, 8, [
242
+ "canReset",
243
+ "environment",
244
+ "modelValue"
245
+ ])]),
232
246
  _: 1
233
247
  }),
234
248
  canRefreshToken.value ? (openBlock(), createBlock(unref(DataTableRow_default), { key: 0 }, {
@@ -310,7 +324,7 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
310
324
  createVNode(unref(DataTableRow_default), null, {
311
325
  default: withCtx(() => ["authorizationUrl" in flow.value ? (openBlock(), createBlock(RequestAuthDataTableInput_default, {
312
326
  key: 0,
313
- canReset: "",
327
+ canReset: canReset("x-scalar-secret-auth-url", flow.value["x-scalar-secret-auth-url"] ?? ""),
314
328
  containerClass: "border-r-0",
315
329
  environment: __props.environment,
316
330
  modelValue: flow.value["x-scalar-secret-auth-url"] ?? "",
@@ -323,9 +337,13 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
323
337
  }, {
324
338
  default: withCtx(() => [createTextVNode(toDisplayString(unref(translate)("apiClient.oauth2.authUrl")), 1)]),
325
339
  _: 1
326
- }, 8, ["environment", "modelValue"])) : createCommentVNode("", true), "tokenUrl" in flow.value ? (openBlock(), createBlock(RequestAuthDataTableInput_default, {
340
+ }, 8, [
341
+ "canReset",
342
+ "environment",
343
+ "modelValue"
344
+ ])) : createCommentVNode("", true), "tokenUrl" in flow.value ? (openBlock(), createBlock(RequestAuthDataTableInput_default, {
327
345
  key: 1,
328
- canReset: "",
346
+ canReset: canReset("x-scalar-secret-token-url", flow.value["x-scalar-secret-token-url"] ?? ""),
329
347
  environment: __props.environment,
330
348
  modelValue: flow.value["x-scalar-secret-token-url"] ?? "",
331
349
  placeholder: "https://galaxy.scalar.com/token",
@@ -337,12 +355,16 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
337
355
  }, {
338
356
  default: withCtx(() => [createTextVNode(toDisplayString(unref(translate)("apiClient.oauth2.tokenUrl")), 1)]),
339
357
  _: 1
340
- }, 8, ["environment", "modelValue"])) : createCommentVNode("", true)]),
358
+ }, 8, [
359
+ "canReset",
360
+ "environment",
361
+ "modelValue"
362
+ ])) : createCommentVNode("", true)]),
341
363
  _: 1
342
364
  }),
343
365
  "x-scalar-secret-redirect-uri" in flow.value ? (openBlock(), createBlock(unref(DataTableRow_default), { key: 2 }, {
344
366
  default: withCtx(() => [createVNode(RequestAuthDataTableInput_default, {
345
- canReset: "",
367
+ canReset: canReset("x-scalar-secret-redirect-uri", flow.value["x-scalar-secret-redirect-uri"]),
346
368
  environment: __props.environment,
347
369
  modelValue: flow.value["x-scalar-secret-redirect-uri"],
348
370
  placeholder: __props.options.captureOAuth2Callback ? `${unref(resolveDefaultOAuth2RedirectUri)(__props.options) || "http://127.0.0.1"} (handled automatically)` : unref(translate)("apiClient.oauth2.optionalRedirectUrl"),
@@ -355,6 +377,7 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
355
377
  default: withCtx(() => [createTextVNode(toDisplayString(unref(translate)("apiClient.oauth2.redirectUrl")), 1)]),
356
378
  _: 1
357
379
  }, 8, [
380
+ "canReset",
358
381
  "environment",
359
382
  "modelValue",
360
383
  "placeholder"
@@ -363,7 +386,7 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
363
386
  })) : createCommentVNode("", true),
364
387
  "x-scalar-secret-username" in flow.value && "x-scalar-secret-password" in flow.value ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [createVNode(unref(DataTableRow_default), null, {
365
388
  default: withCtx(() => [createVNode(RequestAuthDataTableInput_default, {
366
- canReset: "",
389
+ canReset: canReset("x-scalar-secret-username", flow.value["x-scalar-secret-username"]),
367
390
  class: "text-c-2",
368
391
  environment: __props.environment,
369
392
  modelValue: flow.value["x-scalar-secret-username"],
@@ -373,11 +396,15 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
373
396
  }, {
374
397
  default: withCtx(() => [createTextVNode(toDisplayString(unref(translate)("apiClient.oauth2.username")), 1)]),
375
398
  _: 1
376
- }, 8, ["environment", "modelValue"])]),
399
+ }, 8, [
400
+ "canReset",
401
+ "environment",
402
+ "modelValue"
403
+ ])]),
377
404
  _: 1
378
405
  }), createVNode(unref(DataTableRow_default), null, {
379
406
  default: withCtx(() => [createVNode(RequestAuthDataTableInput_default, {
380
- canReset: "",
407
+ canReset: canReset("x-scalar-secret-password", flow.value["x-scalar-secret-password"]),
381
408
  environment: __props.environment,
382
409
  modelValue: flow.value["x-scalar-secret-password"],
383
410
  placeholder: "********",
@@ -387,12 +414,16 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
387
414
  }, {
388
415
  default: withCtx(() => [createTextVNode(toDisplayString(unref(translate)("apiClient.oauth2.password")), 1)]),
389
416
  _: 1
390
- }, 8, ["environment", "modelValue"])]),
417
+ }, 8, [
418
+ "canReset",
419
+ "environment",
420
+ "modelValue"
421
+ ])]),
391
422
  _: 1
392
423
  })], 64)) : createCommentVNode("", true),
393
424
  createVNode(unref(DataTableRow_default), null, {
394
425
  default: withCtx(() => [createVNode(RequestAuthDataTableInput_default, {
395
- canReset: "",
426
+ canReset: canReset("x-scalar-secret-client-id", flow.value["x-scalar-secret-client-id"]),
396
427
  environment: __props.environment,
397
428
  modelValue: flow.value["x-scalar-secret-client-id"],
398
429
  placeholder: "12345",
@@ -401,12 +432,16 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
401
432
  }, {
402
433
  default: withCtx(() => [createTextVNode(toDisplayString(unref(translate)("apiClient.oauth2.clientID")), 1)]),
403
434
  _: 1
404
- }, 8, ["environment", "modelValue"])]),
435
+ }, 8, [
436
+ "canReset",
437
+ "environment",
438
+ "modelValue"
439
+ ])]),
405
440
  _: 1
406
441
  }),
407
442
  showClientSecret.value ? (openBlock(), createBlock(unref(DataTableRow_default), { key: 4 }, {
408
443
  default: withCtx(() => [createVNode(RequestAuthDataTableInput_default, {
409
- canReset: "",
444
+ canReset: canReset("x-scalar-secret-client-secret", clientSecretValue.value),
410
445
  environment: __props.environment,
411
446
  modelValue: clientSecretValue.value,
412
447
  placeholder: "XYZ123",
@@ -416,7 +451,11 @@ var OAuth2_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
416
451
  }, {
417
452
  default: withCtx(() => [createTextVNode(toDisplayString(unref(translate)("apiClient.oauth2.clientSecret")), 1)]),
418
453
  _: 1
419
- }, 8, ["environment", "modelValue"])]),
454
+ }, 8, [
455
+ "canReset",
456
+ "environment",
457
+ "modelValue"
458
+ ])]),
420
459
  _: 1
421
460
  })) : createCommentVNode("", true),
422
461
  "x-usePkce" in flow.value ? (openBlock(), createBlock(unref(DataTableRow_default), { key: 5 }, {
@@ -1 +1 @@
1
- {"version":3,"file":"OAuth2.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Any config options required for the OAuth2 flow */\nexport type OAuth2Options = Pick<\n ApiClientConfiguration,\n 'oauth2RedirectUri'\n> & {\n /** Optional fetch override (IPC-backed on desktop) used for token exchange, refresh, and OIDC discovery */\n customFetch?: typeof fetch\n /** Optional redirect capture (loopback-backed on desktop) for interactive OAuth2 flows */\n captureOAuth2Callback?: CaptureOAuth2Callback\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { useLoadingState } from '@scalar/components/loading'\nimport type { ApiClientConfiguration } from '@scalar/types/api-reference'\nimport { pkceOptions } from '@scalar/types/entities'\nimport { useToasts } from '@scalar/use-toasts'\nimport type { SecretsOAuthFlows } from '@scalar/workspace-store/entities/auth'\nimport type {\n ApiReferenceEvents,\n WorkspaceEventBus,\n} from '@scalar/workspace-store/events'\nimport {\n isSecretFieldCleared,\n type AuthSecretField,\n} from '@scalar/workspace-store/helpers/auth-secret-fields'\nimport {\n getEnvironmentVariables,\n type OAuthFlowAuthorizationCodeSecret,\n type OAuthFlowClientCredentialsSecret,\n type OAuthFlowPasswordSecret,\n type OAuthFlowsObjectSecret,\n type SecuritySchemeObjectSecret,\n} from '@scalar/workspace-store/request-example'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport type { XScalarCredentialsLocation } from '@scalar/workspace-store/schemas/extensions/security/x-scalar-credentials-location'\nimport type {\n OAuthFlow,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\n\nimport OAuthScopesInput from '@/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue'\nimport {\n authorizeOauth2,\n refreshOauth2Token,\n type CaptureOAuth2Callback,\n} from '@/v2/blocks/scalar-auth-selector-block/helpers/oauth'\nimport { resolveDefaultOAuth2RedirectUri } from '@/v2/blocks/scalar-auth-selector-block/helpers/resolve-default-oauth2-redirect-url'\nimport { DataTableRow } from '@/v2/components/data-table'\nimport { useLocalization } from '@/v2/features/localization'\n\nimport type { DeviceAuthorizationPrompt } from '../helpers/oauth-device-authorization'\nimport RequestAuthDataTableInput from './RequestAuthDataTableInput.vue'\n\nconst {\n environment,\n flows,\n type,\n scheme,\n selectedScopes: selectedScopesProp,\n server,\n proxyUrl,\n eventBus,\n name,\n options = {},\n} = defineProps<{\n /** Current environment configuration */\n environment: XScalarEnvironment\n /** OAuth flows */\n flows: OAuthFlowsObjectSecret\n /** Type of the OAuth flow */\n type: keyof OAuthFlowsObjectSecret\n /** Selected scopes */\n selectedScopes: string[]\n /** Security scheme */\n scheme: SecuritySchemeObjectSecret\n /** Current server configuration */\n server: ServerObject | null\n /** Proxy URL */\n proxyUrl: string\n /** Name of the security scheme */\n name: string\n /** Event bus for authentication updates */\n eventBus: WorkspaceEventBus\n /** Any config options required for the OAuth2 flow */\n options?: OAuth2Options\n /**\n * Hides the Authorize / Refresh / Clear actions. Used when the form is embedded as a\n * configuration-only view (e.g. behind a gear icon), so the host component owns the\n * authorize action and the tokens are routed to the scheme it chooses.\n */\n hideActions?: boolean\n}>()\n\nconst emits = defineEmits<{\n (\n e: 'update:selectedScopes',\n payload: { scopes?: string[]; scope?: string; selected?: boolean },\n ): void\n (\n e: 'upsert:scope',\n payload: Omit<ApiReferenceEvents['auth:upsert:scopes'], 'name'>,\n ): void\n (\n e: 'delete:scope',\n payload: Omit<ApiReferenceEvents['auth:delete:scopes'], 'name'>,\n ): void\n}>()\n\nconst devicePrompt = ref<DeviceAuthorizationPrompt | null>(null)\nlet deviceController: AbortController | undefined\nconst cancelDeviceAuthorization = (): void => {\n deviceController?.abort()\n devicePrompt.value = null\n}\nonBeforeUnmount(cancelDeviceAuthorization)\nwatch(() => [type, name, flows], cancelDeviceAuthorization)\n\nconst { translate } = useLocalization()\n\nconst loader = useLoadingState()\nconst { toast } = useToasts()\n\n/** The current OAuth flow based on the selected type */\nconst flow = computed(() => flows[type]!)\ntype NonImplicitFlow =\n | OAuthFlowPasswordSecret\n | OAuthFlowClientCredentialsSecret\n | OAuthFlowAuthorizationCodeSecret\n\n/** We filter selected scopes to only include scopes that are defined on this flow (own keys only). */\nconst selectedScopes = computed(() => {\n const definedScopes = flow.value.scopes\n if (!definedScopes) {\n return []\n }\n return selectedScopesProp.filter((scope) =>\n Object.hasOwn(definedScopes, scope),\n )\n})\n\n/**\n * Show the client secret whenever the flow supports one. PKCE and a client\n * secret are independent, so confidential clients can use both together\n * (see RFC 9700 Section 2.1.1).\n */\nconst showClientSecret = computed(\n () => 'x-scalar-secret-client-secret' in flow.value,\n)\n\nconst clientSecretValue = computed((): string => {\n const f = flow.value as { 'x-scalar-secret-client-secret'?: string }\n return f['x-scalar-secret-client-secret'] ?? ''\n})\n\n/** Updates the security scheme base */\nconst handleOauth2Update = (\n payload: Partial<OAuthFlow & XScalarCredentialsLocation> & {\n deviceAuthorizationUrl?: string\n },\n): void => {\n // OpenIdConnect uses the secrets update for all\n if (scheme.type === 'openIdConnect') {\n return handleOauth2SecretsUpdate(payload)\n }\n\n // Only OAuth2 schemes carry flows on the document; this component is never\n // rendered for the other scheme types.\n if (scheme.type !== 'oauth2') {\n return\n }\n\n eventBus.emit('auth:update:security-scheme', {\n payload: {\n type: scheme.type,\n flows: {\n [type]: payload,\n },\n },\n name,\n })\n}\n\n/** Updates the flow secrets */\nconst handleOauth2SecretsUpdate = (\n payload: Omit<Partial<SecretsOAuthFlows[keyof SecretsOAuthFlows]>, 'type'>,\n): void => {\n // This component only renders for oauth2/openIdConnect. Other scheme types (e.g. mutualTLS)\n // carry no flow secrets, so there is nothing to persist and no matching secrets payload type.\n if (scheme.type !== 'oauth2' && scheme.type !== 'openIdConnect') {\n return\n }\n\n eventBus.emit('auth:update:security-scheme-secrets', {\n payload: {\n type: scheme.type,\n [type]: payload,\n },\n name,\n })\n}\n\n/** Reset only this field; redirect URI may need its browser default prefilled again. */\nconst handleResetSecret = (field: AuthSecretField): void => {\n if (field === 'x-scalar-secret-redirect-uri') {\n hasHandledRedirectPrefill.value = false\n }\n eventBus.emit('auth:reset:security-scheme-secret', {\n name,\n flow: type,\n field,\n })\n}\n\n/** Fixed-choice fields must never write an empty string into the document. */\nconst handlePkceUpdate = (value: string): void => {\n if (value === 'SHA-256' || value === 'plain' || value === 'no') {\n handleOauth2Update({ 'x-usePkce': value })\n }\n}\n\n/** Clears the flow secrets */\nconst clearOauth2Secrets = (): void => {\n if (loader.isLoading) {\n return\n }\n eventBus.emit('auth:clear:security-scheme-secrets', {\n name,\n })\n}\n\n/** Clears stored access and refresh tokens (authorized state) */\nconst handleClearAccessTokens = (): void => {\n if (loader.isLoading) {\n return\n }\n handleOauth2SecretsUpdate({\n 'x-scalar-secret-token': '',\n 'x-scalar-secret-refresh-token': '',\n })\n}\n\n/** Track redirect URI prefill per flow instance to support document switching */\nconst prefilledFlowIdentity = ref<string | null>(null)\nconst hasHandledRedirectPrefill = ref(false)\n\nconst resolveFlowIdentity = (\n currentFlow: OAuthFlowsObjectSecret[keyof OAuthFlowsObjectSecret] | undefined,\n): string =>\n JSON.stringify({\n type,\n authorizationUrl:\n currentFlow && 'authorizationUrl' in currentFlow\n ? currentFlow.authorizationUrl\n : '',\n tokenUrl:\n currentFlow && 'tokenUrl' in currentFlow ? currentFlow.tokenUrl : '',\n refreshUrl: currentFlow?.refreshUrl ?? '',\n scopes: Object.keys(currentFlow?.scopes ?? {}),\n })\n\n/** Default the redirect-uri to the current origin if we have access to window */\nwatch(\n () => flow.value,\n (currentFlow) => {\n if (!currentFlow || !('x-scalar-secret-redirect-uri' in currentFlow)) {\n return\n }\n\n const flowIdentity = resolveFlowIdentity(currentFlow)\n if (prefilledFlowIdentity.value !== flowIdentity) {\n prefilledFlowIdentity.value = flowIdentity\n hasHandledRedirectPrefill.value = false\n }\n\n if (hasHandledRedirectPrefill.value) {\n return\n }\n\n const newRedirectUri = (currentFlow as OAuthFlowAuthorizationCodeSecret)[\n 'x-scalar-secret-redirect-uri'\n ]\n const defaultRedirectUri = resolveDefaultOAuth2RedirectUri(options)\n\n hasHandledRedirectPrefill.value = true\n\n // The desktop loopback path computes the redirect URI at authorize time (an\n // ephemeral 127.0.0.1 port), so persisting a default into the document would\n // only bake in a stale, unused value. Leave it empty and show a hint instead.\n if (\n isSecretFieldCleared(currentFlow, 'x-scalar-secret-redirect-uri') ||\n newRedirectUri ||\n !defaultRedirectUri ||\n options.captureOAuth2Callback\n ) {\n return\n }\n\n handleOauth2SecretsUpdate({\n 'x-scalar-secret-redirect-uri': defaultRedirectUri,\n })\n },\n { immediate: true },\n)\n\n/**\n * Authorizes the user using the specified OAuth flow.\n * Opens the appropriate OAuth dialog and/or performs the token exchange.\n */\nconst handleAuthorize = async (): Promise<void> => {\n if (loader.isLoading) {\n return\n }\n\n loader.start()\n const controller = new AbortController()\n deviceController = controller\n\n const [error, tokens] = await authorizeOauth2(\n flows,\n type,\n selectedScopes.value,\n server,\n proxyUrl,\n getEnvironmentVariables(environment),\n options.customFetch,\n options.captureOAuth2Callback,\n {\n signal: controller.signal,\n onPrompt: (prompt) => {\n devicePrompt.value = prompt\n },\n },\n )\n devicePrompt.value = null\n\n await loader.clear()\n if (controller.signal.aborted) {\n return\n }\n\n if (tokens?.accessToken) {\n handleOauth2SecretsUpdate({\n 'x-scalar-secret-token': tokens.accessToken,\n ...(tokens.refreshToken\n ? { 'x-scalar-secret-refresh-token': tokens.refreshToken }\n : {}),\n })\n } else {\n console.error(error)\n toast(\n error?.message ?? translate('apiClient.oauth2.failedToauthorize'),\n 'error',\n )\n }\n}\n\n/** Refreshing requires a token issued by the provider, not just a compatible flow. */\nconst canRefreshToken = computed<boolean>(\n (): boolean =>\n type !== 'implicit' && Boolean(flow.value['x-scalar-secret-refresh-token']),\n)\n\n/**\n * Refresh URL placeholder, shows tokenUrl as hint if refreshUrl is not specified.\n * This helps users understand that tokenUrl will be used as fallback.\n */\nconst refreshUrlPlaceholder = computed(() => {\n if ('tokenUrl' in flow.value && flow.value.tokenUrl) {\n return flow.value.tokenUrl\n }\n return 'https://galaxy.scalar.com/oauth/refresh'\n})\n\n/**\n * Uses the stored refresh token to obtain a new access token\n * via grant_type=refresh_token.\n */\nconst handleRefresh = async (): Promise<void> => {\n // The explicit flow check narrows the type for refreshOauth2Token; the computed boolean cannot.\n if (loader.isLoading || type === 'implicit' || !canRefreshToken.value) {\n return\n }\n\n loader.start()\n\n const [error, tokens] = await refreshOauth2Token(\n flows,\n type,\n proxyUrl,\n server,\n getEnvironmentVariables(environment),\n options.customFetch,\n )\n\n await loader.clear()\n\n if (tokens?.accessToken) {\n handleOauth2SecretsUpdate({\n 'x-scalar-secret-token': tokens.accessToken,\n ...(tokens.refreshToken\n ? { 'x-scalar-secret-refresh-token': tokens.refreshToken }\n : {}),\n })\n } else {\n console.error(error)\n toast(\n error?.message ?? translate('apiClient.oauth2.failedToRefreshToken'),\n 'error',\n )\n }\n}\n\n/** Updates the secret location */\nconst handleSecretLocationUpdate = (value: string): void => {\n if (value !== 'body' && value !== 'header') return\n const credentialsLocation = value\n\n if (scheme.type !== 'openIdConnect') {\n handleOauth2Update({\n 'x-scalar-credentials-location': credentialsLocation,\n })\n }\n\n handleOauth2SecretsUpdate({\n 'x-scalar-credentials-location': credentialsLocation,\n })\n}\n</script>\n\n<template>\n <!-- Access Token Display: Shows when user is already authorized -->\n <template\n v-if=\"\n Boolean(flow['x-scalar-secret-token']) ||\n isSecretFieldCleared(flow, 'x-scalar-secret-token')\n \">\n <DataTableRow>\n <RequestAuthDataTableInput\n canReset\n class=\"border-r-transparent\"\n :environment\n :modelValue=\"flow['x-scalar-secret-token']\"\n placeholder=\"QUxMIFlPVVIgQkFTRSBBUkUgQkVMT05HIFRPIFVT\"\n type=\"password\"\n @reset=\"handleResetSecret('x-scalar-secret-token')\"\n @update:modelValue=\"\n (v) => handleOauth2SecretsUpdate({ 'x-scalar-secret-token': v })\n \">\n {{ translate('apiClient.oauth2.accessToken') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"canRefreshToken\">\n <RequestAuthDataTableInput\n class=\"border-r-transparent\"\n :environment\n :modelValue=\"flow.refreshUrl ?? ''\"\n :placeholder=\"refreshUrlPlaceholder\"\n @update:modelValue=\"(v) => handleOauth2Update({ refreshUrl: v })\">\n {{ translate('apiClient.oauth2.refreshUrl') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow\n v-if=\"!hideActions\"\n class=\"min-w-full\">\n <div class=\"flex h-8 items-center justify-end gap-2 border-t\">\n <ScalarButton\n v-if=\"canRefreshToken\"\n class=\"p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"handleRefresh\">\n {{ translate('apiClient.oauth2.refresh') }}\n </ScalarButton>\n <ScalarButton\n class=\"mr-1 p-0 px-2 py-0.5\"\n :disabled=\"loader.isLoading\"\n size=\"sm\"\n variant=\"outlined\"\n @click=\"handleClearAccessTokens\">\n {{ translate('apiClient.oauth2.clearTokens') }}\n </ScalarButton>\n </div>\n </DataTableRow>\n </template>\n\n <!-- Authorization Form: Shows when user needs to authorize -->\n <template v-else>\n <DataTableRow v-if=\"'deviceAuthorizationUrl' in flow\">\n <RequestAuthDataTableInput\n :environment\n :modelValue=\"flow.deviceAuthorizationUrl\"\n @update:modelValue=\"\n (v) => handleOauth2Update({ deviceAuthorizationUrl: v })\n \">\n {{ translate('apiClient.oauth2.deviceAuthorizationUrl') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow v-if=\"devicePrompt\">\n <div class=\"w-full p-2\">\n <div\n class=\"bg-b-2 flex flex-col gap-3 rounded-lg border p-3 text-sm\"\n role=\"status\">\n <p class=\"text-c-2 text-xs leading-normal\">\n {{ translate('apiClient.oauth2.deviceVerificationPrompt') }}\n </p>\n <strong\n class=\"bg-b-1 font-code w-fit max-w-full rounded border px-3 py-2 text-base font-medium tracking-widest break-all select-all\">\n {{ devicePrompt.userCode }}\n </strong>\n <a\n class=\"text-c-accent w-fit max-w-full text-xs break-all underline underline-offset-2\"\n :href=\"\n devicePrompt.verificationUriComplete ||\n devicePrompt.verificationUri\n \"\n rel=\"noopener noreferrer\"\n target=\"_blank\">\n {{ devicePrompt.verificationUri }}\n </a>\n <div class=\"flex items-center justify-between gap-3\">\n <p class=\"text-c-2 text-xs\">\n {{ translate('apiClient.oauth2.waitingForAuthorization') }}\n </p>\n <ScalarButton\n size=\"xs\"\n variant=\"outlined\"\n @click=\"cancelDeviceAuthorization\">\n {{ translate('apiClient.oauth2.cancelDeviceAuthorization') }}\n </ScalarButton>\n </div>\n </div>\n </div>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-if=\"'authorizationUrl' in flow\"\n canReset\n containerClass=\"border-r-0\"\n :environment\n :modelValue=\"flow['x-scalar-secret-auth-url'] ?? ''\"\n placeholder=\"https://galaxy.scalar.com/authorize\"\n @reset=\"handleResetSecret('x-scalar-secret-auth-url')\"\n @update:modelValue=\"\n (v) => {\n handleOauth2SecretsUpdate({ 'x-scalar-secret-auth-url': v })\n if (v) handleOauth2Update({ authorizationUrl: v })\n }\n \">\n {{ translate('apiClient.oauth2.authUrl') }}\n </RequestAuthDataTableInput>\n\n <RequestAuthDataTableInput\n v-if=\"'tokenUrl' in flow\"\n canReset\n :environment\n :modelValue=\"flow['x-scalar-secret-token-url'] ?? ''\"\n placeholder=\"https://galaxy.scalar.com/token\"\n @reset=\"handleResetSecret('x-scalar-secret-token-url')\"\n @update:modelValue=\"\n (v) => {\n handleOauth2SecretsUpdate({ 'x-scalar-secret-token-url': v })\n if (v) handleOauth2Update({ tokenUrl: v })\n }\n \">\n {{ translate('apiClient.oauth2.tokenUrl') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"'x-scalar-secret-redirect-uri' in flow\">\n <RequestAuthDataTableInput\n canReset\n :environment\n :modelValue=\"flow['x-scalar-secret-redirect-uri']\"\n :placeholder=\"\n options.captureOAuth2Callback\n ? `${resolveDefaultOAuth2RedirectUri(options) || 'http://127.0.0.1'} (handled automatically)`\n : translate('apiClient.oauth2.optionalRedirectUrl')\n \"\n @reset=\"handleResetSecret('x-scalar-secret-redirect-uri')\"\n @update:modelValue=\"\n (v) => {\n hasHandledRedirectPrefill = true\n handleOauth2SecretsUpdate({ 'x-scalar-secret-redirect-uri': v })\n }\n \">\n {{ translate('apiClient.oauth2.redirectUrl') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <template\n v-if=\"\n 'x-scalar-secret-username' in flow && 'x-scalar-secret-password' in flow\n \">\n <DataTableRow>\n <RequestAuthDataTableInput\n canReset\n class=\"text-c-2\"\n :environment\n :modelValue=\"flow['x-scalar-secret-username']\"\n placeholder=\"janedoe\"\n @reset=\"handleResetSecret('x-scalar-secret-username')\"\n @update:modelValue=\"\n (v) => handleOauth2SecretsUpdate({ 'x-scalar-secret-username': v })\n \">\n {{ translate('apiClient.oauth2.username') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow>\n <RequestAuthDataTableInput\n canReset\n :environment\n :modelValue=\"flow['x-scalar-secret-password']\"\n placeholder=\"********\"\n type=\"password\"\n @reset=\"handleResetSecret('x-scalar-secret-password')\"\n @update:modelValue=\"\n (v) => handleOauth2SecretsUpdate({ 'x-scalar-secret-password': v })\n \">\n {{ translate('apiClient.oauth2.password') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n\n <DataTableRow>\n <RequestAuthDataTableInput\n canReset\n :environment\n :modelValue=\"flow['x-scalar-secret-client-id']\"\n placeholder=\"12345\"\n @reset=\"handleResetSecret('x-scalar-secret-client-id')\"\n @update:modelValue=\"\n (v) => handleOauth2SecretsUpdate({ 'x-scalar-secret-client-id': v })\n \">\n {{ translate('apiClient.oauth2.clientID') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"showClientSecret\">\n <RequestAuthDataTableInput\n canReset\n :environment\n :modelValue=\"clientSecretValue\"\n placeholder=\"XYZ123\"\n type=\"password\"\n @reset=\"handleResetSecret('x-scalar-secret-client-secret')\"\n @update:modelValue=\"\n (v) =>\n handleOauth2SecretsUpdate({ 'x-scalar-secret-client-secret': v })\n \">\n {{ translate('apiClient.oauth2.clientSecret') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"'x-usePkce' in flow\">\n <RequestAuthDataTableInput\n :enum=\"pkceOptions\"\n :environment\n :modelValue=\"flow['x-usePkce']\"\n readOnly\n @update:modelValue=\"handlePkceUpdate\">\n {{ translate('apiClient.oauth2.usePKCE') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Credentials Location -->\n <DataTableRow v-if=\"type !== 'implicit'\">\n <RequestAuthDataTableInput\n :enum=\"['header', 'body']\"\n :environment\n :modelValue=\"\n (flow as NonImplicitFlow)['x-scalar-credentials-location'] || 'header'\n \"\n placeholder=\"header\"\n readOnly\n @update:modelValue=\"(v) => handleSecretLocationUpdate(v)\">\n {{ translate('apiClient.oauth2.credentialsLocation') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Scopes -->\n <DataTableRow>\n <OAuthScopesInput\n :flow\n :flowType=\"type\"\n :selectedScopes\n @delete:scope=\"(v) => emits('delete:scope', v)\"\n @update:selectedScopes=\"(v) => emits('update:selectedScopes', v)\"\n @upsert:scope=\"(v) => emits('upsert:scope', v)\" />\n </DataTableRow>\n\n <DataTableRow\n v-if=\"!hideActions\"\n class=\"min-w-full\">\n <div class=\"flex h-8 w-full items-center justify-end border-t\">\n <!-- Allow clearing the oauth section and going back to discovery -->\n <ScalarButton\n v-if=\"scheme.type === 'openIdConnect'\"\n class=\"mr-1 p-0 px-2 py-0.5\"\n :disabled=\"loader.isLoading\"\n size=\"sm\"\n variant=\"outlined\"\n @click=\"clearOauth2Secrets\">\n {{ translate('apiClient.oauth2.resetDiscovery') }}\n </ScalarButton>\n\n <ScalarButton\n class=\"mr-0.75 p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"handleAuthorize\">\n {{ translate('apiClient.oauth2.authorize') }}\n </ScalarButton>\n </div>\n </DataTableRow>\n </template>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiGA,MAAM,QAAQ;EAed,MAAM,eAAe,IAAsC,IAAI;EAC/D,IAAI;EACJ,MAAM,kCAAwC;GAC5C,kBAAkB,MAAM;GACxB,aAAa,QAAQ;EACvB;EACA,gBAAgB,yBAAyB;EACzC,YAAY;GAAC,QAAA;GAAM,QAAA;GAAM,QAAA;EAAK,GAAG,yBAAyB;EAE1D,MAAM,EAAE,cAAc,gBAAgB;EAEtC,MAAM,SAAS,gBAAgB;EAC/B,MAAM,EAAE,UAAU,UAAU;;EAG5B,MAAM,OAAO,eAAe,QAAA,MAAM,QAAA,KAAM;EAOxC,MAAM,iBAAiB,eAAe;GACpC,MAAM,gBAAgB,KAAK,MAAM;GACjC,IAAI,CAAC,eACH,OAAO,CAAC;GAEV,OAAO,QAAA,eAAmB,QAAQ,UAChC,OAAO,OAAO,eAAe,KAAK,CACpC;EACF,CAAC;;;;;;EAOD,MAAM,mBAAmB,eACjB,mCAAmC,KAAK,KAChD;EAEA,MAAM,oBAAoB,eAAuB;GAE/C,OADU,KAAK,MACN,oCAAoC;EAC/C,CAAC;;EAGD,MAAM,sBACJ,YAGS;GAET,IAAI,QAAA,OAAO,SAAS,iBAClB,OAAO,0BAA0B,OAAO;GAK1C,IAAI,QAAA,OAAO,SAAS,UAClB;GAGF,QAAA,SAAS,KAAK,+BAA+B;IAC3C,SAAS;KACP,MAAM,QAAA,OAAO;KACb,OAAO,GACJ,QAAA,OAAO,QACV;IACF;IACA,MAAG,QAAA;GACL,CAAC;EACH;;EAGA,MAAM,6BACJ,YACS;GAGT,IAAI,QAAA,OAAO,SAAS,YAAY,QAAA,OAAO,SAAS,iBAC9C;GAGF,QAAA,SAAS,KAAK,uCAAuC;IACnD,SAAS;KACP,MAAM,QAAA,OAAO;MACZ,QAAA,OAAO;IACV;IACA,MAAG,QAAA;GACL,CAAC;EACH;;EAGA,MAAM,qBAAqB,UAAiC;GAC1D,IAAI,UAAU,gCACZ,0BAA0B,QAAQ;GAEpC,QAAA,SAAS,KAAK,qCAAqC;IACjD,MAAG,QAAA;IACH,MAAM,QAAA;IACN;GACF,CAAC;EACH;;EAGA,MAAM,oBAAoB,UAAwB;GAChD,IAAI,UAAU,aAAa,UAAU,WAAW,UAAU,MACxD,mBAAmB,EAAE,aAAa,MAAM,CAAC;EAE7C;;EAGA,MAAM,2BAAiC;GACrC,IAAI,OAAO,WACT;GAEF,QAAA,SAAS,KAAK,sCAAsC,EAClD,MAAG,QAAA,KACL,CAAC;EACH;;EAGA,MAAM,gCAAsC;GAC1C,IAAI,OAAO,WACT;GAEF,0BAA0B;IACxB,yBAAyB;IACzB,iCAAiC;GACnC,CAAC;EACH;;EAGA,MAAM,wBAAwB,IAAmB,IAAI;EACrD,MAAM,4BAA4B,IAAI,KAAK;EAE3C,MAAM,uBACJ,gBAEA,KAAK,UAAU;GACb,MAAG,QAAA;GACH,kBACE,eAAe,sBAAsB,cACjC,YAAY,mBACZ;GACN,UACE,eAAe,cAAc,cAAc,YAAY,WAAW;GACpE,YAAY,aAAa,cAAc;GACvC,QAAQ,OAAO,KAAK,aAAa,UAAU,CAAC,CAAC;EAC/C,CAAC;;EAGH,YACQ,KAAK,QACV,gBAAgB;GACf,IAAI,CAAC,eAAe,EAAE,kCAAkC,cACtD;GAGF,MAAM,eAAe,oBAAoB,WAAW;GACpD,IAAI,sBAAsB,UAAU,cAAc;IAChD,sBAAsB,QAAQ;IAC9B,0BAA0B,QAAQ;GACpC;GAEA,IAAI,0BAA0B,OAC5B;GAGF,MAAM,iBAAkB,YACtB;GAEF,MAAM,qBAAqB,gCAAgC,QAAA,OAAO;GAElE,0BAA0B,QAAQ;GAKlC,IACE,qBAAqB,aAAa,8BAA8B,KAChE,kBACA,CAAC,sBACD,QAAA,QAAQ,uBAER;GAGF,0BAA0B,EACxB,gCAAgC,mBAClC,CAAC;EACH,GACA,EAAE,WAAW,KAAK,CACpB;;;;;EAMA,MAAM,kBAAkB,YAA2B;GACjD,IAAI,OAAO,WACT;GAGF,OAAO,MAAM;GACb,MAAM,aAAa,IAAI,gBAAgB;GACvC,mBAAmB;GAEnB,MAAM,CAAC,OAAO,UAAU,MAAM,gBAC5B,QAAA,OACA,QAAA,MACA,eAAe,OACf,QAAA,QACA,QAAA,UACA,wBAAwB,QAAA,WAAW,GACnC,QAAA,QAAQ,aACR,QAAA,QAAQ,uBACR;IACE,QAAQ,WAAW;IACnB,WAAW,WAAW;KACpB,aAAa,QAAQ;IACvB;GACF,CACF;GACA,aAAa,QAAQ;GAErB,MAAM,OAAO,MAAM;GACnB,IAAI,WAAW,OAAO,SACpB;GAGF,IAAI,QAAQ,aACV,0BAA0B;IACxB,yBAAyB,OAAO;IAChC,GAAI,OAAO,eACP,EAAE,iCAAiC,OAAO,aAAa,IACvD,CAAC;GACP,CAAC;QACI;IACL,QAAQ,MAAM,KAAK;IACnB,MACE,OAAO,WAAW,UAAU,oCAAoC,GAChE,OACF;GACF;EACF;;EAGA,MAAM,kBAAkB,eAEpB,QAAA,SAAS,cAAc,QAAQ,KAAK,MAAM,gCAAgC,CAC9E;;;;;EAMA,MAAM,wBAAwB,eAAe;GAC3C,IAAI,cAAc,KAAK,SAAS,KAAK,MAAM,UACzC,OAAO,KAAK,MAAM;GAEpB,OAAO;EACT,CAAC;;;;;EAMD,MAAM,gBAAgB,YAA2B;GAE/C,IAAI,OAAO,aAAa,QAAA,SAAS,cAAc,CAAC,gBAAgB,OAC9D;GAGF,OAAO,MAAM;GAEb,MAAM,CAAC,OAAO,UAAU,MAAM,mBAC5B,QAAA,OACA,QAAA,MACA,QAAA,UACA,QAAA,QACA,wBAAwB,QAAA,WAAW,GACnC,QAAA,QAAQ,WACV;GAEA,MAAM,OAAO,MAAM;GAEnB,IAAI,QAAQ,aACV,0BAA0B;IACxB,yBAAyB,OAAO;IAChC,GAAI,OAAO,eACP,EAAE,iCAAiC,OAAO,aAAa,IACvD,CAAC;GACP,CAAC;QACI;IACL,QAAQ,MAAM,KAAK;IACnB,MACE,OAAO,WAAW,UAAU,uCAAuC,GACnE,OACF;GACF;EACF;;EAGA,MAAM,8BAA8B,UAAwB;GAC1D,IAAI,UAAU,UAAU,UAAU,UAAU;GAC5C,MAAM,sBAAsB;GAE5B,IAAI,QAAA,OAAO,SAAS,iBAClB,mBAAmB,EACjB,iCAAiC,oBACnC,CAAC;GAGH,0BAA0B,EACxB,iCAAiC,oBACnC,CAAC;EACH;;UAMiB,QAAQ,KAAA,MAAI,wBAAA,KAAoC,MAAA,oBAAA,CAAoB,CAAC,KAAA,OAAI,uBAAA,KAAA,UAAA,GADxF,mBAuDW,UAAA,EAAA,KAAA,EAAA,GAAA;IAlDT,YAce,MAAA,oBAAA,GAAA,MAAA;4BADe,CAZ5B,YAY4B,mCAAA;MAX1B,UAAA;MACA,OAAM;MACL,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MACjB,aAAY;MACZ,MAAK;MACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,kBAAiB,uBAAA;MACxB,uBAAiB,OAAA,OAAA,OAAA,MAAc,MAAM,0BAAyB,EAAA,yBAA4B,EAAC,CAAA;;6BAG7C,CAAA,gBAAA,gBAA5C,MAAA,SAAA,CAAS,CAAA,8BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;IAII,gBAAA,SAAA,UAAA,GAApB,YASe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAP5B,YAO4B,mCAAA;MAN1B,OAAM;MACL,aAAA,QAAA;MACA,YAAY,KAAA,MAAK,cAAU;MAC3B,aAAa,sBAAA;MACb,uBAAiB,OAAA,OAAA,OAAA,MAAG,MAAM,mBAAkB,EAAA,YAAe,EAAC,CAAA;;6BACf,CAAA,gBAAA,gBAA3C,MAAA,SAAA,CAAS,CAAA,6BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;KAKP,QAAA,eAAA,UAAA,GADT,YAsBe,MAAA,oBAAA,GAAA;;KApBb,OAAM;;4BAmBA,CAlBN,mBAkBM,OAlBN,YAkBM,CAhBI,gBAAA,SAAA,UAAA,GADR,YAQe,MAAA,YAAA,GAAA;;MANb,OAAM;MACL,QAAA,MAAA,MAAA;MACD,MAAK;MACL,SAAQ;MACP,SAAO;;6BACmC,CAAA,gBAAA,gBAAxC,MAAA,SAAA,CAAS,CAAA,0BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;wDAEd,YAOe,MAAA,YAAA,GAAA;MANb,OAAM;MACL,UAAU,MAAA,MAAA,CAAM,CAAC;MAClB,MAAK;MACL,SAAQ;MACP,SAAO;;6BACuC,CAAA,gBAAA,gBAA5C,MAAA,SAAA,CAAS,CAAA,8BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;2BAOpB,mBAsOW,UAAA,EAAA,KAAA,EAAA,GAAA;gCArOuC,KAAA,SAAA,UAAA,GAAhD,YASe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAP5B,YAO4B,mCAAA;MANzB,aAAA,QAAA;MACA,YAAY,KAAA,MAAK;MACjB,uBAAiB,OAAA,OAAA,OAAA,MAAc,MAAM,mBAAkB,EAAA,wBAA2B,EAAC,CAAA;;6BAG1B,CAAA,gBAAA,gBAAvD,MAAA,SAAA,CAAS,CAAA,yCAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;IAGI,aAAA,SAAA,UAAA,GAApB,YAmCe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADP,CAjCN,mBAiCM,OAjCN,YAiCM,CAhCJ,mBA+BM,OA/BN,YA+BM;MA5BJ,mBAEI,KAFJ,YAEI,gBADC,MAAA,SAAA,CAAS,CAAA,2CAAA,CAAA,GAAA,CAAA;MAEd,mBAGS,UAHT,YAGS,gBADJ,aAAA,MAAa,QAAQ,GAAA,CAAA;MAE1B,mBASI,KAAA;OARF,OAAM;OACL,MAAqB,aAAA,MAAa,2BAAyC,aAAA,MAAa;OAIzF,KAAI;OACJ,QAAO;yBACJ,aAAA,MAAa,eAAe,GAAA,GAAA,UAAA;MAEjC,mBAUM,OAVN,YAUM,CATJ,mBAEI,KAFJ,YAEI,gBADC,MAAA,SAAA,CAAS,CAAA,0CAAA,CAAA,GAAA,CAAA,GAEd,YAKe,MAAA,YAAA,GAAA;OAJb,MAAK;OACL,SAAQ;OACP,SAAO;;8BACqD,CAAA,gBAAA,gBAA1D,MAAA,SAAA,CAAS,CAAA,4CAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;IAMtB,YAiCe,MAAA,oBAAA,GAAA,MAAA;4BAjBe,CAAA,sBAdE,KAAA,SAAA,UAAA,GAD9B,YAe4B,mCAAA;;MAb1B,UAAA;MACA,gBAAe;MACd,aAAA,QAAA;MACA,YAAY,KAAA,MAAI,+BAAA;MACjB,aAAY;MACX,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,kBAAiB,0BAAA;MACxB,uBAAiB,OAAA,OAAA,OAAA,MAAc,MAAC;OAAmB,0BAAyB,EAAA,4BAA+B,EAAC,CAAA;WAAoB,GAAG,mBAAkB,EAAA,kBAAqB,EAAC,CAAA;;;6BAMjI,CAAA,gBAAA,gBAAxC,MAAA,SAAA,CAAS,CAAA,0BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;yFAIQ,KAAA,SAAA,UAAA,GADtB,YAc4B,mCAAA;;MAZ1B,UAAA;MACC,aAAA,QAAA;MACA,YAAY,KAAA,MAAI,gCAAA;MACjB,aAAY;MACX,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,kBAAiB,2BAAA;MACxB,uBAAiB,OAAA,OAAA,OAAA,MAAc,MAAC;OAAmB,0BAAyB,EAAA,6BAAgC,EAAC,CAAA;WAAoB,GAAG,mBAAkB,EAAA,UAAa,EAAC,CAAA;;;6BAMzH,CAAA,gBAAA,gBAAzC,MAAA,SAAA,CAAS,CAAA,2BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;sCAIsC,KAAA,SAAA,UAAA,GAAtD,YAmBe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAjB5B,YAiB4B,mCAAA;MAhB1B,UAAA;MACC,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MAChB,aAAwB,QAAA,QAAQ,wBAAA,GAAuC,MAAA,+BAAA,CAA+B,CAAC,QAAA,OAAO,KAAA,mBAAA,4BAAgE,MAAA,SAAA,CAAS,CAAA,sCAAA;MAKvL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,kBAAiB,8BAAA;MACxB,uBAAiB,OAAA,OAAA,OAAA,MAAc,MAAC;OAAmB,0BAAA,QAAyB;OAAoB,0BAAyB,EAAA,gCAAmC,EAAC,CAAA;;;6BAM/G,CAAA,gBAAA,gBAA5C,MAAA,SAAA,CAAS,CAAA,8BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;kCAK+B,KAAA,SAAI,8BAAkC,KAAA,SAAA,UAAA,GADrF,mBAiCW,UAAA,EAAA,KAAA,EAAA,GAAA,CA7BT,YAae,MAAA,oBAAA,GAAA,MAAA;4BADe,CAX5B,YAW4B,mCAAA;MAV1B,UAAA;MACA,OAAM;MACL,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MACjB,aAAY;MACX,SAAK,OAAA,QAAA,OAAA,OAAA,WAAE,kBAAiB,0BAAA;MACxB,uBAAiB,OAAA,QAAA,OAAA,OAAgB,MAAM,0BAAyB,EAAA,4BAA+B,EAAC,CAAA;;6BAGrD,CAAA,gBAAA,gBAAzC,MAAA,SAAA,CAAS,CAAA,2BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;QAIhB,YAae,MAAA,oBAAA,GAAA,MAAA;4BADe,CAX5B,YAW4B,mCAAA;MAV1B,UAAA;MACC,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MACjB,aAAY;MACZ,MAAK;MACJ,SAAK,OAAA,QAAA,OAAA,OAAA,WAAE,kBAAiB,0BAAA;MACxB,uBAAiB,OAAA,QAAA,OAAA,OAAgB,MAAM,0BAAyB,EAAA,4BAA+B,EAAC,CAAA;;6BAGrD,CAAA,gBAAA,gBAAzC,MAAA,SAAA,CAAS,CAAA,2BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;IAKlB,YAYe,MAAA,oBAAA,GAAA,MAAA;4BADe,CAV5B,YAU4B,mCAAA;MAT1B,UAAA;MACC,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MACjB,aAAY;MACX,SAAK,OAAA,QAAA,OAAA,OAAA,WAAE,kBAAiB,2BAAA;MACxB,uBAAiB,OAAA,QAAA,OAAA,OAAc,MAAM,0BAAyB,EAAA,6BAAgC,EAAC,CAAA;;6BAGpD,CAAA,gBAAA,gBAAzC,MAAA,SAAA,CAAS,CAAA,2BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;IAII,iBAAA,SAAA,UAAA,GAApB,YAce,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAZ5B,YAY4B,mCAAA;MAX1B,UAAA;MACC,aAAA,QAAA;MACA,YAAY,kBAAA;MACb,aAAY;MACZ,MAAK;MACJ,SAAK,OAAA,QAAA,OAAA,OAAA,WAAE,kBAAiB,+BAAA;MACxB,uBAAiB,OAAA,QAAA,OAAA,OAAc,MAAkB,0BAAyB,EAAA,iCAAoC,EAAC,CAAA;;6BAIhE,CAAA,gBAAA,gBAA7C,MAAA,SAAA,CAAS,CAAA,+BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;mBAImB,KAAA,SAAA,UAAA,GAAnC,YASe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAP5B,YAO4B,mCAAA;MANzB,MAAM,MAAA,WAAA;MACN,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MACjB,UAAA;MACC,uBAAmB;;6BACuB,CAAA,gBAAA,gBAAxC,MAAA,SAAA,CAAS,CAAA,0BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;IAKI,QAAA,SAAI,cAAA,UAAA,GAAxB,YAYe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAV5B,YAU4B,mCAAA;MATzB,MAAM,CAAA,UAAA,MAAA;MACN,aAAA,QAAA;MACA,YAAwB,KAAA,MAAI,oCAAA;MAG7B,aAAY;MACZ,UAAA;MACC,uBAAiB,OAAA,QAAA,OAAA,OAAG,MAAM,2BAA2B,CAAC;;6BACA,CAAA,gBAAA,gBAApD,MAAA,SAAA,CAAS,CAAA,sCAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;IAKhB,YAQe,MAAA,oBAAA,GAAA,MAAA;4BADuC,CANpD,YAMoD,0BAAA;MALjD,MAAA,KAAA;MACA,UAAU,QAAA;MACV,gBAAA,eAAA;MACA,kBAAY,OAAA,QAAA,OAAA,OAAG,MAAM,MAAK,gBAAiB,CAAC;MAC5C,2BAAqB,OAAA,QAAA,OAAA,OAAG,MAAM,MAAK,yBAA0B,CAAC;MAC9D,kBAAY,OAAA,QAAA,OAAA,OAAG,MAAM,MAAK,gBAAiB,CAAC;;;;;;;;KAIxC,QAAA,eAAA,UAAA,GADT,YAwBe,MAAA,oBAAA,GAAA;;KAtBb,OAAM;;4BAqBA,CApBN,mBAoBM,OApBN,YAoBM,CAjBI,QAAA,OAAO,SAAI,mBAAA,UAAA,GADnB,YAQe,MAAA,YAAA,GAAA;;MANb,OAAM;MACL,UAAU,MAAA,MAAA,CAAM,CAAC;MAClB,MAAK;MACL,SAAQ;MACP,SAAO;;6BAC0C,CAAA,gBAAA,gBAA/C,MAAA,SAAA,CAAS,CAAA,iCAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;0DAGd,YAOe,MAAA,YAAA,GAAA;MANb,OAAM;MACL,QAAA,MAAA,MAAA;MACD,MAAK;MACL,SAAQ;MACP,SAAO;;6BACqC,CAAA,gBAAA,gBAA1C,MAAA,SAAA,CAAS,CAAA,4BAAA,CAAA,GAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"OAuth2.vue.script.js","names":[],"sources":["../../../../../src/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Any config options required for the OAuth2 flow */\nexport type OAuth2Options = Pick<\n ApiClientConfiguration,\n 'oauth2RedirectUri'\n> & {\n /** Optional fetch override (IPC-backed on desktop) used for token exchange, refresh, and OIDC discovery */\n customFetch?: typeof fetch\n /** Optional redirect capture (loopback-backed on desktop) for interactive OAuth2 flows */\n captureOAuth2Callback?: CaptureOAuth2Callback\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { useLoadingState } from '@scalar/components/loading'\nimport type { ApiClientConfiguration } from '@scalar/types/api-reference'\nimport { pkceOptions } from '@scalar/types/entities'\nimport { useToasts } from '@scalar/use-toasts'\nimport type { SecretsOAuthFlows } from '@scalar/workspace-store/entities/auth'\nimport type {\n ApiReferenceEvents,\n WorkspaceEventBus,\n} from '@scalar/workspace-store/events'\nimport {\n canResetSecretField,\n isSecretFieldCleared,\n type AuthSecretField,\n} from '@scalar/workspace-store/helpers/auth-secret-fields'\nimport {\n getEnvironmentVariables,\n type OAuthFlowAuthorizationCodeSecret,\n type OAuthFlowClientCredentialsSecret,\n type OAuthFlowPasswordSecret,\n type OAuthFlowsObjectSecret,\n type SecuritySchemeObjectSecret,\n} from '@scalar/workspace-store/request-example'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport type { XScalarCredentialsLocation } from '@scalar/workspace-store/schemas/extensions/security/x-scalar-credentials-location'\nimport type {\n OAuthFlow,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\n\nimport OAuthScopesInput from '@/v2/blocks/scalar-auth-selector-block/components/OAuthScopesInput.vue'\nimport {\n authorizeOauth2,\n refreshOauth2Token,\n type CaptureOAuth2Callback,\n} from '@/v2/blocks/scalar-auth-selector-block/helpers/oauth'\nimport { resolveDefaultOAuth2RedirectUri } from '@/v2/blocks/scalar-auth-selector-block/helpers/resolve-default-oauth2-redirect-url'\nimport { DataTableRow } from '@/v2/components/data-table'\nimport { useLocalization } from '@/v2/features/localization'\n\nimport type { DeviceAuthorizationPrompt } from '../helpers/oauth-device-authorization'\nimport RequestAuthDataTableInput from './RequestAuthDataTableInput.vue'\n\nconst {\n environment,\n flows,\n type,\n scheme,\n selectedScopes: selectedScopesProp,\n server,\n proxyUrl,\n eventBus,\n name,\n options = {},\n} = defineProps<{\n /** Current environment configuration */\n environment: XScalarEnvironment\n /** OAuth flows */\n flows: OAuthFlowsObjectSecret\n /** Type of the OAuth flow */\n type: keyof OAuthFlowsObjectSecret\n /** Selected scopes */\n selectedScopes: string[]\n /** Security scheme */\n scheme: SecuritySchemeObjectSecret\n /** Current server configuration */\n server: ServerObject | null\n /** Proxy URL */\n proxyUrl: string\n /** Name of the security scheme */\n name: string\n /** Event bus for authentication updates */\n eventBus: WorkspaceEventBus\n /** Any config options required for the OAuth2 flow */\n options?: OAuth2Options\n /**\n * Hides the Authorize / Refresh / Clear actions. Used when the form is embedded as a\n * configuration-only view (e.g. behind a gear icon), so the host component owns the\n * authorize action and the tokens are routed to the scheme it chooses.\n */\n hideActions?: boolean\n}>()\n\nconst emits = defineEmits<{\n (\n e: 'update:selectedScopes',\n payload: { scopes?: string[]; scope?: string; selected?: boolean },\n ): void\n (\n e: 'upsert:scope',\n payload: Omit<ApiReferenceEvents['auth:upsert:scopes'], 'name'>,\n ): void\n (\n e: 'delete:scope',\n payload: Omit<ApiReferenceEvents['auth:delete:scopes'], 'name'>,\n ): void\n}>()\n\nconst devicePrompt = ref<DeviceAuthorizationPrompt | null>(null)\nlet deviceController: AbortController | undefined\nconst cancelDeviceAuthorization = (): void => {\n deviceController?.abort()\n devicePrompt.value = null\n}\nonBeforeUnmount(cancelDeviceAuthorization)\nwatch(() => [type, name, flows], cancelDeviceAuthorization)\n\nconst { translate } = useLocalization()\n\nconst loader = useLoadingState()\nconst { toast } = useToasts()\n\n/** The current OAuth flow based on the selected type */\nconst flow = computed(() => flows[type]!)\ntype NonImplicitFlow =\n | OAuthFlowPasswordSecret\n | OAuthFlowClientCredentialsSecret\n | OAuthFlowAuthorizationCodeSecret\n\n/** We filter selected scopes to only include scopes that are defined on this flow (own keys only). */\nconst selectedScopes = computed(() => {\n const definedScopes = flow.value.scopes\n if (!definedScopes) {\n return []\n }\n return selectedScopesProp.filter((scope) =>\n Object.hasOwn(definedScopes, scope),\n )\n})\n\n/**\n * Show the client secret whenever the flow supports one. PKCE and a client\n * secret are independent, so confidential clients can use both together\n * (see RFC 9700 Section 2.1.1).\n */\nconst showClientSecret = computed(\n () => 'x-scalar-secret-client-secret' in flow.value,\n)\n\nconst clientSecretValue = computed((): string => {\n const f = flow.value as { 'x-scalar-secret-client-secret'?: string }\n return f['x-scalar-secret-client-secret'] ?? ''\n})\n\n/** Updates the security scheme base */\nconst handleOauth2Update = (\n payload: Partial<OAuthFlow & XScalarCredentialsLocation> & {\n deviceAuthorizationUrl?: string\n },\n): void => {\n // OpenIdConnect uses the secrets update for all\n if (scheme.type === 'openIdConnect') {\n return handleOauth2SecretsUpdate(payload)\n }\n\n // Only OAuth2 schemes carry flows on the document; this component is never\n // rendered for the other scheme types.\n if (scheme.type !== 'oauth2') {\n return\n }\n\n eventBus.emit('auth:update:security-scheme', {\n payload: {\n type: scheme.type,\n flows: {\n [type]: payload,\n },\n },\n name,\n })\n}\n\n/** Updates the flow secrets */\nconst handleOauth2SecretsUpdate = (\n payload: Omit<Partial<SecretsOAuthFlows[keyof SecretsOAuthFlows]>, 'type'>,\n): void => {\n // This component only renders for oauth2/openIdConnect. Other scheme types (e.g. mutualTLS)\n // carry no flow secrets, so there is nothing to persist and no matching secrets payload type.\n if (scheme.type !== 'oauth2' && scheme.type !== 'openIdConnect') {\n return\n }\n\n eventBus.emit('auth:update:security-scheme-secrets', {\n payload: {\n type: scheme.type,\n [type]: payload,\n },\n name,\n })\n}\n\n/** Reset only this field; redirect URI may need its browser default prefilled again. */\nconst handleResetSecret = (field: AuthSecretField): void => {\n if (field === 'x-scalar-secret-redirect-uri') {\n hasHandledRedirectPrefill.value = false\n }\n eventBus.emit('auth:reset:security-scheme-secret', {\n name,\n flow: type,\n field,\n })\n}\n\n/**\n * Reset needs a default to restore, otherwise it would only clear the field like the clear\n * action does. A cleared access token is the exception: the token view stays open while it is\n * cleared, and Reset is the only way back to the Authorize form.\n */\nconst canReset = (\n field: AuthSecretField,\n value: string | undefined,\n): boolean => {\n if (\n field === 'x-scalar-secret-token' &&\n isSecretFieldCleared(flow.value, field)\n ) {\n return true\n }\n // Without a stored default, resetting the redirect URI re-runs the browser prefill below,\n // unless the desktop loopback capture computes it at authorize time instead.\n const fallback =\n field === 'x-scalar-secret-redirect-uri' && !options.captureOAuth2Callback\n ? resolveDefaultOAuth2RedirectUri(options)\n : ''\n return canResetSecretField(flow.value, field, value, fallback)\n}\n\n/** Fixed-choice fields must never write an empty string into the document. */\nconst handlePkceUpdate = (value: string): void => {\n if (value === 'SHA-256' || value === 'plain' || value === 'no') {\n handleOauth2Update({ 'x-usePkce': value })\n }\n}\n\n/** Clears the flow secrets */\nconst clearOauth2Secrets = (): void => {\n if (loader.isLoading) {\n return\n }\n eventBus.emit('auth:clear:security-scheme-secrets', {\n name,\n })\n}\n\n/** Clears stored access and refresh tokens (authorized state) */\nconst handleClearAccessTokens = (): void => {\n if (loader.isLoading) {\n return\n }\n handleOauth2SecretsUpdate({\n 'x-scalar-secret-token': '',\n 'x-scalar-secret-refresh-token': '',\n })\n}\n\n/** Track redirect URI prefill per flow instance to support document switching */\nconst prefilledFlowIdentity = ref<string | null>(null)\nconst hasHandledRedirectPrefill = ref(false)\n\nconst resolveFlowIdentity = (\n currentFlow: OAuthFlowsObjectSecret[keyof OAuthFlowsObjectSecret] | undefined,\n): string =>\n JSON.stringify({\n type,\n authorizationUrl:\n currentFlow && 'authorizationUrl' in currentFlow\n ? currentFlow.authorizationUrl\n : '',\n tokenUrl:\n currentFlow && 'tokenUrl' in currentFlow ? currentFlow.tokenUrl : '',\n refreshUrl: currentFlow?.refreshUrl ?? '',\n scopes: Object.keys(currentFlow?.scopes ?? {}),\n })\n\n/** Default the redirect-uri to the current origin if we have access to window */\nwatch(\n () => flow.value,\n (currentFlow) => {\n if (!currentFlow || !('x-scalar-secret-redirect-uri' in currentFlow)) {\n return\n }\n\n const flowIdentity = resolveFlowIdentity(currentFlow)\n if (prefilledFlowIdentity.value !== flowIdentity) {\n prefilledFlowIdentity.value = flowIdentity\n hasHandledRedirectPrefill.value = false\n }\n\n if (hasHandledRedirectPrefill.value) {\n return\n }\n\n const newRedirectUri = (currentFlow as OAuthFlowAuthorizationCodeSecret)[\n 'x-scalar-secret-redirect-uri'\n ]\n const defaultRedirectUri = resolveDefaultOAuth2RedirectUri(options)\n\n hasHandledRedirectPrefill.value = true\n\n // The desktop loopback path computes the redirect URI at authorize time (an\n // ephemeral 127.0.0.1 port), so persisting a default into the document would\n // only bake in a stale, unused value. Leave it empty and show a hint instead.\n if (\n isSecretFieldCleared(currentFlow, 'x-scalar-secret-redirect-uri') ||\n newRedirectUri ||\n !defaultRedirectUri ||\n options.captureOAuth2Callback\n ) {\n return\n }\n\n handleOauth2SecretsUpdate({\n 'x-scalar-secret-redirect-uri': defaultRedirectUri,\n })\n },\n { immediate: true },\n)\n\n/**\n * Authorizes the user using the specified OAuth flow.\n * Opens the appropriate OAuth dialog and/or performs the token exchange.\n */\nconst handleAuthorize = async (): Promise<void> => {\n if (loader.isLoading) {\n return\n }\n\n loader.start()\n const controller = new AbortController()\n deviceController = controller\n\n const [error, tokens] = await authorizeOauth2(\n flows,\n type,\n selectedScopes.value,\n server,\n proxyUrl,\n getEnvironmentVariables(environment),\n options.customFetch,\n options.captureOAuth2Callback,\n {\n signal: controller.signal,\n onPrompt: (prompt) => {\n devicePrompt.value = prompt\n },\n },\n )\n devicePrompt.value = null\n\n await loader.clear()\n if (controller.signal.aborted) {\n return\n }\n\n if (tokens?.accessToken) {\n handleOauth2SecretsUpdate({\n 'x-scalar-secret-token': tokens.accessToken,\n ...(tokens.refreshToken\n ? { 'x-scalar-secret-refresh-token': tokens.refreshToken }\n : {}),\n })\n } else {\n console.error(error)\n toast(\n error?.message ?? translate('apiClient.oauth2.failedToauthorize'),\n 'error',\n )\n }\n}\n\n/** Refreshing requires a token issued by the provider, not just a compatible flow. */\nconst canRefreshToken = computed<boolean>(\n (): boolean =>\n type !== 'implicit' && Boolean(flow.value['x-scalar-secret-refresh-token']),\n)\n\n/**\n * Refresh URL placeholder, shows tokenUrl as hint if refreshUrl is not specified.\n * This helps users understand that tokenUrl will be used as fallback.\n */\nconst refreshUrlPlaceholder = computed(() => {\n if ('tokenUrl' in flow.value && flow.value.tokenUrl) {\n return flow.value.tokenUrl\n }\n return 'https://galaxy.scalar.com/oauth/refresh'\n})\n\n/**\n * Uses the stored refresh token to obtain a new access token\n * via grant_type=refresh_token.\n */\nconst handleRefresh = async (): Promise<void> => {\n // The explicit flow check narrows the type for refreshOauth2Token; the computed boolean cannot.\n if (loader.isLoading || type === 'implicit' || !canRefreshToken.value) {\n return\n }\n\n loader.start()\n\n const [error, tokens] = await refreshOauth2Token(\n flows,\n type,\n proxyUrl,\n server,\n getEnvironmentVariables(environment),\n options.customFetch,\n )\n\n await loader.clear()\n\n if (tokens?.accessToken) {\n handleOauth2SecretsUpdate({\n 'x-scalar-secret-token': tokens.accessToken,\n ...(tokens.refreshToken\n ? { 'x-scalar-secret-refresh-token': tokens.refreshToken }\n : {}),\n })\n } else {\n console.error(error)\n toast(\n error?.message ?? translate('apiClient.oauth2.failedToRefreshToken'),\n 'error',\n )\n }\n}\n\n/** Updates the secret location */\nconst handleSecretLocationUpdate = (value: string): void => {\n if (value !== 'body' && value !== 'header') return\n const credentialsLocation = value\n\n if (scheme.type !== 'openIdConnect') {\n handleOauth2Update({\n 'x-scalar-credentials-location': credentialsLocation,\n })\n }\n\n handleOauth2SecretsUpdate({\n 'x-scalar-credentials-location': credentialsLocation,\n })\n}\n</script>\n\n<template>\n <!-- Access Token Display: Shows when user is already authorized -->\n <template\n v-if=\"\n Boolean(flow['x-scalar-secret-token']) ||\n isSecretFieldCleared(flow, 'x-scalar-secret-token')\n \">\n <DataTableRow>\n <RequestAuthDataTableInput\n :canReset=\"\n canReset('x-scalar-secret-token', flow['x-scalar-secret-token'])\n \"\n class=\"border-r-transparent\"\n :environment\n :modelValue=\"flow['x-scalar-secret-token']\"\n placeholder=\"QUxMIFlPVVIgQkFTRSBBUkUgQkVMT05HIFRPIFVT\"\n type=\"password\"\n @reset=\"handleResetSecret('x-scalar-secret-token')\"\n @update:modelValue=\"\n (v) => handleOauth2SecretsUpdate({ 'x-scalar-secret-token': v })\n \">\n {{ translate('apiClient.oauth2.accessToken') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"canRefreshToken\">\n <RequestAuthDataTableInput\n class=\"border-r-transparent\"\n :environment\n :modelValue=\"flow.refreshUrl ?? ''\"\n :placeholder=\"refreshUrlPlaceholder\"\n @update:modelValue=\"(v) => handleOauth2Update({ refreshUrl: v })\">\n {{ translate('apiClient.oauth2.refreshUrl') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow\n v-if=\"!hideActions\"\n class=\"min-w-full\">\n <div class=\"flex h-8 items-center justify-end gap-2 border-t\">\n <ScalarButton\n v-if=\"canRefreshToken\"\n class=\"p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"handleRefresh\">\n {{ translate('apiClient.oauth2.refresh') }}\n </ScalarButton>\n <ScalarButton\n class=\"mr-1 p-0 px-2 py-0.5\"\n :disabled=\"loader.isLoading\"\n size=\"sm\"\n variant=\"outlined\"\n @click=\"handleClearAccessTokens\">\n {{ translate('apiClient.oauth2.clearTokens') }}\n </ScalarButton>\n </div>\n </DataTableRow>\n </template>\n\n <!-- Authorization Form: Shows when user needs to authorize -->\n <template v-else>\n <DataTableRow v-if=\"'deviceAuthorizationUrl' in flow\">\n <RequestAuthDataTableInput\n :environment\n :modelValue=\"flow.deviceAuthorizationUrl\"\n @update:modelValue=\"\n (v) => handleOauth2Update({ deviceAuthorizationUrl: v })\n \">\n {{ translate('apiClient.oauth2.deviceAuthorizationUrl') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n <DataTableRow v-if=\"devicePrompt\">\n <div class=\"w-full p-2\">\n <div\n class=\"bg-b-2 flex flex-col gap-3 rounded-lg border p-3 text-sm\"\n role=\"status\">\n <p class=\"text-c-2 text-xs leading-normal\">\n {{ translate('apiClient.oauth2.deviceVerificationPrompt') }}\n </p>\n <strong\n class=\"bg-b-1 font-code w-fit max-w-full rounded border px-3 py-2 text-base font-medium tracking-widest break-all select-all\">\n {{ devicePrompt.userCode }}\n </strong>\n <a\n class=\"text-c-accent w-fit max-w-full text-xs break-all underline underline-offset-2\"\n :href=\"\n devicePrompt.verificationUriComplete ||\n devicePrompt.verificationUri\n \"\n rel=\"noopener noreferrer\"\n target=\"_blank\">\n {{ devicePrompt.verificationUri }}\n </a>\n <div class=\"flex items-center justify-between gap-3\">\n <p class=\"text-c-2 text-xs\">\n {{ translate('apiClient.oauth2.waitingForAuthorization') }}\n </p>\n <ScalarButton\n size=\"xs\"\n variant=\"outlined\"\n @click=\"cancelDeviceAuthorization\">\n {{ translate('apiClient.oauth2.cancelDeviceAuthorization') }}\n </ScalarButton>\n </div>\n </div>\n </div>\n </DataTableRow>\n <DataTableRow>\n <RequestAuthDataTableInput\n v-if=\"'authorizationUrl' in flow\"\n :canReset=\"\n canReset(\n 'x-scalar-secret-auth-url',\n flow['x-scalar-secret-auth-url'] ?? '',\n )\n \"\n containerClass=\"border-r-0\"\n :environment\n :modelValue=\"flow['x-scalar-secret-auth-url'] ?? ''\"\n placeholder=\"https://galaxy.scalar.com/authorize\"\n @reset=\"handleResetSecret('x-scalar-secret-auth-url')\"\n @update:modelValue=\"\n (v) => {\n handleOauth2SecretsUpdate({ 'x-scalar-secret-auth-url': v })\n if (v) handleOauth2Update({ authorizationUrl: v })\n }\n \">\n {{ translate('apiClient.oauth2.authUrl') }}\n </RequestAuthDataTableInput>\n\n <RequestAuthDataTableInput\n v-if=\"'tokenUrl' in flow\"\n :canReset=\"\n canReset(\n 'x-scalar-secret-token-url',\n flow['x-scalar-secret-token-url'] ?? '',\n )\n \"\n :environment\n :modelValue=\"flow['x-scalar-secret-token-url'] ?? ''\"\n placeholder=\"https://galaxy.scalar.com/token\"\n @reset=\"handleResetSecret('x-scalar-secret-token-url')\"\n @update:modelValue=\"\n (v) => {\n handleOauth2SecretsUpdate({ 'x-scalar-secret-token-url': v })\n if (v) handleOauth2Update({ tokenUrl: v })\n }\n \">\n {{ translate('apiClient.oauth2.tokenUrl') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"'x-scalar-secret-redirect-uri' in flow\">\n <RequestAuthDataTableInput\n :canReset=\"\n canReset(\n 'x-scalar-secret-redirect-uri',\n flow['x-scalar-secret-redirect-uri'],\n )\n \"\n :environment\n :modelValue=\"flow['x-scalar-secret-redirect-uri']\"\n :placeholder=\"\n options.captureOAuth2Callback\n ? `${resolveDefaultOAuth2RedirectUri(options) || 'http://127.0.0.1'} (handled automatically)`\n : translate('apiClient.oauth2.optionalRedirectUrl')\n \"\n @reset=\"handleResetSecret('x-scalar-secret-redirect-uri')\"\n @update:modelValue=\"\n (v) => {\n hasHandledRedirectPrefill = true\n handleOauth2SecretsUpdate({ 'x-scalar-secret-redirect-uri': v })\n }\n \">\n {{ translate('apiClient.oauth2.redirectUrl') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <template\n v-if=\"\n 'x-scalar-secret-username' in flow && 'x-scalar-secret-password' in flow\n \">\n <DataTableRow>\n <RequestAuthDataTableInput\n :canReset=\"\n canReset(\n 'x-scalar-secret-username',\n flow['x-scalar-secret-username'],\n )\n \"\n class=\"text-c-2\"\n :environment\n :modelValue=\"flow['x-scalar-secret-username']\"\n placeholder=\"janedoe\"\n @reset=\"handleResetSecret('x-scalar-secret-username')\"\n @update:modelValue=\"\n (v) => handleOauth2SecretsUpdate({ 'x-scalar-secret-username': v })\n \">\n {{ translate('apiClient.oauth2.username') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow>\n <RequestAuthDataTableInput\n :canReset=\"\n canReset(\n 'x-scalar-secret-password',\n flow['x-scalar-secret-password'],\n )\n \"\n :environment\n :modelValue=\"flow['x-scalar-secret-password']\"\n placeholder=\"********\"\n type=\"password\"\n @reset=\"handleResetSecret('x-scalar-secret-password')\"\n @update:modelValue=\"\n (v) => handleOauth2SecretsUpdate({ 'x-scalar-secret-password': v })\n \">\n {{ translate('apiClient.oauth2.password') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n </template>\n\n <DataTableRow>\n <RequestAuthDataTableInput\n :canReset=\"\n canReset(\n 'x-scalar-secret-client-id',\n flow['x-scalar-secret-client-id'],\n )\n \"\n :environment\n :modelValue=\"flow['x-scalar-secret-client-id']\"\n placeholder=\"12345\"\n @reset=\"handleResetSecret('x-scalar-secret-client-id')\"\n @update:modelValue=\"\n (v) => handleOauth2SecretsUpdate({ 'x-scalar-secret-client-id': v })\n \">\n {{ translate('apiClient.oauth2.clientID') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"showClientSecret\">\n <RequestAuthDataTableInput\n :canReset=\"canReset('x-scalar-secret-client-secret', clientSecretValue)\"\n :environment\n :modelValue=\"clientSecretValue\"\n placeholder=\"XYZ123\"\n type=\"password\"\n @reset=\"handleResetSecret('x-scalar-secret-client-secret')\"\n @update:modelValue=\"\n (v) =>\n handleOauth2SecretsUpdate({ 'x-scalar-secret-client-secret': v })\n \">\n {{ translate('apiClient.oauth2.clientSecret') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <DataTableRow v-if=\"'x-usePkce' in flow\">\n <RequestAuthDataTableInput\n :enum=\"pkceOptions\"\n :environment\n :modelValue=\"flow['x-usePkce']\"\n readOnly\n @update:modelValue=\"handlePkceUpdate\">\n {{ translate('apiClient.oauth2.usePKCE') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Credentials Location -->\n <DataTableRow v-if=\"type !== 'implicit'\">\n <RequestAuthDataTableInput\n :enum=\"['header', 'body']\"\n :environment\n :modelValue=\"\n (flow as NonImplicitFlow)['x-scalar-credentials-location'] || 'header'\n \"\n placeholder=\"header\"\n readOnly\n @update:modelValue=\"(v) => handleSecretLocationUpdate(v)\">\n {{ translate('apiClient.oauth2.credentialsLocation') }}\n </RequestAuthDataTableInput>\n </DataTableRow>\n\n <!-- Scopes -->\n <DataTableRow>\n <OAuthScopesInput\n :flow\n :flowType=\"type\"\n :selectedScopes\n @delete:scope=\"(v) => emits('delete:scope', v)\"\n @update:selectedScopes=\"(v) => emits('update:selectedScopes', v)\"\n @upsert:scope=\"(v) => emits('upsert:scope', v)\" />\n </DataTableRow>\n\n <DataTableRow\n v-if=\"!hideActions\"\n class=\"min-w-full\">\n <div class=\"flex h-8 w-full items-center justify-end border-t\">\n <!-- Allow clearing the oauth section and going back to discovery -->\n <ScalarButton\n v-if=\"scheme.type === 'openIdConnect'\"\n class=\"mr-1 p-0 px-2 py-0.5\"\n :disabled=\"loader.isLoading\"\n size=\"sm\"\n variant=\"outlined\"\n @click=\"clearOauth2Secrets\">\n {{ translate('apiClient.oauth2.resetDiscovery') }}\n </ScalarButton>\n\n <ScalarButton\n class=\"mr-0.75 p-0 px-2 py-0.5\"\n :loader\n size=\"sm\"\n variant=\"outlined\"\n @click=\"handleAuthorize\">\n {{ translate('apiClient.oauth2.authorize') }}\n </ScalarButton>\n </div>\n </DataTableRow>\n </template>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkGA,MAAM,QAAQ;EAed,MAAM,eAAe,IAAsC,IAAI;EAC/D,IAAI;EACJ,MAAM,kCAAwC;GAC5C,kBAAkB,MAAM;GACxB,aAAa,QAAQ;EACvB;EACA,gBAAgB,yBAAyB;EACzC,YAAY;GAAC,QAAA;GAAM,QAAA;GAAM,QAAA;EAAK,GAAG,yBAAyB;EAE1D,MAAM,EAAE,cAAc,gBAAgB;EAEtC,MAAM,SAAS,gBAAgB;EAC/B,MAAM,EAAE,UAAU,UAAU;;EAG5B,MAAM,OAAO,eAAe,QAAA,MAAM,QAAA,KAAM;EAOxC,MAAM,iBAAiB,eAAe;GACpC,MAAM,gBAAgB,KAAK,MAAM;GACjC,IAAI,CAAC,eACH,OAAO,CAAC;GAEV,OAAO,QAAA,eAAmB,QAAQ,UAChC,OAAO,OAAO,eAAe,KAAK,CACpC;EACF,CAAC;;;;;;EAOD,MAAM,mBAAmB,eACjB,mCAAmC,KAAK,KAChD;EAEA,MAAM,oBAAoB,eAAuB;GAE/C,OADU,KAAK,MACN,oCAAoC;EAC/C,CAAC;;EAGD,MAAM,sBACJ,YAGS;GAET,IAAI,QAAA,OAAO,SAAS,iBAClB,OAAO,0BAA0B,OAAO;GAK1C,IAAI,QAAA,OAAO,SAAS,UAClB;GAGF,QAAA,SAAS,KAAK,+BAA+B;IAC3C,SAAS;KACP,MAAM,QAAA,OAAO;KACb,OAAO,GACJ,QAAA,OAAO,QACV;IACF;IACA,MAAG,QAAA;GACL,CAAC;EACH;;EAGA,MAAM,6BACJ,YACS;GAGT,IAAI,QAAA,OAAO,SAAS,YAAY,QAAA,OAAO,SAAS,iBAC9C;GAGF,QAAA,SAAS,KAAK,uCAAuC;IACnD,SAAS;KACP,MAAM,QAAA,OAAO;MACZ,QAAA,OAAO;IACV;IACA,MAAG,QAAA;GACL,CAAC;EACH;;EAGA,MAAM,qBAAqB,UAAiC;GAC1D,IAAI,UAAU,gCACZ,0BAA0B,QAAQ;GAEpC,QAAA,SAAS,KAAK,qCAAqC;IACjD,MAAG,QAAA;IACH,MAAM,QAAA;IACN;GACF,CAAC;EACH;;;;;;EAOA,MAAM,YACJ,OACA,UACY;GACZ,IACE,UAAU,2BACV,qBAAqB,KAAK,OAAO,KAAK,GAEtC,OAAO;GAIT,MAAM,WACJ,UAAU,kCAAkC,CAAC,QAAA,QAAQ,wBACjD,gCAAgC,QAAA,OAAO,IACvC;GACN,OAAO,oBAAoB,KAAK,OAAO,OAAO,OAAO,QAAQ;EAC/D;;EAGA,MAAM,oBAAoB,UAAwB;GAChD,IAAI,UAAU,aAAa,UAAU,WAAW,UAAU,MACxD,mBAAmB,EAAE,aAAa,MAAM,CAAC;EAE7C;;EAGA,MAAM,2BAAiC;GACrC,IAAI,OAAO,WACT;GAEF,QAAA,SAAS,KAAK,sCAAsC,EAClD,MAAG,QAAA,KACL,CAAC;EACH;;EAGA,MAAM,gCAAsC;GAC1C,IAAI,OAAO,WACT;GAEF,0BAA0B;IACxB,yBAAyB;IACzB,iCAAiC;GACnC,CAAC;EACH;;EAGA,MAAM,wBAAwB,IAAmB,IAAI;EACrD,MAAM,4BAA4B,IAAI,KAAK;EAE3C,MAAM,uBACJ,gBAEA,KAAK,UAAU;GACb,MAAG,QAAA;GACH,kBACE,eAAe,sBAAsB,cACjC,YAAY,mBACZ;GACN,UACE,eAAe,cAAc,cAAc,YAAY,WAAW;GACpE,YAAY,aAAa,cAAc;GACvC,QAAQ,OAAO,KAAK,aAAa,UAAU,CAAC,CAAC;EAC/C,CAAC;;EAGH,YACQ,KAAK,QACV,gBAAgB;GACf,IAAI,CAAC,eAAe,EAAE,kCAAkC,cACtD;GAGF,MAAM,eAAe,oBAAoB,WAAW;GACpD,IAAI,sBAAsB,UAAU,cAAc;IAChD,sBAAsB,QAAQ;IAC9B,0BAA0B,QAAQ;GACpC;GAEA,IAAI,0BAA0B,OAC5B;GAGF,MAAM,iBAAkB,YACtB;GAEF,MAAM,qBAAqB,gCAAgC,QAAA,OAAO;GAElE,0BAA0B,QAAQ;GAKlC,IACE,qBAAqB,aAAa,8BAA8B,KAChE,kBACA,CAAC,sBACD,QAAA,QAAQ,uBAER;GAGF,0BAA0B,EACxB,gCAAgC,mBAClC,CAAC;EACH,GACA,EAAE,WAAW,KAAK,CACpB;;;;;EAMA,MAAM,kBAAkB,YAA2B;GACjD,IAAI,OAAO,WACT;GAGF,OAAO,MAAM;GACb,MAAM,aAAa,IAAI,gBAAgB;GACvC,mBAAmB;GAEnB,MAAM,CAAC,OAAO,UAAU,MAAM,gBAC5B,QAAA,OACA,QAAA,MACA,eAAe,OACf,QAAA,QACA,QAAA,UACA,wBAAwB,QAAA,WAAW,GACnC,QAAA,QAAQ,aACR,QAAA,QAAQ,uBACR;IACE,QAAQ,WAAW;IACnB,WAAW,WAAW;KACpB,aAAa,QAAQ;IACvB;GACF,CACF;GACA,aAAa,QAAQ;GAErB,MAAM,OAAO,MAAM;GACnB,IAAI,WAAW,OAAO,SACpB;GAGF,IAAI,QAAQ,aACV,0BAA0B;IACxB,yBAAyB,OAAO;IAChC,GAAI,OAAO,eACP,EAAE,iCAAiC,OAAO,aAAa,IACvD,CAAC;GACP,CAAC;QACI;IACL,QAAQ,MAAM,KAAK;IACnB,MACE,OAAO,WAAW,UAAU,oCAAoC,GAChE,OACF;GACF;EACF;;EAGA,MAAM,kBAAkB,eAEpB,QAAA,SAAS,cAAc,QAAQ,KAAK,MAAM,gCAAgC,CAC9E;;;;;EAMA,MAAM,wBAAwB,eAAe;GAC3C,IAAI,cAAc,KAAK,SAAS,KAAK,MAAM,UACzC,OAAO,KAAK,MAAM;GAEpB,OAAO;EACT,CAAC;;;;;EAMD,MAAM,gBAAgB,YAA2B;GAE/C,IAAI,OAAO,aAAa,QAAA,SAAS,cAAc,CAAC,gBAAgB,OAC9D;GAGF,OAAO,MAAM;GAEb,MAAM,CAAC,OAAO,UAAU,MAAM,mBAC5B,QAAA,OACA,QAAA,MACA,QAAA,UACA,QAAA,QACA,wBAAwB,QAAA,WAAW,GACnC,QAAA,QAAQ,WACV;GAEA,MAAM,OAAO,MAAM;GAEnB,IAAI,QAAQ,aACV,0BAA0B;IACxB,yBAAyB,OAAO;IAChC,GAAI,OAAO,eACP,EAAE,iCAAiC,OAAO,aAAa,IACvD,CAAC;GACP,CAAC;QACI;IACL,QAAQ,MAAM,KAAK;IACnB,MACE,OAAO,WAAW,UAAU,uCAAuC,GACnE,OACF;GACF;EACF;;EAGA,MAAM,8BAA8B,UAAwB;GAC1D,IAAI,UAAU,UAAU,UAAU,UAAU;GAC5C,MAAM,sBAAsB;GAE5B,IAAI,QAAA,OAAO,SAAS,iBAClB,mBAAmB,EACjB,iCAAiC,oBACnC,CAAC;GAGH,0BAA0B,EACxB,iCAAiC,oBACnC,CAAC;EACH;;UAMiB,QAAQ,KAAA,MAAI,wBAAA,KAAoC,MAAA,oBAAA,CAAoB,CAAC,KAAA,OAAI,uBAAA,KAAA,UAAA,GADxF,mBAyDW,UAAA,EAAA,KAAA,EAAA,GAAA;IApDT,YAgBe,MAAA,oBAAA,GAAA,MAAA;4BADe,CAd5B,YAc4B,mCAAA;MAbzB,UAAqB,SAAQ,yBAA0B,KAAA,MAAI,wBAAA;MAG5D,OAAM;MACL,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MACjB,aAAY;MACZ,MAAK;MACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,kBAAiB,uBAAA;MACxB,uBAAiB,OAAA,OAAA,OAAA,MAAc,MAAM,0BAAyB,EAAA,yBAA4B,EAAC,CAAA;;6BAG7C,CAAA,gBAAA,gBAA5C,MAAA,SAAA,CAAS,CAAA,8BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;IAII,gBAAA,SAAA,UAAA,GAApB,YASe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAP5B,YAO4B,mCAAA;MAN1B,OAAM;MACL,aAAA,QAAA;MACA,YAAY,KAAA,MAAK,cAAU;MAC3B,aAAa,sBAAA;MACb,uBAAiB,OAAA,OAAA,OAAA,MAAG,MAAM,mBAAkB,EAAA,YAAe,EAAC,CAAA;;6BACf,CAAA,gBAAA,gBAA3C,MAAA,SAAA,CAAS,CAAA,6BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;KAKP,QAAA,eAAA,UAAA,GADT,YAsBe,MAAA,oBAAA,GAAA;;KApBb,OAAM;;4BAmBA,CAlBN,mBAkBM,OAlBN,YAkBM,CAhBI,gBAAA,SAAA,UAAA,GADR,YAQe,MAAA,YAAA,GAAA;;MANb,OAAM;MACL,QAAA,MAAA,MAAA;MACD,MAAK;MACL,SAAQ;MACP,SAAO;;6BACmC,CAAA,gBAAA,gBAAxC,MAAA,SAAA,CAAS,CAAA,0BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;wDAEd,YAOe,MAAA,YAAA,GAAA;MANb,OAAM;MACL,UAAU,MAAA,MAAA,CAAM,CAAC;MAClB,MAAK;MACL,SAAQ;MACP,SAAO;;6BACuC,CAAA,gBAAA,gBAA5C,MAAA,SAAA,CAAS,CAAA,8BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;2BAOpB,mBAoQW,UAAA,EAAA,KAAA,EAAA,GAAA;gCAnQuC,KAAA,SAAA,UAAA,GAAhD,YASe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAP5B,YAO4B,mCAAA;MANzB,aAAA,QAAA;MACA,YAAY,KAAA,MAAK;MACjB,uBAAiB,OAAA,OAAA,OAAA,MAAc,MAAM,mBAAkB,EAAA,wBAA2B,EAAC,CAAA;;6BAG1B,CAAA,gBAAA,gBAAvD,MAAA,SAAA,CAAS,CAAA,yCAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;IAGI,aAAA,SAAA,UAAA,GAApB,YAmCe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADP,CAjCN,mBAiCM,OAjCN,YAiCM,CAhCJ,mBA+BM,OA/BN,YA+BM;MA5BJ,mBAEI,KAFJ,YAEI,gBADC,MAAA,SAAA,CAAS,CAAA,2CAAA,CAAA,GAAA,CAAA;MAEd,mBAGS,UAHT,YAGS,gBADJ,aAAA,MAAa,QAAQ,GAAA,CAAA;MAE1B,mBASI,KAAA;OARF,OAAM;OACL,MAAqB,aAAA,MAAa,2BAAyC,aAAA,MAAa;OAIzF,KAAI;OACJ,QAAO;yBACJ,aAAA,MAAa,eAAe,GAAA,GAAA,UAAA;MAEjC,mBAUM,OAVN,YAUM,CATJ,mBAEI,KAFJ,YAEI,gBADC,MAAA,SAAA,CAAS,CAAA,0CAAA,CAAA,GAAA,CAAA,GAEd,YAKe,MAAA,YAAA,GAAA;OAJb,MAAK;OACL,SAAQ;OACP,SAAO;;8BACqD,CAAA,gBAAA,gBAA1D,MAAA,SAAA,CAAS,CAAA,4CAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;IAMtB,YA2Ce,MAAA,oBAAA,GAAA,MAAA;4BAtBe,CAAA,sBAnBE,KAAA,SAAA,UAAA,GAD9B,YAoB4B,mCAAA;;MAlBzB,UAAqB,SAAA,4BAA8D,KAAA,MAAI,+BAAA,EAAA;MAMxF,gBAAe;MACd,aAAA,QAAA;MACA,YAAY,KAAA,MAAI,+BAAA;MACjB,aAAY;MACX,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,kBAAiB,0BAAA;MACxB,uBAAiB,OAAA,OAAA,OAAA,MAAc,MAAC;OAAmB,0BAAyB,EAAA,4BAA+B,EAAC,CAAA;WAAoB,GAAG,mBAAkB,EAAA,kBAAqB,EAAC,CAAA;;;6BAMjI,CAAA,gBAAA,gBAAxC,MAAA,SAAA,CAAS,CAAA,0BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;uDAIQ,KAAA,SAAA,UAAA,GADtB,YAmB4B,mCAAA;;MAjBzB,UAAqB,SAAA,6BAA+D,KAAA,MAAI,gCAAA,EAAA;MAMxF,aAAA,QAAA;MACA,YAAY,KAAA,MAAI,gCAAA;MACjB,aAAY;MACX,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,kBAAiB,2BAAA;MACxB,uBAAiB,OAAA,OAAA,OAAA,MAAc,MAAC;OAAmB,0BAAyB,EAAA,6BAAgC,EAAC,CAAA;WAAoB,GAAG,mBAAkB,EAAA,UAAa,EAAC,CAAA;;;6BAMzH,CAAA,gBAAA,gBAAzC,MAAA,SAAA,CAAS,CAAA,2BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;sCAIsC,KAAA,SAAA,UAAA,GAAtD,YAwBe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAtB5B,YAsB4B,mCAAA;MArBzB,UAAqB,SAAA,gCAAkE,KAAA,MAAI,+BAAA;MAM3F,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MAChB,aAAwB,QAAA,QAAQ,wBAAA,GAAuC,MAAA,+BAAA,CAA+B,CAAC,QAAA,OAAO,KAAA,mBAAA,4BAAgE,MAAA,SAAA,CAAS,CAAA,sCAAA;MAKvL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,kBAAiB,8BAAA;MACxB,uBAAiB,OAAA,OAAA,OAAA,MAAc,MAAC;OAAmB,0BAAA,QAAyB;OAAoB,0BAAyB,EAAA,gCAAmC,EAAC,CAAA;;;6BAM/G,CAAA,gBAAA,gBAA5C,MAAA,SAAA,CAAS,CAAA,8BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;;kCAK+B,KAAA,SAAI,8BAAkC,KAAA,SAAA,UAAA,GADrF,mBA2CW,UAAA,EAAA,KAAA,EAAA,GAAA,CAvCT,YAkBe,MAAA,oBAAA,GAAA,MAAA;4BADe,CAhB5B,YAgB4B,mCAAA;MAfzB,UAAuB,SAAA,4BAAkE,KAAA,MAAI,2BAAA;MAM9F,OAAM;MACL,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MACjB,aAAY;MACX,SAAK,OAAA,QAAA,OAAA,OAAA,WAAE,kBAAiB,0BAAA;MACxB,uBAAiB,OAAA,QAAA,OAAA,OAAgB,MAAM,0BAAyB,EAAA,4BAA+B,EAAC,CAAA;;6BAGrD,CAAA,gBAAA,gBAAzC,MAAA,SAAA,CAAS,CAAA,2BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;QAIhB,YAkBe,MAAA,oBAAA,GAAA,MAAA;4BADe,CAhB5B,YAgB4B,mCAAA;MAfzB,UAAuB,SAAA,4BAAkE,KAAA,MAAI,2BAAA;MAM7F,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MACjB,aAAY;MACZ,MAAK;MACJ,SAAK,OAAA,QAAA,OAAA,OAAA,WAAE,kBAAiB,0BAAA;MACxB,uBAAiB,OAAA,QAAA,OAAA,OAAgB,MAAM,0BAAyB,EAAA,4BAA+B,EAAC,CAAA;;6BAGrD,CAAA,gBAAA,gBAAzC,MAAA,SAAA,CAAS,CAAA,2BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;IAKlB,YAiBe,MAAA,oBAAA,GAAA,MAAA;4BADe,CAf5B,YAe4B,mCAAA;MAdzB,UAAqB,SAAA,6BAA+D,KAAA,MAAI,4BAAA;MAMxF,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MACjB,aAAY;MACX,SAAK,OAAA,QAAA,OAAA,OAAA,WAAE,kBAAiB,2BAAA;MACxB,uBAAiB,OAAA,QAAA,OAAA,OAAc,MAAM,0BAAyB,EAAA,6BAAgC,EAAC,CAAA;;6BAGpD,CAAA,gBAAA,gBAAzC,MAAA,SAAA,CAAS,CAAA,2BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;IAII,iBAAA,SAAA,UAAA,GAApB,YAce,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAZ5B,YAY4B,mCAAA;MAXzB,UAAU,SAAQ,iCAAkC,kBAAA,KAAiB;MACrE,aAAA,QAAA;MACA,YAAY,kBAAA;MACb,aAAY;MACZ,MAAK;MACJ,SAAK,OAAA,QAAA,OAAA,OAAA,WAAE,kBAAiB,+BAAA;MACxB,uBAAiB,OAAA,QAAA,OAAA,OAAc,MAAkB,0BAAyB,EAAA,iCAAoC,EAAC,CAAA;;6BAIhE,CAAA,gBAAA,gBAA7C,MAAA,SAAA,CAAS,CAAA,+BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;mBAImB,KAAA,SAAA,UAAA,GAAnC,YASe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAP5B,YAO4B,mCAAA;MANzB,MAAM,MAAA,WAAA;MACN,aAAA,QAAA;MACA,YAAY,KAAA,MAAI;MACjB,UAAA;MACC,uBAAmB;;6BACuB,CAAA,gBAAA,gBAAxC,MAAA,SAAA,CAAS,CAAA,0BAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;IAKI,QAAA,SAAI,cAAA,UAAA,GAAxB,YAYe,MAAA,oBAAA,GAAA,EAAA,KAAA,EAAA,GAAA;4BADe,CAV5B,YAU4B,mCAAA;MATzB,MAAM,CAAA,UAAA,MAAA;MACN,aAAA,QAAA;MACA,YAAwB,KAAA,MAAI,oCAAA;MAG7B,aAAY;MACZ,UAAA;MACC,uBAAiB,OAAA,QAAA,OAAA,OAAG,MAAM,2BAA2B,CAAC;;6BACA,CAAA,gBAAA,gBAApD,MAAA,SAAA,CAAS,CAAA,sCAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;;IAKhB,YAQe,MAAA,oBAAA,GAAA,MAAA;4BADuC,CANpD,YAMoD,0BAAA;MALjD,MAAA,KAAA;MACA,UAAU,QAAA;MACV,gBAAA,eAAA;MACA,kBAAY,OAAA,QAAA,OAAA,OAAG,MAAM,MAAK,gBAAiB,CAAC;MAC5C,2BAAqB,OAAA,QAAA,OAAA,OAAG,MAAM,MAAK,yBAA0B,CAAC;MAC9D,kBAAY,OAAA,QAAA,OAAA,OAAG,MAAM,MAAK,gBAAiB,CAAC;;;;;;;;KAIxC,QAAA,eAAA,UAAA,GADT,YAwBe,MAAA,oBAAA,GAAA;;KAtBb,OAAM;;4BAqBA,CApBN,mBAoBM,OApBN,YAoBM,CAjBI,QAAA,OAAO,SAAI,mBAAA,UAAA,GADnB,YAQe,MAAA,YAAA,GAAA;;MANb,OAAM;MACL,UAAU,MAAA,MAAA,CAAM,CAAC;MAClB,MAAK;MACL,SAAQ;MACP,SAAO;;6BAC0C,CAAA,gBAAA,gBAA/C,MAAA,SAAA,CAAS,CAAA,iCAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;0DAGd,YAOe,MAAA,YAAA,GAAA;MANb,OAAM;MACL,QAAA,MAAA,MAAA;MACD,MAAK;MACL,SAAQ;MACP,SAAO;;6BACqC,CAAA,gBAAA,gBAA1C,MAAA,SAAA,CAAS,CAAA,4BAAA,CAAA,GAAA,CAAA,CAAA,CAAA"}
@@ -13,11 +13,11 @@ type __VLS_ModelProps = {
13
13
  modelValue: string;
14
14
  };
15
15
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
16
- declare var __VLS_13: {}, __VLS_16: {};
16
+ declare var __VLS_14: {}, __VLS_17: {};
17
17
  type __VLS_Slots = {} & {
18
- default?: (props: typeof __VLS_13) => any;
18
+ default?: (props: typeof __VLS_14) => any;
19
19
  } & {
20
- icon?: (props: typeof __VLS_16) => any;
20
+ icon?: (props: typeof __VLS_17) => any;
21
21
  };
22
22
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
23
23
  "update:modelValue": (value: string) => any;
@@ -1 +1 @@
1
- {"version":3,"file":"RequestAuthDataTableInput.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue"],"names":[],"mappings":"AAgFA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AAGnH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C,KAAK,WAAW,GAAG;IACjB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc,CAAC,EAAE,YAAY,CAAA;IAC7B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAC;AAiCF,KAAK,gBAAgB,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;CAClB,CAAC;AAKF,KAAK,iBAAiB,GAAG,WAAW,GAAG,gBAAgB,CAAC;AA6IxD,QAAA,IAAI,QAAQ,IAAW,EAAE,QAAQ,IAAY,CAAE;AAC/C,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC7C;IAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAK7C,QAAA,MAAM,UAAU;;;;;;;;;;;;;kFAGd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"RequestAuthDataTableInput.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue"],"names":[],"mappings":"AA4FA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AAGnH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C,KAAK,WAAW,GAAG;IACjB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc,CAAC,EAAE,YAAY,CAAA;IAC7B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAC;AA4CF,KAAK,gBAAgB,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;CAClB,CAAC;AAKF,KAAK,iBAAiB,GAAG,WAAW,GAAG,gBAAgB,CAAC;AA2IxD,QAAA,IAAwB,QAAQ,IAAW,EAAE,QAAQ,IAAY,CAAE;AACnE,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC7C;IAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAO7C,QAAA,MAAM,UAAU;;;;;;;;;;;;;kFAGd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"RequestAuthDataTableInput.vue.js","names":[],"sources":["../../../../../src/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIconButton } from '@scalar/components/icon-button'\nimport { ScalarIconArrowCounterClockwise } from '@scalar/icons'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { useId } from 'vue'\n\nimport type { VueClassProp } from '@/types/vue'\nimport { DataTableInput } from '@/v2/components/data-table'\nimport { useLocalization } from '@/v2/features/localization'\n\nconst {\n canReset = false,\n containerClass,\n environment,\n readOnly = false,\n required = false,\n type,\n} = defineProps<{\n /** Restore this credential's current document or configured default. */\n canReset?: boolean\n containerClass?: VueClassProp\n environment: XScalarEnvironment\n readOnly?: boolean\n required?: boolean\n type?: string\n}>()\n\nconst emit = defineEmits<{\n (e: 'reset'): void\n (e: 'inputFocus'): void\n (e: 'inputBlur'): void\n (e: 'selectVariable', value: string): void\n}>()\n\nconst modelValue = defineModel<string>({ default: '', required: true })\nconst id = useId()\nconst { translate } = useLocalization()\n/**\n * The unmasked editor is a contenteditable div, which a <label for> cannot\n * name, so the field points back at the visible label via aria-labelledby.\n * The masked native input is named the same way.\n */\nconst labelId = `${id}-label`\n</script>\n<template>\n <DataTableInput\n :id=\"id\"\n v-bind=\"$attrs\"\n v-model=\"modelValue\"\n :aria-labelledby=\"labelId\"\n :canAddCustomEnumValue=\"!readOnly\"\n :containerClass=\"containerClass\"\n :environment=\"environment\"\n :readOnly=\"readOnly\"\n :required=\"required\"\n :type=\"type\"\n @inputBlur=\"emit('inputBlur')\"\n @inputFocus=\"emit('inputFocus')\"\n @selectVariable=\"emit('selectVariable', $event)\">\n <template #default>\n <label :id=\"labelId\">\n <slot />\n </label>\n </template>\n <template #icon>\n <slot name=\"icon\" />\n <ScalarIconButton\n v-if=\"canReset && !readOnly\"\n class=\"h-6 w-6 self-center p-1.25\"\n :icon=\"ScalarIconArrowCounterClockwise\"\n :label=\"translate('apiClient.dataTableInput.resetValue')\"\n @click=\"emit('reset')\" />\n </template>\n </DataTableInput>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RequestAuthDataTableInput.vue.js","names":[],"sources":["../../../../../src/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIconButton } from '@scalar/components/icon-button'\nimport { ScalarIconArrowCounterClockwise } from '@scalar/icons'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { useId, useTemplateRef } from 'vue'\n\nimport type { VueClassProp } from '@/types/vue'\nimport { DataTableInput } from '@/v2/components/data-table'\nimport { useLocalization } from '@/v2/features/localization'\n\nconst {\n canReset = false,\n containerClass,\n environment,\n readOnly = false,\n required = false,\n type,\n} = defineProps<{\n /** Restore this credential's current document or configured default. */\n canReset?: boolean\n containerClass?: VueClassProp\n environment: XScalarEnvironment\n readOnly?: boolean\n required?: boolean\n type?: string\n}>()\n\nconst emit = defineEmits<{\n (e: 'reset'): void\n (e: 'inputFocus'): void\n (e: 'inputBlur'): void\n (e: 'selectVariable', value: string): void\n}>()\n\nconst modelValue = defineModel<string>({ default: '', required: true })\nconst id = useId()\nconst { translate } = useLocalization()\n/**\n * The unmasked editor is a contenteditable div, which a <label for> cannot\n * name, so the field points back at the visible label via aria-labelledby.\n * The masked native input is named the same way.\n */\nconst labelId = `${id}-label`\n\nconst field = useTemplateRef('field')\n\n/**\n * Reset hides itself once the value matches the default again, so focus moves to the field\n * first instead of falling back to the page.\n */\nconst handleReset = (): void => {\n field.value?.focus()\n emit('reset')\n}\n</script>\n<template>\n <DataTableInput\n :id=\"id\"\n ref=\"field\"\n v-bind=\"$attrs\"\n v-model=\"modelValue\"\n :aria-labelledby=\"labelId\"\n :canAddCustomEnumValue=\"!readOnly\"\n :containerClass=\"containerClass\"\n :environment=\"environment\"\n :readOnly=\"readOnly\"\n :required=\"required\"\n :type=\"type\"\n @inputBlur=\"emit('inputBlur')\"\n @inputFocus=\"emit('inputFocus')\"\n @selectVariable=\"emit('selectVariable', $event)\">\n <template #default>\n <label :id=\"labelId\">\n <slot />\n </label>\n </template>\n <template #icon>\n <slot name=\"icon\" />\n <ScalarIconButton\n v-if=\"canReset && !readOnly\"\n class=\"h-6 w-6 self-center p-1.25\"\n :icon=\"ScalarIconArrowCounterClockwise\"\n :label=\"translate('apiClient.dataTableInput.resetValue')\"\n @click=\"handleReset\" />\n </template>\n </DataTableInput>\n</template>\n"],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  import { useLocalization } from "../../../features/localization/index.js";
2
2
  import DataTableInput_default from "../../../components/data-table/DataTableInput.vue.js";
3
- import { createBlock, createCommentVNode, createElementVNode, defineComponent, mergeModels, mergeProps, openBlock, renderSlot, unref, useId, useModel, withCtx } from "vue";
3
+ import { createBlock, createCommentVNode, createElementVNode, defineComponent, mergeModels, mergeProps, openBlock, renderSlot, unref, useId, useModel, useTemplateRef, withCtx } from "vue";
4
4
  import { ScalarIconArrowCounterClockwise } from "@scalar/icons";
5
5
  import { ScalarIconButton } from "@scalar/components/icon-button";
6
6
  //#region src/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue?vue&type=script&setup=true&lang.ts
@@ -46,10 +46,23 @@ var RequestAuthDataTableInput_vue_vue_type_script_setup_true_lang_default = /*@_
46
46
  * The masked native input is named the same way.
47
47
  */
48
48
  const labelId = `${id}-label`;
49
+ const field = useTemplateRef("field");
50
+ /**
51
+ * Reset hides itself once the value matches the default again, so focus moves to the field
52
+ * first instead of falling back to the page.
53
+ */
54
+ const handleReset = () => {
55
+ field.value?.focus();
56
+ emit("reset");
57
+ };
49
58
  return (_ctx, _cache) => {
50
- return openBlock(), createBlock(unref(DataTableInput_default), mergeProps({ id: unref(id) }, _ctx.$attrs, {
59
+ return openBlock(), createBlock(unref(DataTableInput_default), mergeProps({
60
+ id: unref(id),
61
+ ref_key: "field",
62
+ ref: field
63
+ }, _ctx.$attrs, {
51
64
  modelValue: modelValue.value,
52
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelValue.value = $event),
65
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
53
66
  "aria-labelledby": labelId,
54
67
  canAddCustomEnumValue: !__props.readOnly,
55
68
  containerClass: __props.containerClass,
@@ -57,9 +70,9 @@ var RequestAuthDataTableInput_vue_vue_type_script_setup_true_lang_default = /*@_
57
70
  readOnly: __props.readOnly,
58
71
  required: __props.required,
59
72
  type: __props.type,
60
- onInputBlur: _cache[2] || (_cache[2] = ($event) => emit("inputBlur")),
61
- onInputFocus: _cache[3] || (_cache[3] = ($event) => emit("inputFocus")),
62
- onSelectVariable: _cache[4] || (_cache[4] = ($event) => emit("selectVariable", $event))
73
+ onInputBlur: _cache[1] || (_cache[1] = ($event) => emit("inputBlur")),
74
+ onInputFocus: _cache[2] || (_cache[2] = ($event) => emit("inputFocus")),
75
+ onSelectVariable: _cache[3] || (_cache[3] = ($event) => emit("selectVariable", $event))
63
76
  }), {
64
77
  default: withCtx(() => [createElementVNode("label", { id: labelId }, [renderSlot(_ctx.$slots, "default")])]),
65
78
  icon: withCtx(() => [renderSlot(_ctx.$slots, "icon"), __props.canReset && !__props.readOnly ? (openBlock(), createBlock(unref(ScalarIconButton), {
@@ -67,7 +80,7 @@ var RequestAuthDataTableInput_vue_vue_type_script_setup_true_lang_default = /*@_
67
80
  class: "h-6 w-6 self-center p-1.25",
68
81
  icon: unref(ScalarIconArrowCounterClockwise),
69
82
  label: unref(translate)("apiClient.dataTableInput.resetValue"),
70
- onClick: _cache[0] || (_cache[0] = ($event) => emit("reset"))
83
+ onClick: handleReset
71
84
  }, null, 8, ["icon", "label"])) : createCommentVNode("", true)]),
72
85
  _: 3
73
86
  }, 16, [
@@ -1 +1 @@
1
- {"version":3,"file":"RequestAuthDataTableInput.vue.script.js","names":["$attrs"],"sources":["../../../../../src/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIconButton } from '@scalar/components/icon-button'\nimport { ScalarIconArrowCounterClockwise } from '@scalar/icons'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { useId } from 'vue'\n\nimport type { VueClassProp } from '@/types/vue'\nimport { DataTableInput } from '@/v2/components/data-table'\nimport { useLocalization } from '@/v2/features/localization'\n\nconst {\n canReset = false,\n containerClass,\n environment,\n readOnly = false,\n required = false,\n type,\n} = defineProps<{\n /** Restore this credential's current document or configured default. */\n canReset?: boolean\n containerClass?: VueClassProp\n environment: XScalarEnvironment\n readOnly?: boolean\n required?: boolean\n type?: string\n}>()\n\nconst emit = defineEmits<{\n (e: 'reset'): void\n (e: 'inputFocus'): void\n (e: 'inputBlur'): void\n (e: 'selectVariable', value: string): void\n}>()\n\nconst modelValue = defineModel<string>({ default: '', required: true })\nconst id = useId()\nconst { translate } = useLocalization()\n/**\n * The unmasked editor is a contenteditable div, which a <label for> cannot\n * name, so the field points back at the visible label via aria-labelledby.\n * The masked native input is named the same way.\n */\nconst labelId = `${id}-label`\n</script>\n<template>\n <DataTableInput\n :id=\"id\"\n v-bind=\"$attrs\"\n v-model=\"modelValue\"\n :aria-labelledby=\"labelId\"\n :canAddCustomEnumValue=\"!readOnly\"\n :containerClass=\"containerClass\"\n :environment=\"environment\"\n :readOnly=\"readOnly\"\n :required=\"required\"\n :type=\"type\"\n @inputBlur=\"emit('inputBlur')\"\n @inputFocus=\"emit('inputFocus')\"\n @selectVariable=\"emit('selectVariable', $event)\">\n <template #default>\n <label :id=\"labelId\">\n <slot />\n </label>\n </template>\n <template #icon>\n <slot name=\"icon\" />\n <ScalarIconButton\n v-if=\"canReset && !readOnly\"\n class=\"h-6 w-6 self-center p-1.25\"\n :icon=\"ScalarIconArrowCounterClockwise\"\n :label=\"translate('apiClient.dataTableInput.resetValue')\"\n @click=\"emit('reset')\" />\n </template>\n </DataTableInput>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BA,MAAM,OAAO;EAOb,MAAM,aAAa,SAAmB,SAAA,YAAgC;EACtE,MAAM,KAAK,MAAM;EACjB,MAAM,EAAE,cAAc,gBAAgB;;;;;;EAMtC,MAAM,UAAU,GAAG,GAAG;;uBAGpB,YA4BiB,MAAA,sBAAA,GA5BjB,WA4BiB,EA3Bd,IAAI,MAAA,EAAA,EAAE,GACCA,KAAAA,QAAM;gBACL,WAAA;4EAAU,QAAA;IAClB,mBAAiB;IACjB,uBAAqB,CAAG,QAAA;IACxB,gBAAgB,QAAA;IAChB,aAAa,QAAA;IACb,UAAU,QAAA;IACV,UAAU,QAAA;IACV,MAAM,QAAA;IACN,aAAS,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,WAAA;IACf,cAAU,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,YAAA;IAChB,kBAAc,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,kBAAmB,MAAM;;IACnC,SAAO,cAGR,CAFR,mBAEQ,SAAA,EAFA,IAAI,QAAO,GAAA,CACjB,WAAQ,KAAA,QAAA,SAAA,CAAA,CAAA,CAAA,CAAA;IAGD,MAAI,cACO,CAApB,WAAoB,KAAA,QAAA,MAAA,GAEZ,QAAA,YAAQ,CAAK,QAAA,YAAA,UAAA,GADrB,YAK2B,MAAA,gBAAA,GAAA;;KAHzB,OAAM;KACL,MAAM,MAAA,+BAAA;KACN,OAAO,MAAA,SAAA,CAAS,CAAA,qCAAA;KAChB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,OAAA"}
1
+ {"version":3,"file":"RequestAuthDataTableInput.vue.script.js","names":["$attrs"],"sources":["../../../../../src/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIconButton } from '@scalar/components/icon-button'\nimport { ScalarIconArrowCounterClockwise } from '@scalar/icons'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { useId, useTemplateRef } from 'vue'\n\nimport type { VueClassProp } from '@/types/vue'\nimport { DataTableInput } from '@/v2/components/data-table'\nimport { useLocalization } from '@/v2/features/localization'\n\nconst {\n canReset = false,\n containerClass,\n environment,\n readOnly = false,\n required = false,\n type,\n} = defineProps<{\n /** Restore this credential's current document or configured default. */\n canReset?: boolean\n containerClass?: VueClassProp\n environment: XScalarEnvironment\n readOnly?: boolean\n required?: boolean\n type?: string\n}>()\n\nconst emit = defineEmits<{\n (e: 'reset'): void\n (e: 'inputFocus'): void\n (e: 'inputBlur'): void\n (e: 'selectVariable', value: string): void\n}>()\n\nconst modelValue = defineModel<string>({ default: '', required: true })\nconst id = useId()\nconst { translate } = useLocalization()\n/**\n * The unmasked editor is a contenteditable div, which a <label for> cannot\n * name, so the field points back at the visible label via aria-labelledby.\n * The masked native input is named the same way.\n */\nconst labelId = `${id}-label`\n\nconst field = useTemplateRef('field')\n\n/**\n * Reset hides itself once the value matches the default again, so focus moves to the field\n * first instead of falling back to the page.\n */\nconst handleReset = (): void => {\n field.value?.focus()\n emit('reset')\n}\n</script>\n<template>\n <DataTableInput\n :id=\"id\"\n ref=\"field\"\n v-bind=\"$attrs\"\n v-model=\"modelValue\"\n :aria-labelledby=\"labelId\"\n :canAddCustomEnumValue=\"!readOnly\"\n :containerClass=\"containerClass\"\n :environment=\"environment\"\n :readOnly=\"readOnly\"\n :required=\"required\"\n :type=\"type\"\n @inputBlur=\"emit('inputBlur')\"\n @inputFocus=\"emit('inputFocus')\"\n @selectVariable=\"emit('selectVariable', $event)\">\n <template #default>\n <label :id=\"labelId\">\n <slot />\n </label>\n </template>\n <template #icon>\n <slot name=\"icon\" />\n <ScalarIconButton\n v-if=\"canReset && !readOnly\"\n class=\"h-6 w-6 self-center p-1.25\"\n :icon=\"ScalarIconArrowCounterClockwise\"\n :label=\"translate('apiClient.dataTableInput.resetValue')\"\n @click=\"handleReset\" />\n </template>\n </DataTableInput>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BA,MAAM,OAAO;EAOb,MAAM,aAAa,SAAmB,SAAA,YAAgC;EACtE,MAAM,KAAK,MAAM;EACjB,MAAM,EAAE,cAAc,gBAAgB;;;;;;EAMtC,MAAM,UAAU,GAAG,GAAG;EAEtB,MAAM,QAAQ,eAAe,OAAO;;;;;EAMpC,MAAM,oBAA0B;GAC9B,MAAM,OAAO,MAAM;GACnB,KAAK,OAAO;EACd;;uBAGE,YA6BiB,MAAA,sBAAA,GA7BjB,WA6BiB;IA5Bd,IAAI,MAAA,EAAA;aACD;IAAJ,KAAI;MACIA,KAAAA,QAAM;gBACL,WAAA;4EAAU,QAAA;IAClB,mBAAiB;IACjB,uBAAqB,CAAG,QAAA;IACxB,gBAAgB,QAAA;IAChB,aAAa,QAAA;IACb,UAAU,QAAA;IACV,UAAU,QAAA;IACV,MAAM,QAAA;IACN,aAAS,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,WAAA;IACf,cAAU,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,YAAA;IAChB,kBAAc,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,kBAAmB,MAAM;;IACnC,SAAO,cAGR,CAFR,mBAEQ,SAAA,EAFA,IAAI,QAAO,GAAA,CACjB,WAAQ,KAAA,QAAA,SAAA,CAAA,CAAA,CAAA,CAAA;IAGD,MAAI,cACO,CAApB,WAAoB,KAAA,QAAA,MAAA,GAEZ,QAAA,YAAQ,CAAK,QAAA,YAAA,UAAA,GADrB,YAKyB,MAAA,gBAAA,GAAA;;KAHvB,OAAM;KACL,MAAM,MAAA,+BAAA;KACN,OAAO,MAAA,SAAA,CAAS,CAAA,qCAAA;KAChB,SAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"RequestAuthTab.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue"],"names":[],"mappings":"AAkvBA,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,gCAAgC,CAAA;AAEvC,OAAO,EAEL,KAAK,qBAAqB,EAG3B,MAAM,yCAAyC,CAAA;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AAEnH,OAAO,KAAK,EAEV,yBAAyB,EACzB,YAAY,EACb,MAAM,8DAA8D,CAAA;AAiBrE,OAAe,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAKzD,KAAK,WAAW,GAAG;IACjB,wCAAwC;IACxC,WAAW,EAAE,kBAAkB,CAAA;IAC/B,yFAAyF;IACzF,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,+BAA+B;IAC/B,uBAAuB,EAAE,yBAAyB,CAAA;IAClD,oGAAoG;IACpG,eAAe,EAAE,qBAAqB,CAAA;IACtC,mCAAmC;IACnC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,2CAA2C;IAC3C,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,uDAAuD;IACvD,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,yFAAyF;IACzF,YAAY,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CACtC,CAAC;AAi2CF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"RequestAuthTab.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue"],"names":[],"mappings":"AA2wBA,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,gCAAgC,CAAA;AAGvC,OAAO,EAEL,KAAK,qBAAqB,EAG3B,MAAM,yCAAyC,CAAA;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AAEnH,OAAO,KAAK,EAEV,yBAAyB,EACzB,YAAY,EACb,MAAM,8DAA8D,CAAA;AAiBrE,OAAe,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAKzD,KAAK,WAAW,GAAG;IACjB,wCAAwC;IACxC,WAAW,EAAE,kBAAkB,CAAA;IAC/B,yFAAyF;IACzF,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,+BAA+B;IAC/B,uBAAuB,EAAE,yBAAyB,CAAA;IAClD,oGAAoG;IACpG,eAAe,EAAE,qBAAqB,CAAA;IACtC,mCAAmC;IACnC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,2CAA2C;IAC3C,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,uDAAuD;IACvD,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,yFAAyF;IACzF,YAAY,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CACtC,CAAC;AA+4CF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}