{"version":3,"file":"panel.mjs","sources":["../../../../../../packages/components/dropdown-v2/src/panel.ts"],"sourcesContent":["import {\n  defineComponent,\n  getCurrentInstance,\n  h,\n  provide,\n  reactive,\n  ref,\n} from 'vue'\nimport { useNamespace } from 'element-plus'\nimport { buildProps, definePropType } from '@element-plus/utils'\nimport { DIV_TAG, UL_TAG } from '@element-plus/constants'\nimport SubItem from './sub-item'\nimport Item from './item'\nimport type { ElTooltipProps } from 'element-plus'\nimport type { ExtractPropTypes } from 'vue'\nimport type {\n  DropdownOption,\n  DropdownValue,\n  ItemClicked,\n  PanelProvider,\n  SubItemProvider,\n  SubItemReturn,\n} from './types'\n\nexport const panelProps = buildProps({\n  options: {\n    type: definePropType<DropdownOption[]>(Array),\n    default: () => [] as DropdownOption[],\n  },\n  showTimeout: {\n    type: definePropType<number>(Number),\n    default: 200,\n  },\n  hideTimeout: {\n    type: definePropType<number>(Number),\n    default: 200,\n  },\n  pure: {\n    type: definePropType<boolean>(Boolean),\n    default: false,\n  },\n  tooltipOptions: {\n    type: definePropType<Partial<ElTooltipProps>>(Object),\n  },\n  width: {\n    type: definePropType<string | number>([String, Number]),\n    default: '140px',\n  },\n  trigger: {\n    type: definePropType<string>(String),\n    default: 'hover',\n    values: ['hover', 'click'],\n  },\n} as const)\nexport type PanelProps = ExtractPropTypes<typeof panelProps>\n\nexport default defineComponent({\n  name: 'ElDropdownV2Panel',\n  inheritAttrs: false,\n  props: panelProps,\n  emits: ['open', 'close', 'select'],\n  setup(props, { emit, attrs, expose }) {\n    const ns = useNamespace('dropdown-v2')\n    const instance = getCurrentInstance()!\n\n    const mouseInChild = ref(false)\n    const openedItems = ref<PanelProvider['openedItems']>([])\n    const activeIndex = ref<PanelProvider['activeIndex']>()\n    const subItemRefs = ref<Record<string, SubItemReturn>>({})\n\n    const openItem: PanelProvider['openItem'] = (value, valuePath) => {\n      if (openedItems.value.includes(value)) return\n      openedItems.value.push(value)\n      emit('open', value, valuePath)\n    }\n\n    const close = (value: DropdownValue) => {\n      const i = openedItems.value.indexOf(value)\n      if (i !== -1) {\n        openedItems.value.splice(i, 1)\n      }\n    }\n\n    const closeItem: PanelProvider['closeItem'] = (value, valuePath) => {\n      close(value)\n      emit('close', value, valuePath)\n    }\n\n    const closeSubItem = (value: DropdownValue, valuePath: DropdownValue[]) => {\n      const items = Object.values(subItemRefs.value).filter(\n        (_: SubItemReturn) => valuePath.includes(_.value)\n      )\n      items.forEach((_: SubItemReturn) => _.hide())\n    }\n\n    const handleItemClick = (item: ItemClicked) => {\n      openedItems.value = []\n      activeIndex.value = item.value\n      emitSelect(item)\n    }\n\n    const emitSelect = (item: ItemClicked) => {\n      const { value, valuePath } = item\n      emit('select', value, valuePath, { value, valuePath })\n    }\n\n    // TODO: TYPE PanelProvider\n    provide<any>(\n      'rootPanel',\n      reactive({\n        props,\n        openedItems,\n        activeIndex,\n        openItem,\n        closeItem,\n        handleItemClick,\n        closeSubItem,\n        emitSelect,\n      })\n    )\n\n    provide<SubItemProvider>(`subItem:${instance.uid}`, {\n      mouseInChild,\n      level: 0,\n    })\n\n    expose({\n      close,\n      openItem,\n      closeItem,\n    })\n\n    return () => {\n      const renderChilds = (options: DropdownOption[] = [], level: number) => {\n        return options.map((option: DropdownOption) => {\n          if (Array.isArray(option.children) && option.children.length) {\n            return h(\n              SubItem,\n              {\n                level,\n                option,\n                ref: (expose: any) => {\n                  subItemRefs['value'][option.value] = expose\n                },\n              },\n              {\n                default: () => renderChilds(option.children, level + 1),\n              }\n            )\n          } else {\n            return h(Item, { option, level })\n          }\n        })\n      }\n\n      return props.pure\n        ? h(\n            DIV_TAG,\n            { class: [ns.b('panel'), attrs.class] },\n            renderChilds(props.options, 0)\n          )\n        : h(DIV_TAG, { class: [ns.b('panel'), attrs.class] }, [\n            h(\n              UL_TAG,\n              { class: [ns.b('list'), ns.b('panel-content')] },\n              renderChilds(props.options, 0)\n            ),\n          ])\n    }\n  },\n})\n"],"names":["expose"],"mappings":"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"}