UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 4.07 kB
{"version":3,"file":"location.mjs","names":["useRtl","computed","parseAnchor","propsFactory","oppositeMap","center","top","bottom","left","right","makeLocationProps","location","String","useLocation","props","opposite","offset","isRtl","locationStyles","side","align","split","length","value","getOffset","styles","transform"],"sources":["../../src/composables/location.ts"],"sourcesContent":["// Composables\nimport { useRtl } from '@/composables/locale'\n\n// Utilities\nimport { computed } from 'vue'\nimport { parseAnchor, propsFactory } from '@/util'\n\n// Types\nimport type { CSSProperties, PropType } from 'vue'\nimport type { Anchor } from '@/util'\n\nconst oppositeMap = {\n center: 'center',\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n} as const\n\nexport interface LocationProps {\n location: Anchor | undefined\n}\n\nexport const makeLocationProps = propsFactory({\n location: String as PropType<Anchor>,\n}, 'location')\n\nexport function useLocation (props: LocationProps, opposite = false, offset?: (side: string) => number) {\n const { isRtl } = useRtl()\n\n const locationStyles = computed(() => {\n if (!props.location) return {}\n\n const { side, align } = parseAnchor(\n props.location.split(' ').length > 1\n ? props.location\n : `${props.location} center` as Anchor,\n isRtl.value\n )\n\n function getOffset (side: string) {\n return offset\n ? offset(side)\n : 0\n }\n\n const styles = {} as CSSProperties\n\n if (side !== 'center') {\n if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`\n else styles[side] = 0\n }\n if (align !== 'center') {\n if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`\n else styles[align] = 0\n } else {\n if (side === 'center') styles.top = styles.left = '50%'\n else {\n styles[({\n top: 'left',\n bottom: 'left',\n left: 'top',\n right: 'top',\n } as const)[side]] = '50%'\n }\n styles.transform = {\n top: 'translateX(-50%)',\n bottom: 'translateX(-50%)',\n left: 'translateY(-50%)',\n right: 'translateY(-50%)',\n center: 'translate(-50%, -50%)',\n }[side]\n }\n\n return styles\n })\n\n return { locationStyles }\n}\n"],"mappings":"AAAA;AAAA,SACSA,MAAM,wBAEf;AACA,SAASC,QAAQ,QAAQ,KAAK;AAAA,SACrBC,WAAW,EAAEC,YAAY,6BAElC;AAIA,MAAMC,WAAW,GAAG;EAClBC,MAAM,EAAE,QAAQ;EAChBC,GAAG,EAAE,QAAQ;EACbC,MAAM,EAAE,KAAK;EACbC,IAAI,EAAE,OAAO;EACbC,KAAK,EAAE;AACT,CAAU;AAMV,OAAO,MAAMC,iBAAiB,GAAGP,YAAY,CAAC;EAC5CQ,QAAQ,EAAEC;AACZ,CAAC,EAAE,UAAU,CAAC;AAEd,OAAO,SAASC,WAAW,CAAEC,KAAoB,EAAuD;EAAA,IAArDC,QAAQ,uEAAG,KAAK;EAAA,IAAEC,MAAiC;EACpG,MAAM;IAAEC;EAAM,CAAC,GAAGjB,MAAM,EAAE;EAE1B,MAAMkB,cAAc,GAAGjB,QAAQ,CAAC,MAAM;IACpC,IAAI,CAACa,KAAK,CAACH,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE9B,MAAM;MAAEQ,IAAI;MAAEC;IAAM,CAAC,GAAGlB,WAAW,CACjCY,KAAK,CAACH,QAAQ,CAACU,KAAK,CAAC,GAAG,CAAC,CAACC,MAAM,GAAG,CAAC,GAChCR,KAAK,CAACH,QAAQ,GACb,GAAEG,KAAK,CAACH,QAAS,SAAkB,EACxCM,KAAK,CAACM,KAAK,CACZ;IAED,SAASC,SAAS,CAAEL,IAAY,EAAE;MAChC,OAAOH,MAAM,GACTA,MAAM,CAACG,IAAI,CAAC,GACZ,CAAC;IACP;IAEA,MAAMM,MAAM,GAAG,CAAC,CAAkB;IAElC,IAAIN,IAAI,KAAK,QAAQ,EAAE;MACrB,IAAIJ,QAAQ,EAAEU,MAAM,CAACrB,WAAW,CAACe,IAAI,CAAC,CAAC,GAAI,eAAcK,SAAS,CAACL,IAAI,CAAE,KAAI,MACxEM,MAAM,CAACN,IAAI,CAAC,GAAG,CAAC;IACvB;IACA,IAAIC,KAAK,KAAK,QAAQ,EAAE;MACtB,IAAIL,QAAQ,EAAEU,MAAM,CAACrB,WAAW,CAACgB,KAAK,CAAC,CAAC,GAAI,eAAcI,SAAS,CAACJ,KAAK,CAAE,KAAI,MAC1EK,MAAM,CAACL,KAAK,CAAC,GAAG,CAAC;IACxB,CAAC,MAAM;MACL,IAAID,IAAI,KAAK,QAAQ,EAAEM,MAAM,CAACnB,GAAG,GAAGmB,MAAM,CAACjB,IAAI,GAAG,KAAK,MAClD;QACHiB,MAAM,CAAE;UACNnB,GAAG,EAAE,MAAM;UACXC,MAAM,EAAE,MAAM;UACdC,IAAI,EAAE,KAAK;UACXC,KAAK,EAAE;QACT,CAAC,CAAWU,IAAI,CAAC,CAAC,GAAG,KAAK;MAC5B;MACAM,MAAM,CAACC,SAAS,GAAG;QACjBpB,GAAG,EAAE,kBAAkB;QACvBC,MAAM,EAAE,kBAAkB;QAC1BC,IAAI,EAAE,kBAAkB;QACxBC,KAAK,EAAE,kBAAkB;QACzBJ,MAAM,EAAE;MACV,CAAC,CAACc,IAAI,CAAC;IACT;IAEA,OAAOM,MAAM;EACf,CAAC,CAAC;EAEF,OAAO;IAAEP;EAAe,CAAC;AAC3B"}