UNPKG

vue-cesium

Version:
1 lines 25.8 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/ui/btn/index.ts"],"sourcesContent":["import { h, defineComponent, ref, computed, Transition, onBeforeUnmount, getCurrentInstance, ComponentPublicInstance } from 'vue'\nimport type { VNode } from 'vue'\nimport VcIcon from '../icon'\nimport { Spinner as VcSpinner } from '../spinner'\nimport { Ripple } from '@vue-cesium/directives'\nimport useBtn, { useBtnProps } from './use-btn'\nimport { hMergeSlot, hDir } from '@vue-cesium/utils/private/render'\nimport { stop, prevent, stopAndPrevent, listenOpts } from '@vue-cesium/utils/private/event'\nimport { getTouchTarget } from '@vue-cesium/utils/private/touch'\nimport { isKeyCode } from '@vue-cesium/utils/private/key-composition'\nimport { LooseDictionary } from '@vue-cesium/utils/types'\n\nconst { passiveCapture } = listenOpts\n\nlet touchTarget: HTMLElement | null, keyboardTarget: HTMLElement | null, mouseTarget: HTMLElement | null\nexport const btnProps = {\n ...useBtnProps,\n\n percentage: {\n type: Number,\n default: 0\n },\n darkPercentage: Boolean\n}\nexport default defineComponent({\n name: 'VcBtn',\n\n props: btnProps,\n\n emits: ['click', 'keydown', 'touchstart', 'mousedown', 'keyup'],\n\n setup(props, { slots, emit }) {\n const proxy = getCurrentInstance()?.proxy\n\n const { classes, style, innerClasses, attributes, isActionable } = useBtn(props)\n\n const rootRef = ref<HTMLElement>()\n const blurTargetRef = ref<HTMLElement>()\n\n let localTouchTargetEl: HTMLElement = null,\n avoidMouseRipple,\n mouseTimer\n\n const hasLabel = computed(() => props.label !== void 0 && props.label !== null && props.label !== '')\n\n const ripple = computed(() =>\n props.ripple === false\n ? false\n : {\n // keyCodes: isLink.value === true ? [ 13, 32 ] : [ 13 ],\n keyCodes: 13,\n ...(props.ripple === true ? {} : props.ripple)\n }\n )\n\n const percentageStyle = computed(() => {\n const val = Math.max(0, Math.min(100, props.percentage))\n return val > 0 ? { transition: 'transform 0.6s', transform: `translateX(${val - 100}%)` } : {}\n })\n\n const onEvents = computed(() => {\n if (props.loading === true) {\n return {\n onMousedown: onLoadingEvt,\n onTouchstart: onLoadingEvt,\n onClick: onLoadingEvt,\n onKeydown: onLoadingEvt,\n onKeyup: onLoadingEvt\n }\n } else if (isActionable.value === true) {\n return {\n onClick,\n onKeydown,\n onMousedown,\n onTouchstart\n }\n }\n\n return {}\n })\n\n const directives = computed(() => {\n // if props.disable !== true && props.ripple !== false\n return [[Ripple, ripple.value, void 0, { center: props.round }]]\n })\n\n const nodeProps = computed(() => ({\n ref: rootRef,\n class: 'vc-btn vc-btn-item non-selectable no-outline ' + classes.value,\n style: style.value,\n ...attributes.value,\n ...onEvents.value\n }))\n\n function onClick(e) {\n if (e !== void 0) {\n if (e.defaultPrevented === true) {\n return\n }\n\n const el = document.activeElement\n // focus button if it came from ENTER on form\n // prevent the new submit (already done)\n if (\n props.type === 'submit' &&\n el !== document.body &&\n rootRef.value?.contains(el) === false &&\n // required for iOS and desktop Safari\n el?.contains(rootRef.value) === false\n ) {\n rootRef.value.focus()\n\n const onClickCleanup = () => {\n document.removeEventListener('keydown', stopAndPrevent, true)\n document.removeEventListener('keyup', onClickCleanup, passiveCapture)\n rootRef.value !== null && rootRef.value.removeEventListener('blur', onClickCleanup, passiveCapture)\n }\n\n document.addEventListener('keydown', stopAndPrevent, true)\n document.addEventListener('keyup', onClickCleanup, passiveCapture)\n rootRef.value.addEventListener('blur', onClickCleanup, passiveCapture)\n }\n }\n\n const go = () => {\n // navigateToLink(e)\n }\n\n emit('click', e, go)\n // TODO vue3 - not accounting for e.navigate\n // hasLink.value === true && e.navigate !== false && go()\n }\n\n function onKeydown(e) {\n if (isKeyCode(e, [13, 32]) === true) {\n stopAndPrevent(e)\n\n if (keyboardTarget !== rootRef.value) {\n keyboardTarget !== null && cleanup()\n\n // focus external button if the focus helper was focused before\n rootRef.value?.focus()\n\n keyboardTarget = rootRef.value\n rootRef.value?.classList.add('vc-btn--active')\n document.addEventListener('keyup', onPressEnd, true)\n rootRef.value?.addEventListener('blur', onPressEnd, passiveCapture)\n }\n }\n\n emit('keydown', e)\n }\n\n function onTouchstart(e) {\n if (touchTarget !== rootRef.value) {\n touchTarget !== null && cleanup()\n touchTarget = rootRef.value\n\n localTouchTargetEl = getTouchTarget(e.target)\n localTouchTargetEl?.addEventListener('touchcancel', onPressEnd, passiveCapture)\n localTouchTargetEl?.addEventListener('touchend', onPressEnd, passiveCapture)\n }\n\n // avoid duplicated mousedown event\n // triggering another early ripple\n avoidMouseRipple = true\n clearTimeout(mouseTimer)\n mouseTimer = setTimeout(() => {\n avoidMouseRipple = false\n }, 200)\n\n emit('touchstart', e)\n }\n\n function onMousedown(e) {\n if (mouseTarget !== rootRef.value) {\n mouseTarget !== null && cleanup()\n mouseTarget = rootRef.value\n rootRef.value?.classList.add('vc-btn--active')\n document.addEventListener('mouseup', onPressEnd, passiveCapture)\n }\n\n e.qSkipRipple = avoidMouseRipple === true\n emit('mousedown', e)\n }\n\n function onPressEnd(e) {\n // needed for IE (because it emits blur when focusing button from focus helper)\n if (e !== void 0 && e.type === 'blur' && document.activeElement === rootRef.value) {\n return\n }\n\n if (e !== void 0 && e.type === 'keyup') {\n if (keyboardTarget === rootRef.value && isKeyCode(e, [13, 32]) === true) {\n // for click trigger\n const evt = new MouseEvent('click', e)\n ;(evt as any).qKeyEvent = true\n e.defaultPrevented === true && prevent(evt)\n e.cancelBubble === true && stop(evt)\n rootRef.value?.dispatchEvent(evt)\n\n stopAndPrevent(e)\n\n // for ripple\n e.qKeyEvent = true\n }\n\n emit('keyup', e)\n }\n\n cleanup()\n }\n\n function cleanup(destroying?) {\n const blurTarget = blurTargetRef.value\n\n if (\n destroying !== true &&\n (touchTarget === rootRef.value || mouseTarget === rootRef.value) &&\n blurTarget !== null &&\n blurTarget !== document.activeElement\n ) {\n blurTarget.setAttribute('tabindex', '-1')\n blurTarget.focus()\n }\n\n if (touchTarget === rootRef.value) {\n if (localTouchTargetEl !== null) {\n localTouchTargetEl.removeEventListener('touchcancel', onPressEnd, passiveCapture)\n localTouchTargetEl.removeEventListener('touchend', onPressEnd, passiveCapture)\n }\n touchTarget = localTouchTargetEl = null\n }\n\n if (mouseTarget === rootRef.value) {\n document.removeEventListener('mouseup', onPressEnd, passiveCapture)\n mouseTarget = null\n }\n\n if (keyboardTarget === rootRef.value) {\n document.removeEventListener('keyup', onPressEnd, true)\n rootRef.value !== null && rootRef.value.removeEventListener('blur', onPressEnd, passiveCapture)\n keyboardTarget = null\n }\n\n rootRef.value !== null && rootRef.value.classList.remove('vc-btn--active')\n }\n\n function onLoadingEvt(evt) {\n stopAndPrevent(evt)\n evt.qSkipRipple = true\n }\n\n onBeforeUnmount(() => {\n cleanup(true)\n })\n\n // expose public methods\n Object.assign(proxy, {\n click: onClick\n })\n\n return () => {\n let inner: Array<VNode> = []\n\n props.icon !== void 0 &&\n inner.push(\n h(VcIcon, {\n name: props.icon,\n left: props.stack === false && hasLabel.value === true,\n role: 'img',\n 'aria-hidden': 'true'\n })\n )\n\n hasLabel.value === true && inner.push(h('span', { class: 'block' }, [props.label]))\n\n inner = hMergeSlot(slots.default, inner)\n\n if (props.iconRight !== void 0 && props.round === false) {\n inner.push(\n h(VcIcon, {\n name: props.iconRight,\n right: props.stack === false && hasLabel.value === true,\n role: 'img',\n 'aria-hidden': 'true'\n })\n )\n }\n\n const child = [\n h('span', {\n class: 'vc-focus-helper',\n ref: blurTargetRef\n })\n ]\n\n if (props.loading === true && props.percentage !== void 0) {\n child.push(\n h(\n 'span',\n {\n class: 'vc-btn__progress absolute-full overflow-hidden'\n },\n [\n h('span', {\n class: 'vc-btn__progress-indicator fit block' + (props.darkPercentage === true ? ' vc-btn__progress--dark' : ''),\n style: percentageStyle.value\n })\n ]\n )\n )\n }\n\n child.push(\n h(\n 'span',\n {\n class: 'vc-btn__content text-center col items-center vc-anchor--skip ' + innerClasses.value\n },\n inner\n )\n )\n\n props.loading !== null &&\n child.push(\n h(\n Transition,\n {\n name: 'vc-transition--fade'\n },\n () =>\n props.loading === true\n ? [\n h(\n 'span',\n {\n key: 'loading',\n class: 'absolute-full flex flex-center'\n },\n slots.loading !== void 0 ? slots.loading() : [h(VcSpinner)]\n )\n ]\n : null\n )\n )\n\n return hDir('button', nodeProps.value, child, 'ripple', props.disable !== true && props.ripple !== false, () => directives.value)\n }\n }\n})\n\nexport interface VcBtnProps {\n /**\n * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl).\n */\n size?: string | undefined\n /**\n * 1) Define the button native type attribute (submit, reset, button) or 2) render component with <a> tag so you can access events even if disable or 3) Use 'href' prop and specify 'type' as a media tag.\n * Default value: button\n */\n type?: string | undefined\n /**\n * Equivalent to Vue Router <router-link> 'to' property; Superseeded by 'href' prop if used.\n */\n to?: string | any | undefined\n /**\n * Equivalent to Vue Router <router-link> 'replace' property; Superseeded by 'href' prop if used.\n */\n replace?: boolean | undefined\n /**\n * Native <a> link href attribute; Has priority over the 'to' and 'replace' props.\n */\n href?: string | undefined\n /**\n * Native <a> link target attribute; Use it only with 'to' or 'href' props.\n */\n target?: string | undefined\n /**\n * The text that will be shown on the button.\n */\n label?: string | number | 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 * Icon name following VueCesium convention; Make sure you have the icon library installed unless you are using 'img:' prefix.\n */\n iconRight?: string | undefined\n /**\n * Use 'outline' design.\n */\n outline?: boolean | undefined\n /**\n * Use 'flat' design.\n */\n flat?: boolean | undefined\n /**\n * Remove shadow.\n */\n unelevated?: boolean | undefined\n /**\n * Applies a more prominent border-radius for a squared shape button.\n */\n rounded?: boolean | undefined\n /**\n * Use 'push' design.\n */\n push?: boolean | undefined\n /**\n * Applies a glossy effect.\n */\n glossy?: boolean | undefined\n /**\n * Makes button size and shape to fit a Floating Action Button.\n */\n fab?: boolean | undefined\n /**\n * Makes button size and shape to fit a small Floating Action Button\n */\n fabMini?: 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 * Avoid turning label text into caps (which happens by default).\n */\n noCaps?: boolean | undefined\n /**\n * Avoid label text wrapping.\n */\n noWrap?: boolean | undefined\n /**\n * Dense mode; occupies less space.\n */\n dense?: boolean | undefined\n /**\n * Configure material ripple (disable it by setting it to 'false' or supply a config object).\n * Default value: true\n */\n ripple?: boolean | any | undefined\n /**\n * Tabindex HTML attribute value.\n */\n tabindex?: number | string | undefined\n /**\n * Label or content alignment.\n * Default value: center\n */\n align?: 'left' | 'right' | 'center' | 'around' | 'between' | 'evenly' | undefined\n /**\n * Stack icon and label vertically instead of on same line (like it is by default).\n */\n stack?: boolean | undefined\n /**\n * When used on flexbox parent, button will stretch to parent's height.\n */\n stretch?: boolean | undefined\n /**\n * Put button into loading state (displays a QSpinner -- can be overridden by using a 'loading' slot).\n */\n loading?: boolean | undefined\n /**\n * Put component in disabled mode.\n */\n disable?: boolean | undefined\n /**\n * Makes a circle shaped button.\n */\n round?: boolean | undefined\n /**\n * Percentage (0.0 < x < 100.0); To be used along 'loading' prop; Display a progress bar on the background.\n */\n percentage?: number | undefined\n /**\n * Progress bar on the background should have dark color; To be used along with 'percentage' and 'loading' props.\n */\n darkPercentage?: boolean | undefined\n background?: string | undefined\n /**\n * Emitted when component is clicked (activated)\n * @param evt JS event object; If you want to cancel navigation set synchronously 'evt.navigate' to false\n * @param navigateFn When you need to control the time at which the button should trigger the route navigation then set 'evt.navigate' to false and call this function; Useful if you have async work to be done before the actual route navigation\n */\n onClick?: (evt: LooseDictionary, navigateFn: () => void) => void\n}\n\nexport interface VcBtnSlots {\n /**\n * Use for custom content, instead of relying on 'icon' and 'label' props\n */\n default: () => VNode[]\n /**\n * Override the default VcSpinner when in 'loading' state\n */\n loading: () => VNode[]\n}\n\nexport interface VcBtnRef extends ComponentPublicInstance<VcBtnProps> {\n /**\n * Emulate click on VcBtn\n * @param evt JS event object\n */\n click: (evt?: LooseDictionary) => void\n}\n"],"names":["_a","VcIcon","VcSpinner"],"mappings":"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"}