UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 8.59 kB
{"version":3,"file":"VFab.mjs","names":["makeVBtnProps","VBtn","makeLayoutItemProps","useLayoutItem","useProxiedModel","useResizeObserver","useToggleScope","makeTransitionProps","MaybeTransition","computed","ref","shallowRef","toRef","watchEffect","genericComponent","omit","propsFactory","useRender","locations","makeVFabProps","app","Boolean","appear","extended","layout","location","type","String","default","offset","modelValue","active","transition","VFab","name","props","emits","value","setup","_ref","slots","model","height","layoutItemStyles","resizeRef","entries","length","target","clientHeight","hasPosition","absolute","position","split","shift","orientation","id","order","parseInt","layoutSize","elementSize","vFabRef","btnProps","filterProps","_createVNode","class","width","undefined","style","_withDirectives","_mergeProps","_vShow"],"sources":["../../../src/components/VFab/VFab.tsx"],"sourcesContent":["// Styles\nimport './VFab.sass'\n\n// Components\nimport { makeVBtnProps, VBtn } from '@/components/VBtn/VBtn'\n\n// Composables\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed, ref, shallowRef, toRef, watchEffect } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, PropType } from 'vue'\nimport type { Position } from '@/composables/layout'\n\nconst locations = ['start', 'end', 'left', 'right', 'top', 'bottom'] as const\n\nexport const makeVFabProps = propsFactory({\n app: Boolean,\n appear: Boolean,\n extended: Boolean,\n layout: Boolean,\n location: {\n type: String as PropType<typeof locations[number]>,\n default: 'bottom end',\n },\n offset: Boolean,\n modelValue: {\n type: Boolean,\n default: true,\n },\n\n ...omit(makeVBtnProps({ active: true }), ['location']),\n ...makeLayoutItemProps(),\n ...makeTransitionProps({ transition: 'fab-transition' }),\n}, 'VFab')\n\nexport const VFab = genericComponent()({\n name: 'VFab',\n\n props: makeVFabProps(),\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const height = shallowRef(56)\n const layoutItemStyles = ref()\n\n const { resizeRef } = useResizeObserver(entries => {\n if (!entries.length) return\n height.value = entries[0].target.clientHeight\n })\n\n const hasPosition = computed(() => props.app || props.absolute)\n\n const position = computed(() => {\n if (!hasPosition.value) return false\n\n return props.location.split(' ').shift()\n }) as ComputedRef<Position>\n\n const orientation = computed(() => {\n if (!hasPosition.value) return false\n\n return props.location.split(' ')[1] ?? 'end'\n })\n\n useToggleScope(() => props.app, () => {\n const layout = useLayoutItem({\n id: props.name,\n order: computed(() => parseInt(props.order, 10)),\n position,\n layoutSize: computed(() => props.layout ? height.value + 24 : 0),\n elementSize: computed(() => height.value + 24),\n active: computed(() => props.app && model.value),\n absolute: toRef(props, 'absolute'),\n })\n\n watchEffect(() => {\n layoutItemStyles.value = layout.layoutItemStyles.value\n })\n })\n\n const vFabRef = ref()\n\n useRender(() => {\n const btnProps = VBtn.filterProps(props)\n\n return (\n <div\n ref={ vFabRef }\n class={[\n 'v-fab',\n {\n 'v-fab--absolute': props.absolute,\n 'v-fab--app': !!props.app,\n 'v-fab--extended': props.extended,\n 'v-fab--offset': props.offset,\n [`v-fab--${position.value}`]: hasPosition.value,\n [`v-fab--${orientation.value}`]: hasPosition.value,\n },\n props.class,\n ]}\n style={[\n props.app ? {\n ...layoutItemStyles.value,\n } : {\n height: 'inherit',\n width: undefined,\n },\n props.style,\n ]}\n >\n <div class=\"v-fab__container\">\n <MaybeTransition\n appear={ props.appear }\n transition={ props.transition }\n >\n <VBtn\n v-show={ props.active }\n ref={ resizeRef }\n { ...btnProps }\n active={ undefined }\n location={ undefined }\n v-slots={ slots }\n />\n </MaybeTransition>\n </div>\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VFab = InstanceType<typeof VFab>\n"],"mappings":"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","ignoreList":[]}