{"version":3,"file":"panel.mjs","sources":["../../../../../../packages/components/captcha/src/panel.vue"],"sourcesContent":["<template>\n  <div ref=\"wrapper\" :class=\"className\" :tabindex=\"-1\" role=\"application\">\n    <div :class=\"ns.e('header')\">\n      <div :class=\"ns.e('title')\">\n        <slot name=\"title\" :success=\"isSuccess\">{{\n          title ?? textInfo.doCaptcha\n        }}</slot>\n      </div>\n      <span role=\"none\" style=\"flex: auto\" />\n      <LtButton\n        v-if=\"isRefresh\"\n        text\n        :class=\"[ns.e('action'), ns.e('refresh')]\"\n        :disabled=\"actionLocked\"\n        @click=\"handleRefresh\"\n      >\n        <slot name=\"refresh\">\n          <LtIcon><Refresh /></LtIcon>\n        </slot>\n      </LtButton>\n    </div>\n\n    <div\n      v-loading=\"isLoading || slider?.isLoading\"\n      :class=\"[ns.e('image'), actionLocked && ns.em('image', 'locked')]\"\n      @click=\"handleImageClick\"\n    >\n      <div v-if=\"image\" :class=\"ns.e('image-inner')\">\n        <canvas\n          ref=\"canvas\"\n          :class=\"ns.e('canvas')\"\n          :width=\"canvasSizeIn[0]\"\n          :height=\"canvasSizeIn[1]\"\n        />\n        <div v-if=\"type === 'slide'\" :class=\"ns.e('sub-image')\">\n          <canvas\n            ref=\"subCanvas\"\n            :class=\"ns.e('sub-canvas')\"\n            :height=\"canvasSizeIn[1]\"\n            :style=\"subCanvasStyle\"\n          />\n        </div>\n      </div>\n\n      <TransitionGroup\n        v-if=\"type === 'point'\"\n        :name=\"`${defaultNamespace}-fade`\"\n        appear\n      >\n        <span\n          v-for=\"(item, index) in pointers\"\n          :key=\"index\"\n          :class=\"ns.e('pointer')\"\n          :style=\"{ top: `${item[1]}%`, left: `${item[0]}%` }\"\n          @click=\"cancelPointer.bind(null, index)\"\n        >\n          {{ index + 1 }}\n        </span>\n      </TransitionGroup>\n\n      <Transition :name=\"`${defaultNamespace}-fade`\">\n        <div\n          v-if=\"isSuccess || failed\"\n          :class=\"[\n            ns.e('image-tip'),\n            ns.em('image-tip', isSuccess ? 'success' : 'fail'),\n          ]\"\n          @click=\"stopPropagation\"\n        >\n          {{\n            isSuccess\n              ? successTip ?? textInfo.success\n              : failTip ?? textInfo.fail\n          }}\n        </div>\n      </Transition>\n    </div>\n\n    <CaptchaSlider\n      v-if=\"type === 'slide'\"\n      ref=\"slider\"\n      :class=\"ns.em('slider', 'inner')\"\n      :target=\"currentTarget?.[0]\"\n      :tolerance=\"tolerance\"\n      :loading=\"isLoading\"\n      loading-lock\n      :disabled=\"disabled || failLocked\"\n      :on-before-test=\"onBeforeTest\"\n      :on-success=\"handleSlideSuccess\"\n      :on-fail=\"handleSlideFail\"\n      :on-drag-start=\"handleDragStart\"\n      :on-drag=\"handleDrag\"\n      :on-drag-end=\"handleDragEnd\"\n    >\n      <template #tip>\n        <slot name=\"tip\" :success=\"isSuccess\">\n          {{ tip ?? textInfo.slide }}\n        </slot>\n      </template>\n    </CaptchaSlider>\n\n    <div v-if=\"type === 'point'\" :class=\"ns.e('text-list')\">\n      <div :class=\"ns.e('tip')\">\n        <slot name=\"tip\" :success=\"isSuccess\">\n          {{ tip ?? textInfo.pointInOrder }}</slot\n        >\n      </div>\n      <span>:</span>\n      <slot name=\"texts\" :texts=\"texts\">\n        <span\n          v-for=\"(text, index) in texts || []\"\n          :key=\"index\"\n          :class=\"ns.e('text')\"\n        >\n          {{ text }}\n        </span>\n      </slot>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { defaultNamespace, useNamespace } from '@lit-element/hooks'\nimport { Refresh } from '@inte-cloud/icons-vue'\nimport { parseTarget, textInfo } from './data'\nimport CaptchaSlider from './captcha-slider.vue'\nimport useCaptchaImg from './hooks/useCaptchaImg'\n\ndefineOptions({\n  name: 'LtCaptchaPanel',\n})\n\nconst props = defineProps({\n  type: {\n    type: String,\n    default: 'slide',\n  },\n  slideTarget: [Number, Array],\n  title: String,\n  tip: String,\n  successTip: String,\n  failTip: String,\n  image: [String, Function],\n  tolerance: Number,\n  canvasSize: Array,\n  disabled: Boolean,\n  loading: Boolean,\n  onBeforeTest: Function,\n  texts: Array,\n  failLimit: {\n    type: Number,\n    default: 0,\n  },\n  remotePoint: Boolean,\n  useTrigger: Boolean,\n  visible: Boolean,\n  hollowShape: [Function, String],\n  hideDelay: {\n    type: Number,\n    default: 3000,\n    validator: (value: number) => value >= 0,\n  },\n  isRefresh: Boolean,\n})\n\nconst emits = defineEmits([\n  'refresh',\n  'drag',\n  'drag-start',\n  'drag-end',\n  'fail',\n  'success',\n  'success-change',\n])\n\nconst ns = useNamespace('captcha')\n\nconst slider = ref<any>()\n\nconst dragging = ref(false)\nconst success = ref(false)\nconst failed = ref(false)\nconst failedCount = ref(0)\nconst wrapper = ref<HTMLElement>()\n\nconst isSuccess = computed(() => !!slider.value?.isSuccess || success.value)\nconst currentTarget = computed(() => parseTarget(props.slideTarget))\n\nconst failLocked = computed(\n  () => props.failLimit > 0 && failedCount.value >= props.failLimit\n)\n\nconst canvasSizeIn: any = computed(() => {\n  return [props.canvasSize?.[0] || 1000, props.canvasSize?.[1] || 600]\n})\n\nconst {\n  canvas,\n  subCanvas,\n  actionLocked,\n  handleImageClick,\n  subCanvasStyle,\n  pointers,\n  isLoading,\n  cancelPointer,\n  stopPropagation,\n  updateImgPromise,\n  drawImageNextFrame,\n  getImgEle,\n  imgReset,\n  drawImage,\n} = useCaptchaImg({\n  slider,\n  props,\n  currentTarget,\n  isSuccess,\n  failFn: () => {\n    ++failedCount.value\n    success.value = false\n    failed.value = true\n    emits('fail')\n  },\n  successFn: (percent: any) => {\n    success.value = true\n    failed.value = false\n    emits('success', percent)\n  },\n})\n\nwatch(\n  [\n    () => props.type,\n    () => props.texts,\n    () => props.texts?.length,\n    () => props.remotePoint,\n  ],\n  () => {\n    if (\n      props.type === 'point' &&\n      props.texts?.length &&\n      !props.remotePoint &&\n      getImgEle()\n    ) {\n      drawImageNextFrame()\n    }\n  }\n)\n\nwatch([() => props.image, wrapper], async () => {\n  await updateImgPromise(true)\n  drawImageNextFrame()\n})\n\nwatch(\n  [\n    currentTarget,\n    () => props.canvasSize?.[0],\n    () => props.canvasSize?.[1],\n    () => props.hollowShape,\n  ],\n  () => {\n    drawImageNextFrame()\n  }\n)\n\nwatch(\n  () => props.visible,\n  async (value) => {\n    if (value) {\n      await updateImgPromise()\n      drawImageNextFrame()\n    }\n  }\n)\n\nwatch(isSuccess, (value: boolean) => {\n  emits('success-change', value)\n})\n\nfunction handleDragStart(percent: number) {\n  dragging.value = true\n  emits('drag-start', percent)\n}\n\nfunction handleDrag(percent: number) {\n  emits('drag', percent)\n}\n\nfunction handleDragEnd(percent: number) {\n  dragging.value = false\n  emits('drag-end', percent)\n}\n\nfunction handleSlideSuccess(percent: number) {\n  success.value = true\n  failed.value = false\n  emits('success', percent)\n}\n\nfunction handleSlideFail() {\n  failed.value = true\n  ++failedCount.value\n  emits('fail')\n}\n\nconst className = computed(() => {\n  return [\n    ns.b(),\n    ns.m(props.type),\n    {\n      [ns.m('success')]: isSuccess.value,\n      [ns.m('fail')]: !isSuccess.value && failed.value,\n      [ns.m('dragging')]: dragging.value,\n      [ns.m('disabled')]: props.disabled,\n      [ns.m('loading')]: isLoading.value,\n      [ns.m('fail-locked')]: failLocked.value,\n    },\n  ]\n})\n\nfunction handleRefresh() {\n  if (!actionLocked.value) {\n    emits('refresh')\n  }\n}\n\nasync function reset(newImage?: string | (() => Promise<string>)) {\n  await imgReset(newImage)\n  failedCount.value = 0\n  success.value = false\n  failed.value = false\n  slider.value?.reset()\n  // currentTarget.value = parseTarget()\n}\n\nonMounted(async () => {\n  await updateImgPromise()\n  drawImage()\n})\ndefineExpose({\n  reset,\n})\n</script>\n"],"names":[],"mappings":"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"}