{"version":3,"file":"layout.mjs","sources":["../../../components/layout/layout.tsx"],"sourcesContent":["import { Masker } from '@/components/masker'\r\nimport { NativeScroll } from '@/components/native-scroll'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  provide,\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, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\r\nimport { createSlotRender, useMounted } from '@vexip-ui/hooks'\r\nimport { getYBorder, isClient, runQueueFrame } from '@vexip-ui/utils'\r\nimport LayoutMain from './layout-main'\r\nimport LayoutHeader from './layout-header'\r\nimport LayoutFooter from './layout-footer'\r\nimport LayoutAside from './layout-aside'\r\nimport { layoutProps } from './props'\r\nimport { useMediaQuery } from './helper'\r\nimport { LAYOUT_STATE } from './symbol'\r\n\r\nimport type { NativeScrollExposed } from '@/components/native-scroll'\r\nimport type {\r\n  LayoutAsideExposed,\r\n  LayoutConfig,\r\n  LayoutHeaderExposed,\r\n  LayoutSignType,\r\n} from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'Layout',\r\n  props: layoutProps,\r\n  emits: [\r\n    'update:expanded',\r\n    'update:reduced',\r\n    'update:sign-type',\r\n    'update:color',\r\n    'update:dark-mode',\r\n  ],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const props = useProps('layout', _props, {\r\n      locale: null,\r\n      noAside: false,\r\n      footer: false,\r\n      tag: 'section',\r\n      menus: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      menuProps: null,\r\n      logo: '',\r\n      signName: '',\r\n      config: () => ['nav', 'theme', 'color'] as LayoutConfig[],\r\n      user: null,\r\n      actions: () => [],\r\n      expanded: false,\r\n      reduced: false,\r\n      avatarCircle: false,\r\n      signType: 'aside',\r\n      headerFixed: 'lg',\r\n      asideFixed: 'lg',\r\n      copyright: '',\r\n      links: () => [],\r\n      colors: () => ['#339af0', '#f03e3e', '#be4bdb', '#7950f2', '#1b9e44', '#f76707'],\r\n      color: '',\r\n      miniHeaderSign: 'lg',\r\n      verticalLinks: 'md',\r\n      darkMode: null,\r\n      fixedMain: false,\r\n      fitWindow: false,\r\n      innerClasses: () => ({}),\r\n      noHeader: false,\r\n      noMasker: false,\r\n    })\r\n\r\n    const nh = useNameHelper('layout')\r\n    const locked = ref(false)\r\n    // const asideActive = ref(!props.noAside)\r\n    const asideExpanded = ref(props.expanded)\r\n    const asideReduced = ref(props.reduced)\r\n    const currentSignType = ref<LayoutSignType>(props.signType)\r\n    const userDropped = ref(false)\r\n    const currentColor = ref(props.color)\r\n\r\n    const { isMounted } = useMounted('frame')\r\n\r\n    const section = ref<HTMLElement>()\r\n    const scroll = ref<NativeScrollExposed>()\r\n    const header = ref<LayoutHeaderExposed>()\r\n    const aside = ref<LayoutAsideExposed>()\r\n\r\n    const affixMatched = useMediaQuery(toRef(props, 'headerFixed'))\r\n    const expandMatched = useMediaQuery(toRef(props, 'asideFixed'))\r\n    const signNameMatched = useMediaQuery(toRef(props, 'miniHeaderSign'))\r\n\r\n    const state = reactive({\r\n      isLayout: true,\r\n      locked: computed(() => locked.value),\r\n      affixed: false,\r\n      scrollY: 0,\r\n      affixMatched,\r\n      expandMatched,\r\n      useExpand: false,\r\n      expanded: asideExpanded,\r\n      reduced: asideReduced,\r\n      navConfig: computed(() => !props.noAside),\r\n      classes: toRef(props, 'innerClasses'),\r\n      changeInLock,\r\n    })\r\n\r\n    const isHeaderMain = computed(() => !props.noHeader && currentSignType.value === 'header')\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        {\r\n          [nh.bm('inherit')]: props.inherit,\r\n          [nh.bm('no-aside')]: props.noAside,\r\n          [nh.bm('no-header')]: props.noHeader,\r\n          [nh.bm('header-main')]: isHeaderMain.value,\r\n          [nh.bm('locked')]: !isMounted.value || locked.value,\r\n          [nh.bm('fit-window')]: props.fitWindow,\r\n        },\r\n      ]\r\n    })\r\n    const rootEl = computed(() => {\r\n      return isClient && isMounted.value ? document.documentElement : null\r\n    })\r\n    const signInHeader = computed(() => {\r\n      return props.noAside || isHeaderMain.value || state.useExpand\r\n    })\r\n    const menu = computed(() => aside.value?.menu || header.value?.menu)\r\n    const isDark = ref(props.darkMode)\r\n    const viewHeight = ref('100%')\r\n\r\n    const style = computed(() => {\r\n      return {\r\n        [nh.cv('view-height')]: props.fitWindow ? '100vh' : viewHeight.value,\r\n      }\r\n    })\r\n\r\n    const getIndex = useZIndex()\r\n    const zIndex = ref(asideExpanded.value ? getIndex() : 0)\r\n\r\n    const slotParams = shallowReadonly(\r\n      reactive({\r\n        expanded: asideExpanded,\r\n        reduced: asideReduced,\r\n        toggleExpanded,\r\n        toggleReduced,\r\n      }),\r\n    )\r\n\r\n    provide(LAYOUT_STATE, state)\r\n\r\n    expose({ scroll, menu, toggleExpanded, toggleReduced, expandMenuByLabel })\r\n\r\n    watch(affixMatched, value => {\r\n      state.affixed = !value && state.scrollY >= 50\r\n    })\r\n    watch(\r\n      () => props.expanded,\r\n      value => {\r\n        asideExpanded.value = value\r\n      },\r\n    )\r\n    watch(asideExpanded, value => {\r\n      if (state.useExpand && value) {\r\n        zIndex.value = getIndex()\r\n      }\r\n    })\r\n    watch(\r\n      () => props.reduced,\r\n      value => {\r\n        asideReduced.value = value\r\n      },\r\n    )\r\n    // watch(\r\n    //   () => props.noAside,\r\n    //   value => {\r\n    //     changeInLock(() => (asideActive.value = value))\r\n    //   }\r\n    // )\r\n    watch(currentSignType, value => {\r\n      emit('update:sign-type', value)\r\n      emitEvent(props.onNavChange, value)\r\n    })\r\n    watch(\r\n      () => props.color,\r\n      value => {\r\n        currentColor.value = value || props.colors?.[0] || getBaseColor()\r\n      },\r\n    )\r\n    watch(currentColor, value => {\r\n      emit('update:color', value)\r\n      emitEvent(props.onColorChange, value)\r\n    })\r\n    watch(\r\n      () => props.darkMode,\r\n      value => {\r\n        isDark.value = value\r\n      },\r\n    )\r\n\r\n    function getBaseColor() {\r\n      if (rootEl.value) {\r\n        return getComputedStyle(rootEl.value).getPropertyValue('--vxp-color-primary-base')\r\n      }\r\n\r\n      return '#339af0'\r\n    }\r\n\r\n    function toggleExpanded(expanded = !asideReduced.value) {\r\n      asideExpanded.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 = !asideReduced.value) {\r\n      asideReduced.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 handleToggleTheme(isDark: boolean) {\r\n      emit('update:dark-mode', isDark)\r\n      emitEvent(props.onToggleTheme, isDark)\r\n    }\r\n\r\n    function handleUserAction(label: string, meta: Record<string, any>) {\r\n      emitEvent(props.onUserAction, label, meta)\r\n    }\r\n\r\n    function expandMenuByLabel(label: string) {\r\n      menu.value?.expandItemByLabel(label)\r\n    }\r\n\r\n    function handleResize() {\r\n      if (scroll.value?.$el) {\r\n        viewHeight.value = `${scroll.value.$el.offsetHeight - getYBorder(scroll.value.$el)}px`\r\n      }\r\n\r\n      emitEvent(props.onContentResize)\r\n    }\r\n\r\n    let cancelChange: (() => void) | undefined\r\n\r\n    function changeInLock(doChange: () => void) {\r\n      cancelChange?.()\r\n      cancelChange = runQueueFrame([\r\n        () => (locked.value = true),\r\n        doChange,\r\n        () => (locked.value = false),\r\n      ])\r\n    }\r\n\r\n    function stopAndPrevent(event: Event) {\r\n      event.stopPropagation()\r\n      event.preventDefault()\r\n    }\r\n\r\n    function renderSign() {\r\n      if (!props.logo && !props.signName && !slots.sign) {\r\n        return null\r\n      }\r\n\r\n      if (slots.sign) {\r\n        return renderSlot(slots, 'sign', slotParams)\r\n      }\r\n\r\n      const showSignName = props.signName && !(signInHeader.value && !signNameMatched.value)\r\n\r\n      return (\r\n        <div\r\n          class={[nh.be('sign'), !showSignName && nh.bem('sign', 'logo-only')]}\r\n          onClick={handleSignClick}\r\n        >\r\n          {[\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            showSignName && <span class={nh.be('sign-name')}>{props.signName}</span>,\r\n          ]}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderHeader() {\r\n      if (props.noHeader) {\r\n        return <header role={'none'} aria-hidden style={'display: none'}></header>\r\n      }\r\n\r\n      if (slots.header) {\r\n        return renderSlot(slots, 'header', slotParams)\r\n      }\r\n\r\n      return (\r\n        <LayoutHeader\r\n          ref={header}\r\n          v-model:sign-type={currentSignType.value}\r\n          v-model:user-dropped={userDropped.value}\r\n          v-model:color={currentColor.value}\r\n          v-model:dark-mode={isDark.value}\r\n          inherit\r\n          locale={props.locale}\r\n          user={props.user}\r\n          actions={props.actions}\r\n          config={props.config}\r\n          avatar-circle={props.avatarCircle}\r\n          menus={props.noAside ? props.menus : []}\r\n          menu-props={props.noAside ? props.menuProps : null}\r\n          colors={props.colors}\r\n          onUserAction={handleUserAction}\r\n          onExpandedChange={toggleExpanded}\r\n          onReducedChange={toggleReduced}\r\n          onMenuSelect={handleMenuSelect}\r\n          onToggleTheme={handleToggleTheme}\r\n          {...{\r\n            onWheel: stopAndPrevent,\r\n            onMousemove: stopAndPrevent,\r\n          }}\r\n        >\r\n          {{\r\n            left: createSlotRender(slots, ['header-left', 'headerLeft'], () =>\r\n              signInHeader.value ? renderSign() : null,\r\n            ),\r\n            default: createSlotRender(slots, ['header-main', 'headerMain']),\r\n            right: createSlotRender(slots, ['header-right', 'headerRight']),\r\n            user: createSlotRender(slots, ['header-user', 'headerUser']),\r\n            avatar: createSlotRender(slots, ['header-avatar', 'headerAvatar']),\r\n          }}\r\n        </LayoutHeader>\r\n      )\r\n    }\r\n\r\n    function renderAside() {\r\n      if (props.noAside) {\r\n        return <div role={'none'} aria-hidden style={'display: none'}></div>\r\n      }\r\n\r\n      return (\r\n        <div\r\n          class={[\r\n            nh.be('sidebar'),\r\n            !expandMatched.value && nh.bem('sidebar', 'away'),\r\n            props.innerClasses.sidebar,\r\n          ]}\r\n          style={{ zIndex: state.useExpand ? zIndex.value + 1 : undefined }}\r\n          onWheel={stopAndPrevent}\r\n          onMousemove={stopAndPrevent}\r\n        >\r\n          {slots.aside ? (\r\n            renderSlot(slots, 'aside', slotParams)\r\n          ) : (\r\n            <LayoutAside\r\n              ref={aside}\r\n              v-model:expanded={asideExpanded.value}\r\n              v-model:reduced={asideReduced.value}\r\n              inherit\r\n              sign-type={isHeaderMain.value ? 'header' : 'aside'}\r\n              menus={props.menus}\r\n              menu-props={props.menuProps}\r\n              fixed={props.asideFixed}\r\n              onExpandedChange={toggleExpanded}\r\n              onReducedChange={toggleReduced}\r\n              onMenuSelect={handleMenuSelect}\r\n            >\r\n              {{\r\n                top: createSlotRender(slots, ['aside-top', 'asideTop'], () =>\r\n                  !signInHeader.value ? renderSign() : null,\r\n                ),\r\n                default: createSlotRender(slots, ['aside-main', 'asideMain']),\r\n                bottom: createSlotRender(slots, ['aside-bottom', 'asideBottom']),\r\n                expand: createSlotRender(slots, ['aside-expand', 'asideExpand']),\r\n              }}\r\n            </LayoutAside>\r\n          )}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderMain() {\r\n      if (slots.default) {\r\n        return renderSlot(slots, 'default', slotParams)\r\n      }\r\n\r\n      return (\r\n        <LayoutMain fixed={props.fixedMain}>\r\n          {{\r\n            default: createSlotRender(slots, ['main']),\r\n          }}\r\n        </LayoutMain>\r\n      )\r\n    }\r\n\r\n    function renderFooter() {\r\n      if (slots.footer) {\r\n        return renderSlot(slots, 'footer', slotParams)\r\n      }\r\n\r\n      return (\r\n        <LayoutFooter\r\n          inherit\r\n          copyright={props.copyright}\r\n          links={props.links}\r\n          vertical-links={props.verticalLinks}\r\n        >\r\n          {{\r\n            links: createSlotRender(slots, ['footer-links', 'footerLinks']),\r\n            copyright: createSlotRender(slots, ['footer-copyright', 'footerCopyright']),\r\n          }}\r\n        </LayoutFooter>\r\n      )\r\n    }\r\n\r\n    function renderMasker() {\r\n      if (props.noMasker || !state.useExpand) return null\r\n\r\n      if (slots.masker) {\r\n        return renderSlot(slots, 'masker', slotParams)\r\n      }\r\n\r\n      return (\r\n        <Masker\r\n          v-model:active={asideExpanded.value}\r\n          class={nh.be('masker')}\r\n          inner\r\n          closable\r\n          auto-remove\r\n          transfer={false}\r\n          style={{ zIndex: zIndex.value }}\r\n          onToggle={toggleExpanded}\r\n        ></Masker>\r\n      )\r\n    }\r\n\r\n    function renderWrapper() {\r\n      const CustomTag = (props.tag || 'section') as any\r\n\r\n      return (\r\n        <CustomTag\r\n          class={[\r\n            nh.be('wrapper'),\r\n            props.fixedMain && nh.bem('wrapper', 'fixed'),\r\n            props.innerClasses.wrapper,\r\n          ]}\r\n        >\r\n          {isHeaderMain.value && renderHeader()}\r\n          {renderAside()}\r\n          <section\r\n            ref={section}\r\n            class={[\r\n              nh.be('section'),\r\n              {\r\n                [nh.bem('section', 'away')]: expandMatched.value,\r\n                [nh.bem('section', 'reduced')]: asideReduced.value,\r\n                [nh.bem('section', 'locked')]: locked.value,\r\n                [nh.bem('section', 'fixed')]: props.fixedMain,\r\n              },\r\n              props.innerClasses.section,\r\n            ]}\r\n          >\r\n            {!isHeaderMain.value && renderHeader()}\r\n            {renderMain()}\r\n            {props.footer && renderFooter()}\r\n          </section>\r\n          {renderMasker()}\r\n        </CustomTag>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      if (props.fitWindow) {\r\n        return (\r\n          <section class={className.value} style={style.value}>\r\n            <ResizeObserver throttle onResize={handleResize}>\r\n              {renderWrapper()}\r\n            </ResizeObserver>\r\n          </section>\r\n        )\r\n      }\r\n\r\n      return (\r\n        <NativeScroll\r\n          ref={scroll}\r\n          class={className.value}\r\n          inherit={props.inherit}\r\n          use-y-bar\r\n          observe-deep\r\n          bar-class={[nh.be('scrollbar'), props.innerClasses.scrollbar]}\r\n          style={style.value}\r\n          onResize={handleResize}\r\n        >\r\n          {renderWrapper()}\r\n        </NativeScroll>\r\n      )\r\n    }\r\n  },\r\n})\r\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","props","layoutProps","emits","setup","_props","slots","emit","expose","useProps","locale","noAside","footer","tag","menus","default","static","menuProps","logo","signName","config","user","actions","expanded","reduced","avatarCircle","signType","headerFixed","asideFixed","copyright","links","colors","color","miniHeaderSign","verticalLinks","darkMode","fixedMain","fitWindow","innerClasses","noHeader","noMasker","nh","useNameHelper","locked","ref","asideExpanded","asideReduced","currentSignType","userDropped","currentColor","isMounted","useMounted","section","scroll","header","aside","affixMatched","useMediaQuery","toRef","expandMatched","signNameMatched","state","reactive","isLayout","computed","value","affixed","scrollY","useExpand","navConfig","classes","changeInLock","isHeaderMain","className","b","bs","bm","inherit","rootEl","isClient","document","documentElement","signInHeader","menu","isDark","viewHeight","style","cv","getIndex","useZIndex","zIndex","slotParams","shallowReadonly","toggleExpanded","toggleReduced","provide","LAYOUT_STATE","expandMenuByLabel","watch","emitEvent","onNavChange","getBaseColor","onColorChange","getComputedStyle","getPropertyValue","onExpandedChange","onReducedChange","handleSignClick","event","onSignClick","handleMenuSelect","label","meta","onMenuSelect","handleToggleTheme","onToggleTheme","handleUserAction","onUserAction","expandItemByLabel","handleResize","$el","offsetHeight","getYBorder","onContentResize","cancelChange","doChange","runQueueFrame","stopAndPrevent","stopPropagation","preventDefault","renderSign","sign","renderSlot","showSignName","_createVNode","be","bem","renderHeader","LayoutHeader","_mergeProps","$event","onWheel","onMousemove","left","createSlotRender","right","avatar","renderAside","sidebar","undefined","LayoutAside","top","bottom","expand","renderMain","LayoutMain","renderFooter","LayoutFooter","renderMasker","masker","Masker","renderWrapper","CustomTag","wrapper","_slot2","_slot","ResizeObserver","NativeScroll","scrollbar"],"mappings":"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"}