UNPKG

@scalar/api-reference

Version:

Generate beautiful API references from OpenAPI documents

150 lines (149 loc) 7.26 kB
import { defineComponent, computed, ref, createElementBlock, openBlock, createVNode, unref, withCtx, createBlock, createCommentVNode, normalizeClass, createElementVNode } from "vue"; import { Disclosure, DisclosureButton, DisclosurePanel } from "@headlessui/vue"; import { ScalarWrappingText, ScalarMarkdownSummary, ScalarMarkdown } from "@scalar/components"; import { isDefined } from "@scalar/helpers/array/is-defined"; import { ScalarIconCaretRight } from "@scalar/icons"; import { getResolvedRef } from "@scalar/workspace-store/helpers/get-resolved-ref"; import SchemaProperty from "../../../components/Content/Schema/SchemaProperty.vue.js"; import _sfc_main$1 from "./ContentTypeSelect.vue.js"; import Headers from "./Headers.vue.js"; const _hoisted_1 = { class: "parameter-item group/parameter-item" }; const _hoisted_2 = { class: "parameter-item-name min-w-0" }; const _hoisted_3 = { key: 1, class: "flex-1" }; const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "ParameterListItem", props: { parameter: {}, name: {}, breadcrumb: {}, eventBus: {}, collapsableItems: { type: Boolean }, options: {} }, setup(__props) { const schema = computed( () => "schema" in __props.parameter && __props.parameter.schema ? getResolvedRef(__props.parameter.schema) : null ); const content = computed( () => "content" in __props.parameter && __props.parameter.content ? __props.parameter.content : null ); const selectedContentType = ref( Object.keys(content.value || {})[0] ?? "" ); const headers = computed( () => "headers" in __props.parameter && __props.parameter.headers ? __props.parameter.headers : null ); const value = computed(() => { const baseSchema = content.value ? content.value?.[selectedContentType.value]?.schema : schema.value; const deprecated = "deprecated" in __props.parameter ? __props.parameter.deprecated : schema.value?.deprecated; const paramExamples = "examples" in __props.parameter ? __props.parameter.examples : {}; const arrayExamples = schema.value?.examples ?? []; const recordExamples = Object.values({ ...paramExamples, ...content.value?.[selectedContentType.value]?.examples }); const examples = [...recordExamples, ...arrayExamples]; return { ...getResolvedRef(baseSchema), deprecated, ..."example" in __props.parameter && isDefined(__props.parameter.example) && { example: __props.parameter.example }, examples }; }); const shouldCollapse = computed( () => Boolean(__props.collapsableItems && (content.value || headers.value || schema.value)) ); return (_ctx, _cache) => { return openBlock(), createElementBlock("li", _hoisted_1, [ createVNode(unref(Disclosure), null, { default: withCtx(({ open }) => [ shouldCollapse.value ? (openBlock(), createBlock(unref(DisclosureButton), { key: 0, class: normalizeClass(["parameter-item-trigger", { "parameter-item-trigger-open": open }]) }, { default: withCtx(() => [ createElementVNode("div", _hoisted_2, [ createVNode(unref(ScalarIconCaretRight), { class: normalizeClass(["parameter-item-icon size-3 transition-transform duration-100", { "rotate-90": open }]), weight: "bold" }, null, 8, ["class"]), createElementVNode("div", null, [ createVNode(unref(ScalarWrappingText), { preset: "property", text: __props.name }, null, 8, ["text"]) ]) ]), !open && __props.parameter.description ? (openBlock(), createBlock(unref(ScalarMarkdownSummary), { key: 0, class: "parameter-item-description-summary min-w-0 flex-1", controlled: "", value: __props.parameter.description }, null, 8, ["value"])) : (openBlock(), createElementBlock("div", _hoisted_3)), createElementVNode("div", { class: normalizeClass({ "w-0 overflow-hidden group-focus-within/parameter-item:w-auto group-hover/parameter-item:w-auto": !open }) }, [ shouldCollapse.value && content.value ? (openBlock(), createBlock(_sfc_main$1, { key: 0, modelValue: selectedContentType.value, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedContentType.value = $event), class: "", content: content.value }, null, 8, ["modelValue", "content"])) : createCommentVNode("", true) ], 2) ]), _: 2 }, 1032, ["class"])) : createCommentVNode("", true), createVNode(unref(DisclosurePanel), { class: "parameter-item-container parameter-item-container-markdown", static: !shouldCollapse.value }, { default: withCtx(() => [ shouldCollapse.value && __props.parameter.description ? (openBlock(), createBlock(unref(ScalarMarkdown), { key: 0, class: "parameter-item-description", value: __props.parameter.description }, null, 8, ["value"])) : createCommentVNode("", true), headers.value ? (openBlock(), createBlock(Headers, { key: 1, breadcrumb: __props.breadcrumb, eventBus: __props.eventBus, headers: headers.value, orderRequiredPropertiesFirst: __props.options.orderRequiredPropertiesFirst, orderSchemaPropertiesBy: __props.options.orderSchemaPropertiesBy }, null, 8, ["breadcrumb", "eventBus", "headers", "orderRequiredPropertiesFirst", "orderSchemaPropertiesBy"])) : createCommentVNode("", true), createVNode(SchemaProperty, { is: "div", breadcrumb: __props.breadcrumb, compact: "", description: shouldCollapse.value ? "" : __props.parameter.description, eventBus: __props.eventBus, hideWriteOnly: true, name: shouldCollapse.value ? "" : __props.name, noncollapsible: true, options: { hideWriteOnly: true, orderRequiredPropertiesFirst: __props.options.orderRequiredPropertiesFirst, orderSchemaPropertiesBy: __props.options.orderSchemaPropertiesBy }, required: "required" in __props.parameter && __props.parameter.required, schema: value.value }, null, 8, ["breadcrumb", "description", "eventBus", "name", "options", "required", "schema"]) ]), _: 1 }, 8, ["static"]) ]), _: 1 }) ]); }; } }); export { _sfc_main as default };