{"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;;;;;;"}