UNPKG

vuestic-ui

Version:
1 lines 5 kB
{"version":3,"file":"useLayout.mjs","sources":["../../../../../../src/components/va-layout/hooks/useLayout.ts"],"sourcesContent":["import { ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref, computed, inject, onBeforeUnmount, provide, ref, watchEffect } from 'vue'\nimport { AreaName } from './useGridTemplateArea'\n\n// Unwrap type, e.g.: removes name from type alias and returns the type\ntype UnwrapType<T> = true extends boolean ? T : never\n\nexport type AreaConfig = UnwrapType<{\n absolute?: boolean,\n order?: number,\n fixed?: boolean,\n overlay?: boolean,\n}>\n\nexport const useLayoutProps = {\n top: {\n type: Object as PropType<AreaConfig>,\n default: () => ({ order: 2 }),\n },\n right: {\n type: Object as PropType<AreaConfig>,\n default: () => ({ order: 1 }),\n },\n left: {\n type: Object as PropType<AreaConfig>,\n default: () => ({ order: 1 }),\n },\n bottom: {\n type: Object as PropType<AreaConfig>,\n default: () => ({ order: 2 }),\n },\n}\n\nexport type LayoutProps = ExtractPropTypes<typeof useLayoutProps>\n\ntype LayoutItem = {\n sizes: DOMRectReadOnly,\n}\n\nconst VaLayoutKey = 'VaLayout' as unknown as InjectionKey<{\n items: Ref<Record<AreaName, LayoutItem | null>>,\n paddings: ComputedRef<Record<AreaName, number>>,\n orders: ComputedRef<Record<AreaName, number>>,\n}>\n\nexport const useLayout = (props: ExtractPropTypes<typeof useLayoutProps>) => {\n const items = ref<Record<AreaName, LayoutItem | null>>({\n top: null,\n right: null,\n bottom: null,\n left: null,\n })\n\n const paddings = computed(() => {\n const { top, right, bottom, left } = items.value\n const { top: topConfig, right: rightConfig, bottom: bottomConfig, left: leftConfig } = props\n\n return {\n top: top && !topConfig.absolute ? top.sizes.height : 0,\n right: right && !rightConfig.absolute ? right.sizes.width : 0,\n bottom: bottom && !bottomConfig.absolute ? bottom.sizes.height : 0,\n left: left && !leftConfig.absolute ? left.sizes.width : 0,\n }\n })\n\n const orders = computed(() => ({\n top: props.top.order || 0,\n right: props.right.order || 0,\n bottom: props.bottom.order || 0,\n left: props.left.order || 0,\n }))\n\n provide(VaLayoutKey, {\n items,\n paddings,\n orders,\n })\n\n return {\n paddings,\n orders,\n items,\n }\n}\n\nexport const useFixedLayoutChild = (area: AreaName, sizes: Ref<DOMRectReadOnly | null>) => {\n const layout = inject(VaLayoutKey, null)\n\n if (!layout) {\n throw new Error('VaLayoutChild must be used inside VaLayout')\n }\n\n watchEffect(() => {\n if (sizes.value) {\n layout.items.value[area] = {\n sizes: sizes.value,\n }\n } else {\n layout.items.value[area] = null\n }\n })\n\n onBeforeUnmount(() => {\n layout.items.value[area] = null\n })\n\n return {\n paddings: computed(() => {\n return Object\n .keys(layout.paddings.value)\n .reduce((acc, key) => {\n if (layout.orders.value[key as AreaName] > layout.orders.value[area]) {\n acc[key as AreaName] = layout.paddings.value[key as AreaName]\n }\n return acc\n }, {} as Record<AreaName, number>)\n }),\n }\n}\n"],"names":[],"mappings":";AAaO,MAAM,iBAAiB;AAAA,EAC5B,KAAK;AAAA,IACH,MAAM;AAAA,IACN,SAAS,OAAO,EAAE,OAAO;EAC3B;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,OAAO,EAAE,OAAO;EAC3B;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS,OAAO,EAAE,OAAO;EAC3B;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS,OAAO,EAAE,OAAO;EAC3B;AACF;AAQA,MAAM,cAAc;AAMP,MAAA,YAAY,CAAC,UAAmD;AAC3E,QAAM,QAAQ,IAAyC;AAAA,IACrD,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA,CACP;AAEK,QAAA,WAAW,SAAS,MAAM;AAC9B,UAAM,EAAE,KAAK,OAAO,QAAQ,SAAS,MAAM;AACrC,UAAA,EAAE,KAAK,WAAW,OAAO,aAAa,QAAQ,cAAc,MAAM,WAAe,IAAA;AAEhF,WAAA;AAAA,MACL,KAAK,OAAO,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS;AAAA,MACrD,OAAO,SAAS,CAAC,YAAY,WAAW,MAAM,MAAM,QAAQ;AAAA,MAC5D,QAAQ,UAAU,CAAC,aAAa,WAAW,OAAO,MAAM,SAAS;AAAA,MACjE,MAAM,QAAQ,CAAC,WAAW,WAAW,KAAK,MAAM,QAAQ;AAAA,IAAA;AAAA,EAC1D,CACD;AAEK,QAAA,SAAS,SAAS,OAAO;AAAA,IAC7B,KAAK,MAAM,IAAI,SAAS;AAAA,IACxB,OAAO,MAAM,MAAM,SAAS;AAAA,IAC5B,QAAQ,MAAM,OAAO,SAAS;AAAA,IAC9B,MAAM,MAAM,KAAK,SAAS;AAAA,EAC1B,EAAA;AAEF,UAAQ,aAAa;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEM,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEa,MAAA,sBAAsB,CAAC,MAAgB,UAAuC;AACnF,QAAA,SAAS,OAAO,aAAa,IAAI;AAEvC,MAAI,CAAC,QAAQ;AACL,UAAA,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAEA,cAAY,MAAM;AAChB,QAAI,MAAM,OAAO;AACR,aAAA,MAAM,MAAM,IAAI,IAAI;AAAA,QACzB,OAAO,MAAM;AAAA,MAAA;AAAA,IACf,OACK;AACE,aAAA,MAAM,MAAM,IAAI,IAAI;AAAA,IAC7B;AAAA,EAAA,CACD;AAED,kBAAgB,MAAM;AACb,WAAA,MAAM,MAAM,IAAI,IAAI;AAAA,EAAA,CAC5B;AAEM,SAAA;AAAA,IACL,UAAU,SAAS,MAAM;AAChB,aAAA,OACJ,KAAK,OAAO,SAAS,KAAK,EAC1B,OAAO,CAAC,KAAK,QAAQ;AAChB,YAAA,OAAO,OAAO,MAAM,GAAe,IAAI,OAAO,OAAO,MAAM,IAAI,GAAG;AACpE,cAAI,GAAe,IAAI,OAAO,SAAS,MAAM,GAAe;AAAA,QAC9D;AACO,eAAA;AAAA,MACT,GAAG,CAA8B,CAAA;AAAA,IAAA,CACpC;AAAA,EAAA;AAEL;"}