import { defineComponent, computed, ref, createElementBlock, createCommentVNode, openBlock, createElementVNode, Fragment, renderList, createBlock, createVNode, unref, withCtx, createTextVNode, normalizeClass, toDisplayString } from "vue";
import { ScalarButton } from "@scalar/components";
import { ScalarIconPlus } from "@scalar/icons";
import { resolve } from "@scalar/workspace-store/resolve";
import { isArraySchema } from "@scalar/workspace-store/schemas/v3.1/strict/type-guards";
import SchemaEnumPropertyItem from "./SchemaEnumPropertyItem.vue.js";
const _hoisted_1 = {
  key: 0,
  class: "property-enum"
};
const _hoisted_2 = { class: "property-enum-values" };
const _hoisted_3 = { key: 1 };
const ENUM_DISPLAY_THRESHOLD = 9;
const INITIAL_VISIBLE_COUNT = 5;
const THIN_SPACE = " ";
const _sfc_main = /* @__PURE__ */ defineComponent({
  __name: "SchemaEnumValues",
  props: {
    value: {}
  },
  setup(__props) {
    const enumValues = computed(() => {
      if (!__props.value) {
        return [];
      }
      return __props.value.enum || isArraySchema(__props.value) && resolve.schema(__props.value.items)?.enum || [];
    });
    const shouldUseLongListDisplay = computed(
      () => enumValues.value.length > ENUM_DISPLAY_THRESHOLD
    );
    const initialVisibleCount = computed(
      () => shouldUseLongListDisplay.value ? INITIAL_VISIBLE_COUNT : enumValues.value.length
    );
    const visibleEnumValues = computed(
      () => enumValues.value.slice(0, initialVisibleCount.value)
    );
    const hiddenEnumValues = computed(
      () => enumValues.value.slice(initialVisibleCount.value)
    );
    const getEnumValueDescription = (enumValue, index) => {
      const descriptions = __props.value?.["x-enumDescriptions"] ?? __props.value?.["x-enum-descriptions"];
      if (!descriptions) {
        return void 0;
      }
      if (Array.isArray(descriptions)) {
        return descriptions[index];
      }
      if (typeof descriptions === "object" && descriptions !== null) {
        return descriptions[String(enumValue)];
      }
      return void 0;
    };
    const formatEnumValueWithName = (enumValue, index) => {
      const varNames = __props.value?.["x-enum-varnames"] ?? __props.value?.["x-enumNames"];
      const varName = Array.isArray(varNames) ? varNames[index] : void 0;
      return varName ? `${enumValue}${THIN_SPACE}=${THIN_SPACE}${varName}` : String(enumValue);
    };
    const isExpanded = ref(false);
    const toggleExpanded = () => {
      isExpanded.value = !isExpanded.value;
    };
    return (_ctx, _cache) => {
      return enumValues.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_1, [
        createElementVNode("ul", _hoisted_2, [
          (openBlock(true), createElementBlock(Fragment, null, renderList(visibleEnumValues.value, (enumValue, index) => {
            return openBlock(), createBlock(SchemaEnumPropertyItem, {
              key: String(enumValue),
              description: getEnumValueDescription(enumValue, index),
              label: formatEnumValueWithName(enumValue, index)
            }, null, 8, ["description", "label"]);
          }), 128)),
          shouldUseLongListDisplay.value && isExpanded.value ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(hiddenEnumValues.value, (enumValue, index) => {
            return openBlock(), createBlock(SchemaEnumPropertyItem, {
              key: String(enumValue),
              description: getEnumValueDescription(enumValue, initialVisibleCount.value + index),
              label: formatEnumValueWithName(enumValue, initialVisibleCount.value + index)
            }, null, 8, ["description", "label"]);
          }), 128)) : createCommentVNode("", true),
          shouldUseLongListDisplay.value ? (openBlock(), createElementBlock("li", _hoisted_3, [
            createVNode(unref(ScalarButton), {
              class: "enum-toggle-button my-2 flex h-fit gap-1 rounded-full border py-1.5 pr-2.5 pl-2 leading-none",
              variant: "ghost",
              onClick: toggleExpanded
            }, {
              default: withCtx(() => [
                createVNode(unref(ScalarIconPlus), {
                  class: normalizeClass({ "rotate-45": isExpanded.value }),
                  weight: "bold"
                }, null, 8, ["class"]),
                createTextVNode(" " + toDisplayString(isExpanded.value ? "Hide values" : "Show all values"), 1)
              ]),
              _: 1
            })
          ])) : createCommentVNode("", true)
        ])
      ])) : createCommentVNode("", true);
    };
  }
});
export {
  _sfc_main as default
};
