vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 27.8 kB
Source Map (JSON)
{"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 isHeaderMain = computed(() => !props.noHeader && currentSignType.value === 'header')\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')]: isHeaderMain.value,\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 || isHeaderMain.value || 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={isHeaderMain.value ? 'header' : 'aside'}\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 {isHeaderMain.value && 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 {!isHeaderMain.value && 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","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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"}