UNPKG

vexip-ui

Version:

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

1 lines 25.3 kB
{"version":3,"file":"layout-header.mjs","sources":["../../../components/layout/layout-header.tsx"],"sourcesContent":["import { Avatar } from '@/components/avatar'\nimport { Dropdown } from '@/components/dropdown'\nimport { DropdownList } from '@/components/dropdown-list'\nimport { DropdownItem } from '@/components/dropdown-item'\nimport { Icon } from '@/components/icon'\nimport { Menu } from '@/components/menu'\nimport { Switch } from '@/components/switch'\n\nimport {\n computed,\n defineComponent,\n onBeforeMount,\n onMounted,\n reactive,\n ref,\n renderSlot,\n shallowReadonly,\n toRef,\n watch,\n} from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useMounted, useRtl } from '@vexip-ui/hooks'\nimport { isClient } from '@vexip-ui/utils'\nimport { layoutHeaderProps } from './props'\nimport { computeSeriesColors, useLayoutState } from './helper'\n\nimport type { MenuExposed } from '@/components/menu'\nimport type { LayoutConfig, LayoutHeaderAction, LayoutSignType } from './symbol'\n\nexport default defineComponent({\n name: 'LayoutHeader',\n props: layoutHeaderProps,\n emits: ['update:sign-type', 'update:color', 'update:user-dropped', 'update:dark-mode'],\n setup(_props, { slots, emit, expose }) {\n const props = useProps('layoutHeader', _props, {\n locale: null,\n tag: 'header',\n logo: '',\n signName: '',\n user: {\n default: () => ({ name: '' }),\n static: true,\n },\n userDropped: false,\n avatarCircle: false,\n config: () => ['nav', 'theme', 'color'] as LayoutConfig[],\n actions: () => [],\n signType: 'aside',\n colors: () => ['#339af0', '#f03e3e', '#be4bdb', '#7950f2', '#1b9e44', '#f76707'],\n color: '',\n menus: {\n default: () => [],\n static: true,\n },\n menuProps: null,\n darkMode: null,\n })\n\n const nh = useNameHelper('layout')\n const icons = useIcons()\n const locale = useLocale('layout', toRef(props, 'locale'))\n const layoutState = useLayoutState()\n const currentSignType = ref<LayoutSignType>(props.signType)\n const currentUserDropped = ref(props.userDropped)\n\n const menu = ref<MenuExposed>()\n\n const { isRtl } = useRtl()\n const { isMounted } = useMounted()\n\n const rootEl = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isMounted.value\n return isClient ? document.documentElement : null\n })\n const currentColor = ref(props.color || getBaseColor() || props.colors?.[0])\n const isDark = ref(false)\n\n const className = computed(() => {\n return [\n nh.be('header'),\n {\n [nh.bs('vars')]: !layoutState.isLayout,\n [nh.bem('header', 'inherit')]: layoutState.isLayout || props.inherit,\n [nh.bem('header', 'away')]: !layoutState.affixMatched,\n [nh.bem('header', 'affixed')]: layoutState.affixed,\n },\n layoutState.classes.header,\n ]\n })\n const userActions = computed(() => {\n if (!props.actions?.length) {\n return [\n {\n label: 'signOut',\n name: locale.value.signOut,\n icon: icons.value.signOut.icon,\n iconProps: icons.value.signOut,\n },\n ] as LayoutHeaderAction[]\n }\n\n return props.actions.filter(action => !action.hidden)\n })\n const hasLeft = computed(() => {\n return !!(props.logo || props.signName || slots.left)\n })\n const hasMenu = computed(() => {\n return !!(props.menus?.length || props.menuProps?.router)\n })\n\n const slotParams = shallowReadonly(\n reactive({\n expanded: toRef(layoutState, 'expanded'),\n reduced: toRef(layoutState, 'reduced'),\n toggleExpanded,\n toggleReduced,\n handleColorChange,\n toggleUserDropped,\n }),\n )\n\n expose({ menu, toggleExpanded, toggleReduced, expandMenuByLabel, toggleUserDropped })\n\n watch(\n () => props.signType,\n value => {\n currentSignType.value = value\n },\n )\n watch(\n () => props.userDropped,\n value => {\n currentUserDropped.value = value\n },\n )\n watch(currentColor, computeSeriesColors)\n watch(\n () => props.darkMode,\n value => {\n isDark.value = value ?? rootEl.value?.classList.contains('dark') ?? false\n },\n { immediate: true },\n )\n\n onMounted(() => {\n toggleTheme(isDark.value)\n })\n\n onBeforeMount(() => {\n watch(\n () => props.color,\n value => {\n currentColor.value = value || getBaseColor() || props.colors?.[0]\n },\n { immediate: true },\n )\n\n computeSeriesColors(currentColor.value)\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 handleUserActionSelect(label: string, meta: Record<string, any>) {\n emitEvent(props.onUserAction, label, meta)\n }\n\n function handleSignTypeChange(type: LayoutSignType) {\n layoutState.changeInLock(() => {\n currentSignType.value = type\n\n emit('update:sign-type', type)\n emitEvent(props.onNavChange, type)\n })\n }\n\n function toggleExpanded(expanded = !layoutState.expanded) {\n layoutState.expanded = expanded\n\n emitEvent(props.onExpandedChange, expanded)\n }\n\n function toggleReduced(reduced = !layoutState.reduced) {\n layoutState.reduced = reduced\n\n emitEvent(props.onReducedChange, reduced)\n }\n\n function handleColorChange(color: string) {\n currentColor.value = color\n\n emit('update:color', color)\n emitEvent(props.onColorChange, color)\n }\n\n function handleSignClick(event: MouseEvent) {\n emitEvent(props.onSignClick, event)\n }\n\n function toggleUserDropped(dropped = !currentUserDropped.value) {\n currentUserDropped.value = dropped\n\n emit('update:user-dropped', dropped)\n emitEvent(props.onDroppedChange, dropped)\n }\n\n function handleMenuSelect(label: string, meta: Record<string, any>) {\n toggleUserDropped(false)\n emitEvent(props.onMenuSelect, label, meta)\n }\n\n function expandMenuByLabel(label: string) {\n menu.value?.expandItemByLabel(label)\n }\n\n function toggleTheme(darkMode: boolean) {\n isDark.value = darkMode\n\n emit('update:dark-mode', darkMode)\n emitEvent(props.onToggleTheme, darkMode)\n\n if (!isClient) return\n\n requestAnimationFrame(() => {\n if (rootEl.value) {\n if (darkMode) {\n rootEl.value.classList.add('dark')\n } else {\n rootEl.value.classList.remove('dark')\n }\n }\n })\n }\n\n function renderCheck() {\n return <Icon {...icons.value.check}></Icon>\n }\n\n function renderLayoutConfig() {\n return (\n <div class={nh.be('config-unit')}>\n <div\n class={[nh.be('brief-block'), nh.bem('brief-block', 'aside')]}\n onClick={() => handleSignTypeChange('aside')}\n >\n {currentSignType.value === 'aside' && renderCheck()}\n </div>\n <div class={nh.be('brief-block')} onClick={() => handleSignTypeChange('header')}>\n {currentSignType.value === 'header' && renderCheck()}\n </div>\n </div>\n )\n }\n\n function renderThemeConfig() {\n return (\n <div class={nh.be('config-unit')}>\n <Switch\n value={isDark.value}\n class={[nh.be('theme-mode'), isDark.value && nh.bem('theme-mode', 'dark')]}\n aria-label={'theme'}\n onChange={toggleTheme}\n >\n {{\n icon: () =>\n isDark.value ? (\n <Icon {...icons.value.dark}></Icon>\n ) : (\n <Icon {...icons.value.light}></Icon>\n ),\n }}\n </Switch>\n </div>\n )\n }\n\n function renderColorConfig() {\n if (!props.colors?.length) {\n return null\n }\n\n return (\n <div class={nh.be('config-unit')}>\n {props.colors.map(color => (\n <div\n key={color}\n class={nh.be('major-color')}\n style={{\n backgroundColor: color,\n }}\n onClick={() => handleColorChange(color)}\n >\n {currentColor.value === color && renderCheck()}\n </div>\n ))}\n </div>\n )\n }\n\n function renderUserAvatar() {\n if (slots.avatar) {\n return renderSlot(slots, 'avatar', slotParams)\n }\n\n if (typeof props.user?.avatar === 'string') {\n return (\n <Avatar\n src={props.user.avatar}\n circle={props.avatarCircle}\n onClick={() => toggleUserDropped()}\n >\n {{\n icon: () => <Icon {...icons.value.user}></Icon>,\n }}\n </Avatar>\n )\n }\n\n return (\n <Avatar circle={props.avatarCircle} onClick={() => toggleUserDropped()}>\n {{\n icon: () => (\n <Icon {...icons.value.user} icon={props.user.avatar || icons.value.user.icon}></Icon>\n ),\n }}\n </Avatar>\n )\n }\n\n function renderUserDrop() {\n return (\n <DropdownList>\n {props.user?.name && (\n <li class={nh.be('user-profile')}>\n <span class={nh.be('user-name')}>{props.user.name}</span>\n {props.user.email && <span class={nh.be('user-email')}>{props.user.email}</span>}\n </li>\n )}\n {props.config?.length ? renderConfigs() : null}\n {userActions.value.map(action => (\n <DropdownItem\n key={action.label}\n class={nh.be('user-action')}\n label={action.label}\n disabled={action.disabled}\n divided={action.divided}\n onSelect={() => handleUserActionSelect(action.label, action.meta || {})}\n >\n {action.icon && (\n <Icon\n {...action.iconProps}\n icon={action.icon}\n style={{ marginRight: '6px' }}\n ></Icon>\n )}\n {action.name || action.label}\n </DropdownItem>\n ))}\n </DropdownList>\n )\n }\n\n function renderConfigs() {\n return (\n <li class={nh.be('config')}>\n {props.config.includes('nav') &&\n layoutState.navConfig && [\n <div key={1} class={nh.be('config-label')}>\n {locale.value.signType}\n </div>,\n renderLayoutConfig(),\n ]}\n {props.config.includes('theme') && [\n <div key={2} class={nh.be('config-label')}>\n {locale.value.themeMode}\n </div>,\n renderThemeConfig(),\n ]}\n {props.config.includes('color') && [\n <div key={3} class={nh.be('config-label')}>\n {locale.value.majorColor}\n </div>,\n renderColorConfig(),\n ]}\n </li>\n )\n }\n\n return () => {\n const CustomTag = (props.tag || 'header') as any\n\n return (\n <CustomTag class={className.value}>\n {hasLeft.value && (\n <div class={[nh.be('header-left'), layoutState.classes.headerLeft]}>\n {slots.left ? (\n renderSlot(slots, 'left', slotParams)\n ) : props.signType === 'header' ? (\n <div class={nh.be('sign')} onClick={handleSignClick}>\n {props.logo && (\n <div class={nh.be('logo')}>\n <img src={props.logo} alt={'Logo'} />\n </div>\n )}\n {props.signName && <span class={nh.be('sign-name')}>{props.signName}</span>}\n </div>\n ) : null}\n </div>\n )}\n <div class={[nh.be('header-main'), layoutState.classes.headerMain]}>\n {slots.default ? (\n renderSlot(slots, 'default', slotParams)\n ) : hasMenu.value ? (\n <Menu\n ref={menu}\n {...(props.menuProps || {})}\n horizontal\n transfer\n options={props.menus}\n onSelect={handleMenuSelect}\n ></Menu>\n ) : null}\n </div>\n {slots.right && (\n <div class={[nh.be('header-right'), layoutState.classes.headerRight]}>\n {renderSlot(slots, 'right', slotParams)}\n </div>\n )}\n {slots.user ? (\n renderSlot(slots, 'user', slotParams)\n ) : (\n <Dropdown\n class={[nh.be('user'), layoutState.classes.headerUser]}\n transfer\n placement={isRtl.value ? 'bottom-start' : 'bottom-end'}\n visible={currentUserDropped.value}\n trigger={'custom'}\n onClickOutside={() => toggleUserDropped(false)}\n >\n {{\n default: renderUserAvatar,\n drop: renderUserDrop,\n }}\n </Dropdown>\n )}\n </CustomTag>\n )\n }\n },\n})\n"],"names":["defineComponent","name","props","layoutHeaderProps","emits","setup","_props","slots","emit","expose","useProps","locale","tag","logo","signName","user","default","static","userDropped","avatarCircle","config","actions","signType","colors","color","menus","menuProps","darkMode","nh","useNameHelper","icons","useIcons","useLocale","toRef","layoutState","useLayoutState","currentSignType","ref","currentUserDropped","menu","isRtl","useRtl","isMounted","useMounted","rootEl","computed","value","isClient","document","documentElement","currentColor","getBaseColor","isDark","className","be","bs","isLayout","bem","inherit","affixMatched","affixed","classes","header","userActions","length","filter","action","hidden","label","signOut","icon","iconProps","hasLeft","left","hasMenu","router","slotParams","shallowReadonly","reactive","expanded","reduced","toggleExpanded","toggleReduced","handleColorChange","toggleUserDropped","expandMenuByLabel","watch","computeSeriesColors","classList","contains","immediate","onMounted","toggleTheme","onBeforeMount","getComputedStyle","getPropertyValue","handleUserActionSelect","meta","emitEvent","onUserAction","handleSignTypeChange","type","changeInLock","onNavChange","onExpandedChange","onReducedChange","onColorChange","handleSignClick","event","onSignClick","dropped","onDroppedChange","handleMenuSelect","onMenuSelect","expandItemByLabel","onToggleTheme","requestAnimationFrame","add","remove","renderCheck","_createVNode","Icon","check","renderLayoutConfig","onClick","renderThemeConfig","Switch","dark","light","renderColorConfig","map","backgroundColor","renderUserAvatar","avatar","renderSlot","Avatar","_mergeProps","renderUserDrop","DropdownList","email","renderConfigs","DropdownItem","disabled","divided","onSelect","marginRight","includes","navConfig","themeMode","majorColor","CustomTag","headerLeft","headerMain","Menu","right","headerRight","Dropdown","headerUser","onClickOutside","drop"],"mappings":"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"}