UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 26.8 kB
{"version":3,"file":"layout.cjs","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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"}