UNPKG

vue-material-adapter

Version:

Vue 3 wrapper arround Material Components for the Web

56 lines (49 loc) 1.34 kB
import { computed, reactive, ref, toRefs, watch } from 'vue'; import { CustomLink, touchWrapper } from '../base/index.js'; import { useRipplePlugin } from '../ripple/ripple-plugin.js'; export default { name: 'mcw-fab', props: { icon: String, mini: Boolean, exited: Boolean, label: String, isTouch: Boolean, }, inheritAttrs: false, components: { CustomLink, touchWrapper }, setup(props, { slots }) { const root = ref(); const uiState = reactive({ classes: { 'mdc-fab': 1, 'mdc-fab--mini': props.mini, 'mdc-fab--extended': props.label || slots.default, 'mdc-fab--exited': props.exited, }, }); const { classes: rippleClasses, styles } = useRipplePlugin(root); const classes = computed(() => { return { ...rippleClasses.value, ...uiState.classes }; }); watch( () => props.icon, nv => { uiState.classes = { ...uiState.classes, 'material-icons': nv }; }, ); watch( () => props.mini, nv => { uiState.classes = { ...uiState.classes, 'mdc-fab--mini': nv }; }, ); watch( () => props.exited, nv => { uiState.classes = { ...uiState.classes, 'mdc-fab--exited': nv }; }, ); return { ...toRefs(uiState), classes, root, styles }; }, };