@qxs-bns/components 0.0.53 → 0.0.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/es/index.mjs +1 -1
  2. package/es/index.mjs.map +1 -1
  3. package/es/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.13_typescript@5.8.2_/node_modules/@iconify/vue/dist/iconify.mjs +2 -0
  4. package/es/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.13_typescript@5.8.2_/node_modules/@iconify/vue/dist/iconify.mjs.map +1 -0
  5. package/es/package.json.mjs +1 -1
  6. package/es/src/components.mjs +1 -1
  7. package/es/src/icon/index.mjs +2 -0
  8. package/es/src/icon/index.mjs.map +1 -0
  9. package/es/src/icon/src/icon.vue.mjs +2 -0
  10. package/es/src/icon/src/icon.vue.mjs.map +1 -0
  11. package/es/src/icon/src/icon.vue2.mjs +2 -0
  12. package/es/src/icon/src/icon.vue2.mjs.map +1 -0
  13. package/es/src/image-upload/src/image-upload.vue.mjs +1 -1
  14. package/es/src/image-upload/src/image-upload.vue.mjs.map +1 -1
  15. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs +1 -1
  16. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs.map +1 -1
  17. package/lib/index.cjs +1 -1
  18. package/lib/index.cjs.map +1 -1
  19. package/lib/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.13_typescript@5.8.2_/node_modules/@iconify/vue/dist/iconify.cjs +2 -0
  20. package/lib/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.13_typescript@5.8.2_/node_modules/@iconify/vue/dist/iconify.cjs.map +1 -0
  21. package/lib/package.json.cjs +1 -1
  22. package/lib/src/components.cjs +1 -1
  23. package/lib/src/icon/index.cjs +2 -0
  24. package/lib/src/icon/index.cjs.map +1 -0
  25. package/lib/src/icon/src/icon.vue.cjs +2 -0
  26. package/lib/src/icon/src/icon.vue.cjs.map +1 -0
  27. package/lib/src/icon/src/icon.vue2.cjs +2 -0
  28. package/lib/src/icon/src/icon.vue2.cjs.map +1 -0
  29. package/lib/src/image-upload/src/image-upload.vue.cjs +1 -1
  30. package/lib/src/image-upload/src/image-upload.vue.cjs.map +1 -1
  31. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs +1 -1
  32. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs.map +1 -1
  33. package/package.json +3 -1
  34. package/theme-chalk/index.css +1 -1
  35. package/theme-chalk/index.scss +1 -0
  36. package/theme-chalk/src/icon.css +1 -0
  37. package/theme-chalk/src/icon.scss +19 -0
  38. package/theme-chalk/src/image-upload.css +1 -1
  39. package/theme-chalk/src/image-upload.scss +33 -111
  40. package/theme-chalk/src/photo-crop-tool.css +1 -1
  41. package/theme-chalk/src/photo-crop-tool.scss +17 -3
  42. package/types/src/components.d.ts +1 -0
  43. package/types/src/components.d.ts.map +1 -1
  44. package/types/src/icon/index.d.ts +4 -0
  45. package/types/src/icon/index.d.ts.map +1 -0
  46. package/types/src/icon/src/icon.vue.d.ts +11 -0
  47. package/types/src/icon/src/icon.vue.d.ts.map +1 -0
  48. package/types/src/icon/style/index.d.ts +3 -0
  49. package/types/src/icon/style/index.d.ts.map +1 -0
  50. package/types/src/image-upload/index.d.ts +43 -6
  51. package/types/src/image-upload/index.d.ts.map +1 -1
  52. package/types/src/image-upload/src/image-upload.vue.d.ts +103 -4
  53. package/types/src/image-upload/src/image-upload.vue.d.ts.map +1 -1
  54. package/types/src/image-upload/style/index.d.ts +1 -1
  55. package/types/src/image-upload/style/index.d.ts.map +1 -1
  56. package/types/src/photo-crop-tool/src/photo-crop-tool.vue.d.ts.map +1 -1
  57. package/types/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"photo-crop-tool.vue.mjs","sources":["../../../../../../packages/components/src/photo-crop-tool/src/photo-crop-tool.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { useCanvas } from './composables'\n\ndefineOptions({\n name: 'QxsPhotoCropTool',\n})\n\nconst props = defineProps({\n imgFile: {\n type: Object as PropType<File>,\n default: () => null,\n },\n aspectRatio: {\n type: String,\n default: () => '16 / 9',\n },\n defaultWidth: {\n type: Number,\n default: () => 320,\n },\n defaultHeight: {\n type: Number,\n default: () => 180,\n },\n /**\n * free 自由缩放\n * fixed 固定比例缩放\n */\n zoomType: {\n type: String,\n default: () => 'fixed',\n },\n})\nlet startX = 0\nlet startY = 0\nlet startWidth = 0\nlet startHeight = 0\n\nconst ns = useNamespace('photo-crop-tool')\n\nconst cropBoxRef = ref<HTMLElement | null>(null)\nconst containerBoxRef = ref<HTMLElement | null>(null)\nconst imgRef = ref<HTMLImageElement | null>(null)\nconst errorMessage = ref('')\nconst dargPoint = ref('')\nconst initialValue = ref({\n x: 0,\n y: 0,\n})\nconst cropInfo = ref({\n width: props.defaultWidth,\n height: props.defaultHeight,\n x: 0,\n y: 0,\n})\n\nconst { width, height } = useElementSize(cropBoxRef)\nconst { width: imgWidth } = useElementSize(imgRef)\n\nconst { x, y, style } = useDraggable(cropBoxRef, {\n containerElement: containerBoxRef,\n draggingElement: cropBoxRef,\n disabled: computed(() => !!dargPoint.value),\n exact: true,\n initialValue,\n})\n\nconst imageUrl = computed(() => {\n if (!props.imgFile) {\n return ''\n }\n return URL.createObjectURL(props.imgFile)\n})\n\nwatch(\n () => props.imgFile,\n (newFile: File | null) => {\n if (newFile && !newFile.type.startsWith('image/')) {\n errorMessage.value = '文件类型错误'\n }\n else {\n errorMessage.value = ''\n }\n },\n)\n\nconst ratio = computed(() => {\n return (imgRef.value?.naturalWidth || 0) / imgWidth.value\n})\n\nconst customStyle = computed(() => {\n const position = {\n left: 0,\n top: 0,\n }\n if (dargPoint.value === 'bottom-right') {\n position.left = cropInfo.value.x\n position.top = cropInfo.value.y\n }\n else if (dargPoint.value === 'top-left') {\n position.left = cropInfo.value.x - width.value\n position.top = cropInfo.value.y - height.value\n }\n else if (dargPoint.value === 'top-right') {\n position.top = cropInfo.value.y - height.value\n position.left = cropInfo.value.x\n }\n else if (dargPoint.value === 'bottom-left') {\n position.left = cropInfo.value.x - width.value\n position.top = cropInfo.value.y\n }\n return position\n})\n\nconst sizeStyle = computed(() => {\n const { aspectRatio } = props\n\n const style: {\n 'height'?: string\n 'width': string\n 'aspect-ratio'?: string\n 'top': string\n 'left': string\n } = {\n 'width': `${cropInfo.value.width || props.defaultWidth}`,\n 'height': `${cropInfo.value.height || props.defaultHeight}`,\n 'aspect-ratio': aspectRatio,\n 'top': `${customStyle.value.top}px`,\n 'left': `${customStyle.value.left}px`,\n }\n if (props.zoomType === 'free') {\n delete style['aspect-ratio']\n }\n else if (props.zoomType === 'fixed') {\n delete style.height\n }\n return ns.cssVarBlock(style)\n})\n\nfunction zoom(pixel: number) {\n return pixel * ratio.value\n}\nasync function crop(img: HTMLImageElement = imgRef.value!) {\n let backgroundColor = 'transparent'\n if (containerBoxRef.value) {\n backgroundColor = window.getComputedStyle(\n containerBoxRef.value,\n ).backgroundColor\n }\n const canvas = document.createElement('canvas')\n canvas.width = zoom(containerBoxRef.value?.clientWidth || 0)\n canvas.height = zoom(containerBoxRef.value?.clientHeight || 0)\n const { drawImage, cropCanvas, drawColor } = useCanvas(canvas)\n drawColor(0, 0, canvas.width, canvas.height, backgroundColor)\n drawImage(\n img,\n zoom(img.offsetLeft),\n zoom(img.offsetTop),\n img.naturalWidth,\n img.naturalHeight,\n )\n return await cropCanvas(\n zoom(x.value),\n zoom(y.value),\n zoom(width.value),\n zoom(height.value),\n )\n}\n\nfunction checkBoundaries(\n newWidth: number,\n newHeight: number,\n): { width: number, height: number } {\n const maxWidth = containerBoxRef.value?.clientWidth || Infinity\n const maxHeight = containerBoxRef.value?.clientHeight || Infinity\n\n return {\n width: Math.min(Math.max(newWidth, 0), maxWidth),\n height: Math.min(Math.max(newHeight, 0), maxHeight),\n }\n}\n\nfunction mousemove(e: MouseEvent) {\n const deltaX = e.clientX - startX\n const deltaY = e.clientY - startY\n\n if (dargPoint.value === 'bottom-right') {\n if (props.zoomType === 'free') {\n const { width, height } = checkBoundaries(\n startWidth + deltaX,\n startHeight + deltaY,\n )\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n else if (props.zoomType === 'fixed') {\n const aspectRatio\n = Number.parseFloat(props.aspectRatio.split(' / ')[0])\n / Number.parseFloat(props.aspectRatio.split(' / ')[1])\n let newWidth = startWidth + deltaX\n let newHeight = newWidth / aspectRatio\n const { width, height } = checkBoundaries(newWidth, newHeight)\n if (height > (containerBoxRef.value?.clientHeight || Infinity)) {\n newHeight = containerBoxRef.value?.clientHeight || Infinity\n newWidth = newHeight * aspectRatio\n }\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n }\n else if (dargPoint.value === 'top-left') {\n if (props.zoomType === 'free') {\n const { width, height } = checkBoundaries(\n startWidth - deltaX,\n startHeight - deltaY,\n )\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n else if (props.zoomType === 'fixed') {\n const aspectRatio\n = Number.parseFloat(props.aspectRatio.split(' / ')[0])\n / Number.parseFloat(props.aspectRatio.split(' / ')[1])\n let newWidth = startWidth - deltaX\n let newHeight = newWidth / aspectRatio\n const { width, height } = checkBoundaries(newWidth, newHeight)\n if (height > (containerBoxRef.value?.clientHeight || Infinity)) {\n newHeight = containerBoxRef.value?.clientHeight || Infinity\n newWidth = newHeight * aspectRatio\n }\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n x.value = customStyle.value.left\n y.value = customStyle.value.top\n }\n else if (dargPoint.value === 'top-right') {\n if (props.zoomType === 'free') {\n const { width, height } = checkBoundaries(\n startWidth + deltaX,\n startHeight - deltaY,\n )\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n else if (props.zoomType === 'fixed') {\n const aspectRatio\n = Number.parseFloat(props.aspectRatio.split(' / ')[0])\n / Number.parseFloat(props.aspectRatio.split(' / ')[1])\n let newWidth = startWidth + deltaX\n let newHeight = newWidth / aspectRatio\n const { width, height } = checkBoundaries(newWidth, newHeight)\n if (height > (containerBoxRef.value?.clientHeight || Infinity)) {\n newHeight = containerBoxRef.value?.clientHeight || Infinity\n newWidth = newHeight * aspectRatio\n }\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n x.value = customStyle.value.left\n y.value = customStyle.value.top\n }\n else if (dargPoint.value === 'bottom-left') {\n if (props.zoomType === 'free') {\n const { width, height } = checkBoundaries(\n startWidth - deltaX,\n startHeight + deltaY,\n )\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n else if (props.zoomType === 'fixed') {\n const aspectRatio\n = Number.parseFloat(props.aspectRatio.split(' / ')[0])\n / Number.parseFloat(props.aspectRatio.split(' / ')[1])\n let newWidth = startWidth - deltaX\n let newHeight = newWidth / aspectRatio\n const { width, height } = checkBoundaries(newWidth, newHeight)\n if (height > (containerBoxRef.value?.clientHeight || Infinity)) {\n newHeight = containerBoxRef.value?.clientHeight || Infinity\n newWidth = newHeight * aspectRatio\n }\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n x.value = customStyle.value.left\n y.value = customStyle.value.top\n }\n e.preventDefault()\n e.stopPropagation()\n}\n\nfunction mousedown(e: MouseEvent, point: string) {\n dargPoint.value = point\n startX = e.clientX\n startY = e.clientY\n startWidth = cropInfo.value.width\n startHeight = cropInfo.value.height\n\n if (point === 'bottom-right') {\n cropInfo.value.x = x.value\n cropInfo.value.y = y.value\n }\n else if (point === 'top-left') {\n cropInfo.value.x = x.value + width.value\n cropInfo.value.y = y.value + height.value\n }\n else if (point === 'top-right') {\n cropInfo.value.x = x.value\n cropInfo.value.y = y.value + height.value\n }\n else if (point === 'bottom-left') {\n cropInfo.value.x = x.value + width.value\n cropInfo.value.y = y.value\n }\n}\n\nfunction mouseup() {\n dargPoint.value = ''\n}\n\nfunction resize() {\n cropInfo.value.width = props.defaultWidth\n cropInfo.value.height = props.defaultHeight\n x.value = 0\n y.value = 0\n}\n\ndocument.addEventListener('mouseup', mouseup)\ndocument.addEventListener('mousemove', mousemove)\n\nonMounted(() => {\n nextTick(() => {\n // 初始化位置\n initialValue.value.x\n = (containerBoxRef.value?.offsetWidth || 0) / 2 - cropInfo.value.width / 2\n initialValue.value.y\n = (containerBoxRef.value?.offsetHeight || 0) / 2\n - cropInfo.value.height / 2\n })\n})\n\nonUnmounted(() => {\n if (imageUrl.value) {\n URL.revokeObjectURL(imageUrl.value)\n }\n document.removeEventListener('mouseup', mouseup)\n document.removeEventListener('mousemove', mousemove)\n})\n\ndefineExpose({\n crop,\n resize,\n})\n</script>\n\n<template>\n <div\n ref=\"containerBoxRef\"\n :class=\"[ns.e('img-box')]\"\n >\n <div\n v-if=\"errorMessage\"\n :class=\"[ns.e('error-message')]\"\n >\n {{ errorMessage }}\n </div>\n <template v-else>\n <img\n ref=\"imgRef\"\n :class=\"[ns.e('image')]\"\n :src=\"imageUrl\"\n >\n <div\n ref=\"cropBoxRef\"\n :class=\"[ns.e('crop-tool-box')]\"\n :style=\"[\n sizeStyle,\n dargPoint\n ? `left: ${customStyle.left}px;top: ${customStyle.top}px`\n : style,\n ]\"\n >\n <div\n :class=\"[ns.e('top-left')]\"\n @mousedown=\"mousedown($event, 'top-left')\"\n />\n <div\n :class=\"[ns.e('top-right')]\"\n @mousedown=\"mousedown($event, 'top-right')\"\n />\n <div\n :class=\"[ns.e('bottom-right')]\"\n @mousedown=\"mousedown($event, 'bottom-right')\"\n />\n <div\n :class=\"[ns.e('bottom-left')]\"\n @mousedown=\"mousedown($event, 'bottom-left')\"\n />\n </div>\n </template>\n </div>\n</template>\n"],"names":["props","__props","startX","startY","startWidth","startHeight","ns","useNamespace","cropBoxRef","ref","containerBoxRef","imgRef","errorMessage","dargPoint","initialValue","x","y","cropInfo","width","defaultWidth","height","defaultHeight","useElementSize","imgWidth","style","useDraggable","containerElement","draggingElement","disabled","computed","value","exact","imageUrl","imgFile","URL","createObjectURL","watch","newFile","type","startsWith","ratio","naturalWidth","customStyle","position","left","top","sizeStyle","aspectRatio","zoomType","cssVarBlock","zoom","pixel","checkBoundaries","newWidth","newHeight","maxWidth","clientWidth","Infinity","maxHeight","clientHeight","Math","min","max","mousemove","e","deltaX","clientX","deltaY","clientY","Number","parseFloat","split","preventDefault","stopPropagation","mousedown","point","mouseup","document","addEventListener","onMounted","nextTick","offsetWidth","offsetHeight","onUnmounted","revokeObjectURL","removeEventListener","__expose","crop","async","img","backgroundColor","window","getComputedStyle","canvas","createElement","drawImage","cropCanvas","drawColor","useCanvas","offsetLeft","offsetTop","naturalHeight","resize"],"mappings":"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"}
1
+ {"version":3,"file":"photo-crop-tool.vue.mjs","sources":["../../../../../../packages/components/src/photo-crop-tool/src/photo-crop-tool.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { useCanvas } from './composables'\n\ndefineOptions({\n name: 'QxsPhotoCropTool',\n})\n\nconst props = defineProps({\n imgFile: {\n type: Object as PropType<File>,\n default: () => null,\n },\n aspectRatio: {\n type: String,\n default: () => '16 / 9',\n },\n defaultWidth: {\n type: Number,\n default: () => 320,\n },\n defaultHeight: {\n type: Number,\n default: () => 180,\n },\n /**\n * free 自由缩放\n * fixed 固定比例缩放\n */\n zoomType: {\n type: String,\n default: () => 'fixed',\n },\n})\nlet startX = 0\nlet startY = 0\nlet startWidth = 0\nlet startHeight = 0\n\nconst ns = useNamespace('photo-crop-tool')\n\nconst cropBoxRef = ref<HTMLElement | null>(null)\nconst containerBoxRef = ref<HTMLElement | null>(null)\nconst imgRef = ref<HTMLImageElement | null>(null)\nconst errorMessage = ref('')\nconst dargPoint = ref('')\nconst initialValue = ref({\n x: 0,\n y: 0,\n})\nconst cropInfo = ref({\n width: props.defaultWidth,\n height: props.defaultHeight,\n x: 0,\n y: 0,\n})\n\nconst { width, height } = useElementSize(cropBoxRef)\nconst { width: imgWidth } = useElementSize(imgRef)\n\nconst { x, y, style } = useDraggable(cropBoxRef, {\n containerElement: containerBoxRef,\n draggingElement: cropBoxRef,\n disabled: computed(() => !!dargPoint.value),\n exact: true,\n initialValue,\n})\n\nconst imageUrl = computed(() => {\n if (!props.imgFile) {\n return ''\n }\n return URL.createObjectURL(props.imgFile)\n})\n\nwatch(\n () => props.imgFile,\n (newFile: File | null) => {\n if (newFile && !newFile.type.startsWith('image/')) {\n errorMessage.value = '文件类型错误'\n }\n else {\n errorMessage.value = ''\n }\n },\n)\n\nconst ratio = computed(() => {\n return (imgRef.value?.naturalWidth || 0) / imgWidth.value\n})\n\nconst customStyle = computed(() => {\n const position = {\n left: 0,\n top: 0,\n }\n if (dargPoint.value === 'bottom-right') {\n position.left = cropInfo.value.x\n position.top = cropInfo.value.y\n }\n else if (dargPoint.value === 'top-left') {\n position.left = cropInfo.value.x - width.value\n position.top = cropInfo.value.y - height.value\n }\n else if (dargPoint.value === 'top-right') {\n position.top = cropInfo.value.y - height.value\n position.left = cropInfo.value.x\n }\n else if (dargPoint.value === 'bottom-left') {\n position.left = cropInfo.value.x - width.value\n position.top = cropInfo.value.y\n }\n return position\n})\n\nconst sizeStyle = computed(() => {\n const { aspectRatio } = props\n\n const style: {\n 'height'?: string\n 'width': string\n 'aspect-ratio'?: string\n 'top': string\n 'left': string\n } = {\n 'width': `${cropInfo.value.width || props.defaultWidth}`,\n 'height': `${cropInfo.value.height || props.defaultHeight}`,\n 'aspect-ratio': aspectRatio,\n 'top': `${customStyle.value.top}px`,\n 'left': `${customStyle.value.left}px`,\n }\n if (props.zoomType === 'free') {\n delete style['aspect-ratio']\n }\n else if (props.zoomType === 'fixed') {\n delete style.height\n }\n return ns.cssVarBlock(style)\n})\n\nfunction zoom(pixel: number) {\n return pixel * ratio.value\n}\nasync function crop(img: HTMLImageElement = imgRef.value!) {\n let backgroundColor = 'transparent'\n if (containerBoxRef.value) {\n backgroundColor = window.getComputedStyle(\n containerBoxRef.value,\n ).backgroundColor\n }\n const canvas = document.createElement('canvas')\n canvas.width = zoom(containerBoxRef.value?.clientWidth || 0)\n canvas.height = zoom(containerBoxRef.value?.clientHeight || 0)\n const { drawImage, cropCanvas, drawColor } = useCanvas(canvas)\n drawColor(0, 0, canvas.width, canvas.height, backgroundColor)\n drawImage(\n img,\n zoom(img.offsetLeft),\n zoom(img.offsetTop),\n img.naturalWidth,\n img.naturalHeight,\n )\n return await cropCanvas(\n zoom(x.value),\n zoom(y.value),\n zoom(width.value),\n zoom(height.value),\n )\n}\n\nfunction checkBoundaries(\n newWidth: number,\n newHeight: number,\n): { width: number, height: number } {\n const maxWidth = containerBoxRef.value?.clientWidth || Infinity\n const maxHeight = containerBoxRef.value?.clientHeight || Infinity\n\n return {\n width: Math.min(Math.max(newWidth, 0), maxWidth),\n height: Math.min(Math.max(newHeight, 0), maxHeight),\n }\n}\n\nfunction getClientPos(e: MouseEvent | TouchEvent): { clientX: number, clientY: number } {\n if (e instanceof MouseEvent) {\n return { clientX: e.clientX, clientY: e.clientY }\n }\n else if (e instanceof TouchEvent && e.touches.length > 0) {\n return { clientX: e.touches[0].clientX, clientY: e.touches[0].clientY }\n }\n return { clientX: 0, clientY: 0 }\n}\n\nfunction handleStart(e: MouseEvent | TouchEvent, point: string) {\n const { clientX, clientY } = getClientPos(e)\n dargPoint.value = point\n startX = clientX\n startY = clientY\n startWidth = cropInfo.value.width\n startHeight = cropInfo.value.height\n\n // 添加移动端事件监听\n document.addEventListener('touchmove', handleMove, { passive: false })\n document.addEventListener('touchend', handleEnd)\n\n if (point === 'bottom-right') {\n cropInfo.value.x = x.value\n cropInfo.value.y = y.value\n }\n else if (point === 'top-left') {\n cropInfo.value.x = x.value + width.value\n cropInfo.value.y = y.value + height.value\n }\n else if (point === 'top-right') {\n cropInfo.value.x = x.value\n cropInfo.value.y = y.value + height.value\n }\n else if (point === 'bottom-left') {\n cropInfo.value.x = x.value + width.value\n cropInfo.value.y = y.value\n }\n\n // Prevent touch scrolling\n if (e instanceof TouchEvent) {\n e.preventDefault()\n }\n}\n\nfunction handleMove(e: MouseEvent | TouchEvent) {\n // Only prevent default if we're in a drag operation\n if (e instanceof TouchEvent && dargPoint.value) {\n e.preventDefault()\n }\n\n const { clientX, clientY } = getClientPos(e)\n const deltaX = clientX - startX\n const deltaY = clientY - startY\n\n if (dargPoint.value === 'bottom-right') {\n if (props.zoomType === 'free') {\n const { width, height } = checkBoundaries(\n startWidth + deltaX,\n startHeight + deltaY,\n )\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n else if (props.zoomType === 'fixed') {\n const aspectRatio\n = Number.parseFloat(props.aspectRatio.split(' / ')[0])\n / Number.parseFloat(props.aspectRatio.split(' / ')[1])\n let newWidth = startWidth + deltaX\n let newHeight = newWidth / aspectRatio\n const { width, height } = checkBoundaries(newWidth, newHeight)\n if (height > (containerBoxRef.value?.clientHeight || Infinity)) {\n newHeight = containerBoxRef.value?.clientHeight || Infinity\n newWidth = newHeight * aspectRatio\n }\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n }\n else if (dargPoint.value === 'top-left') {\n if (props.zoomType === 'free') {\n const { width, height } = checkBoundaries(\n startWidth - deltaX,\n startHeight - deltaY,\n )\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n else if (props.zoomType === 'fixed') {\n const aspectRatio\n = Number.parseFloat(props.aspectRatio.split(' / ')[0])\n / Number.parseFloat(props.aspectRatio.split(' / ')[1])\n let newWidth = startWidth - deltaX\n let newHeight = newWidth / aspectRatio\n const { width, height } = checkBoundaries(newWidth, newHeight)\n if (height > (containerBoxRef.value?.clientHeight || Infinity)) {\n newHeight = containerBoxRef.value?.clientHeight || Infinity\n newWidth = newHeight * aspectRatio\n }\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n x.value = customStyle.value.left\n y.value = customStyle.value.top\n }\n else if (dargPoint.value === 'top-right') {\n if (props.zoomType === 'free') {\n const { width, height } = checkBoundaries(\n startWidth + deltaX,\n startHeight - deltaY,\n )\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n else if (props.zoomType === 'fixed') {\n const aspectRatio\n = Number.parseFloat(props.aspectRatio.split(' / ')[0])\n / Number.parseFloat(props.aspectRatio.split(' / ')[1])\n let newWidth = startWidth + deltaX\n let newHeight = newWidth / aspectRatio\n const { width, height } = checkBoundaries(newWidth, newHeight)\n if (height > (containerBoxRef.value?.clientHeight || Infinity)) {\n newHeight = containerBoxRef.value?.clientHeight || Infinity\n newWidth = newHeight * aspectRatio\n }\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n x.value = customStyle.value.left\n y.value = customStyle.value.top\n }\n else if (dargPoint.value === 'bottom-left') {\n if (props.zoomType === 'free') {\n const { width, height } = checkBoundaries(\n startWidth - deltaX,\n startHeight + deltaY,\n )\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n else if (props.zoomType === 'fixed') {\n const aspectRatio\n = Number.parseFloat(props.aspectRatio.split(' / ')[0])\n / Number.parseFloat(props.aspectRatio.split(' / ')[1])\n let newWidth = startWidth - deltaX\n let newHeight = newWidth / aspectRatio\n const { width, height } = checkBoundaries(newWidth, newHeight)\n if (height > (containerBoxRef.value?.clientHeight || Infinity)) {\n newHeight = containerBoxRef.value?.clientHeight || Infinity\n newWidth = newHeight * aspectRatio\n }\n cropInfo.value.width = width\n cropInfo.value.height = height\n }\n x.value = customStyle.value.left\n y.value = customStyle.value.top\n }\n}\n\nfunction handleEnd() {\n // 移除移动端事件监听\n document.removeEventListener('touchmove', handleMove)\n document.removeEventListener('touchend', handleEnd)\n\n dargPoint.value = ''\n}\n\nfunction resize() {\n cropInfo.value.width = props.defaultWidth\n cropInfo.value.height = props.defaultHeight\n x.value = 0\n y.value = 0\n}\n\nonMounted(() => {\n nextTick(() => {\n // 初始化位置\n initialValue.value.x\n = (containerBoxRef.value?.offsetWidth || 0) / 2 - cropInfo.value.width / 2\n initialValue.value.y\n = (containerBoxRef.value?.offsetHeight || 0) / 2\n - cropInfo.value.height / 2\n })\n\n // 只添加鼠标事件监听\n document.addEventListener('mouseup', handleEnd)\n document.addEventListener('mousemove', handleMove, { passive: false })\n document.addEventListener('touchmove', handleMove, { passive: false })\n document.addEventListener('touchend', handleEnd)\n})\n\nonUnmounted(() => {\n if (imageUrl.value) {\n URL.revokeObjectURL(imageUrl.value)\n }\n // 确保移除所有事件监听\n document.removeEventListener('mouseup', handleEnd)\n document.removeEventListener('mousemove', handleMove)\n})\n\ndefineExpose({\n crop,\n resize,\n})\n</script>\n\n<template>\n <div\n ref=\"containerBoxRef\"\n :class=\"[ns.e('img-box')]\"\n >\n <div\n v-if=\"errorMessage\"\n :class=\"[ns.e('error-message')]\"\n >\n {{ errorMessage }}\n </div>\n <template v-else>\n <img\n ref=\"imgRef\"\n :class=\"[ns.e('image')]\"\n :src=\"imageUrl\"\n >\n <div\n ref=\"cropBoxRef\"\n :class=\"[ns.e('crop-tool-box')]\"\n :style=\"[\n sizeStyle,\n dargPoint\n ? `left: ${customStyle.left}px;top: ${customStyle.top}px`\n : style,\n ]\"\n @touchstart.stop.prevent\n @touchend.stop.prevent=\"handleEnd\"\n >\n <div\n :class=\"[ns.e('top-left')]\"\n @mousedown.stop.prevent=\"handleStart($event, 'top-left')\"\n @touchstart.stop.prevent=\"handleStart($event, 'top-left')\"\n @touchend.stop.prevent=\"handleEnd\"\n />\n <div\n :class=\"[ns.e('top-right')]\"\n @mousedown.stop.prevent=\"handleStart($event, 'top-right')\"\n @touchstart.stop.prevent=\"handleStart($event, 'top-right')\"\n @touchend.stop.prevent=\"handleEnd\"\n />\n <div\n :class=\"[ns.e('bottom-right')]\"\n @mousedown.stop.prevent=\"handleStart($event, 'bottom-right')\"\n @touchstart.stop.prevent=\"handleStart($event, 'bottom-right')\"\n @touchend.stop.prevent=\"handleEnd\"\n />\n <div\n :class=\"[ns.e('bottom-left')]\"\n @mousedown.stop.prevent=\"handleStart($event, 'bottom-left')\"\n @touchstart.stop.prevent=\"handleStart($event, 'bottom-left')\"\n @touchend.stop.prevent=\"handleEnd\"\n />\n </div>\n </template>\n </div>\n</template>\n"],"names":["props","__props","startX","startY","startWidth","startHeight","ns","useNamespace","cropBoxRef","ref","containerBoxRef","imgRef","errorMessage","dargPoint","initialValue","x","y","cropInfo","width","defaultWidth","height","defaultHeight","useElementSize","imgWidth","style","useDraggable","containerElement","draggingElement","disabled","computed","value","exact","imageUrl","imgFile","URL","createObjectURL","watch","newFile","type","startsWith","ratio","naturalWidth","customStyle","position","left","top","sizeStyle","aspectRatio","zoomType","cssVarBlock","zoom","pixel","checkBoundaries","newWidth","newHeight","maxWidth","clientWidth","Infinity","maxHeight","clientHeight","Math","min","max","getClientPos","e","MouseEvent","clientX","clientY","TouchEvent","touches","length","handleStart","point","document","addEventListener","handleMove","passive","handleEnd","preventDefault","deltaX","deltaY","Number","parseFloat","split","removeEventListener","onMounted","nextTick","offsetWidth","offsetHeight","onUnmounted","revokeObjectURL","__expose","crop","async","img","backgroundColor","window","getComputedStyle","canvas","createElement","drawImage","cropCanvas","drawColor","useCanvas","offsetLeft","offsetTop","naturalHeight","resize"],"mappings":"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"}
package/lib/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./src/defaults.cjs"),s=require("./src/data-chart/index.cjs"),r=require("./src/file-upload/index.cjs"),t=require("./src/fixed-action-bar/index.cjs"),o=require("./src/image-upload/index.cjs"),i=require("./src/photo-crop-tool/index.cjs"),c=require("./src/subject-action/index.cjs"),x=require("./src/subject-layout/index.cjs"),u=require("./src/subject-list/index.cjs"),a=require("./src/subject-type/index.cjs"),d=require("./src/tiny-mce-editor/index.cjs");const p=e.default.install,l=e.default.version;exports.default=e.default,exports.QxsDataChart=s.QxsDataChart,exports.QxsFileUpload=r.QxsFileUpload,exports.QxsFixedActionBar=t.QxsFixedActionBar,exports.QxsImageUpload=o.QxsImageUpload,exports.QxsPhotoCropTool=i.QxsPhotoCropTool,exports.QxsSubjectAction=c.QxsSubjectAction,exports.QxsSubjectLayout=x.QxsSubjectLayout,exports.QxsSubjectList=u.QxsSubjectList,exports.QxsSubjectType=a.QxsSubjectType,exports.QxsTinyMceEditor=d.QxsTinyMceEditor,exports.install=p,exports.version=l;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./src/defaults.cjs"),s=require("./src/data-chart/index.cjs"),r=require("./src/file-upload/index.cjs"),t=require("./src/fixed-action-bar/index.cjs"),o=require("./src/image-upload/index.cjs"),c=require("./src/photo-crop-tool/index.cjs"),i=require("./src/subject-action/index.cjs"),x=require("./src/subject-layout/index.cjs"),u=require("./src/subject-list/index.cjs"),a=require("./src/subject-type/index.cjs"),d=require("./src/tiny-mce-editor/index.cjs"),n=require("./src/icon/index.cjs");const p=e.default.install,j=e.default.version;exports.default=e.default,exports.QxsDataChart=s.QxsDataChart,exports.QxsFileUpload=r.QxsFileUpload,exports.QxsFixedActionBar=t.QxsFixedActionBar,exports.QxsImageUpload=o.QxsImageUpload,exports.QxsPhotoCropTool=c.QxsPhotoCropTool,exports.QxsSubjectAction=i.QxsSubjectAction,exports.QxsSubjectLayout=x.QxsSubjectLayout,exports.QxsSubjectList=u.QxsSubjectList,exports.QxsSubjectType=a.QxsSubjectType,exports.QxsTinyMceEditor=d.QxsTinyMceEditor,exports.Icon=n.Icon,exports.install=p,exports.version=j;
2
2
  //# sourceMappingURL=index.cjs.map
package/lib/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../packages/components/index.ts"],"sourcesContent":["import installer from './src/defaults'\n\nexport * from './src/components'\n\nexport const install = installer.install\nexport const version = installer.version\nexport default installer\n"],"names":["install","installer","version"],"mappings":"uhBAIaA,MAAAA,EAAUC,EAAAA,QAAUD,QACpBE,EAAUD,EAAAA,QAAUC"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../packages/components/index.ts"],"sourcesContent":["import installer from './src/defaults'\n\nexport * from './src/components'\n\nexport const install = installer.install\nexport const version = installer.version\nexport default installer\n"],"names":["install","installer","version"],"mappings":"yjBAIaA,MAAAA,EAAUC,EAAAA,QAAUD,QACpBE,EAAUD,EAAAA,QAAUC"}
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("vue");const t=/^[a-z0-9]+(-[a-z0-9]+)*$/,n=(e,t,n,r="")=>{const i=e.split(":");if("@"===e.slice(0,1)){if(i.length<2||i.length>3)return null;r=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){const e=i.pop(),n=i.pop(),c={provider:i.length>0?i[0]:r,prefix:n,name:e};return t&&!o(c)?null:c}const c=i[0],s=c.split("-");if(s.length>1){const e={provider:r,prefix:s.shift(),name:s.join("-")};return t&&!o(e)?null:e}if(n&&""===r){const e={provider:r,prefix:"",name:c};return t&&!o(e,n)?null:e}return null},o=(e,t)=>!!e&&!(!(t&&""===e.prefix||e.prefix)||!e.name),r=Object.freeze({left:0,top:0,width:16,height:16}),i=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),c=Object.freeze({...r,...i}),s=Object.freeze({...c,body:"",hidden:!1});function l(e,t){const n=function(e,t){const n={};!e.hFlip!=!t.hFlip&&(n.hFlip=!0),!e.vFlip!=!t.vFlip&&(n.vFlip=!0);const o=((e.rotate||0)+(t.rotate||0))%4;return o&&(n.rotate=o),n}(e,t);for(const o in s)o in i?o in e&&!(o in n)&&(n[o]=i[o]):o in t?n[o]=t[o]:o in e&&(n[o]=e[o]);return n}function a(e,t,n){const o=e.icons,r=e.aliases||Object.create(null);let i={};function c(e){i=l(o[e]||r[e],i)}return c(t),n.forEach(c),l(e,i)}function u(e,t){const n=[];if("object"!=typeof e||"object"!=typeof e.icons)return n;e.not_found instanceof Array&&e.not_found.forEach((e=>{t(e,null),n.push(e)}));const o=function(e){const t=e.icons,n=e.aliases||Object.create(null),o=Object.create(null);return Object.keys(t).concat(Object.keys(n)).forEach((function e(r){if(t[r])return o[r]=[];if(!(r in o)){o[r]=null;const t=n[r]&&n[r].parent,i=t&&e(t);i&&(o[r]=[t].concat(i))}return o[r]})),o}(e);for(const r in o){const i=o[r];i&&(t(r,a(e,r,i)),n.push(r))}return n}const f={provider:"",aliases:{},not_found:{},...r};function p(e,t){for(const n in t)if(n in e&&typeof e[n]!=typeof t[n])return!1;return!0}function d(e){if("object"!=typeof e||null===e)return null;const t=e;if("string"!=typeof t.prefix||!e.icons||"object"!=typeof e.icons)return null;if(!p(e,f))return null;const n=t.icons;for(const e in n){const t=n[e];if(!e||"string"!=typeof t.body||!p(t,s))return null}const o=t.aliases||Object.create(null);for(const e in o){const t=o[e],r=t.parent;if(!e||"string"!=typeof r||!n[r]&&!o[r]||!p(t,s))return null}return t}const h=Object.create(null);function g(e,t){const n=h[e]||(h[e]=Object.create(null));return n[t]||(n[t]=function(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}(e,t))}function m(e,t){return d(t)?u(t,((t,n)=>{n?e.icons[t]=n:e.missing.add(t)})):[]}let b=!1;function v(e){return"boolean"==typeof e&&(b=e),b}function y(e,t){const o=n(e,!0,b);if(!o)return!1;const r=g(o.provider,o.prefix);return t?function(e,t,n){try{if("string"==typeof n.body)return e.icons[t]={...n},!0}catch(e){}return!1}(r,o.name,t):(r.missing.add(o.name),!0)}function x(e,t){if("object"!=typeof e)return!1;if("string"!=typeof t&&(t=e.provider||""),b&&!t&&!e.prefix){let t=!1;return d(e)&&(e.prefix="",u(e,((e,n)=>{y(e,n)&&(t=!0)}))),t}const n=e.prefix;if(!o({prefix:n,name:"a"}))return!1;return!!m(g(t,n),e)}const w=Object.freeze({width:null,height:null}),j=Object.freeze({...w,...i}),k=/(-?[0-9.]*[0-9]+[0-9.]*)/g,F=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function O(e,t,n){if(1===t)return e;if(n=n||100,"number"==typeof e)return Math.ceil(e*t*n)/n;if("string"!=typeof e)return e;const o=e.split(k);if(null===o||!o.length)return e;const r=[];let i=o.shift(),c=F.test(i);for(;;){if(c){const e=parseFloat(i);isNaN(e)?r.push(i):r.push(Math.ceil(e*t*n)/n)}else r.push(i);if(i=o.shift(),void 0===i)return r.join("");c=!c}}function E(e,t){const n={...c,...e},o={...j,...t},r={left:n.left,top:n.top,width:n.width,height:n.height};let i=n.body;[n,o].forEach((e=>{const t=[],n=e.hFlip,o=e.vFlip;let c,s=e.rotate;switch(n?o?s+=2:(t.push("translate("+(r.width+r.left).toString()+" "+(0-r.top).toString()+")"),t.push("scale(-1 1)"),r.top=r.left=0):o&&(t.push("translate("+(0-r.left).toString()+" "+(r.height+r.top).toString()+")"),t.push("scale(1 -1)"),r.top=r.left=0),s<0&&(s-=4*Math.floor(s/4)),s%=4,s){case 1:c=r.height/2+r.top,t.unshift("rotate(90 "+c.toString()+" "+c.toString()+")");break;case 2:t.unshift("rotate(180 "+(r.width/2+r.left).toString()+" "+(r.height/2+r.top).toString()+")");break;case 3:c=r.width/2+r.left,t.unshift("rotate(-90 "+c.toString()+" "+c.toString()+")")}s%2==1&&(r.left!==r.top&&(c=r.left,r.left=r.top,r.top=c),r.width!==r.height&&(c=r.width,r.width=r.height,r.height=c)),t.length&&(i=function(e,t,n){const o=function(e,t="defs"){let n="";const o=e.indexOf("<"+t);for(;o>=0;){const r=e.indexOf(">",o),i=e.indexOf("</"+t);if(-1===r||-1===i)break;const c=e.indexOf(">",i);if(-1===c)break;n+=e.slice(r+1,i).trim(),e=e.slice(0,o).trim()+e.slice(c+1)}return{defs:n,content:e}}(e);return r=o.defs,i=t+o.content+n,r?"<defs>"+r+"</defs>"+i:i;var r,i}(i,'<g transform="'+t.join(" ")+'">',"</g>"))}));const s=o.width,l=o.height,a=r.width,u=r.height;let f,p;null===s?(p=null===l?"1em":"auto"===l?u:l,f=O(p,a/u)):(f="auto"===s?a:s,p=null===l?O(f,u/a):"auto"===l?u:l);const d={},h=(e,t)=>{(e=>"unset"===e||"undefined"===e||"none"===e)(t)||(d[e]=t.toString())};h("width",f),h("height",p);const g=[r.left,r.top,a,u];return d.viewBox=g.join(" "),{attributes:d,viewBox:g,body:i}}const I=/\sid="(\S+)"/g,T="IconifyId"+Date.now().toString(16)+(16777216*Math.random()|0).toString(16);let S=0;function C(e,t=T){const n=[];let o;for(;o=I.exec(e);)n.push(o[1]);if(!n.length)return e;const r="suffix"+(16777216*Math.random()|Date.now()).toString(16);return n.forEach((n=>{const o="function"==typeof t?t(n):t+(S++).toString(),i=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+i+')([")]|\\.[a-z])',"g"),"$1"+o+r+"$3")})),e=e.replace(new RegExp(r,"g"),"")}const L=Object.create(null);function z(e){return L[e]||L[""]}function M(e){let t;if("string"==typeof e.resources)t=[e.resources];else if(t=e.resources,!(t instanceof Array&&t.length))return null;return{resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:!0===e.random,index:e.index||0,dataAfterTimeout:!1!==e.dataAfterTimeout}}const A=Object.create(null),P=["https://api.simplesvg.com","https://api.unisvg.com"],R=[];for(;P.length>0;)1===P.length||Math.random()>.5?R.push(P.shift()):R.push(P.pop());function $(e,t){const n=M(t);return null!==n&&(A[e]=n,!0)}function N(e){return A[e]}A[""]=M({resources:["https://api.iconify.design"].concat(R)});let U=(()=>{let e;try{if(e=fetch,"function"==typeof e)return e}catch(e){}})();const q={prepare:(e,t,n)=>{const o=[],r=function(e,t){const n=N(e);if(!n)return 0;let o;if(n.maxURL){let e=0;n.resources.forEach((t=>{const n=t;e=Math.max(e,n.length)}));const r=t+".json?icons=";o=n.maxURL-e-n.path.length-r.length}else o=0;return o}(e,t),i="icons";let c={type:i,provider:e,prefix:t,icons:[]},s=0;return n.forEach(((n,l)=>{s+=n.length+1,s>=r&&l>0&&(o.push(c),c={type:i,provider:e,prefix:t,icons:[]},s=n.length),c.icons.push(n)})),o.push(c),o},send:(e,t,n)=>{if(!U)return void n("abort",424);let o=function(e){if("string"==typeof e){const t=N(e);if(t)return t.path}return"/"}(t.provider);switch(t.type){case"icons":{const e=t.prefix,n=t.icons.join(",");o+=e+".json?"+new URLSearchParams({icons:n}).toString();break}case"custom":{const e=t.uri;o+="/"===e.slice(0,1)?e.slice(1):e;break}default:return void n("abort",400)}let r=503;U(e+o).then((e=>{const t=e.status;if(200===t)return r=501,e.json();setTimeout((()=>{n(function(e){return 404===e}(t)?"abort":"next",t)}))})).then((e=>{"object"==typeof e&&null!==e?setTimeout((()=>{n("success",e)})):setTimeout((()=>{404===e?n("abort",e):n("next",r)}))})).catch((()=>{n("next",r)}))}};function D(e,t){e.forEach((e=>{const n=e.loaderCallbacks;n&&(e.loaderCallbacks=n.filter((e=>e.id!==t)))}))}let _=0;var H={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function Q(e,t,n,o){const r=e.resources.length,i=e.random?Math.floor(Math.random()*r):e.index;let c;if(e.random){let t=e.resources.slice(0);for(c=[];t.length>1;){const e=Math.floor(Math.random()*t.length);c.push(t[e]),t=t.slice(0,e).concat(t.slice(e+1))}c=c.concat(t)}else c=e.resources.slice(i).concat(e.resources.slice(0,i));const s=Date.now();let l,a="pending",u=0,f=null,p=[],d=[];function h(){f&&(clearTimeout(f),f=null)}function g(){"pending"===a&&(a="aborted"),h(),p.forEach((e=>{"pending"===e.status&&(e.status="aborted")})),p=[]}function m(e,t){t&&(d=[]),"function"==typeof e&&d.push(e)}function b(){a="failed",d.forEach((e=>{e(void 0,l)}))}function v(){p.forEach((e=>{"pending"===e.status&&(e.status="aborted")})),p=[]}function y(){if("pending"!==a)return;h();const o=c.shift();if(void 0===o)return p.length?void(f=setTimeout((()=>{h(),"pending"===a&&(v(),b())}),e.timeout)):void b();const r={status:"pending",resource:o,callback:(t,n)=>{!function(t,n,o){const r="success"!==n;switch(p=p.filter((e=>e!==t)),a){case"pending":break;case"failed":if(r||!e.dataAfterTimeout)return;break;default:return}if("abort"===n)return l=o,void b();if(r)return l=o,void(p.length||(c.length?y():b()));if(h(),v(),!e.random){const n=e.resources.indexOf(t.resource);-1!==n&&n!==e.index&&(e.index=n)}a="completed",d.forEach((e=>{e(o)}))}(r,t,n)}};p.push(r),u++,f=setTimeout(y,e.rotate),n(o,t,r.callback)}return"function"==typeof o&&d.push(o),setTimeout(y),function(){return{startTime:s,payload:t,status:a,queriesSent:u,queriesPending:p.length,subscribe:m,abort:g}}}function B(e){const t={...H,...e};let n=[];function o(){n=n.filter((e=>"pending"===e().status))}return{query:function(e,r,i){const c=Q(t,e,r,((e,t)=>{o(),i&&i(e,t)}));return n.push(c),c},find:function(e){return n.find((t=>e(t)))||null},setIndex:e=>{t.index=e},getIndex:()=>t.index,cleanup:o}}function V(){}const G=Object.create(null);function J(e,t,n){let o,r;if("string"==typeof e){const t=z(e);if(!t)return n(void 0,424),V;r=t.send;const i=function(e){if(!G[e]){const t=N(e);if(!t)return;const n={config:t,redundancy:B(t)};G[e]=n}return G[e]}(e);i&&(o=i.redundancy)}else{const t=M(e);if(t){o=B(t);const n=z(e.resources?e.resources[0]:"");n&&(r=n.send)}}return o&&r?o.query(t,r,n)().abort:(n(void 0,424),V)}function K(){}function W(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout((()=>{e.iconsLoaderFlag=!1,function(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout((()=>{e.pendingCallbacksFlag=!1;const t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1;const o=e.provider,r=e.prefix;t.forEach((t=>{const i=t.icons,c=i.pending.length;i.pending=i.pending.filter((t=>{if(t.prefix!==r)return!0;const c=t.name;if(e.icons[c])i.loaded.push({provider:o,prefix:r,name:c});else{if(!e.missing.has(c))return n=!0,!0;i.missing.push({provider:o,prefix:r,name:c})}return!1})),i.pending.length!==c&&(n||D([e],t.id),t.callback(i.loaded.slice(0),i.missing.slice(0),i.pending.slice(0),t.abort))}))})))}(e)})))}function X(e,t,n){function o(){const n=e.pendingIcons;t.forEach((t=>{n&&n.delete(t),e.icons[t]||e.missing.add(t)}))}if(n&&"object"==typeof n)try{if(!m(e,n).length)return void o()}catch(e){console.error(e)}o(),W(e)}function Y(e,t){e instanceof Promise?e.then((e=>{t(e)})).catch((()=>{t(null)})):t(e)}function Z(e,n){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(n).sort():e.iconsToLoad=n,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout((()=>{e.iconsQueueFlag=!1;const{provider:n,prefix:o}=e,r=e.iconsToLoad;if(delete e.iconsToLoad,!r||!r.length)return;const i=e.loadIcon;if(e.loadIcons&&(r.length>1||!i))return void Y(e.loadIcons(r,o,n),(t=>{X(e,r,t)}));if(i)return void r.forEach((t=>{Y(i(t,o,n),(n=>{X(e,[t],n?{prefix:o,icons:{[t]:n}}:null)}))}));const{valid:c,invalid:s}=function(e){const n=[],o=[];return e.forEach((e=>{(e.match(t)?n:o).push(e)})),{valid:n,invalid:o}}(r);if(s.length&&X(e,s,null),!c.length)return;const l=o.match(t)?z(n):null;if(!l)return void X(e,c,null);l.prepare(n,o,c).forEach((t=>{J(n,t,(n=>{X(e,t.icons,n)}))}))})))}const ee=(e,t)=>{const o=function(e,t=!0,o=!1){const r=[];return e.forEach((e=>{const i="string"==typeof e?n(e,t,o):e;i&&r.push(i)})),r}(e,!0,v()),r=function(e){const t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort(((e,t)=>e.provider!==t.provider?e.provider.localeCompare(t.provider):e.prefix!==t.prefix?e.prefix.localeCompare(t.prefix):e.name.localeCompare(t.name)));let o={provider:"",prefix:"",name:""};return e.forEach((e=>{if(o.name===e.name&&o.prefix===e.prefix&&o.provider===e.provider)return;o=e;const r=e.provider,i=e.prefix,c=e.name,s=n[r]||(n[r]=Object.create(null)),l=s[i]||(s[i]=g(r,i));let a;a=c in l.icons?t.loaded:""===i||l.missing.has(c)?t.missing:t.pending;const u={provider:r,prefix:i,name:c};a.push(u)})),t}(o);if(!r.pending.length){let e=!0;return t&&setTimeout((()=>{e&&t(r.loaded,r.missing,r.pending,K)})),()=>{e=!1}}const i=Object.create(null),c=[];let s,l;return r.pending.forEach((e=>{const{provider:t,prefix:n}=e;if(n===l&&t===s)return;s=t,l=n,c.push(g(t,n));const o=i[t]||(i[t]=Object.create(null));o[n]||(o[n]=[])})),r.pending.forEach((e=>{const{provider:t,prefix:n,name:o}=e,r=g(t,n),c=r.pendingIcons||(r.pendingIcons=new Set);c.has(o)||(c.add(o),i[t][n].push(o))})),c.forEach((e=>{const t=i[e.provider][e.prefix];t.length&&Z(e,t)})),t?function(e,t,n){const o=_++,r=D.bind(null,n,o);if(!t.pending.length)return r;const i={id:o,icons:t,callback:e,abort:r};return n.forEach((e=>{(e.loaderCallbacks||(e.loaderCallbacks=[])).push(i)})),r}(t,r,c):K};const te=/[\s,]+/;function ne(e,t){t.split(te).forEach((t=>{switch(t.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0}}))}function oe(e,t=0){const n=e.replace(/^-?[0-9.]*/,"");function o(e){for(;e<0;)e+=4;return e%4}if(""===n){const t=parseInt(e);return isNaN(t)?0:o(t)}if(n!==e){let t=0;switch(n){case"%":t=25;break;case"deg":t=90}if(t){let r=parseFloat(e.slice(0,e.length-n.length));return isNaN(r)?0:(r/=t,r%1==0?o(r):0)}}return t}const re={...j,inline:!1},ie={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},ce={display:"inline-block"},se={backgroundColor:"currentColor"},le={backgroundColor:"transparent"},ae={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},ue={webkitMask:se,mask:se,background:le};for(const e in ue){const t=ue[e];for(const n in ae)t[e+n]=ae[n]}const fe={};function pe(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}["horizontal","vertical"].forEach((e=>{const t=e.slice(0,1)+"Flip";fe[e+"-flip"]=t,fe[e.slice(0,1)+"-flip"]=t,fe[e+"Flip"]=t}));const de=(t,n)=>{const o=function(e,t){const n={...e};for(const e in t){const o=t[e],r=typeof o;e in w?(null===o||o&&("string"===r||"number"===r))&&(n[e]=o):r===typeof n[e]&&(n[e]="rotate"===e?o%4:o)}return n}(re,n),r={...ie},i=n.mode||"svg",c={},s=n.style,l="object"!=typeof s||s instanceof Array?{}:s;for(let e in n){const t=n[e];if(void 0!==t)switch(e){case"icon":case"style":case"onLoad":case"mode":case"ssr":break;case"inline":case"hFlip":case"vFlip":o[e]=!0===t||"true"===t||1===t;break;case"flip":"string"==typeof t&&ne(o,t);break;case"color":c.color=t;break;case"rotate":"string"==typeof t?o[e]=oe(t):"number"==typeof t&&(o[e]=t);break;case"ariaHidden":case"aria-hidden":!0!==t&&"true"!==t&&delete r["aria-hidden"];break;default:{const n=fe[e];n?!0!==t&&"true"!==t&&1!==t||(o[n]=!0):void 0===re[e]&&(r[e]=t)}}}const a=E(t,o),u=a.attributes;if(o.inline&&(c.verticalAlign="-0.125em"),"svg"===i){r.style={...c,...l},Object.assign(r,u);let t=0,o=n.id;return"string"==typeof o&&(o=o.replace(/-/g,"_")),r.innerHTML=C(a.body,o?()=>o+"ID"+t++:"iconifyVue"),e.h("svg",r)}const{body:f,width:p,height:d}=t,h="mask"===i||"bg"!==i&&-1!==f.indexOf("currentColor"),g=function(e,t){let n=-1===e.indexOf("xlink:")?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const e in t)n+=" "+e+'="'+t[e]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+n+">"+e+"</svg>"}(f,{...u,width:p+"",height:d+""});var m;return r.style={...c,"--svg":(m=g,'url("'+function(e){return"data:image/svg+xml,"+function(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(/</g,"%3C").replace(/>/g,"%3E").replace(/\s+/g," ")}(e)}(m)+'")'),width:pe(u.width),height:pe(u.height),...ce,...h?se:le,...l},e.h("span",r)};var he;if(v(!0),he=q,L[""]=he,"undefined"!=typeof document&&"undefined"!=typeof window){const e=window;if(void 0!==e.IconifyPreload){const t=e.IconifyPreload,n="Invalid IconifyPreload syntax.";"object"==typeof t&&null!==t&&(t instanceof Array?t:[t]).forEach((e=>{try{("object"!=typeof e||null===e||e instanceof Array||"object"!=typeof e.icons||"string"!=typeof e.prefix||!x(e))&&console.error(n)}catch(e){console.error(n)}}))}if(void 0!==e.IconifyProviders){const t=e.IconifyProviders;if("object"==typeof t&&null!==t)for(let e in t){const n="IconifyProviders["+e+"] is invalid.";try{const o=t[e];if("object"!=typeof o||!o||void 0===o.resources)continue;$(e,o)||console.error(n)}catch(e){console.error(n)}}}}const ge={...c,body:""},me=e.defineComponent(((t,{emit:o})=>{const r=e.ref(null);function i(){r.value&&(r.value.abort?.(),r.value=null)}const s=e.ref(!!t.ssr),l=e.ref(""),a=e.shallowRef(null);function u(){const c=t.icon;if("object"==typeof c&&null!==c&&"string"==typeof c.body)return l.value="",{data:c};let s;if("string"!=typeof c||null===(s=n(c,!1,!0)))return null;let a=function(e){const t="string"==typeof e?n(e,!0,b):e;if(t){const e=g(t.provider,t.prefix),n=t.name;return e.icons[n]||(e.missing.has(n)?null:void 0)}}(s);if(!a){const e=r.value;return e&&e.name===c||(r.value=null===a?{name:c}:{name:c,abort:ee([s],f)}),null}i(),l.value!==c&&(l.value=c,e.nextTick((()=>{o("load",c)})));const u=t.customise;if(u){a=Object.assign({},a);const e=u(a.body,s.name,s.prefix,s.provider);"string"==typeof e&&(a.body=e)}const p=["iconify"];return""!==s.prefix&&p.push("iconify--"+s.prefix),""!==s.provider&&p.push("iconify--"+s.provider),{data:a,classes:p}}function f(){const e=u();e?e.data!==a.value?.data&&(a.value=e):a.value=null}return s.value?f():e.onMounted((()=>{s.value=!0,f()})),e.watch((()=>t.icon),f),e.onUnmounted(i),()=>{const e=a.value;if(!e)return de(ge,t);let n=t;return e.classes&&(n={...t,class:e.classes.join(" ")}),de({...c,...e.data},n)}}),{props:["icon","mode","ssr","width","height","style","color","inline","rotate","hFlip","horizontalFlip","vFlip","verticalFlip","flip","id","ariaHidden","customise","title"],emits:["load"]});exports.Icon=me,exports.addAPIProvider=$,exports.addCollection=x,exports.addIcon=y,exports.buildIcon=E,exports.calculateSize=O,exports.loadIcons=ee,exports.replaceIDs=C;
2
+ //# sourceMappingURL=iconify.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconify.cjs","sources":["../../../../../../../../../../node_modules/.pnpm/@iconify+vue@5.0.0_vue@3.5.13_typescript@5.8.2_/node_modules/@iconify/vue/dist/iconify.mjs"],"sourcesContent":["import { h, defineComponent, ref, shallowRef, onMounted, watch, onUnmounted, nextTick } from 'vue';\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n const colonSeparated = value.split(\":\");\n if (value.slice(0, 1) === \"@\") {\n if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n return null;\n }\n provider = colonSeparated.shift().slice(1);\n }\n if (colonSeparated.length > 3 || !colonSeparated.length) {\n return null;\n }\n if (colonSeparated.length > 1) {\n const name2 = colonSeparated.pop();\n const prefix = colonSeparated.pop();\n const result = {\n // Allow provider without '@': \"provider:prefix:name\"\n provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n prefix,\n name: name2\n };\n return validate && !validateIconName(result) ? null : result;\n }\n const name = colonSeparated[0];\n const dashSeparated = name.split(\"-\");\n if (dashSeparated.length > 1) {\n const result = {\n provider,\n prefix: dashSeparated.shift(),\n name: dashSeparated.join(\"-\")\n };\n return validate && !validateIconName(result) ? null : result;\n }\n if (allowSimpleName && provider === \"\") {\n const result = {\n provider,\n prefix: \"\",\n name\n };\n return validate && !validateIconName(result, allowSimpleName) ? null : result;\n }\n return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n if (!icon) {\n return false;\n }\n return !!// Check prefix: cannot be empty, unless allowSimpleName is enabled\n // Check name: cannot be empty\n ((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (\n // Name cannot be empty\n !name || // Must have body\n typeof icon.body !== \"string\" || // Check other props\n !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )\n ) {\n return null;\n }\n }\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (\n // Name cannot be empty\n !name || // Parent must be set and point to existing icon\n typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || // Check other props\n !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )\n ) {\n return null;\n }\n }\n return data;\n}\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n return {\n provider,\n prefix,\n icons: /* @__PURE__ */ Object.create(null),\n missing: /* @__PURE__ */ new Set()\n };\n}\nfunction getStorage(provider, prefix) {\n const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n if (!quicklyValidateIconSet(data)) {\n return [];\n }\n return parseIconSet(data, (name, icon) => {\n if (icon) {\n storage.icons[name] = icon;\n } else {\n storage.missing.add(name);\n }\n });\n}\nfunction addIconToStorage(storage, name, icon) {\n try {\n if (typeof icon.body === \"string\") {\n storage.icons[name] = { ...icon };\n return true;\n }\n } catch (err) {\n }\n return false;\n}\nfunction listIcons(provider, prefix) {\n let allIcons = [];\n const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n providers.forEach((provider2) => {\n const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n prefixes.forEach((prefix2) => {\n const storage = getStorage(provider2, prefix2);\n allIcons = allIcons.concat(\n Object.keys(storage.icons).map(\n (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n )\n );\n });\n });\n return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n if (typeof allow === \"boolean\") {\n simpleNames = allow;\n }\n return simpleNames;\n}\nfunction getIconData(name) {\n const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n if (icon) {\n const storage = getStorage(icon.provider, icon.prefix);\n const iconName = icon.name;\n return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n }\n}\nfunction addIcon(name, data) {\n const icon = stringToIcon(name, true, simpleNames);\n if (!icon) {\n return false;\n }\n const storage = getStorage(icon.provider, icon.prefix);\n if (data) {\n return addIconToStorage(storage, icon.name, data);\n } else {\n storage.missing.add(icon.name);\n return true;\n }\n}\nfunction addCollection(data, provider) {\n if (typeof data !== \"object\") {\n return false;\n }\n if (typeof provider !== \"string\") {\n provider = data.provider || \"\";\n }\n if (simpleNames && !provider && !data.prefix) {\n let added = false;\n if (quicklyValidateIconSet(data)) {\n data.prefix = \"\";\n parseIconSet(data, (name, icon) => {\n if (addIcon(name, icon)) {\n added = true;\n }\n });\n }\n return added;\n }\n const prefix = data.prefix;\n if (!validateIconName({\n prefix,\n name: \"a\"\n })) {\n return false;\n }\n const storage = getStorage(provider, prefix);\n return !!addIconSet(storage, data);\n}\nfunction iconLoaded(name) {\n return !!getIconData(name);\n}\nfunction getIcon(name) {\n const result = getIconData(name);\n return result ? {\n ...defaultIconProps,\n ...result\n } : result;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n // Dimensions\n ...defaultIconSizeCustomisations,\n // Transformations\n ...defaultIconTransformations\n});\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n let defs = \"\";\n const index = content.indexOf(\"<\" + tag);\n while (index >= 0) {\n const start = content.indexOf(\">\", index);\n const end = content.indexOf(\"</\" + tag);\n if (start === -1 || end === -1) {\n break;\n }\n const endEnd = content.indexOf(\">\", end);\n if (endEnd === -1) {\n break;\n }\n defs += content.slice(start + 1, end).trim();\n content = content.slice(0, index).trim() + content.slice(endEnd + 1);\n }\n return {\n defs,\n content\n };\n}\nfunction mergeDefsAndContent(defs, content) {\n return defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\nfunction wrapSVGContent(body, start, end) {\n const split = splitSVGDefs(body);\n return mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = wrapSVGContent(\n body,\n '<g transform=\"' + transformations.join(\" \") + '\">',\n \"</g>\"\n );\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const attributes = {};\n const setAttr = (prop, value) => {\n if (!isUnsetKeyword(value)) {\n attributes[prop] = value.toString();\n }\n };\n setAttr(\"width\", width);\n setAttr(\"height\", height);\n const viewBox = [box.left, box.top, boxWidth, boxHeight];\n attributes.viewBox = viewBox.join(\" \");\n return {\n attributes,\n viewBox,\n body\n };\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n // Allowed characters before id: [#;\"]\n // Allowed characters after id: [)\"], .[a-z]\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + suffix + \"$3\"\n );\n });\n body = body.replace(new RegExp(suffix, \"g\"), \"\");\n return body;\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n return storage[provider] || storage[\"\"];\n}\n\nfunction createAPIConfig(source) {\n let resources;\n if (typeof source.resources === \"string\") {\n resources = [source.resources];\n } else {\n resources = source.resources;\n if (!(resources instanceof Array) || !resources.length) {\n return null;\n }\n }\n const result = {\n // API hosts\n resources,\n // Root path\n path: source.path || \"/\",\n // URL length limit\n maxURL: source.maxURL || 500,\n // Timeout before next host is used.\n rotate: source.rotate || 750,\n // Timeout before failing query.\n timeout: source.timeout || 5e3,\n // Randomise default API end point.\n random: source.random === true,\n // Start index\n index: source.index || 0,\n // Receive data after time out (used if time out kicks in first, then API module sends data anyway).\n dataAfterTimeout: source.dataAfterTimeout !== false\n };\n return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n \"https://api.simplesvg.com\",\n \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n if (fallBackAPISources.length === 1) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n if (Math.random() > 0.5) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n fallBackAPI.push(fallBackAPISources.pop());\n }\n }\n}\nconfigStorage[\"\"] = createAPIConfig({\n resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n const config = createAPIConfig(customConfig);\n if (config === null) {\n return false;\n }\n configStorage[provider] = config;\n return true;\n}\nfunction getAPIConfig(provider) {\n return configStorage[provider];\n}\nfunction listAPIProviders() {\n return Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n let callback;\n try {\n callback = fetch;\n if (typeof callback === \"function\") {\n return callback;\n }\n } catch (err) {\n }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n fetchModule = fetch2;\n}\nfunction getFetch() {\n return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n const config = getAPIConfig(provider);\n if (!config) {\n return 0;\n }\n let result;\n if (!config.maxURL) {\n result = 0;\n } else {\n let maxHostLength = 0;\n config.resources.forEach((item) => {\n const host = item;\n maxHostLength = Math.max(maxHostLength, host.length);\n });\n const url = prefix + \".json?icons=\";\n result = config.maxURL - maxHostLength - config.path.length - url.length;\n }\n return result;\n}\nfunction shouldAbort(status) {\n return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n const results = [];\n const maxLength = calculateMaxLength(provider, prefix);\n const type = \"icons\";\n let item = {\n type,\n provider,\n prefix,\n icons: []\n };\n let length = 0;\n icons.forEach((name, index) => {\n length += name.length + 1;\n if (length >= maxLength && index > 0) {\n results.push(item);\n item = {\n type,\n provider,\n prefix,\n icons: []\n };\n length = name.length;\n }\n item.icons.push(name);\n });\n results.push(item);\n return results;\n};\nfunction getPath(provider) {\n if (typeof provider === \"string\") {\n const config = getAPIConfig(provider);\n if (config) {\n return config.path;\n }\n }\n return \"/\";\n}\nconst send = (host, params, callback) => {\n if (!fetchModule) {\n callback(\"abort\", 424);\n return;\n }\n let path = getPath(params.provider);\n switch (params.type) {\n case \"icons\": {\n const prefix = params.prefix;\n const icons = params.icons;\n const iconsList = icons.join(\",\");\n const urlParams = new URLSearchParams({\n icons: iconsList\n });\n path += prefix + \".json?\" + urlParams.toString();\n break;\n }\n case \"custom\": {\n const uri = params.uri;\n path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n break;\n }\n default:\n callback(\"abort\", 400);\n return;\n }\n let defaultError = 503;\n fetchModule(host + path).then((response) => {\n const status = response.status;\n if (status !== 200) {\n setTimeout(() => {\n callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n });\n return;\n }\n defaultError = 501;\n return response.json();\n }).then((data) => {\n if (typeof data !== \"object\" || data === null) {\n setTimeout(() => {\n if (data === 404) {\n callback(\"abort\", data);\n } else {\n callback(\"next\", defaultError);\n }\n });\n return;\n }\n setTimeout(() => {\n callback(\"success\", data);\n });\n }).catch(() => {\n callback(\"next\", defaultError);\n });\n};\nconst fetchAPIModule = {\n prepare,\n send\n};\n\nfunction sortIcons(icons) {\n const result = {\n loaded: [],\n missing: [],\n pending: []\n };\n const storage = /* @__PURE__ */ Object.create(null);\n icons.sort((a, b) => {\n if (a.provider !== b.provider) {\n return a.provider.localeCompare(b.provider);\n }\n if (a.prefix !== b.prefix) {\n return a.prefix.localeCompare(b.prefix);\n }\n return a.name.localeCompare(b.name);\n });\n let lastIcon = {\n provider: \"\",\n prefix: \"\",\n name: \"\"\n };\n icons.forEach((icon) => {\n if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n return;\n }\n lastIcon = icon;\n const provider = icon.provider;\n const prefix = icon.prefix;\n const name = icon.name;\n const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n let list;\n if (name in localStorage.icons) {\n list = result.loaded;\n } else if (prefix === \"\" || localStorage.missing.has(name)) {\n list = result.missing;\n } else {\n list = result.pending;\n }\n const item = {\n provider,\n prefix,\n name\n };\n list.push(item);\n });\n return result;\n}\n\nfunction removeCallback(storages, id) {\n storages.forEach((storage) => {\n const items = storage.loaderCallbacks;\n if (items) {\n storage.loaderCallbacks = items.filter((row) => row.id !== id);\n }\n });\n}\nfunction updateCallbacks(storage) {\n if (!storage.pendingCallbacksFlag) {\n storage.pendingCallbacksFlag = true;\n setTimeout(() => {\n storage.pendingCallbacksFlag = false;\n const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n if (!items.length) {\n return;\n }\n let hasPending = false;\n const provider = storage.provider;\n const prefix = storage.prefix;\n items.forEach((item) => {\n const icons = item.icons;\n const oldLength = icons.pending.length;\n icons.pending = icons.pending.filter((icon) => {\n if (icon.prefix !== prefix) {\n return true;\n }\n const name = icon.name;\n if (storage.icons[name]) {\n icons.loaded.push({\n provider,\n prefix,\n name\n });\n } else if (storage.missing.has(name)) {\n icons.missing.push({\n provider,\n prefix,\n name\n });\n } else {\n hasPending = true;\n return true;\n }\n return false;\n });\n if (icons.pending.length !== oldLength) {\n if (!hasPending) {\n removeCallback([storage], item.id);\n }\n item.callback(\n icons.loaded.slice(0),\n icons.missing.slice(0),\n icons.pending.slice(0),\n item.abort\n );\n }\n });\n });\n }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n const id = idCounter++;\n const abort = removeCallback.bind(null, pendingSources, id);\n if (!icons.pending.length) {\n return abort;\n }\n const item = {\n id,\n icons,\n callback,\n abort\n };\n pendingSources.forEach((storage) => {\n (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n });\n return abort;\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n const result = [];\n list.forEach((item) => {\n const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n if (icon) {\n result.push(icon);\n }\n });\n return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n resources: [],\n index: 0,\n timeout: 2e3,\n rotate: 750,\n random: false,\n dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n const resourcesCount = config.resources.length;\n const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n let resources;\n if (config.random) {\n let list = config.resources.slice(0);\n resources = [];\n while (list.length > 1) {\n const nextIndex = Math.floor(Math.random() * list.length);\n resources.push(list[nextIndex]);\n list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n }\n resources = resources.concat(list);\n } else {\n resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n }\n const startTime = Date.now();\n let status = \"pending\";\n let queriesSent = 0;\n let lastError;\n let timer = null;\n let queue = [];\n let doneCallbacks = [];\n if (typeof done === \"function\") {\n doneCallbacks.push(done);\n }\n function resetTimer() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function abort() {\n if (status === \"pending\") {\n status = \"aborted\";\n }\n resetTimer();\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function subscribe(callback, overwrite) {\n if (overwrite) {\n doneCallbacks = [];\n }\n if (typeof callback === \"function\") {\n doneCallbacks.push(callback);\n }\n }\n function getQueryStatus() {\n return {\n startTime,\n payload,\n status,\n queriesSent,\n queriesPending: queue.length,\n subscribe,\n abort\n };\n }\n function failQuery() {\n status = \"failed\";\n doneCallbacks.forEach((callback) => {\n callback(void 0, lastError);\n });\n }\n function clearQueue() {\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function moduleResponse(item, response, data) {\n const isError = response !== \"success\";\n queue = queue.filter((queued) => queued !== item);\n switch (status) {\n case \"pending\":\n break;\n case \"failed\":\n if (isError || !config.dataAfterTimeout) {\n return;\n }\n break;\n default:\n return;\n }\n if (response === \"abort\") {\n lastError = data;\n failQuery();\n return;\n }\n if (isError) {\n lastError = data;\n if (!queue.length) {\n if (!resources.length) {\n failQuery();\n } else {\n execNext();\n }\n }\n return;\n }\n resetTimer();\n clearQueue();\n if (!config.random) {\n const index = config.resources.indexOf(item.resource);\n if (index !== -1 && index !== config.index) {\n config.index = index;\n }\n }\n status = \"completed\";\n doneCallbacks.forEach((callback) => {\n callback(data);\n });\n }\n function execNext() {\n if (status !== \"pending\") {\n return;\n }\n resetTimer();\n const resource = resources.shift();\n if (resource === void 0) {\n if (queue.length) {\n timer = setTimeout(() => {\n resetTimer();\n if (status === \"pending\") {\n clearQueue();\n failQuery();\n }\n }, config.timeout);\n return;\n }\n failQuery();\n return;\n }\n const item = {\n status: \"pending\",\n resource,\n callback: (status2, data) => {\n moduleResponse(item, status2, data);\n }\n };\n queue.push(item);\n queriesSent++;\n timer = setTimeout(execNext, config.rotate);\n query(resource, payload, item.callback);\n }\n setTimeout(execNext);\n return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n const config = {\n ...defaultConfig,\n ...cfg\n };\n let queries = [];\n function cleanup() {\n queries = queries.filter((item) => item().status === \"pending\");\n }\n function query(payload, queryCallback, doneCallback) {\n const query2 = sendQuery(\n config,\n payload,\n queryCallback,\n (data, error) => {\n cleanup();\n if (doneCallback) {\n doneCallback(data, error);\n }\n }\n );\n queries.push(query2);\n return query2;\n }\n function find(callback) {\n return queries.find((value) => {\n return callback(value);\n }) || null;\n }\n const instance = {\n query,\n find,\n setIndex: (index) => {\n config.index = index;\n },\n getIndex: () => config.index,\n cleanup\n };\n return instance;\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n if (!redundancyCache[provider]) {\n const config = getAPIConfig(provider);\n if (!config) {\n return;\n }\n const redundancy = initRedundancy(config);\n const cachedReundancy = {\n config,\n redundancy\n };\n redundancyCache[provider] = cachedReundancy;\n }\n return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n let redundancy;\n let send;\n if (typeof target === \"string\") {\n const api = getAPIModule(target);\n if (!api) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n send = api.send;\n const cached = getRedundancyCache(target);\n if (cached) {\n redundancy = cached.redundancy;\n }\n } else {\n const config = createAPIConfig(target);\n if (config) {\n redundancy = initRedundancy(config);\n const moduleKey = target.resources ? target.resources[0] : \"\";\n const api = getAPIModule(moduleKey);\n if (api) {\n send = api.send;\n }\n }\n }\n if (!redundancy || !send) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n return redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n if (!storage.iconsLoaderFlag) {\n storage.iconsLoaderFlag = true;\n setTimeout(() => {\n storage.iconsLoaderFlag = false;\n updateCallbacks(storage);\n });\n }\n}\nfunction checkIconNamesForAPI(icons) {\n const valid = [];\n const invalid = [];\n icons.forEach((name) => {\n (name.match(matchIconName) ? valid : invalid).push(name);\n });\n return {\n valid,\n invalid\n };\n}\nfunction parseLoaderResponse(storage, icons, data) {\n function checkMissing() {\n const pending = storage.pendingIcons;\n icons.forEach((name) => {\n if (pending) {\n pending.delete(name);\n }\n if (!storage.icons[name]) {\n storage.missing.add(name);\n }\n });\n }\n if (data && typeof data === \"object\") {\n try {\n const parsed = addIconSet(storage, data);\n if (!parsed.length) {\n checkMissing();\n return;\n }\n } catch (err) {\n console.error(err);\n }\n }\n checkMissing();\n loadedNewIcons(storage);\n}\nfunction parsePossiblyAsyncResponse(response, callback) {\n if (response instanceof Promise) {\n response.then((data) => {\n callback(data);\n }).catch(() => {\n callback(null);\n });\n } else {\n callback(response);\n }\n}\nfunction loadNewIcons(storage, icons) {\n if (!storage.iconsToLoad) {\n storage.iconsToLoad = icons;\n } else {\n storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n }\n if (!storage.iconsQueueFlag) {\n storage.iconsQueueFlag = true;\n setTimeout(() => {\n storage.iconsQueueFlag = false;\n const { provider, prefix } = storage;\n const icons2 = storage.iconsToLoad;\n delete storage.iconsToLoad;\n if (!icons2 || !icons2.length) {\n return;\n }\n const customIconLoader = storage.loadIcon;\n if (storage.loadIcons && (icons2.length > 1 || !customIconLoader)) {\n parsePossiblyAsyncResponse(\n storage.loadIcons(icons2, prefix, provider),\n (data) => {\n parseLoaderResponse(storage, icons2, data);\n }\n );\n return;\n }\n if (customIconLoader) {\n icons2.forEach((name) => {\n const response = customIconLoader(name, prefix, provider);\n parsePossiblyAsyncResponse(response, (data) => {\n const iconSet = data ? {\n prefix,\n icons: {\n [name]: data\n }\n } : null;\n parseLoaderResponse(storage, [name], iconSet);\n });\n });\n return;\n }\n const { valid, invalid } = checkIconNamesForAPI(icons2);\n if (invalid.length) {\n parseLoaderResponse(storage, invalid, null);\n }\n if (!valid.length) {\n return;\n }\n const api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n if (!api) {\n parseLoaderResponse(storage, valid, null);\n return;\n }\n const params = api.prepare(provider, prefix, valid);\n params.forEach((item) => {\n sendAPIQuery(provider, item, (data) => {\n parseLoaderResponse(storage, item.icons, data);\n });\n });\n });\n }\n}\nconst loadIcons = (icons, callback) => {\n const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n const sortedIcons = sortIcons(cleanedIcons);\n if (!sortedIcons.pending.length) {\n let callCallback = true;\n if (callback) {\n setTimeout(() => {\n if (callCallback) {\n callback(\n sortedIcons.loaded,\n sortedIcons.missing,\n sortedIcons.pending,\n emptyCallback\n );\n }\n });\n }\n return () => {\n callCallback = false;\n };\n }\n const newIcons = /* @__PURE__ */ Object.create(null);\n const sources = [];\n let lastProvider, lastPrefix;\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix } = icon;\n if (prefix === lastPrefix && provider === lastProvider) {\n return;\n }\n lastProvider = provider;\n lastPrefix = prefix;\n sources.push(getStorage(provider, prefix));\n const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n if (!providerNewIcons[prefix]) {\n providerNewIcons[prefix] = [];\n }\n });\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n if (!pendingQueue.has(name)) {\n pendingQueue.add(name);\n newIcons[provider][prefix].push(name);\n }\n });\n sources.forEach((storage) => {\n const list = newIcons[storage.provider][storage.prefix];\n if (list.length) {\n loadNewIcons(storage, list);\n }\n });\n return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = (icon) => {\n return new Promise((fulfill, reject) => {\n const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n if (!iconObj) {\n reject(icon);\n return;\n }\n loadIcons([iconObj || icon], (loaded) => {\n if (loaded.length && iconObj) {\n const data = getIconData(iconObj);\n if (data) {\n fulfill({\n ...defaultIconProps,\n ...data\n });\n return;\n }\n }\n reject(icon);\n });\n });\n};\n\nfunction setCustomIconsLoader(loader, prefix, provider) {\n getStorage(provider || \"\", prefix).loadIcons = loader;\n}\nfunction setCustomIconLoader(loader, prefix, provider) {\n getStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nfunction iconToHTML(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToData(svg) {\n return \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\nfunction svgToURL(svg) {\n return 'url(\"' + svgToData(svg) + '\")';\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n webkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Check mode\n const mode = props.mode || 'svg';\n // Copy style\n const style = {};\n const propsStyle = props.style;\n const customStyle = typeof propsStyle === 'object' && !(propsStyle instanceof Array)\n ? propsStyle\n : {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n case 'mode':\n case 'ssr':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default: {\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add innerHTML and style to props\n componentProps['innerHTML'] = replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyVue');\n // Render icon\n return h('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return h('span', componentProps);\n};\n\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\n/**\n * Empty icon data, rendered when icon is not available\n */\nconst emptyIcon = {\n ...defaultIconProps,\n body: '',\n};\n/**\n * Component\n */\nconst Icon = defineComponent((props, { emit }) => {\n const loader = ref(null);\n function abortLoading() {\n if (loader.value) {\n loader.value.abort?.();\n loader.value = null;\n }\n }\n // Render state\n const rendering = ref(!!props.ssr);\n const lastRenderedIconName = ref('');\n const iconData = shallowRef(null);\n // Update icon data\n function getIcon() {\n const icon = props.icon;\n // Icon is an object\n if (typeof icon === 'object' &&\n icon !== null &&\n typeof icon.body === 'string') {\n lastRenderedIconName.value = '';\n return {\n data: icon,\n };\n }\n // Check for valid icon name\n let iconName;\n if (typeof icon !== 'string' ||\n (iconName = stringToIcon(icon, false, true)) === null) {\n return null;\n }\n // Load icon\n let data = getIconData(iconName);\n if (!data) {\n // Icon data is not available\n const oldState = loader.value;\n if (!oldState || oldState.name !== icon) {\n // Icon name does not match old loader state\n if (data === null) {\n // Failed to load\n loader.value = {\n name: icon,\n };\n }\n else {\n loader.value = {\n name: icon,\n abort: loadIcons([iconName], updateIconData),\n };\n }\n }\n return null;\n }\n // Icon data is available\n abortLoading();\n if (lastRenderedIconName.value !== icon) {\n lastRenderedIconName.value = icon;\n // Emit on next tick because render will be called on next tick\n nextTick(() => {\n emit('load', icon);\n });\n }\n // Customise icon\n const customise = props.customise;\n if (customise) {\n // Clone data and customise it\n data = Object.assign({}, data);\n const customised = customise(data.body, iconName.name, iconName.prefix, iconName.provider);\n if (typeof customised === 'string') {\n data.body = customised;\n }\n }\n // Add classes\n const classes = ['iconify'];\n if (iconName.prefix !== '') {\n classes.push('iconify--' + iconName.prefix);\n }\n if (iconName.provider !== '') {\n classes.push('iconify--' + iconName.provider);\n }\n return { data, classes };\n }\n function updateIconData() {\n const icon = getIcon();\n if (!icon) {\n iconData.value = null;\n }\n else if (icon.data !== iconData.value?.data) {\n iconData.value = icon;\n }\n }\n // Set icon data\n if (rendering.value) {\n updateIconData();\n }\n else {\n onMounted(() => {\n rendering.value = true;\n updateIconData();\n });\n }\n watch(() => props.icon, updateIconData);\n // Abort loading on unmount\n onUnmounted(abortLoading);\n // Render function\n return () => {\n // Get icon data\n const icon = iconData.value;\n if (!icon) {\n // Icon is not available\n return render(emptyIcon, props);\n }\n // Add classes\n let newProps = props;\n if (icon.classes) {\n newProps = {\n ...props,\n class: icon.classes.join(' '),\n };\n }\n // Render icon\n return render({\n ...defaultIconProps,\n ...icon.data,\n }, newProps);\n };\n}, {\n props: [\n // Icon and render mode\n 'icon',\n 'mode',\n 'ssr',\n // Layout and style\n 'width',\n 'height',\n 'style',\n 'color',\n 'inline',\n // Transformations\n 'rotate',\n 'hFlip',\n 'horizontalFlip',\n 'vFlip',\n 'verticalFlip',\n 'flip',\n // Misc\n 'id',\n 'ariaHidden',\n 'customise',\n 'title',\n ],\n emits: ['load'],\n});\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, getIcon, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs, setCustomIconLoader, setCustomIconsLoader };\n"],"names":["matchIconName","stringToIcon","value","validate","allowSimpleName","provider","colonSeparated","split","slice","length","shift","name2","pop","prefix","result","name","validateIconName","dashSeparated","join","icon","defaultIconDimensions","Object","freeze","left","top","width","height","defaultIconTransformations","rotate","vFlip","hFlip","defaultIconProps","defaultExtendedIconProps","body","hidden","mergeIconData","parent","child","obj1","obj2","mergeIconTransformations","key","internalGetIconData","data","tree","icons","aliases","create","currentProps","parse","forEach","parseIconSet","callback","names","not_found","Array","push","resolved","keys","concat","resolve","getIconsTree","item","optionalPropertyDefaults","checkOptionalProps","defaults","prop","quicklyValidateIconSet","obj","dataStorage","getStorage","providerStorage","missing","Set","newStorage","addIconSet","storage","add","simpleNames","allowSimpleNames","allow","addIcon","err","addIconToStorage","addCollection","added","defaultIconSizeCustomisations","defaultIconCustomisations","unitsSplit","unitsTest","calculateSize","size","ratio","precision","Math","ceil","oldParts","newParts","code","isNumber","test","num","parseFloat","isNaN","iconToSVG","customisations","fullIcon","fullCustomisations","box","props","transformations","tempValue","rotation","toString","floor","unshift","start","end","content","tag","defs","index","indexOf","endEnd","trim","splitSVGDefs","wrapSVGContent","customisationsWidth","customisationsHeight","boxWidth","boxHeight","attributes","setAttr","isUnsetKeyword","viewBox","regex","randomPrefix","Date","now","random","counter","replaceIDs","ids","match","exec","suffix","id","newID","escapedID","replace","RegExp","getAPIModule","createAPIConfig","source","resources","path","maxURL","timeout","dataAfterTimeout","configStorage","fallBackAPISources","fallBackAPI","addAPIProvider","customConfig","config","getAPIConfig","fetchModule","fetch","detectFetch","fetchAPIModule","prepare","results","maxLength","maxHostLength","host","max","url","calculateMaxLength","type","send","params","getPath","iconsList","URLSearchParams","uri","defaultError","then","response","status","json","setTimeout","shouldAbort","catch","removeCallback","storages","items","loaderCallbacks","filter","row","idCounter","defaultConfig","sendQuery","payload","query","done","resourcesCount","startIndex","list","nextIndex","startTime","lastError","queriesSent","timer","queue","doneCallbacks","resetTimer","clearTimeout","abort","subscribe","overwrite","failQuery","clearQueue","execNext","resource","status2","isError","queued","moduleResponse","queriesPending","initRedundancy","cfg","queries","cleanup","queryCallback","doneCallback","query2","error","find","setIndex","getIndex","emptyCallback$1","redundancyCache","sendAPIQuery","target","redundancy","api","cached","cachedReundancy","getRedundancyCache","emptyCallback","loadedNewIcons","iconsLoaderFlag","pendingCallbacksFlag","hasPending","oldLength","pending","loaded","has","updateCallbacks","parseLoaderResponse","checkMissing","pendingIcons","delete","console","parsePossiblyAsyncResponse","Promise","loadNewIcons","iconsToLoad","sort","iconsQueueFlag","icons2","customIconLoader","loadIcon","loadIcons","valid","invalid","checkIconNamesForAPI","cleanedIcons","listToIcons","sortedIcons","a","b","localeCompare","lastIcon","localStorage","sortIcons","callCallback","newIcons","sources","lastProvider","lastPrefix","providerNewIcons","pendingQueue","pendingSources","bind","storeCallback","separator","flipFromString","custom","flip","str","rotateFromString","defaultValue","units","value2","parseInt","defaultExtendedIconCustomisations","inline","svgDefaults","xmlns","role","commonProps","display","monotoneProps","backgroundColor","coloredProps","propsToAdd","Image","Repeat","Size","propsToAddTo","webkitMask","mask","background","customisationAliases","fixSize","attr","render","valueType","mergeCustomisations","componentProps","mode","style","propsStyle","customStyle","color","alias","renderAttribs","verticalAlign","assign","localCounter","h","useMask","html","renderAttribsHTML","iconToHTML","svg","encodeSVGforURL","svgToData","document","window","_window","IconifyPreload","preload","e","IconifyProviders","providers","emptyIcon","Icon","defineComponent","emit","loader","ref","abortLoading","rendering","ssr","lastRenderedIconName","iconData","shallowRef","getIcon","iconName","getIconData","oldState","updateIconData","nextTick","customise","customised","classes","onMounted","watch","onUnmounted","newProps","class","emits"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- "use strict";exports.version="0.0.53";
1
+ "use strict";exports.version="0.0.54";
2
2
  //# sourceMappingURL=package.json.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("./data-chart/index.cjs"),t=require("./file-upload/index.cjs"),s=require("./fixed-action-bar/index.cjs"),r=require("./image-upload/index.cjs"),i=require("./photo-crop-tool/index.cjs"),o=require("./subject-action/index.cjs"),x=require("./subject-layout/index.cjs"),c=require("./subject-list/index.cjs"),u=require("./subject-type/index.cjs"),a=require("./tiny-mce-editor/index.cjs");exports.QxsDataChart=e.QxsDataChart,exports.QxsFileUpload=t.QxsFileUpload,exports.QxsFixedActionBar=s.QxsFixedActionBar,exports.QxsImageUpload=r.QxsImageUpload,exports.QxsPhotoCropTool=i.QxsPhotoCropTool,exports.QxsSubjectAction=o.QxsSubjectAction,exports.QxsSubjectLayout=x.QxsSubjectLayout,exports.QxsSubjectList=c.QxsSubjectList,exports.QxsSubjectType=u.QxsSubjectType,exports.QxsTinyMceEditor=a.QxsTinyMceEditor;
1
+ "use strict";var e=require("./data-chart/index.cjs"),t=require("./file-upload/index.cjs"),s=require("./fixed-action-bar/index.cjs"),o=require("./image-upload/index.cjs"),r=require("./photo-crop-tool/index.cjs"),i=require("./subject-action/index.cjs"),x=require("./subject-layout/index.cjs"),c=require("./subject-list/index.cjs"),u=require("./subject-type/index.cjs"),a=require("./tiny-mce-editor/index.cjs"),d=require("./icon/index.cjs");exports.QxsDataChart=e.QxsDataChart,exports.QxsFileUpload=t.QxsFileUpload,exports.QxsFixedActionBar=s.QxsFixedActionBar,exports.QxsImageUpload=o.QxsImageUpload,exports.QxsPhotoCropTool=r.QxsPhotoCropTool,exports.QxsSubjectAction=i.QxsSubjectAction,exports.QxsSubjectLayout=x.QxsSubjectLayout,exports.QxsSubjectList=c.QxsSubjectList,exports.QxsSubjectType=u.QxsSubjectType,exports.QxsTinyMceEditor=a.QxsTinyMceEditor,exports.Icon=d.Icon;
2
2
  //# sourceMappingURL=components.cjs.map
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../withInstall.cjs"),t=require("./src/icon.vue.cjs");const r=e.withInstall(t.default);exports.Icon=r,exports.default=r;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../../../packages/components/src/icon/index.ts"],"sourcesContent":["import { withInstall } from '../withInstall'\nimport component from './src/icon.vue'\n\nconst Icon = withInstall(component)\n\nexport {\n Icon,\n}\n\nexport default Icon"],"names":["Icon","withInstall","component","default"],"mappings":"wIAGA,MAAMA,EAAOC,cAAYC,EAASC"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),r=require("../../../node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.13_typescript@5.8.2_/node_modules/@iconify/vue/dist/iconify.cjs"),n=require("@qxs-bns/hooks");const t={key:2,"aria-hidden":"true"},o=["xlink:href"];var i=e.defineComponent({name:"QxsIcon",__name:"icon",props:{name:{type:String,required:!0},runtime:{type:Boolean,required:!1},flip:{type:String,required:!1},rotate:{type:Number,required:!1},color:{type:String,required:!1},size:{type:[String,Number],required:!1}},setup(i){const s=i,u=e.useAttrs(),c=n.useNamespace("icon"),l=e.computed((()=>0===s.name.indexOf("i-")?s.runtime?"svg":"css":s.name.includes(":")?"svg":"custom")),a=e.computed((()=>{if(0===s.name.indexOf("i-")){let e=s.name;return s.runtime&&(e=e.replace("i-","")),e}return s.name})),p=e.computed((()=>{const e=[];if(""!==s.flip)switch(s.flip){case"horizontal":e.push("rotateY(180deg)");break;case"vertical":e.push("rotateX(180deg)");break;case"both":e.push("rotateX(180deg)"),e.push("rotateY(180deg)")}s.rotate&&e.push(`rotate(${s.rotate%360}deg)`);const{color:r,size:n}=s;return`${r?`color: ${r};`:""}\n ${n?`font-size: ${"number"==typeof n?`${n}px;`:n}`:""}\n ${e.length?`transform: ${e.join(" ")};`:""}`}));return(n,i)=>(e.openBlock(),e.createElementBlock("i",{class:e.normalizeClass(e.unref(c).e("icon")),style:e.normalizeStyle(e.unref(p)+e.unref(u).style)},["css"===e.unref(l)?(e.openBlock(),e.createElementBlock("i",{key:0,class:e.normalizeClass(e.unref(a))},null,2)):"svg"===e.unref(l)?(e.openBlock(),e.createBlock(e.unref(r.Icon),{key:1,icon:e.unref(a)},null,8,["icon"])):(e.openBlock(),e.createElementBlock("svg",t,[e.createElementVNode("use",{"xlink:href":`#icon-${e.unref(a)}`},null,8,o)]))],6))}});exports.default=i;
2
+ //# sourceMappingURL=icon.vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.vue.cjs","sources":["../../../../../../packages/components/src/icon/src/icon.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Icon } from '@iconify/vue'\nimport { useNamespace } from '@qxs-bns/hooks'\n\ndefineOptions({\n name: 'QxsIcon',\n})\n\nconst props = defineProps<PropsType>()\n\nconst attrs = useAttrs()\n\nconst ns = useNamespace('icon')\n\nexport interface PropsType {\n name: string\n runtime?: boolean\n flip?: 'horizontal' | 'vertical' | 'both' | ''\n rotate?: number\n color?: string\n size?: string | number\n}\nconst outputType = computed(() => {\n if (props.name.indexOf('i-') === 0) {\n return props.runtime ? 'svg' : 'css'\n }\n else if (props.name.includes(':')) {\n return 'svg'\n }\n else {\n return 'custom'\n }\n})\n\nconst outputName = computed(() => {\n if (props.name.indexOf('i-') === 0) {\n let conversionName = props.name\n if (props.runtime) {\n conversionName = conversionName.replace('i-', '')\n }\n return conversionName\n }\n else {\n return props.name\n }\n})\n\nconst style = computed(() => {\n const transform = []\n if (props.flip !== '') {\n switch (props.flip) {\n case 'horizontal':\n transform.push('rotateY(180deg)')\n break\n case 'vertical':\n transform.push('rotateX(180deg)')\n break\n case 'both':\n transform.push('rotateX(180deg)')\n transform.push('rotateY(180deg)')\n break\n }\n }\n if (props.rotate) {\n transform.push(`rotate(${props.rotate % 360}deg)`)\n }\n const { color, size } = props\n return `${color ? `color: ${color};` : ''}\n ${size ? `font-size: ${typeof size === 'number' ? `${size}px;` : size}` : ''}\n ${transform.length ? `transform: ${transform.join(' ')};` : ''}`\n})\n</script>\n\n<template>\n <i\n :class=\"ns.e('icon')\"\n :style=\"style + attrs.style\"\n >\n <i\n v-if=\"outputType === 'css'\"\n :class=\"outputName\"\n />\n <Icon\n v-else-if=\"outputType === 'svg'\"\n :icon=\"outputName\"\n />\n <svg\n v-else\n aria-hidden=\"true\"\n >\n <use :xlink:href=\"`#icon-${outputName}`\" />\n </svg>\n </i>\n</template>\n"],"names":["props","__props","attrs","useAttrs","ns","useNamespace","outputType","computed","name","indexOf","runtime","includes","outputName","conversionName","replace","style","transform","flip","push","rotate","color","size","length","join"],"mappings":"gkBAQA,MAAMA,EAAQC,EAERC,EAAQC,EAAAA,WAERC,EAAKC,eAAa,QAUlBC,EAAaC,EAAAA,UAAS,IACO,IAA7BP,EAAMQ,KAAKC,QAAQ,MACdT,EAAMU,QAAU,MAAQ,MAExBV,EAAMQ,KAAKG,SAAS,KACpB,MAGA,WAILC,EAAaL,EAAAA,UAAS,KAC1B,GAAiC,IAA7BP,EAAMQ,KAAKC,QAAQ,MAAa,CAClC,IAAII,EAAiBb,EAAMQ,KAIpB,OAHHR,EAAMU,UACSG,EAAAA,EAAeC,QAAQ,KAAM,KAEzCD,CAAA,CAGP,OAAOb,EAAMQ,IAAA,IAIXO,EAAQR,EAAAA,UAAS,KACrB,MAAMS,EAAY,GACd,GAAe,KAAfhB,EAAMiB,KACR,OAAQjB,EAAMiB,MACZ,IAAK,aACHD,EAAUE,KAAK,mBACf,MACF,IAAK,WACHF,EAAUE,KAAK,mBACf,MACF,IAAK,OACHF,EAAUE,KAAK,mBACfF,EAAUE,KAAK,mBAIjBlB,EAAMmB,QACRH,EAAUE,KAAK,UAAUlB,EAAMmB,OAAS,WAEpC,MAAAC,MAAEA,EAAOC,KAAAA,GAASrB,EACxB,MAAO,GAAGoB,EAAQ,UAAUA,KAAW,iBAC7BC,EAAO,cAA8B,iBAATA,EAAoB,GAAGA,OAAYA,IAAS,iBACxEL,EAAUM,OAAS,cAAcN,EAAUO,KAAK,QAAU,IAAE"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./icon.vue.cjs");exports.default=e.default;
2
+ //# sourceMappingURL=icon.vue2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.vue2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es");require("element-plus/es/components/base/style/index"),require("element-plus/es/components/image-viewer/style/index"),require("element-plus/es/components/upload/style/index"),require("element-plus/es/components/progress/style/index"),require("element-plus/es/components/image/style/index"),require("element-plus/es/components/icon/style/index");var t=require("vue"),r=require("@element-plus/icons-vue"),l=require("@qxs-bns/hooks"),i=require("element-plus");require("element-plus/es/components/message/style/index");const s={key:1,class:"image"},n={class:"mask"},a={class:"actions"},o={class:"tip-content"};var u=t.defineComponent({name:"QxsImageUpload",__name:"image-upload",props:{action:{type:String,required:!0},headers:{type:null,required:!1},data:{type:null,required:!1},name:{type:String,required:!1,default:"file"},url:{type:String,required:!1,default:""},size:{type:Number,required:!1,default:20},width:{type:Number,required:!1,default:160},accept:{type:String,required:!1,default:"image/jpeg,image/jpg,image/png,image/gif"},height:{type:Number,required:!1,default:90},placeholder:{type:String,required:!1,default:"点击上传图片"},notip:{type:Boolean,required:!1,default:!1},tipText:{type:String,required:!1,default:""},beforeUpload:{type:null,required:!1}},emits:["update:url","onSuccess"],setup(u,{emit:c}){const p=c,d=l.useNamespace("image-upload"),m=i.useNamespace("upload"),f=t.ref({imageViewerVisible:!1,progress:{preview:"",percent:0}}),g=t.computed((()=>u.accept.split(",").map((e=>e.split("/").pop())))),y=t.computed((()=>({width:`${u.width}px`,height:`${u.height}px`}))),h=t.computed((()=>.8*Math.min(u.width,u.height))),v=t.computed((()=>u.tipText||`上传图片支持 ${g.value.join(" / ")} 格式,且图片大小不超过 ${u.size}MB,建议图片尺寸为 ${u.width}*${u.height}`));function V(e){e.preventDefault(),f.value.imageViewerVisible=!0}function w(){f.value.imageViewerVisible=!1}function q(e){e.preventDefault(),p("update:url","")}const N=t=>{const r=t.name.split(".").pop()??"",l=g.value.includes(r),i=t.size/1024/1024<u.size;return l?i?(f.value.progress.preview=URL.createObjectURL(t),!u.beforeUpload||u.beforeUpload(t)):(e.ElMessage.error(`上传图片大小不能超过 ${u.size}MB!`),!1):(e.ElMessage.error(`上传图片只支持${g.value.join(" / ")}格式!`),!1)},k=e=>{f.value.progress.percent=Math.floor(e.percent)},x=(...e)=>{f.value.progress={preview:"",percent:0},p("onSuccess",...e)};return(l,i)=>{const u=e.ElIcon,c=e.ElImage,p=e.ElProgress,g=e.ElUpload,E=e.ElImageViewer;return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(t.unref(d).e("container"))},[t.createVNode(g,{drag:"","show-file-list":!1,headers:l.headers,action:l.action,data:l.data,name:l.name,accept:l.accept,class:t.normalizeClass(t.unref(d).e("control")),"before-upload":N,"on-progress":k,"on-success":x},{default:t.withCtx((()=>[""===l.url?(t.openBlock(),t.createBlock(c,{key:0,style:t.normalizeStyle(t.unref(y)),src:l.placeholder,fit:"fill"},{error:t.withCtx((()=>[t.createElementVNode("div",{class:"image-slot",style:t.normalizeStyle(t.unref(y))},[t.createVNode(u,null,{default:t.withCtx((()=>[t.createVNode(t.unref(r.Plus))])),_:1}),t.createElementVNode("p",null,t.toDisplayString(l.placeholder),1)],4)])),_:1},8,["style","src"])):(t.openBlock(),t.createElementBlock("div",s,[t.createVNode(c,{src:l.url,style:t.normalizeStyle(t.unref(y)),fit:"fill"},null,8,["src","style"]),t.createElementVNode("div",n,[t.createElementVNode("div",a,[t.createElementVNode("span",{title:"预览",onClick:t.withModifiers(V,["stop"])},[t.createVNode(u,null,{default:t.withCtx((()=>[t.createVNode(t.unref(r.ZoomIn))])),_:1})]),t.createElementVNode("span",{title:"移除",onClick:t.withModifiers(q,["stop"])},[t.createVNode(u,null,{default:t.withCtx((()=>[t.createVNode(t.unref(r.Delete))])),_:1})])])])])),t.withDirectives(t.createElementVNode("div",{class:"progress",style:t.normalizeStyle(t.unref(y))},[t.createVNode(c,{src:t.unref(f).progress.preview,style:t.normalizeStyle(t.unref(y)),fit:"fill"},null,8,["src","style"]),100!==t.unref(f).progress.percent?(t.openBlock(),t.createBlock(p,{key:0,type:"circle",width:t.unref(h),percentage:t.unref(f).progress.percent},null,8,["width","percentage"])):t.createCommentVNode("v-if",!0)],4),[[t.vShow,""===l.url&&t.unref(f).progress.percent]])])),_:1},8,["headers","action","data","name","accept","class"]),l.notip?t.createCommentVNode("v-if",!0):(t.openBlock(),t.createElementBlock("div",{key:0,class:t.normalizeClass(`${t.unref(m).namespace.value}-upload__tip-text`)},[t.createElementVNode("div",o,t.toDisplayString(t.unref(v)),1)],2)),t.unref(f).imageViewerVisible?(t.openBlock(),t.createBlock(E,{key:1,"url-list":[l.url],teleported:"",onClose:w},null,8,["url-list"])):t.createCommentVNode("v-if",!0)],2)}}});exports.default=u;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es");require("element-plus/es/components/base/style/index"),require("element-plus/es/components/image-viewer/style/index"),require("element-plus/es/components/upload/style/index"),require("element-plus/es/components/icon/style/index");var t=require("vue"),l=require("@element-plus/icons-vue"),i=require("element-plus");require("element-plus/es/components/message/style/index");const r={class:"image-slot"},a=["src"],n=["onClick"],s=["onClick"],o={class:"tip-content"};var u=t.defineComponent({name:"QxsImageUpload",__name:"image-upload",props:t.mergeModels({action:{type:String,required:!0},headers:{type:null,required:!1},data:{type:null,required:!1},name:{type:String,required:!1,default:"file"},url:{type:String,required:!1},size:{type:Number,required:!1,default:20},width:{type:Number,required:!1,default:160},accept:{type:String,required:!1,default:"image/jpeg,image/jpg,image/png,image/gif"},height:{type:Number,required:!1,default:90},placeholder:{type:String,required:!1,default:"上传图片"},notip:{type:Boolean,required:!1,default:!1},tipText:{type:String,required:!1,default:""},beforeUpload:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},limit:{type:Number,required:!1,default:1}},{fileList:{type:Array,default:()=>[]},fileListModifiers:{}}),emits:t.mergeModels(["onSuccess","remove"],["update:fileList"]),setup(u,{emit:p}){const d=p,c=t.useAttrs(),m=t.useModel(u,"fileList"),f=i.useNamespace("image-upload"),g=t.ref(0),v=t.ref({imageViewerVisible:!1,progress:{preview:"",percent:0}}),h=t.computed((()=>f.cssVarBlock({ns:f.namespace.value,width:`${u.width||160}px`,height:`${u.height||90}px`}))),y=t.computed((()=>u.accept.split(",").map((e=>e.split("/").pop())))),V=t.computed((()=>u.tipText||`上传图片支持 ${y.value.join(" / ")} 格式,且图片大小不超过 ${u.size}MB${u.width&&u.height?`,建议图片尺寸为 ${u.width}*${u.height}`:""}`));function q(e){g.value=m.value.indexOf(e),v.value.imageViewerVisible=!0}function x(e){m.value.splice(m.value.indexOf(e),1)}function w(){v.value.imageViewerVisible=!1}const C=t=>{const l=t.name.split(".").pop()??"",i=y.value.includes(l),r=t.size/1024/1024<u.size;return i?r?(v.value.progress.preview=URL.createObjectURL(t),!u.beforeUpload||u.beforeUpload(t)):(e.ElMessage.error(`上传图片大小不能超过 ${u.size}MB!`),!1):(e.ElMessage.error(`上传图片只支持${y.value.join(" / ")}格式!`),!1)},N=e=>{v.value.progress.percent=Math.floor(e.percent)},b=(...e)=>{v.value.progress={preview:"",percent:0},d("onSuccess",...e)};return(i,u)=>{const p=e.ElIcon,d=e.ElUpload,y=e.ElImageViewer;return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(t.unref(f).e("container")),style:t.normalizeStyle(t.unref(h))},[t.createVNode(d,t.mergeProps(t.unref(c),{"file-list":m.value,"onUpdate:fileList":u[0]||(u[0]=e=>m.value=e),drag:"",limit:i.limit,"list-type":"picture-card",headers:i.headers,action:i.action,data:i.data,name:i.name,accept:i.accept,"before-upload":C,"on-progress":N,"on-preview":q,"on-success":b,class:[t.unref(f).e("control"),i.limit<=m.value.length?t.unref(f).e("more-than-limit"):""],"on-remove":x}),{file:t.withCtx((({file:e})=>[t.createElementVNode("img",{class:t.normalizeClass(`${t.unref(f).namespace.value}-upload-list__item-thumbnail`),src:e.url,alt:""},null,10,a),t.createElementVNode("span",{class:t.normalizeClass(`${t.unref(f).namespace.value}-upload-list__item-actions`)},[t.createElementVNode("span",{class:t.normalizeClass(`${t.unref(f).namespace.value}-upload-list__item-preview`),onClick:t=>q(e)},[t.createVNode(p,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.ZoomIn))])),_:1})],10,n),i.disabled?t.createCommentVNode("v-if",!0):(t.openBlock(),t.createElementBlock("span",{key:0,class:t.normalizeClass(`${t.unref(f).namespace.value}-upload-list__item-delete`),onClick:t=>x(e)},[t.createVNode(p,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.Delete))])),_:1})],10,s))],2)])),tip:t.withCtx((()=>[t.renderSlot(i.$slots,"tip",{},(()=>[i.notip?t.createCommentVNode("v-if",!0):(t.openBlock(),t.createElementBlock("div",{key:0,class:t.normalizeClass(`${t.unref(f).namespace.value}-upload__tip-text`)},[t.createElementVNode("div",o,t.toDisplayString(t.unref(V)),1)],2))]))])),default:t.withCtx((()=>[t.renderSlot(i.$slots,"default",{},(()=>[t.createElementVNode("div",r,[t.createVNode(p,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.Plus))])),_:1}),t.createElementVNode("p",null,t.toDisplayString(i.placeholder),1)])]))])),_:3},16,["file-list","limit","headers","action","data","name","accept","class"]),t.unref(v).imageViewerVisible?(t.openBlock(),t.createBlock(y,{key:0,"url-list":m.value.map((e=>e.url)).filter((e=>void 0!==e)),"initial-index":t.unref(g),teleported:"",onClose:w},null,8,["url-list","initial-index"])):t.createCommentVNode("v-if",!0)],6)}}});exports.default=u;
2
2
  //# sourceMappingURL=image-upload.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-upload.vue.cjs","sources":["../../../../../../packages/components/src/image-upload/src/image-upload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { UploadFile, UploadFiles, UploadProps } from 'element-plus'\nimport { Delete, Plus, ZoomIn } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { useNamespace as useElNamespace } from 'element-plus'\n\n// 类型定义\nexport interface ImageUploadProps {\n action: UploadProps['action']\n headers?: UploadProps['headers']\n data?: UploadProps['data']\n name?: UploadProps['name']\n url?: string\n size?: number\n width?: number\n accept?: string\n height?: number\n placeholder?: string\n notip?: boolean\n tipText?: string\n beforeUpload?: UploadProps['beforeUpload']\n}\n\ninterface UploadProgress {\n preview: string\n percent: number\n}\n\n// 组件名称\ndefineOptions({\n name: 'QxsImageUpload',\n})\n\n// Props 定义\nconst {\n name = 'file',\n url = '',\n size = 20,\n width = 160,\n height = 90,\n placeholder = '点击上传图片',\n notip = false,\n accept = 'image/jpeg,image/jpg,image/png,image/gif',\n beforeUpload,\n tipText = '',\n} = defineProps<ImageUploadProps>()\n\n// Emits 定义\nconst emits = defineEmits<{\n 'update:url': [url: string]\n 'onSuccess': [res: any, uploadFile: UploadFile, uploadFiles: UploadFiles]\n}>()\n\n// 命名空间\nconst ns = useNamespace('image-upload')\nconst nsEl = useElNamespace('upload')\n\n// 响应式数据\nconst uploadData = ref<{\n imageViewerVisible: boolean\n progress: UploadProgress\n}>({\n imageViewerVisible: false,\n progress: {\n preview: '',\n percent: 0,\n },\n})\n\n// 计算属性\nconst exts = computed(() =>\n accept.split(',').map(ext => ext.split('/').pop()),\n)\n\nconst imageStyle = computed(() => ({\n width: `${width}px`,\n height: `${height}px`,\n}))\n\nconst progressSize = computed(() => Math.min(width, height) * 0.8)\n\nconst tipMessage = computed(\n () =>\n tipText\n || `上传图片支持 ${exts.value.join(\n ' / ',\n )} 格式,且图片大小不超过 ${size}MB,建议图片尺寸为 ${width}*${height}`,\n)\n\n// 方法\nfunction preview(e: Event) {\n e.preventDefault()\n uploadData.value.imageViewerVisible = true\n}\n\nfunction previewClose() {\n uploadData.value.imageViewerVisible = false\n}\n\nfunction remove(e: Event) {\n e.preventDefault()\n emits('update:url', '')\n}\n\nconst handleBeforeUpload: UploadProps['beforeUpload'] = (file) => {\n const fileExt = file.name.split('.').pop() ?? ''\n const isTypeOk = exts.value.includes(fileExt)\n const isSizeOk = file.size / 1024 / 1024 < size\n\n if (!isTypeOk) {\n ElMessage.error(`上传图片只支持${exts.value.join(' / ')}格式!`)\n return false\n }\n\n if (!isSizeOk) {\n ElMessage.error(`上传图片大小不能超过 ${size}MB!`)\n return false\n }\n\n uploadData.value.progress.preview = URL.createObjectURL(file)\n\n return beforeUpload ? beforeUpload(file) : true\n}\n\nconst onProgress: UploadProps['onProgress'] = (evt) => {\n uploadData.value.progress.percent = Math.floor(evt.percent)\n}\n\nconst onSuccess: UploadProps['onSuccess'] = (...args) => {\n uploadData.value.progress = {\n preview: '',\n percent: 0,\n }\n emits('onSuccess', ...args)\n}\n</script>\n\n<template>\n <div :class=\"ns.e('container')\">\n <el-upload\n drag\n :show-file-list=\"false\"\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :accept=\"accept\"\n :class=\"ns.e('control')\"\n :before-upload=\"handleBeforeUpload\"\n :on-progress=\"onProgress\"\n :on-success=\"onSuccess\"\n >\n <template v-if=\"url === ''\">\n <el-image\n :style=\"imageStyle\"\n :src=\"placeholder\"\n fit=\"fill\"\n >\n <template #error>\n <div\n class=\"image-slot\"\n :style=\"imageStyle\"\n >\n <el-icon><Plus /></el-icon>\n <p>{{ placeholder }}</p>\n </div>\n </template>\n </el-image>\n </template>\n\n <template v-else>\n <div class=\"image\">\n <el-image\n :src=\"url\"\n :style=\"imageStyle\"\n fit=\"fill\"\n />\n <div class=\"mask\">\n <div class=\"actions\">\n <span\n title=\"预览\"\n @click.stop=\"preview\"\n >\n <el-icon><ZoomIn /></el-icon>\n </span>\n <span\n title=\"移除\"\n @click.stop=\"remove\"\n >\n <el-icon><Delete /></el-icon>\n </span>\n </div>\n </div>\n </div>\n </template>\n\n <div\n v-show=\"url === '' && uploadData.progress.percent\"\n class=\"progress\"\n :style=\"imageStyle\"\n >\n <el-image\n :src=\"uploadData.progress.preview\"\n :style=\"imageStyle\"\n fit=\"fill\"\n />\n <el-progress\n v-if=\"uploadData.progress.percent !== 100\"\n type=\"circle\"\n :width=\"progressSize\"\n :percentage=\"uploadData.progress.percent\"\n />\n </div>\n </el-upload>\n\n <div\n v-if=\"!notip\"\n :class=\"`${nsEl.namespace.value}-upload__tip-text`\"\n >\n <div class=\"tip-content\">\n {{ tipMessage }}\n </div>\n </div>\n\n <el-image-viewer\n v-if=\"uploadData.imageViewerVisible\"\n :url-list=\"[url]\"\n teleported\n @close=\"previewClose\"\n />\n </div>\n</template>\n"],"names":["emits","__emit","ns","useNamespace","nsEl","useElNamespace","uploadData","ref","imageViewerVisible","progress","preview","percent","exts","computed","__props","split","map","ext","pop","imageStyle","width","height","progressSize","Math","min","tipMessage","tipText","value","join","size","e","preventDefault","previewClose","remove","handleBeforeUpload","file","fileExt","name","isTypeOk","includes","isSizeOk","URL","createObjectURL","beforeUpload","ElMessage","error","onProgress","evt","floor","onSuccess","args"],"mappings":"m4CAgDA,MAAMA,EAAQC,EAMRC,EAAKC,eAAa,gBAClBC,EAAOC,eAAe,UAGtBC,EAAaC,EAAAA,IAGhB,CACDC,oBAAoB,EACpBC,SAAU,CACRC,QAAS,GACTC,QAAS,KAKPC,EAAOC,EAAAA,UAAS,IACpBC,SAAOC,MAAM,KAAKC,KAAIC,GAAOA,EAAIF,MAAM,KAAKG,UAGxCC,EAAaN,EAAAA,UAAS,KAAO,CACjCO,MAAO,GAAGN,EAAAM,UACVC,OAAQ,GAAGP,EAAAO,eAGPC,EAAeT,EAAAA,UAAS,IAAgC,GAA1BU,KAAKC,IAAIV,EAAKM,MAAEN,EAAAO,UAE9CI,EAAaZ,EAAAA,UACjB,IACEC,EAAAY,SACG,UAAUd,EAAKe,MAAMC,KACtB,sBACed,EAAAe,kBAAkBf,WAASA,EAAAO,WAIhD,SAASX,EAAQoB,GACfA,EAAEC,iBACFzB,EAAWqB,MAAMnB,oBAAqB,CAAA,CAGxC,SAASwB,IACP1B,EAAWqB,MAAMnB,oBAAqB,CAAA,CAGxC,SAASyB,EAAOH,GACdA,EAAEC,iBACF/B,EAAM,aAAc,GAAE,CAGlB,MAAAkC,EAAmDC,IACvD,MAAMC,EAAUD,EAAKE,KAAKtB,MAAM,KAAKG,OAAS,GACxCoB,EAAW1B,EAAKe,MAAMY,SAASH,GAC/BI,EAAWL,EAAKN,KAAO,KAAO,KAAOf,EAAAe,KAE3C,OAAKS,EAKAE,GAKLlC,EAAWqB,MAAMlB,SAASC,QAAU+B,IAAIC,gBAAgBP,IAEjDrB,EAAY6B,cAAG7B,eAAaqB,KANjCS,EAAAA,UAAUC,MAAM,cAAc/B,EAAAe,YACvB,IANPe,YAAUC,MAAM,UAAUjC,EAAKe,MAAMC,KAAK,cACnC,EAUkC,EAGvCkB,EAAyCC,IAC7CzC,EAAWqB,MAAMlB,SAASE,QAAUY,KAAKyB,MAAMD,EAAIpC,QAAO,EAGtDsC,EAAsC,IAAIC,KAC9C5C,EAAWqB,MAAMlB,SAAW,CAC1BC,QAAS,GACTC,QAAS,GAELX,EAAA,eAAgBkD,EAAI"}
1
+ {"version":3,"file":"image-upload.vue.cjs","sources":["../../../../../../packages/components/src/image-upload/src/image-upload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { UploadFile, UploadFiles, UploadProps } from 'element-plus'\nimport { Delete, Plus, ZoomIn } from '@element-plus/icons-vue'\nimport { useNamespace } from 'element-plus'\n// import QxsIcon from '../../icon'\n\n// 组件名称\ndefineOptions({\n name: 'QxsImageUpload',\n})\n\n// Props 定义\nconst {\n name = 'file',\n size = 20,\n width = 160,\n height = 90,\n limit = 1,\n placeholder = '上传图片',\n notip = false,\n accept = 'image/jpeg,image/jpg,image/png,image/gif',\n beforeUpload,\n tipText = '',\n disabled = false,\n} = defineProps<ImageUploadProps>()\n\n// Emits 定义\nconst emits = defineEmits<{\n onSuccess: [res: any, uploadFile: UploadFile, uploadFiles: UploadFiles]\n remove: [file: UploadFile]\n}>()\n\n// 类型定义\nexport interface ImageUploadProps {\n action: UploadProps['action']\n headers?: UploadProps['headers']\n data?: UploadProps['data']\n name?: UploadProps['name']\n url?: string\n size?: number\n width?: number\n accept?: string\n height?: number\n placeholder?: string\n notip?: boolean\n tipText?: string\n beforeUpload?: UploadProps['beforeUpload']\n disabled?: boolean\n limit?: number\n}\n\ninterface UploadProgress {\n preview: string\n percent: number\n}\n\nconst attrs = useAttrs()\n\nconst fileList = defineModel('fileList', {\n type: Array as () => UploadFile[],\n default: () => [],\n})\n\n// 命名空间\nconst nsEl = useNamespace('image-upload')\n\nconst initialIndex = ref(0)\n// 响应式数据\nconst uploadData = ref<{\n imageViewerVisible: boolean\n progress: UploadProgress\n}>({\n imageViewerVisible: false,\n progress: {\n preview: '',\n percent: 0,\n },\n})\n\nconst cssVar = computed(() => {\n return nsEl.cssVarBlock({\n ns: nsEl.namespace.value,\n width: `${width || 160}px`,\n height: `${height || 90}px`,\n })\n})\n\n// 计算属性\nconst exts = computed(() =>\n accept.split(',').map(ext => ext.split('/').pop()),\n)\n\nconst tipMessage = computed(\n () =>\n tipText\n || `上传图片支持 ${exts.value.join(\n ' / ',\n )} 格式,且图片大小不超过 ${size}MB${width && height ? `,建议图片尺寸为 ${width}*${height}` : ''}`,\n)\n\n// 方法\nfunction onPreview(file: UploadFile) {\n initialIndex.value = fileList.value.indexOf(file)\n uploadData.value.imageViewerVisible = true\n}\nfunction onRemove(file: UploadFile) {\n fileList.value.splice(fileList.value.indexOf(file), 1)\n}\n\nfunction previewClose() {\n uploadData.value.imageViewerVisible = false\n}\n\nconst handleBeforeUpload: UploadProps['beforeUpload'] = (file) => {\n const fileExt = file.name.split('.').pop() ?? ''\n const isTypeOk = exts.value.includes(fileExt)\n const isSizeOk = file.size / 1024 / 1024 < size\n\n if (!isTypeOk) {\n ElMessage.error(`上传图片只支持${exts.value.join(' / ')}格式!`)\n return false\n }\n\n if (!isSizeOk) {\n ElMessage.error(`上传图片大小不能超过 ${size}MB!`)\n return false\n }\n\n uploadData.value.progress.preview = URL.createObjectURL(file)\n\n return beforeUpload ? beforeUpload(file) : true\n}\n\nconst onProgress: UploadProps['onProgress'] = (evt) => {\n uploadData.value.progress.percent = Math.floor(evt.percent)\n}\n\nconst onSuccess: UploadProps['onSuccess'] = (...args) => {\n uploadData.value.progress = {\n preview: '',\n percent: 0,\n }\n emits('onSuccess', ...args)\n}\n</script>\n\n<template>\n <div\n :class=\"nsEl.e('container')\"\n :style=\"cssVar\"\n >\n <el-upload\n v-bind=\"attrs\"\n v-model:file-list=\"fileList\"\n drag\n :limit=\"limit\"\n list-type=\"picture-card\"\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :accept=\"accept\"\n :before-upload=\"handleBeforeUpload\"\n :on-progress=\"onProgress\"\n :on-preview=\"onPreview\"\n :on-success=\"onSuccess\"\n :class=\"[nsEl.e('control'), limit <= fileList.length ? nsEl.e('more-than-limit') : '']\"\n :on-remove=\"onRemove\"\n >\n <slot>\n <div class=\"image-slot\">\n <el-icon><Plus /></el-icon>\n <p>{{ placeholder }}</p>\n </div>\n </slot>\n <template #file=\"{ file }\">\n <img\n :class=\"`${nsEl.namespace.value}-upload-list__item-thumbnail`\"\n :src=\"file.url\"\n alt=\"\"\n >\n <span :class=\"`${nsEl.namespace.value}-upload-list__item-actions`\">\n <span\n :class=\"`${nsEl.namespace.value}-upload-list__item-preview`\"\n @click=\"onPreview(file)\"\n >\n <el-icon><ZoomIn /></el-icon>\n </span>\n <span\n v-if=\"!disabled\"\n :class=\"`${nsEl.namespace.value}-upload-list__item-delete`\"\n @click=\"onRemove(file)\"\n >\n <el-icon><Delete /></el-icon>\n </span>\n </span>\n </template>\n <template #tip>\n <slot name=\"tip\">\n <div\n v-if=\"!notip\"\n :class=\"`${nsEl.namespace.value}-upload__tip-text`\"\n >\n <div class=\"tip-content\">\n {{ tipMessage }}\n </div>\n </div>\n </slot>\n </template>\n </el-upload>\n\n <el-image-viewer\n v-if=\"uploadData.imageViewerVisible\"\n :url-list=\"fileList.map(item => item.url).filter(v => v !== undefined)\"\n :initial-index=\"initialIndex\"\n teleported\n @close=\"previewClose\"\n />\n </div>\n</template>\n"],"names":["emits","__emit","attrs","useAttrs","fileList","_useModel","__props","nsEl","useNamespace","initialIndex","ref","uploadData","imageViewerVisible","progress","preview","percent","cssVar","computed","cssVarBlock","ns","namespace","value","width","height","exts","split","map","ext","pop","tipMessage","tipText","join","size","onPreview","file","indexOf","onRemove","splice","previewClose","handleBeforeUpload","fileExt","name","isTypeOk","includes","isSizeOk","URL","createObjectURL","beforeUpload","ElMessage","error","onProgress","evt","Math","floor","onSuccess","args"],"mappings":"06CA2BA,MAAMA,EAAQC,EA6BRC,EAAQC,EAAAA,WAERC,EAAWC,EAAAA,SAAYC,EAAA,YAMvBC,EAAOC,eAAa,gBAEpBC,EAAeC,MAAI,GAEnBC,EAAaD,EAAAA,IAGhB,CACDE,oBAAoB,EACpBC,SAAU,CACRC,QAAS,GACTC,QAAS,KAIPC,EAASC,EAAAA,UAAS,IACfV,EAAKW,YAAY,CACtBC,GAAIZ,EAAKa,UAAUC,MACnBC,MAAO,GAAGhB,EAAKgB,OAAI,QACnBC,OAAQ,GAAGjB,EAAAiB,QAAU,WAKnBC,EAAOP,EAAAA,UAAS,IACpBX,SAAOmB,MAAM,KAAKC,KAAIC,GAAOA,EAAIF,MAAM,KAAKG,UAGxCC,EAAaZ,EAAAA,UACjB,IACEX,EAAAwB,SACG,UAAUN,EAAKH,MAAMU,KACtB,sBACezB,EAAI0B,SAAK1B,EAAKgB,OAAIhB,EAAAiB,OAAS,YAAYjB,EAAAgB,SAAShB,EAAMiB,SAAK,OAIhF,SAASU,EAAUC,GACjBzB,EAAaY,MAAQjB,EAASiB,MAAMc,QAAQD,GAC5CvB,EAAWU,MAAMT,oBAAqB,CAAA,CAExC,SAASwB,EAASF,GAChB9B,EAASiB,MAAMgB,OAAOjC,EAASiB,MAAMc,QAAQD,GAAO,EAAC,CAGvD,SAASI,IACP3B,EAAWU,MAAMT,oBAAqB,CAAA,CAGlC,MAAA2B,EAAmDL,IACvD,MAAMM,EAAUN,EAAKO,KAAKhB,MAAM,KAAKG,OAAS,GACxCc,EAAWlB,EAAKH,MAAMsB,SAASH,GAC/BI,EAAWV,EAAKF,KAAO,KAAO,KAAO1B,EAAA0B,KAE3C,OAAKU,EAKAE,GAKLjC,EAAWU,MAAMR,SAASC,QAAU+B,IAAIC,gBAAgBZ,IAEjD5B,EAAYyC,cAAGzC,eAAa4B,KANjCc,EAAAA,UAAUC,MAAM,cAAc3C,EAAA0B,YACvB,IANPgB,YAAUC,MAAM,UAAUzB,EAAKH,MAAMU,KAAK,cACnC,EAUkC,EAGvCmB,EAAyCC,IAC7CxC,EAAWU,MAAMR,SAASE,QAAUqC,KAAKC,MAAMF,EAAIpC,QAAO,EAGtDuC,EAAsC,IAAIC,KAC9C5C,EAAWU,MAAMR,SAAW,CAC1BC,QAAS,GACTC,QAAS,GAELf,EAAA,eAAgBuD,EAAI"}