@scalar/api-reference 1.53.0 → 1.54.0

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 (82) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/browser/standalone.js +219 -219
  3. package/dist/browser/webpack-stats.json +1 -1
  4. package/dist/components/ApiReference.vue.d.ts +15 -12
  5. package/dist/components/ApiReference.vue.d.ts.map +1 -1
  6. package/dist/components/ApiReference.vue.js +1 -1
  7. package/dist/components/ApiReference.vue.js.map +1 -1
  8. package/dist/components/ApiReference.vue.script.js +2 -2
  9. package/dist/components/ApiReference.vue.script.js.map +1 -1
  10. package/dist/components/Content/Schema/Schema.vue.d.ts.map +1 -1
  11. package/dist/components/Content/Schema/Schema.vue.js +1 -1
  12. package/dist/components/Content/Schema/Schema.vue.js.map +1 -1
  13. package/dist/components/Content/Schema/Schema.vue.script.js +0 -1
  14. package/dist/components/Content/Schema/Schema.vue.script.js.map +1 -1
  15. package/dist/components/Content/Schema/SchemaObjectProperties.vue.d.ts.map +1 -1
  16. package/dist/components/Content/Schema/SchemaObjectProperties.vue.js.map +1 -1
  17. package/dist/components/Content/Schema/SchemaObjectProperties.vue.script.js +23 -2
  18. package/dist/components/Content/Schema/SchemaObjectProperties.vue.script.js.map +1 -1
  19. package/dist/components/Content/Schema/helpers/optimize-value-for-display.d.ts.map +1 -1
  20. package/dist/components/Content/Schema/helpers/optimize-value-for-display.js +1 -0
  21. package/dist/components/Content/Schema/helpers/optimize-value-for-display.js.map +1 -1
  22. package/dist/components/Content/Schema/helpers/should-display-description.d.ts.map +1 -1
  23. package/dist/components/Content/Schema/helpers/should-display-description.js +1 -0
  24. package/dist/components/Content/Schema/helpers/should-display-description.js.map +1 -1
  25. package/dist/components/Section/SectionHeader.vue.d.ts +1 -0
  26. package/dist/components/Section/SectionHeader.vue.d.ts.map +1 -1
  27. package/dist/components/Section/SectionHeader.vue.js +1 -1
  28. package/dist/components/Section/SectionHeader.vue.js.map +1 -1
  29. package/dist/components/Section/SectionHeader.vue.script.js +9 -2
  30. package/dist/components/Section/SectionHeader.vue.script.js.map +1 -1
  31. package/dist/features/Operation/Operation.vue.d.ts.map +1 -1
  32. package/dist/features/Operation/Operation.vue.js.map +1 -1
  33. package/dist/features/Operation/Operation.vue.script.js +6 -0
  34. package/dist/features/Operation/Operation.vue.script.js.map +1 -1
  35. package/dist/features/Operation/components/OperationParameters.vue.d.ts.map +1 -1
  36. package/dist/features/Operation/components/OperationParameters.vue.js.map +1 -1
  37. package/dist/features/Operation/components/OperationParameters.vue.script.js +5 -2
  38. package/dist/features/Operation/components/OperationParameters.vue.script.js.map +1 -1
  39. package/dist/features/Operation/components/ParameterListItem.vue.d.ts.map +1 -1
  40. package/dist/features/Operation/components/ParameterListItem.vue.js +1 -1
  41. package/dist/features/Operation/components/ParameterListItem.vue.js.map +1 -1
  42. package/dist/features/Operation/components/ParameterListItem.vue.script.js +6 -7
  43. package/dist/features/Operation/components/ParameterListItem.vue.script.js.map +1 -1
  44. package/dist/features/Operation/components/SecurityRequirementBadge.vue.d.ts +9 -0
  45. package/dist/features/Operation/components/SecurityRequirementBadge.vue.d.ts.map +1 -0
  46. package/dist/features/Operation/components/SecurityRequirementBadge.vue.js +7 -0
  47. package/dist/features/Operation/components/SecurityRequirementBadge.vue.js.map +1 -0
  48. package/dist/features/Operation/components/SecurityRequirementBadge.vue.script.js +91 -0
  49. package/dist/features/Operation/components/SecurityRequirementBadge.vue.script.js.map +1 -0
  50. package/dist/features/Operation/components/SecurityRequirementBadgeScheme.vue.d.ts +10 -0
  51. package/dist/features/Operation/components/SecurityRequirementBadgeScheme.vue.d.ts.map +1 -0
  52. package/dist/features/Operation/components/SecurityRequirementBadgeScheme.vue.js +7 -0
  53. package/dist/features/Operation/components/SecurityRequirementBadgeScheme.vue.js.map +1 -0
  54. package/dist/features/Operation/components/SecurityRequirementBadgeScheme.vue.script.js +32 -0
  55. package/dist/features/Operation/components/SecurityRequirementBadgeScheme.vue.script.js.map +1 -0
  56. package/dist/features/Operation/components/helpers/get-parameter-examples.d.ts +13 -0
  57. package/dist/features/Operation/components/helpers/get-parameter-examples.d.ts.map +1 -0
  58. package/dist/features/Operation/components/helpers/get-parameter-examples.js +21 -0
  59. package/dist/features/Operation/components/helpers/get-parameter-examples.js.map +1 -0
  60. package/dist/features/Operation/helpers/flatten-deep-object-query-parameter.d.ts +7 -0
  61. package/dist/features/Operation/helpers/flatten-deep-object-query-parameter.d.ts.map +1 -0
  62. package/dist/features/Operation/helpers/flatten-deep-object-query-parameter.js +44 -0
  63. package/dist/features/Operation/helpers/flatten-deep-object-query-parameter.js.map +1 -0
  64. package/dist/features/Operation/helpers/get-required-security.d.ts +41 -0
  65. package/dist/features/Operation/helpers/get-required-security.d.ts.map +1 -0
  66. package/dist/features/Operation/helpers/get-required-security.js +41 -0
  67. package/dist/features/Operation/helpers/get-required-security.js.map +1 -0
  68. package/dist/features/Operation/layouts/ClassicLayout.vue.d.ts +3 -0
  69. package/dist/features/Operation/layouts/ClassicLayout.vue.d.ts.map +1 -1
  70. package/dist/features/Operation/layouts/ClassicLayout.vue.js +1 -1
  71. package/dist/features/Operation/layouts/ClassicLayout.vue.js.map +1 -1
  72. package/dist/features/Operation/layouts/ClassicLayout.vue.script.js +10 -4
  73. package/dist/features/Operation/layouts/ClassicLayout.vue.script.js.map +1 -1
  74. package/dist/features/Operation/layouts/ModernLayout.vue.d.ts +3 -0
  75. package/dist/features/Operation/layouts/ModernLayout.vue.d.ts.map +1 -1
  76. package/dist/features/Operation/layouts/ModernLayout.vue.js +1 -1
  77. package/dist/features/Operation/layouts/ModernLayout.vue.js.map +1 -1
  78. package/dist/features/Operation/layouts/ModernLayout.vue.script.js +16 -13
  79. package/dist/features/Operation/layouts/ModernLayout.vue.script.js.map +1 -1
  80. package/dist/helpers/storage.d.ts +4 -4
  81. package/dist/style.css +225 -195
  82. package/package.json +15 -15
@@ -0,0 +1,9 @@
1
+ import type { RequiredSecurity } from '../../../features/Operation/helpers/get-required-security.js';
2
+ type __VLS_Props = {
3
+ requiredSecurity: RequiredSecurity;
4
+ hideLabel?: boolean;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ //# sourceMappingURL=SecurityRequirementBadge.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityRequirementBadge.vue.d.ts","sourceRoot":"","sources":["../../../../src/features/Operation/components/SecurityRequirementBadge.vue"],"names":[],"mappings":"AA8HA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AAE1F,KAAK,WAAW,GAAG;IACjB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAC;AA+OF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -0,0 +1,7 @@
1
+ import SecurityRequirementBadge_vue_vue_type_script_setup_true_lang_default from "./SecurityRequirementBadge.vue.script.js";
2
+ //#region src/features/Operation/components/SecurityRequirementBadge.vue
3
+ var SecurityRequirementBadge_default = SecurityRequirementBadge_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { SecurityRequirementBadge_default as default };
6
+
7
+ //# sourceMappingURL=SecurityRequirementBadge.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityRequirementBadge.vue.js","names":[],"sources":["../../../../src/features/Operation/components/SecurityRequirementBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarPopover } from '@scalar/components'\nimport { ScalarIconLockSimple, ScalarIconLockSimpleOpen } from '@scalar/icons'\nimport { computed } from 'vue'\n\nimport SecurityRequirementBadgeScheme from '@/features/Operation/components/SecurityRequirementBadgeScheme.vue'\nimport type { RequiredSecurity } from '@/features/Operation/helpers/get-required-security'\n\nconst { requiredSecurity, hideLabel = false } = defineProps<{\n requiredSecurity: RequiredSecurity\n hideLabel?: boolean\n}>()\n\nconst label = computed(() =>\n requiredSecurity.state === 'required' ? 'Auth Required' : 'Auth Optional',\n)\n\nconst verb = computed(() =>\n requiredSecurity.state === 'required' ? 'Requires' : 'Accepts',\n)\n\n/** Single group, single scheme — shown inline in the header. */\nconst isSingleScheme = computed(\n () =>\n requiredSecurity.requirements.length === 1 &&\n requiredSecurity.requirements[0]?.schemes.length === 1,\n)\n\n/** Single group with multiple schemes — all must be satisfied (AND). */\nconst isAndGroup = computed(\n () =>\n requiredSecurity.requirements.length === 1 &&\n (requiredSecurity.requirements[0]?.schemes.length ?? 0) > 1,\n)\n\n/** Multiple groups — any one group satisfies authentication (OR). */\nconst isOrAlternatives = computed(\n () => requiredSecurity.requirements.length > 1,\n)\n</script>\n\n<template>\n <ScalarPopover\n v-if=\"requiredSecurity.state !== 'none'\"\n placement=\"bottom-end\">\n <button\n class=\"security-requirement-badge inline-flex w-fit items-center justify-center gap-1 text-sm\"\n :class=\"\n requiredSecurity.state === 'optional'\n ? 'text-c-2'\n : 'text-c-1 font-medium'\n \"\n type=\"button\"\n @click.stop>\n <ScalarIconLockSimple\n v-if=\"requiredSecurity.state === 'required'\"\n class=\"size-3\"\n weight=\"bold\" />\n <ScalarIconLockSimpleOpen\n v-else\n class=\"size-3\"\n weight=\"bold\" />\n <span v-if=\"!hideLabel\">{{ label }}</span>\n </button>\n <template #popover>\n <div class=\"flex max-w-xs min-w-48 flex-col gap-1.5 p-2 text-sm\">\n <div class=\"font-medium\">\n {{ verb }}\n <template v-if=\"isSingleScheme\">\n <SecurityRequirementBadgeScheme\n is=\"span\"\n class=\"contents\"\n :scheme=\"requiredSecurity.requirements[0]!.schemes[0]!\" />\n </template>\n <template v-else-if=\"isOrAlternatives\">one of:</template>\n <template v-else-if=\"isAndGroup\">all of:</template>\n <template v-else>authentication</template>\n </div>\n\n <!-- Multiple OR alternatives -->\n <ul\n v-if=\"isOrAlternatives\"\n class=\"contents\">\n <li\n v-for=\"(group, gi) in requiredSecurity.requirements\"\n :key=\"gi\"\n class=\"markdown\">\n <!-- Single scheme in this OR branch -->\n <SecurityRequirementBadgeScheme\n is=\"span\"\n v-if=\"group.schemes.length === 1\"\n class=\"contents\"\n :scheme=\"group.schemes[0]!\" />\n <!-- Multiple AND schemes in this OR branch -->\n <template v-else>\n <ul class=\"contents\">\n <SecurityRequirementBadgeScheme\n v-for=\"(scheme, si) in group.schemes\"\n :key=\"si\"\n :scheme />\n </ul>\n </template>\n </li>\n </ul>\n\n <!-- Single group, multiple AND schemes -->\n <ul\n v-else-if=\"isAndGroup\"\n class=\"contents\">\n <SecurityRequirementBadgeScheme\n v-for=\"(scheme, key) in requiredSecurity.requirements[0]!.schemes\"\n :key\n :scheme />\n </ul>\n </div>\n </template>\n </ScalarPopover>\n</template>\n"],"mappings":""}
@@ -0,0 +1,91 @@
1
+ import SecurityRequirementBadgeScheme_default from "./SecurityRequirementBadgeScheme.vue.js";
2
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, normalizeClass, openBlock, renderList, toDisplayString, unref, withCtx, withModifiers } from "vue";
3
+ import { ScalarPopover } from "@scalar/components";
4
+ import { ScalarIconLockSimple, ScalarIconLockSimpleOpen } from "@scalar/icons";
5
+ //#region src/features/Operation/components/SecurityRequirementBadge.vue?vue&type=script&setup=true&lang.ts
6
+ var _hoisted_1 = { key: 2 };
7
+ var _hoisted_2 = { class: "flex max-w-xs min-w-48 flex-col gap-1.5 p-2 text-sm" };
8
+ var _hoisted_3 = { class: "font-medium" };
9
+ var _hoisted_4 = {
10
+ key: 0,
11
+ class: "contents"
12
+ };
13
+ var _hoisted_5 = {
14
+ key: 1,
15
+ class: "contents"
16
+ };
17
+ var _hoisted_6 = {
18
+ key: 1,
19
+ class: "contents"
20
+ };
21
+ var SecurityRequirementBadge_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
22
+ __name: "SecurityRequirementBadge",
23
+ props: {
24
+ requiredSecurity: {},
25
+ hideLabel: {
26
+ type: Boolean,
27
+ default: false
28
+ }
29
+ },
30
+ setup(__props) {
31
+ const label = computed(() => __props.requiredSecurity.state === "required" ? "Auth Required" : "Auth Optional");
32
+ const verb = computed(() => __props.requiredSecurity.state === "required" ? "Requires" : "Accepts");
33
+ /** Single group, single scheme — shown inline in the header. */
34
+ const isSingleScheme = computed(() => __props.requiredSecurity.requirements.length === 1 && __props.requiredSecurity.requirements[0]?.schemes.length === 1);
35
+ /** Single group with multiple schemes — all must be satisfied (AND). */
36
+ const isAndGroup = computed(() => __props.requiredSecurity.requirements.length === 1 && (__props.requiredSecurity.requirements[0]?.schemes.length ?? 0) > 1);
37
+ /** Multiple groups — any one group satisfies authentication (OR). */
38
+ const isOrAlternatives = computed(() => __props.requiredSecurity.requirements.length > 1);
39
+ return (_ctx, _cache) => {
40
+ return __props.requiredSecurity.state !== "none" ? (openBlock(), createBlock(unref(ScalarPopover), {
41
+ key: 0,
42
+ placement: "bottom-end"
43
+ }, {
44
+ popover: withCtx(() => [createElementVNode("div", _hoisted_2, [createElementVNode("div", _hoisted_3, [createTextVNode(toDisplayString(verb.value) + " ", 1), isSingleScheme.value ? (openBlock(), createBlock(SecurityRequirementBadgeScheme_default, {
45
+ key: 0,
46
+ is: "span",
47
+ class: "contents",
48
+ scheme: __props.requiredSecurity.requirements[0].schemes[0]
49
+ }, null, 8, ["scheme"])) : isOrAlternatives.value ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode("one of:")], 64)) : isAndGroup.value ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [createTextVNode("all of:")], 64)) : (openBlock(), createElementBlock(Fragment, { key: 3 }, [createTextVNode("authentication")], 64))]), isOrAlternatives.value ? (openBlock(), createElementBlock("ul", _hoisted_4, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.requiredSecurity.requirements, (group, gi) => {
50
+ return openBlock(), createElementBlock("li", {
51
+ key: gi,
52
+ class: "markdown"
53
+ }, [group.schemes.length === 1 ? (openBlock(), createBlock(SecurityRequirementBadgeScheme_default, {
54
+ key: 0,
55
+ is: "span",
56
+ class: "contents",
57
+ scheme: group.schemes[0]
58
+ }, null, 8, ["scheme"])) : (openBlock(), createElementBlock("ul", _hoisted_5, [(openBlock(true), createElementBlock(Fragment, null, renderList(group.schemes, (scheme, si) => {
59
+ return openBlock(), createBlock(SecurityRequirementBadgeScheme_default, {
60
+ key: si,
61
+ scheme
62
+ }, null, 8, ["scheme"]);
63
+ }), 128))]))]);
64
+ }), 128))])) : isAndGroup.value ? (openBlock(), createElementBlock("ul", _hoisted_6, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.requiredSecurity.requirements[0].schemes, (scheme, key) => {
65
+ return openBlock(), createBlock(SecurityRequirementBadgeScheme_default, {
66
+ key,
67
+ scheme
68
+ }, null, 8, ["scheme"]);
69
+ }), 128))])) : createCommentVNode("", true)])]),
70
+ default: withCtx(() => [createElementVNode("button", {
71
+ class: normalizeClass(["security-requirement-badge inline-flex w-fit items-center justify-center gap-1 text-sm", __props.requiredSecurity.state === "optional" ? "text-c-2" : "text-c-1 font-medium"]),
72
+ type: "button",
73
+ onClick: _cache[0] || (_cache[0] = withModifiers(() => {}, ["stop"]))
74
+ }, [__props.requiredSecurity.state === "required" ? (openBlock(), createBlock(unref(ScalarIconLockSimple), {
75
+ key: 0,
76
+ class: "size-3",
77
+ weight: "bold"
78
+ })) : (openBlock(), createBlock(unref(ScalarIconLockSimpleOpen), {
79
+ key: 1,
80
+ class: "size-3",
81
+ weight: "bold"
82
+ })), !__props.hideLabel ? (openBlock(), createElementBlock("span", _hoisted_1, toDisplayString(label.value), 1)) : createCommentVNode("", true)], 2)]),
83
+ _: 1
84
+ })) : createCommentVNode("", true);
85
+ };
86
+ }
87
+ });
88
+ //#endregion
89
+ export { SecurityRequirementBadge_vue_vue_type_script_setup_true_lang_default as default };
90
+
91
+ //# sourceMappingURL=SecurityRequirementBadge.vue.script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityRequirementBadge.vue.script.js","names":[],"sources":["../../../../src/features/Operation/components/SecurityRequirementBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarPopover } from '@scalar/components'\nimport { ScalarIconLockSimple, ScalarIconLockSimpleOpen } from '@scalar/icons'\nimport { computed } from 'vue'\n\nimport SecurityRequirementBadgeScheme from '@/features/Operation/components/SecurityRequirementBadgeScheme.vue'\nimport type { RequiredSecurity } from '@/features/Operation/helpers/get-required-security'\n\nconst { requiredSecurity, hideLabel = false } = defineProps<{\n requiredSecurity: RequiredSecurity\n hideLabel?: boolean\n}>()\n\nconst label = computed(() =>\n requiredSecurity.state === 'required' ? 'Auth Required' : 'Auth Optional',\n)\n\nconst verb = computed(() =>\n requiredSecurity.state === 'required' ? 'Requires' : 'Accepts',\n)\n\n/** Single group, single scheme — shown inline in the header. */\nconst isSingleScheme = computed(\n () =>\n requiredSecurity.requirements.length === 1 &&\n requiredSecurity.requirements[0]?.schemes.length === 1,\n)\n\n/** Single group with multiple schemes — all must be satisfied (AND). */\nconst isAndGroup = computed(\n () =>\n requiredSecurity.requirements.length === 1 &&\n (requiredSecurity.requirements[0]?.schemes.length ?? 0) > 1,\n)\n\n/** Multiple groups — any one group satisfies authentication (OR). */\nconst isOrAlternatives = computed(\n () => requiredSecurity.requirements.length > 1,\n)\n</script>\n\n<template>\n <ScalarPopover\n v-if=\"requiredSecurity.state !== 'none'\"\n placement=\"bottom-end\">\n <button\n class=\"security-requirement-badge inline-flex w-fit items-center justify-center gap-1 text-sm\"\n :class=\"\n requiredSecurity.state === 'optional'\n ? 'text-c-2'\n : 'text-c-1 font-medium'\n \"\n type=\"button\"\n @click.stop>\n <ScalarIconLockSimple\n v-if=\"requiredSecurity.state === 'required'\"\n class=\"size-3\"\n weight=\"bold\" />\n <ScalarIconLockSimpleOpen\n v-else\n class=\"size-3\"\n weight=\"bold\" />\n <span v-if=\"!hideLabel\">{{ label }}</span>\n </button>\n <template #popover>\n <div class=\"flex max-w-xs min-w-48 flex-col gap-1.5 p-2 text-sm\">\n <div class=\"font-medium\">\n {{ verb }}\n <template v-if=\"isSingleScheme\">\n <SecurityRequirementBadgeScheme\n is=\"span\"\n class=\"contents\"\n :scheme=\"requiredSecurity.requirements[0]!.schemes[0]!\" />\n </template>\n <template v-else-if=\"isOrAlternatives\">one of:</template>\n <template v-else-if=\"isAndGroup\">all of:</template>\n <template v-else>authentication</template>\n </div>\n\n <!-- Multiple OR alternatives -->\n <ul\n v-if=\"isOrAlternatives\"\n class=\"contents\">\n <li\n v-for=\"(group, gi) in requiredSecurity.requirements\"\n :key=\"gi\"\n class=\"markdown\">\n <!-- Single scheme in this OR branch -->\n <SecurityRequirementBadgeScheme\n is=\"span\"\n v-if=\"group.schemes.length === 1\"\n class=\"contents\"\n :scheme=\"group.schemes[0]!\" />\n <!-- Multiple AND schemes in this OR branch -->\n <template v-else>\n <ul class=\"contents\">\n <SecurityRequirementBadgeScheme\n v-for=\"(scheme, si) in group.schemes\"\n :key=\"si\"\n :scheme />\n </ul>\n </template>\n </li>\n </ul>\n\n <!-- Single group, multiple AND schemes -->\n <ul\n v-else-if=\"isAndGroup\"\n class=\"contents\">\n <SecurityRequirementBadgeScheme\n v-for=\"(scheme, key) in requiredSecurity.requirements[0]!.schemes\"\n :key\n :scheme />\n </ul>\n </div>\n </template>\n </ScalarPopover>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaA,MAAM,QAAQ,eACZ,QAAA,iBAAiB,UAAU,aAAa,kBAAkB,gBAC5D;EAEA,MAAM,OAAO,eACX,QAAA,iBAAiB,UAAU,aAAa,aAAa,UACvD;;EAGA,MAAM,iBAAiB,eAEnB,QAAA,iBAAiB,aAAa,WAAW,KACzC,QAAA,iBAAiB,aAAa,IAAI,QAAQ,WAAW,EACzD;;EAGA,MAAM,aAAa,eAEf,QAAA,iBAAiB,aAAa,WAAW,MACxC,QAAA,iBAAiB,aAAa,IAAI,QAAQ,UAAU,KAAK,EAC9D;;EAGA,MAAM,mBAAmB,eACjB,QAAA,iBAAiB,aAAa,SAAS,EAC/C;;UAKU,QAAA,iBAAiB,UAAK,UAAA,WAAA,EAD9B,YA0EgB,MAAA,cAAA,EAAA;;IAxEd,WAAU;;IAoBC,SAAO,cAkDV,CAjDN,mBAiDM,OAjDN,YAiDM,CAhDJ,mBAWM,OAXN,YAWM,CAAA,gBAAA,gBAVD,KAAA,MAAI,GAAG,KACV,EAAA,EAAgB,eAAA,SAAA,WAAA,EACd,YAG4D,wCAAA;;KAF1D,IAAG;KACH,OAAM;KACL,QAAQ,QAAA,iBAAiB,aAAY,GAAK,QAAO;+BAEjC,iBAAA,SAAA,WAAA,EAArB,mBAAyD,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAlB,UAAO,CAAA,EAAA,GAAA,IACzB,WAAA,SAAA,WAAA,EAArB,mBAAmD,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAlB,UAAO,CAAA,EAAA,GAAA,KAAA,WAAA,EACxC,mBAA0C,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAzB,iBAAc,CAAA,EAAA,GAAA,EAAA,CAAA,EAKzB,iBAAA,SAAA,WAAA,EADR,mBAuBK,MAvBL,YAuBK,EAAA,UAAA,KAAA,EApBH,mBAmBK,UAAA,MAAA,WAlBmB,QAAA,iBAAiB,eAA/B,OAAO,OAAE;yBADnB,mBAmBK,MAAA;MAjBF,KAAK;MACN,OAAM;SAIE,MAAM,QAAQ,WAAM,KAAA,WAAA,EAF5B,YAIgC,wCAAA;;MAH9B,IAAG;MAEH,OAAM;MACL,QAAQ,MAAM,QAAO;8CAGtB,mBAKK,MALL,YAKK,EAAA,UAAA,KAAA,EAJH,mBAGY,UAAA,MAAA,WAFa,MAAM,UAArB,QAAQ,OAAE;0BADpB,YAGY,wCAAA;OADT,KAAK;OACL;;;mBAQE,WAAA,SAAA,WAAA,EADb,mBAOK,MAPL,YAOK,EAAA,UAAA,KAAA,EAJH,mBAGY,UAAA,MAAA,WAFc,QAAA,iBAAiB,aAAY,GAAK,UAAlD,QAAQ,QAAG;yBADrB,YAGY,wCAAA;MADT;MACA;;;2BAjDA,CAlBT,mBAkBS,UAAA;KAjBP,OAAK,eAAA,CAAC,0FACW,QAAA,iBAAiB,UAAK,aAAA,aAAA,uBAAA,CAAA;KAKvC,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;QAEH,QAAA,iBAAiB,UAAK,cAAA,WAAA,EAD9B,YAGkB,MAAA,qBAAA,EAAA;;KADhB,OAAM;KACN,QAAO;wBACT,YAGkB,MAAA,yBAAA,EAAA;;KADhB,OAAM;KACN,QAAO;UACI,QAAA,aAAA,WAAA,EAAb,mBAA0C,QAAA,YAAA,gBAAf,MAAA,MAAK,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,EAAA,EAAA,CAAA,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { Component } from 'vue';
2
+ import type { RequiredSecurityScheme } from '../../../features/Operation/helpers/get-required-security.js';
3
+ type __VLS_Props = {
4
+ is?: Component | string;
5
+ scheme: RequiredSecurityScheme;
6
+ };
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
10
+ //# sourceMappingURL=SecurityRequirementBadgeScheme.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityRequirementBadgeScheme.vue.d.ts","sourceRoot":"","sources":["../../../../src/features/Operation/components/SecurityRequirementBadgeScheme.vue"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAEpC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAA;AAEhG,KAAK,WAAW,GAAG;IACjB,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IACvB,MAAM,EAAE,sBAAsB,CAAA;CAC/B,CAAC;AAkDF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -0,0 +1,7 @@
1
+ import SecurityRequirementBadgeScheme_vue_vue_type_script_setup_true_lang_default from "./SecurityRequirementBadgeScheme.vue.script.js";
2
+ //#region src/features/Operation/components/SecurityRequirementBadgeScheme.vue
3
+ var SecurityRequirementBadgeScheme_default = SecurityRequirementBadgeScheme_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { SecurityRequirementBadgeScheme_default as default };
6
+
7
+ //# sourceMappingURL=SecurityRequirementBadgeScheme.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityRequirementBadgeScheme.vue.js","names":[],"sources":["../../../../src/features/Operation/components/SecurityRequirementBadgeScheme.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Component } from 'vue'\n\nimport type { RequiredSecurityScheme } from '@/features/Operation/helpers/get-required-security'\n\nconst { is = 'li', scheme } = defineProps<{\n is?: Component | string\n scheme: RequiredSecurityScheme\n}>()\n</script>\n<template>\n <component\n :is\n class=\"markdown\">\n {{ scheme.name }}\n <code v-if=\"scheme.scheme?.type\">{{ scheme.scheme.type }}</code>\n <ul v-if=\"scheme.scopes.length\">\n <li\n v-for=\"scope in scheme.scopes\"\n :key=\"scope\"\n class=\"font-code text-c-2\">\n {{ scope }}\n </li>\n </ul>\n </component>\n</template>\n"],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { Fragment, createBlock, createCommentVNode, createElementBlock, createTextVNode, defineComponent, openBlock, renderList, resolveDynamicComponent, toDisplayString, withCtx } from "vue";
2
+ //#region src/features/Operation/components/SecurityRequirementBadgeScheme.vue?vue&type=script&setup=true&lang.ts
3
+ var _hoisted_1 = { key: 0 };
4
+ var _hoisted_2 = { key: 1 };
5
+ var SecurityRequirementBadgeScheme_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ __name: "SecurityRequirementBadgeScheme",
7
+ props: {
8
+ is: { default: "li" },
9
+ scheme: {}
10
+ },
11
+ setup(__props) {
12
+ return (_ctx, _cache) => {
13
+ return openBlock(), createBlock(resolveDynamicComponent(__props.is), { class: "markdown" }, {
14
+ default: withCtx(() => [
15
+ createTextVNode(toDisplayString(__props.scheme.name) + " ", 1),
16
+ __props.scheme.scheme?.type ? (openBlock(), createElementBlock("code", _hoisted_1, toDisplayString(__props.scheme.scheme.type), 1)) : createCommentVNode("", true),
17
+ __props.scheme.scopes.length ? (openBlock(), createElementBlock("ul", _hoisted_2, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.scheme.scopes, (scope) => {
18
+ return openBlock(), createElementBlock("li", {
19
+ key: scope,
20
+ class: "font-code text-c-2"
21
+ }, toDisplayString(scope), 1);
22
+ }), 128))])) : createCommentVNode("", true)
23
+ ]),
24
+ _: 1
25
+ });
26
+ };
27
+ }
28
+ });
29
+ //#endregion
30
+ export { SecurityRequirementBadgeScheme_vue_vue_type_script_setup_true_lang_default as default };
31
+
32
+ //# sourceMappingURL=SecurityRequirementBadgeScheme.vue.script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityRequirementBadgeScheme.vue.script.js","names":[],"sources":["../../../../src/features/Operation/components/SecurityRequirementBadgeScheme.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Component } from 'vue'\n\nimport type { RequiredSecurityScheme } from '@/features/Operation/helpers/get-required-security'\n\nconst { is = 'li', scheme } = defineProps<{\n is?: Component | string\n scheme: RequiredSecurityScheme\n}>()\n</script>\n<template>\n <component\n :is\n class=\"markdown\">\n {{ scheme.name }}\n <code v-if=\"scheme.scheme?.type\">{{ scheme.scheme.type }}</code>\n <ul v-if=\"scheme.scopes.length\">\n <li\n v-for=\"scope in scheme.scopes\"\n :key=\"scope\"\n class=\"font-code text-c-2\">\n {{ scope }}\n </li>\n </ul>\n </component>\n</template>\n"],"mappings":";;;;;;;;;;;;uBAWE,YAaY,wBAZT,QAAA,GAAE,EAAA,EACH,OAAM,YAAU,EAAA;2BACC;qCAAd,QAAA,OAAO,KAAI,GAAG,KACjB,EAAA;KAAY,QAAA,OAAO,QAAQ,QAAA,WAAA,EAA3B,mBAAgE,QAAA,YAAA,gBAA5B,QAAA,OAAO,OAAO,KAAI,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;KAC5C,QAAA,OAAO,OAAO,UAAA,WAAA,EAAxB,mBAOK,MAAA,YAAA,EAAA,UAAA,KAAA,EANH,mBAKK,UAAA,MAAA,WAJa,QAAA,OAAO,SAAhB,UAAK;0BADd,mBAKK,MAAA;OAHF,KAAK;OACN,OAAM;yBACH,MAAK,EAAA,EAAA"}
@@ -0,0 +1,13 @@
1
+ import type { ParameterObject, ResponseObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
2
+ type GetParameterExamplesArgs = {
3
+ parameter: ParameterObject | ResponseObject;
4
+ schemaExamples?: unknown[];
5
+ contentExamples?: unknown;
6
+ };
7
+ /**
8
+ * Build a normalized examples array from parameter/content/schema examples.
9
+ * Undefined values are removed so the UI does not render "undefined" entries.
10
+ */
11
+ export declare const getParameterExamples: ({ parameter, schemaExamples, contentExamples, }: GetParameterExamplesArgs) => unknown[];
12
+ export {};
13
+ //# sourceMappingURL=get-parameter-examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-parameter-examples.d.ts","sourceRoot":"","sources":["../../../../../src/features/Operation/components/helpers/get-parameter-examples.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAA;AAKnH,KAAK,wBAAwB,GAAG;IAC9B,SAAS,EAAE,eAAe,GAAG,cAAc,CAAA;IAC3C,cAAc,CAAC,EAAE,OAAO,EAAE,CAAA;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,iDAIlC,wBAAwB,KAAG,OAAO,EAcpC,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { isObjectLike } from "@scalar/helpers/object/is-object";
2
+ //#region src/features/Operation/components/helpers/get-parameter-examples.ts
3
+ var filterUndefined = (example) => example !== void 0;
4
+ /**
5
+ * Build a normalized examples array from parameter/content/schema examples.
6
+ * Undefined values are removed so the UI does not render "undefined" entries.
7
+ */
8
+ var getParameterExamples = ({ parameter, schemaExamples, contentExamples }) => {
9
+ const paramExamples = "examples" in parameter && isObjectLike(parameter.examples) ? parameter.examples : {};
10
+ const recordExamples = Object.values({
11
+ ...paramExamples,
12
+ ...isObjectLike(contentExamples) ? contentExamples : {}
13
+ }).filter(filterUndefined);
14
+ const fallbackExample = recordExamples.length === 0 && "example" in parameter && parameter.example !== void 0 ? [parameter.example] : [];
15
+ const arrayExamples = (schemaExamples ?? fallbackExample).filter(filterUndefined);
16
+ return [...recordExamples, ...arrayExamples];
17
+ };
18
+ //#endregion
19
+ export { getParameterExamples };
20
+
21
+ //# sourceMappingURL=get-parameter-examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-parameter-examples.js","names":[],"sources":["../../../../../src/features/Operation/components/helpers/get-parameter-examples.ts"],"sourcesContent":["import type { ParameterObject, ResponseObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isObjectLike } from '@scalar/helpers/object/is-object'\n\nconst filterUndefined = (example: unknown): example is unknown => example !== undefined\n\ntype GetParameterExamplesArgs = {\n parameter: ParameterObject | ResponseObject\n schemaExamples?: unknown[]\n contentExamples?: unknown\n}\n\n/**\n * Build a normalized examples array from parameter/content/schema examples.\n * Undefined values are removed so the UI does not render \"undefined\" entries.\n */\nexport const getParameterExamples = ({\n parameter,\n schemaExamples,\n contentExamples,\n}: GetParameterExamplesArgs): unknown[] => {\n const paramExamples = 'examples' in parameter && isObjectLike(parameter.examples) ? parameter.examples : {}\n\n const recordExamples = Object.values({\n ...paramExamples,\n ...(isObjectLike(contentExamples) ? contentExamples : {}),\n }).filter(filterUndefined)\n\n const fallbackExample =\n recordExamples.length === 0 && 'example' in parameter && parameter.example !== undefined ? [parameter.example] : []\n\n const arrayExamples = (schemaExamples ?? fallbackExample).filter(filterUndefined)\n\n return [...recordExamples, ...arrayExamples]\n}\n"],"mappings":";;AAGA,IAAM,mBAAmB,YAAyC,YAAY,KAAA;;;;;AAY9E,IAAa,wBAAwB,EACnC,WACA,gBACA,sBACyC;CACzC,MAAM,gBAAgB,cAAc,aAAa,aAAa,UAAU,SAAS,GAAG,UAAU,WAAW,EAAE;CAE3G,MAAM,iBAAiB,OAAO,OAAO;EACnC,GAAG;EACH,GAAI,aAAa,gBAAgB,GAAG,kBAAkB,EAAE;EACzD,CAAC,CAAC,OAAO,gBAAgB;CAE1B,MAAM,kBACJ,eAAe,WAAW,KAAK,aAAa,aAAa,UAAU,YAAY,KAAA,IAAY,CAAC,UAAU,QAAQ,GAAG,EAAE;CAErH,MAAM,iBAAiB,kBAAkB,iBAAiB,OAAO,gBAAgB;AAEjF,QAAO,CAAC,GAAG,gBAAgB,GAAG,cAAc"}
@@ -0,0 +1,7 @@
1
+ import type { ParameterObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
2
+ /**
3
+ * Deep object query parameters serialize as name[prop] pairs in URLs.
4
+ * Rendering the same shape keeps docs aligned with the request UI.
5
+ */
6
+ export declare const flattenDeepObjectQueryParameter: (parameter: ParameterObject) => ParameterObject[];
7
+ //# sourceMappingURL=flatten-deep-object-query-parameter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatten-deep-object-query-parameter.d.ts","sourceRoot":"","sources":["../../../../src/features/Operation/helpers/flatten-deep-object-query-parameter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,8DAA8D,CAAA;AAqErE;;;GAGG;AACH,eAAO,MAAM,+BAA+B,GAAI,WAAW,eAAe,KAAG,eAAe,EAW3F,CAAA"}
@@ -0,0 +1,44 @@
1
+ import { getResolvedRef } from "@scalar/workspace-store/helpers/get-resolved-ref";
2
+ import { isObjectSchema } from "@scalar/workspace-store/schemas/v3.1/strict/type-guards";
3
+ //#region src/features/Operation/helpers/flatten-deep-object-query-parameter.ts
4
+ var isParameterWithSchema = (parameter) => "schema" in parameter && parameter.schema !== void 0;
5
+ var resolveSchema = (schema) => {
6
+ return getResolvedRef(schema);
7
+ };
8
+ var toFlattenedDeepObjectParameter = (parameter, name, description, required, schema) => {
9
+ const { example: _example, examples: _examples, ...parameterWithoutExamples } = parameter;
10
+ return {
11
+ ...parameterWithoutExamples,
12
+ name,
13
+ description,
14
+ required,
15
+ schema
16
+ };
17
+ };
18
+ var flattenDeepObjectProperties = (parameter, schema, namePrefix) => {
19
+ if (!schema.properties) return [parameter];
20
+ const requiredProperties = new Set(schema.required ?? []);
21
+ const flattenedParameters = Object.entries(schema.properties).flatMap(([propertyName, propertySchema]) => {
22
+ const resolvedPropertySchema = resolveSchema(propertySchema);
23
+ if (!resolvedPropertySchema) return [];
24
+ const nestedName = `${namePrefix}[${propertyName}]`;
25
+ const nestedParameter = toFlattenedDeepObjectParameter(parameter, nestedName, resolvedPropertySchema.description ?? parameter.description, requiredProperties.has(propertyName), resolvedPropertySchema);
26
+ if (isObjectSchema(resolvedPropertySchema) && resolvedPropertySchema.properties) return flattenDeepObjectProperties(nestedParameter, resolvedPropertySchema, nestedName);
27
+ return [nestedParameter];
28
+ });
29
+ return flattenedParameters.length > 0 ? flattenedParameters : [parameter];
30
+ };
31
+ /**
32
+ * Deep object query parameters serialize as name[prop] pairs in URLs.
33
+ * Rendering the same shape keeps docs aligned with the request UI.
34
+ */
35
+ var flattenDeepObjectQueryParameter = (parameter) => {
36
+ if (parameter.in !== "query" || !isParameterWithSchema(parameter) || parameter.style !== "deepObject") return [parameter];
37
+ const resolvedSchema = resolveSchema(parameter.schema);
38
+ if (!resolvedSchema || !isObjectSchema(resolvedSchema)) return [parameter];
39
+ return flattenDeepObjectProperties(parameter, resolvedSchema, parameter.name);
40
+ };
41
+ //#endregion
42
+ export { flattenDeepObjectQueryParameter };
43
+
44
+ //# sourceMappingURL=flatten-deep-object-query-parameter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatten-deep-object-query-parameter.js","names":[],"sources":["../../../../src/features/Operation/helpers/flatten-deep-object-query-parameter.ts"],"sourcesContent":["import { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n ParameterObject,\n ParameterWithSchemaObject,\n ReferenceType,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isObjectSchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\n\ntype ParameterWithRequiredSchema = ParameterWithSchemaObject & {\n schema: ReferenceType<SchemaObject>\n}\n\nconst isParameterWithSchema = (parameter: ParameterObject): parameter is ParameterWithRequiredSchema =>\n 'schema' in parameter && parameter.schema !== undefined\n\nconst resolveSchema = (schema: unknown): SchemaObject | undefined => {\n const resolvedSchema = getResolvedRef(schema as SchemaObject | { '$ref': string; '$ref-value': SchemaObject })\n\n return resolvedSchema as SchemaObject | undefined\n}\n\nconst toFlattenedDeepObjectParameter = (\n parameter: ParameterWithRequiredSchema,\n name: string,\n description: string | undefined,\n required: boolean,\n schema: SchemaObject,\n): ParameterWithRequiredSchema => {\n const { example: _example, examples: _examples, ...parameterWithoutExamples } = parameter\n\n return {\n ...parameterWithoutExamples,\n name,\n description,\n required,\n schema,\n }\n}\n\nconst flattenDeepObjectProperties = (\n parameter: ParameterWithRequiredSchema,\n schema: Extract<SchemaObject, { type: 'object' }>,\n namePrefix: string,\n): ParameterObject[] => {\n if (!schema.properties) {\n return [parameter]\n }\n\n const requiredProperties = new Set(schema.required ?? [])\n const flattenedParameters = Object.entries(schema.properties).flatMap(([propertyName, propertySchema]) => {\n const resolvedPropertySchema = resolveSchema(propertySchema)\n if (!resolvedPropertySchema) {\n return []\n }\n\n const nestedName = `${namePrefix}[${propertyName}]`\n const nestedParameter = toFlattenedDeepObjectParameter(\n parameter,\n nestedName,\n resolvedPropertySchema.description ?? parameter.description,\n requiredProperties.has(propertyName),\n resolvedPropertySchema,\n )\n\n if (isObjectSchema(resolvedPropertySchema) && resolvedPropertySchema.properties) {\n return flattenDeepObjectProperties(nestedParameter, resolvedPropertySchema, nestedName)\n }\n\n return [nestedParameter]\n })\n\n return flattenedParameters.length > 0 ? flattenedParameters : [parameter]\n}\n\n/**\n * Deep object query parameters serialize as name[prop] pairs in URLs.\n * Rendering the same shape keeps docs aligned with the request UI.\n */\nexport const flattenDeepObjectQueryParameter = (parameter: ParameterObject): ParameterObject[] => {\n if (parameter.in !== 'query' || !isParameterWithSchema(parameter) || parameter.style !== 'deepObject') {\n return [parameter]\n }\n\n const resolvedSchema = resolveSchema(parameter.schema)\n if (!resolvedSchema || !isObjectSchema(resolvedSchema)) {\n return [parameter]\n }\n\n return flattenDeepObjectProperties(parameter, resolvedSchema, parameter.name)\n}\n"],"mappings":";;;AAaA,IAAM,yBAAyB,cAC7B,YAAY,aAAa,UAAU,WAAW,KAAA;AAEhD,IAAM,iBAAiB,WAA8C;AAGnE,QAFuB,eAAe,OAAwE;;AAKhH,IAAM,kCACJ,WACA,MACA,aACA,UACA,WACgC;CAChC,MAAM,EAAE,SAAS,UAAU,UAAU,WAAW,GAAG,6BAA6B;AAEhF,QAAO;EACL,GAAG;EACH;EACA;EACA;EACA;EACD;;AAGH,IAAM,+BACJ,WACA,QACA,eACsB;AACtB,KAAI,CAAC,OAAO,WACV,QAAO,CAAC,UAAU;CAGpB,MAAM,qBAAqB,IAAI,IAAI,OAAO,YAAY,EAAE,CAAC;CACzD,MAAM,sBAAsB,OAAO,QAAQ,OAAO,WAAW,CAAC,SAAS,CAAC,cAAc,oBAAoB;EACxG,MAAM,yBAAyB,cAAc,eAAe;AAC5D,MAAI,CAAC,uBACH,QAAO,EAAE;EAGX,MAAM,aAAa,GAAG,WAAW,GAAG,aAAa;EACjD,MAAM,kBAAkB,+BACtB,WACA,YACA,uBAAuB,eAAe,UAAU,aAChD,mBAAmB,IAAI,aAAa,EACpC,uBACD;AAED,MAAI,eAAe,uBAAuB,IAAI,uBAAuB,WACnE,QAAO,4BAA4B,iBAAiB,wBAAwB,WAAW;AAGzF,SAAO,CAAC,gBAAgB;GACxB;AAEF,QAAO,oBAAoB,SAAS,IAAI,sBAAsB,CAAC,UAAU;;;;;;AAO3E,IAAa,mCAAmC,cAAkD;AAChG,KAAI,UAAU,OAAO,WAAW,CAAC,sBAAsB,UAAU,IAAI,UAAU,UAAU,aACvF,QAAO,CAAC,UAAU;CAGpB,MAAM,iBAAiB,cAAc,UAAU,OAAO;AACtD,KAAI,CAAC,kBAAkB,CAAC,eAAe,eAAe,CACpD,QAAO,CAAC,UAAU;AAGpB,QAAO,4BAA4B,WAAW,gBAAgB,UAAU,KAAK"}
@@ -0,0 +1,41 @@
1
+ import type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
2
+ import type { OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/operation';
3
+ import type { SecuritySchemeObject } from '@scalar/workspace-store/schemas/v3.1/strict/security-scheme';
4
+ export type RequiredSecurityState = 'required' | 'optional' | 'none';
5
+ export type RequiredSecurityScheme = {
6
+ /** Scheme key as declared in `components.securitySchemes`. */
7
+ name: string;
8
+ /** Resolved scheme object. `undefined` if the referenced scheme isn't defined on the document. */
9
+ scheme: SecuritySchemeObject | undefined;
10
+ /** Scopes required by the operation for this scheme (OAuth2 / OpenID Connect). Empty otherwise. */
11
+ scopes: string[];
12
+ };
13
+ /**
14
+ * One alternative in the security requirement list.
15
+ * All schemes within a group must be satisfied simultaneously (AND semantics).
16
+ */
17
+ export type RequiredSecurityGroup = {
18
+ schemes: RequiredSecurityScheme[];
19
+ };
20
+ export type RequiredSecurity = {
21
+ state: RequiredSecurityState;
22
+ /**
23
+ * Each element is one alternative (OR semantics). Within each group, all schemes
24
+ * must be satisfied simultaneously (AND semantics). Empty when `state === 'none'`.
25
+ *
26
+ * Mirrors the OpenAPI `security` array structure:
27
+ * - outer array → OR (satisfy any one group)
28
+ * - inner object → AND (all schemes in a group are required together)
29
+ */
30
+ requirements: RequiredSecurityGroup[];
31
+ };
32
+ /**
33
+ * Determine whether an operation requires authentication, using `operation.security ?? document.security`
34
+ * as the source of truth. Operation-level `security` fully overrides document-level — including `security: []`,
35
+ * which explicitly opts the operation out of auth.
36
+ *
37
+ * OpenAPI encodes "auth is optional" by including an empty requirement object `{}`. Whenever `{}`
38
+ * appears — whether alongside real requirements or as the only entry — auth is treated as optional (state: 'optional').
39
+ */
40
+ export declare const getRequiredSecurity: (operation: Pick<OperationObject, "security"> | null | undefined, document: Pick<OpenApiDocument, "security" | "components">) => RequiredSecurity;
41
+ //# sourceMappingURL=get-required-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-required-security.d.ts","sourceRoot":"","sources":["../../../../src/features/Operation/helpers/get-required-security.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8DAA8D,CAAA;AACnG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uDAAuD,CAAA;AAC5F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6DAA6D,CAAA;AAEvG,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAA;AAEpE,MAAM,MAAM,sBAAsB,GAAG;IACnC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,kGAAkG;IAClG,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAA;IACxC,mGAAmG;IACnG,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,sBAAsB,EAAE,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,qBAAqB,CAAA;IAC5B;;;;;;;OAOG;IACH,YAAY,EAAE,qBAAqB,EAAE,CAAA;CACtC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAC9B,WAAW,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,IAAI,GAAG,SAAS,EAC/D,UAAU,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,YAAY,CAAC,KACzD,gBAgCF,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { getResolvedRef } from "@scalar/workspace-store/helpers/get-resolved-ref";
2
+ import { isNonOptionalSecurityRequirement } from "@scalar/workspace-store/helpers/is-non-optional-security-requirement";
3
+ //#region src/features/Operation/helpers/get-required-security.ts
4
+ /**
5
+ * Determine whether an operation requires authentication, using `operation.security ?? document.security`
6
+ * as the source of truth. Operation-level `security` fully overrides document-level — including `security: []`,
7
+ * which explicitly opts the operation out of auth.
8
+ *
9
+ * OpenAPI encodes "auth is optional" by including an empty requirement object `{}`. Whenever `{}`
10
+ * appears — whether alongside real requirements or as the only entry — auth is treated as optional (state: 'optional').
11
+ */
12
+ var getRequiredSecurity = (operation, document) => {
13
+ const securityList = operation?.security ?? document.security ?? [];
14
+ const definedSchemes = document.components?.securitySchemes ?? {};
15
+ let hasEmpty = false;
16
+ const groups = [];
17
+ for (const requirement of securityList) {
18
+ if (!isNonOptionalSecurityRequirement(requirement)) {
19
+ hasEmpty = true;
20
+ continue;
21
+ }
22
+ const schemes = Object.entries(requirement).map(([name, scopes]) => ({
23
+ name,
24
+ scheme: getResolvedRef(definedSchemes[name]),
25
+ scopes: scopes.filter((s) => s.length > 0)
26
+ }));
27
+ if (schemes.length > 0) groups.push({ schemes });
28
+ }
29
+ if (groups.length === 0) return {
30
+ state: hasEmpty ? "optional" : "none",
31
+ requirements: []
32
+ };
33
+ return {
34
+ state: hasEmpty ? "optional" : "required",
35
+ requirements: groups
36
+ };
37
+ };
38
+ //#endregion
39
+ export { getRequiredSecurity };
40
+
41
+ //# sourceMappingURL=get-required-security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-required-security.js","names":[],"sources":["../../../../src/features/Operation/helpers/get-required-security.ts"],"sourcesContent":["import { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport { isNonOptionalSecurityRequirement } from '@scalar/workspace-store/helpers/is-non-optional-security-requirement'\nimport type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport type { OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/operation'\nimport type { SecuritySchemeObject } from '@scalar/workspace-store/schemas/v3.1/strict/security-scheme'\n\nexport type RequiredSecurityState = 'required' | 'optional' | 'none'\n\nexport type RequiredSecurityScheme = {\n /** Scheme key as declared in `components.securitySchemes`. */\n name: string\n /** Resolved scheme object. `undefined` if the referenced scheme isn't defined on the document. */\n scheme: SecuritySchemeObject | undefined\n /** Scopes required by the operation for this scheme (OAuth2 / OpenID Connect). Empty otherwise. */\n scopes: string[]\n}\n\n/**\n * One alternative in the security requirement list.\n * All schemes within a group must be satisfied simultaneously (AND semantics).\n */\nexport type RequiredSecurityGroup = {\n schemes: RequiredSecurityScheme[]\n}\n\nexport type RequiredSecurity = {\n state: RequiredSecurityState\n /**\n * Each element is one alternative (OR semantics). Within each group, all schemes\n * must be satisfied simultaneously (AND semantics). Empty when `state === 'none'`.\n *\n * Mirrors the OpenAPI `security` array structure:\n * - outer array → OR (satisfy any one group)\n * - inner object → AND (all schemes in a group are required together)\n */\n requirements: RequiredSecurityGroup[]\n}\n\n/**\n * Determine whether an operation requires authentication, using `operation.security ?? document.security`\n * as the source of truth. Operation-level `security` fully overrides document-level — including `security: []`,\n * which explicitly opts the operation out of auth.\n *\n * OpenAPI encodes \"auth is optional\" by including an empty requirement object `{}`. Whenever `{}`\n * appears — whether alongside real requirements or as the only entry — auth is treated as optional (state: 'optional').\n */\nexport const getRequiredSecurity = (\n operation: Pick<OperationObject, 'security'> | null | undefined,\n document: Pick<OpenApiDocument, 'security' | 'components'>,\n): RequiredSecurity => {\n const securityList = operation?.security ?? document.security ?? []\n const definedSchemes = document.components?.securitySchemes ?? {}\n\n let hasEmpty = false\n const groups: RequiredSecurityGroup[] = []\n\n for (const requirement of securityList) {\n if (!isNonOptionalSecurityRequirement(requirement)) {\n hasEmpty = true\n continue\n }\n\n const schemes: RequiredSecurityScheme[] = Object.entries(requirement).map(([name, scopes]) => ({\n name,\n scheme: getResolvedRef(definedSchemes[name]),\n scopes: scopes.filter((s) => s.length > 0),\n }))\n\n if (schemes.length > 0) {\n groups.push({ schemes })\n }\n }\n\n if (groups.length === 0) {\n return { state: hasEmpty ? 'optional' : 'none', requirements: [] }\n }\n\n return {\n state: hasEmpty ? 'optional' : 'required',\n requirements: groups,\n }\n}\n"],"mappings":";;;;;;;;;;;AA8CA,IAAa,uBACX,WACA,aACqB;CACrB,MAAM,eAAe,WAAW,YAAY,SAAS,YAAY,EAAE;CACnE,MAAM,iBAAiB,SAAS,YAAY,mBAAmB,EAAE;CAEjE,IAAI,WAAW;CACf,MAAM,SAAkC,EAAE;AAE1C,MAAK,MAAM,eAAe,cAAc;AACtC,MAAI,CAAC,iCAAiC,YAAY,EAAE;AAClD,cAAW;AACX;;EAGF,MAAM,UAAoC,OAAO,QAAQ,YAAY,CAAC,KAAK,CAAC,MAAM,aAAa;GAC7F;GACA,QAAQ,eAAe,eAAe,MAAM;GAC5C,QAAQ,OAAO,QAAQ,MAAM,EAAE,SAAS,EAAE;GAC3C,EAAE;AAEH,MAAI,QAAQ,SAAS,EACnB,QAAO,KAAK,EAAE,SAAS,CAAC;;AAI5B,KAAI,OAAO,WAAW,EACpB,QAAO;EAAE,OAAO,WAAW,aAAa;EAAQ,cAAc,EAAE;EAAE;AAGpE,QAAO;EACL,OAAO,WAAW,aAAa;EAC/B,cAAc;EACf"}
@@ -1,5 +1,6 @@
1
1
  import type { SecuritySchemeObjectSecret } from '@scalar/workspace-store/request-example';
2
2
  import type { OperationObject, ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
3
+ import type { RequiredSecurity } from '../../../features/Operation/helpers/get-required-security.js';
3
4
  import type { OperationProps } from '../../../features/Operation/Operation.vue.js';
4
5
  type __VLS_Props = Omit<OperationProps, 'document' | 'pathValue' | 'server' | 'securitySchemes' | 'authStore'> & {
5
6
  /** Operation object with path params */
@@ -8,6 +9,8 @@ type __VLS_Props = Omit<OperationProps, 'document' | 'pathValue' | 'server' | 's
8
9
  selectedServer: ServerObject | null;
9
10
  /** The selected security schemes for the operation */
10
11
  selectedSecuritySchemes: SecuritySchemeObjectSecret[];
12
+ /** Required/optional security state for the badge next to the path */
13
+ requiredSecurity: RequiredSecurity;
11
14
  };
12
15
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
16
  declare const _default: typeof __VLS_export;
@@ -1 +1 @@
1
- {"version":3,"file":"ClassicLayout.vue.d.ts","sourceRoot":"","sources":["../../../../src/features/Operation/layouts/ClassicLayout.vue"],"names":[],"mappings":"AA4hBA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAA;AACzF,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACb,MAAM,8DAA8D,CAAA;AAmBrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAUxE,KAAK,WAAW,GAAG,IAAI,CACnB,cAAc,EACd,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,iBAAiB,GAAG,WAAW,CACtE,GAAG;IACF,wCAAwC;IACxC,SAAS,EAAE,eAAe,CAAA;IAC1B,4CAA4C;IAC5C,cAAc,EAAE,YAAY,GAAG,IAAI,CAAA;IACnC,sDAAsD;IACtD,uBAAuB,EAAE,0BAA0B,EAAE,CAAA;CACtD,CAAC;AA4oBJ,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"ClassicLayout.vue.d.ts","sourceRoot":"","sources":["../../../../src/features/Operation/layouts/ClassicLayout.vue"],"names":[],"mappings":"AAqiBA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAA;AACzF,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACb,MAAM,8DAA8D,CAAA;AAerE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AAM1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAUxE,KAAK,WAAW,GAAG,IAAI,CACnB,cAAc,EACd,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,iBAAiB,GAAG,WAAW,CACtE,GAAG;IACF,wCAAwC;IACxC,SAAS,EAAE,eAAe,CAAA;IAC1B,4CAA4C;IAC5C,cAAc,EAAE,YAAY,GAAG,IAAI,CAAA;IACnC,sDAAsD;IACtD,uBAAuB,EAAE,0BAA0B,EAAE,CAAA;IACrD,sEAAsE;IACtE,gBAAgB,EAAE,gBAAgB,CAAA;CACnC,CAAC;AAupBJ,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
2
2
  import ClassicLayout_vue_vue_type_script_setup_true_lang_default from "./ClassicLayout.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/features/Operation/layouts/ClassicLayout.vue
5
- var ClassicLayout_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ClassicLayout_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-85ee673b"]]);
5
+ var ClassicLayout_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ClassicLayout_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-8f643b1c"]]);
6
6
  //#endregion
7
7
  export { ClassicLayout_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"ClassicLayout.vue.js","names":[],"sources":["../../../../src/features/Operation/layouts/ClassicLayout.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { OperationCodeSample } from '@scalar/api-client/blocks/operation-code-sample'\nimport {\n ScalarErrorBoundary,\n ScalarIconButton,\n ScalarMarkdown,\n} from '@scalar/components'\nimport {\n ScalarIconCopy,\n ScalarIconPlay,\n ScalarIconWebhooksLogo,\n} from '@scalar/icons'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { SecuritySchemeObjectSecret } from '@scalar/workspace-store/request-example'\nimport type {\n OperationObject,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, provide, ref } from 'vue'\n\nimport { Anchor } from '@/components/Anchor'\nimport { Badge } from '@/components/Badge'\nimport { HttpMethod } from '@/components/HttpMethod'\nimport { LinkList } from '@/components/LinkList'\nimport OperationPath from '@/components/OperationPath.vue'\nimport { SectionAccordion } from '@/components/Section'\nimport { ExampleResponses } from '@/features/example-responses'\nimport { ExternalDocs } from '@/features/external-docs'\nimport Callbacks from '@/features/Operation/components/callbacks/Callbacks.vue'\nimport OperationParameters from '@/features/Operation/components/OperationParameters.vue'\nimport OperationResponses from '@/features/Operation/components/OperationResponses.vue'\nimport {\n getOperationStability,\n getOperationStabilityColor,\n isOperationDeprecated,\n} from '@/features/Operation/helpers/operation-stability'\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\nimport {\n REQUEST_BODY_COMPOSITION_INDEX_SYMBOL,\n type RequestBodyCompositionSelection,\n} from '@/features/Operation/request-body-composition-index'\nimport { getXKeysFromObject } from '@/features/specification-extension'\nimport SpecificationExtension from '@/features/specification-extension/SpecificationExtension.vue'\nimport { TestRequestButton } from '@/features/test-request-button'\nimport { XBadges } from '@/features/x-badges'\n\nconst {\n clientOptions,\n eventBus,\n isWebhook,\n method,\n operation,\n options,\n path,\n selectedServer,\n selectedSecuritySchemes,\n selectedClient,\n} = defineProps<\n Omit<\n OperationProps,\n 'document' | 'pathValue' | 'server' | 'securitySchemes' | 'authStore'\n > & {\n /** Operation object with path params */\n operation: OperationObject\n /** The selected server for the operation */\n selectedServer: ServerObject | null\n /** The selected security schemes for the operation */\n selectedSecuritySchemes: SecuritySchemeObjectSecret[]\n }\n>()\n\nconst operationTitle = computed(() => operation.summary || path || '')\nconst operationExtensions = computed(() => getXKeysFromObject(operation))\n\n/** Track the currently selected example for passing to the modal */\nconst selectedExampleKey = ref<string>('')\n\n/** Track the selected request body content type so the code sample stays in sync */\nconst selectedRequestBodyContentType = ref<string | undefined>()\n\n/** Selected request body oneOf/anyOf variants; synced with schema dropdowns and code sample */\nconst requestBodyCompositionSelection = ref<RequestBodyCompositionSelection>({})\n\nconst requestBodyCompositionSelectionForCodeSample = computed(\n (): RequestBodyCompositionSelection => ({\n ...requestBodyCompositionSelection.value,\n }),\n)\n\nconst requestBodyCompositionSelectionKey = computed(() =>\n JSON.stringify(requestBodyCompositionSelectionForCodeSample.value),\n)\n\nprovide(REQUEST_BODY_COMPOSITION_INDEX_SYMBOL, requestBodyCompositionSelection)\n\nconst { copyToClipboard } = useClipboard()\n</script>\n<template>\n <SectionAccordion\n :id=\"id\"\n :aria-label=\"operationTitle\"\n class=\"reference-endpoint\"\n :modelValue=\"!isCollapsed\"\n transparent\n @update:modelValue=\"\n (value) => eventBus?.emit('toggle:nav-item', { id, open: value })\n \">\n <template #title>\n <div class=\"operation-title\">\n <div class=\"operation-details\">\n <HttpMethod\n class=\"endpoint-type\"\n :method=\"method\"\n short />\n <Anchor\n class=\"endpoint-anchor\"\n @copyAnchorUrl=\"() => eventBus?.emit('copy-url:nav-item', { id })\">\n <h3 class=\"endpoint-label\">\n <div class=\"endpoint-label-path\">\n <OperationPath\n :deprecated=\"isOperationDeprecated(operation)\"\n :path=\"path\" />\n </div>\n <div class=\"endpoint-label-name\">\n {{ operationTitle }}\n </div>\n <!-- Stability badge -->\n <Badge\n v-if=\"getOperationStability(operation)\"\n class=\"capitalize\"\n :class=\"getOperationStabilityColor(operation)\">\n {{ getOperationStability(operation) }}\n </Badge>\n\n <!-- Webhook badge -->\n <Badge\n v-if=\"isWebhook\"\n class=\"font-code text-green flex w-fit items-center justify-center gap-1\">\n <ScalarIconWebhooksLogo weight=\"bold\" />Webhook\n </Badge>\n\n <!-- x-badges before -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"before\" />\n </h3>\n </Anchor>\n </div>\n </div>\n </template>\n <template #actions=\"{ active }\">\n <!-- x-badges after -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"after\" />\n <template v-if=\"!options.hideTestRequestButton\">\n <TestRequestButton\n v-if=\"active && !isWebhook\"\n :id\n :eventBus\n :exampleName=\"selectedExampleKey\"\n :method\n :path\n :requestBodyCompositionSelection=\"\n requestBodyCompositionSelectionForCodeSample\n \" />\n <ScalarIconPlay\n v-else\n class=\"endpoint-try-hint size-4.5\" />\n </template>\n <span\n v-if=\"options.showOperationId && operation.operationId\"\n class=\"font-code text-sm\">\n {{ operation.operationId }}\n </span>\n <ScalarIconButton\n class=\"endpoint-copy p-0.5\"\n :icon=\"ScalarIconCopy\"\n label=\"Copy endpoint URL\"\n size=\"xs\"\n variant=\"ghost\"\n @click.stop=\"copyToClipboard(path)\" />\n </template>\n <template\n v-if=\"operation.description\"\n #description>\n <ScalarMarkdown\n :anchorPrefix=\"id\"\n aria-label=\"Operation Description\"\n role=\"group\"\n transformType=\"heading\"\n :value=\"operation.description\"\n withAnchors\n withImages />\n </template>\n <div class=\"endpoint-content\">\n <div class=\"operation-details-card\">\n <div\n v-if=\"Object.keys(operationExtensions).length > 0\"\n class=\"operation-details-card-item\">\n <SpecificationExtension :value=\"operationExtensions\" />\n </div>\n <div class=\"operation-details-card-item\">\n <OperationParameters\n :eventBus\n :options\n v-model:selectedContentType=\"selectedRequestBodyContentType\"\n :parameters=\"operation.parameters\"\n :requestBody=\"getResolvedRef(operation.requestBody)\" />\n </div>\n <div class=\"operation-details-card-item\">\n <OperationResponses\n :eventBus\n :options\n :responses=\"operation.responses\" />\n </div>\n\n <!-- Callbacks -->\n <div\n v-if=\"operation?.callbacks\"\n class=\"operation-details-card-item\">\n <Callbacks\n :callbacks=\"operation.callbacks\"\n :eventBus\n :options\n :path />\n </div>\n </div>\n\n <ExampleResponses\n v-if=\"operation.responses\"\n class=\"operation-example-card\"\n :responses=\"operation.responses\" />\n\n <!-- New Example Request -->\n <div>\n <!-- External Docs -->\n <LinkList v-if=\"operation.externalDocs\">\n <ExternalDocs :value=\"operation.externalDocs\" />\n </LinkList>\n <!-- Request Example -->\n <ScalarErrorBoundary>\n <OperationCodeSample\n :key=\"requestBodyCompositionSelectionKey\"\n v-model:selectedExample=\"selectedExampleKey\"\n class=\"operation-example-card\"\n :clientOptions\n :eventBus\n fallback\n :isWebhook\n :method\n :operation\n :path\n :requestBodyCompositionSelection=\"\n requestBodyCompositionSelectionForCodeSample\n \"\n :securitySchemes=\"selectedSecuritySchemes\"\n :selectedClient\n :selectedContentType=\"selectedRequestBodyContentType\"\n :selectedServer />\n </ScalarErrorBoundary>\n </div>\n </div>\n </SectionAccordion>\n</template>\n\n<style scoped>\n@reference \"@/style.css\";\n\n.operation-title {\n display: flex;\n justify-content: space-between;\n}\n.operation-details {\n display: flex;\n align-items: center;\n margin-top: 0;\n gap: 9px;\n\n min-width: 0;\n flex-shrink: 1;\n}\n.operation-details :deep(.endpoint-anchor .scalar-button svg) {\n width: 16px;\n height: 16px;\n}\n.endpoint-type {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n\n position: relative;\n z-index: 0;\n\n width: 60px;\n padding: 6px;\n flex-shrink: 0;\n\n font-size: var(--scalar-small);\n\n text-transform: uppercase;\n font-weight: var(--scalar-bold);\n font-family: var(--scalar-font);\n}\n.endpoint-type::after {\n content: '';\n position: absolute;\n inset: 0;\n z-index: -1;\n\n background: currentColor;\n opacity: 0.15;\n\n border-radius: var(--scalar-radius);\n}\n\n.endpoint-anchor {\n display: flex;\n align-items: center;\n min-width: 0;\n flex-shrink: 1;\n}\n.endpoint-anchor.label {\n display: flex;\n}\n.endpoint-label {\n display: flex;\n align-items: baseline;\n gap: 9px;\n\n min-width: 0;\n flex-shrink: 1;\n\n color: var(--scalar-color-1);\n}\n\n.endpoint-label-path {\n font-family: var(--scalar-font-code);\n font-size: var(--scalar-mini);\n\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n.endpoint-label-path :deep(em) {\n color: var(--scalar-color-2);\n}\n.endpoint-label-name {\n color: var(--scalar-color-2);\n font-size: var(--scalar-small);\n\n /* Concatenate the name before we shrink the path */\n flex-shrink: 1000000000;\n\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.endpoint-try-hint {\n padding: 2px;\n flex-shrink: 0;\n}\n.endpoint-copy {\n color: currentColor;\n}\n.endpoint-copy :deep(svg) {\n stroke-width: 2px;\n}\n\n.endpoint-content {\n display: grid;\n grid-auto-columns: 1fr;\n grid-auto-flow: row;\n gap: 9px;\n padding: 9px;\n}\n\n@variant lg {\n .endpoint-content {\n grid-auto-flow: column;\n }\n}\n\n@container (max-width: 900px) {\n .endpoint-content {\n grid-template-columns: 1fr;\n }\n}\n\n.endpoint-content > * {\n min-width: 0;\n}\n\n.operation-details-card {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n}\n.operation-details-card-item :deep(.parameter-list),\n.operation-details-card-item :deep(.callbacks-list) {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n margin-top: 0;\n}\n\n.operation-details-card-item {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.operation-details-card-item :deep(.parameter-list-items) {\n margin-bottom: 0;\n}\n.operation-details-card :deep(.parameter-item:last-of-type .parameter-schema) {\n padding-bottom: 12px;\n}\n.operation-details-card :deep(.parameter-list .parameter-list) {\n margin-bottom: 12px;\n}\n.operation-details-card :deep(.parameter-item) {\n margin: 0;\n padding: 0;\n}\n.operation-details-card :deep(.property) {\n padding: 9px;\n margin: 0;\n}\n.operation-details-card :deep(.parameter-list-title),\n.operation-details-card :deep(.request-body-title),\n.operation-details-card :deep(.callbacks-title) {\n text-transform: uppercase;\n font-weight: var(--scalar-bold);\n font-size: var(--scalar-mini);\n color: var(--scalar-color-2);\n line-height: 1.33;\n padding: 9px;\n margin: 0;\n}\n\n.operation-details-card :deep(.callback-list-item-title) {\n padding-left: 28px;\n padding-right: 12px;\n}\n\n.operation-details-card :deep(.callback-list-item-icon) {\n left: 6px;\n}\n\n.operation-details-card :deep(.callback-operation-container) {\n padding-inline: 9px;\n padding-bottom: 9px;\n}\n\n.operation-details-card :deep(.callback-operation-container > .request-body),\n.operation-details-card :deep(.callback-operation-container > .parameter-list) {\n border: none;\n}\n\n.operation-details-card\n :deep(.callback-operation-container > .request-body > .request-body-header) {\n padding: 0;\n padding-bottom: 9px;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.operation-details-card :deep(.request-body-description) {\n margin-top: 0;\n padding: 9px 9px 0 9px;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.operation-details-card :deep(.request-body) {\n margin-top: 0;\n border-radius: var(--scalar-radius-lg);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.operation-details-card\n :deep(.request-body .schema-card--level-0 > .schema-card-description) {\n padding-inline: 9px;\n}\n\n.operation-details-card :deep(.request-body-header) {\n padding-bottom: 0;\n border-bottom: 0;\n}\n\n.operation-details-card :deep(.contents button) {\n margin-right: 9px;\n}\n\n.operation-details-card\n :deep(.schema-card--open + .schema-card:not(.schema-card--open)) {\n margin-inline: 9px;\n margin-bottom: 9px;\n}\n.operation-details-card :deep(.request-body-schema .property--level-0) {\n padding: 0;\n}\n.operation-details-card :deep(.request-body-schema .property--level-0) {\n padding: 0;\n}\n\n.operation-details-card :deep(.selected-content-type) {\n margin-right: 9px;\n}\n\n.operation-example-card {\n position: sticky;\n top: calc(var(--refs-viewport-offset) + 24px);\n max-height: calc(var(--refs-viewport-height) - 48px);\n}\n\n@media (max-width: 600px) {\n .operation-example-card {\n max-height: unset;\n position: static;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ClassicLayout.vue.js","names":[],"sources":["../../../../src/features/Operation/layouts/ClassicLayout.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { OperationCodeSample } from '@scalar/api-client/blocks/operation-code-sample'\nimport {\n ScalarErrorBoundary,\n ScalarIconButton,\n ScalarMarkdown,\n} from '@scalar/components'\nimport {\n ScalarIconCopy,\n ScalarIconPlay,\n ScalarIconWebhooksLogo,\n} from '@scalar/icons'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { SecuritySchemeObjectSecret } from '@scalar/workspace-store/request-example'\nimport type {\n OperationObject,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, provide, ref } from 'vue'\n\nimport { Anchor } from '@/components/Anchor'\nimport { Badge } from '@/components/Badge'\nimport { HttpMethod } from '@/components/HttpMethod'\nimport { LinkList } from '@/components/LinkList'\nimport OperationPath from '@/components/OperationPath.vue'\nimport { SectionAccordion } from '@/components/Section'\nimport { ExampleResponses } from '@/features/example-responses'\nimport { ExternalDocs } from '@/features/external-docs'\nimport Callbacks from '@/features/Operation/components/callbacks/Callbacks.vue'\nimport OperationParameters from '@/features/Operation/components/OperationParameters.vue'\nimport OperationResponses from '@/features/Operation/components/OperationResponses.vue'\nimport SecurityRequirementBadge from '@/features/Operation/components/SecurityRequirementBadge.vue'\nimport type { RequiredSecurity } from '@/features/Operation/helpers/get-required-security'\nimport {\n getOperationStability,\n getOperationStabilityColor,\n isOperationDeprecated,\n} from '@/features/Operation/helpers/operation-stability'\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\nimport {\n REQUEST_BODY_COMPOSITION_INDEX_SYMBOL,\n type RequestBodyCompositionSelection,\n} from '@/features/Operation/request-body-composition-index'\nimport { getXKeysFromObject } from '@/features/specification-extension'\nimport SpecificationExtension from '@/features/specification-extension/SpecificationExtension.vue'\nimport { TestRequestButton } from '@/features/test-request-button'\nimport { XBadges } from '@/features/x-badges'\n\nconst {\n clientOptions,\n eventBus,\n isWebhook,\n method,\n operation,\n options,\n path,\n requiredSecurity,\n selectedServer,\n selectedSecuritySchemes,\n selectedClient,\n} = defineProps<\n Omit<\n OperationProps,\n 'document' | 'pathValue' | 'server' | 'securitySchemes' | 'authStore'\n > & {\n /** Operation object with path params */\n operation: OperationObject\n /** The selected server for the operation */\n selectedServer: ServerObject | null\n /** The selected security schemes for the operation */\n selectedSecuritySchemes: SecuritySchemeObjectSecret[]\n /** Required/optional security state for the badge next to the path */\n requiredSecurity: RequiredSecurity\n }\n>()\n\nconst operationTitle = computed(() => operation.summary || path || '')\nconst operationExtensions = computed(() => getXKeysFromObject(operation))\n\n/** Track the currently selected example for passing to the modal */\nconst selectedExampleKey = ref<string>('')\n\n/** Track the selected request body content type so the code sample stays in sync */\nconst selectedRequestBodyContentType = ref<string | undefined>()\n\n/** Selected request body oneOf/anyOf variants; synced with schema dropdowns and code sample */\nconst requestBodyCompositionSelection = ref<RequestBodyCompositionSelection>({})\n\nconst requestBodyCompositionSelectionForCodeSample = computed(\n (): RequestBodyCompositionSelection => ({\n ...requestBodyCompositionSelection.value,\n }),\n)\n\nconst requestBodyCompositionSelectionKey = computed(() =>\n JSON.stringify(requestBodyCompositionSelectionForCodeSample.value),\n)\n\nprovide(REQUEST_BODY_COMPOSITION_INDEX_SYMBOL, requestBodyCompositionSelection)\n\nconst { copyToClipboard } = useClipboard()\n</script>\n<template>\n <SectionAccordion\n :id=\"id\"\n :aria-label=\"operationTitle\"\n class=\"reference-endpoint\"\n :modelValue=\"!isCollapsed\"\n transparent\n @update:modelValue=\"\n (value) => eventBus?.emit('toggle:nav-item', { id, open: value })\n \">\n <template #title>\n <div class=\"operation-title\">\n <div class=\"operation-details\">\n <HttpMethod\n class=\"endpoint-type\"\n :method=\"method\"\n short />\n <Anchor\n class=\"endpoint-anchor\"\n @copyAnchorUrl=\"() => eventBus?.emit('copy-url:nav-item', { id })\">\n <h3 class=\"endpoint-label\">\n <div class=\"endpoint-label-path\">\n <OperationPath\n :deprecated=\"isOperationDeprecated(operation)\"\n :path=\"path\" />\n </div>\n <div class=\"endpoint-label-name\">\n {{ operationTitle }}\n </div>\n <!-- Stability badge -->\n <Badge\n v-if=\"getOperationStability(operation)\"\n class=\"capitalize\"\n :class=\"getOperationStabilityColor(operation)\">\n {{ getOperationStability(operation) }}\n </Badge>\n\n <!-- Webhook badge -->\n <Badge\n v-if=\"isWebhook\"\n class=\"font-code text-green flex w-fit items-center justify-center gap-1\">\n <ScalarIconWebhooksLogo weight=\"bold\" />Webhook\n </Badge>\n\n <!-- x-badges before -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"before\" />\n </h3>\n </Anchor>\n </div>\n </div>\n </template>\n <template #actions=\"{ active }\">\n <!-- Required auth indicator -->\n <SecurityRequirementBadge\n hideLabel\n :requiredSecurity />\n <!-- x-badges after -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"after\" />\n <template v-if=\"!options.hideTestRequestButton\">\n <TestRequestButton\n v-if=\"active && !isWebhook\"\n :id\n :eventBus\n :exampleName=\"selectedExampleKey\"\n :method\n :path\n :requestBodyCompositionSelection=\"\n requestBodyCompositionSelectionForCodeSample\n \" />\n <ScalarIconPlay\n v-else\n class=\"endpoint-try-hint size-4.5\" />\n </template>\n <span\n v-if=\"options.showOperationId && operation.operationId\"\n class=\"font-code text-sm\">\n {{ operation.operationId }}\n </span>\n <ScalarIconButton\n class=\"endpoint-copy p-0.5\"\n :icon=\"ScalarIconCopy\"\n label=\"Copy endpoint URL\"\n size=\"xs\"\n variant=\"ghost\"\n @click.stop=\"copyToClipboard(path)\" />\n </template>\n <template\n v-if=\"operation.description\"\n #description>\n <ScalarMarkdown\n :anchorPrefix=\"id\"\n aria-label=\"Operation Description\"\n role=\"group\"\n transformType=\"heading\"\n :value=\"operation.description\"\n withAnchors\n withImages />\n </template>\n <div class=\"endpoint-content\">\n <div class=\"operation-details-card\">\n <div\n v-if=\"Object.keys(operationExtensions).length > 0\"\n class=\"operation-details-card-item\">\n <SpecificationExtension :value=\"operationExtensions\" />\n </div>\n <div class=\"operation-details-card-item\">\n <OperationParameters\n v-model:selectedContentType=\"selectedRequestBodyContentType\"\n :eventBus\n :options\n :parameters=\"operation.parameters\"\n :requestBody=\"getResolvedRef(operation.requestBody)\" />\n </div>\n <div class=\"operation-details-card-item\">\n <OperationResponses\n :eventBus\n :options\n :responses=\"operation.responses\" />\n </div>\n\n <!-- Callbacks -->\n <div\n v-if=\"operation?.callbacks\"\n class=\"operation-details-card-item\">\n <Callbacks\n :callbacks=\"operation.callbacks\"\n :eventBus\n :options\n :path />\n </div>\n </div>\n\n <ExampleResponses\n v-if=\"operation.responses\"\n class=\"operation-example-card\"\n :responses=\"operation.responses\" />\n\n <!-- New Example Request -->\n <div>\n <!-- External Docs -->\n <LinkList v-if=\"operation.externalDocs\">\n <ExternalDocs :value=\"operation.externalDocs\" />\n </LinkList>\n <!-- Request Example -->\n <ScalarErrorBoundary>\n <OperationCodeSample\n :key=\"requestBodyCompositionSelectionKey\"\n v-model:selectedExample=\"selectedExampleKey\"\n class=\"operation-example-card\"\n :clientOptions\n :eventBus\n fallback\n :isWebhook\n :method\n :operation\n :path\n :requestBodyCompositionSelection=\"\n requestBodyCompositionSelectionForCodeSample\n \"\n :securitySchemes=\"selectedSecuritySchemes\"\n :selectedClient\n :selectedContentType=\"selectedRequestBodyContentType\"\n :selectedServer />\n </ScalarErrorBoundary>\n </div>\n </div>\n </SectionAccordion>\n</template>\n\n<style scoped>\n@reference \"@/style.css\";\n\n.operation-title {\n display: flex;\n justify-content: space-between;\n}\n.operation-details {\n display: flex;\n align-items: center;\n margin-top: 0;\n gap: 9px;\n\n min-width: 0;\n flex-shrink: 1;\n}\n.operation-details :deep(.endpoint-anchor .scalar-button svg) {\n width: 16px;\n height: 16px;\n}\n.endpoint-type {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n\n position: relative;\n z-index: 0;\n\n width: 60px;\n padding: 6px;\n flex-shrink: 0;\n\n font-size: var(--scalar-small);\n\n text-transform: uppercase;\n font-weight: var(--scalar-bold);\n font-family: var(--scalar-font);\n}\n.endpoint-type::after {\n content: '';\n position: absolute;\n inset: 0;\n z-index: -1;\n\n background: currentColor;\n opacity: 0.15;\n\n border-radius: var(--scalar-radius);\n}\n\n.endpoint-anchor {\n display: flex;\n align-items: center;\n min-width: 0;\n flex-shrink: 1;\n}\n.endpoint-anchor.label {\n display: flex;\n}\n.endpoint-label {\n display: flex;\n align-items: baseline;\n gap: 9px;\n\n min-width: 0;\n flex-shrink: 1;\n\n color: var(--scalar-color-1);\n}\n\n.endpoint-label-path {\n font-family: var(--scalar-font-code);\n font-size: var(--scalar-mini);\n\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n.endpoint-label-path :deep(em) {\n color: var(--scalar-color-2);\n}\n.endpoint-label-name {\n color: var(--scalar-color-2);\n font-size: var(--scalar-small);\n\n /* Concatenate the name before we shrink the path */\n flex-shrink: 1000000000;\n\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.endpoint-try-hint {\n padding: 2px;\n flex-shrink: 0;\n}\n.endpoint-copy {\n color: currentColor;\n}\n.endpoint-copy :deep(svg) {\n stroke-width: 2px;\n}\n\n.endpoint-content {\n display: grid;\n grid-auto-columns: 1fr;\n grid-auto-flow: row;\n gap: 9px;\n padding: 9px;\n}\n\n@variant lg {\n .endpoint-content {\n grid-auto-flow: column;\n }\n}\n\n@container (max-width: 900px) {\n .endpoint-content {\n grid-template-columns: 1fr;\n }\n}\n\n.endpoint-content > * {\n min-width: 0;\n}\n\n.operation-details-card {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n}\n.operation-details-card-item :deep(.parameter-list),\n.operation-details-card-item :deep(.callbacks-list) {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n margin-top: 0;\n}\n\n.operation-details-card-item {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.operation-details-card-item :deep(.parameter-list-items) {\n margin-bottom: 0;\n}\n.operation-details-card :deep(.parameter-item:last-of-type .parameter-schema) {\n padding-bottom: 12px;\n}\n.operation-details-card :deep(.parameter-list .parameter-list) {\n margin-bottom: 12px;\n}\n.operation-details-card :deep(.parameter-item) {\n margin: 0;\n padding: 0;\n}\n.operation-details-card :deep(.property) {\n padding: 9px;\n margin: 0;\n}\n.operation-details-card :deep(.parameter-list-title),\n.operation-details-card :deep(.request-body-title),\n.operation-details-card :deep(.callbacks-title) {\n text-transform: uppercase;\n font-weight: var(--scalar-bold);\n font-size: var(--scalar-mini);\n color: var(--scalar-color-2);\n line-height: 1.33;\n padding: 9px;\n margin: 0;\n}\n\n.operation-details-card :deep(.callback-list-item-title) {\n padding-left: 28px;\n padding-right: 12px;\n}\n\n.operation-details-card :deep(.callback-list-item-icon) {\n left: 6px;\n}\n\n.operation-details-card :deep(.callback-operation-container) {\n padding-inline: 9px;\n padding-bottom: 9px;\n}\n\n.operation-details-card :deep(.callback-operation-container > .request-body),\n.operation-details-card :deep(.callback-operation-container > .parameter-list) {\n border: none;\n}\n\n.operation-details-card\n :deep(.callback-operation-container > .request-body > .request-body-header) {\n padding: 0;\n padding-bottom: 9px;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.operation-details-card :deep(.request-body-description) {\n margin-top: 0;\n padding: 9px 9px 0 9px;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.operation-details-card :deep(.request-body) {\n margin-top: 0;\n border-radius: var(--scalar-radius-lg);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.operation-details-card\n :deep(.request-body .schema-card--level-0 > .schema-card-description) {\n padding-inline: 9px;\n}\n\n.operation-details-card :deep(.request-body-header) {\n padding-bottom: 0;\n border-bottom: 0;\n}\n\n.operation-details-card :deep(.contents button) {\n margin-right: 9px;\n}\n\n.operation-details-card\n :deep(.schema-card--open + .schema-card:not(.schema-card--open)) {\n margin-inline: 9px;\n margin-bottom: 9px;\n}\n.operation-details-card :deep(.request-body-schema .property--level-0) {\n padding: 0;\n}\n.operation-details-card :deep(.request-body-schema .property--level-0) {\n padding: 0;\n}\n\n.operation-details-card :deep(.selected-content-type) {\n margin-right: 9px;\n}\n\n.operation-example-card {\n position: sticky;\n top: calc(var(--refs-viewport-offset) + 24px);\n max-height: calc(var(--refs-viewport-height) - 48px);\n}\n\n@media (max-width: 600px) {\n .operation-example-card {\n max-height: unset;\n position: static;\n }\n}\n</style>\n"],"mappings":""}
@@ -12,6 +12,7 @@ import ExampleResponses_default from "../../example-responses/ExampleResponses.v
12
12
  import OperationParameters_default from "../components/OperationParameters.vue.js";
13
13
  import OperationResponses_default from "../components/OperationResponses.vue.js";
14
14
  import Callbacks_default from "../components/callbacks/Callbacks.vue.js";
15
+ import SecurityRequirementBadge_default from "../components/SecurityRequirementBadge.vue.js";
15
16
  import { getOperationStability, getOperationStabilityColor, isOperationDeprecated } from "../helpers/operation-stability.js";
16
17
  import TestRequestButton_default from "../../test-request-button/TestRequestButton.vue.js";
17
18
  import XBadges_default from "../../x-badges/XBadges.vue.js";
@@ -57,7 +58,8 @@ var ClassicLayout_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
57
58
  eventBus: {},
58
59
  operation: {},
59
60
  selectedServer: {},
60
- selectedSecuritySchemes: {}
61
+ selectedSecuritySchemes: {},
62
+ requiredSecurity: {}
61
63
  },
62
64
  setup(__props) {
63
65
  const operationTitle = computed(() => __props.operation.summary || __props.path || "");
@@ -120,6 +122,10 @@ var ClassicLayout_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
120
122
  _: 1
121
123
  })])])]),
122
124
  actions: withCtx(({ active }) => [
125
+ createVNode(SecurityRequirementBadge_default, {
126
+ hideLabel: "",
127
+ requiredSecurity: __props.requiredSecurity
128
+ }, null, 8, ["requiredSecurity"]),
123
129
  createVNode(unref(XBadges_default), {
124
130
  badges: __props.operation["x-badges"],
125
131
  position: "after"
@@ -157,16 +163,16 @@ var ClassicLayout_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
157
163
  createElementVNode("div", _hoisted_8, [
158
164
  Object.keys(operationExtensions.value).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_9, [createVNode(SpecificationExtension_default, { value: operationExtensions.value }, null, 8, ["value"])])) : createCommentVNode("", true),
159
165
  createElementVNode("div", _hoisted_10, [createVNode(OperationParameters_default, {
160
- eventBus: __props.eventBus,
161
- options: __props.options,
162
166
  selectedContentType: selectedRequestBodyContentType.value,
163
167
  "onUpdate:selectedContentType": _cache[2] || (_cache[2] = ($event) => selectedRequestBodyContentType.value = $event),
168
+ eventBus: __props.eventBus,
169
+ options: __props.options,
164
170
  parameters: __props.operation.parameters,
165
171
  requestBody: unref(getResolvedRef)(__props.operation.requestBody)
166
172
  }, null, 8, [
173
+ "selectedContentType",
167
174
  "eventBus",
168
175
  "options",
169
- "selectedContentType",
170
176
  "parameters",
171
177
  "requestBody"
172
178
  ])]),