{"version":3,"file":"tour.vue2.mjs","sources":["../../../components/tour/tour.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Bubble } from '@/components/bubble'\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, provide, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport {\n  emitEvent,\n  getStepByWord,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { unrefElement, useModifier, usePopper } from '@vexip-ui/hooks'\nimport { callIfFunc, decide, getGlobalCount, isClient, isFunction } from '@vexip-ui/utils'\nimport { tourProps } from './props'\nimport { TOUR_STATE } from './symbol'\n\nimport type { BubbleExposed } from '@/components/bubble'\nimport type { MaskerExposed } from '@/components/masker'\nimport type { TourSlots, TourStepOptions } from './symbol'\n\ndefineOptions({\n  name: 'Tour',\n  inheritAttrs: false\n})\n\nconst _props = defineProps(tourProps)\nconst props = useProps('tour', _props, {\n  locale: null,\n  active: false,\n  index: {\n    static: true,\n    default: 0,\n    validator: value => value >= 0\n  },\n  steps: {\n    static: true,\n    default: () => []\n  },\n  type: 'default',\n  hideMask: false,\n  signType: 'dot',\n  padding: 10,\n  closable: true,\n  permeable: false,\n  transfer: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:active', 'update:index'])\n\ndefineSlots<TourSlots>()\n\nconst idIndex = `${getGlobalCount()}`\n\nconst nh = useNameHelper('tour')\nconst locale = useLocale('tour', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst currentActive = ref(props.active)\nconst currentIndex = ref(props.index)\nconst tempSteps: Set<TourStepOptions> = reactive(new Set<any>())\nconst currentRect = ref<number[]>()\nconst sideRects = ref<(number | string)[][]>()\n\nconst masker = ref<MaskerExposed>()\nconst bubble = ref<BubbleExposed>()\nconst wrapper = computed(() => masker.value?.wrapper)\n\nuseModifier({\n  target: wrapper,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (!currentActive.value) return\n\n    decide(\n      [\n        [() => modifier.left || modifier.up, prev],\n        [() => modifier.right || modifier.down, next],\n        [() => modifier.escape, handleClose]\n      ],\n      {\n        beforeMatchAny: () => {\n          event.preventDefault()\n          event.stopPropagation()\n        },\n        afterMatchAny: modifier.resetAll\n      }\n    )\n  }\n})\n\nconst allSteps = computed(() => {\n  return Array.from(tempSteps)\n    .concat(props.steps)\n    .sort((prev, next) => (prev.order || 0) - (next.order || 0))\n})\nconst currentStep = computed(() => allSteps.value[currentIndex.value])\nconst type = computed(() => {\n  const type = currentStep.value?.type || props.type\n\n  return type === 'default' ? undefined : type\n})\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('hide-mask')]: props.hideMask,\n      [nh.bm('permeable')]: props.permeable\n    }\n  ]\n})\nconst padding = computed(() => {\n  if (Array.isArray(props.padding)) {\n    return props.padding.length === 2\n      ? [props.padding[0], props.padding[1], props.padding[0], props.padding[1]]\n      : props.padding\n  } else {\n    return new Array<number>(4).fill(props.padding)\n  }\n})\nconst maskId = computed(() => `${nh.bs(idIndex)}__mask`)\n\nconst { reference, placement, updatePopper } = usePopper({\n  wrapper,\n  placement: computed(() => currentStep.value?.placement || 'bottom'),\n  popper: computed(() => bubble.value?.$el),\n  arrow: computed(() => bubble.value?.arrow),\n  shift: { crossAxis: true },\n  autoUpdate: false\n})\n\nwatch(\n  () => props.active,\n  value => {\n    if (value) {\n      start()\n    } else {\n      currentActive.value = value\n    }\n  }\n)\nwatch(\n  () => props.index,\n  value => {\n    currentIndex.value = Math.max(0, value)\n  }\n)\nwatch(\n  [currentActive, currentStep],\n  () => {\n    sideRects.value = undefined\n\n    if (!isClient || !currentActive.value || !currentStep.value) return\n\n    const target = unrefElement(callIfFunc(currentStep.value.target) as HTMLElement)\n\n    if (!target) {\n      currentRect.value = undefined\n      return\n    }\n\n    const { top, left, width, height } = target.getBoundingClientRect()\n\n    currentRect.value = [\n      left - padding.value[3],\n      top - padding.value[0],\n      width + padding.value[1] + padding.value[3],\n      height + padding.value[0] + padding.value[2]\n    ]\n\n    if (props.permeable) {\n      const [x, y, w, h] = currentRect.value\n\n      sideRects.value = [\n        [0, 0, '100%', y],\n        [x + w, 0, `calc(100% - ${x + w}px)`, '100%'],\n        [0, y + h, '100%', `calc(100% - ${y + h}px)`],\n        [0, 0, x, '100%']\n      ]\n    }\n\n    updatePopper()\n  },\n  { immediate: true, flush: 'post' }\n)\n\nprovide(TOUR_STATE, {\n  increaseStep,\n  decreaseStep\n})\n\ndefineExpose({\n  wrapper,\n  currentActive,\n  currentIndex,\n  currentStep,\n  allSteps,\n  start,\n  prev,\n  next,\n  close\n})\n\nconst actions = { start, prev, next, close }\nconst slotParams = shallowReadonly(\n  reactive({\n    ...actions,\n    step: currentStep,\n    index: currentIndex\n  })\n)\n\nfunction increaseStep(step: TourStepOptions) {\n  tempSteps.add(step)\n}\n\nfunction decreaseStep(step: TourStepOptions) {\n  tempSteps.delete(step)\n}\n\nfunction start() {\n  if (currentActive.value) return\n\n  currentActive.value = true\n  emit('update:active', true)\n  emitEvent(props.onToggle, true)\n\n  if (currentIndex.value) {\n    currentIndex.value = 0\n    emit('update:index', 0)\n  }\n}\n\nfunction prev() {\n  if (!currentActive.value || currentIndex.value <= 0) return\n\n  --currentIndex.value\n  emit('update:index', currentIndex.value)\n  emitEvent(props.onChange, currentIndex.value, currentStep.value)\n}\n\nfunction next(autoClose = true) {\n  if (!currentActive.value) return\n\n  if (currentIndex.value >= allSteps.value.length - 1) {\n    if (autoClose) {\n      close()\n    }\n\n    return\n  }\n\n  ++currentIndex.value\n  emit('update:index', currentIndex.value)\n  emitEvent(props.onChange, currentIndex.value, currentStep.value)\n}\n\nfunction close() {\n  if (!currentActive.value) return\n\n  currentActive.value = false\n  emit('update:active', false)\n  emitEvent(props.onToggle, false)\n}\n\nfunction handleClose() {\n  if (!currentActive.value) return\n\n  close()\n  emitEvent(props.onClose)\n}\n</script>\n\n<template>\n  <div v-show=\"false\" role=\"none\" aria-hidden=\"true\">\n    <slot></slot>\n  </div>\n  <Masker\n    v-bind=\"$attrs\"\n    ref=\"masker\"\n    v-model:active=\"currentActive\"\n    :inherit=\"props.inherit\"\n    :class=\"className\"\n    :transfer=\"transfer\"\n    auto-remove\n    transition-name=\"\"\n    :disabled=\"props.hideMask\"\n    @show=\"updatePopper\"\n    @hide=\"currentRect = undefined\"\n    @mask-click=\"emitEvent(props.onMaskClick, $event)\"\n  >\n    <template #default=\"{ show }\">\n      <div\n        v-if=\"currentRect\"\n        ref=\"reference\"\n        :class=\"nh.be('reference')\"\n        role=\"none\"\n        aria-hidden=\"true\"\n        :style=\"{\n          top: `${currentRect[1]}px`,\n          left: `${currentRect[0]}px`,\n          width: `${currentRect[2]}px`,\n          height: `${currentRect[3]}px`\n        }\"\n      ></div>\n      <Transition appear :name=\"nh.ns('fade')\">\n        <Bubble\n          v-if=\"show && currentStep\"\n          ref=\"bubble\"\n          inherit\n          :class=\"[\n            nh.be('bubble'),\n            !currentRect && nh.bem('bubble', 'center'),\n            type && nh.bem('bubble', 'typed'),\n            type && nh.bem('bubble', type)\n          ]\"\n          :content-class=\"nh.be('step')\"\n          :placement=\"placement\"\n          :type=\"currentStep.type || props.type\"\n        >\n          <Renderer\n            v-if=\"isFunction(currentStep.renderer)\"\n            :renderer=\"currentStep.renderer\"\n            :data=\"actions\"\n          ></Renderer>\n          <template v-else>\n            <div :class=\"nh.be('header')\">\n              <slot name=\"header\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\n                  <div :class=\"nh.be('title')\">\n                    <slot name=\"title\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\n                        {{ currentStep.title ?? getStepByWord(locale.stepCount, currentIndex) }}\n                      </Renderer>\n                    </slot>\n                  </div>\n                  <button\n                    v-if=\"props.closable\"\n                    type=\"button\"\n                    :class=\"nh.be('close')\"\n                    @click=\"handleClose\"\n                  >\n                    <slot name=\"close\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\n                        <Icon\n                          v-bind=\"icons.close\"\n                          :scale=\"+(icons.close.scale || 1) * 1.2\"\n                          label=\"close\"\n                        ></Icon>\n                      </Renderer>\n                    </slot>\n                  </button>\n                </Renderer>\n              </slot>\n            </div>\n            <div :class=\"nh.be('content')\">\n              <slot name=\"body\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.body\" :data=\"slotParams\">\n                  {{ currentStep.content }}\n                </Renderer>\n              </slot>\n            </div>\n            <div :class=\"nh.be('footer')\">\n              <slot name=\"footer\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\n                  <div :class=\"[nh.be('sign'), nh.bem('sign', props.signType)]\">\n                    <slot name=\"sign\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.sign\" :data=\"slotParams\">\n                        <template v-if=\"props.signType === 'count'\">\n                          <span>{{ currentIndex + 1 }}</span>\n                          <span :class=\"nh.be('count-sep')\">/</span>\n                          <span>{{ allSteps.length }}</span>\n                        </template>\n                        <template v-else>\n                          <span\n                            v-for=\"n in allSteps.length\"\n                            :key=\"n\"\n                            :class=\"[\n                              nh.be(`sign-${props.signType === 'dot' ? 'dot' : 'bar'}`),\n                              n - 1 === currentIndex &&\n                                nh.bem(`sign-${props.signType === 'dot' ? 'dot' : 'bar'}`, 'active')\n                            ]\"\n                          ></span>\n                        </template>\n                      </Renderer>\n                    </slot>\n                  </div>\n                  <span style=\"flex: auto\" role=\"none\"></span>\n                  <slot name=\"actions\" v-bind=\"slotParams\">\n                    <Renderer :renderer=\"props.slots.actions\" :data=\"slotParams\">\n                      <Button\n                        v-if=\"currentIndex > 0\"\n                        inherit\n                        :class=\"[nh.be('action'), nh.bem('action', 'prev')]\"\n                        size=\"small\"\n                        :text=\"!!type\"\n                        @click=\"prev\"\n                      >\n                        {{ locale.prev }}\n                      </Button>\n                      <Button\n                        v-if=\"currentIndex <= allSteps.length - 1\"\n                        inherit\n                        :class=\"[nh.be('action'), nh.bem('action', 'next')]\"\n                        :type=\"type ? 'default' : 'primary'\"\n                        size=\"small\"\n                        @click=\"next()\"\n                      >\n                        {{ currentIndex === allSteps.length - 1 ? locale.done : locale.next }}\n                      </Button>\n                    </Renderer>\n                  </slot>\n                </Renderer>\n              </slot>\n            </div>\n          </template>\n        </Bubble>\n      </Transition>\n    </template>\n    <template #mask>\n      <svg style=\"width: 100%; height: 100%\">\n        <defs>\n          <mask :id=\"maskId\">\n            <rect\n              x=\"0\"\n              y=\"0\"\n              width=\"100%\"\n              height=\"100%\"\n              fill=\"white\"\n            />\n            <rect\n              v-if=\"currentRect\"\n              :class=\"[nh.be('hollow'), nh.bem('hollow', 'active')]\"\n              :x=\"currentRect[0]\"\n              :y=\"currentRect[1]\"\n              :width=\"currentRect[2]\"\n              :height=\"currentRect[3]\"\n              fill=\"black\"\n            />\n          </mask>\n        </defs>\n        <rect\n          x=\"0\"\n          y=\"0\"\n          width=\"100%\"\n          height=\"100%\"\n          fill=\"rgba(0, 0, 0, 45%)\"\n          :mask=\"`url(#${maskId})`\"\n        />\n        <g v-if=\"sideRects?.length\" fill=\"transparent\" style=\"pointer-events: auto\">\n          <rect\n            v-for=\"(rect, index) in sideRects\"\n            :key=\"index\"\n            :x=\"rect[0]\"\n            :y=\"rect[1]\"\n            :width=\"rect[2]\"\n            :height=\"rect[3]\"\n          />\n        </g>\n      </svg>\n    </template>\n  </Masker>\n</template>\n"],"names":["props","useProps","__props","value","emit","__emit","idIndex","getGlobalCount","nh","useNameHelper","locale","useLocale","toRef","icons","useIcons","currentActive","ref","currentIndex","tempSteps","reactive","currentRect","sideRects","masker","bubble","wrapper","computed","_a","useModifier","event","modifier","decide","prev","next","handleClose","allSteps","currentStep","type","className","padding","maskId","reference","placement","updatePopper","usePopper","watch","start","isClient","target","unrefElement","callIfFunc","top","left","width","height","x","y","w","h","provide","TOUR_STATE","increaseStep","decreaseStep","__expose","close","actions","slotParams","shallowReadonly","step","emitEvent","autoClose"],"mappings":"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"}