UNPKG

vue-cesium

Version:
1 lines 8.03 kB
{"version":3,"file":"fab-action.mjs","sources":["../../../../../../packages/components/ui/fab/fab-action.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2021-09-16 09:28:13\n * @LastEditTime: 2022-03-05 22:43:51\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\components\\ui\\fab\\fab-action.ts\n */\nimport { h, defineComponent, computed, inject, getCurrentInstance, ComponentPublicInstance } from 'vue'\nimport type { VNode, ExtractPropTypes } from 'vue'\nimport { fabKey } from '@vue-cesium/utils/config'\nimport { hMergeSlot } from '@vue-cesium/utils/private/render'\n\nimport VcBtn from '../btn'\nimport VcIcon from '../icon'\nimport useFab from './use-fab'\nimport defaultPropsAction, { anchorMap } from './defaultPropsAction'\nimport { LooseDictionary } from '@vue-cesium/utils/types'\n\ninterface FabData {\n showing?: {\n value: boolean\n }\n onChildClick?(...args: any[]): any\n}\n\nexport const fabActionProps = defaultPropsAction\nexport default defineComponent({\n name: 'VcFabAction',\n\n props: fabActionProps,\n\n emits: ['click'],\n\n setup(props, { slots, emit }) {\n const $fab = inject<FabData>(fabKey)\n\n const { formClass, labelProps } = useFab(props, $fab?.showing)\n\n const classes = computed(() => {\n let align = undefined\n if (props.anchor) {\n align = anchorMap[props.anchor]\n }\n return formClass.value + (align !== void 0 ? ` ${align}` : '')\n })\n\n const isDisabled = computed(() => props.disable === true || $fab?.showing?.value !== true)\n\n function click(e) {\n $fab?.onChildClick?.(e)\n emit('click', e)\n }\n\n function getContent() {\n const child: Array<VNode> = []\n\n props.icon !== '' && child.push(h(VcIcon, { name: props.icon }))\n\n props.label !== '' && child[labelProps.value.action](h('div', labelProps.value.data, [props.label]))\n\n return hMergeSlot(slots.default, child)\n }\n\n // expose public methods\n const vm = getCurrentInstance()\n Object.assign(vm?.proxy, { click })\n\n return () =>\n h(\n VcBtn,\n {\n class: classes.value,\n ...props,\n noWrap: true,\n stack: props.stacked,\n icon: void 0,\n label: void 0,\n noCaps: true,\n fabMini: true,\n disable: isDisabled.value,\n size: props.size,\n onClick: click\n },\n getContent\n )\n }\n})\n\n// export type VcFabActionProps = ExtractPropTypes<typeof fabActionProps>\n\nexport interface VcFabActionProps {\n /**\n * Define the button HTML DOM type.\n * Default value: a\n */\n type?: 'a' | 'submit' | 'button' | 'reset' | undefined\n /**\n * Use 'outline' design for Fab button.\n */\n outline?: boolean | undefined\n /**\n * Use 'push' design for Fab button.\n */\n push?: boolean | undefined\n /**\n * Use 'flat' design for Fab button.\n */\n flat?: boolean | undefined\n /**\n * Remove shadow\n */\n unelevated?: boolean | undefined\n /**\n * Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set.\n */\n padding?: string | undefined\n /**\n * Color name for component from the css color palette.\n */\n color?: string | undefined\n /**\n * Overrides text color (if needed); Color name from the css color palette.\n */\n textColor?: string | undefined\n /**\n * Apply the glossy effect over the button.\n */\n glossy?: boolean | undefined\n /**\n * Display label besides the FABs, as external content.\n */\n externalLabel?: boolean | undefined\n /**\n * The label that will be shown when Fab is extended.\n */\n label?: string | number | undefined\n /**\n * Position of the label around the icon.\n */\n labelPosition?: 'top' | 'right' | 'bottom' | 'left' | undefined\n /**\n * Hide the label; Useful for animation purposes where you toggle the visibility of the label.\n */\n hideLabel?: boolean | undefined\n /**\n * Class definitions to be attributed to the label container.\n */\n labelClass?: any[] | string | any | undefined\n /**\n * Style definitions to be attributed to the label container.\n */\n labelStyle?: any[] | string | any | undefined\n /**\n * Apply a rectangle aspect to the FAB.\n */\n square?: boolean | undefined\n /**\n * Put component in disabled mode.\n */\n disable?: boolean | undefined\n /**\n * Tabindex HTML attribute value.\n */\n tabindex?: number | string | undefined\n /**\n * Icon name following VueCesium convention; Make sure you have the icon library installed unless you are using 'img:' prefix.\n */\n icon?: string | undefined\n /**\n * How to align the Fab Action relative to Fab expand side; By default it uses the align specified in QFab.\n */\n anchor?: 'start' | 'center' | 'end' | undefined\n /**\n * Equivalent to Vue Router <router-link> 'to' property.\n */\n to?: string | any | undefined\n /**\n * Equivalent to Vue Router <router-link> 'replace' property.\n */\n replace?: boolean | undefined\n /**\n * Emitted when user clicks/taps on the component.\n * @param evt JS event object\n */\n onClick?: (evt: any) => void\n}\n\nexport interface VcFabActionSlots {\n /**\n * Suggestion for this slot: VcTooltip\n */\n default: () => VNode[]\n /**\n * Slot for icon; Suggestion: VcIcon\n */\n icon: () => VNode[]\n /**\n * Slot for label\n */\n label: () => VNode[]\n}\n\nexport interface VcFabActionRef extends ComponentPublicInstance<VcFabActionProps> {\n /**\n * Emulate click on VcFabAction\n * @param evt JS event object\n */\n click: (evt?: LooseDictionary) => void\n}\n"],"names":["defaultPropsAction","VcIcon","VcBtn"],"mappings":"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"}