element-plus
Version:
A Component Library for Vue 3
1 lines • 5.72 kB
Source Map (JSON)
{"version":3,"file":"option-group.mjs","sources":["../../../../../../packages/components/select/src/option-group.vue"],"sourcesContent":["<template>\n <ul v-show=\"visible\" ref=\"groupRef\" :class=\"ns.be('group', 'wrap')\">\n <li :class=\"ns.be('group', 'title')\">{{ label }}</li>\n <li>\n <ul :class=\"ns.b('group')\">\n <slot />\n </ul>\n </li>\n </ul>\n</template>\n\n<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n isVNode,\n onMounted,\n provide,\n reactive,\n ref,\n toRefs,\n} from 'vue'\nimport { useMutationObserver } from '@vueuse/core'\nimport { ensureArray, isArray } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport { selectGroupKey } from './token'\n\nimport type { Component, VNode, VNodeArrayChildren } from 'vue'\nimport type { OptionInternalInstance, OptionPublicInstance } from './type'\n\nexport default defineComponent({\n name: 'ElOptionGroup',\n componentName: 'ElOptionGroup',\n\n props: {\n /**\n * @description name of the group\n */\n label: String,\n /**\n * @description whether to disable all options in this group\n */\n disabled: Boolean,\n },\n setup(props) {\n const ns = useNamespace('select')\n const groupRef = ref<HTMLElement>()\n const instance = getCurrentInstance()!\n const children = ref<OptionPublicInstance[]>([])\n\n provide(\n selectGroupKey,\n reactive({\n ...toRefs(props),\n })\n )\n\n const visible = computed(() =>\n children.value.some((option) => option.visible === true)\n )\n\n const isOption = (\n node: VNode\n ): node is VNode & { component: OptionInternalInstance } =>\n (node.type as Component).name === 'ElOption' && !!node.component?.proxy\n\n // get all instances of options\n const flattedChildren = (node: VNode | VNodeArrayChildren) => {\n const nodes = ensureArray(node) as VNode[] | VNodeArrayChildren\n const children: OptionPublicInstance[] = []\n\n nodes.forEach((child) => {\n if (!isVNode(child)) return\n\n if (isOption(child)) {\n children.push(child.component.proxy)\n } else if (isArray(child.children) && child.children.length) {\n children.push(...flattedChildren(child.children))\n } else if (child.component?.subTree) {\n children.push(...flattedChildren(child.component.subTree))\n }\n })\n\n return children\n }\n\n const updateChildren = () => {\n children.value = flattedChildren(instance.subTree)\n }\n\n onMounted(() => {\n updateChildren()\n })\n\n useMutationObserver(groupRef, updateChildren, {\n attributes: true,\n subtree: true,\n childList: true,\n })\n\n return {\n groupRef,\n visible,\n ns,\n }\n },\n})\n</script>\n"],"names":["ensureArray","children","_withDirectives","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_renderSlot"],"mappings":"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"}