{"version":3,"file":"useMenuContext.cjs","sources":["../../../../../../../packages/components/menu/src/hooks/useMenuContext.ts"],"sourcesContent":["import type { CSSMotionProps, Key } from '@antdv/types';\n\nimport type { ComputedRef, InjectionKey, PropType, Ref } from 'vue';\nimport type { BuiltinPlacements, MenuClickEventHandler, MenuMode, MenuTheme, TriggerSubMenuAction } from '../interface';\nimport { defineComponent, inject, provide, toRef } from 'vue';\n\nexport interface StoreMenuInfo {\n  eventKey: string\n  key: Key\n  parentEventKeys: Ref<string[]>\n  childrenEventKeys?: Ref<string[]>\n  isLeaf?: boolean\n  parentKeys: Ref<Key[]>\n}\nexport interface MenuContextProps {\n  rootClassName: Ref<string>\n  registerMenuInfo: (key: string, info: StoreMenuInfo) => void\n  unRegisterMenuInfo: (key: string) => void\n  prefixCls: ComputedRef<string>\n  openKeys: Ref<Key[]>\n  selectedKeys: Ref<Key[]>\n\n  selectedSubMenuKeys: Ref<Array<number | string>>\n  rtl?: ComputedRef<boolean>\n\n  inlineCollapsed: Ref<boolean>\n  theme?: ComputedRef<MenuTheme>\n\n  siderCollapsed?: Ref<boolean>\n\n  // // Mode\n  mode: Ref<MenuMode>\n\n  // // Disabled\n  disabled?: ComputedRef<boolean>\n  // // Used for overflow only. Prevent hidden node trigger open\n  overflowDisabled?: Ref<boolean>\n\n  // // Active\n  activeKeys: Ref<Key[]>\n  changeActiveKeys: (keys: Key[]) => void\n  // onActive: (key: string) => void;\n  // onInactive: (key: string) => void;\n\n  // // Selection\n  // selectedKeys: string[];\n\n  // // Level\n  inlineIndent: ComputedRef<number>\n\n  // // Motion\n  motion?: ComputedRef<CSSMotionProps | null>\n  defaultMotions?: ComputedRef<Partial<{\n    [key in MenuMode | 'other']: CSSMotionProps | ((name?: string) => CSSMotionProps);\n  }> | null>\n\n  // // Popup\n  subMenuOpenDelay: ComputedRef<number>\n  subMenuCloseDelay: ComputedRef<number>\n  forceSubMenuRender: ComputedRef<boolean>\n  builtinPlacements?: ComputedRef<BuiltinPlacements>\n  triggerSubMenuAction?: ComputedRef<TriggerSubMenuAction>\n\n  // // Icon\n  // itemIcon?: RenderIconType;\n  expandIcon?: ComputedRef<(p?: { isOpen: boolean, [key: string]: any }) => any>\n\n  // // Function\n  onItemClick: MenuClickEventHandler\n  onOpenChange: (key: Key, open: boolean) => void\n  getPopupContainer: ComputedRef<(node: HTMLElement) => HTMLElement>\n}\n\nconst MenuContextKey: InjectionKey<MenuContextProps> = Symbol('menuContextKey');\n\nfunction useProvideMenu(props: MenuContextProps) {\n  provide(MenuContextKey, props);\n}\n\nfunction useInjectMenu() {\n  return inject(MenuContextKey);\n}\n\nconst ForceRenderKey: InjectionKey<boolean> = Symbol('ForceRenderKey');\n\nexport function useProvideForceRender(forceRender: boolean) {\n  provide(ForceRenderKey, forceRender);\n}\n\nexport function useInjectForceRender() {\n  return inject(ForceRenderKey, false);\n}\n\nconst MenuFirstLevelContextKey: InjectionKey<boolean> = Symbol('menuFirstLevelContextKey');\nfunction useProvideFirstLevel(firstLevel: boolean) {\n  provide(MenuFirstLevelContextKey, firstLevel);\n}\n\nfunction useInjectFirstLevel() {\n  return inject(MenuFirstLevelContextKey, true);\n}\n\nconst MenuContextProvider = defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'MenuContextProvider',\n  inheritAttrs: false,\n  props: {\n    mode: { type: String as PropType<MenuMode>, default: undefined },\n    overflowDisabled: { type: Boolean, default: undefined },\n  },\n  setup(props, { slots }) {\n    const menuContext = useInjectMenu();\n    const newContext = { ...menuContext };\n    // 确保传入的属性不会动态增删\n    // 不需要 watch 变化\n    if (props.mode !== undefined)\n      newContext.mode = toRef(props, 'mode');\n\n    if (props.overflowDisabled !== undefined)\n      newContext.overflowDisabled = toRef(props, 'overflowDisabled');\n\n    useProvideMenu(newContext);\n    return () => slots.default?.();\n  },\n});\n\nexport {\n  MenuContextKey,\n  MenuContextProvider,\n  MenuFirstLevelContextKey,\n  useInjectFirstLevel,\n  useInjectMenu,\n  useProvideFirstLevel,\n  useProvideMenu,\n};\n\nexport default useProvideMenu;\n"],"names":["provide","inject","defineComponent","toRef"],"mappings":";;;;;;AAyEM,MAAA,cAAA,GAAiD,OAAO,gBAAgB,EAAA;AAE9E,SAAS,eAAe,KAAyB,EAAA;AAC/C,EAAAA,WAAA,CAAQ,gBAAgB,KAAK,CAAA,CAAA;AAC/B,CAAA;AAEA,SAAS,aAAgB,GAAA;AACvB,EAAA,OAAOC,WAAO,cAAc,CAAA,CAAA;AAC9B,CAAA;AAEA,MAAM,cAAA,GAAwC,OAAO,gBAAgB,CAAA,CAAA;AAE9D,SAAS,sBAAsB,WAAsB,EAAA;AAC1D,EAAAD,WAAA,CAAQ,gBAAgB,WAAW,CAAA,CAAA;AACrC,CAAA;AAEO,SAAS,oBAAuB,GAAA;AACrC,EAAO,OAAAC,UAAA,CAAO,gBAAgB,KAAK,CAAA,CAAA;AACrC,CAAA;AAEM,MAAA,wBAAA,GAAkD,OAAO,0BAA0B,EAAA;AACzF,SAAS,qBAAqB,UAAqB,EAAA;AACjD,EAAAD,WAAA,CAAQ,0BAA0B,UAAU,CAAA,CAAA;AAC9C,CAAA;AAEA,SAAS,mBAAsB,GAAA;AAC7B,EAAO,OAAAC,UAAA,CAAO,0BAA0B,IAAI,CAAA,CAAA;AAC9C,CAAA;AAEA,MAAM,sBAAsBC,mBAAgB,CAAA;AAAA,EAC1C,YAAA,EAAc,EAAE,IAAA,EAAM,CAAE,EAAA;AAAA,EACxB,IAAM,EAAA,qBAAA;AAAA,EACN,YAAc,EAAA,KAAA;AAAA,EACd,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,EAAE,IAAM,EAAA,MAAA,EAA8B,SAAS,KAAU,CAAA,EAAA;AAAA,IAC/D,gBAAkB,EAAA,EAAE,IAAM,EAAA,OAAA,EAAS,SAAS,KAAU,CAAA,EAAA;AAAA,GACxD;AAAA,EACA,KAAM,CAAA,KAAA,EAAO,EAAE,KAAA,EAAS,EAAA;AACtB,IAAA,MAAM,cAAc,aAAc,EAAA,CAAA;AAClC,IAAM,MAAA,UAAA,GAAa,EAAE,GAAG,WAAY,EAAA,CAAA;AAGpC,IAAA,IAAI,MAAM,IAAS,KAAA,KAAA,CAAA;AACjB,MAAW,UAAA,CAAA,IAAA,GAAOC,SAAM,CAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AAEvC,IAAA,IAAI,MAAM,gBAAqB,KAAA,KAAA,CAAA;AAC7B,MAAW,UAAA,CAAA,gBAAA,GAAmBA,SAAM,CAAA,KAAA,EAAO,kBAAkB,CAAA,CAAA;AAE/D,IAAA,cAAA,CAAe,UAAU,CAAA,CAAA;AACzB,IAAA,OAAO,MAAG;AA1Hd,MAAA,IAAA,EAAA,CAAA;AA0HiB,MAAA,OAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GACf;AACF,CAAC;;;;;;;;;;;;;"}