{"version":3,"file":"layout-aside.mjs","sources":["../../../components/layout/layout-aside.tsx"],"sourcesContent":["import { Icon } from '@/components/icon'\r\nimport { Menu } from '@/components/menu'\r\nimport { NativeScroll } from '@/components/native-scroll'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  shallowReadonly,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { layoutAsideProps } from './props'\r\nimport { useLayoutState, useMediaQuery, useUpdateCounter } from './helper'\r\n\r\nimport type { MenuExposed } from '@/components/menu'\r\n\r\nexport default defineComponent({\r\n  name: 'LayoutAside',\r\n  props: layoutAsideProps,\r\n  emits: ['update:reduced', 'update:expanded'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const props = useProps('layoutAside', _props, {\r\n      tag: 'aside',\r\n      expanded: false,\r\n      reduced: false,\r\n      menus: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      menuProps: null,\r\n      logo: '',\r\n      signName: '',\r\n      fixed: 'lg',\r\n      signType: 'aside',\r\n    })\r\n\r\n    const nh = useNameHelper('layout')\r\n    const icons = useIcons()\r\n\r\n    const layoutState = useLayoutState()\r\n    const currentReduced = ref(props.reduced)\r\n    const currentExpanded = ref(props.expanded)\r\n    const scrollHeight = ref('100%')\r\n\r\n    const matched = useMediaQuery(toRef(props, 'fixed'))\r\n    const counter = useUpdateCounter()\r\n\r\n    const top = ref<HTMLElement>()\r\n    const bottom = ref<HTMLElement>()\r\n    const menu = ref<MenuExposed>()\r\n\r\n    const className = computed(() => {\r\n      return [\r\n        nh.be('aside'),\r\n        {\r\n          [nh.bs('vars')]: !layoutState.isLayout,\r\n          [nh.bem('aside', 'inherit')]: layoutState.isLayout || props.inherit,\r\n          [nh.bem('aside', 'fixed')]: matched.value,\r\n          [nh.bem('aside', 'expanded')]: currentExpanded.value,\r\n          [nh.bem('aside', 'reduced')]: currentReduced.value,\r\n          [nh.bem('aside', 'no-sign')]: props.signType !== 'aside',\r\n        },\r\n        layoutState.classes.aside,\r\n      ]\r\n    })\r\n    const hasTop = computed(() => {\r\n      return !!(props.logo || props.signName || slots.top)\r\n    })\r\n    const hasMenu = computed(() => {\r\n      return !!(props.menus?.length || props.menuProps?.router)\r\n    })\r\n\r\n    const slotParams = shallowReadonly(\r\n      reactive({\r\n        expanded: currentExpanded,\r\n        reduced: currentReduced,\r\n        toggleExpanded,\r\n        toggleReduced,\r\n      }),\r\n    )\r\n\r\n    expose({ menu, toggleExpanded, toggleReduced, expandMenuByLabel })\r\n\r\n    watch(\r\n      () => props.reduced,\r\n      value => {\r\n        currentReduced.value = value\r\n      },\r\n    )\r\n    watch(\r\n      () => props.expanded,\r\n      value => {\r\n        currentExpanded.value = value\r\n      },\r\n    )\r\n    watch(\r\n      matched,\r\n      value => {\r\n        layoutState.useExpand = !value\r\n        value && toggleExpanded(false)\r\n      },\r\n      { immediate: true },\r\n    )\r\n    watch(counter, () => computeScrollHeight)\r\n\r\n    function computeScrollHeight() {\r\n      let topHeight = 0\r\n      let bottomHeight = 0\r\n\r\n      if (top.value) {\r\n        topHeight = top.value.offsetHeight\r\n      }\r\n\r\n      if (bottom.value) {\r\n        bottomHeight = bottom.value.offsetHeight\r\n      }\r\n\r\n      if (topHeight || bottomHeight) {\r\n        scrollHeight.value = `calc(100% - ${topHeight + bottomHeight}px)`\r\n      } else {\r\n        scrollHeight.value = '100%'\r\n      }\r\n    }\r\n\r\n    function toggleExpanded(expanded = !currentExpanded.value) {\r\n      currentExpanded.value = expanded\r\n\r\n      emit('update:expanded', expanded)\r\n      emitEvent(props.onExpandedChange, expanded)\r\n    }\r\n\r\n    function toggleReduced(reduced = !currentReduced.value) {\r\n      currentReduced.value = reduced\r\n\r\n      emit('update:reduced', reduced)\r\n      emitEvent(props.onReducedChange, reduced)\r\n    }\r\n\r\n    function handleSignClick(event: MouseEvent) {\r\n      emitEvent(props.onSignClick, event)\r\n    }\r\n\r\n    function handleMenuSelect(label: string, meta: Record<string, any>) {\r\n      emitEvent(props.onMenuSelect, label, meta)\r\n    }\r\n\r\n    function expandMenuByLabel(label: string) {\r\n      menu.value?.expandItemByLabel(label)\r\n    }\r\n\r\n    return () => {\r\n      const CustomTag = (props.tag || 'aside') as any\r\n\r\n      return (\r\n        <CustomTag class={className.value}>\r\n          {hasTop.value && (\r\n            <div ref={top} class={[nh.be('aside-top'), layoutState.classes.asideTop]}>\r\n              {slots.top ? (\r\n                renderSlot(slots, 'top', slotParams)\r\n              ) : (\r\n                <div class={nh.be('sign')} onClick={handleSignClick}>\r\n                  {props.logo && (\r\n                    <div class={nh.be('logo')}>\r\n                      <img src={props.logo} alt={'Logo'} />\r\n                    </div>\r\n                  )}\r\n                  {props.signName && <span class={nh.be('sign-name')}>{props.signName}</span>}\r\n                </div>\r\n              )}\r\n            </div>\r\n          )}\r\n          <NativeScroll\r\n            class={[nh.be('aside-main'), layoutState.classes.main]}\r\n            use-y-bar\r\n            observe-deep\r\n            height={scrollHeight.value}\r\n          >\r\n            {slots.default ? (\r\n              renderSlot(slots, 'default', slotParams)\r\n            ) : hasMenu.value ? (\r\n              <Menu\r\n                ref={menu}\r\n                {...(props.menuProps || {})}\r\n                transfer\r\n                options={props.menus}\r\n                reduced={currentReduced.value}\r\n                onSelect={handleMenuSelect}\r\n              ></Menu>\r\n            ) : null}\r\n          </NativeScroll>\r\n          <div ref={bottom} class={[nh.be('aside-bottom'), layoutState.classes.asideBottom]}>\r\n            {slots.bottom ? (\r\n              renderSlot(slots, 'bottom', slotParams)\r\n            ) : (\r\n              <div class={nh.be('reduce-handler')} onClick={() => toggleReduced()}>\r\n                {currentReduced.value ? (\r\n                  <Icon {...icons.value.indent}></Icon>\r\n                ) : (\r\n                  <Icon {...icons.value.outdent}></Icon>\r\n                )}\r\n              </div>\r\n            )}\r\n          </div>\r\n          <div\r\n            class={[nh.be('expand-handler'), layoutState.classes.expandHandler]}\r\n            onClick={() => toggleExpanded()}\r\n          >\r\n            {slots.expand ? (\r\n              renderSlot(slots, 'expand', slotParams)\r\n            ) : (\r\n              <Icon {...icons.value.angleRight}></Icon>\r\n            )}\r\n          </div>\r\n        </CustomTag>\r\n      )\r\n    }\r\n  },\r\n})\r\n"],"names":["defineComponent","name","props","layoutAsideProps","emits","setup","_props","slots","emit","expose","useProps","tag","expanded","reduced","menus","default","static","menuProps","logo","signName","fixed","signType","nh","useNameHelper","icons","useIcons","layoutState","useLayoutState","currentReduced","ref","currentExpanded","scrollHeight","matched","useMediaQuery","toRef","counter","useUpdateCounter","top","bottom","menu","className","computed","be","bs","isLayout","bem","inherit","value","classes","aside","hasTop","hasMenu","length","router","slotParams","shallowReadonly","reactive","toggleExpanded","toggleReduced","expandMenuByLabel","watch","useExpand","immediate","computeScrollHeight","topHeight","bottomHeight","offsetHeight","emitEvent","onExpandedChange","onReducedChange","handleSignClick","event","onSignClick","handleMenuSelect","label","meta","onMenuSelect","expandItemByLabel","CustomTag","_createVNode","asideTop","renderSlot","NativeScroll","main","Menu","_mergeProps","asideBottom","onClick","Icon","indent","outdent","expandHandler","expand","angleRight"],"mappings":"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"}