{"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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"}