{"version":3,"file":"menu.mjs","sources":["../../../components/menu/menu.tsx"],"sourcesContent":["import { defineComponent, ref, computed, provide, watchEffect, watch, onMounted, toRefs } from 'vue';\nimport props from './props';\nimport { MenuValue } from './type';\nimport { TdMenuInterface, TdOpenType } from './types';\nimport { useVModel, useContent, useTNodeJSX, usePrefixClass, useDefaultValue } from '@tdesign/shared-hooks';\nimport { VMenu } from './utils';\nimport log from '@tdesign/common-js/log/log';\n\nimport { isArray, isNumber } from 'lodash-es';\n\nexport default defineComponent({\n  name: 'TMenu',\n  props: { ...props, onCollapsed: Function },\n  setup(props, ctx) {\n    const classPrefix = usePrefixClass();\n    const renderTNodeJSX = useTNodeJSX();\n    const renderContent = useContent();\n    const mode = ref(props.expandType);\n    const theme = computed(() => props.theme);\n    const isMutex = computed(() => props.expandMutex);\n    const collapsed = computed(() => props.collapsed);\n    const menuClass = computed(() => [\n      `${classPrefix.value}-default-menu`,\n      `${classPrefix.value}-menu--${props.theme}`,\n      {\n        [`${classPrefix.value}-is-collapsed`]: props.collapsed,\n      },\n    ]);\n    const innerClasses = computed(() => [`${classPrefix.value}-menu`, `${classPrefix.value}-menu--scroll`]);\n    const expandWidth = computed(() => {\n      const { width } = props;\n      const format = (val: string | number) => (isNumber(val) ? `${val}px` : val);\n      if (isArray(width)) return width.map((item) => format(item));\n\n      return [format(width), '64px'];\n    });\n\n    const styles = computed(() => ({\n      height: '100%',\n      width: props.collapsed ? expandWidth.value[1] : expandWidth.value[0],\n    }));\n\n    const { value, modelValue, expanded } = toRefs(props);\n    const [activeValue, setActiveValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n    const [expandValues, setExpand] = useDefaultValue(expanded, props.defaultExpanded, props.onExpand, 'expanded');\n    const activeValues = ref([]);\n\n    watchEffect(() => {\n      mode.value = props.collapsed ? 'popup' : props.expandType;\n      props.onCollapsed?.({ collapsed: props.collapsed });\n    });\n\n    const vMenu = new VMenu({ isMutex, expandValues: expandValues.value ? [...expandValues.value] : [] });\n    provide<TdMenuInterface>('TdMenu', {\n      activeValue,\n      activeValues,\n      expandValues,\n      mode,\n      theme,\n      isHead: false,\n      vMenu,\n      collapsed,\n      select: (value: MenuValue) => {\n        if (value !== activeValue.value) {\n          setActiveValue(value);\n        }\n      },\n      open: (value: MenuValue, type: TdOpenType) => {\n        if (mode.value === 'normal') {\n          setExpand(vMenu.expand(value));\n        } else if (type === 'add') {\n          if (expandValues.value.indexOf(value) === -1) {\n            // 可能初始expanded里包含了该value\n            setExpand([...expandValues.value, value]);\n          }\n        } else if (type === 'remove') {\n          const index = expandValues.value.indexOf(value);\n          const tmp = [...expandValues.value];\n          tmp.splice(index, 1);\n          setExpand(tmp);\n        }\n      },\n    });\n\n    watch(\n      () => props.expanded,\n      (value) => {\n        vMenu.expandValues = new Set(value);\n      },\n    );\n\n    watch(\n      () => props.collapsed,\n      (newValue, oldValue) => {\n        if (!newValue && oldValue) {\n          // 如果重新打开菜单，就将原本已经展开的子菜单重新展开\n          setExpand([...vMenu.expandValues]);\n        }\n      },\n    );\n\n    watch(activeValue, (value: MenuValue) => {\n      activeValues.value = vMenu.select(value);\n    });\n\n    watchEffect(() => {\n      if (ctx.slots.options) {\n        log.warnOnce('TMenu', '`options` slot is going to be deprecated, please use `operations` for slot instead.');\n      }\n    });\n\n    onMounted(() => {\n      activeValues.value = vMenu.select(activeValue.value);\n    });\n\n    return () => {\n      const operations = renderContent('operations', 'options');\n      const logo = renderTNodeJSX('logo');\n\n      return (\n        <div class={menuClass.value} style={styles.value}>\n          <div class={`${classPrefix.value}-default-menu__inner`}>\n            {logo && <div class={`${classPrefix.value}-menu__logo`}>{logo}</div>}\n            <ul class={innerClasses.value}>{renderContent('default', 'content')}</ul>\n            {operations && <div class={`${classPrefix.value}-menu__operations`}>{operations}</div>}\n          </div>\n        </div>\n      );\n    };\n  },\n});\n"],"names":["defineComponent","name","props","_objectSpread","onCollapsed","Function","setup","ctx","classPrefix","usePrefixClass","renderTNodeJSX","useTNodeJSX","renderContent","useContent","mode","ref","expandType","theme","computed","isMutex","expandMutex","collapsed","menuClass","concat","value","_defineProperty","innerClasses","expandWidth","width","format","val","isNumber","isArray","map","item","styles","height","_toRefs","toRefs","modelValue","expanded","_useVModel","useVModel","defaultValue","onChange","_useVModel2","_slicedToArray","activeValue","setActiveValue","_useDefaultValue","useDefaultValue","defaultExpanded","onExpand","_useDefaultValue2","expandValues","setExpand","activeValues","watchEffect","_props2$onCollapsed","vMenu","VMenu","_toConsumableArray","provide","isHead","select","open","type","expand","indexOf","index","tmp","splice","watch","Set","newValue","oldValue","slots","options","log","warnOnce","onMounted","operations","logo","_createVNode"],"mappings":"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"}