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