hongluan-ui
Version:
Hongluan Component Library for Vue 3
1 lines • 5.21 kB
Source Map (JSON)
{"version":3,"file":"layout.mjs","sources":["../../../../../../packages/components/layout/src/layout.vue"],"sourcesContent":["<template>\n <section\n ref=\"layoutRef\"\n :class=\"{\n [namespace + '-layout'] : true,\n boxed,\n 'fixed-header': fixedHeader,\n 'full-header': fullHeader,\n 'fixed-aside': fixedAside,\n 'fixed-sub-header': fixedSubHeader,\n 'full-sub-header': fullSubHeader,\n 'fixed-footer': fixedFooter,\n 'full-footer': fullFooter,\n 'collapse-aside': menuCollapse || autoMenuCollapse,\n }\"\n >\n <slot></slot>\n </section>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, computed, onMounted, ref, provide, onBeforeUnmount } from 'vue'\nimport { isClient } from '@hongluan-ui/utils'\nimport { useNamespace } from '@hongluan-ui/hooks'\nimport { layoutKey } from '@hongluan-ui/tokens'\n\nimport type { VNode, Component } from 'vue'\n\nexport default defineComponent({\n name: 'Layout',\n props: {\n direction: {\n type: String,\n default: '',\n },\n boxed: Boolean,\n fixedHeader: Boolean,\n fullHeader: Boolean,\n fixedAside: Boolean,\n fixedSubHeader: Boolean,\n fullSubHeader: Boolean,\n fixedFooter: Boolean,\n fullFooter: Boolean,\n },\n setup(props, { slots }) {\n const { namespace } = useNamespace()\n const layoutRef = ref<HTMLElement>()\n const autoMenuCollapse = ref(false)\n const menuCollapse = ref(false)\n const isVertical = computed(() => {\n if (props.direction === 'vertical') {\n return true\n } else if (props.direction === 'horizontal') {\n return false\n }\n if (slots && slots.default) {\n const vNodes: VNode[] = slots.default()\n return vNodes.some(vNode => {\n const tag = (vNode.type as Component).name\n return tag === 'Header' || tag === 'Footer'\n })\n } else {\n return false\n }\n })\n\n let menuCollapseWidth: number\n let isResponsd = false\n\n const setMenuCollapse = (result: boolean) => {\n if (isResponsd) {\n menuCollapse.value = result\n }\n }\n\n const observer = isClient ? new ResizeObserver(entries => {\n entries.forEach(entry => {\n const target = entry.contentRect\n if (target.width <= menuCollapseWidth) {\n autoMenuCollapse.value = true\n } else {\n autoMenuCollapse.value = false\n }\n })\n }) : null\n\n const respondMenu = () => {\n const menuStyle = getComputedStyle(layoutRef.value)\n const asideWidth = Number.parseFloat(menuStyle.getPropertyValue('--layout-aside-respond-width'))\n if (!Number.isNaN(asideWidth) && asideWidth > 0) {\n menuCollapseWidth = asideWidth\n\n const docStyle = getComputedStyle(document.documentElement)\n const respond = docStyle.getPropertyValue('--feature-respond')\n if (respond.trim() === 'true') {\n observer?.observe(document.body)\n isResponsd = true\n }\n }\n }\n\n onMounted(() => {\n if (!isClient)return\n respondMenu()\n })\n\n onBeforeUnmount(() => {\n observer && observer.disconnect()\n })\n\n provide(layoutKey, {\n autoMenuCollapse,\n setMenuCollapse,\n })\n\n return {\n namespace,\n layoutRef,\n isVertical,\n autoMenuCollapse,\n menuCollapse,\n respondMenu,\n }\n },\n})\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_renderSlot"],"mappings":";;;;;;;;;AA2BA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,aAAa;AAAA,IACb,YAAY;AAAA;AACd,EACA,MAAM,OAAO,EAAE,SAAS;AACtB,UAAM,EAAE,cAAc;AACtB,UAAM,YAAY;AAClB,UAAM,mBAAmB,IAAI,KAAK;AAClC,UAAM,eAAe,IAAI,KAAK;AAC9B,UAAM,aAAa,SAAS,MAAM;AAChC,UAAI,MAAM,cAAc,YAAY;AAClC,eAAO;AAAA,iBACE,MAAM,cAAc,cAAc;AAC3C,eAAO;AAAA;AAET,UAAI,SAAS,MAAM,SAAS;AAC1B,cAAM,SAAkB,MAAM;AAC9B,eAAO,OAAO,KAAK,WAAS;AAC1B,gBAAM,MAAO,MAAM,KAAmB;AACtC,iBAAO,QAAQ,YAAY,QAAQ;AAAA,SACpC;AAAA,aACI;AACL,eAAO;AAAA;AACT,KACD;AAED,QAAI;AACJ,QAAI,aAAa;AAEjB,UAAM,kBAAkB,CAAC,WAAoB;AAC3C,UAAI,YAAY;AACd,qBAAa,QAAQ;AAAA;AACvB;AAGF,UAAM,WAAW,WAAW,IAAI,eAAe,aAAW;AACxD,cAAQ,QAAQ,WAAS;AACvB,cAAM,SAAS,MAAM;AACrB,YAAI,OAAO,SAAS,mBAAmB;AACrC,2BAAiB,QAAQ;AAAA,eACpB;AACL,2BAAiB,QAAQ;AAAA;AAC3B,OACD;AAAA,KACF,IAAI;AAEL,UAAM,cAAc,MAAM;AACxB,YAAM,YAAY,iBAAiB,UAAU,KAAK;AAClD,YAAM,aAAa,OAAO,WAAW,UAAU,iBAAiB,8BAA8B,CAAC;AAC/F,UAAI,CAAC,OAAO,MAAM,UAAU,KAAK,aAAa,GAAG;AAC/C,4BAAoB;AAEpB,cAAM,WAAW,iBAAiB,SAAS,eAAe;AAC1D,cAAM,UAAU,SAAS,iBAAiB,mBAAmB;AAC7D,YAAI,QAAQ,WAAW,QAAQ;AAC7B;AACA,uBAAa;AAAA;AACf;AACF;AAGF,cAAU,MAAM;AACd,UAAI,CAAC;AAAS;AACd;AAAY,KACb;AAED,oBAAgB,MAAM;AACpB,kBAAY,SAAS;AAAW,KACjC;AAED,YAAQ,WAAW;AAAA,MACjB;AAAA,MACA;AAAA,KACD;AAED,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;sBA1HCA,mBAgBU;AAAA,IAfR,KAAI;AAAA,IACH,OAAKC;AAAA,OAAW,iBAAS;AAAA,aAA4B;AAAA,sBAA6B;AAAA,qBAAkC;AAAA,qBAAiC;AAAA,0BAAsC;AAAA,yBAAyC;AAAA,sBAAqC;AAAA,qBAAkC;AAAA,wBAAoC,qBAAgB;AAAA;;IAahWC,WAAa;AAAA;;;;;;"}