UNPKG

vexip-ui

Version:

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

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