{"version":3,"file":"seckbd.mjs","sources":["../../../../../../../packages/components/seckbd/src/seckbd.vue"],"sourcesContent":["<template>\n  <div ref=\"xzxSeckbdRef\" :class=\"ns.b()\">\n    <div v-if=\"slots?.header\" :class=\"[ns.e('header')]\">\n      <slot name=\"header\" />\n    </div>\n    <div v-if=\"ready\" :class=\"[ns.e('content'), ns.is('kbd-' + currentType)]\">\n      <div v-for=\"(rows, index) in standardKbd\" :key=\"index\" :class=\"[nr]\">\n        <div\n          v-for=\"item in rows\"\n          :key=\"item.key\"\n          :class=\"[ni, item?.class]\"\n          @click=\"onClickItem(item)\"\n        >\n          <div v-if=\"!slots?.[item?.key]\" :class=\"[nii]\">\n            <img\n              v-if=\"item && !item?.isHandle\"\n              :src=\"item?.value\"\n              fit=\"cover\"\n            />\n            <span v-else>{{ item?.value }}</span>\n          </div>\n          <slot v-else :name=\"item?.key\" v-bind=\"{ type: currentType }\" />\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, useSlots } from 'vue'\nimport { useSeckbd } from 'xzx-seckbd/vue'\nimport { cloneDeep, slice } from 'lodash-unified'\nimport { useNamespace } from '@xzx-design/hooks'\nimport { seckbdEmits, seckbdProps } from './seckbd'\n\ndefineOptions({\n  name: 'XzxSeckbd',\n})\n\nconst props = defineProps(seckbdProps)\nconst emits = defineEmits(seckbdEmits)\n\nconst ready = ref(false)\nconst xzxSeckbdRef: any = ref(null)\nconst inputEvent = ref()\nconst inputStartEnd = ref([0, 0])\n\nconst { uuid, lowerLetter, upperLetter, symbol, password, number, update } =\n  useSeckbd({\n    ...props.options,\n    ready: () => {\n      ready.value = true\n    },\n    error: (error: any) => {\n      emits('error', error)\n    },\n  })\n\nconst map = {\n  standard: 'lower',\n  number: 'number',\n}\nconst ct = (props.options?.type as 'standard' | 'number') || 'standard'\n\nconst currentType = ref(map[ct] || 'lower')\n\nconst slots = useSlots()\n\nconst ns = useNamespace('seckbd')\n\nconst ni = ns.e('item')\nconst nii = ns.e('item__inner')\nconst nr = ns.e('row')\n\nconst DELETE = {\n  key: 'delete',\n  value: '←',\n  class: 'is-hdl hdl-delete',\n  isHandle: true,\n}\n\nconst UPPER = {\n  key: 'upper',\n  value: '↑',\n  class: 'is-hdl hdl-upper',\n  isHandle: true,\n}\n\nconst LOWER = {\n  key: 'lower',\n  value: '↑',\n  class: 'is-hdl hdl-lower',\n  isHandle: true,\n}\n\nconst NUMBER = {\n  key: 'number',\n  value: '123',\n  class: 'is-hdl hdl-number',\n  isHandle: true,\n}\n\nconst LETTER =\n  map[ct] !== 'number'\n    ? {\n        key: 'lower',\n        value: 'ABC',\n        class: 'is-hdl hdl-number',\n        isHandle: true,\n      }\n    : {\n        key: 'lb',\n        value: '',\n        class: 'is-hdl hdl-lb',\n        isHandle: true,\n      }\n\nconst SYMBOL = {\n  key: 'symbol',\n  value: '!?#',\n  class: 'is-hdl hdl-symbol',\n  isHandle: true,\n}\nconst SPACE = {\n  key: 'space',\n  value: 'space',\n  class: 'is-hdl hdl-space',\n  isHandle: true,\n}\nconst ENTER = {\n  key: 'enter',\n  value: '↵',\n  class: 'is-hdl hdl-enter',\n  isHandle: true,\n}\n\nconst kbdMap: any = computed(() => ({\n  lower: [...number.value, ...lowerLetter.value],\n  upper: [...number.value, ...upperLetter.value],\n  symbol: symbol.value,\n  number: number.value,\n}))\n\nconst standardKbd = computed(() => {\n  let kbd = cloneDeep(kbdMap.value[currentType.value])\n\n  if (['lower', 'upper'].includes(currentType.value)) {\n    kbd.splice(29, 0, currentType.value === 'lower' ? UPPER : LOWER)\n    kbd.splice(37, 0, DELETE)\n    kbd = [...kbd, SYMBOL, NUMBER, SPACE, ENTER]\n  }\n\n  if (['symbol'].includes(currentType.value)) {\n    kbd.splice(30, 0, DELETE)\n    kbd = [...kbd, LETTER, NUMBER, SPACE, ENTER]\n    return handleKbdElement(kbd, [10, 10, 10, 5])\n  }\n\n  if (['number'].includes(currentType.value)) {\n    kbd.splice(9, 0, LETTER)\n    kbd = [...kbd, DELETE]\n    return handleKbdElement(kbd, [3, 3, 3, 3])\n  }\n\n  return handleKbdElement(kbd)\n})\n\n/**\n *\n * @example [1, 2, 3 ...]\n * @return size = [10, 10, 9, 9] -> [[10个], [10个], [9个], [9个], [剩余所有]]\n */\nfunction handleKbdElement(array: any[], size = [10, 10, 9, 9]) {\n  const groupSizes = size\n  const result = []\n  let startIndex = 0\n  groupSizes.forEach((size) => {\n    result.push(slice(array, startIndex, startIndex + size))\n    startIndex += size\n  })\n  if (startIndex < array.length) {\n    result.push(slice(array, startIndex))\n  }\n  return result\n}\n\nfunction onClickItem(item: any) {\n  const ot = {\n    uuid,\n    password,\n  }\n  if (item?.isHandle) {\n    const ch = ['upper', 'lower', 'number', 'symbol']\n    if (ch?.includes(item.key) && map[ct] !== 'number')\n      currentType.value = item.key\n    if (item.key === 'delete') changeValue()\n    emits('handle-click', item, ot)\n  } else {\n    emits('click', item.key, item, ot)\n    if (inputEvent.value) {\n      changeValue(item.key)\n    }\n  }\n}\n\nfunction changeValue(value?: string) {\n  if (!inputEvent.value) return\n\n  const inputElement = inputEvent.value\n  const cursorStart = inputElement.selectionStart\n  const cursorEnd = inputElement.selectionEnd\n\n  const isMult = cursorStart === cursorEnd\n\n  const newText = value || ''\n\n  if (isMult && cursorEnd === 0 && !newText) return\n\n  const isDelete = !newText && isMult\n\n  const offset = isDelete ? (isMult ? 1 : 0) : 0\n\n  const input =\n    inputElement.value.slice(0, cursorStart - offset) +\n    newText +\n    inputElement.value.slice(cursorEnd)\n\n  inputElement.value = input\n\n  const newCursorPosition = newText\n    ? cursorStart + newText.length\n    : cursorStart - offset\n\n  inputElement.selectionStart = inputElement.selectionEnd = newCursorPosition\n\n  const inputEventToDispatch = new Event('input', {\n    bubbles: true,\n    cancelable: true,\n  })\n  inputElement.dispatchEvent(inputEventToDispatch)\n}\n\nfunction listenerMousedown(e: Event) {\n  const target = e?.target as HTMLElement\n  if (['INPUT', 'TEXTAREA', 'CONTENTEDITABLE']?.includes(target?.tagName)) {\n    inputEvent.value = target\n    inputStartEnd.value = [\n      inputEvent.value.selectionStart,\n      inputEvent.value.selectionEnd,\n    ]\n  }\n}\n\nfunction listenerSecClick(e: Event) {\n  e.preventDefault()\n}\n\nonMounted(() => {\n  document.addEventListener('mousedown', listenerMousedown)\n  xzxSeckbdRef.value.addEventListener('mousedown', listenerSecClick)\n})\n\ndefineExpose({\n  uuid,\n  update,\n  password,\n})\n</script>\n"],"names":["size","_a"],"mappings":"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"}