{"version":3,"file":"collapse-panel.vue2.cjs","sources":["../../../components/collapse/collapse-panel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject, onBeforeUnmount, reactive, ref, watch } from 'vue'\n\nimport { createIconProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { collapsePanelProps } from './props'\nimport { COLLAPSE_STATE, getIndexId } from './symbol'\n\nimport type { CollapseArrowType, CollapsePanelSlots, PanelState } from './symbol'\n\ndefineOptions({ name: 'CollapsePanel' })\n\nconst _props = defineProps(collapsePanelProps)\nconst props = useProps('collapsePanel', _props, {\n  label: {\n    default: null,\n    static: true,\n  },\n  title: '',\n  disabled: false,\n  contentStyle: null,\n  expanded: false,\n  card: false,\n  arrowType: {\n    default: 'right' as CollapseArrowType,\n    validator: (value: CollapseArrowType) => ['right', 'left', 'none'].includes(value),\n  },\n  icon: createIconProp(),\n  ghost: false,\n  alive: null,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:expanded'])\n\ndefineSlots<CollapsePanelSlots>()\n\nconst collapseState = inject(COLLAPSE_STATE, null)\n\nconst nh = useNameHelper('collapse')\nconst icons = useIcons()\nconst currentExpanded = ref(props.expanded)\nconst currentLabel = ref(props.label)\nconst loaded = ref(currentExpanded.value)\n\nconst tab = ref<HTMLElement>()\n\nconst id = getIndexId()\n\nconst tabId = computed(() => `${nh.be('tab')}-${id}`)\nconst bodyId = computed(() => `${nh.be('body')}-${id}`)\nconst useCard = computed(() => {\n  if (!collapseState) {\n    return props.card\n  }\n\n  return false\n})\nconst useGhost = computed(() => {\n  if (!collapseState) {\n    return props.ghost\n  }\n\n  return false\n})\nconst useArrowType = computed(() => {\n  if (collapseState) {\n    return collapseState.arrowType\n  }\n\n  return props.arrowType\n})\nconst alive = computed(() => {\n  // 以 CollapsePanel 自身的 alive 属性优先\n  return props.alive ?? collapseState?.alive ?? false\n})\nconst className = computed(() => {\n  return [\n    nh.be('panel'),\n    nh.bs('vars'),\n    nh.bem('panel', `arrow-${useArrowType.value}`),\n    {\n      [nh.bem('panel', 'inherit')]: collapseState || props.inherit,\n      [nh.bem('panel', 'card')]: useCard.value,\n      [nh.bem('panel', 'ghost')]: !useCard.value && useGhost.value,\n      [nh.bem('panel', 'expanded')]: currentExpanded.value,\n      [nh.bem('panel', 'disabled')]: props.disabled,\n    },\n  ]\n})\n\nif (collapseState) {\n  const state: PanelState = reactive({\n    tab,\n    label: currentLabel,\n    expanded: currentExpanded,\n    setExpanded,\n  })\n\n  watch(\n    () => props.label,\n    value => {\n      const prevValue = currentLabel.value\n      currentLabel.value = value || value === 0 ? value : prevValue\n    },\n  )\n\n  collapseState.registerPanel(state)\n\n  onBeforeUnmount(() => {\n    collapseState.unregisterPanel(state)\n  })\n} else {\n  watch(\n    () => props.expanded,\n    value => {\n      currentExpanded.value = value\n    },\n  )\n}\n\nconst ifDirectiveValue = computed(() => {\n  switch (alive.value) {\n    case true:\n    case 'always':\n      return true\n    case 'mounted':\n      return loaded.value\n    default:\n      return currentExpanded.value\n  }\n})\n\nconst showDirectiveValue = computed(() => {\n  return !alive.value || currentExpanded.value\n})\n\nif (!currentExpanded.value) {\n  watch(\n    currentExpanded,\n    () => {\n      loaded.value = true\n    },\n    { once: true },\n  )\n}\n\nfunction setExpanded(expanded: boolean) {\n  currentExpanded.value = expanded\n\n  emit('update:expanded', expanded)\n  emitEvent(props.onToggle, expanded)\n}\n\nfunction handleToggle(expanded = !currentExpanded.value) {\n  if (props.disabled) return\n\n  if (collapseState) {\n    // 由父级进行管理\n    collapseState.expandPanel(currentLabel.value, expanded)\n  } else {\n    setExpanded(expanded)\n  }\n}\n\ndefineExpose({\n  currentExpanded,\n  tab,\n  tabId,\n  bodyId,\n  handleToggle,\n})\n</script>\n\n<template>\n  <section :class=\"className\">\n    <button\n      :id=\"tabId\"\n      ref=\"tab\"\n      :class=\"nh.be('header')\"\n      type=\"button\"\n      role=\"tab\"\n      :aria-expanded=\"currentExpanded\"\n      :aria-controls=\"bodyId\"\n      :aria-describedby=\"bodyId\"\n      @click=\"handleToggle()\"\n    >\n      <div :class=\"nh.be('arrow')\">\n        <slot name=\"arrow\" :expanded=\"currentExpanded\">\n          <Renderer :renderer=\"props.slots.arrow\" :data=\"{ expanded: currentExpanded }\">\n            <Icon v-bind=\"icons.angleRight\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <slot name=\"title\">\n        <div v-if=\"props.icon\" :class=\"nh.be('icon')\">\n          <Icon :icon=\"props.icon\"></Icon>\n        </div>\n        {{ props.title }}\n      </slot>\n    </button>\n    <CollapseTransition>\n      <div\n        v-if=\"ifDirectiveValue\"\n        v-show=\"showDirectiveValue\"\n        :id=\"bodyId\"\n        :class=\"nh.be('body')\"\n        role=\"tabpanel\"\n        tabindex=\"0\"\n        :aria-labelledby=\"tabId\"\n      >\n        <div :class=\"nh.be('content')\" :style=\"props.contentStyle\">\n          <slot></slot>\n        </div>\n      </div>\n    </CollapseTransition>\n  </section>\n</template>\n"],"names":["_props","__props","props","useProps","value","createIconProp","emit","__emit","collapseState","inject","COLLAPSE_STATE","nh","useNameHelper","icons","useIcons","currentExpanded","ref","currentLabel","loaded","tab","id","getIndexId","tabId","computed","bodyId","useCard","useGhost","useArrowType","alive","className","state","reactive","setExpanded","watch","prevValue","onBeforeUnmount","ifDirectiveValue","showDirectiveValue","expanded","emitEvent","handleToggle","__expose","_createElementBlock","_createElementVNode","_normalizeClass","_unref","_renderSlot","_ctx","_createVNode","Renderer","Icon","_normalizeProps","_guardReactiveProps","_toDisplayString","CollapseTransition","_normalizeStyle"],"mappings":"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"}