podesigner-sdk
Version:
专业设计器SDK - 完整的图片编辑、文字添加、图层管理解决方案
1 lines • 34.8 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../src/editor/BaseEditor.ts","../src/components/CuzcuzDesigner.vue","../src/index.ts"],"sourcesContent":["import { App, Leafer, Frame, type IUI, Image as LeaferImage, Text as LeaferText } from 'leafer-editor'\nimport { GuideLines } from 'leafer-x-guide-line'\nimport { Ruler } from 'leafer-x-ruler'\nimport type { SkuItem, PrintImage } from 'podesigner-core'\nimport { generateId } from 'podesigner-core'\nimport { ref, type Ref } from 'vue'\n\nexport interface EditorConfig {\n container: HTMLElement\n width?: number\n height?: number\n enableGuideLines?: boolean\n enableRuler?: boolean\n}\n\nexport interface EditorOptions {\n strokeColor?: string\n strokeWidth?: number\n cornerRadius?: number\n}\n\nexport class BaseEditor {\n public app!: App\n public elementParent!: Leafer | IUI\n public currentElement: Ref<IUI | null> = ref<IUI | null>(null)\n public printImages: Ref<PrintImage[]> = ref([])\n public initialized = ref(false)\n public currentFrame?: Frame\n public guideLines?: GuideLines\n public ruler?: Ruler\n public zoom = ref(0.25)\n \n // SKU相关\n public skus = new Map<string, SkuItem>()\n public currentSkuKey: string = ''\n public currentSkuFaceKey: string = ''\n public currentFaceName: string = ''\n public commonSkuChildren: Map<string, IUI[]> = new Map<string, IUI[]>()\n\n private config: EditorConfig\n private options: EditorOptions\n\n constructor(config: EditorConfig, options: EditorOptions = {}) {\n this.config = config\n this.options = {\n strokeColor: '#F68066',\n strokeWidth: 1,\n cornerRadius: 0,\n ...options\n }\n }\n\n /**\n * 初始化编辑器\n */\n public init(): void {\n this.createApp()\n this.setupGuideLines()\n this.setupRuler()\n this.setupWorkspace()\n this.initialized.value = true\n }\n\n /**\n * 创建主应用\n */\n private createApp(): void {\n this.app = new App({\n view: this.config.container,\n width: this.config.width || 1200,\n height: this.config.height || 1200,\n tree: {\n type: 'editor'\n },\n editor: {\n point: { cornerRadius: this.options.cornerRadius },\n middlePoint: {},\n rotatePoint: { width: 16, height: 16 },\n rect: { dashPattern: [3, 2] },\n buttonsDirection: 'top',\n stroke: this.options.strokeColor,\n strokeWidth: this.options.strokeWidth,\n buttonsFixed: true,\n },\n wheel: {\n disabled: true,\n preventDefault: false,\n },\n })\n\n this.app.tree.fill = 'transparent'\n }\n\n /**\n * 设置吸附线\n */\n private setupGuideLines(): void {\n if (this.config.enableGuideLines !== false) {\n this.guideLines = new GuideLines(this.app, {\n enabled: true,\n alignLineMargin: 10,\n alignLineWidth: 1,\n signSize: 3,\n lineStyle: { type: 'dashed' },\n alignLineColor: this.options.strokeColor || '#F68066'\n })\n }\n }\n\n /**\n * 设置标尺\n */\n private setupRuler(): void {\n if (this.config.enableRuler !== false) {\n this.ruler = new Ruler(this.app, {\n enabled: true,\n theme: \"light\",\n })\n }\n }\n\n /**\n * 设置工作区\n */\n private setupWorkspace(): void {\n const userImageGroup = new Frame({\n lockRatio: true,\n zIndex: 1,\n resizeChildren: true,\n name: 'workspace',\n fill: {\n type: 'solid',\n color: '#ffffff01',\n }\n })\n\n this.elementParent = userImageGroup\n this.currentFrame = userImageGroup\n this.app.tree.add(userImageGroup)\n }\n\n /**\n * 添加图片元素\n */\n public addImage(url: string, options?: { x?: number, y?: number, width?: number, height?: number }): LeaferImage {\n const image = new LeaferImage({\n url,\n x: options?.x || 0,\n y: options?.y || 0,\n width: options?.width,\n height: options?.height,\n })\n\n this.elementParent.add(image)\n return image\n }\n\n /**\n * 添加文本元素\n */\n public addText(text: string, options?: { x?: number, y?: number, fontSize?: number, fill?: string }): LeaferText {\n const textElement = new LeaferText({\n text,\n x: options?.x || 0,\n y: options?.y || 0,\n fontSize: options?.fontSize || 16,\n fill: options?.fill || '#000000',\n })\n\n this.elementParent.add(textElement)\n return textElement\n }\n\n /**\n * 删除元素\n */\n public removeElement(element: IUI): void {\n // 从打印图片记录中移除\n this.printImages.value = this.printImages.value.filter(img => img.id !== element.id)\n element.remove()\n }\n\n /**\n * 清空画布\n */\n public clear(): void {\n if (this.elementParent && 'removeAll' in this.elementParent) {\n ;(this.elementParent as any).removeAll()\n }\n this.printImages.value = []\n }\n\n /**\n * 获取所有元素\n */\n public getAllElements(): IUI[] {\n return this.elementParent.children || []\n }\n\n /**\n * 设置缩放\n */\n public setZoom(zoom: number): void {\n this.zoom.value = zoom\n this.app.tree.scale = zoom\n }\n\n /**\n * 获取当前缩放\n */\n public getZoom(): number {\n return this.zoom.value\n }\n\n /**\n * 销毁编辑器\n */\n public destroy(): void {\n this.app?.destroy()\n this.initialized.value = false\n }\n} ","<template>\n <div class=\"cuzcuz-designer\">\n <!-- 顶部工具栏 -->\n <div class=\"top-toolbar\">\n <div class=\"logo\">CuzcuzDesigner</div>\n <div class=\"toolbar-center\">\n <button @click=\"undo\" :disabled=\"!canUndo\">撤销</button>\n <button @click=\"redo\" :disabled=\"!canRedo\">重做</button>\n <button @click=\"save\">保存</button>\n </div>\n <div class=\"toolbar-right\">\n <button @click=\"preview\" class=\"preview-btn\">预览</button>\n </div>\n </div>\n\n <div class=\"designer-body\">\n <!-- 左侧工具栏 -->\n <div class=\"left-sidebar\">\n <div class=\"tool-tabs\">\n <div \n v-for=\"tab in toolTabs\" \n :key=\"tab.key\"\n :class=\"['tool-tab', { active: activeTab === tab.key }]\"\n @click=\"activeTab = tab.key\"\n >\n <i :class=\"tab.icon\"></i>\n <span>{{ tab.label }}</span>\n </div>\n </div>\n\n <!-- 工具内容区 -->\n <div class=\"tool-content\">\n <!-- 上传工具 -->\n <div v-if=\"activeTab === 'upload'\" class=\"tool-panel\">\n <h3>图片上传</h3>\n <input \n type=\"file\" \n @change=\"handleFileUpload\" \n accept=\"image/*\"\n multiple\n ref=\"fileInput\"\n style=\"display: none\"\n />\n <button @click=\"fileInput?.click()\" class=\"upload-btn\">\n 上传图片\n </button>\n </div>\n\n <!-- 图库工具 -->\n <div v-if=\"activeTab === 'gallery'\" class=\"tool-panel\">\n <h3>图片素材</h3>\n <div class=\"gallery-grid\">\n <div \n v-for=\"image in galleryImages\" \n :key=\"image.id\"\n class=\"gallery-item\"\n @click=\"addGalleryImage(image)\"\n >\n <img :src=\"image.url\" :alt=\"image.name\" />\n </div>\n </div>\n </div>\n\n <!-- 文字工具 -->\n <div v-if=\"activeTab === 'text'\" class=\"tool-panel\">\n <h3>文字工具</h3>\n <button @click=\"addText\" class=\"add-text-btn\">添加文字</button>\n <div class=\"text-templates\">\n <div \n v-for=\"template in textTemplates\"\n :key=\"template.id\"\n class=\"text-template\"\n @click=\"addTextTemplate(template)\"\n >\n {{ template.text }}\n </div>\n </div>\n </div>\n\n <!-- 图层工具 -->\n <div v-if=\"activeTab === 'layers'\" class=\"tool-panel\">\n <h3>图层</h3>\n <div class=\"layers-list\">\n <div \n v-for=\"(layer, index) in layers\" \n :key=\"layer.id\"\n :class=\"['layer-item', { active: layer.id === selectedLayerId }]\"\n @click=\"selectLayer(layer)\"\n >\n <span>{{ layer.name }}</span>\n <button @click.stop=\"deleteLayer(layer)\" class=\"delete-btn\">×</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- 中央画布区域 -->\n <div class=\"canvas-area\">\n <div class=\"canvas-toolbar\">\n <div class=\"zoom-controls\">\n <button @click=\"setZoom(0.25)\">25%</button>\n <button @click=\"setZoom(0.5)\">50%</button>\n <button @click=\"setZoom(1)\">100%</button>\n <button @click=\"fitToScreen\">适应屏幕</button>\n </div>\n </div>\n <div ref=\"canvasContainer\" class=\"canvas-container\"></div>\n </div>\n\n <!-- 右侧属性面板 -->\n <div class=\"right-sidebar\">\n <div v-if=\"selectedElement\" class=\"properties-panel\">\n <h3>属性设置</h3>\n \n <!-- 基础属性 -->\n <div class=\"property-group\">\n <h4>位置和大小</h4>\n <div class=\"property-row\">\n <label>X:</label>\n <input v-model.number=\"elementProps.x\" @input=\"updateElement\" type=\"number\" />\n </div>\n <div class=\"property-row\">\n <label>Y:</label>\n <input v-model.number=\"elementProps.y\" @input=\"updateElement\" type=\"number\" />\n </div>\n <div class=\"property-row\">\n <label>宽度:</label>\n <input v-model.number=\"elementProps.width\" @input=\"updateElement\" type=\"number\" />\n </div>\n <div class=\"property-row\">\n <label>高度:</label>\n <input v-model.number=\"elementProps.height\" @input=\"updateElement\" type=\"number\" />\n </div>\n </div>\n\n <!-- 文字特有属性 -->\n <div v-if=\"selectedElement.tag === 'Text'\" class=\"property-group\">\n <h4>文字属性</h4>\n <div class=\"property-row\">\n <label>内容:</label>\n <input v-model=\"elementProps.text\" @input=\"updateElement\" type=\"text\" />\n </div>\n <div class=\"property-row\">\n <label>字号:</label>\n <input v-model.number=\"elementProps.fontSize\" @input=\"updateElement\" type=\"number\" />\n </div>\n <div class=\"property-row\">\n <label>颜色:</label>\n <input v-model=\"elementProps.fill\" @input=\"updateElement\" type=\"color\" />\n </div>\n </div>\n </div>\n\n <div v-else class=\"no-selection\">\n <p>请选择一个元素来编辑属性</p>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, onMounted, onUnmounted, watch, nextTick } from 'vue'\nimport { BaseEditor } from '../editor/BaseEditor'\nimport type { IUI } from 'leafer-editor'\n\n// Props\nexport interface CuzcuzDesignerProps {\n width?: number\n height?: number\n galleryImages?: Array<{ id: string, url: string, name: string }>\n onSave?: (data: any) => void\n onPreview?: (data: any) => void\n}\n\nconst props = withDefaults(defineProps<CuzcuzDesignerProps>(), {\n width: 1200,\n height: 800,\n galleryImages: () => [] as Array<{ id: string, url: string, name: string }>\n})\n\n// Emits\nconst emit = defineEmits<{\n save: [data: any]\n preview: [data: any]\n elementSelected: [element: IUI | null]\n}>()\n\n// 响应式数据\nconst canvasContainer = ref<HTMLElement>()\nconst fileInput = ref<HTMLInputElement>()\nconst activeTab = ref('upload')\nconst selectedLayerId = ref<string>('')\nconst selectedElement = ref<IUI | null>(null)\nconst canUndo = ref(false)\nconst canRedo = ref(false)\n\nlet editor: BaseEditor | null = null\n\n// 工具栏标签\nconst toolTabs = [\n { key: 'upload', label: '上传', icon: 'icon-upload' },\n { key: 'gallery', label: '图库', icon: 'icon-gallery' },\n { key: 'text', label: '文字', icon: 'icon-text' },\n { key: 'layers', label: '图层', icon: 'icon-layers' }\n]\n\n// 图层列表\nconst layers = ref<Array<{ id: string, name: string, type: string }>>([])\n\n// 文字模板\nconst textTemplates = [\n { id: '1', text: '标题文字', fontSize: 24, fill: '#000000' },\n { id: '2', text: '正文内容', fontSize: 16, fill: '#333333' },\n { id: '3', text: '装饰文字', fontSize: 18, fill: '#666666' }\n]\n\n// 选中元素的属性\nconst elementProps = reactive({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n text: '',\n fontSize: 16,\n fill: '#000000'\n})\n\n// 初始化编辑器\nonMounted(async () => {\n await nextTick()\n if (canvasContainer.value) {\n editor = new BaseEditor({\n container: canvasContainer.value,\n width: props.width,\n height: props.height,\n enableGuideLines: true,\n enableRuler: true\n })\n \n editor.init()\n setupEventListeners()\n }\n})\n\n// 销毁编辑器\nonUnmounted(() => {\n editor?.destroy()\n})\n\n// 设置事件监听\nfunction setupEventListeners() {\n if (!editor) return\n\n // 监听元素选择\n editor.app.editor.on('select', (e: any) => {\n selectedElement.value = e.list[0] || null\n updateElementProps()\n emit('elementSelected', selectedElement.value)\n })\n\n // 监听图层变化\n watch(() => editor?.getAllElements(), (elements) => {\n layers.value = elements?.map((el, index) => ({\n id: el.id || `layer-${index}`,\n name: el.tag === 'Text' ? `文字 ${index + 1}` : `图片 ${index + 1}`,\n type: el.tag || 'unknown'\n })) || []\n }, { deep: true })\n}\n\n// 更新选中元素属性\nfunction updateElementProps() {\n if (!selectedElement.value) return\n\n elementProps.x = selectedElement.value.x || 0\n elementProps.y = selectedElement.value.y || 0\n elementProps.width = selectedElement.value.width || 0\n elementProps.height = selectedElement.value.height || 0\n \n if (selectedElement.value.tag === 'Text') {\n elementProps.text = (selectedElement.value as any).text || ''\n elementProps.fontSize = (selectedElement.value as any).fontSize || 16\n elementProps.fill = (selectedElement.value as any).fill || '#000000'\n }\n}\n\n// 更新元素\nfunction updateElement() {\n if (!selectedElement.value) return\n\n Object.assign(selectedElement.value, {\n x: elementProps.x,\n y: elementProps.y,\n width: elementProps.width,\n height: elementProps.height\n })\n\n if (selectedElement.value.tag === 'Text') {\n Object.assign(selectedElement.value, {\n text: elementProps.text,\n fontSize: elementProps.fontSize,\n fill: elementProps.fill\n })\n }\n}\n\n// 文件上传处理\nfunction handleFileUpload(event: Event) {\n const files = (event.target as HTMLInputElement).files\n if (!files || !editor) return\n\n Array.from(files).forEach(file => {\n const url = URL.createObjectURL(file)\n editor?.addImage(url, {\n x: Math.random() * 300,\n y: Math.random() * 300\n })\n })\n}\n\n// 添加图库图片\nfunction addGalleryImage(image: { id: string, url: string, name: string }) {\n if (!editor) return\n \n editor.addImage(image.url, {\n x: Math.random() * 300,\n y: Math.random() * 300\n })\n}\n\n// 添加文字\nfunction addText() {\n if (!editor) return\n \n editor.addText('双击编辑文字', {\n x: Math.random() * 300,\n y: Math.random() * 300,\n fontSize: 16,\n fill: '#000000'\n })\n}\n\n// 添加文字模板\nfunction addTextTemplate(template: any) {\n if (!editor) return\n \n editor.addText(template.text, {\n x: Math.random() * 300,\n y: Math.random() * 300,\n fontSize: template.fontSize,\n fill: template.fill\n })\n}\n\n// 选择图层\nfunction selectLayer(layer: any) {\n selectedLayerId.value = layer.id\n // TODO: 选中对应的编辑器元素\n}\n\n// 删除图层\nfunction deleteLayer(layer: any) {\n // TODO: 删除对应的编辑器元素\n}\n\n// 设置缩放\nfunction setZoom(zoom: number) {\n editor?.setZoom(zoom)\n}\n\n// 适应屏幕\nfunction fitToScreen() {\n // TODO: 实现适应屏幕功能\n}\n\n// 撤销重做\nfunction undo() {\n // TODO: 实现撤销功能\n}\n\nfunction redo() {\n // TODO: 实现重做功能\n}\n\n// 保存\nfunction save() {\n const data = {\n elements: editor?.getAllElements(),\n // 其他设计数据\n }\n emit('save', data)\n}\n\n// 预览\nfunction preview() {\n const data = {\n elements: editor?.getAllElements(),\n // 其他设计数据\n }\n emit('preview', data)\n}\n</script>\n\n<style scoped>\n.cuzcuz-designer {\n display: flex;\n flex-direction: column;\n height: 100vh;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.top-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n}\n\n.logo {\n font-weight: bold;\n font-size: 18px;\n color: #333;\n}\n\n.toolbar-center {\n display: flex;\n gap: 8px;\n}\n\n.toolbar-center button, .preview-btn {\n padding: 6px 12px;\n border: 1px solid #ddd;\n background: white;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.toolbar-center button:hover, .preview-btn:hover {\n background: #f0f0f0;\n}\n\n.toolbar-center button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.preview-btn {\n background: #007bff;\n color: white;\n border-color: #007bff;\n}\n\n.preview-btn:hover {\n background: #0056b3;\n}\n\n.designer-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n.left-sidebar {\n width: 280px;\n background: #f8f9fa;\n border-right: 1px solid #e9ecef;\n display: flex;\n flex-direction: column;\n}\n\n.tool-tabs {\n display: flex;\n border-bottom: 1px solid #e9ecef;\n}\n\n.tool-tab {\n flex: 1;\n padding: 12px 8px;\n text-align: center;\n cursor: pointer;\n border-bottom: 2px solid transparent;\n font-size: 12px;\n}\n\n.tool-tab.active {\n background: white;\n border-bottom-color: #007bff;\n}\n\n.tool-tab i {\n display: block;\n margin-bottom: 4px;\n font-size: 16px;\n}\n\n.tool-content {\n flex: 1;\n padding: 16px;\n overflow-y: auto;\n}\n\n.tool-panel h3 {\n margin: 0 0 16px 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n}\n\n.upload-btn, .add-text-btn {\n width: 100%;\n padding: 8px;\n background: #007bff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.upload-btn:hover, .add-text-btn:hover {\n background: #0056b3;\n}\n\n.gallery-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));\n gap: 8px;\n}\n\n.gallery-item {\n aspect-ratio: 1;\n border: 1px solid #ddd;\n border-radius: 4px;\n overflow: hidden;\n cursor: pointer;\n}\n\n.gallery-item:hover {\n border-color: #007bff;\n}\n\n.gallery-item img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.text-templates {\n margin-top: 16px;\n}\n\n.text-template {\n padding: 8px;\n margin-bottom: 8px;\n background: white;\n border: 1px solid #ddd;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.text-template:hover {\n border-color: #007bff;\n}\n\n.layers-list {\n max-height: 300px;\n overflow-y: auto;\n}\n\n.layer-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px;\n margin-bottom: 4px;\n background: white;\n border: 1px solid #ddd;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.layer-item.active {\n border-color: #007bff;\n background: #f0f8ff;\n}\n\n.delete-btn {\n background: #dc3545;\n color: white;\n border: none;\n border-radius: 2px;\n width: 20px;\n height: 20px;\n font-size: 12px;\n cursor: pointer;\n}\n\n.canvas-area {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: #f0f0f0;\n}\n\n.canvas-toolbar {\n padding: 8px 16px;\n background: white;\n border-bottom: 1px solid #e9ecef;\n}\n\n.zoom-controls {\n display: flex;\n gap: 8px;\n}\n\n.zoom-controls button {\n padding: 4px 8px;\n border: 1px solid #ddd;\n background: white;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.zoom-controls button:hover {\n background: #f0f0f0;\n}\n\n.canvas-container {\n flex: 1;\n background: white;\n margin: 16px;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.1);\n}\n\n.right-sidebar {\n width: 280px;\n background: #f8f9fa;\n border-left: 1px solid #e9ecef;\n padding: 16px;\n overflow-y: auto;\n}\n\n.properties-panel h3 {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.property-group {\n margin-bottom: 24px;\n}\n\n.property-group h4 {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: #666;\n}\n\n.property-row {\n display: flex;\n align-items: center;\n margin-bottom: 8px;\n font-size: 14px;\n}\n\n.property-row label {\n width: 60px;\n color: #666;\n}\n\n.property-row input {\n flex: 1;\n padding: 4px 8px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n}\n\n.no-selection {\n text-align: center;\n color: #666;\n margin-top: 50px;\n}\n</style> ","// 导出核心类型\nexport * from 'podesigner-core'\n\n// 导出编辑器类\nexport * from './editor/BaseEditor'\n\n// 导出设计器组件\nexport { default as CuzcuzDesigner } from './components/CuzcuzDesigner.vue'\n\n// SDK版本\nexport const VERSION = '1.0.0'\n\n// 创建编辑器的便捷函数\nexport { BaseEditor as CuzcuzEditor } from './editor/BaseEditor'\n\n// Vue插件安装函数\nimport type { App } from 'vue'\nimport CuzcuzDesigner from './components/CuzcuzDesigner.vue'\n\nexport const install = (app: App) => {\n app.component('CuzcuzDesigner', CuzcuzDesigner)\n}\n\n// 默认导出(用于全局安装)\nexport default {\n install,\n CuzcuzDesigner,\n VERSION\n} "],"names":["BaseEditor","config","options","__publicField","ref","App","GuideLines","Ruler","userImageGroup","Frame","url","image","LeaferImage","text","textElement","LeaferText","element","img","zoom","props","__props","emit","__emit","canvasContainer","fileInput","activeTab","selectedLayerId","selectedElement","canUndo","canRedo","editor","toolTabs","layers","textTemplates","elementProps","reactive","onMounted","nextTick","setupEventListeners","onUnmounted","e","updateElementProps","watch","elements","el","index","updateElement","handleFileUpload","event","files","file","addGalleryImage","addText","addTextTemplate","template","selectLayer","layer","deleteLayer","setZoom","fitToScreen","undo","redo","save","data","preview","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_cache","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_Fragment","_renderList","tab","_normalizeClass","$event","_toDisplayString","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","galleryImages","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_withModifiers","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_vModelText","_hoisted_35","_hoisted_36","_hoisted_37","VERSION","install","app","CuzcuzDesigner"],"mappings":"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"}