@varianta/sdk 0.1.8 → 0.1.9
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.
- package/README.md +1 -2
- package/dist/index.cjs.js +4 -4
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +586 -455
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +4 -4
- package/dist/index.umd.js.map +1 -1
- package/dist/react.cjs.js +1 -1
- package/dist/react.cjs.js.map +1 -1
- package/dist/react.esm.js +207 -208
- package/dist/react.esm.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/react/Customizer.d.ts +1 -1
- package/dist/types/react/Customizer.d.ts.map +1 -1
- package/dist/types/react/index.d.ts +1 -0
- package/dist/types/react/index.d.ts.map +1 -1
- package/dist/types/react/useCustomizer.d.ts +2 -1
- package/dist/types/react/useCustomizer.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +13 -7
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/validation.d.ts +38 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/vanilla/index.d.ts +1 -1
- package/dist/types/vanilla/index.d.ts.map +1 -1
- package/dist/types/vue/index.d.ts +1 -0
- package/dist/types/vue/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../editor/dist/customizer.esm.js","../src/vanilla/index.ts"],"sourcesContent":["class O {\n constructor(t) {\n this.animationFrameId = null, this.needsRender = !0, this.areas = [], this.contents = /* @__PURE__ */ new Map(), this.artboard = null, this.bgImageElement = null, this.loadedImages = /* @__PURE__ */ new Map(), this.loadingImages = /* @__PURE__ */ new Set(), this.zoom = 1, this.pan = { x: 0, y: 0 }, this.selectedAreaId = null, this.hoveredHandle = null, this.eventListeners = /* @__PURE__ */ new Map(), this.safeArea = null, this.safeAreaViolations = /* @__PURE__ */ new Set(), this.showAreaBorders = !0, this.areaSelectionEnabled = !0, this.renderLoop = () => {\n try {\n this.needsRender && (this.render(), this.needsRender = !1, this.emit(\"render\", void 0));\n } catch (i) {\n console.error(\"Error in render loop:\", i);\n }\n this.animationFrameId = requestAnimationFrame(this.renderLoop);\n }, this.canvas = t;\n const e = t.getContext(\"2d\");\n if (!e)\n throw new Error(\"Failed to get 2D context from canvas\");\n this.ctx = e;\n }\n /**\n * Start the render loop\n */\n start() {\n this.animationFrameId === null && this.renderLoop();\n }\n /**\n * Stop the render loop\n */\n stop() {\n this.animationFrameId !== null && (cancelAnimationFrame(this.animationFrameId), this.animationFrameId = null);\n }\n /**\n * Set artboard configuration\n */\n setArtboard(t) {\n this.artboard = t, this.requestRender();\n }\n /**\n * Get artboard configuration\n */\n getArtboard() {\n return this.artboard;\n }\n /**\n * Set areas to render\n */\n setAreas(t) {\n this.areas = [...t].sort((e, i) => e.zIndex - i.zIndex), this.requestRender();\n }\n /**\n * Get areas\n */\n getAreas() {\n return this.areas;\n }\n /**\n * Set area contents\n */\n setContents(t) {\n this.contents = t, this.loadContentImages(), this.requestRender();\n }\n /**\n * Get area contents\n */\n getContents() {\n return this.contents;\n }\n /**\n * Update content for a single area\n */\n updateContent(t, e) {\n this.contents.set(t, e), e.type === \"image\" && this.loadContentImages(), this.requestRender(), this.emit(\"content:change\", { areaId: t, content: e });\n }\n /**\n * Remove content for an area\n */\n removeContent(t) {\n this.contents.delete(t), this.loadedImages.delete(t), this.requestRender();\n }\n /**\n * Set background image\n */\n setBackgroundImage(t) {\n if (this.backgroundImage = t, t?.url && t.url !== this.bgImageElement?.src) {\n const e = t.url, i = new Image();\n i.crossOrigin = \"anonymous\", i.onload = () => {\n this.bgImageElement = i, this.requestRender();\n }, i.onerror = () => {\n this.bgImageElement = null, console.error(\"Failed to load background image:\", e), this.requestRender();\n }, i.src = e;\n } else t?.url || (this.bgImageElement = null);\n this.requestRender();\n }\n /**\n * Set zoom level\n */\n setZoom(t) {\n this.zoom = Math.max(0.1, Math.min(5, t)), this.requestRender();\n }\n /**\n * Set pan offset\n */\n setPan(t) {\n this.pan = t, this.requestRender();\n }\n /**\n * Get zoom level\n */\n getZoom() {\n return this.zoom;\n }\n /**\n * Get pan offset\n */\n getPan() {\n return this.pan;\n }\n /**\n * Set whether area borders are shown\n */\n setShowAreaBorders(t) {\n this.showAreaBorders = t, this.requestRender();\n }\n /**\n * Set whether area selection is enabled\n */\n setAreaSelectionEnabled(t) {\n this.areaSelectionEnabled = t;\n }\n /**\n * Calculate the pan offset needed to center the artboard at a given zoom level\n */\n getCenteredPan(t) {\n if (!this.artboard)\n return null;\n const { width: e, height: i } = this.artboard, s = window.devicePixelRatio || 1, n = this.canvas.width / s, o = this.canvas.height / s;\n return {\n x: (n / t - e) / 2,\n y: (o / t - i) / 2\n };\n }\n /**\n * Request a render on the next frame\n */\n requestRender() {\n this.needsRender = !0;\n }\n /**\n * Fit view to show the entire artboard\n */\n fitToView() {\n if (!this.artboard)\n return;\n const t = 0, { width: e, height: i } = this.artboard, s = window.devicePixelRatio || 1, n = this.canvas.width / s - t * 2, o = this.canvas.height / s - t * 2;\n if (n <= 0 || o <= 0)\n return;\n const a = n / e, r = o / i, l = Math.min(a, r), d = this.canvas.width / s, c = this.canvas.height / s, p = (d / l - e) / 2, u = (c / l - i) / 2;\n this.zoom = l, this.pan = { x: p, y: u }, this.requestRender();\n }\n /**\n * Set the selected area\n */\n setSelectedArea(t) {\n this.selectedAreaId !== t && (this.selectedAreaId = t, this.requestRender(), this.emit(\"area:select\", { areaId: t }));\n }\n /**\n * Get the selected area ID\n */\n getSelectedArea() {\n return this.selectedAreaId;\n }\n /**\n * Set the hovered handle for highlighting\n */\n setHoveredHandle(t) {\n this.hoveredHandle !== t && (this.hoveredHandle = t, this.requestRender());\n }\n /**\n * Get the currently hovered handle\n */\n getHoveredHandle() {\n return this.hoveredHandle;\n }\n /**\n * Convert screen coordinates to canvas coordinates\n */\n screenToCanvas(t, e) {\n const i = window.devicePixelRatio || 1, s = t / i, n = e / i, o = s / this.zoom - this.pan.x, a = n / this.zoom - this.pan.y;\n return { x: o, y: a };\n }\n /**\n * Get content bounds for an area (in artboard coordinates)\n */\n getContentBounds(t) {\n const e = this.areas.find((l) => l.id === t);\n if (!e)\n return null;\n const i = this.contents.get(t);\n if (!i)\n return null;\n const { location: s } = e, { x: n, y: o, width: a, height: r } = s;\n if (i.type === \"text\") {\n const l = i.offset || { x: 0, y: 0 }, d = i.scale ?? 1, c = i.rotation ?? 0, p = a * d, u = r * d, g = n + a / 2 + l.x, m = o + r / 2 + l.y;\n return {\n x: g - p / 2,\n y: m - u / 2,\n width: p,\n height: u,\n rotation: c,\n centerX: g,\n centerY: m\n };\n } else if (i.type === \"image\") {\n const l = this.loadedImages.get(t);\n if (!l)\n return null;\n const d = i.offset || { x: 0, y: 0 }, c = i.scale ?? 1, p = i.rotation ?? 0, u = l.naturalWidth / l.naturalHeight, g = a / r;\n let m, b;\n u > g ? (m = a, b = a / u) : (b = r, m = r * u);\n const w = m * c, y = b * c, v = n + a / 2 + d.x, x = o + r / 2 + d.y;\n return {\n x: v - w / 2,\n y: x - y / 2,\n width: w,\n height: y,\n rotation: p,\n centerX: v,\n centerY: x\n };\n }\n return null;\n }\n /**\n * Hit test content at given canvas coordinates\n * Returns area ID if content was hit, null otherwise\n */\n hitTestContent(t, e) {\n if (!this.areaSelectionEnabled)\n return null;\n for (let i = this.areas.length - 1; i >= 0; i--) {\n const s = this.areas[i], n = this.getContentBounds(s.id);\n if (n && this.isPointInBounds(t, e, n))\n return s.id;\n }\n return null;\n }\n /**\n * Hit test area at given canvas coordinates (ignoring content)\n * Returns area ID if point is inside area bounds\n */\n hitTestArea(t, e) {\n if (!this.areaSelectionEnabled)\n return null;\n for (let i = this.areas.length - 1; i >= 0; i--) {\n const s = this.areas[i], { x: n, y: o, width: a, height: r } = s.location;\n if (t >= n && t <= n + a && e >= o && e <= o + r)\n return s.id;\n }\n return null;\n }\n /**\n * Test if a point is inside rotated bounds\n */\n isPointInBounds(t, e, i) {\n const { centerX: s, centerY: n, width: o, height: a, rotation: r } = i, l = -r * Math.PI / 180, d = Math.cos(l), c = Math.sin(l), p = t - s, u = e - n, g = p * d - u * c, m = p * c + u * d;\n return g >= -o / 2 && g <= o / 2 && m >= -a / 2 && m <= a / 2;\n }\n /**\n * Get handle positions for the selected content\n */\n getContentHandlePositions(t) {\n const e = this.areas.find((v) => v.id === t);\n if (!e)\n return null;\n const i = this.contents.get(t);\n if (!i)\n return null;\n const s = this.getContentBounds(t);\n if (!s)\n return null;\n const { centerX: n, centerY: o, width: a, height: r, rotation: l } = s, d = 6 / this.zoom, c = 30 / this.zoom, p = l * Math.PI / 180, u = Math.cos(p), g = Math.sin(p), m = (v, x) => ({\n x: n + v * u - x * g,\n y: o + v * g + x * u\n }), b = [];\n if (i.type === \"image\" && e.imageOptions?.allowScaling || i.type === \"text\" && e.textOptions?.allowScaling) {\n const v = a / 2, x = r / 2, C = m(-v, -x);\n b.push({ type: \"nw\", ...C, radius: d });\n const M = m(v, -x);\n b.push({ type: \"ne\", ...M, radius: d });\n const T = m(v, x);\n b.push({ type: \"se\", ...T, radius: d });\n const k = m(-v, x);\n b.push({ type: \"sw\", ...k, radius: d });\n }\n if (i.type === \"image\" && e.imageOptions?.allowRotation || i.type === \"text\" && e.textOptions?.allowRotation) {\n const v = m(0, -r / 2 - c);\n b.push({ type: \"rotate\", ...v, radius: d });\n }\n return b;\n }\n /**\n * Hit test handles at given canvas coordinates\n */\n hitTestHandle(t, e, i) {\n const s = this.getContentHandlePositions(i);\n if (!s)\n return null;\n for (const n of s) {\n const o = t - n.x, a = e - n.y;\n if (Math.sqrt(o * o + a * a) <= n.radius * 2)\n return n.type;\n }\n return null;\n }\n /**\n * Check if positioning is allowed for an area\n */\n isPositioningAllowed(t) {\n const e = this.areas.find((s) => s.id === t);\n if (!e)\n return !1;\n const i = this.contents.get(t);\n return i ? i.type === \"text\" ? e.textOptions?.allowPositioning ?? !1 : e.imageOptions?.allowPositioning ?? !1 : !1;\n }\n /**\n * Get area location (for constraint calculations)\n */\n getAreaLocation(t) {\n const e = this.areas.find((i) => i.id === t);\n return e ? e.location : null;\n }\n /**\n * Get area by ID\n */\n getArea(t) {\n return this.areas.find((e) => e.id === t);\n }\n /**\n * Set safe area margins for content safety guides\n */\n setSafeArea(t) {\n this.safeArea = t ?? null, this.requestRender();\n }\n /**\n * Check if any area content extends beyond the safe area bounds.\n * Returns array of violating area IDs.\n */\n checkSafeAreaViolations() {\n if (!this.safeArea || !this.artboard)\n return [];\n const t = [], { top: e, right: i, bottom: s, left: n } = this.safeArea, o = n, a = e, r = this.artboard.width - i, l = this.artboard.height - s;\n for (const d of this.areas) {\n if (!this.contents.get(d.id))\n continue;\n const p = this.getContentBounds(d.id);\n if (!p)\n continue;\n const { centerX: u, centerY: g, width: m, height: b, rotation: w } = p, y = w * Math.PI / 180, v = Math.abs(Math.cos(y)), x = Math.abs(Math.sin(y)), C = m * v + b * x, M = m * x + b * v, T = u - C / 2, k = g - M / 2, U = u + C / 2, N = g + M / 2;\n (T < o || k < a || U > r || N > l) && t.push(d.id);\n }\n return this.safeAreaViolations = new Set(t), this.requestRender(), t;\n }\n /**\n * Add event listener\n */\n on(t, e) {\n return this.eventListeners.has(t) || this.eventListeners.set(t, /* @__PURE__ */ new Set()), this.eventListeners.get(t).add(e), () => {\n this.eventListeners.get(t)?.delete(e);\n };\n }\n /**\n * Emit event\n */\n emit(t, e) {\n const i = this.eventListeners.get(t);\n if (i)\n for (const s of i)\n s(e);\n }\n /**\n * Export to PNG at full resolution\n */\n async exportToPNG() {\n if (!this.artboard)\n throw new Error(\"No artboard configured\");\n const { width: t, height: e, backgroundColor: i } = this.artboard, s = document.createElement(\"canvas\");\n s.width = t, s.height = e;\n const n = s.getContext(\"2d\");\n if (!n)\n throw new Error(\"Failed to get 2D context for export\");\n n.fillStyle = i, n.fillRect(0, 0, t, e), this.backgroundImage?.position === \"behind\" && this.bgImageElement && this.drawBackgroundImageOnContext(n, t, e);\n for (const o of this.areas)\n this.drawAreaContentOnContext(n, o);\n return this.backgroundImage?.position === \"overlay\" && this.bgImageElement && this.drawBackgroundImageOnContext(n, t, e), new Promise((o, a) => {\n try {\n s.toBlob((r) => {\n r ? o(r) : a(new Error(\"Failed to create PNG blob\"));\n }, \"image/png\", 1);\n } catch (r) {\n r instanceof DOMException && r.name === \"SecurityError\" ? a(new Error(\"Cannot export: images failed to load with CORS. Check CDN configuration.\")) : a(r);\n }\n });\n }\n /**\n * Load images from content data URLs\n */\n loadContentImages() {\n for (const [t, e] of this.contents)\n if (e.type === \"image\" && !this.loadedImages.has(t) && !this.loadingImages.has(t)) {\n this.loadingImages.add(t);\n const i = new Image();\n i.crossOrigin = \"anonymous\", i.onload = () => {\n this.loadedImages.set(t, i), this.loadingImages.delete(t), this.requestRender();\n }, i.onerror = () => {\n this.loadingImages.delete(t), console.error(\"Failed to load image for area:\", t);\n }, i.src = e.dataUrl;\n }\n for (const t of this.loadedImages.keys()) {\n const e = this.contents.get(t);\n (!e || e.type !== \"image\") && this.loadedImages.delete(t);\n }\n }\n /**\n * Render the canvas\n */\n render() {\n const { ctx: t, canvas: e } = this;\n if (t.fillStyle = \"#f3f4f6\", t.fillRect(0, 0, e.width, e.height), !this.artboard)\n return;\n t.save();\n const i = window.devicePixelRatio || 1;\n t.scale(i, i), t.scale(this.zoom, this.zoom), t.translate(this.pan.x, this.pan.y);\n const { width: s, height: n, backgroundColor: o } = this.artboard;\n t.fillStyle = o, t.fillRect(0, 0, s, n), t.strokeStyle = \"#d1d5db\", t.lineWidth = 1 / this.zoom, t.strokeRect(0, 0, s, n), this.backgroundImage?.position === \"behind\" && this.renderBackgroundImage();\n for (const a of this.areas)\n this.renderAreaWithContent(a);\n this.backgroundImage?.position === \"overlay\" && this.renderBackgroundImage(), this.renderSafeAreaGuide();\n for (const a of this.safeAreaViolations) {\n const r = this.areas.find((u) => u.id === a);\n if (!r)\n continue;\n const { x: l, y: d, width: c, height: p } = r.location;\n t.save(), t.fillStyle = \"rgba(239, 68, 68, 0.15)\", t.fillRect(l, d, c, p), t.restore();\n }\n this.selectedAreaId && this.renderSelectionOverlay(this.selectedAreaId), t.restore();\n }\n /**\n * Render selection overlay with handles\n */\n renderSelectionOverlay(t) {\n const e = this.getContentBounds(t);\n if (!e) {\n const d = this.areas.find((b) => b.id === t);\n if (!d)\n return;\n const { ctx: c } = this, { x: p, y: u, width: g, height: m } = d.location;\n c.save(), c.strokeStyle = \"#3b82f6\", c.lineWidth = 2 / this.zoom, c.setLineDash([]), c.strokeRect(p, u, g, m), c.restore();\n return;\n }\n const { ctx: i } = this, { centerX: s, centerY: n, width: o, height: a, rotation: r } = e;\n i.save(), i.translate(s, n), i.rotate(r * Math.PI / 180), i.strokeStyle = \"#3b82f6\", i.lineWidth = 2 / this.zoom, i.setLineDash([]), i.strokeRect(-o / 2, -a / 2, o, a), i.restore();\n const l = this.getContentHandlePositions(t);\n if (l)\n for (const d of l) {\n i.save();\n const c = this.hoveredHandle === d.type, p = c ? \"#dbeafe\" : \"#ffffff\", u = c ? \"#2563eb\" : \"#3b82f6\";\n if (d.type === \"rotate\") {\n const g = this.getRotatedPoint(s, n - a / 2, s, n, r);\n i.beginPath(), i.strokeStyle = u, i.lineWidth = 1 / this.zoom, i.setLineDash([4 / this.zoom, 4 / this.zoom]), i.moveTo(g.x, g.y), i.lineTo(d.x, d.y), i.stroke(), i.setLineDash([]), i.beginPath(), i.fillStyle = p, i.strokeStyle = u, i.lineWidth = 2 / this.zoom, i.arc(d.x, d.y, d.radius, 0, Math.PI * 2), i.fill(), i.stroke(), i.beginPath(), i.strokeStyle = u, i.lineWidth = 1.5 / this.zoom, i.arc(d.x, d.y, d.radius * 0.5, -Math.PI * 0.8, Math.PI * 0.5), i.stroke();\n } else\n i.fillStyle = p, i.strokeStyle = u, i.lineWidth = 2 / this.zoom, i.fillRect(d.x - d.radius, d.y - d.radius, d.radius * 2, d.radius * 2), i.strokeRect(d.x - d.radius, d.y - d.radius, d.radius * 2, d.radius * 2);\n i.restore();\n }\n }\n /**\n * Rotate a point around a center\n */\n getRotatedPoint(t, e, i, s, n) {\n const o = n * Math.PI / 180, a = Math.cos(o), r = Math.sin(o), l = t - i, d = e - s;\n return {\n x: i + l * a - d * r,\n y: s + l * r + d * a\n };\n }\n /**\n * Render background image\n */\n renderBackgroundImage() {\n if (!this.bgImageElement || !this.artboard || !this.backgroundImage)\n return;\n const { ctx: t } = this, { opacity: e } = this.backgroundImage, { width: i, height: s } = this.artboard;\n t.save(), t.globalAlpha = e;\n const n = this.bgImageElement.naturalWidth / this.bgImageElement.naturalHeight, o = i / s;\n let a, r, l, d;\n n > o ? (r = s, a = s * n, l = (i - a) / 2, d = 0) : (a = i, r = i / n, l = 0, d = (s - r) / 2), t.drawImage(this.bgImageElement, l, d, a, r), t.restore();\n }\n /**\n * Render safe area guide as dashed green rectangle\n */\n renderSafeAreaGuide() {\n if (!this.safeArea || !this.artboard)\n return;\n const { ctx: t } = this, { top: e, right: i, bottom: s, left: n } = this.safeArea, o = n, a = e, r = this.artboard.width - n - i, l = this.artboard.height - e - s;\n r <= 0 || l <= 0 || (t.save(), t.strokeStyle = \"#22c55e\", t.lineWidth = 1 / this.zoom, t.setLineDash([6 / this.zoom, 4 / this.zoom]), t.strokeRect(o, a, r, l), t.setLineDash([]), t.restore());\n }\n /**\n * Render an area with its content\n */\n renderAreaWithContent(t) {\n const { ctx: e } = this, { location: i, backgroundColor: s } = t, { x: n, y: o, width: a, height: r } = i;\n s && (e.fillStyle = s, e.fillRect(n, o, a, r));\n const l = this.contents.get(t.id);\n l && (l.type === \"text\" ? this.renderTextContent(t, l) : l.type === \"image\" && this.renderImageContent(t, l)), this.showAreaBorders && t.showBorder && (e.save(), e.strokeStyle = t.borderColor || \"#3b82f6\", e.lineWidth = 1 / this.zoom, e.setLineDash([4 / this.zoom, 4 / this.zoom]), e.strokeRect(n, o, a, r), e.setLineDash([]), e.restore());\n }\n /**\n * Render text content in an area\n */\n renderTextContent(t, e) {\n if (!e.text.trim())\n return;\n const { ctx: i } = this, { location: s } = t, { x: n, y: o, width: a, height: r } = s, l = e.offset || { x: 0, y: 0 }, d = e.scale ?? 1, c = e.rotation ?? 0, p = n + a / 2 + l.x, u = o + r / 2 + l.y;\n i.save(), i.beginPath(), i.rect(n, o, a, r), i.clip(), i.translate(p, u), i.rotate(c * Math.PI / 180), i.scale(d, d), i.font = `${e.size}px ${e.font}, sans-serif`, i.fillStyle = e.color, i.textBaseline = \"middle\";\n let g;\n switch (e.align) {\n case \"left\":\n i.textAlign = \"left\", g = -a / 2 + 10;\n break;\n case \"right\":\n i.textAlign = \"right\", g = a / 2 - 10;\n break;\n case \"center\":\n default:\n i.textAlign = \"center\", g = 0;\n break;\n }\n i.fillText(e.text, g, 0), i.restore();\n }\n /**\n * Render image content in an area\n */\n renderImageContent(t, e) {\n const i = this.loadedImages.get(t.id);\n if (!i)\n return;\n const { ctx: s } = this, { location: n } = t, { x: o, y: a, width: r, height: l } = n, d = e.offset || { x: 0, y: 0 }, c = e.scale ?? 1, p = e.rotation ?? 0;\n s.save(), s.beginPath(), s.rect(o, a, r, l), s.clip();\n const u = i.naturalWidth / i.naturalHeight, g = r / l;\n let m, b;\n u > g ? (m = r, b = r / u) : (b = l, m = l * u);\n const w = m * c, y = b * c, v = o + r / 2 + d.x, x = a + l / 2 + d.y;\n s.translate(v, x), s.rotate(p * Math.PI / 180), s.drawImage(i, -w / 2, -y / 2, w, y), s.restore();\n }\n /**\n * Draw background image on a specific context (for export)\n */\n drawBackgroundImageOnContext(t, e, i) {\n if (!this.bgImageElement || !this.backgroundImage)\n return;\n const { opacity: s } = this.backgroundImage;\n t.save(), t.globalAlpha = s;\n const n = this.bgImageElement.naturalWidth / this.bgImageElement.naturalHeight, o = e / i;\n let a, r, l, d;\n n > o ? (r = i, a = i * n, l = (e - a) / 2, d = 0) : (a = e, r = e / n, l = 0, d = (i - r) / 2), t.drawImage(this.bgImageElement, l, d, a, r), t.restore();\n }\n /**\n * Draw area content on a specific context (for export)\n */\n drawAreaContentOnContext(t, e) {\n const { location: i, backgroundColor: s } = e, { x: n, y: o, width: a, height: r } = i;\n s && (t.fillStyle = s, t.fillRect(n, o, a, r));\n const l = this.contents.get(e.id);\n if (l) {\n if (l.type === \"text\") {\n if (!l.text.trim())\n return;\n const d = l.offset || { x: 0, y: 0 }, c = l.scale ?? 1, p = l.rotation ?? 0, u = n + a / 2 + d.x, g = o + r / 2 + d.y;\n t.save(), t.beginPath(), t.rect(n, o, a, r), t.clip(), t.translate(u, g), t.rotate(p * Math.PI / 180), t.scale(c, c), t.font = `${l.size}px ${l.font}, sans-serif`, t.fillStyle = l.color, t.textBaseline = \"middle\";\n let m;\n switch (l.align) {\n case \"left\":\n t.textAlign = \"left\", m = -a / 2 + 10;\n break;\n case \"right\":\n t.textAlign = \"right\", m = a / 2 - 10;\n break;\n case \"center\":\n default:\n t.textAlign = \"center\", m = 0;\n break;\n }\n t.fillText(l.text, m, 0), t.restore();\n } else if (l.type === \"image\") {\n const d = this.loadedImages.get(e.id);\n if (!d)\n return;\n const c = l.offset || { x: 0, y: 0 }, p = l.scale ?? 1, u = l.rotation ?? 0;\n t.save(), t.beginPath(), t.rect(n, o, a, r), t.clip();\n const g = d.naturalWidth / d.naturalHeight, m = a / r;\n let b, w;\n g > m ? (b = a, w = a / g) : (w = r, b = r * g);\n const y = b * p, v = w * p, x = n + a / 2 + c.x, C = o + r / 2 + c.y;\n t.translate(x, C), t.rotate(u * Math.PI / 180), t.drawImage(d, -y / 2, -v / 2, y, v), t.restore();\n }\n }\n }\n /**\n * Cleanup resources\n */\n destroy() {\n this.stop(), this.bgImageElement = null, this.loadedImages.clear(), this.loadingImages.clear(), this.eventListeners.clear();\n }\n}\nfunction z(f) {\n const t = f.textOptions;\n return {\n type: \"text\",\n text: t?.defaultText || \"\",\n font: t?.defaultFont || \"Inter\",\n size: t?.defaultSize || 24,\n color: t?.defaultColor || \"#000000\",\n align: t?.defaultAlign || \"center\"\n };\n}\nfunction E(f) {\n return f.contentType === \"text\" || f.contentType === \"both\";\n}\nfunction A(f) {\n return f.contentType === \"image\" || f.contentType === \"both\";\n}\nconst B = 50;\nclass F {\n constructor(t) {\n this.history = [], this.historyIndex = -1, this.listeners = /* @__PURE__ */ new Set(), this.isRestoring = !1, this.state = this.cloneState(t), this.history.push({\n state: this.cloneState(t),\n timestamp: Date.now(),\n description: \"Initial state\"\n }), this.historyIndex = 0;\n }\n getState() {\n return this.state;\n }\n /**\n * Update state and save to history\n */\n setState(t, e, i = !1) {\n const s = this.state;\n this.state = { ...this.state, ...t }, !i && !this.isRestoring && this.saveToHistory(s, e), this.notifyListeners();\n }\n /**\n * Update state without saving to history\n * Use for transient changes like zoom/pan\n */\n update(t) {\n this.state = { ...this.state, ...t }, this.notifyListeners();\n }\n subscribe(t) {\n return this.listeners.add(t), () => this.listeners.delete(t);\n }\n undo() {\n return this.canUndo() ? (this.historyIndex--, this.restoreFromHistory(), !0) : !1;\n }\n redo() {\n return this.canRedo() ? (this.historyIndex++, this.restoreFromHistory(), !0) : !1;\n }\n canUndo() {\n return this.historyIndex > 0;\n }\n canRedo() {\n return this.historyIndex < this.history.length - 1;\n }\n clearHistory() {\n this.history = [], this.historyIndex = -1;\n }\n getHistory() {\n return this.history;\n }\n saveToHistory(t, e) {\n this.historyIndex < this.history.length - 1 && (this.history = this.history.slice(0, this.historyIndex + 1)), this.history.push({\n state: this.cloneState(t),\n timestamp: Date.now(),\n description: e\n }), this.history.length > B && this.history.shift(), this.historyIndex = this.history.length - 1;\n }\n restoreFromHistory() {\n const t = this.history[this.historyIndex];\n t && (this.isRestoring = !0, this.state = this.cloneState(t.state), this.notifyListeners(), this.isRestoring = !1);\n }\n notifyListeners() {\n const t = this.state;\n for (const e of this.listeners)\n try {\n e(t);\n } catch (i) {\n console.error(\"Error in state change listener:\", i);\n }\n }\n /**\n * Deep clone state. Contents are already serialized as Array<[string, AreaContent]>\n * so JSON.parse/stringify works correctly.\n */\n cloneState(t) {\n return JSON.parse(JSON.stringify(t));\n }\n}\nclass L {\n constructor(t) {\n this.listeners = /* @__PURE__ */ new Set(), this.areas = t, this.contents = this.buildInitialContents();\n }\n buildInitialContents() {\n const t = /* @__PURE__ */ new Map();\n for (const e of this.areas)\n E(e) && t.set(e.id, z(e));\n return t;\n }\n getContents() {\n return this.contents;\n }\n getContent(t) {\n return this.contents.get(t);\n }\n setTextContent(t, e) {\n const i = this.contents.get(t), s = this.areas.find((o) => o.id === t), n = s ? z(s) : {\n type: \"text\",\n text: \"\",\n font: \"Inter\",\n size: 24,\n color: \"#000000\",\n align: \"center\"\n };\n i?.type === \"text\" ? this.contents.set(t, { ...i, ...e }) : this.contents.set(t, { ...n, ...e }), this.notify();\n }\n setImageContent(t, e, i, s) {\n const n = this.contents.get(t), o = {\n type: \"image\",\n dataUrl: e,\n filename: i,\n assetId: s?.assetId,\n assetUrl: s?.assetUrl,\n // Preserve transforms from existing image content\n ...n?.type === \"image\" && {\n offset: n.offset,\n scale: n.scale,\n rotation: n.rotation\n }\n };\n this.contents.set(t, o), this.notify();\n }\n clearContent(t) {\n const e = this.areas.find((i) => i.id === t);\n e && E(e) ? this.contents.set(t, z(e)) : this.contents.delete(t), this.notify();\n }\n setContentOffset(t, e) {\n const i = this.contents.get(t);\n i && (this.contents.set(t, { ...i, offset: e }), this.notify());\n }\n setImageScale(t, e) {\n const i = this.contents.get(t);\n if (!i || i.type !== \"image\") return;\n const s = Math.max(0.1, Math.min(5, e));\n this.contents.set(t, { ...i, scale: s }), this.notify();\n }\n setImageRotation(t, e) {\n const i = this.contents.get(t);\n if (!i || i.type !== \"image\") return;\n let s = e % 360;\n s < 0 && (s += 360), this.contents.set(t, { ...i, rotation: s }), this.notify();\n }\n reset() {\n this.contents = this.buildInitialContents(), this.notify();\n }\n /** Serialize for undo/redo (Map -> Array) */\n toJSON() {\n return Array.from(this.contents.entries());\n }\n /** Restore from serialized data */\n fromJSON(t) {\n this.contents = new Map(t), this.notify();\n }\n /** Replace the entire contents map (e.g. from undo/redo) without notification */\n setContentsQuiet(t) {\n this.contents = new Map(t);\n }\n subscribe(t) {\n return this.listeners.add(t), () => this.listeners.delete(t);\n }\n notify() {\n for (const t of this.listeners)\n try {\n t();\n } catch (e) {\n console.error(\"Error in AreaContentManager listener:\", e);\n }\n }\n}\nclass S {\n constructor() {\n this.listeners = /* @__PURE__ */ new Map();\n }\n /**\n * Register an event listener\n *\n * @param event - Event name\n * @param handler - Event handler function\n * @returns Unsubscribe function\n */\n on(t, e) {\n return this.listeners.has(t) || this.listeners.set(t, /* @__PURE__ */ new Set()), this.listeners.get(t).add(e), () => this.off(t, e);\n }\n /**\n * Register a one-time event listener\n *\n * @param event - Event name\n * @param handler - Event handler function\n * @returns Unsubscribe function\n */\n once(t, e) {\n const i = (n) => {\n e(n), this.off(t, i);\n };\n return this.on(t, i);\n }\n /**\n * Remove an event listener\n *\n * @param event - Event name\n * @param handler - Event handler function to remove\n */\n off(t, e) {\n const i = this.listeners.get(t);\n i && (i.delete(e), i.size === 0 && this.listeners.delete(t));\n }\n /**\n * Emit an event to all registered listeners\n *\n * @param event - Event name\n * @param data - Event data\n */\n emit(t, e) {\n const i = this.listeners.get(t);\n if (i) {\n const s = Array.from(i);\n for (const n of s)\n try {\n n(e);\n } catch (o) {\n console.error(`Error in event handler for \"${String(t)}\":`, o);\n }\n }\n }\n /**\n * Remove all listeners for an event, or all listeners if no event specified\n *\n * @param event - Optional event name to clear (clears all if not specified)\n */\n clear(t) {\n t ? this.listeners.delete(t) : this.listeners.clear();\n }\n /**\n * Get the number of listeners for an event\n *\n * @param event - Event name\n * @returns Number of listeners\n */\n listenerCount(t) {\n return this.listeners.get(t)?.size ?? 0;\n }\n}\nclass H extends S {\n constructor() {\n super(...arguments), this.activeTouches = /* @__PURE__ */ new Map(), this.initialPinchDistance = null, this.lastPinchCenter = null, this.isTwoFingerGesture = !1;\n }\n /** Whether a multi-touch gesture is currently active */\n get isMultiTouch() {\n return this.isTwoFingerGesture;\n }\n handleTouchStart(t) {\n for (let e = 0; e < t.changedTouches.length; e++) {\n const i = t.changedTouches[e];\n this.activeTouches.set(i.identifier, {\n x: i.clientX,\n y: i.clientY\n });\n }\n if (this.activeTouches.size === 2) {\n this.isTwoFingerGesture = !0, t.preventDefault();\n const [e, i] = Array.from(this.activeTouches.values());\n this.initialPinchDistance = this.getDistance(e, i), this.lastPinchCenter = this.getCenter(e, i);\n }\n }\n handleTouchMove(t) {\n for (let e = 0; e < t.changedTouches.length; e++) {\n const i = t.changedTouches[e];\n this.activeTouches.set(i.identifier, {\n x: i.clientX,\n y: i.clientY\n });\n }\n if (this.activeTouches.size === 2 && this.initialPinchDistance !== null && this.lastPinchCenter) {\n t.preventDefault();\n const [e, i] = Array.from(this.activeTouches.values()), s = this.getDistance(e, i), n = this.getCenter(e, i), o = s / this.initialPinchDistance;\n this.emit(\"pinch\", {\n scale: o,\n centerX: n.x,\n centerY: n.y\n });\n const a = n.x - this.lastPinchCenter.x, r = n.y - this.lastPinchCenter.y;\n (Math.abs(a) > 0.5 || Math.abs(r) > 0.5) && this.emit(\"pan\", { deltaX: a, deltaY: r }), this.initialPinchDistance = s, this.lastPinchCenter = n;\n }\n }\n handleTouchEnd(t) {\n for (let e = 0; e < t.changedTouches.length; e++) {\n const i = t.changedTouches[e];\n this.activeTouches.delete(i.identifier);\n }\n this.activeTouches.size < 2 && (this.initialPinchDistance = null, this.lastPinchCenter = null, this.isTwoFingerGesture = !1);\n }\n reset() {\n this.activeTouches.clear(), this.initialPinchDistance = null, this.lastPinchCenter = null, this.isTwoFingerGesture = !1;\n }\n getDistance(t, e) {\n const i = e.x - t.x, s = e.y - t.y;\n return Math.sqrt(i * i + s * s);\n }\n getCenter(t, e) {\n return {\n x: (t.x + e.x) / 2,\n y: (t.y + e.y) / 2\n };\n }\n}\nclass V extends S {\n constructor(t, e, i, s) {\n super(), this.interactionState = { mode: \"idle\" }, this.initialPinchZoom = 1, this.canvas = t, this.engine = e, this.getContents = i, this.getSelectedAreaId = s, this.gestureHandler = new H(), this.boundMouseDown = this.handleMouseDown.bind(this), this.boundMouseMove = this.handleMouseMove.bind(this), this.boundMouseUp = this.handleMouseUp.bind(this), this.boundMouseLeave = this.handleMouseLeave.bind(this), this.boundContextMenu = this.handleContextMenu.bind(this), this.boundDoubleClick = this.handleDoubleClick.bind(this), this.boundTouchStart = this.handleTouchStart.bind(this), this.boundTouchMove = this.handleTouchMove.bind(this), this.boundTouchEnd = this.handleTouchEnd.bind(this), t.addEventListener(\"mousedown\", this.boundMouseDown), t.addEventListener(\"mousemove\", this.boundMouseMove), t.addEventListener(\"mouseup\", this.boundMouseUp), t.addEventListener(\"mouseleave\", this.boundMouseLeave), t.addEventListener(\"contextmenu\", this.boundContextMenu), t.addEventListener(\"dblclick\", this.boundDoubleClick), t.addEventListener(\"touchstart\", this.boundTouchStart, { passive: !1 }), t.addEventListener(\"touchmove\", this.boundTouchMove, { passive: !1 }), t.addEventListener(\"touchend\", this.boundTouchEnd), this.gestureHandler.on(\"pinch\", ({ scale: n }) => {\n const o = Math.max(0.1, Math.min(5, this.initialPinchZoom * n));\n this.emit(\"zoom\", { zoom: o });\n }), this.gestureHandler.on(\"pan\", ({ deltaX: n, deltaY: o }) => {\n const a = this.engine.getPan(), r = this.engine.getZoom();\n this.emit(\"pan\", {\n pan: {\n x: a.x + n / r,\n y: a.y + o / r\n }\n });\n });\n }\n getCanvasPosition(t, e) {\n const i = this.canvas.getBoundingClientRect(), s = window.devicePixelRatio || 1, n = (t - i.left) * s, o = (e - i.top) * s;\n return this.engine.screenToCanvas(n, o);\n }\n handleMouseDown(t) {\n const e = this.getCanvasPosition(t.clientX, t.clientY);\n this.processPointerDown(e);\n }\n handleMouseMove(t) {\n const e = this.getCanvasPosition(t.clientX, t.clientY);\n this.processPointerMove(e);\n }\n handleMouseUp() {\n this.processPointerUp();\n }\n handleMouseLeave() {\n this.processPointerUp(), this.emit(\"cursor\", { cursor: \"default\" });\n }\n handleContextMenu(t) {\n t.preventDefault();\n }\n handleDoubleClick(t) {\n const e = this.getCanvasPosition(t.clientX, t.clientY);\n let i = this.engine.hitTestContent(e.x, e.y);\n i || (i = this.engine.hitTestArea(e.x, e.y) ?? null), this.emit(\"context-menu\", { areaId: i, clientX: t.clientX, clientY: t.clientY });\n }\n handleTouchStart(t) {\n if (this.gestureHandler.handleTouchStart(t), this.gestureHandler.isMultiTouch) {\n this.initialPinchZoom = this.engine.getZoom(), this.interactionState.mode !== \"idle\" && (this.interactionState = { mode: \"idle\" });\n return;\n }\n if (t.touches.length !== 1) return;\n const e = t.touches[0], i = this.getCanvasPosition(e.clientX, e.clientY);\n this.processPointerDown(i) && t.preventDefault();\n }\n handleTouchMove(t) {\n if (this.gestureHandler.handleTouchMove(t), this.gestureHandler.isMultiTouch || t.touches.length !== 1 || this.interactionState.mode === \"idle\") return;\n const e = t.touches[0], i = this.getCanvasPosition(e.clientX, e.clientY);\n this.processPointerMove(i), t.preventDefault();\n }\n handleTouchEnd(t) {\n this.gestureHandler.handleTouchEnd(t), this.gestureHandler.isMultiTouch || this.processPointerUp();\n }\n /**\n * Process pointer down. Returns true if an interaction started.\n */\n processPointerDown(t) {\n const e = this.getSelectedAreaId(), i = this.getContents();\n if (e) {\n const o = this.engine.hitTestHandle(t.x, t.y, e);\n if (o) {\n const a = i.get(e), r = this.engine.getContentBounds(e);\n if (o === \"rotate\" && a?.type === \"image\" && r) {\n const l = Math.atan2(t.y - r.centerY, t.x - r.centerX) * (180 / Math.PI);\n return this.interactionState = {\n mode: \"rotating\",\n areaId: e,\n startRotation: a.rotation ?? 0,\n centerPoint: { x: r.centerX, y: r.centerY },\n startAngle: l\n }, !0;\n } else if (o !== \"rotate\" && a?.type === \"image\" && r)\n return this.interactionState = {\n mode: \"scaling\",\n areaId: e,\n handle: o,\n startScale: a.scale ?? 1,\n startMousePos: t,\n pivotPoint: { x: r.centerX, y: r.centerY }\n }, !0;\n }\n }\n const s = this.engine.hitTestContent(t.x, t.y);\n if (s) {\n if (this.emit(\"area:select\", { areaId: s }), this.engine.isPositioningAllowed(s)) {\n const a = i.get(s)?.offset ?? { x: 0, y: 0 };\n return this.interactionState = {\n mode: \"dragging\",\n areaId: s,\n startOffset: a,\n startMousePos: t\n }, !0;\n }\n return !0;\n }\n const n = this.engine.hitTestArea(t.x, t.y);\n return n ? (this.emit(\"area:select\", { areaId: n }), !1) : (this.emit(\"area:select\", { areaId: null }), !1);\n }\n processPointerMove(t) {\n if (this.interactionState.mode === \"dragging\") {\n const { areaId: e, startOffset: i, startMousePos: s } = this.interactionState, n = t.x - s.x, o = t.y - s.y, a = {\n x: i.x + n,\n y: i.y + o\n }, r = this.engine.getAreaLocation(e);\n if (r) {\n const l = r.width / 2 - 10, d = r.height / 2 - 10;\n a.x = Math.max(-l, Math.min(l, a.x)), a.y = Math.max(-d, Math.min(d, a.y));\n }\n this.emit(\"content:drag\", { areaId: e, offset: a });\n return;\n }\n if (this.interactionState.mode === \"scaling\") {\n const { areaId: e, startScale: i, startMousePos: s, pivotPoint: n } = this.interactionState, o = Math.sqrt(\n Math.pow(s.x - n.x, 2) + Math.pow(s.y - n.y, 2)\n ), a = Math.sqrt(\n Math.pow(t.x - n.x, 2) + Math.pow(t.y - n.y, 2)\n );\n if (o > 0) {\n const r = a / o, l = Math.max(0.1, Math.min(5, i * r));\n this.emit(\"content:scale\", { areaId: e, scale: l });\n }\n return;\n }\n if (this.interactionState.mode === \"rotating\") {\n const { areaId: e, startRotation: i, centerPoint: s, startAngle: n } = this.interactionState, o = Math.atan2(t.y - s.y, t.x - s.x) * (180 / Math.PI);\n let a = i + (o - n);\n a = a % 360, a < 0 && (a += 360);\n const r = [0, 90, 180, 270, 360];\n for (const l of r)\n if (Math.abs(a - l) < 5) {\n a = l === 360 ? 0 : l;\n break;\n }\n this.emit(\"content:rotate\", { areaId: e, rotation: a });\n return;\n }\n this.updateCursor(t);\n }\n processPointerUp() {\n this.interactionState.mode !== \"idle\" && (this.interactionState = { mode: \"idle\" });\n }\n updateCursor(t) {\n const e = this.getSelectedAreaId();\n let i = \"default\";\n if (e) {\n const s = this.engine.hitTestHandle(t.x, t.y, e);\n s ? i = s === \"rotate\" ? \"crosshair\" : s === \"nw\" || s === \"se\" ? \"nwse-resize\" : \"nesw-resize\" : this.engine.hitTestContent(t.x, t.y) === e && (i = this.engine.isPositioningAllowed(e) ? \"move\" : \"pointer\");\n } else\n this.engine.hitTestContent(t.x, t.y) && (i = \"pointer\");\n this.emit(\"cursor\", { cursor: i });\n }\n setSelectedArea(t) {\n this.engine.setSelectedArea(t);\n }\n destroy() {\n this.canvas.removeEventListener(\"mousedown\", this.boundMouseDown), this.canvas.removeEventListener(\"mousemove\", this.boundMouseMove), this.canvas.removeEventListener(\"mouseup\", this.boundMouseUp), this.canvas.removeEventListener(\"mouseleave\", this.boundMouseLeave), this.canvas.removeEventListener(\"contextmenu\", this.boundContextMenu), this.canvas.removeEventListener(\"dblclick\", this.boundDoubleClick), this.canvas.removeEventListener(\"touchstart\", this.boundTouchStart), this.canvas.removeEventListener(\"touchmove\", this.boundTouchMove), this.canvas.removeEventListener(\"touchend\", this.boundTouchEnd), this.gestureHandler.reset(), this.clear();\n }\n}\nclass $ {\n constructor(t = \"/api\") {\n this.baseUrl = t;\n }\n async getTemplate(t) {\n try {\n const e = await fetch(`${this.baseUrl}/templates/${t}`);\n if (!e.ok) {\n let s = `Failed to load template (${e.status} ${e.statusText}): ${t}\n\n`;\n throw e.status === 404 ? s += \"Template not found.\" : e.status === 403 ? s += \"Access forbidden.\" : e.status >= 500 && (s += \"Server error.\"), new Error(s);\n }\n return (await e.json()).templateJson;\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(`Network error loading template: ${t}`) : e;\n }\n }\n async getProduct(t) {\n try {\n const e = await fetch(`${this.baseUrl}/products/${t}`);\n if (!e.ok) {\n let i = `Failed to load product (${e.status} ${e.statusText}): ${t}\n\n`;\n throw e.status === 404 ? i += \"Product not found.\" : e.status === 403 ? i += \"Access forbidden.\" : e.status >= 500 && (i += \"Server error.\"), new Error(i);\n }\n return e.json();\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(`Network error loading product: ${t}`) : e;\n }\n }\n async finalizeDesign(t, e) {\n try {\n const i = await fetch(`${this.baseUrl}/finalize`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n shopId: t,\n templateId: e.templateId,\n designJson: e\n })\n });\n if (!i.ok) {\n let s = `Failed to finalize design (${i.status} ${i.statusText})\n\n`;\n if (i.status === 400) {\n const n = await i.json().catch(() => ({}));\n s += n.error || \"Invalid design data.\";\n } else i.status === 429 ? s += \"Rate limit exceeded.\" : i.status >= 500 && (s += \"Server error.\");\n throw new Error(s);\n }\n return i.json();\n } catch (i) {\n throw i instanceof Error && i.message.includes(\"Failed to fetch\") ? new Error(\"Network error finalizing design\") : i;\n }\n }\n async finalizeMultiView(t) {\n try {\n const e = t.designs.map((s) => ({\n templateId: s.templateId,\n viewName: s.viewName,\n areaContents: s.contents.map(([n, o]) => {\n const a = { areaId: n, isModified: !0 };\n return o.type === \"text\" ? a.text = {\n content: o.text,\n font: o.font,\n size: o.size,\n color: o.color,\n align: o.align,\n position: { x: o.offset?.x ?? 0, y: o.offset?.y ?? 0 }\n } : o.type === \"image\" && (a.image = {\n assetId: o.assetId || \"inline\",\n assetUrl: o.assetUrl || \"\",\n rotation: o.rotation ?? 0,\n scale: o.scale ?? 1,\n position: { x: o.offset?.x ?? 0, y: o.offset?.y ?? 0 },\n // Only send dataUrl if the image wasn't pre-uploaded\n ...o.assetId ? {} : { dataUrl: o.dataUrl }\n }), a;\n })\n })), i = await fetch(`${this.baseUrl}/finalize`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n productId: t.productId,\n designs: e,\n cartContext: t.cartContext,\n customerId: t.customerId,\n customerEmail: t.customerEmail,\n sessionId: t.sessionId\n })\n });\n if (!i.ok) {\n let s = `Failed to finalize multi-view design (${i.status} ${i.statusText})\n\n`;\n if (i.status === 400) {\n const n = await i.json().catch(() => ({}));\n s += n.error || \"Invalid design data.\";\n } else i.status === 429 ? s += \"Rate limit exceeded.\" : i.status >= 500 && (s += \"Server error.\");\n throw new Error(s);\n }\n return i.json();\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(\"Network error finalizing multi-view design\") : e;\n }\n }\n async getDesignStatus(t) {\n try {\n const e = await fetch(`${this.baseUrl}/designs/${t}/status`);\n if (!e.ok)\n throw new Error(`Failed to check design status (${e.status})`);\n return e.json();\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(\"Network error checking design status\") : e;\n }\n }\n async pollMultiViewStatus(t) {\n try {\n const e = await fetch(\n `${this.baseUrl}/finalize-status?designIds=${t.join(\",\")}`\n );\n if (!e.ok)\n throw new Error(`Failed to check multi-view design status (${e.status})`);\n return e.json();\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(\"Network error checking multi-view design status\") : e;\n }\n }\n async uploadAsset(t, e) {\n try {\n const i = new FormData();\n i.append(\"shopId\", e), i.append(\"file\", t);\n const s = await fetch(`${this.baseUrl}/assets/upload`, {\n method: \"POST\",\n body: i\n });\n if (!s.ok) {\n let n = `Failed to upload asset (${s.status} ${s.statusText})\n\n`;\n if (s.status === 400) {\n const o = await s.json().catch(() => ({}));\n n += o.error || \"Invalid file.\";\n } else s.status === 413 ? n += \"File too large (max 15MB).\" : s.status >= 500 && (n += \"Server error.\");\n throw new Error(n);\n }\n return s.json();\n } catch (i) {\n throw i instanceof Error && i.message.includes(\"Failed to fetch\") ? new Error(\"Network error uploading asset\") : i;\n }\n }\n async getStorageUsage(t) {\n try {\n const e = await fetch(`${this.baseUrl}/assets/usage?shopId=${encodeURIComponent(t)}`);\n if (!e.ok)\n throw new Error(`Failed to fetch storage usage (${e.status})`);\n return e.json();\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(\"Network error fetching storage usage\") : e;\n }\n }\n}\nfunction h(f, t, ...e) {\n const i = document.createElement(f);\n return t && Object.entries(t).forEach(([s, n]) => {\n s === \"class\" ? i.className = n : s in i ? i[s] = n : i.setAttribute(s, String(n));\n }), e.forEach((s) => {\n typeof s == \"string\" ? i.appendChild(document.createTextNode(s)) : i.appendChild(s);\n }), i;\n}\nfunction q(f, t) {\n let e = null, i = null;\n const s = (...n) => {\n i = n, e && clearTimeout(e), e = setTimeout(() => {\n i && f(...i), e = null, i = null;\n }, t);\n };\n return s.flush = () => {\n e && (clearTimeout(e), e = null), i && (f(...i), i = null);\n }, s.cancel = () => {\n e && (clearTimeout(e), e = null), i = null;\n }, s;\n}\nclass Z extends S {\n constructor() {\n super(), this.saveEnabled = !0, this.percentLabel = h(\"span\", { class: \"zoom-percent\" }, \"100%\");\n const t = h(\"button\", {\n class: \"zoom-btn\",\n title: \"Zoom out\"\n }, \"−\");\n t.addEventListener(\"click\", () => this.emit(\"zoom-out\", void 0));\n const e = h(\"button\", {\n class: \"zoom-btn\",\n title: \"Fit to view\"\n }, \"Fit\");\n e.addEventListener(\"click\", () => this.emit(\"zoom-fit\", void 0));\n const i = h(\"button\", {\n class: \"zoom-btn\",\n title: \"Zoom in\"\n }, \"+\");\n i.addEventListener(\"click\", () => this.emit(\"zoom-in\", void 0)), this.viewSelect = document.createElement(\"select\"), this.viewSelect.className = \"view-select\", this.viewSelect.title = \"Switch view\", this.viewSelect.style.display = \"none\", this.viewSelect.addEventListener(\"change\", () => {\n this.emit(\"view-change\", { viewName: this.viewSelect.value });\n }), this.element = h(\"div\", { class: \"zoom-toolbar\" }), this.element.appendChild(t), this.element.appendChild(e), this.element.appendChild(i), this.element.appendChild(this.percentLabel), this.element.appendChild(this.viewSelect);\n const s = h(\"div\", { class: \"zoom-toolbar-spacer\" });\n this.element.appendChild(s), this.saveBtn = h(\"button\", {\n class: \"zoom-btn zoom-save-btn\",\n title: \"Save customization\"\n }, \"✓\"), this.saveBtn.style.display = \"none\", this.saveBtn.addEventListener(\"click\", () => this.emit(\"save\", void 0)), this.element.appendChild(this.saveBtn), this.closeBtn = h(\"button\", {\n class: \"zoom-btn zoom-close-btn\",\n title: \"Close editor\"\n }, \"✕\"), this.closeBtn.addEventListener(\"click\", () => this.emit(\"close\", void 0)), this.element.appendChild(this.closeBtn);\n }\n setZoom(t) {\n this.percentLabel.textContent = `${Math.round(t * 100)}%`;\n }\n showSaveButton(t) {\n this.saveEnabled && (this.saveBtn.style.display = t ? \"\" : \"none\");\n }\n setCloseButtonVisible(t) {\n this.closeBtn.style.display = t ? \"\" : \"none\";\n }\n setSaveButtonEnabled(t) {\n this.saveEnabled = t, t || (this.saveBtn.style.display = \"none\");\n }\n setSaveDisabled(t, e) {\n this.saveBtn.disabled = t, e && (this.saveBtn.textContent = e);\n }\n setViews(t) {\n this.viewSelect.innerHTML = \"\";\n for (const e of t) {\n const i = document.createElement(\"option\");\n i.value = e.viewName, i.textContent = e.viewName, this.viewSelect.appendChild(i);\n }\n this.viewSelect.style.display = t.length > 1 ? \"\" : \"none\";\n }\n setActiveView(t) {\n this.viewSelect.value = t;\n }\n getElement() {\n return this.element;\n }\n}\nconst W = [\n { label: \"Inter\", value: \"Inter\" },\n { label: \"Arial\", value: \"Arial\" },\n { label: \"Georgia\", value: \"Georgia\" },\n { label: \"Times New Roman\", value: \"Times New Roman\" },\n { label: \"Courier New\", value: \"Courier New\" }\n], Y = [\n { label: \"L\", value: \"left\" },\n { label: \"C\", value: \"center\" },\n { label: \"R\", value: \"right\" }\n], R = [\"image/png\", \"image/jpeg\", \"image/webp\", \"image/svg+xml\"], X = 15 * 1024 * 1024;\nclass D extends S {\n constructor(t) {\n super(), this.mode = \"text\", this.isSelected = !1, this.isUploading = !1, this.textInputEl = null, this.fontSelectEl = null, this.sizeInputEl = null, this.colorInputEl = null, this.alignGroupEl = null, this.area = t;\n const e = E(t), i = A(t);\n this.mode = i && !e ? \"image\" : \"text\", this.element = h(\"div\", { class: \"area-card\" }), this.element.addEventListener(\"click\", (r) => {\n r.target.tagName === \"INPUT\" || r.target.tagName === \"SELECT\" || r.target.tagName === \"BUTTON\" || this.emit(\"select\", { areaId: t.id });\n });\n const s = h(\"div\", { class: \"area-card-header\" }), n = h(\"div\", { class: \"area-card-name-row\" }), o = h(\"span\", { class: \"area-card-name\" }, t.name);\n if (n.appendChild(o), t.required) {\n const r = h(\"span\", { class: \"area-card-badge\" }, \"Required\");\n n.appendChild(r);\n }\n s.appendChild(n);\n const a = h(\"button\", {\n class: \"area-card-reset-btn\",\n title: \"Reset content\"\n }, \"Reset\");\n if (a.addEventListener(\"click\", (r) => {\n r.stopPropagation(), this.emit(\"clear\", { areaId: t.id });\n }), s.appendChild(a), this.element.appendChild(s), e && i) {\n const r = h(\"div\", { class: \"area-card-mode-switcher\" }), l = h(\"button\", {\n class: \"mode-btn mode-btn-active\"\n }, \"Text\");\n l.dataset.mode = \"text\";\n const d = h(\"button\", { class: \"mode-btn\" }, \"Image\");\n d.dataset.mode = \"image\", l.addEventListener(\"click\", (c) => {\n c.stopPropagation(), this.setMode(\"text\"), l.classList.add(\"mode-btn-active\"), d.classList.remove(\"mode-btn-active\"), this.currentContent?.type === \"image\" && this.emit(\"clear\", { areaId: t.id });\n }), d.addEventListener(\"click\", (c) => {\n c.stopPropagation(), this.setMode(\"image\"), d.classList.add(\"mode-btn-active\"), l.classList.remove(\"mode-btn-active\"), this.currentContent?.type === \"text\" && this.emit(\"clear\", { areaId: t.id });\n }), r.appendChild(l), r.appendChild(d), this.element.appendChild(r);\n }\n this.contentContainer = h(\"div\", { class: \"area-card-content\" }), this.element.appendChild(this.contentContainer), this.transformContainer = h(\"div\", { class: \"area-card-transforms\" }), this.element.appendChild(this.transformContainer), this.renderContent();\n }\n setMode(t) {\n this.mode = t, this.renderContent();\n }\n setContent(t) {\n const e = this.currentContent?.type;\n this.currentContent = t, t?.type === \"image\" ? this.mode = \"image\" : e === \"image\" && (this.mode = E(this.area) ? \"text\" : \"image\"), this.element.querySelectorAll(\".mode-btn\").forEach((n) => {\n const o = n;\n o.classList.toggle(\"mode-btn-active\", o.dataset.mode === this.mode);\n }), t?.type !== e || t?.type === \"image\" || t === void 0 ? this.renderContent() : t?.type === \"text\" && this.updateTextValues(t), this.renderTransforms();\n }\n setSelected(t) {\n this.isSelected = t, this.element.classList.toggle(\"area-card-selected\", t), this.renderTransforms();\n }\n updateTextValues(t) {\n this.textInputEl && this.textInputEl.value !== t.text && (this.textInputEl.value = t.text), this.fontSelectEl && this.fontSelectEl.value !== t.font && (this.fontSelectEl.value = t.font), this.sizeInputEl && this.sizeInputEl.value !== String(t.size) && (this.sizeInputEl.value = String(t.size)), this.colorInputEl && this.colorInputEl.value !== t.color && (this.colorInputEl.value = t.color), this.alignGroupEl && this.alignGroupEl.querySelectorAll(\".align-btn\").forEach((e) => {\n const i = e, s = i.title === \"Left\" ? \"left\" : i.title === \"Center\" ? \"center\" : \"right\";\n i.classList.toggle(\"align-btn-active\", s === t.align);\n });\n }\n renderContent() {\n this.contentContainer.innerHTML = \"\", this.textInputEl = null, this.fontSelectEl = null, this.sizeInputEl = null, this.colorInputEl = null, this.alignGroupEl = null;\n const t = E(this.area), e = A(this.area), i = !e || t && e && this.mode === \"text\", s = !t || t && e && this.mode === \"image\";\n t && i && this.renderTextControls(), e && s && this.renderImageControls(), this.applyUploadSpinner();\n }\n renderTextControls() {\n const t = this.currentContent, e = t?.type === \"text\" ? t : z(this.area), i = h(\"input\", {\n class: \"area-input-text\",\n type: \"text\",\n placeholder: this.area.placeholder || \"Enter text...\"\n });\n i.value = e.text, this.area.textOptions?.maxLength && (i.maxLength = this.area.textOptions.maxLength), i.addEventListener(\"input\", () => {\n this.emit(\"text:change\", { areaId: this.area.id, updates: { text: i.value } });\n }), this.contentContainer.appendChild(i), this.textInputEl = i;\n const s = h(\"div\", { class: \"area-input-row\" }), n = h(\"select\", { class: \"area-input-font\" });\n for (const d of W) {\n const c = h(\"option\");\n c.value = d.value, c.textContent = d.label, d.value === e.font && (c.selected = !0), n.appendChild(c);\n }\n n.addEventListener(\"change\", () => {\n this.emit(\"text:change\", { areaId: this.area.id, updates: { font: n.value } });\n }), s.appendChild(n), this.fontSelectEl = n;\n const o = h(\"input\", {\n class: \"area-input-size\",\n type: \"number\"\n });\n o.value = String(e.size), o.min = String(this.area.textOptions?.minSize || 8), o.max = String(this.area.textOptions?.maxSize || 200), o.addEventListener(\"change\", () => {\n this.emit(\"text:change\", {\n areaId: this.area.id,\n updates: { size: parseInt(o.value, 10) || 24 }\n });\n }), s.appendChild(o), this.sizeInputEl = o, this.contentContainer.appendChild(s);\n const a = h(\"div\", { class: \"area-input-row\" }), r = h(\"div\", { class: \"area-input-align\" });\n for (const d of Y) {\n const c = h(\"button\", {\n class: `align-btn${e.align === d.value ? \" align-btn-active\" : \"\"}`,\n title: d.label === \"L\" ? \"Left\" : d.label === \"C\" ? \"Center\" : \"Right\"\n }, d.label);\n c.addEventListener(\"click\", (p) => {\n p.stopPropagation(), this.emit(\"text:change\", { areaId: this.area.id, updates: { align: d.value } }), r.querySelectorAll(\".align-btn\").forEach((u) => u.classList.remove(\"align-btn-active\")), c.classList.add(\"align-btn-active\");\n }), r.appendChild(c);\n }\n a.appendChild(r), this.alignGroupEl = r;\n const l = h(\"input\", {\n class: \"area-input-color\",\n type: \"color\"\n });\n l.value = e.color, l.addEventListener(\"input\", () => {\n this.emit(\"text:change\", { areaId: this.area.id, updates: { color: l.value } });\n }), a.appendChild(l), this.colorInputEl = l, this.contentContainer.appendChild(a);\n }\n renderImageControls() {\n const t = this.currentContent;\n if (t?.type === \"image\") {\n const e = h(\"div\", { class: \"area-image-preview\" }), i = h(\"img\", { class: \"area-image-thumb\" });\n i.src = t.dataUrl, i.alt = t.filename || \"Uploaded image\", e.appendChild(i);\n const s = h(\"div\", { class: \"area-image-info\" });\n s.appendChild(h(\"span\", { class: \"area-image-name\" }, t.filename || \"Image\"));\n const n = h(\"button\", { class: \"area-image-remove-btn\" }, \"Remove\");\n n.addEventListener(\"click\", (o) => {\n o.stopPropagation(), this.emit(\"clear\", { areaId: this.area.id });\n }), s.appendChild(n), e.appendChild(s), this.contentContainer.appendChild(e);\n } else {\n const e = h(\"button\", { class: \"area-upload-btn\" }, \"Upload Image\"), i = h(\"input\", { type: \"file\" });\n i.accept = R.join(\",\"), i.style.display = \"none\";\n const s = h(\"div\", { class: \"area-validation-error\" });\n s.style.display = \"none\", i.addEventListener(\"change\", () => {\n const n = i.files?.[0];\n if (!n) return;\n if (!R.includes(n.type)) {\n const a = \"Only PNG, JPEG, WebP, and SVG images are accepted\";\n s.textContent = a, s.style.display = \"block\", this.emit(\"validation:error\", { areaId: this.area.id, message: a }), i.value = \"\";\n return;\n }\n if (n.size > X) {\n const a = \"File must be smaller than 15MB\";\n s.textContent = a, s.style.display = \"block\", this.emit(\"validation:error\", { areaId: this.area.id, message: a }), i.value = \"\";\n return;\n }\n s.style.display = \"none\";\n const o = new FileReader();\n o.onload = () => {\n const a = o.result;\n this.emit(\"image:change\", { areaId: this.area.id, dataUrl: a, filename: n.name });\n }, o.readAsDataURL(n), i.value = \"\";\n }), e.addEventListener(\"click\", (n) => {\n n.stopPropagation(), i.click();\n }), this.contentContainer.appendChild(e), this.contentContainer.appendChild(i), this.contentContainer.appendChild(s);\n }\n }\n renderTransforms() {\n this.transformContainer.innerHTML = \"\";\n const t = this.currentContent;\n if (!this.isSelected || !t) return;\n const e = t.type === \"text\" ? this.area.textOptions?.allowPositioning : this.area.imageOptions?.allowPositioning, i = t.type === \"image\" && this.area.imageOptions?.allowScaling, s = t.type === \"image\" && this.area.imageOptions?.allowRotation;\n if (!e && !i && !s) return;\n const n = h(\"div\", { class: \"area-card-divider\" });\n this.transformContainer.appendChild(n);\n const o = h(\"div\", { class: \"transform-header\" });\n o.appendChild(h(\"span\", { class: \"transform-title\" }, \"Transform\"));\n const a = h(\"button\", { class: \"transform-reset-btn\" }, \"Reset\");\n a.addEventListener(\"click\", (l) => {\n l.stopPropagation(), e && this.emit(\"offset:change\", { areaId: this.area.id, offset: { x: 0, y: 0 } }), i && this.emit(\"scale:change\", { areaId: this.area.id, scale: 1 }), s && this.emit(\"rotation:change\", { areaId: this.area.id, rotation: 0 });\n }), o.appendChild(a), this.transformContainer.appendChild(o);\n const r = t.offset ?? { x: 0, y: 0 };\n if (e) {\n const l = h(\"div\", { class: \"area-input-row\" }), d = h(\"label\", { class: \"transform-label\" }, \"X\"), c = h(\"input\", { class: \"transform-input\", type: \"number\" });\n c.value = String(Math.round(r.x)), c.addEventListener(\"change\", () => {\n this.emit(\"offset:change\", {\n areaId: this.area.id,\n offset: { ...r, x: parseInt(c.value, 10) || 0 }\n });\n });\n const p = h(\"label\", { class: \"transform-label\" }, \"Y\"), u = h(\"input\", { class: \"transform-input\", type: \"number\" });\n u.value = String(Math.round(r.y)), u.addEventListener(\"change\", () => {\n this.emit(\"offset:change\", {\n areaId: this.area.id,\n offset: { ...r, y: parseInt(u.value, 10) || 0 }\n });\n }), l.appendChild(d), l.appendChild(c), l.appendChild(p), l.appendChild(u), this.transformContainer.appendChild(l);\n }\n if (i && t.type === \"image\") {\n const l = t.scale ?? 1, d = h(\"div\", { class: \"area-input-row transform-slider-row\" }), c = h(\"label\", { class: \"transform-label\" }, `Scale: ${Math.round(l * 100)}%`), p = h(\"input\", { class: \"transform-slider\", type: \"range\" });\n p.min = \"10\", p.max = \"500\", p.step = \"5\", p.value = String(Math.round(l * 100)), p.addEventListener(\"input\", () => {\n const u = parseInt(p.value, 10) / 100;\n c.textContent = `Scale: ${Math.round(u * 100)}%`, this.emit(\"scale:change\", { areaId: this.area.id, scale: u });\n }), d.appendChild(c), d.appendChild(p), this.transformContainer.appendChild(d);\n }\n if (s && t.type === \"image\") {\n const l = t.rotation ?? 0, d = h(\"div\", { class: \"area-input-row transform-slider-row\" }), c = h(\"label\", { class: \"transform-label\" }, `Rotation: ${Math.round(l)}°`), p = h(\"input\", { class: \"transform-slider\", type: \"range\" });\n p.min = \"0\", p.max = \"360\", p.step = \"1\", p.value = String(Math.round(l)), p.addEventListener(\"input\", () => {\n const u = parseInt(p.value, 10);\n c.textContent = `Rotation: ${u}°`, this.emit(\"rotation:change\", { areaId: this.area.id, rotation: u });\n }), d.appendChild(c), d.appendChild(p), this.transformContainer.appendChild(d);\n }\n }\n setUploading(t) {\n this.isUploading = t, this.applyUploadSpinner();\n }\n applyUploadSpinner() {\n const t = this.contentContainer.querySelector(\".area-image-preview\");\n if (!t) return;\n const e = t.querySelector(\".area-upload-spinner-overlay\");\n if (this.isUploading && !e) {\n const i = h(\"div\", { class: \"area-upload-spinner-overlay\" });\n i.appendChild(h(\"div\", { class: \"area-upload-spinner\" })), t.appendChild(i);\n } else !this.isUploading && e && e.remove();\n }\n getElement() {\n return this.element;\n }\n}\nclass j extends S {\n constructor(t) {\n super(), this.cards = /* @__PURE__ */ new Map(), this.isMobile = !1, this.boundEscapeHandler = (s) => {\n s.key === \"Escape\" && this.emit(\"dismiss\", void 0);\n }, this.backdrop = h(\"div\", { class: \"area-panel-backdrop\" }), this.backdrop.addEventListener(\"click\", () => {\n this.emit(\"dismiss\", void 0);\n }), this.element = h(\"div\", { class: \"area-panel\" });\n const e = h(\"div\", { class: \"area-panel-header\" });\n e.appendChild(h(\"span\", { class: \"area-panel-title\" }, \"Customize\"));\n const i = h(\"button\", { class: \"area-panel-close-btn\", title: \"Close\" }, \"×\");\n if (i.addEventListener(\"click\", () => {\n this.emit(\"dismiss\", void 0);\n }), e.appendChild(i), this.element.appendChild(e), this.panelContent = h(\"div\", { class: \"area-panel-content\" }), t.length === 0) {\n const s = h(\"p\", { class: \"area-panel-empty\" }, \"No customization areas defined.\");\n this.panelContent.appendChild(s);\n } else\n for (const s of t) {\n const n = new D(s);\n this.cards.set(s.id, n), n.on(\"text:change\", (o) => this.emit(\"text:change\", o)), n.on(\"image:change\", (o) => this.emit(\"image:change\", o)), n.on(\"clear\", (o) => this.emit(\"clear\", o)), n.on(\"select\", (o) => this.emit(\"select\", o)), n.on(\"offset:change\", (o) => this.emit(\"offset:change\", o)), n.on(\"scale:change\", (o) => this.emit(\"scale:change\", o)), n.on(\"rotation:change\", (o) => this.emit(\"rotation:change\", o)), n.on(\"validation:error\", (o) => this.emit(\"validation:error\", o)), this.panelContent.appendChild(n.getElement());\n }\n this.element.appendChild(this.panelContent);\n }\n setAreas(t) {\n if (this.cards.clear(), this.panelContent.innerHTML = \"\", t.length === 0) {\n const e = h(\"p\", { class: \"area-panel-empty\" }, \"No customization areas defined.\");\n this.panelContent.appendChild(e);\n } else\n for (const e of t) {\n const i = new D(e);\n this.cards.set(e.id, i), i.on(\"text:change\", (s) => this.emit(\"text:change\", s)), i.on(\"image:change\", (s) => this.emit(\"image:change\", s)), i.on(\"clear\", (s) => this.emit(\"clear\", s)), i.on(\"select\", (s) => this.emit(\"select\", s)), i.on(\"offset:change\", (s) => this.emit(\"offset:change\", s)), i.on(\"scale:change\", (s) => this.emit(\"scale:change\", s)), i.on(\"rotation:change\", (s) => this.emit(\"rotation:change\", s)), i.on(\"validation:error\", (s) => this.emit(\"validation:error\", s)), this.panelContent.appendChild(i.getElement());\n }\n }\n setContents(t) {\n for (const [e, i] of this.cards)\n i.setContent(t.get(e));\n }\n setSelectedArea(t) {\n for (const [e, i] of this.cards) {\n const s = e === t;\n i.setSelected(s), i.getElement().style.display = s ? \"\" : \"none\";\n }\n t ? (this.element.classList.add(\"area-panel-visible\"), this.isMobile && this.backdrop.classList.add(\"area-panel-backdrop-visible\"), document.addEventListener(\"keydown\", this.boundEscapeHandler)) : (this.element.classList.remove(\"area-panel-visible\"), this.isMobile && this.backdrop.classList.remove(\"area-panel-backdrop-visible\"), document.removeEventListener(\"keydown\", this.boundEscapeHandler));\n }\n setUploading(t, e) {\n const i = this.cards.get(t);\n i && i.setUploading(e);\n }\n setMobile(t) {\n this.isMobile = t, this.element.classList.toggle(\"area-panel-mobile\", t), t || (this.element.classList.remove(\"area-panel-visible\"), this.backdrop.classList.remove(\"area-panel-backdrop-visible\"));\n }\n getElement() {\n return this.element;\n }\n getBackdrop() {\n return this.backdrop;\n }\n}\nclass G {\n constructor(t = window) {\n this.target = t, this.commands = [], this.isEnabled = !0, this.handleKeyDown = (e) => {\n if (!this.isEnabled) return;\n const i = e.target;\n if (!(i.tagName === \"INPUT\" || i.tagName === \"TEXTAREA\" || i.isContentEditable)) {\n for (const s of this.commands)\n if (this.matchesCommand(e, s)) {\n e.preventDefault(), s.handler(e);\n break;\n }\n }\n }, this.target.addEventListener(\"keydown\", this.handleKeyDown);\n }\n /**\n * Register a keyboard command\n */\n register(t) {\n return this.commands.push(t), () => {\n const e = this.commands.indexOf(t);\n e !== -1 && this.commands.splice(e, 1);\n };\n }\n /**\n * Enable keyboard handling\n */\n enable() {\n this.isEnabled = !0;\n }\n /**\n * Disable keyboard handling\n */\n disable() {\n this.isEnabled = !1;\n }\n /**\n * Check if keyboard handling is enabled\n */\n isActive() {\n return this.isEnabled;\n }\n /**\n * Check if event matches a command\n */\n matchesCommand(t, e) {\n return !(t.key.toLowerCase() !== e.key.toLowerCase() || e.ctrl !== void 0 && e.ctrl !== t.ctrlKey || e.shift !== void 0 && e.shift !== t.shiftKey || e.alt !== void 0 && e.alt !== t.altKey || e.meta !== void 0 && e.meta !== t.metaKey);\n }\n /**\n * Cleanup\n */\n destroy() {\n this.target.removeEventListener(\"keydown\", this.handleKeyDown), this.commands = [];\n }\n}\nfunction J() {\n return /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n}\nfunction K() {\n return J() ? \"meta\" : \"ctrl\";\n}\nfunction _(f, t, e, i) {\n const s = f / e, n = t / i;\n return Math.min(s, n);\n}\nfunction Q(f, t, e = 8, i = 10, s = 300) {\n const n = _(f, t, e, i), o = n >= s;\n return {\n actualDPI: Math.round(n),\n targetDPI: s,\n width: f,\n height: t,\n passed: o,\n warning: o ? void 0 : `Image resolution is ${Math.round(n)} DPI at 100% scale. For best print quality, use images with at least ${s} DPI. This may result in pixelated or blurry prints.`\n };\n}\nconst P = ':host{--editor-bg: #f3f4f6;--editor-surface: #ffffff;--editor-border: #e5e7eb;--editor-text: #111827;--editor-text-muted: #6b7280;--editor-primary: #3b82f6;--editor-primary-hover: #2563eb;--editor-danger: #ef4444;--editor-radius: 8px;--editor-radius-sm: 4px;--editor-font: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;--editor-panel-width: 280px;display:block;width:100%;height:100%;font-family:var(--editor-font);font-size:13px;color:var(--editor-text);line-height:1.4}:host([theme=\"dark\"]){--editor-bg: #1f2937;--editor-surface: #374151;--editor-border: #4b5563;--editor-text: #f9fafb;--editor-text-muted: #9ca3af}.editor-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative;overflow:hidden;background:var(--editor-bg)}.layout-desktop .editor-main{display:flex;flex:1;min-height:0}.layout-desktop .canvas-area{flex:1;min-width:0;position:relative;display:flex;flex-direction:column}.layout-desktop .area-panel{width:var(--editor-panel-width);border-left:1px solid var(--editor-border);background:var(--editor-surface);display:none;flex-direction:column;overflow:hidden}.layout-desktop .area-panel.area-panel-visible{display:flex}.layout-mobile .editor-main{display:flex;flex-direction:column;flex:1;min-height:0}.layout-mobile .canvas-area{flex:1;position:relative;display:flex;flex-direction:column;min-height:0}.layout-mobile .area-panel{position:absolute;bottom:0;left:0;right:0;max-height:50%;background:var(--editor-surface);border-top:1px solid var(--editor-border);border-radius:var(--editor-radius) var(--editor-radius) 0 0;box-shadow:0 -4px 20px #00000026;transform:translateY(100%);transition:transform .25s ease-out;z-index:20;display:flex;flex-direction:column;overflow:hidden}.layout-mobile .area-panel.area-panel-visible{transform:translateY(0)}.area-panel-backdrop{display:none}.layout-mobile .area-panel-backdrop{display:block;position:absolute;inset:0;background:#0000004d;z-index:15;opacity:0;pointer-events:none;transition:opacity .25s ease-out}.layout-mobile .area-panel-backdrop.area-panel-backdrop-visible{opacity:1;pointer-events:auto}.zoom-toolbar{display:flex;align-items:center;gap:4px;padding:8px 12px;background:var(--editor-surface);border-bottom:1px solid var(--editor-border)}.zoom-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:var(--editor-surface);color:var(--editor-text);cursor:pointer;font-size:14px;font-family:var(--editor-font);transition:background .15s;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.zoom-btn:hover{background:var(--editor-bg)}.zoom-btn:active{background:var(--editor-border)}.zoom-percent{margin-left:8px;font-size:12px;color:var(--editor-text-muted);min-width:40px}.view-select{margin-left:8px;padding:4px 8px;height:32px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:var(--editor-surface);color:var(--editor-text);font-family:var(--editor-font);font-size:12px;cursor:pointer;-webkit-tap-highlight-color:transparent}.view-select:hover{background:var(--editor-bg)}.view-select:focus{outline:2px solid var(--editor-primary);outline-offset:-1px}.zoom-toolbar-spacer{flex:1}.zoom-close-btn{width:auto;padding:0 12px;font-size:13px;gap:4px}.zoom-save-btn{width:auto;padding:0 16px;margin-left:8px;font-size:13px;font-weight:600;background:var(--editor-primary);color:#fff;border-color:var(--editor-primary)}.zoom-save-btn:hover{background:var(--editor-primary-hover)}.zoom-save-btn:disabled{opacity:.5;cursor:not-allowed}.canvas-wrapper{flex:1;position:relative;overflow:hidden;min-height:200px}.editor-canvas{position:absolute;top:0;left:0}.area-panel-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--editor-border);flex-shrink:0}.area-panel-title{font-weight:600;font-size:14px}.area-panel-close-btn{width:28px;height:28px;border:none;background:none;color:var(--editor-text-muted);cursor:pointer;font-size:18px;line-height:1;border-radius:var(--editor-radius-sm);display:flex;align-items:center;justify-content:center}.area-panel-close-btn:hover{background:var(--editor-bg);color:var(--editor-text)}.area-panel-content{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px}.area-panel-empty{color:var(--editor-text-muted);font-size:12px;text-align:center;padding:20px 0}.area-card{padding:12px;border:1px solid var(--editor-border);border-radius:var(--editor-radius);background:var(--editor-surface);cursor:pointer;transition:border-color .15s}.area-card:hover{border-color:var(--editor-primary)}.area-card-selected{border-color:var(--editor-primary);box-shadow:0 0 0 1px var(--editor-primary)}.area-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.area-card-name-row{display:flex;align-items:center;gap:6px}.area-card-name{font-weight:600;font-size:13px}.area-card-badge{display:inline-block;padding:1px 6px;font-size:10px;font-weight:500;background:#fef3c7;color:#92400e;border-radius:10px}.area-card-reset-btn{padding:2px 8px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:none;color:var(--editor-text-muted);cursor:pointer;font-size:11px;font-family:var(--editor-font)}.area-card-reset-btn:hover{background:var(--editor-bg);color:var(--editor-danger);border-color:var(--editor-danger)}.area-card-mode-switcher{display:flex;gap:4px;margin-bottom:8px}.mode-btn{flex:1;padding:4px 8px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:var(--editor-surface);color:var(--editor-text);cursor:pointer;font-size:12px;font-family:var(--editor-font);transition:all .15s}.mode-btn-active{background:var(--editor-primary);color:#fff;border-color:var(--editor-primary)}.area-input-text{width:100%;padding:6px 8px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);font-family:var(--editor-font);font-size:13px;color:var(--editor-text);background:var(--editor-surface);box-sizing:border-box;margin-bottom:6px}.area-input-text:focus{outline:none;border-color:var(--editor-primary);box-shadow:0 0 0 1px var(--editor-primary)}.area-input-row{display:flex;gap:6px;align-items:center;margin-bottom:6px}.area-input-font{flex:1;padding:4px 6px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);font-family:var(--editor-font);font-size:12px;color:var(--editor-text);background:var(--editor-surface);min-width:0}.area-input-size{width:56px;padding:4px 6px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);font-family:var(--editor-font);font-size:12px;color:var(--editor-text);background:var(--editor-surface)}.area-input-align{display:flex;gap:2px}.align-btn{width:28px;height:28px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:var(--editor-surface);color:var(--editor-text);cursor:pointer;font-size:12px;font-weight:600;font-family:var(--editor-font)}.align-btn-active{background:var(--editor-primary);color:#fff;border-color:var(--editor-primary)}.area-input-color{width:32px;height:28px;padding:0;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);cursor:pointer;background:none}.area-upload-btn{width:100%;padding:10px;border:2px dashed var(--editor-border);border-radius:var(--editor-radius);background:var(--editor-bg);color:var(--editor-text-muted);cursor:pointer;font-family:var(--editor-font);font-size:12px;text-align:center;transition:all .15s;min-height:44px}.area-upload-btn:hover{border-color:var(--editor-primary);color:var(--editor-primary)}.area-image-preview{display:flex;gap:8px;align-items:center}.area-image-thumb{width:48px;height:48px;object-fit:cover;border-radius:var(--editor-radius-sm);border:1px solid var(--editor-border)}.area-image-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.area-image-name{font-size:12px;color:var(--editor-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.area-image-remove-btn{padding:2px 8px;border:1px solid var(--editor-danger);border-radius:var(--editor-radius-sm);background:none;color:var(--editor-danger);cursor:pointer;font-size:11px;font-family:var(--editor-font);width:fit-content}.area-image-remove-btn:hover{background:#fef2f2}.area-card-divider{height:1px;background:var(--editor-border);margin:8px 0}.transform-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.transform-title{font-weight:600;font-size:12px}.transform-reset-btn{padding:2px 8px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:none;color:var(--editor-text-muted);cursor:pointer;font-size:11px;font-family:var(--editor-font)}.transform-reset-btn:hover{background:var(--editor-bg)}.transform-label{font-size:11px;color:var(--editor-text-muted);white-space:nowrap}.transform-input{width:60px;padding:3px 6px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);font-family:var(--editor-font);font-size:12px;color:var(--editor-text);background:var(--editor-surface)}.transform-slider-row{flex-direction:column;align-items:stretch}.transform-slider{width:100%;accent-color:var(--editor-primary)}.area-image-preview{position:relative}.area-upload-spinner-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#fff9;border-radius:var(--editor-radius-sm);z-index:1}:host([theme=\"dark\"]) .area-upload-spinner-overlay{background:#37415199}.area-upload-spinner{width:16px;height:16px;border:2px solid var(--editor-border);border-top-color:var(--editor-primary);border-radius:50%;animation:spin .8s linear infinite}.loading-container{display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-height:200px}.loading-spinner{width:32px;height:32px;border:3px solid var(--editor-border);border-top-color:var(--editor-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.error-container{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;min-height:200px;padding:20px;text-align:center}.error-title{font-weight:600;font-size:16px;color:var(--editor-danger);margin-bottom:8px}.error-message{font-size:13px;color:var(--editor-text-muted);max-width:400px;white-space:pre-wrap}:host(:focus){outline:2px solid var(--editor-primary);outline-offset:-2px}input:focus,select:focus,button:focus-visible{outline:2px solid var(--editor-primary);outline-offset:-1px}.context-menu{position:absolute;z-index:100;min-width:160px;background:var(--editor-surface);border:1px solid var(--editor-border);border-radius:var(--editor-radius);box-shadow:0 4px 12px #00000026;padding:4px 0;font-size:13px}.context-menu-header{padding:6px 12px;font-weight:600;font-size:12px;color:var(--editor-text-muted);user-select:none}.context-menu-divider{height:1px;background:var(--editor-border);margin:4px 0}.context-menu-item{padding:6px 12px;cursor:pointer;color:var(--editor-text);user-select:none;transition:background .1s}.context-menu-item:hover{background:var(--editor-bg)}.context-menu-item:active{background:var(--editor-border)}.context-menu-item-disabled{color:var(--editor-text-muted);cursor:default;pointer-events:none}.editor-toast{position:absolute;top:16px;left:50%;transform:translate(-50%);padding:10px 20px;border-radius:var(--editor-radius);font-size:13px;font-family:var(--editor-font);line-height:1.4;z-index:200;max-width:400px;text-align:center;animation:toast-in .25s ease-out,toast-out .25s ease-in forwards;animation-delay:0s,var(--toast-duration, 3.75s);pointer-events:none;box-shadow:0 4px 12px #00000026}.editor-toast-warning{background:#fef3c7;color:#92400e;border:1px solid #f59e0b}.editor-toast-error{background:#fef2f2;color:#991b1b;border:1px solid var(--editor-danger)}.editor-toast-info{background:#eff6ff;color:#1e40af;border:1px solid var(--editor-primary)}@keyframes toast-in{0%{opacity:0;transform:translate(-50%) translateY(-10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@keyframes toast-out{0%{opacity:1;transform:translate(-50%) translateY(0)}to{opacity:0;transform:translate(-50%) translateY(-10px)}}.editor-modal-overlay{position:absolute;inset:0;background:#0006;z-index:300;display:flex;align-items:center;justify-content:center;animation:modal-overlay-in .2s ease-out}@keyframes modal-overlay-in{0%{opacity:0}to{opacity:1}}.editor-modal{background:var(--editor-surface);border-radius:var(--editor-radius);box-shadow:0 8px 32px #0003;max-width:380px;width:calc(100% - 32px);padding:20px;animation:modal-in .2s ease-out}@keyframes modal-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.editor-modal-title{font-weight:600;font-size:15px;margin-bottom:8px;color:var(--editor-text)}.editor-modal-body{font-size:13px;color:var(--editor-text-muted);margin-bottom:16px;line-height:1.5}.editor-modal-actions{display:flex;justify-content:flex-end;gap:8px}.editor-modal-btn{padding:8px 16px;border-radius:var(--editor-radius-sm);font-size:13px;font-family:var(--editor-font);cursor:pointer;border:1px solid var(--editor-border);background:var(--editor-surface);color:var(--editor-text);transition:background .15s}.editor-modal-btn:hover{background:var(--editor-bg)}.editor-modal-btn-primary{background:var(--editor-primary);color:#fff;border-color:var(--editor-primary)}.editor-modal-btn-primary:hover{background:var(--editor-primary-hover)}.area-validation-error{font-size:11px;color:var(--editor-danger);margin-top:4px}@media(pointer:coarse){.zoom-toolbar{padding:6px 8px;gap:2px}.zoom-btn{min-width:44px;min-height:44px}.zoom-percent{display:none}.view-select{max-width:110px;text-overflow:ellipsis;overflow:hidden;min-height:44px;font-size:16px}.zoom-close-btn,.zoom-save-btn{padding:0 8px}.area-input-text,.area-input-font,.area-input-size{min-height:44px;font-size:16px}.align-btn{min-width:44px;min-height:44px}.area-upload-btn{min-height:48px}}', tt = \"2.0.0\", et = 768;\nclass I extends HTMLElement {\n constructor() {\n super(), this.resizeObserver = null, this.pendingUploads = /* @__PURE__ */ new Map(), this.isReady = !1, this.currentTemplate = null, this.loadingTemplateId = null, this.isMobileLayout = !1, this.productViews = [], this.activeViewName = null, this.perViewContents = /* @__PURE__ */ new Map(), this.subscriptions = [], this.renderAbortController = null, this.contentManagerUnsub = null, this.refitRafId = null, this.storageUsage = null, this.storageUsageLastRefresh = 0, this.emitChange = q(() => {\n this.dispatchEvent(\n new CustomEvent(\"change\", {\n detail: { design: this.getDesign() },\n bubbles: !0,\n composed: !0\n })\n );\n }, 300), this.shadow = this.attachShadow({ mode: \"open\" });\n }\n static get observedAttributes() {\n return [\"template-id\", \"product-id\", \"theme\", \"mode\", \"store-id\", \"api-url\", \"show-close-button\", \"show-save-button\"];\n }\n async connectedCallback() {\n try {\n this.hasAttribute(\"tabindex\") || this.setAttribute(\"tabindex\", \"0\"), this.renderLoading(), await this.initialize();\n } catch (t) {\n this.showError(\"Failed to initialize editor\", t);\n }\n }\n disconnectedCallback() {\n this.cleanup();\n }\n attributeChangedCallback(t, e, i) {\n e !== i && (t === \"template-id\" && this.isReady && i && this.loadTemplate(i), t === \"product-id\" && this.isReady && i && this.loadProduct(i), t === \"show-close-button\" && this.zoomToolbar && this.zoomToolbar.setCloseButtonVisible(i !== \"false\"), t === \"show-save-button\" && this.zoomToolbar && this.zoomToolbar.setSaveButtonEnabled(i !== \"false\"));\n }\n // ─── Public API ───\n getDesign() {\n if (!this.currentTemplate) throw new Error(\"No design loaded\");\n return {\n templateId: this.currentTemplate.metadata.id,\n engineVersion: tt,\n contents: this.contentManager.toJSON(),\n userData: {}\n };\n }\n setDesign(t) {\n if (t.templateId !== this.currentTemplate?.metadata.id)\n throw new Error(\"Design template ID does not match current template\");\n this.contentManager.fromJSON(t.contents), this.syncEngineContents(), this.stateManager.setState({\n contents: this.contentManager.toJSON(),\n isDirty: !0\n });\n }\n undo() {\n this.stateManager.undo() && this.syncFromState();\n }\n redo() {\n this.stateManager.redo() && this.syncFromState();\n }\n clear() {\n this.contentManager.reset(), this.syncEngineContents(), this.stateManager.setState({\n contents: this.contentManager.toJSON(),\n selectedAreaId: null,\n isDirty: !1\n }), this.zoomToolbar?.showSaveButton(!1), this.engine.setSelectedArea(null), this.inputPanel.setSelectedArea(null), this.engine.fitToView(), this.stateManager.update({\n zoom: this.engine.getZoom(),\n pan: this.engine.getPan()\n });\n }\n selectArea(t) {\n this.handleAreaSelect(t);\n }\n getSelectedAreaId() {\n return this.stateManager.getState().selectedAreaId;\n }\n getActiveView() {\n return this.activeViewName;\n }\n getViews() {\n return this.productViews.map((t) => ({\n viewName: t.viewName,\n viewOrder: t.viewOrder,\n isRequired: t.isRequired,\n isDefault: t.isDefault,\n templateId: t.template.id\n }));\n }\n setActiveView(t) {\n if (this.activeViewName === t) return;\n const e = this.productViews.find((i) => i.viewName === t);\n if (!e) throw new Error(`View not found: ${t}`);\n this.switchToView(e);\n }\n setAreaContent(t, e) {\n e.type === \"text\" ? this.contentManager.setTextContent(t, e) : this.contentManager.setImageContent(t, e.dataUrl, e.filename), this.syncEngineContents(), this.saveContentState();\n }\n getAreaContent(t) {\n return this.contentManager.getContent(t);\n }\n static hasEditorContent(t) {\n return t.type === \"text\" ? t.text.trim().length > 0 : t.type === \"image\" ? !!t.dataUrl : !1;\n }\n validateRequiredContent() {\n const t = [];\n if (this.productViews.length > 1) {\n this.activeViewName && this.contentManager && this.perViewContents.set(this.activeViewName, this.contentManager.toJSON());\n for (const e of this.productViews) {\n const i = this.perViewContents.get(e.viewName), s = i?.some(([, o]) => I.hasEditorContent(o)) ?? !1;\n if (e.isRequired && !s) {\n t.push(`View \"${e.viewName}\" is required`);\n continue;\n }\n const n = e.template.templateJson.areas || [];\n for (const o of n) {\n if (!o.required) continue;\n const a = i?.find(([l]) => l === o.id);\n (a ? I.hasEditorContent(a[1]) : !1) || t.push(`\"${o.name}\" in view \"${e.viewName}\" is required`);\n }\n }\n } else {\n const e = this.currentTemplate?.areas || [], i = this.contentManager.getContents();\n for (const s of e) {\n if (!s.required) continue;\n const n = i.get(s.id);\n (n ? I.hasEditorContent(n) : !1) || t.push(`\"${s.name}\" is required`);\n }\n }\n return t;\n }\n showValidationErrors(t) {\n return new Promise((e) => {\n const i = h(\"div\", { class: \"editor-modal-overlay\" }), s = h(\"div\", { class: \"editor-modal\" });\n s.appendChild(h(\"div\", { class: \"editor-modal-title\" }, \"Required content missing\"));\n const n = h(\"div\", { class: \"editor-modal-body\" }), o = document.createElement(\"ul\");\n o.style.margin = \"8px 0\", o.style.paddingLeft = \"20px\";\n for (const l of t) {\n const d = document.createElement(\"li\");\n d.textContent = l, o.appendChild(d);\n }\n n.appendChild(o), s.appendChild(n);\n const a = h(\"div\", { class: \"editor-modal-actions\" }), r = h(\"button\", { class: \"editor-modal-btn editor-modal-btn-primary\" }, \"OK\");\n r.addEventListener(\"click\", () => {\n i.remove(), e();\n }), a.appendChild(r), s.appendChild(a), i.appendChild(s), i.addEventListener(\"click\", (l) => {\n l.target === i && (i.remove(), e());\n }), this.shadow.appendChild(i);\n });\n }\n async finalize() {\n const t = this.validateRequiredContent();\n if (t.length > 0)\n return await this.showValidationErrors(t), null;\n const e = this.engine.checkSafeAreaViolations();\n if (e.length > 0) {\n const o = this.currentTemplate?.areas || [], a = e.map((l) => o.find((d) => d.id === l)?.name || l).join(\", \");\n if (!await this.showConfirmation(\n \"Content outside safe area\",\n `Content in ${a} extends beyond the safe area. It may be trimmed during printing. Continue?`,\n \"Cancel\",\n \"Proceed Anyway\"\n ))\n throw new Error(\"Finalization cancelled by user\");\n }\n const i = this.getAttribute(\"store-id\") || \"demo-shop\";\n if (this.pendingUploads.size > 0 && await Promise.allSettled(this.pendingUploads.values()), this.productViews.length > 1) {\n this.activeViewName && this.contentManager && this.perViewContents.set(this.activeViewName, this.contentManager.toJSON());\n const o = [];\n for (const c of this.productViews) {\n const p = this.perViewContents.get(c.viewName);\n !p || p.length === 0 || !p.some(([, g]) => I.hasEditorContent(g)) || o.push({\n templateId: c.template.id,\n viewName: c.viewName,\n contents: p\n });\n }\n if (o.length === 0)\n throw new Error(\"No views have content to finalize\");\n const a = this.getAttribute(\"product-id\");\n if (!a)\n throw new Error(\"product-id attribute is required for multi-view finalize\");\n const r = await this.apiClient.finalizeMultiView({\n productId: a,\n designs: o\n }), l = r.views.map((c) => ({\n viewName: c.viewName,\n designId: c.designId,\n proofUrl: c.proofUrl || \"\",\n status: c.status\n })), d = l[0];\n return this.dispatchEvent(\n new CustomEvent(\"customizer:finalize\", {\n detail: {\n designId: d.designId,\n proofUrl: d.proofUrl,\n status: \"processing\",\n views: l,\n requestId: r.requestId\n },\n bubbles: !0,\n composed: !0\n })\n ), { ...d, views: l };\n }\n const s = this.getDesign(), n = await this.apiClient.finalizeDesign(i, s);\n return this.dispatchEvent(\n new CustomEvent(\"customizer:finalize\", {\n detail: {\n designId: n.designId,\n proofUrl: n.proofUrl,\n templateId: s.templateId,\n designJson: s,\n status: n.status\n },\n bubbles: !0,\n composed: !0\n })\n ), n;\n }\n async waitForResult(t, e) {\n const i = e?.pollInterval ?? 1500, s = e?.maxPolls ?? 40, n = e?.signal;\n let o = 0;\n for (; o < s; ) {\n if (n?.aborted)\n throw new DOMException(\"Polling aborted\", \"AbortError\");\n await new Promise((l, d) => {\n const c = setTimeout(l, i);\n n?.addEventListener(\"abort\", () => {\n clearTimeout(c), d(new DOMException(\"Polling aborted\", \"AbortError\"));\n }, { once: !0 });\n }), o++;\n let r;\n if (t.length === 1) {\n const l = await this.apiClient.getDesignStatus(t[0]);\n r = {\n designs: [l],\n allCompleted: l.status !== \"processing\"\n };\n } else\n r = await this.apiClient.pollMultiViewStatus(t);\n if (r.allCompleted)\n return this.dispatchEvent(\n new CustomEvent(\"customizer:render-complete\", {\n detail: r,\n bubbles: !0,\n composed: !0\n })\n ), r;\n }\n const a = {\n designs: t.map((r) => ({\n designId: r,\n status: \"failed\",\n proofUrl: null,\n errorMessage: \"Render timed out\"\n })),\n allCompleted: !0\n };\n return this.dispatchEvent(\n new CustomEvent(\"customizer:render-complete\", {\n detail: a,\n bubbles: !0,\n composed: !0\n })\n ), a;\n }\n // ─── Initialization ───\n renderLoading() {\n const t = document.createElement(\"style\");\n t.textContent = P, this.shadow.appendChild(t);\n const e = h(\n \"div\",\n { class: \"loading-container\" },\n h(\"div\", { class: \"loading-spinner\" })\n );\n this.shadow.appendChild(e);\n }\n async initialize() {\n const t = this.getAttribute(\"api-url\") || \"http://localhost:4000\";\n this.apiClient = new $(`${t.replace(/\\/+$/, \"\")}/public`);\n const e = this.getAttribute(\"product-id\"), i = this.getAttribute(\"template-id\");\n if (!e && !i)\n throw new Error(\"Either template-id or product-id attribute is required\");\n e ? await this.loadProduct(e) : await this.loadTemplate(i), this.isReady = !0, this.dispatchEvent(new CustomEvent(\"ready\", { bubbles: !0, composed: !0 }));\n }\n async loadTemplate(t) {\n if (this.loadingTemplateId !== t) {\n this.loadingTemplateId = t;\n try {\n const e = await this.apiClient.getTemplate(t);\n if (this.loadingTemplateId !== t) return;\n await this.loadTemplateData(e), this.loadingTemplateId = null;\n } catch (e) {\n throw this.loadingTemplateId = null, new Error(`Failed to load template: ${e.message}`);\n }\n }\n }\n async loadTemplateData(t) {\n this.currentTemplate = t;\n const e = t.areas || [];\n this.contentManager = new L(e);\n const i = {\n template: t,\n contents: this.contentManager.toJSON(),\n selectedAreaId: null,\n zoom: 1,\n pan: { x: 0, y: 0 },\n isDirty: !1,\n warnings: []\n };\n this.stateManager = new F(i), this.buildUI(t, e), this.engine = new O(this.canvas), this.engine.setArtboard({\n width: t.artboard.width,\n height: t.artboard.height,\n backgroundColor: t.artboard.backgroundColor ?? \"#ffffff\"\n }), this.engine.setAreas(e), this.engine.setContents(this.contentManager.getContents()), t.backgroundImage && this.engine.setBackgroundImage(t.backgroundImage);\n const s = t.artboard.safeArea ?? t.safeArea;\n s && this.engine.setSafeArea(s), this.engine.start(), this.scheduleCanvasRefit(), this.interaction = new V(\n this.canvas,\n this.engine,\n () => this.contentManager.getContents(),\n () => this.stateManager.getState().selectedAreaId\n ), this.wireInteractionEvents(), this.contentManagerUnsub = this.contentManager.subscribe(() => {\n this.syncEngineContents(), this.inputPanel.setContents(this.contentManager.getContents());\n }), this.subscriptions.push(this.contentManagerUnsub), this.keyboard = new G(this), this.setupKeyboardShortcuts(), this.inputPanel.setContents(this.contentManager.getContents());\n const n = this.getAttribute(\"store-id\");\n n && this.apiClient.getStorageUsage(n).then((o) => {\n this.storageUsage = o, o.usagePercent >= 100 ? this.showToast(\"Storage quota exceeded. Upgrade your plan for more storage.\", \"error\") : o.usagePercent >= 80 && this.showToast(`Storage ${o.usagePercent}% full. Consider upgrading your plan.`, \"warning\");\n }).catch(() => {\n });\n }\n async loadProduct(t) {\n try {\n const e = await this.apiClient.getProduct(t);\n if (e.views.length === 0)\n throw new Error(\"Product has no active templates\");\n this.productViews = e.views, this.perViewContents.clear();\n const i = e.views.find((s) => s.isDefault) || e.views[0];\n await this.loadTemplateData(i.template.templateJson), this.activeViewName = i.viewName, this.zoomToolbar && e.views.length > 1 && (this.zoomToolbar.setViews(this.getViews()), this.zoomToolbar.setActiveView(i.viewName));\n } catch (e) {\n throw new Error(`Failed to load product: ${e.message}`);\n }\n }\n switchToView(t) {\n this.activeViewName && this.contentManager && this.perViewContents.set(this.activeViewName, this.contentManager.toJSON()), this.activeViewName = t.viewName, this.zoomToolbar?.setActiveView(t.viewName);\n const e = t.template.templateJson;\n this.currentTemplate = e;\n const i = e.areas || [];\n this.contentManager = new L(i), this.contentManagerUnsub && this.contentManagerUnsub(), this.contentManagerUnsub = this.contentManager.subscribe(() => {\n this.syncEngineContents(), this.inputPanel.setContents(this.contentManager.getContents());\n });\n const s = this.perViewContents.get(t.viewName);\n s && this.contentManager.fromJSON(s), this.engine.setArtboard({\n width: e.artboard.width,\n height: e.artboard.height,\n backgroundColor: e.artboard.backgroundColor ?? \"#ffffff\"\n }), this.engine.setAreas(i), this.engine.setContents(this.contentManager.getContents()), this.engine.setBackgroundImage(e.backgroundImage ?? void 0);\n const n = e.artboard.safeArea ?? e.safeArea;\n this.engine.setSafeArea(n ?? null), this.engine.fitToView(), this.stateManager.setState({\n template: e,\n contents: this.contentManager.toJSON(),\n selectedAreaId: null,\n isDirty: this.stateManager.getState().isDirty,\n zoom: this.engine.getZoom(),\n pan: this.engine.getPan(),\n warnings: []\n }), this.zoomToolbar.setZoom(this.engine.getZoom()), this.inputPanel.setAreas(i), this.inputPanel.setContents(this.contentManager.getContents()), this.inputPanel.setSelectedArea(null), this.engine.setSelectedArea(null), this.dispatchEvent(\n new CustomEvent(\"view-change\", {\n detail: { viewName: t.viewName },\n bubbles: !0,\n composed: !0\n })\n );\n }\n buildUI(t, e) {\n this.shadow.innerHTML = \"\";\n const i = document.createElement(\"style\");\n i.textContent = P, this.shadow.appendChild(i), this.container = h(\"div\", { class: \"editor-container\" }), this.zoomToolbar = new Z(), this.subscriptions.push(this.zoomToolbar.on(\"zoom-in\", () => this.handleZoomIn())), this.subscriptions.push(this.zoomToolbar.on(\"zoom-out\", () => this.handleZoomOut())), this.subscriptions.push(this.zoomToolbar.on(\"zoom-fit\", () => this.handleZoomFit())), this.subscriptions.push(this.zoomToolbar.on(\"view-change\", ({ viewName: o }) => {\n const a = this.productViews.find((r) => r.viewName === o);\n a && this.switchToView(a);\n })), this.subscriptions.push(this.zoomToolbar.on(\"close\", () => {\n this.dispatchEvent(new CustomEvent(\"customizer:close\", {\n bubbles: !0,\n composed: !0\n }));\n })), this.subscriptions.push(this.zoomToolbar.on(\"save\", async () => {\n this.pendingUploads.size > 0 && (this.zoomToolbar.setSaveDisabled(!0, \"Uploading...\"), await Promise.allSettled(this.pendingUploads.values())), this.zoomToolbar.setSaveDisabled(!0, \"Saving...\");\n try {\n const o = await this.finalize();\n if (!o) {\n this.zoomToolbar.setSaveDisabled(!1, \"✓\");\n return;\n }\n this.zoomToolbar.setSaveDisabled(!0, \"Saved!\"), this.showToast(\"Design saved successfully!\", \"info\"), this.dispatchEvent(new CustomEvent(\"customizer:save\", {\n detail: o,\n bubbles: !0,\n composed: !0\n }));\n const a = o.views ? o.views.map((r) => r.designId) : [o.designId];\n this.renderAbortController?.abort(), this.renderAbortController = new AbortController(), this.waitForResult(a, { signal: this.renderAbortController.signal }).catch((r) => {\n r instanceof DOMException && r.name === \"AbortError\" || console.error(\"Customizer: background render polling failed\", r);\n }), setTimeout(() => {\n this.zoomToolbar.setSaveDisabled(!1, \"✓\"), this.zoomToolbar.showSaveButton(!1), this.stateManager.update({ isDirty: !1 });\n }, 2e3);\n } catch (o) {\n console.error(\"Customizer: finalize failed\", o);\n const a = o instanceof Error ? o.message : \"Save failed. Please try again.\";\n this.showToast(a, \"error\"), this.zoomToolbar.setSaveDisabled(!1, \"✓\");\n }\n })), this.getAttribute(\"show-close-button\") === \"false\" && this.zoomToolbar.setCloseButtonVisible(!1), this.getAttribute(\"show-save-button\") === \"false\" && this.zoomToolbar.setSaveButtonEnabled(!1);\n const s = h(\"div\", { class: \"canvas-area\" });\n s.appendChild(this.zoomToolbar.getElement()), this.canvasWrapper = h(\"div\", { class: \"canvas-wrapper\" }), this.canvas = document.createElement(\"canvas\"), this.canvas.className = \"editor-canvas\", this.canvasWrapper.appendChild(this.canvas), s.appendChild(this.canvasWrapper), this.inputPanel = new j(e), this.wireInputPanelEvents();\n const n = h(\"div\", { class: \"editor-main\" });\n n.appendChild(s), n.appendChild(this.inputPanel.getBackdrop()), n.appendChild(this.inputPanel.getElement()), this.container.appendChild(n), this.shadow.appendChild(this.container), this.resizeObserver = new ResizeObserver((o) => {\n for (const a of o)\n a.target === this.canvasWrapper && this.handleCanvasResize(a.contentRect), a.target === this.container && this.handleLayoutResize(a.contentRect);\n }), this.resizeObserver.observe(this.canvasWrapper), this.resizeObserver.observe(this.container);\n }\n // ─── Event Wiring ───\n wireInteractionEvents() {\n this.subscriptions.push(\n this.interaction.on(\"area:select\", ({ areaId: t }) => {\n this.handleAreaSelect(t);\n })\n ), this.subscriptions.push(\n this.interaction.on(\"content:drag\", ({ areaId: t, offset: e }) => {\n this.contentManager.setContentOffset(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.interaction.on(\"content:scale\", ({ areaId: t, scale: e }) => {\n this.contentManager.setImageScale(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.interaction.on(\"content:rotate\", ({ areaId: t, rotation: e }) => {\n this.contentManager.setImageRotation(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.interaction.on(\"zoom\", ({ zoom: t }) => {\n this.engine.setZoom(t);\n const e = this.engine.getCenteredPan(t);\n e && this.engine.setPan(e), this.stateManager.update({ zoom: this.engine.getZoom(), pan: this.engine.getPan() }), this.zoomToolbar.setZoom(this.engine.getZoom());\n })\n ), this.subscriptions.push(\n this.interaction.on(\"pan\", ({ pan: t }) => {\n this.engine.setPan(t), this.stateManager.update({ pan: t });\n })\n ), this.subscriptions.push(\n this.interaction.on(\"cursor\", ({ cursor: t }) => {\n this.canvas.style.cursor = t;\n })\n ), this.subscriptions.push(\n this.interaction.on(\"context-menu\", ({ areaId: t, clientX: e, clientY: i }) => {\n this.handleContextMenu(t, e, i);\n })\n );\n }\n wireInputPanelEvents() {\n this.subscriptions.push(\n this.inputPanel.on(\"text:change\", ({ areaId: t, updates: e }) => {\n this.contentManager.setTextContent(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"image:change\", async ({ areaId: t, dataUrl: e, filename: i }) => {\n const s = this.contentManager.getContents();\n let n = 0;\n for (const [r, l] of s)\n l.type === \"image\" && r !== t && n++;\n if (n >= 10) {\n this.showToast(\"Maximum of 10 images per design reached\", \"error\");\n return;\n }\n if (await this.refreshStorageUsage(), this.storageUsage && this.storageUsage.usagePercent >= 100) {\n this.showToast(\"Storage quota exceeded. Upgrade your plan for more storage.\", \"error\");\n return;\n }\n const o = this.currentTemplate?.areas.find((r) => r.id === t);\n if (o && this.currentTemplate) {\n const r = this.currentTemplate.print.targetDpi;\n try {\n const l = new Image();\n l.crossOrigin = \"anonymous\";\n const d = await new Promise((g, m) => {\n l.onload = () => g({ width: l.naturalWidth, height: l.naturalHeight }), l.onerror = () => m(new Error(\"Failed to load image\")), l.src = e;\n }), c = o.location.width / r, p = o.location.height / r, u = Q(\n d.width,\n d.height,\n c,\n p,\n r\n );\n if (u.actualDPI < 150) {\n if (!await this.showConfirmation(\n \"Low resolution detected\",\n `This image is ${u.actualDPI} DPI at print size. Print may appear blurry. Recommended: ${r} DPI.`,\n \"Cancel\",\n \"Use Anyway\"\n )) return;\n } else u.actualDPI < r && (this.showToast(\n `Image resolution is ${u.actualDPI} DPI (${r} recommended)`,\n \"warning\"\n ), this.stateManager.update({\n warnings: [\n ...this.stateManager.getState().warnings,\n { type: \"dpi\", message: `${u.actualDPI} DPI`, areaId: t }\n ]\n }));\n } catch {\n }\n }\n this.contentManager.setImageContent(t, e, i), this.saveContentState();\n const a = this.getAttribute(\"store-id\");\n if (a && this.preUploadImage(t, e, a), this.storageUsage) {\n const r = Math.round(e.length * 0.75);\n this.storageUsage.storageUsed += r, this.storageUsage.usagePercent = this.storageUsage.storageQuota > 0 ? Math.round(this.storageUsage.storageUsed / this.storageUsage.storageQuota * 100) : 0;\n }\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"validation:error\", ({ message: t }) => {\n this.showToast(t, \"error\");\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"clear\", ({ areaId: t }) => {\n this.contentManager.clearContent(t), this.syncEngineContents(), this.inputPanel.setContents(this.contentManager.getContents()), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"select\", ({ areaId: t }) => {\n this.handleAreaSelect(t);\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"offset:change\", ({ areaId: t, offset: e }) => {\n this.contentManager.setContentOffset(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"scale:change\", ({ areaId: t, scale: e }) => {\n this.contentManager.setImageScale(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"rotation:change\", ({ areaId: t, rotation: e }) => {\n this.contentManager.setImageRotation(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"dismiss\", () => {\n this.handleAreaSelect(null);\n })\n );\n }\n // ─── Handlers ───\n handleAreaSelect(t, e = !1) {\n this.stateManager.update({ selectedAreaId: t }), this.engine.setSelectedArea(t), this.inputPanel.setSelectedArea(e ? t : null), t && document.activeElement !== this && this.focus(), this.dispatchEvent(\n new CustomEvent(\"area:select\", {\n detail: { areaId: t },\n bubbles: !0,\n composed: !0\n })\n );\n }\n handleContextMenu(t, e, i) {\n this.handleAreaSelect(t, !!t);\n }\n handleZoomIn() {\n const t = this.engine.getZoom(), e = Math.min(t * 1.25, 5), i = this.engine.getCenteredPan(e);\n this.engine.setZoom(e), i && this.engine.setPan(i), this.stateManager.update({ zoom: this.engine.getZoom(), pan: this.engine.getPan() }), this.zoomToolbar.setZoom(this.engine.getZoom());\n }\n handleZoomOut() {\n const t = this.engine.getZoom(), e = Math.max(t * 0.8, 0.1), i = this.engine.getCenteredPan(e);\n this.engine.setZoom(e), i && this.engine.setPan(i), this.stateManager.update({ zoom: this.engine.getZoom(), pan: this.engine.getPan() }), this.zoomToolbar.setZoom(this.engine.getZoom());\n }\n handleZoomFit() {\n this.engine.fitToView(), this.stateManager.update({ zoom: this.engine.getZoom(), pan: this.engine.getPan() }), this.zoomToolbar.setZoom(this.engine.getZoom());\n }\n /**\n * Schedule a canvas refit after layout settles (double-rAF ensures\n * ResizeObserver callbacks and layout-class changes have been applied).\n */\n scheduleCanvasRefit() {\n this.refitRafId != null && cancelAnimationFrame(this.refitRafId), this.refitRafId = requestAnimationFrame(() => {\n this.refitRafId = requestAnimationFrame(() => {\n if (this.refitRafId = null, !this.canvasWrapper || !this.engine) return;\n const t = this.canvasWrapper.getBoundingClientRect();\n t.width > 0 && t.height > 0 && this.handleCanvasResize(t);\n });\n });\n }\n handleCanvasResize(t) {\n const { width: e, height: i } = t;\n if (e === 0 || i === 0) return;\n const s = window.devicePixelRatio || 1;\n this.canvas.width = e * s, this.canvas.height = i * s, this.canvas.style.width = `${e}px`, this.canvas.style.height = `${i}px`, this.engine && (this.engine.fitToView(), this.stateManager.update({ zoom: this.engine.getZoom(), pan: this.engine.getPan() }), this.zoomToolbar.setZoom(this.engine.getZoom()));\n }\n handleLayoutResize(t) {\n const e = t.width < et;\n this.container.classList.toggle(\"layout-desktop\", !e), this.container.classList.toggle(\"layout-mobile\", e), e !== this.isMobileLayout && (this.isMobileLayout = e, this.inputPanel.setMobile(e), this.scheduleCanvasRefit());\n }\n // ─── State Management ───\n async refreshStorageUsage() {\n if (Date.now() - this.storageUsageLastRefresh < 3e4) return;\n const t = this.getAttribute(\"store-id\");\n if (t)\n try {\n this.storageUsage = await this.apiClient.getStorageUsage(t), this.storageUsageLastRefresh = Date.now();\n } catch {\n }\n }\n /**\n * Pre-upload an image to the server so finalize doesn't need to send base64.\n * On success, updates the content manager with assetId/assetUrl.\n * Tracks the promise so finalize() can await it.\n */\n preUploadImage(t, e, i) {\n const s = this.activeViewName, n = this._doPreUpload(t, e, i, s);\n return this.pendingUploads.set(t, n), this.inputPanel?.setUploading(t, !0), this.updateSaveButtonForUploads(), n.finally(() => {\n this.pendingUploads.get(t) === n && this.pendingUploads.delete(t), this.inputPanel?.setUploading(t, !1), this.updateSaveButtonForUploads();\n }), n;\n }\n async _doPreUpload(t, e, i, s) {\n const [n, o] = e.split(\",\"), a = n.match(/:(.*?);/)?.[1] || \"image/png\", r = atob(o), l = new Uint8Array(r.length);\n for (let g = 0; g < r.length; g++) l[g] = r.charCodeAt(g);\n const d = new Blob([l], { type: a }), c = a.split(\"/\")[1] || \"png\", p = new File([d], `upload.${c}`, { type: a });\n let u;\n try {\n u = await this.apiClient.uploadAsset(p, i);\n } catch (g) {\n console.error(\"Customizer: image pre-upload failed\", g), this.showToast(\"Image upload failed. Will retry on save.\", \"warning\");\n return;\n }\n if (this.activeViewName === s) {\n const g = this.contentManager.getContent(t);\n g?.type === \"image\" && g.dataUrl === e && this.contentManager.setImageContent(t, u.publicUrl, g.filename, {\n assetId: u.assetId,\n assetUrl: u.publicUrl\n });\n } else if (s) {\n const g = this.perViewContents.get(s);\n if (g) {\n const m = g.map(([b, w]) => b === t && w.type === \"image\" && w.dataUrl === e ? [b, { ...w, dataUrl: u.publicUrl, assetId: u.assetId, assetUrl: u.publicUrl }] : [b, w]);\n this.perViewContents.set(s, m);\n }\n }\n }\n saveContentState() {\n this.stateManager.setState({\n contents: this.contentManager.toJSON(),\n isDirty: !0\n }), this.zoomToolbar?.showSaveButton(!0), this.engine.checkSafeAreaViolations(), this.emitChange();\n }\n syncEngineContents() {\n this.engine?.setContents(this.contentManager.getContents());\n }\n syncFromState() {\n const t = this.stateManager.getState();\n this.contentManager.setContentsQuiet(t.contents), this.syncEngineContents(), this.inputPanel.setContents(this.contentManager.getContents()), this.engine.setSelectedArea(t.selectedAreaId), this.inputPanel.setSelectedArea(t.selectedAreaId);\n }\n // ─── Keyboard ───\n setupKeyboardShortcuts() {\n const t = K();\n this.keyboard.register({\n key: \"z\",\n [t]: !0,\n handler: () => this.undo()\n }), this.keyboard.register({\n key: \"z\",\n [t]: !0,\n shift: !0,\n handler: () => this.redo()\n }), this.keyboard.register({\n key: \"Escape\",\n handler: () => this.handleAreaSelect(null)\n });\n }\n updateSaveButtonForUploads() {\n this.zoomToolbar && this.stateManager?.getState().isDirty && (this.pendingUploads.size > 0 ? this.zoomToolbar.setSaveDisabled(!0, \"Uploading...\") : this.zoomToolbar.setSaveDisabled(!1, \"✓\"));\n }\n // ─── Toast & Modal ───\n showToast(t, e = \"info\") {\n const i = h(\"div\", { class: `editor-toast editor-toast-${e}` }, t);\n this.shadow.appendChild(i), setTimeout(() => i.remove(), 4e3);\n }\n showConfirmation(t, e, i = \"Cancel\", s = \"Continue\") {\n return new Promise((n) => {\n const o = h(\"div\", { class: \"editor-modal-overlay\" }), a = h(\"div\", { class: \"editor-modal\" });\n a.appendChild(h(\"div\", { class: \"editor-modal-title\" }, t)), a.appendChild(h(\"div\", { class: \"editor-modal-body\" }, e));\n const r = h(\"div\", { class: \"editor-modal-actions\" }), l = h(\"button\", { class: \"editor-modal-btn\" }, i);\n l.addEventListener(\"click\", () => {\n o.remove(), n(!1);\n });\n const d = h(\"button\", { class: \"editor-modal-btn editor-modal-btn-primary\" }, s);\n d.addEventListener(\"click\", () => {\n o.remove(), n(!0);\n }), r.appendChild(l), r.appendChild(d), a.appendChild(r), o.appendChild(a), o.addEventListener(\"click\", (c) => {\n c.target === o && (o.remove(), n(!1));\n }), this.shadow.appendChild(o);\n });\n }\n // ─── Error / Cleanup ───\n showError(t, e) {\n this.shadow.innerHTML = \"\";\n const i = document.createElement(\"style\");\n i.textContent = P, this.shadow.appendChild(i);\n const s = h(\"div\", { class: \"error-container\" });\n s.appendChild(h(\"div\", { class: \"error-title\" }, t)), s.appendChild(h(\"div\", { class: \"error-message\" }, e?.message ?? \"\")), this.shadow.appendChild(s), this.dispatchEvent(\n new CustomEvent(\"error\", {\n detail: { message: t, error: e },\n bubbles: !0,\n composed: !0\n })\n );\n }\n cleanup() {\n this.renderAbortController?.abort(), this.renderAbortController = null;\n for (const t of this.subscriptions)\n t();\n this.subscriptions = [], this.refitRafId != null && (cancelAnimationFrame(this.refitRafId), this.refitRafId = null), this.resizeObserver && (this.resizeObserver.disconnect(), this.resizeObserver = null), this.engine?.destroy(), this.interaction?.destroy(), this.keyboard?.destroy(), this.isReady = !1, this.currentTemplate = null, this.productViews = [], this.activeViewName = null, this.perViewContents.clear();\n }\n}\ncustomElements.get(\"customizer-editor\") || customElements.define(\"customizer-editor\", I);\nexport {\n I as CustomizerEditor\n};\n//# sourceMappingURL=customizer.esm.js.map\n","/**\n * Vanilla JavaScript SDK for Customizer Editor\n * @packageDocumentation\n */\n\n// Side-effect: registers <customizer-editor> web component.\n// Using namespace import so tsc omits it from .d.ts (value-only usage).\nimport * as _editorModule from '@customizer/editor';\nvoid _editorModule;\nimport type {\n CustomizerOptions,\n CustomizerInstance,\n DesignJSON,\n FinalizeResult,\n RenderStatusResult,\n CustomizerError,\n CustomizerEditorElement,\n ViewInfo,\n} from '../types';\n\n/**\n * Initialize the customizer editor\n *\n * @param elementOrSelector - DOM element or CSS selector where to mount the editor\n * @param options - Configuration options\n * @returns CustomizerInstance with methods to control the editor\n *\n * @example\n * ```typescript\n * import { initCustomizer } from '@varianta/sdk';\n *\n * const editor = initCustomizer('#editor', {\n * templateId: 'tshirt-001',\n * theme: 'light',\n * onReady: () => console.log('Editor ready!'),\n * onChange: (design) => console.log('Design changed:', design),\n * });\n *\n * // Get current design\n * const design = editor.getDesign();\n *\n * // Finalize design\n * const result = await editor.finalize();\n * ```\n */\nexport function initCustomizer(\n elementOrSelector: HTMLElement | string,\n options: CustomizerOptions\n): CustomizerInstance {\n // Resolve the container element\n const container =\n typeof elementOrSelector === 'string'\n ? document.querySelector<HTMLElement>(elementOrSelector)\n : elementOrSelector;\n\n if (!container) {\n throw new Error(\n `Container not found: ${\n typeof elementOrSelector === 'string'\n ? elementOrSelector\n : 'provided element is null'\n }`\n );\n }\n\n // Validate that exactly one of templateId or productId is provided\n if (!options.templateId && !options.productId) {\n throw new Error('Either templateId or productId must be provided');\n }\n if (options.templateId && options.productId) {\n throw new Error('Only one of templateId or productId should be provided, not both');\n }\n\n // Create the editor element\n const editorElement = document.createElement('customizer-editor') as unknown as CustomizerEditorElement;\n\n // Set attributes\n if (options.productId) {\n editorElement.setAttribute('product-id', options.productId);\n } else {\n editorElement.setAttribute('template-id', options.templateId!);\n }\n if (options.theme) {\n editorElement.setAttribute('theme', options.theme);\n }\n if (options.mode) {\n editorElement.setAttribute('mode', options.mode);\n }\n if (options.className) {\n editorElement.classList.add(options.className);\n }\n if (options.showCloseButton === false) {\n editorElement.setAttribute('show-close-button', 'false');\n }\n if (options.showSaveButton === false) {\n editorElement.setAttribute('show-save-button', 'false');\n }\n\n // Apply custom styles if needed\n editorElement.style.width = '100%';\n editorElement.style.height = '100%';\n\n // Event listeners tracking\n const listeners: Array<{ event: string; handler: EventListener }> = [];\n\n const addEventListener = (event: string, handler: EventListener) => {\n editorElement.addEventListener(event, handler);\n listeners.push({ event, handler });\n };\n\n // Mount the editor first\n container.innerHTML = '';\n container.appendChild(editorElement);\n\n // Create the instance API BEFORE setting up event handlers\n const instance: CustomizerInstance = {\n getDesign(): DesignJSON {\n if (typeof editorElement.getDesign !== 'function') {\n throw new Error('Editor not ready: getDesign method not available');\n }\n return editorElement.getDesign();\n },\n\n setDesign(design: DesignJSON): void {\n if (typeof editorElement.setDesign !== 'function') {\n throw new Error('Editor not ready: setDesign method not available');\n }\n editorElement.setDesign(design);\n },\n\n undo(): void {\n if (typeof editorElement.undo !== 'function') {\n throw new Error('Editor not ready: undo method not available');\n }\n editorElement.undo();\n },\n\n redo(): void {\n if (typeof editorElement.redo !== 'function') {\n throw new Error('Editor not ready: redo method not available');\n }\n editorElement.redo();\n },\n\n canUndo(): boolean {\n if (typeof editorElement.canUndo !== 'function') {\n return false;\n }\n return editorElement.canUndo();\n },\n\n canRedo(): boolean {\n if (typeof editorElement.canRedo !== 'function') {\n return false;\n }\n return editorElement.canRedo();\n },\n\n async finalize(): Promise<FinalizeResult> {\n const apiUrl = options.apiUrl || 'https://api.varianta.io';\n\n try {\n // Multi-view path: delegate to the web component which uses batch API\n if (options.productId && typeof editorElement.finalize === 'function') {\n const editorResult = await (editorElement as any).finalize();\n const result: FinalizeResult = {\n designId: editorResult.designId,\n status: 'processing',\n proofUrl: editorResult.proofUrl ?? null,\n errorMessage: null,\n requestId: editorResult.requestId,\n views: editorResult.views,\n };\n\n if (options.onFinalize) {\n options.onFinalize(result);\n }\n return result;\n }\n\n // Single-template path — submit and return immediately\n const design = this.getDesign();\n const response = await fetch(`${apiUrl}/public/finalize`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n templateId: (design as unknown as Record<string, unknown>).templateId || options.templateId,\n designJson: design,\n }),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({\n message: 'Finalization failed',\n }));\n throw new Error(error.message || 'Finalization failed');\n }\n\n const body = await response.json();\n const result: FinalizeResult = {\n designId: body.designId,\n status: body.status,\n proofUrl: body.proofUrl ?? null,\n errorMessage: body.errorMessage ?? null,\n };\n\n if (options.onFinalize) {\n options.onFinalize(result);\n }\n\n return result;\n } catch (error) {\n const customizerError: CustomizerError = {\n code: 'FINALIZE_ERROR',\n message: error instanceof Error ? error.message : 'Unknown error',\n details: error,\n };\n\n if (options.onError) {\n options.onError(customizerError);\n }\n\n throw error;\n }\n },\n\n async waitForResult(designIds: string[], waitOptions?: {\n pollInterval?: number;\n maxPolls?: number;\n signal?: AbortSignal;\n }): Promise<RenderStatusResult> {\n // Delegate to the web component's waitForResult if available\n if (typeof editorElement.waitForResult === 'function') {\n const result = await editorElement.waitForResult(designIds, waitOptions);\n if (options.onRenderComplete) {\n options.onRenderComplete(result);\n }\n return result;\n }\n\n // Fallback: poll the status endpoint directly\n const apiUrl = options.apiUrl || 'https://api.varianta.io';\n const pollInterval = waitOptions?.pollInterval ?? 1500;\n const maxPolls = waitOptions?.maxPolls ?? 40;\n const signal = waitOptions?.signal;\n let polls = 0;\n\n while (polls < maxPolls) {\n if (signal?.aborted) {\n throw new DOMException('Polling aborted', 'AbortError');\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, pollInterval);\n signal?.addEventListener('abort', () => {\n clearTimeout(timer);\n reject(new DOMException('Polling aborted', 'AbortError'));\n }, { once: true });\n });\n polls++;\n\n let result: RenderStatusResult;\n if (designIds.length === 1) {\n const statusRes = await fetch(`${apiUrl}/public/designs/${designIds[0]}/status`);\n if (!statusRes.ok) throw new Error('Failed to check design status');\n const single = await statusRes.json();\n result = {\n designs: [single],\n allCompleted: single.status !== 'processing',\n };\n } else {\n const statusRes = await fetch(\n `${apiUrl}/public/finalize-status?designIds=${designIds.join(',')}`\n );\n if (!statusRes.ok) throw new Error('Failed to check design status');\n result = await statusRes.json();\n }\n\n if (result.allCompleted) {\n if (options.onRenderComplete) {\n options.onRenderComplete(result);\n }\n return result;\n }\n }\n\n // Timed out\n const timeoutResult: RenderStatusResult = {\n designs: designIds.map(id => ({\n designId: id,\n status: 'failed' as const,\n proofUrl: null,\n errorMessage: 'Render timed out',\n })),\n allCompleted: true,\n };\n\n if (options.onRenderComplete) {\n options.onRenderComplete(timeoutResult);\n }\n\n return timeoutResult;\n },\n\n addTextLayer(text?: string): void {\n if (typeof editorElement.addTextLayer !== 'function') {\n throw new Error('Editor not ready: addTextLayer method not available');\n }\n editorElement.addTextLayer(text);\n },\n\n async addImageLayer(url: string): Promise<void> {\n if (typeof editorElement.addImageLayer !== 'function') {\n throw new Error('Editor not ready: addImageLayer method not available');\n }\n return editorElement.addImageLayer(url);\n },\n\n removeLayer(layerId: string): void {\n if (typeof editorElement.removeLayer !== 'function') {\n throw new Error('Editor not ready: removeLayer method not available');\n }\n editorElement.removeLayer(layerId);\n },\n\n selectLayer(layerId: string | null): void {\n if (typeof editorElement.selectLayer !== 'function') {\n throw new Error('Editor not ready: selectLayer method not available');\n }\n editorElement.selectLayer(layerId);\n },\n\n getSelectedLayerId(): string | null {\n if (typeof editorElement.getSelectedLayerId !== 'function') {\n return null;\n }\n return editorElement.getSelectedLayerId();\n },\n\n getActiveView(): string | null {\n if (typeof editorElement.getActiveView !== 'function') {\n return null;\n }\n return editorElement.getActiveView();\n },\n\n getViews(): ViewInfo[] {\n if (typeof editorElement.getViews !== 'function') {\n return [];\n }\n return editorElement.getViews();\n },\n\n setActiveView(viewName: string): void {\n if (typeof editorElement.setActiveView !== 'function') {\n throw new Error('Editor not ready: setActiveView method not available');\n }\n editorElement.setActiveView(viewName);\n },\n\n setTheme(theme: 'light' | 'dark'): void {\n editorElement.setAttribute('theme', theme);\n },\n\n setMode(mode: 'edit' | 'preview'): void {\n editorElement.setAttribute('mode', mode);\n },\n\n destroy(): void {\n // Remove all event listeners\n listeners.forEach(({ event, handler }) => {\n editorElement.removeEventListener(event, handler);\n });\n\n // Remove the element from DOM\n if (editorElement.parentNode) {\n editorElement.parentNode.removeChild(editorElement);\n }\n },\n\n getElement(): HTMLElement {\n return editorElement;\n },\n };\n\n // NOW set up event handlers (after instance is fully created)\n if (options.onReady) {\n addEventListener('ready', (() => {\n options.onReady?.(instance);\n }) as EventListener);\n }\n\n if (options.onChange) {\n addEventListener('change', ((e: CustomEvent) => {\n const design = e.detail.design;\n options.onChange?.(design);\n }) as EventListener);\n }\n\n if (options.onLayerSelect) {\n addEventListener('layer:select', ((e: CustomEvent) => {\n options.onLayerSelect?.(e.detail.layerId);\n }) as EventListener);\n }\n\n if (options.onLayerAdd) {\n addEventListener('layer:add', ((e: CustomEvent) => {\n options.onLayerAdd?.(e.detail.layerId);\n }) as EventListener);\n }\n\n if (options.onLayerRemove) {\n addEventListener('layer:remove', ((e: CustomEvent) => {\n options.onLayerRemove?.(e.detail.layerId);\n }) as EventListener);\n }\n\n if (options.onLayerUpdate) {\n addEventListener('layer:update', ((e: CustomEvent) => {\n options.onLayerUpdate?.(e.detail.layerId);\n }) as EventListener);\n }\n\n if (options.onError) {\n addEventListener('error', ((e: CustomEvent) => {\n const error: CustomizerError = e.detail.error;\n options.onError?.(error);\n }) as EventListener);\n }\n\n if (options.onViewChange) {\n addEventListener('view-change', ((e: CustomEvent) => {\n options.onViewChange?.(e.detail.viewName);\n }) as EventListener);\n }\n\n if (options.onRenderComplete) {\n addEventListener('customizer:render-complete', ((e: CustomEvent) => {\n options.onRenderComplete?.(e.detail);\n }) as EventListener);\n }\n\n if (options.onClose) {\n addEventListener('customizer:close', (() => {\n options.onClose?.();\n }) as EventListener);\n }\n\n if (options.onSave) {\n addEventListener('customizer:save', ((e: CustomEvent) => {\n options.onSave?.(e.detail);\n }) as EventListener);\n }\n\n // Set initial design if provided\n if (options.initialDesign) {\n // Wait for the editor to be ready before setting the design\n editorElement.addEventListener(\n 'ready',\n () => {\n if (options.initialDesign) {\n editorElement.setDesign(options.initialDesign);\n }\n },\n { once: true }\n );\n }\n\n if (options.debug) {\n console.log('[Customizer SDK] Initialized with options:', options);\n console.log('[Customizer SDK] Instance:', instance);\n }\n\n return instance;\n}\n\n/**\n * Re-export types for convenience\n */\nexport type * from '../types';\n"],"names":["O","t","e","l","d","b","w","y","v","x","C","M","T","k","p","u","g","m","N","z","A","B","L","S","n","H","V","a","$","s","Z","W","Y","R","X","D","o","j","G","J","K","_","P","tt","et","initCustomizer","elementOrSelector","options","container","editorElement","listeners","addEventListener","event","handler","instance","design","apiUrl","editorResult","result","response","error","body","customizerError","designIds","waitOptions","pollInterval","maxPolls","signal","polls","resolve","reject","timer","statusRes","single","timeoutResult","id","text","url","layerId","viewName","theme","mode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../editor/dist/customizer.esm.js","../src/types/index.ts","../src/validation.ts","../src/vanilla/index.ts"],"sourcesContent":["class B {\n constructor(t) {\n this.animationFrameId = null, this.needsRender = !0, this.areas = [], this.contents = /* @__PURE__ */ new Map(), this.artboard = null, this.bgImageElement = null, this.loadedImages = /* @__PURE__ */ new Map(), this.loadingImages = /* @__PURE__ */ new Set(), this.zoom = 1, this.pan = { x: 0, y: 0 }, this.selectedAreaId = null, this.hoveredHandle = null, this.eventListeners = /* @__PURE__ */ new Map(), this.safeArea = null, this.safeAreaViolations = /* @__PURE__ */ new Set(), this.showAreaBorders = !0, this.areaSelectionEnabled = !0, this.renderLoop = () => {\n try {\n this.needsRender && (this.render(), this.needsRender = !1, this.emit(\"render\", void 0));\n } catch (i) {\n console.error(\"Error in render loop:\", i);\n }\n this.animationFrameId = requestAnimationFrame(this.renderLoop);\n }, this.canvas = t;\n const e = t.getContext(\"2d\");\n if (!e)\n throw new Error(\"Failed to get 2D context from canvas\");\n this.ctx = e;\n }\n /**\n * Start the render loop\n */\n start() {\n this.animationFrameId === null && this.renderLoop();\n }\n /**\n * Stop the render loop\n */\n stop() {\n this.animationFrameId !== null && (cancelAnimationFrame(this.animationFrameId), this.animationFrameId = null);\n }\n /**\n * Set artboard configuration\n */\n setArtboard(t) {\n this.artboard = t, this.requestRender();\n }\n /**\n * Get artboard configuration\n */\n getArtboard() {\n return this.artboard;\n }\n /**\n * Set areas to render\n */\n setAreas(t) {\n this.areas = [...t].sort((e, i) => e.zIndex - i.zIndex), this.requestRender();\n }\n /**\n * Get areas\n */\n getAreas() {\n return this.areas;\n }\n /**\n * Set area contents\n */\n setContents(t) {\n this.contents = t, this.loadContentImages(), this.requestRender();\n }\n /**\n * Get area contents\n */\n getContents() {\n return this.contents;\n }\n /**\n * Update content for a single area\n */\n updateContent(t, e) {\n this.contents.set(t, e), e.type === \"image\" && this.loadContentImages(), this.requestRender(), this.emit(\"content:change\", { areaId: t, content: e });\n }\n /**\n * Remove content for an area\n */\n removeContent(t) {\n this.contents.delete(t), this.loadedImages.delete(t), this.requestRender();\n }\n /**\n * Set background image\n */\n setBackgroundImage(t) {\n if (this.backgroundImage = t, t?.url && t.url !== this.bgImageElement?.src) {\n const e = t.url, i = new Image();\n i.crossOrigin = \"anonymous\", i.onload = () => {\n this.bgImageElement = i, this.requestRender();\n }, i.onerror = () => {\n this.bgImageElement = null, console.error(\"Failed to load background image:\", e), this.requestRender();\n }, i.src = e;\n } else t?.url || (this.bgImageElement = null);\n this.requestRender();\n }\n /**\n * Set zoom level\n */\n setZoom(t) {\n this.zoom = Math.max(0.1, Math.min(5, t)), this.requestRender();\n }\n /**\n * Set pan offset\n */\n setPan(t) {\n this.pan = t, this.requestRender();\n }\n /**\n * Get zoom level\n */\n getZoom() {\n return this.zoom;\n }\n /**\n * Get pan offset\n */\n getPan() {\n return this.pan;\n }\n /**\n * Set whether area borders are shown\n */\n setShowAreaBorders(t) {\n this.showAreaBorders = t, this.requestRender();\n }\n /**\n * Set whether area selection is enabled\n */\n setAreaSelectionEnabled(t) {\n this.areaSelectionEnabled = t;\n }\n /**\n * Calculate the pan offset needed to center the artboard at a given zoom level\n */\n getCenteredPan(t) {\n if (!this.artboard)\n return null;\n const { width: e, height: i } = this.artboard, s = window.devicePixelRatio || 1, n = this.canvas.width / s, o = this.canvas.height / s;\n return {\n x: (n / t - e) / 2,\n y: (o / t - i) / 2\n };\n }\n /**\n * Request a render on the next frame\n */\n requestRender() {\n this.needsRender = !0;\n }\n /**\n * Fit view to show the entire artboard\n */\n fitToView() {\n if (!this.artboard)\n return;\n const t = 0, { width: e, height: i } = this.artboard, s = window.devicePixelRatio || 1, n = this.canvas.width / s - t * 2, o = this.canvas.height / s - t * 2;\n if (n <= 0 || o <= 0)\n return;\n const r = n / e, a = o / i, d = Math.min(r, a), l = this.canvas.width / s, h = this.canvas.height / s, p = (l / d - e) / 2, u = (h / d - i) / 2;\n this.zoom = d, this.pan = { x: p, y: u }, this.requestRender();\n }\n /**\n * Set the selected area\n */\n setSelectedArea(t) {\n this.selectedAreaId !== t && (this.selectedAreaId = t, this.requestRender(), this.emit(\"area:select\", { areaId: t }));\n }\n /**\n * Get the selected area ID\n */\n getSelectedArea() {\n return this.selectedAreaId;\n }\n /**\n * Set the hovered handle for highlighting\n */\n setHoveredHandle(t) {\n this.hoveredHandle !== t && (this.hoveredHandle = t, this.requestRender());\n }\n /**\n * Get the currently hovered handle\n */\n getHoveredHandle() {\n return this.hoveredHandle;\n }\n /**\n * Convert screen coordinates to canvas coordinates\n */\n screenToCanvas(t, e) {\n const i = window.devicePixelRatio || 1, s = t / i, n = e / i, o = s / this.zoom - this.pan.x, r = n / this.zoom - this.pan.y;\n return { x: o, y: r };\n }\n /**\n * Get content bounds for an area (in artboard coordinates)\n */\n getContentBounds(t) {\n const e = this.areas.find((d) => d.id === t);\n if (!e)\n return null;\n const i = this.contents.get(t);\n if (!i)\n return null;\n const { location: s } = e, { x: n, y: o, width: r, height: a } = s;\n if (i.type === \"text\") {\n const d = i.offset || { x: 0, y: 0 }, l = i.scale ?? 1, h = i.rotation ?? 0, p = r * l, u = a * l, g = n + r / 2 + d.x, m = o + a / 2 + d.y;\n return {\n x: g - p / 2,\n y: m - u / 2,\n width: p,\n height: u,\n rotation: h,\n centerX: g,\n centerY: m\n };\n } else if (i.type === \"image\") {\n const d = this.loadedImages.get(t);\n if (!d)\n return null;\n const l = i.offset || { x: 0, y: 0 }, h = i.scale ?? 1, p = i.rotation ?? 0, u = d.naturalWidth / d.naturalHeight, g = r / a;\n let m, b;\n u > g ? (m = r, b = r / u) : (b = a, m = a * u);\n const w = m * h, y = b * h, v = n + r / 2 + l.x, x = o + a / 2 + l.y;\n return {\n x: v - w / 2,\n y: x - y / 2,\n width: w,\n height: y,\n rotation: p,\n centerX: v,\n centerY: x\n };\n }\n return null;\n }\n /**\n * Hit test content at given canvas coordinates\n * Returns area ID if content was hit, null otherwise\n */\n hitTestContent(t, e) {\n if (!this.areaSelectionEnabled)\n return null;\n for (let i = this.areas.length - 1; i >= 0; i--) {\n const s = this.areas[i], n = this.getContentBounds(s.id);\n if (n && this.isPointInBounds(t, e, n))\n return s.id;\n }\n return null;\n }\n /**\n * Hit test area at given canvas coordinates (ignoring content)\n * Returns area ID if point is inside area bounds\n */\n hitTestArea(t, e) {\n if (!this.areaSelectionEnabled)\n return null;\n for (let i = this.areas.length - 1; i >= 0; i--) {\n const s = this.areas[i], { x: n, y: o, width: r, height: a } = s.location;\n if (t >= n && t <= n + r && e >= o && e <= o + a)\n return s.id;\n }\n return null;\n }\n /**\n * Test if a point is inside rotated bounds\n */\n isPointInBounds(t, e, i) {\n const { centerX: s, centerY: n, width: o, height: r, rotation: a } = i, d = -a * Math.PI / 180, l = Math.cos(d), h = Math.sin(d), p = t - s, u = e - n, g = p * l - u * h, m = p * h + u * l;\n return g >= -o / 2 && g <= o / 2 && m >= -r / 2 && m <= r / 2;\n }\n /**\n * Get handle positions for the selected content\n */\n getContentHandlePositions(t) {\n const e = this.areas.find((v) => v.id === t);\n if (!e)\n return null;\n const i = this.contents.get(t);\n if (!i)\n return null;\n const s = this.getContentBounds(t);\n if (!s)\n return null;\n const { centerX: n, centerY: o, width: r, height: a, rotation: d } = s, l = 6 / this.zoom, h = 30 / this.zoom, p = d * Math.PI / 180, u = Math.cos(p), g = Math.sin(p), m = (v, x) => ({\n x: n + v * u - x * g,\n y: o + v * g + x * u\n }), b = [];\n if (i.type === \"image\" && e.imageOptions?.allowScaling || i.type === \"text\" && e.textOptions?.allowScaling) {\n const v = r / 2, x = a / 2, C = m(-v, -x);\n b.push({ type: \"nw\", ...C, radius: l });\n const M = m(v, -x);\n b.push({ type: \"ne\", ...M, radius: l });\n const T = m(v, x);\n b.push({ type: \"se\", ...T, radius: l });\n const k = m(-v, x);\n b.push({ type: \"sw\", ...k, radius: l });\n }\n if (i.type === \"image\" && e.imageOptions?.allowRotation || i.type === \"text\" && e.textOptions?.allowRotation) {\n const v = m(0, -a / 2 - h);\n b.push({ type: \"rotate\", ...v, radius: l });\n }\n return b;\n }\n /**\n * Hit test handles at given canvas coordinates\n */\n hitTestHandle(t, e, i) {\n const s = this.getContentHandlePositions(i);\n if (!s)\n return null;\n for (const n of s) {\n const o = t - n.x, r = e - n.y;\n if (Math.sqrt(o * o + r * r) <= n.radius * 2)\n return n.type;\n }\n return null;\n }\n /**\n * Check if positioning is allowed for an area\n */\n isPositioningAllowed(t) {\n const e = this.areas.find((s) => s.id === t);\n if (!e)\n return !1;\n const i = this.contents.get(t);\n return i ? i.type === \"text\" ? e.textOptions?.allowPositioning ?? !1 : e.imageOptions?.allowPositioning ?? !1 : !1;\n }\n /**\n * Get area location (for constraint calculations)\n */\n getAreaLocation(t) {\n const e = this.areas.find((i) => i.id === t);\n return e ? e.location : null;\n }\n /**\n * Get area by ID\n */\n getArea(t) {\n return this.areas.find((e) => e.id === t);\n }\n /**\n * Set safe area margins for content safety guides\n */\n setSafeArea(t) {\n this.safeArea = t ?? null, this.requestRender();\n }\n /**\n * Check if any area content extends beyond the safe area bounds.\n * Returns array of violating area IDs.\n */\n checkSafeAreaViolations() {\n if (!this.safeArea || !this.artboard)\n return [];\n const t = [], { top: e, right: i, bottom: s, left: n } = this.safeArea, o = n, r = e, a = this.artboard.width - i, d = this.artboard.height - s;\n for (const l of this.areas) {\n if (!this.contents.get(l.id))\n continue;\n const p = this.getContentBounds(l.id);\n if (!p)\n continue;\n const { centerX: u, centerY: g, width: m, height: b, rotation: w } = p, y = w * Math.PI / 180, v = Math.abs(Math.cos(y)), x = Math.abs(Math.sin(y)), C = m * v + b * x, M = m * x + b * v, T = u - C / 2, k = g - M / 2, N = u + C / 2, O = g + M / 2;\n (T < o || k < r || N > a || O > d) && t.push(l.id);\n }\n return this.safeAreaViolations = new Set(t), this.requestRender(), t;\n }\n /**\n * Add event listener\n */\n on(t, e) {\n return this.eventListeners.has(t) || this.eventListeners.set(t, /* @__PURE__ */ new Set()), this.eventListeners.get(t).add(e), () => {\n this.eventListeners.get(t)?.delete(e);\n };\n }\n /**\n * Emit event\n */\n emit(t, e) {\n const i = this.eventListeners.get(t);\n if (i)\n for (const s of i)\n s(e);\n }\n /**\n * Export to PNG at full resolution\n */\n async exportToPNG() {\n if (!this.artboard)\n throw new Error(\"No artboard configured\");\n const { width: t, height: e, backgroundColor: i } = this.artboard, s = document.createElement(\"canvas\");\n s.width = t, s.height = e;\n const n = s.getContext(\"2d\");\n if (!n)\n throw new Error(\"Failed to get 2D context for export\");\n n.fillStyle = i, n.fillRect(0, 0, t, e), this.backgroundImage?.position === \"behind\" && this.bgImageElement && this.drawBackgroundImageOnContext(n, t, e);\n for (const o of this.areas)\n this.drawAreaContentOnContext(n, o);\n return this.backgroundImage?.position === \"overlay\" && this.bgImageElement && this.drawBackgroundImageOnContext(n, t, e), new Promise((o, r) => {\n try {\n s.toBlob((a) => {\n a ? o(a) : r(new Error(\"Failed to create PNG blob\"));\n }, \"image/png\", 1);\n } catch (a) {\n a instanceof DOMException && a.name === \"SecurityError\" ? r(new Error(\"Cannot export: images failed to load with CORS. Check CDN configuration.\")) : r(a);\n }\n });\n }\n /**\n * Load images from content data URLs\n */\n loadContentImages() {\n for (const [t, e] of this.contents)\n if (e.type === \"image\" && !this.loadedImages.has(t) && !this.loadingImages.has(t)) {\n this.loadingImages.add(t);\n const i = new Image();\n i.crossOrigin = \"anonymous\", i.onload = () => {\n this.loadedImages.set(t, i), this.loadingImages.delete(t), this.requestRender();\n }, i.onerror = () => {\n this.loadingImages.delete(t), console.error(\"Failed to load image for area:\", t);\n }, i.src = e.dataUrl;\n }\n for (const t of this.loadedImages.keys()) {\n const e = this.contents.get(t);\n (!e || e.type !== \"image\") && this.loadedImages.delete(t);\n }\n }\n /**\n * Render the canvas\n */\n render() {\n const { ctx: t, canvas: e } = this;\n if (t.fillStyle = \"#f3f4f6\", t.fillRect(0, 0, e.width, e.height), !this.artboard)\n return;\n t.save();\n const i = window.devicePixelRatio || 1;\n t.scale(i, i), t.scale(this.zoom, this.zoom), t.translate(this.pan.x, this.pan.y);\n const { width: s, height: n, backgroundColor: o } = this.artboard;\n t.fillStyle = o, t.fillRect(0, 0, s, n), t.strokeStyle = \"#d1d5db\", t.lineWidth = 1 / this.zoom, t.strokeRect(0, 0, s, n), this.backgroundImage?.position === \"behind\" && this.renderBackgroundImage();\n for (const r of this.areas)\n this.renderAreaWithContent(r);\n this.backgroundImage?.position === \"overlay\" && this.renderBackgroundImage(), this.renderSafeAreaGuide();\n for (const r of this.safeAreaViolations) {\n const a = this.areas.find((u) => u.id === r);\n if (!a)\n continue;\n const { x: d, y: l, width: h, height: p } = a.location;\n t.save(), t.fillStyle = \"rgba(239, 68, 68, 0.15)\", t.fillRect(d, l, h, p), t.restore();\n }\n this.selectedAreaId && this.renderSelectionOverlay(this.selectedAreaId), t.restore();\n }\n /**\n * Render selection overlay with handles\n */\n renderSelectionOverlay(t) {\n const e = this.getContentBounds(t);\n if (!e) {\n const l = this.areas.find((b) => b.id === t);\n if (!l)\n return;\n const { ctx: h } = this, { x: p, y: u, width: g, height: m } = l.location;\n h.save(), h.strokeStyle = \"#3b82f6\", h.lineWidth = 2 / this.zoom, h.setLineDash([]), h.strokeRect(p, u, g, m), h.restore();\n return;\n }\n const { ctx: i } = this, { centerX: s, centerY: n, width: o, height: r, rotation: a } = e;\n i.save(), i.translate(s, n), i.rotate(a * Math.PI / 180), i.strokeStyle = \"#3b82f6\", i.lineWidth = 2 / this.zoom, i.setLineDash([]), i.strokeRect(-o / 2, -r / 2, o, r), i.restore();\n const d = this.getContentHandlePositions(t);\n if (d)\n for (const l of d) {\n i.save();\n const h = this.hoveredHandle === l.type, p = h ? \"#dbeafe\" : \"#ffffff\", u = h ? \"#2563eb\" : \"#3b82f6\";\n if (l.type === \"rotate\") {\n const g = this.getRotatedPoint(s, n - r / 2, s, n, a);\n i.beginPath(), i.strokeStyle = u, i.lineWidth = 1 / this.zoom, i.setLineDash([4 / this.zoom, 4 / this.zoom]), i.moveTo(g.x, g.y), i.lineTo(l.x, l.y), i.stroke(), i.setLineDash([]), i.beginPath(), i.fillStyle = p, i.strokeStyle = u, i.lineWidth = 2 / this.zoom, i.arc(l.x, l.y, l.radius, 0, Math.PI * 2), i.fill(), i.stroke(), i.beginPath(), i.strokeStyle = u, i.lineWidth = 1.5 / this.zoom, i.arc(l.x, l.y, l.radius * 0.5, -Math.PI * 0.8, Math.PI * 0.5), i.stroke();\n } else\n i.fillStyle = p, i.strokeStyle = u, i.lineWidth = 2 / this.zoom, i.fillRect(l.x - l.radius, l.y - l.radius, l.radius * 2, l.radius * 2), i.strokeRect(l.x - l.radius, l.y - l.radius, l.radius * 2, l.radius * 2);\n i.restore();\n }\n }\n /**\n * Rotate a point around a center\n */\n getRotatedPoint(t, e, i, s, n) {\n const o = n * Math.PI / 180, r = Math.cos(o), a = Math.sin(o), d = t - i, l = e - s;\n return {\n x: i + d * r - l * a,\n y: s + d * a + l * r\n };\n }\n /**\n * Render background image\n */\n renderBackgroundImage() {\n if (!this.bgImageElement || !this.artboard || !this.backgroundImage)\n return;\n const { ctx: t } = this, { opacity: e } = this.backgroundImage, { width: i, height: s } = this.artboard;\n t.save(), t.globalAlpha = e;\n const n = this.bgImageElement.naturalWidth / this.bgImageElement.naturalHeight, o = i / s;\n let r, a, d, l;\n n > o ? (a = s, r = s * n, d = (i - r) / 2, l = 0) : (r = i, a = i / n, d = 0, l = (s - a) / 2), t.drawImage(this.bgImageElement, d, l, r, a), t.restore();\n }\n /**\n * Render safe area guide as dashed green rectangle\n */\n renderSafeAreaGuide() {\n if (!this.safeArea || !this.artboard)\n return;\n const { ctx: t } = this, { top: e, right: i, bottom: s, left: n } = this.safeArea, o = n, r = e, a = this.artboard.width - n - i, d = this.artboard.height - e - s;\n a <= 0 || d <= 0 || (t.save(), t.strokeStyle = \"#22c55e\", t.lineWidth = 1 / this.zoom, t.setLineDash([6 / this.zoom, 4 / this.zoom]), t.strokeRect(o, r, a, d), t.setLineDash([]), t.restore());\n }\n /**\n * Render an area with its content\n */\n renderAreaWithContent(t) {\n const { ctx: e } = this, { location: i, backgroundColor: s } = t, { x: n, y: o, width: r, height: a } = i;\n s && (e.fillStyle = s, e.fillRect(n, o, r, a));\n const d = this.contents.get(t.id);\n d && (d.type === \"text\" ? this.renderTextContent(t, d) : d.type === \"image\" && this.renderImageContent(t, d)), this.showAreaBorders && t.showBorder && (e.save(), e.strokeStyle = t.borderColor || \"#3b82f6\", e.lineWidth = 1 / this.zoom, e.setLineDash([4 / this.zoom, 4 / this.zoom]), e.strokeRect(n, o, r, a), e.setLineDash([]), e.restore());\n }\n /**\n * Render text content in an area\n */\n renderTextContent(t, e) {\n if (!e.text.trim())\n return;\n const { ctx: i } = this, { location: s } = t, { x: n, y: o, width: r, height: a } = s, d = e.offset || { x: 0, y: 0 }, l = e.scale ?? 1, h = e.rotation ?? 0, p = n + r / 2 + d.x, u = o + a / 2 + d.y;\n i.save(), i.beginPath(), i.rect(n, o, r, a), i.clip(), i.translate(p, u), i.rotate(h * Math.PI / 180), i.scale(l, l), i.font = `${e.size}px ${e.font}, sans-serif`, i.fillStyle = e.color, i.textBaseline = \"middle\";\n let g;\n switch (e.align) {\n case \"left\":\n i.textAlign = \"left\", g = -r / 2 + 10;\n break;\n case \"right\":\n i.textAlign = \"right\", g = r / 2 - 10;\n break;\n case \"center\":\n default:\n i.textAlign = \"center\", g = 0;\n break;\n }\n i.fillText(e.text, g, 0), i.restore();\n }\n /**\n * Render image content in an area\n */\n renderImageContent(t, e) {\n const i = this.loadedImages.get(t.id);\n if (!i)\n return;\n const { ctx: s } = this, { location: n } = t, { x: o, y: r, width: a, height: d } = n, l = e.offset || { x: 0, y: 0 }, h = e.scale ?? 1, p = e.rotation ?? 0;\n s.save(), s.beginPath(), s.rect(o, r, a, d), s.clip();\n const u = i.naturalWidth / i.naturalHeight, g = a / d;\n let m, b;\n u > g ? (m = a, b = a / u) : (b = d, m = d * u);\n const w = m * h, y = b * h, v = o + a / 2 + l.x, x = r + d / 2 + l.y;\n s.translate(v, x), s.rotate(p * Math.PI / 180), s.drawImage(i, -w / 2, -y / 2, w, y), s.restore();\n }\n /**\n * Draw background image on a specific context (for export)\n */\n drawBackgroundImageOnContext(t, e, i) {\n if (!this.bgImageElement || !this.backgroundImage)\n return;\n const { opacity: s } = this.backgroundImage;\n t.save(), t.globalAlpha = s;\n const n = this.bgImageElement.naturalWidth / this.bgImageElement.naturalHeight, o = e / i;\n let r, a, d, l;\n n > o ? (a = i, r = i * n, d = (e - r) / 2, l = 0) : (r = e, a = e / n, d = 0, l = (i - a) / 2), t.drawImage(this.bgImageElement, d, l, r, a), t.restore();\n }\n /**\n * Draw area content on a specific context (for export)\n */\n drawAreaContentOnContext(t, e) {\n const { location: i, backgroundColor: s } = e, { x: n, y: o, width: r, height: a } = i;\n s && (t.fillStyle = s, t.fillRect(n, o, r, a));\n const d = this.contents.get(e.id);\n if (d) {\n if (d.type === \"text\") {\n if (!d.text.trim())\n return;\n const l = d.offset || { x: 0, y: 0 }, h = d.scale ?? 1, p = d.rotation ?? 0, u = n + r / 2 + l.x, g = o + a / 2 + l.y;\n t.save(), t.beginPath(), t.rect(n, o, r, a), t.clip(), t.translate(u, g), t.rotate(p * Math.PI / 180), t.scale(h, h), t.font = `${d.size}px ${d.font}, sans-serif`, t.fillStyle = d.color, t.textBaseline = \"middle\";\n let m;\n switch (d.align) {\n case \"left\":\n t.textAlign = \"left\", m = -r / 2 + 10;\n break;\n case \"right\":\n t.textAlign = \"right\", m = r / 2 - 10;\n break;\n case \"center\":\n default:\n t.textAlign = \"center\", m = 0;\n break;\n }\n t.fillText(d.text, m, 0), t.restore();\n } else if (d.type === \"image\") {\n const l = this.loadedImages.get(e.id);\n if (!l)\n return;\n const h = d.offset || { x: 0, y: 0 }, p = d.scale ?? 1, u = d.rotation ?? 0;\n t.save(), t.beginPath(), t.rect(n, o, r, a), t.clip();\n const g = l.naturalWidth / l.naturalHeight, m = r / a;\n let b, w;\n g > m ? (b = r, w = r / g) : (w = a, b = a * g);\n const y = b * p, v = w * p, x = n + r / 2 + h.x, C = o + a / 2 + h.y;\n t.translate(x, C), t.rotate(u * Math.PI / 180), t.drawImage(l, -y / 2, -v / 2, y, v), t.restore();\n }\n }\n }\n /**\n * Cleanup resources\n */\n destroy() {\n this.stop(), this.bgImageElement = null, this.loadedImages.clear(), this.loadingImages.clear(), this.eventListeners.clear();\n }\n}\nfunction z(f) {\n const t = f.textOptions;\n return {\n type: \"text\",\n text: t?.defaultText || \"\",\n font: t?.defaultFont || \"Inter\",\n size: t?.defaultSize || 24,\n color: t?.defaultColor || \"#000000\",\n align: t?.defaultAlign || \"center\"\n };\n}\nfunction I(f) {\n return f.contentType === \"text\" || f.contentType === \"both\";\n}\nfunction A(f) {\n return f.contentType === \"image\" || f.contentType === \"both\";\n}\nconst H = 50;\nclass F {\n constructor(t) {\n this.history = [], this.historyIndex = -1, this.listeners = /* @__PURE__ */ new Set(), this.isRestoring = !1, this.state = this.cloneState(t), this.history.push({\n state: this.cloneState(t),\n timestamp: Date.now(),\n description: \"Initial state\"\n }), this.historyIndex = 0;\n }\n getState() {\n return this.state;\n }\n /**\n * Update state and save to history\n */\n setState(t, e, i = !1) {\n const s = this.state;\n this.state = { ...this.state, ...t }, !i && !this.isRestoring && this.saveToHistory(s, e), this.notifyListeners();\n }\n /**\n * Update state without saving to history\n * Use for transient changes like zoom/pan\n */\n update(t) {\n this.state = { ...this.state, ...t }, this.notifyListeners();\n }\n subscribe(t) {\n return this.listeners.add(t), () => this.listeners.delete(t);\n }\n undo() {\n return this.canUndo() ? (this.historyIndex--, this.restoreFromHistory(), !0) : !1;\n }\n redo() {\n return this.canRedo() ? (this.historyIndex++, this.restoreFromHistory(), !0) : !1;\n }\n canUndo() {\n return this.historyIndex > 0;\n }\n canRedo() {\n return this.historyIndex < this.history.length - 1;\n }\n clearHistory() {\n this.history = [], this.historyIndex = -1;\n }\n getHistory() {\n return this.history;\n }\n saveToHistory(t, e) {\n this.historyIndex < this.history.length - 1 && (this.history = this.history.slice(0, this.historyIndex + 1)), this.history.push({\n state: this.cloneState(t),\n timestamp: Date.now(),\n description: e\n }), this.history.length > H && this.history.shift(), this.historyIndex = this.history.length - 1;\n }\n restoreFromHistory() {\n const t = this.history[this.historyIndex];\n t && (this.isRestoring = !0, this.state = this.cloneState(t.state), this.notifyListeners(), this.isRestoring = !1);\n }\n notifyListeners() {\n const t = this.state;\n for (const e of this.listeners)\n try {\n e(t);\n } catch (i) {\n console.error(\"Error in state change listener:\", i);\n }\n }\n /**\n * Deep clone state. Contents are already serialized as Array<[string, AreaContent]>\n * so JSON.parse/stringify works correctly.\n */\n cloneState(t) {\n return JSON.parse(JSON.stringify(t));\n }\n}\nclass L {\n constructor(t) {\n this.listeners = /* @__PURE__ */ new Set(), this.areas = t, this.contents = this.buildInitialContents();\n }\n buildInitialContents() {\n const t = /* @__PURE__ */ new Map();\n for (const e of this.areas)\n I(e) && t.set(e.id, z(e));\n return t;\n }\n getContents() {\n return this.contents;\n }\n getContent(t) {\n return this.contents.get(t);\n }\n setTextContent(t, e) {\n const i = this.contents.get(t), s = this.areas.find((o) => o.id === t), n = s ? z(s) : {\n type: \"text\",\n text: \"\",\n font: \"Inter\",\n size: 24,\n color: \"#000000\",\n align: \"center\"\n };\n i?.type === \"text\" ? this.contents.set(t, { ...i, ...e }) : this.contents.set(t, { ...n, ...e }), this.notify();\n }\n setImageContent(t, e, i, s) {\n const n = this.contents.get(t), o = {\n type: \"image\",\n dataUrl: e,\n filename: i,\n assetId: s?.assetId,\n assetUrl: s?.assetUrl,\n // Preserve transforms from existing image content\n ...n?.type === \"image\" && {\n offset: n.offset,\n scale: n.scale,\n rotation: n.rotation\n }\n };\n this.contents.set(t, o), this.notify();\n }\n clearContent(t) {\n const e = this.areas.find((i) => i.id === t);\n e && I(e) ? this.contents.set(t, z(e)) : this.contents.delete(t), this.notify();\n }\n setContentOffset(t, e) {\n const i = this.contents.get(t);\n i && (this.contents.set(t, { ...i, offset: e }), this.notify());\n }\n setImageScale(t, e) {\n const i = this.contents.get(t);\n if (!i || i.type !== \"image\") return;\n const s = Math.max(0.1, Math.min(5, e));\n this.contents.set(t, { ...i, scale: s }), this.notify();\n }\n setImageRotation(t, e) {\n const i = this.contents.get(t);\n if (!i || i.type !== \"image\") return;\n let s = e % 360;\n s < 0 && (s += 360), this.contents.set(t, { ...i, rotation: s }), this.notify();\n }\n reset() {\n this.contents = this.buildInitialContents(), this.notify();\n }\n /** Serialize for undo/redo (Map -> Array) */\n toJSON() {\n return Array.from(this.contents.entries());\n }\n /** Restore from serialized data */\n fromJSON(t) {\n this.contents = new Map(t), this.notify();\n }\n /** Replace the entire contents map (e.g. from undo/redo) without notification */\n setContentsQuiet(t) {\n this.contents = new Map(t);\n }\n subscribe(t) {\n return this.listeners.add(t), () => this.listeners.delete(t);\n }\n notify() {\n for (const t of this.listeners)\n try {\n t();\n } catch (e) {\n console.error(\"Error in AreaContentManager listener:\", e);\n }\n }\n}\nclass S {\n constructor() {\n this.listeners = /* @__PURE__ */ new Map();\n }\n /**\n * Register an event listener\n *\n * @param event - Event name\n * @param handler - Event handler function\n * @returns Unsubscribe function\n */\n on(t, e) {\n return this.listeners.has(t) || this.listeners.set(t, /* @__PURE__ */ new Set()), this.listeners.get(t).add(e), () => this.off(t, e);\n }\n /**\n * Register a one-time event listener\n *\n * @param event - Event name\n * @param handler - Event handler function\n * @returns Unsubscribe function\n */\n once(t, e) {\n const i = (n) => {\n e(n), this.off(t, i);\n };\n return this.on(t, i);\n }\n /**\n * Remove an event listener\n *\n * @param event - Event name\n * @param handler - Event handler function to remove\n */\n off(t, e) {\n const i = this.listeners.get(t);\n i && (i.delete(e), i.size === 0 && this.listeners.delete(t));\n }\n /**\n * Emit an event to all registered listeners\n *\n * @param event - Event name\n * @param data - Event data\n */\n emit(t, e) {\n const i = this.listeners.get(t);\n if (i) {\n const s = Array.from(i);\n for (const n of s)\n try {\n n(e);\n } catch (o) {\n console.error(`Error in event handler for \"${String(t)}\":`, o);\n }\n }\n }\n /**\n * Remove all listeners for an event, or all listeners if no event specified\n *\n * @param event - Optional event name to clear (clears all if not specified)\n */\n clear(t) {\n t ? this.listeners.delete(t) : this.listeners.clear();\n }\n /**\n * Get the number of listeners for an event\n *\n * @param event - Event name\n * @returns Number of listeners\n */\n listenerCount(t) {\n return this.listeners.get(t)?.size ?? 0;\n }\n}\nclass V extends S {\n constructor() {\n super(...arguments), this.activeTouches = /* @__PURE__ */ new Map(), this.initialPinchDistance = null, this.lastPinchCenter = null, this.isTwoFingerGesture = !1;\n }\n /** Whether a multi-touch gesture is currently active */\n get isMultiTouch() {\n return this.isTwoFingerGesture;\n }\n handleTouchStart(t) {\n for (let e = 0; e < t.changedTouches.length; e++) {\n const i = t.changedTouches[e];\n this.activeTouches.set(i.identifier, {\n x: i.clientX,\n y: i.clientY\n });\n }\n if (this.activeTouches.size === 2) {\n this.isTwoFingerGesture = !0, t.preventDefault();\n const [e, i] = Array.from(this.activeTouches.values());\n this.initialPinchDistance = this.getDistance(e, i), this.lastPinchCenter = this.getCenter(e, i);\n }\n }\n handleTouchMove(t) {\n for (let e = 0; e < t.changedTouches.length; e++) {\n const i = t.changedTouches[e];\n this.activeTouches.set(i.identifier, {\n x: i.clientX,\n y: i.clientY\n });\n }\n if (this.activeTouches.size === 2 && this.initialPinchDistance !== null && this.lastPinchCenter) {\n t.preventDefault();\n const [e, i] = Array.from(this.activeTouches.values()), s = this.getDistance(e, i), n = this.getCenter(e, i), o = s / this.initialPinchDistance;\n this.emit(\"pinch\", {\n scale: o,\n centerX: n.x,\n centerY: n.y\n });\n const r = n.x - this.lastPinchCenter.x, a = n.y - this.lastPinchCenter.y;\n (Math.abs(r) > 0.5 || Math.abs(a) > 0.5) && this.emit(\"pan\", { deltaX: r, deltaY: a }), this.initialPinchDistance = s, this.lastPinchCenter = n;\n }\n }\n handleTouchEnd(t) {\n for (let e = 0; e < t.changedTouches.length; e++) {\n const i = t.changedTouches[e];\n this.activeTouches.delete(i.identifier);\n }\n this.activeTouches.size < 2 && (this.initialPinchDistance = null, this.lastPinchCenter = null, this.isTwoFingerGesture = !1);\n }\n reset() {\n this.activeTouches.clear(), this.initialPinchDistance = null, this.lastPinchCenter = null, this.isTwoFingerGesture = !1;\n }\n getDistance(t, e) {\n const i = e.x - t.x, s = e.y - t.y;\n return Math.sqrt(i * i + s * s);\n }\n getCenter(t, e) {\n return {\n x: (t.x + e.x) / 2,\n y: (t.y + e.y) / 2\n };\n }\n}\nclass $ extends S {\n constructor(t, e, i, s) {\n super(), this.interactionState = { mode: \"idle\" }, this.initialPinchZoom = 1, this.canvas = t, this.engine = e, this.getContents = i, this.getSelectedAreaId = s, this.gestureHandler = new V(), this.boundMouseDown = this.handleMouseDown.bind(this), this.boundMouseMove = this.handleMouseMove.bind(this), this.boundMouseUp = this.handleMouseUp.bind(this), this.boundMouseLeave = this.handleMouseLeave.bind(this), this.boundContextMenu = this.handleContextMenu.bind(this), this.boundDoubleClick = this.handleDoubleClick.bind(this), this.boundTouchStart = this.handleTouchStart.bind(this), this.boundTouchMove = this.handleTouchMove.bind(this), this.boundTouchEnd = this.handleTouchEnd.bind(this), t.addEventListener(\"mousedown\", this.boundMouseDown), t.addEventListener(\"mousemove\", this.boundMouseMove), t.addEventListener(\"mouseup\", this.boundMouseUp), t.addEventListener(\"mouseleave\", this.boundMouseLeave), t.addEventListener(\"contextmenu\", this.boundContextMenu), t.addEventListener(\"dblclick\", this.boundDoubleClick), t.addEventListener(\"touchstart\", this.boundTouchStart, { passive: !1 }), t.addEventListener(\"touchmove\", this.boundTouchMove, { passive: !1 }), t.addEventListener(\"touchend\", this.boundTouchEnd), this.gestureHandler.on(\"pinch\", ({ scale: n }) => {\n const o = Math.max(0.1, Math.min(5, this.initialPinchZoom * n));\n this.emit(\"zoom\", { zoom: o });\n }), this.gestureHandler.on(\"pan\", ({ deltaX: n, deltaY: o }) => {\n const r = this.engine.getPan(), a = this.engine.getZoom();\n this.emit(\"pan\", {\n pan: {\n x: r.x + n / a,\n y: r.y + o / a\n }\n });\n });\n }\n getCanvasPosition(t, e) {\n const i = this.canvas.getBoundingClientRect(), s = window.devicePixelRatio || 1, n = (t - i.left) * s, o = (e - i.top) * s;\n return this.engine.screenToCanvas(n, o);\n }\n handleMouseDown(t) {\n const e = this.getCanvasPosition(t.clientX, t.clientY);\n this.processPointerDown(e);\n }\n handleMouseMove(t) {\n const e = this.getCanvasPosition(t.clientX, t.clientY);\n this.processPointerMove(e);\n }\n handleMouseUp() {\n this.processPointerUp();\n }\n handleMouseLeave() {\n this.processPointerUp(), this.emit(\"cursor\", { cursor: \"default\" });\n }\n handleContextMenu(t) {\n t.preventDefault();\n }\n handleDoubleClick(t) {\n const e = this.getCanvasPosition(t.clientX, t.clientY);\n let i = this.engine.hitTestContent(e.x, e.y);\n i || (i = this.engine.hitTestArea(e.x, e.y) ?? null), this.emit(\"context-menu\", { areaId: i, clientX: t.clientX, clientY: t.clientY });\n }\n handleTouchStart(t) {\n if (this.gestureHandler.handleTouchStart(t), this.gestureHandler.isMultiTouch) {\n this.initialPinchZoom = this.engine.getZoom(), this.interactionState.mode !== \"idle\" && (this.interactionState = { mode: \"idle\" });\n return;\n }\n if (t.touches.length !== 1) return;\n const e = t.touches[0], i = this.getCanvasPosition(e.clientX, e.clientY);\n this.processPointerDown(i) && t.preventDefault();\n }\n handleTouchMove(t) {\n if (this.gestureHandler.handleTouchMove(t), this.gestureHandler.isMultiTouch || t.touches.length !== 1 || this.interactionState.mode === \"idle\") return;\n const e = t.touches[0], i = this.getCanvasPosition(e.clientX, e.clientY);\n this.processPointerMove(i), t.preventDefault();\n }\n handleTouchEnd(t) {\n this.gestureHandler.handleTouchEnd(t), this.gestureHandler.isMultiTouch || this.processPointerUp();\n }\n /**\n * Process pointer down. Returns true if an interaction started.\n */\n processPointerDown(t) {\n const e = this.getSelectedAreaId(), i = this.getContents();\n if (e) {\n const o = this.engine.hitTestHandle(t.x, t.y, e);\n if (o) {\n const r = i.get(e), a = this.engine.getContentBounds(e);\n if (o === \"rotate\" && r?.type === \"image\" && a) {\n const d = Math.atan2(t.y - a.centerY, t.x - a.centerX) * (180 / Math.PI);\n return this.interactionState = {\n mode: \"rotating\",\n areaId: e,\n startRotation: r.rotation ?? 0,\n centerPoint: { x: a.centerX, y: a.centerY },\n startAngle: d\n }, !0;\n } else if (o !== \"rotate\" && r?.type === \"image\" && a)\n return this.interactionState = {\n mode: \"scaling\",\n areaId: e,\n handle: o,\n startScale: r.scale ?? 1,\n startMousePos: t,\n pivotPoint: { x: a.centerX, y: a.centerY }\n }, !0;\n }\n }\n const s = this.engine.hitTestContent(t.x, t.y);\n if (s) {\n if (this.emit(\"area:select\", { areaId: s }), this.engine.isPositioningAllowed(s)) {\n const r = i.get(s)?.offset ?? { x: 0, y: 0 };\n return this.interactionState = {\n mode: \"dragging\",\n areaId: s,\n startOffset: r,\n startMousePos: t\n }, !0;\n }\n return !0;\n }\n const n = this.engine.hitTestArea(t.x, t.y);\n return n ? (this.emit(\"area:select\", { areaId: n }), !1) : (this.emit(\"area:select\", { areaId: null }), !1);\n }\n processPointerMove(t) {\n if (this.interactionState.mode === \"dragging\") {\n const { areaId: e, startOffset: i, startMousePos: s } = this.interactionState, n = t.x - s.x, o = t.y - s.y, r = {\n x: i.x + n,\n y: i.y + o\n }, a = this.engine.getAreaLocation(e);\n if (a) {\n const d = a.width / 2 - 10, l = a.height / 2 - 10;\n r.x = Math.max(-d, Math.min(d, r.x)), r.y = Math.max(-l, Math.min(l, r.y));\n }\n this.emit(\"content:drag\", { areaId: e, offset: r });\n return;\n }\n if (this.interactionState.mode === \"scaling\") {\n const { areaId: e, startScale: i, startMousePos: s, pivotPoint: n } = this.interactionState, o = Math.sqrt(\n Math.pow(s.x - n.x, 2) + Math.pow(s.y - n.y, 2)\n ), r = Math.sqrt(\n Math.pow(t.x - n.x, 2) + Math.pow(t.y - n.y, 2)\n );\n if (o > 0) {\n const a = r / o, d = Math.max(0.1, Math.min(5, i * a));\n this.emit(\"content:scale\", { areaId: e, scale: d });\n }\n return;\n }\n if (this.interactionState.mode === \"rotating\") {\n const { areaId: e, startRotation: i, centerPoint: s, startAngle: n } = this.interactionState, o = Math.atan2(t.y - s.y, t.x - s.x) * (180 / Math.PI);\n let r = i + (o - n);\n r = r % 360, r < 0 && (r += 360);\n const a = [0, 90, 180, 270, 360];\n for (const d of a)\n if (Math.abs(r - d) < 5) {\n r = d === 360 ? 0 : d;\n break;\n }\n this.emit(\"content:rotate\", { areaId: e, rotation: r });\n return;\n }\n this.updateCursor(t);\n }\n processPointerUp() {\n this.interactionState.mode !== \"idle\" && (this.interactionState = { mode: \"idle\" });\n }\n updateCursor(t) {\n const e = this.getSelectedAreaId();\n let i = \"default\";\n if (e) {\n const s = this.engine.hitTestHandle(t.x, t.y, e);\n s ? i = s === \"rotate\" ? \"crosshair\" : s === \"nw\" || s === \"se\" ? \"nwse-resize\" : \"nesw-resize\" : this.engine.hitTestContent(t.x, t.y) === e && (i = this.engine.isPositioningAllowed(e) ? \"move\" : \"pointer\");\n } else\n this.engine.hitTestContent(t.x, t.y) && (i = \"pointer\");\n this.emit(\"cursor\", { cursor: i });\n }\n setSelectedArea(t) {\n this.engine.setSelectedArea(t);\n }\n destroy() {\n this.canvas.removeEventListener(\"mousedown\", this.boundMouseDown), this.canvas.removeEventListener(\"mousemove\", this.boundMouseMove), this.canvas.removeEventListener(\"mouseup\", this.boundMouseUp), this.canvas.removeEventListener(\"mouseleave\", this.boundMouseLeave), this.canvas.removeEventListener(\"contextmenu\", this.boundContextMenu), this.canvas.removeEventListener(\"dblclick\", this.boundDoubleClick), this.canvas.removeEventListener(\"touchstart\", this.boundTouchStart), this.canvas.removeEventListener(\"touchmove\", this.boundTouchMove), this.canvas.removeEventListener(\"touchend\", this.boundTouchEnd), this.gestureHandler.reset(), this.clear();\n }\n}\nclass q {\n constructor(t = \"/api\") {\n this.baseUrl = t;\n }\n async getTemplate(t) {\n try {\n const e = await fetch(`${this.baseUrl}/templates/${t}`);\n if (!e.ok) {\n let s = `Failed to load template (${e.status} ${e.statusText}): ${t}\n\n`;\n throw e.status === 404 ? s += \"Template not found.\" : e.status === 403 ? s += \"Access forbidden.\" : e.status >= 500 && (s += \"Server error.\"), new Error(s);\n }\n return (await e.json()).templateJson;\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(`Network error loading template: ${t}`) : e;\n }\n }\n async getProduct(t) {\n try {\n const e = await fetch(`${this.baseUrl}/products/${t}`);\n if (!e.ok) {\n let i = `Failed to load product (${e.status} ${e.statusText}): ${t}\n\n`;\n throw e.status === 404 ? i += \"Product not found.\" : e.status === 403 ? i += \"Access forbidden.\" : e.status >= 500 && (i += \"Server error.\"), new Error(i);\n }\n return e.json();\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(`Network error loading product: ${t}`) : e;\n }\n }\n async finalizeDesign(t, e, i) {\n try {\n const s = await fetch(`${this.baseUrl}/finalize`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n shopId: t,\n templateId: e.templateId,\n designJson: e,\n ...i?.cartContext && { cartContext: i.cartContext },\n ...i?.customerEmail && { customerEmail: i.customerEmail }\n })\n });\n if (!s.ok) {\n let n = `Failed to finalize design (${s.status} ${s.statusText})\n\n`;\n if (s.status === 400) {\n const o = await s.json().catch(() => ({}));\n n += o.error || \"Invalid design data.\";\n } else s.status === 429 ? n += \"Rate limit exceeded.\" : s.status >= 500 && (n += \"Server error.\");\n throw new Error(n);\n }\n return s.json();\n } catch (s) {\n throw s instanceof Error && s.message.includes(\"Failed to fetch\") ? new Error(\"Network error finalizing design\") : s;\n }\n }\n async finalizeMultiView(t) {\n try {\n const e = t.designs.map((s) => ({\n templateId: s.templateId,\n viewName: s.viewName,\n areaContents: s.contents.map(([n, o]) => {\n const r = { areaId: n, isModified: !0 };\n return o.type === \"text\" ? r.text = {\n content: o.text,\n font: o.font,\n size: o.size,\n color: o.color,\n align: o.align,\n position: { x: o.offset?.x ?? 0, y: o.offset?.y ?? 0 }\n } : o.type === \"image\" && (r.image = {\n assetId: o.assetId || \"inline\",\n assetUrl: o.assetUrl || \"\",\n rotation: o.rotation ?? 0,\n scale: o.scale ?? 1,\n position: { x: o.offset?.x ?? 0, y: o.offset?.y ?? 0 },\n // Only send dataUrl if the image wasn't pre-uploaded\n ...o.assetId ? {} : { dataUrl: o.dataUrl }\n }), r;\n })\n })), i = await fetch(`${this.baseUrl}/finalize`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n productId: t.productId,\n designs: e,\n cartContext: t.cartContext,\n customerId: t.customerId,\n customerEmail: t.customerEmail,\n sessionId: t.sessionId\n })\n });\n if (!i.ok) {\n let s = `Failed to finalize multi-view design (${i.status} ${i.statusText})\n\n`;\n if (i.status === 400) {\n const n = await i.json().catch(() => ({}));\n s += n.error || \"Invalid design data.\";\n } else i.status === 429 ? s += \"Rate limit exceeded.\" : i.status >= 500 && (s += \"Server error.\");\n throw new Error(s);\n }\n return i.json();\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(\"Network error finalizing multi-view design\") : e;\n }\n }\n async getDesignStatus(t) {\n try {\n const e = await fetch(`${this.baseUrl}/designs/${t}/status`);\n if (!e.ok)\n throw new Error(`Failed to check design status (${e.status})`);\n return e.json();\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(\"Network error checking design status\") : e;\n }\n }\n async pollMultiViewStatus(t) {\n try {\n const e = await fetch(\n `${this.baseUrl}/finalize-status?designIds=${t.join(\",\")}`\n );\n if (!e.ok)\n throw new Error(`Failed to check multi-view design status (${e.status})`);\n return e.json();\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(\"Network error checking multi-view design status\") : e;\n }\n }\n async uploadAsset(t, e) {\n try {\n const i = new FormData();\n i.append(\"shopId\", e), i.append(\"file\", t);\n const s = await fetch(`${this.baseUrl}/assets/upload`, {\n method: \"POST\",\n body: i\n });\n if (!s.ok) {\n let n = `Failed to upload asset (${s.status} ${s.statusText})\n\n`;\n if (s.status === 400) {\n const o = await s.json().catch(() => ({}));\n n += o.error || \"Invalid file.\";\n } else s.status === 413 ? n += \"File too large (max 15MB).\" : s.status >= 500 && (n += \"Server error.\");\n throw new Error(n);\n }\n return s.json();\n } catch (i) {\n throw i instanceof Error && i.message.includes(\"Failed to fetch\") ? new Error(\"Network error uploading asset\") : i;\n }\n }\n async getStorageUsage(t) {\n try {\n const e = await fetch(`${this.baseUrl}/assets/usage?shopId=${encodeURIComponent(t)}`);\n if (!e.ok)\n throw new Error(`Failed to fetch storage usage (${e.status})`);\n return e.json();\n } catch (e) {\n throw e instanceof Error && e.message.includes(\"Failed to fetch\") ? new Error(\"Network error fetching storage usage\") : e;\n }\n }\n}\nfunction c(f, t, ...e) {\n const i = document.createElement(f);\n return t && Object.entries(t).forEach(([s, n]) => {\n s === \"class\" ? i.className = n : s in i ? i[s] = n : i.setAttribute(s, String(n));\n }), e.forEach((s) => {\n typeof s == \"string\" ? i.appendChild(document.createTextNode(s)) : i.appendChild(s);\n }), i;\n}\nfunction Z(f, t) {\n let e = null, i = null;\n const s = (...n) => {\n i = n, e && clearTimeout(e), e = setTimeout(() => {\n i && f(...i), e = null, i = null;\n }, t);\n };\n return s.flush = () => {\n e && (clearTimeout(e), e = null), i && (f(...i), i = null);\n }, s.cancel = () => {\n e && (clearTimeout(e), e = null), i = null;\n }, s;\n}\nclass W extends S {\n constructor() {\n super(), this.saveEnabled = !0, this.percentLabel = c(\"span\", { class: \"zoom-percent\" }, \"100%\");\n const t = c(\"button\", {\n class: \"zoom-btn\",\n title: \"Zoom out\"\n }, \"−\");\n t.addEventListener(\"click\", () => this.emit(\"zoom-out\", void 0));\n const e = c(\"button\", {\n class: \"zoom-btn\",\n title: \"Fit to view\"\n }, \"Fit\");\n e.addEventListener(\"click\", () => this.emit(\"zoom-fit\", void 0));\n const i = c(\"button\", {\n class: \"zoom-btn\",\n title: \"Zoom in\"\n }, \"+\");\n i.addEventListener(\"click\", () => this.emit(\"zoom-in\", void 0)), this.viewSelect = document.createElement(\"select\"), this.viewSelect.className = \"view-select\", this.viewSelect.title = \"Switch view\", this.viewSelect.style.display = \"none\", this.viewSelect.addEventListener(\"change\", () => {\n this.emit(\"view-change\", { viewName: this.viewSelect.value });\n }), this.element = c(\"div\", { class: \"zoom-toolbar\" }), this.element.appendChild(t), this.element.appendChild(e), this.element.appendChild(i), this.element.appendChild(this.percentLabel), this.element.appendChild(this.viewSelect);\n const s = c(\"div\", { class: \"zoom-toolbar-spacer\" });\n this.element.appendChild(s), this.saveBtn = c(\"button\", {\n class: \"zoom-btn zoom-save-btn\",\n title: \"Save customization\"\n }, \"✓\"), this.saveBtn.style.display = \"none\", this.saveBtn.addEventListener(\"click\", () => this.emit(\"save\", void 0)), this.element.appendChild(this.saveBtn), this.closeBtn = c(\"button\", {\n class: \"zoom-btn zoom-close-btn\",\n title: \"Close editor\"\n }, \"✕\"), this.closeBtn.addEventListener(\"click\", () => this.emit(\"close\", void 0)), this.element.appendChild(this.closeBtn);\n }\n setZoom(t) {\n this.percentLabel.textContent = `${Math.round(t * 100)}%`;\n }\n showSaveButton(t) {\n this.saveEnabled && (this.saveBtn.style.display = t ? \"\" : \"none\");\n }\n setCloseButtonVisible(t) {\n this.closeBtn.style.display = t ? \"\" : \"none\";\n }\n setSaveButtonEnabled(t) {\n this.saveEnabled = t, t || (this.saveBtn.style.display = \"none\");\n }\n setSaveDisabled(t, e) {\n this.saveBtn.disabled = t, e && (this.saveBtn.textContent = e);\n }\n setViews(t) {\n this.viewSelect.innerHTML = \"\";\n for (const e of t) {\n const i = document.createElement(\"option\");\n i.value = e.viewName, i.textContent = e.viewName, this.viewSelect.appendChild(i);\n }\n this.viewSelect.style.display = t.length > 1 ? \"\" : \"none\";\n }\n setActiveView(t) {\n this.viewSelect.value = t;\n }\n getElement() {\n return this.element;\n }\n}\nconst Y = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/g;\nfunction X(f) {\n return typeof f != \"string\" ? \"\" : f.replace(Y, \"\");\n}\nconst j = /^#[0-9a-fA-F]{6}$/;\nfunction J(f) {\n return typeof f == \"string\" && j.test(f);\n}\nfunction G(f) {\n return typeof f != \"string\" ? \"\" : f.replace(/[\\\\/\\0]/g, \"\");\n}\nconst _ = [\n { label: \"Inter\", value: \"Inter\" },\n { label: \"Arial\", value: \"Arial\" },\n { label: \"Georgia\", value: \"Georgia\" },\n { label: \"Times New Roman\", value: \"Times New Roman\" },\n { label: \"Courier New\", value: \"Courier New\" }\n], K = [\n { label: \"L\", value: \"left\" },\n { label: \"C\", value: \"center\" },\n { label: \"R\", value: \"right\" }\n], R = [\"image/png\", \"image/jpeg\", \"image/webp\", \"image/svg+xml\"], Q = 15 * 1024 * 1024;\nclass D extends S {\n constructor(t) {\n super(), this.mode = \"text\", this.isSelected = !1, this.isUploading = !1, this.textInputEl = null, this.fontSelectEl = null, this.sizeInputEl = null, this.colorInputEl = null, this.alignGroupEl = null, this.area = t;\n const e = I(t), i = A(t);\n this.mode = i && !e ? \"image\" : \"text\", this.element = c(\"div\", { class: \"area-card\" }), this.element.addEventListener(\"click\", (a) => {\n a.target.tagName === \"INPUT\" || a.target.tagName === \"SELECT\" || a.target.tagName === \"BUTTON\" || this.emit(\"select\", { areaId: t.id });\n });\n const s = c(\"div\", { class: \"area-card-header\" }), n = c(\"div\", { class: \"area-card-name-row\" }), o = c(\"span\", { class: \"area-card-name\" }, t.name);\n if (n.appendChild(o), t.required) {\n const a = c(\"span\", { class: \"area-card-badge\" }, \"Required\");\n n.appendChild(a);\n }\n s.appendChild(n);\n const r = c(\"button\", {\n class: \"area-card-reset-btn\",\n title: \"Reset content\"\n }, \"Reset\");\n if (r.addEventListener(\"click\", (a) => {\n a.stopPropagation(), this.emit(\"clear\", { areaId: t.id });\n }), s.appendChild(r), this.element.appendChild(s), e && i) {\n const a = c(\"div\", { class: \"area-card-mode-switcher\" }), d = c(\"button\", {\n class: \"mode-btn mode-btn-active\"\n }, \"Text\");\n d.dataset.mode = \"text\";\n const l = c(\"button\", { class: \"mode-btn\" }, \"Image\");\n l.dataset.mode = \"image\", d.addEventListener(\"click\", (h) => {\n h.stopPropagation(), this.setMode(\"text\"), d.classList.add(\"mode-btn-active\"), l.classList.remove(\"mode-btn-active\"), this.currentContent?.type === \"image\" && this.emit(\"clear\", { areaId: t.id });\n }), l.addEventListener(\"click\", (h) => {\n h.stopPropagation(), this.setMode(\"image\"), l.classList.add(\"mode-btn-active\"), d.classList.remove(\"mode-btn-active\"), this.currentContent?.type === \"text\" && this.emit(\"clear\", { areaId: t.id });\n }), a.appendChild(d), a.appendChild(l), this.element.appendChild(a);\n }\n this.contentContainer = c(\"div\", { class: \"area-card-content\" }), this.element.appendChild(this.contentContainer), this.transformContainer = c(\"div\", { class: \"area-card-transforms\" }), this.element.appendChild(this.transformContainer), this.renderContent();\n }\n setMode(t) {\n this.mode = t, this.renderContent();\n }\n setContent(t) {\n const e = this.currentContent?.type;\n this.currentContent = t, t?.type === \"image\" ? this.mode = \"image\" : e === \"image\" && (this.mode = I(this.area) ? \"text\" : \"image\"), this.element.querySelectorAll(\".mode-btn\").forEach((n) => {\n const o = n;\n o.classList.toggle(\"mode-btn-active\", o.dataset.mode === this.mode);\n }), t?.type !== e || t?.type === \"image\" || t === void 0 ? this.renderContent() : t?.type === \"text\" && this.updateTextValues(t), this.renderTransforms();\n }\n setSelected(t) {\n this.isSelected = t, this.element.classList.toggle(\"area-card-selected\", t), this.renderTransforms();\n }\n updateTextValues(t) {\n this.textInputEl && this.textInputEl.value !== t.text && (this.textInputEl.value = t.text), this.fontSelectEl && this.fontSelectEl.value !== t.font && (this.fontSelectEl.value = t.font), this.sizeInputEl && this.sizeInputEl.value !== String(t.size) && (this.sizeInputEl.value = String(t.size)), this.colorInputEl && this.colorInputEl.value !== t.color && (this.colorInputEl.value = t.color), this.alignGroupEl && this.alignGroupEl.querySelectorAll(\".align-btn\").forEach((e) => {\n const i = e, s = i.title === \"Left\" ? \"left\" : i.title === \"Center\" ? \"center\" : \"right\";\n i.classList.toggle(\"align-btn-active\", s === t.align);\n });\n }\n renderContent() {\n this.contentContainer.innerHTML = \"\", this.textInputEl = null, this.fontSelectEl = null, this.sizeInputEl = null, this.colorInputEl = null, this.alignGroupEl = null;\n const t = I(this.area), e = A(this.area), i = !e || t && e && this.mode === \"text\", s = !t || t && e && this.mode === \"image\";\n t && i && this.renderTextControls(), e && s && this.renderImageControls(), this.applyUploadSpinner();\n }\n renderTextControls() {\n const t = this.currentContent, e = t?.type === \"text\" ? t : z(this.area), i = c(\"input\", {\n class: \"area-input-text\",\n type: \"text\",\n placeholder: this.area.placeholder || \"Enter text...\"\n });\n i.value = e.text, this.area.textOptions?.maxLength && (i.maxLength = this.area.textOptions.maxLength), i.addEventListener(\"input\", () => {\n const l = X(i.value);\n l !== i.value && (i.value = l), this.emit(\"text:change\", { areaId: this.area.id, updates: { text: l } });\n }), this.contentContainer.appendChild(i), this.textInputEl = i;\n const s = c(\"div\", { class: \"area-input-row\" }), n = c(\"select\", { class: \"area-input-font\" });\n for (const l of _) {\n const h = c(\"option\");\n h.value = l.value, h.textContent = l.label, l.value === e.font && (h.selected = !0), n.appendChild(h);\n }\n n.addEventListener(\"change\", () => {\n this.emit(\"text:change\", { areaId: this.area.id, updates: { font: n.value } });\n }), s.appendChild(n), this.fontSelectEl = n;\n const o = c(\"input\", {\n class: \"area-input-size\",\n type: \"number\"\n });\n o.value = String(e.size), o.min = String(this.area.textOptions?.minSize || 8), o.max = String(this.area.textOptions?.maxSize || 200), o.addEventListener(\"change\", () => {\n this.emit(\"text:change\", {\n areaId: this.area.id,\n updates: { size: parseInt(o.value, 10) || 24 }\n });\n }), s.appendChild(o), this.sizeInputEl = o, this.contentContainer.appendChild(s);\n const r = c(\"div\", { class: \"area-input-row\" }), a = c(\"div\", { class: \"area-input-align\" });\n for (const l of K) {\n const h = c(\"button\", {\n class: `align-btn${e.align === l.value ? \" align-btn-active\" : \"\"}`,\n title: l.label === \"L\" ? \"Left\" : l.label === \"C\" ? \"Center\" : \"Right\"\n }, l.label);\n h.addEventListener(\"click\", (p) => {\n p.stopPropagation(), this.emit(\"text:change\", { areaId: this.area.id, updates: { align: l.value } }), a.querySelectorAll(\".align-btn\").forEach((u) => u.classList.remove(\"align-btn-active\")), h.classList.add(\"align-btn-active\");\n }), a.appendChild(h);\n }\n r.appendChild(a), this.alignGroupEl = a;\n const d = c(\"input\", {\n class: \"area-input-color\",\n type: \"color\"\n });\n d.value = e.color, d.addEventListener(\"input\", () => {\n J(d.value) && this.emit(\"text:change\", { areaId: this.area.id, updates: { color: d.value } });\n }), r.appendChild(d), this.colorInputEl = d, this.contentContainer.appendChild(r);\n }\n renderImageControls() {\n const t = this.currentContent;\n if (t?.type === \"image\") {\n const e = c(\"div\", { class: \"area-image-preview\" }), i = c(\"img\", { class: \"area-image-thumb\" });\n i.crossOrigin = \"anonymous\", i.src = t.dataUrl, i.alt = t.filename ? G(t.filename) : \"Uploaded image\", e.appendChild(i);\n const s = c(\"div\", { class: \"area-image-info\" });\n s.appendChild(c(\"span\", { class: \"area-image-name\" }, t.filename || \"Image\"));\n const n = c(\"button\", { class: \"area-image-remove-btn\" }, \"Remove\");\n n.addEventListener(\"click\", (o) => {\n o.stopPropagation(), this.emit(\"clear\", { areaId: this.area.id });\n }), s.appendChild(n), e.appendChild(s), this.contentContainer.appendChild(e);\n } else {\n const e = c(\"button\", { class: \"area-upload-btn\" }, \"Upload Image\"), i = c(\"input\", { type: \"file\" });\n i.accept = R.join(\",\"), i.style.display = \"none\";\n const s = c(\"div\", { class: \"area-validation-error\" });\n s.style.display = \"none\", i.addEventListener(\"change\", () => {\n const n = i.files?.[0];\n if (!n) return;\n if (!R.includes(n.type)) {\n const r = \"Only PNG, JPEG, WebP, and SVG images are accepted\";\n s.textContent = r, s.style.display = \"block\", this.emit(\"validation:error\", { areaId: this.area.id, message: r }), i.value = \"\";\n return;\n }\n if (n.size > Q) {\n const r = \"File must be smaller than 15MB\";\n s.textContent = r, s.style.display = \"block\", this.emit(\"validation:error\", { areaId: this.area.id, message: r }), i.value = \"\";\n return;\n }\n s.style.display = \"none\";\n const o = new FileReader();\n o.onload = () => {\n const r = o.result;\n this.emit(\"image:change\", { areaId: this.area.id, dataUrl: r, filename: n.name });\n }, o.readAsDataURL(n), i.value = \"\";\n }), e.addEventListener(\"click\", (n) => {\n n.stopPropagation(), i.click();\n }), this.contentContainer.appendChild(e), this.contentContainer.appendChild(i), this.contentContainer.appendChild(s);\n }\n }\n renderTransforms() {\n this.transformContainer.innerHTML = \"\";\n const t = this.currentContent;\n if (!this.isSelected || !t) return;\n const e = t.type === \"text\" ? this.area.textOptions?.allowPositioning : this.area.imageOptions?.allowPositioning, i = t.type === \"image\" && this.area.imageOptions?.allowScaling, s = t.type === \"image\" && this.area.imageOptions?.allowRotation;\n if (!e && !i && !s) return;\n const n = c(\"div\", { class: \"area-card-divider\" });\n this.transformContainer.appendChild(n);\n const o = c(\"div\", { class: \"transform-header\" });\n o.appendChild(c(\"span\", { class: \"transform-title\" }, \"Transform\"));\n const r = c(\"button\", { class: \"transform-reset-btn\" }, \"Reset\");\n r.addEventListener(\"click\", (d) => {\n d.stopPropagation(), e && this.emit(\"offset:change\", { areaId: this.area.id, offset: { x: 0, y: 0 } }), i && this.emit(\"scale:change\", { areaId: this.area.id, scale: 1 }), s && this.emit(\"rotation:change\", { areaId: this.area.id, rotation: 0 });\n }), o.appendChild(r), this.transformContainer.appendChild(o);\n const a = t.offset ?? { x: 0, y: 0 };\n if (e) {\n const d = c(\"div\", { class: \"area-input-row\" }), l = c(\"label\", { class: \"transform-label\" }, \"X\"), h = c(\"input\", { class: \"transform-input\", type: \"number\" });\n h.value = String(Math.round(a.x)), h.addEventListener(\"change\", () => {\n this.emit(\"offset:change\", {\n areaId: this.area.id,\n offset: { ...a, x: parseInt(h.value, 10) || 0 }\n });\n });\n const p = c(\"label\", { class: \"transform-label\" }, \"Y\"), u = c(\"input\", { class: \"transform-input\", type: \"number\" });\n u.value = String(Math.round(a.y)), u.addEventListener(\"change\", () => {\n this.emit(\"offset:change\", {\n areaId: this.area.id,\n offset: { ...a, y: parseInt(u.value, 10) || 0 }\n });\n }), d.appendChild(l), d.appendChild(h), d.appendChild(p), d.appendChild(u), this.transformContainer.appendChild(d);\n }\n if (i && t.type === \"image\") {\n const d = t.scale ?? 1, l = c(\"div\", { class: \"area-input-row transform-slider-row\" }), h = c(\"label\", { class: \"transform-label\" }, `Scale: ${Math.round(d * 100)}%`), p = c(\"input\", { class: \"transform-slider\", type: \"range\" });\n p.min = \"10\", p.max = \"500\", p.step = \"5\", p.value = String(Math.round(d * 100)), p.addEventListener(\"input\", () => {\n const u = parseInt(p.value, 10) / 100;\n h.textContent = `Scale: ${Math.round(u * 100)}%`, this.emit(\"scale:change\", { areaId: this.area.id, scale: u });\n }), l.appendChild(h), l.appendChild(p), this.transformContainer.appendChild(l);\n }\n if (s && t.type === \"image\") {\n const d = t.rotation ?? 0, l = c(\"div\", { class: \"area-input-row transform-slider-row\" }), h = c(\"label\", { class: \"transform-label\" }, `Rotation: ${Math.round(d)}°`), p = c(\"input\", { class: \"transform-slider\", type: \"range\" });\n p.min = \"0\", p.max = \"360\", p.step = \"1\", p.value = String(Math.round(d)), p.addEventListener(\"input\", () => {\n const u = parseInt(p.value, 10);\n h.textContent = `Rotation: ${u}°`, this.emit(\"rotation:change\", { areaId: this.area.id, rotation: u });\n }), l.appendChild(h), l.appendChild(p), this.transformContainer.appendChild(l);\n }\n }\n setUploading(t) {\n this.isUploading = t, this.applyUploadSpinner();\n }\n applyUploadSpinner() {\n const t = this.contentContainer.querySelector(\".area-image-preview\");\n if (!t) return;\n const e = t.querySelector(\".area-upload-spinner-overlay\");\n if (this.isUploading && !e) {\n const i = c(\"div\", { class: \"area-upload-spinner-overlay\" });\n i.appendChild(c(\"div\", { class: \"area-upload-spinner\" })), t.appendChild(i);\n } else !this.isUploading && e && e.remove();\n }\n getElement() {\n return this.element;\n }\n}\nclass tt extends S {\n constructor(t) {\n super(), this.cards = /* @__PURE__ */ new Map(), this.isMobile = !1, this.boundEscapeHandler = (s) => {\n s.key === \"Escape\" && this.emit(\"dismiss\", void 0);\n }, this.backdrop = c(\"div\", { class: \"area-panel-backdrop\" }), this.backdrop.addEventListener(\"click\", () => {\n this.emit(\"dismiss\", void 0);\n }), this.element = c(\"div\", { class: \"area-panel\" });\n const e = c(\"div\", { class: \"area-panel-header\" });\n e.appendChild(c(\"span\", { class: \"area-panel-title\" }, \"Customize\"));\n const i = c(\"button\", { class: \"area-panel-close-btn\", title: \"Close\" }, \"×\");\n if (i.addEventListener(\"click\", () => {\n this.emit(\"dismiss\", void 0);\n }), e.appendChild(i), this.element.appendChild(e), this.panelContent = c(\"div\", { class: \"area-panel-content\" }), t.length === 0) {\n const s = c(\"p\", { class: \"area-panel-empty\" }, \"No customization areas defined.\");\n this.panelContent.appendChild(s);\n } else\n for (const s of t) {\n const n = new D(s);\n this.cards.set(s.id, n), n.on(\"text:change\", (o) => this.emit(\"text:change\", o)), n.on(\"image:change\", (o) => this.emit(\"image:change\", o)), n.on(\"clear\", (o) => this.emit(\"clear\", o)), n.on(\"select\", (o) => this.emit(\"select\", o)), n.on(\"offset:change\", (o) => this.emit(\"offset:change\", o)), n.on(\"scale:change\", (o) => this.emit(\"scale:change\", o)), n.on(\"rotation:change\", (o) => this.emit(\"rotation:change\", o)), n.on(\"validation:error\", (o) => this.emit(\"validation:error\", o)), this.panelContent.appendChild(n.getElement());\n }\n this.element.appendChild(this.panelContent);\n }\n setAreas(t) {\n if (this.cards.clear(), this.panelContent.innerHTML = \"\", t.length === 0) {\n const e = c(\"p\", { class: \"area-panel-empty\" }, \"No customization areas defined.\");\n this.panelContent.appendChild(e);\n } else\n for (const e of t) {\n const i = new D(e);\n this.cards.set(e.id, i), i.on(\"text:change\", (s) => this.emit(\"text:change\", s)), i.on(\"image:change\", (s) => this.emit(\"image:change\", s)), i.on(\"clear\", (s) => this.emit(\"clear\", s)), i.on(\"select\", (s) => this.emit(\"select\", s)), i.on(\"offset:change\", (s) => this.emit(\"offset:change\", s)), i.on(\"scale:change\", (s) => this.emit(\"scale:change\", s)), i.on(\"rotation:change\", (s) => this.emit(\"rotation:change\", s)), i.on(\"validation:error\", (s) => this.emit(\"validation:error\", s)), this.panelContent.appendChild(i.getElement());\n }\n }\n setContents(t) {\n for (const [e, i] of this.cards)\n i.setContent(t.get(e));\n }\n setSelectedArea(t) {\n for (const [e, i] of this.cards) {\n const s = e === t;\n i.setSelected(s), i.getElement().style.display = s ? \"\" : \"none\";\n }\n t ? (this.element.classList.add(\"area-panel-visible\"), this.isMobile && this.backdrop.classList.add(\"area-panel-backdrop-visible\"), document.addEventListener(\"keydown\", this.boundEscapeHandler)) : (this.element.classList.remove(\"area-panel-visible\"), this.isMobile && this.backdrop.classList.remove(\"area-panel-backdrop-visible\"), document.removeEventListener(\"keydown\", this.boundEscapeHandler));\n }\n setUploading(t, e) {\n const i = this.cards.get(t);\n i && i.setUploading(e);\n }\n setMobile(t) {\n this.isMobile = t, this.element.classList.toggle(\"area-panel-mobile\", t), t || (this.element.classList.remove(\"area-panel-visible\"), this.backdrop.classList.remove(\"area-panel-backdrop-visible\"));\n }\n getElement() {\n return this.element;\n }\n getBackdrop() {\n return this.backdrop;\n }\n}\nclass et {\n constructor(t = window) {\n this.target = t, this.commands = [], this.isEnabled = !0, this.handleKeyDown = (e) => {\n if (!this.isEnabled) return;\n const i = e.target;\n if (!(i.tagName === \"INPUT\" || i.tagName === \"TEXTAREA\" || i.isContentEditable)) {\n for (const s of this.commands)\n if (this.matchesCommand(e, s)) {\n e.preventDefault(), s.handler(e);\n break;\n }\n }\n }, this.target.addEventListener(\"keydown\", this.handleKeyDown);\n }\n /**\n * Register a keyboard command\n */\n register(t) {\n return this.commands.push(t), () => {\n const e = this.commands.indexOf(t);\n e !== -1 && this.commands.splice(e, 1);\n };\n }\n /**\n * Enable keyboard handling\n */\n enable() {\n this.isEnabled = !0;\n }\n /**\n * Disable keyboard handling\n */\n disable() {\n this.isEnabled = !1;\n }\n /**\n * Check if keyboard handling is enabled\n */\n isActive() {\n return this.isEnabled;\n }\n /**\n * Check if event matches a command\n */\n matchesCommand(t, e) {\n return !(t.key.toLowerCase() !== e.key.toLowerCase() || e.ctrl !== void 0 && e.ctrl !== t.ctrlKey || e.shift !== void 0 && e.shift !== t.shiftKey || e.alt !== void 0 && e.alt !== t.altKey || e.meta !== void 0 && e.meta !== t.metaKey);\n }\n /**\n * Cleanup\n */\n destroy() {\n this.target.removeEventListener(\"keydown\", this.handleKeyDown), this.commands = [];\n }\n}\nfunction it() {\n return /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n}\nfunction st() {\n return it() ? \"meta\" : \"ctrl\";\n}\nfunction nt(f, t, e, i) {\n const s = f / e, n = t / i;\n return Math.min(s, n);\n}\nfunction ot(f, t, e = 8, i = 10, s = 300) {\n const n = nt(f, t, e, i), o = n >= s;\n return {\n actualDPI: Math.round(n),\n targetDPI: s,\n width: f,\n height: t,\n passed: o,\n warning: o ? void 0 : `Image resolution is ${Math.round(n)} DPI at 100% scale. For best print quality, use images with at least ${s} DPI. This may result in pixelated or blurry prints.`\n };\n}\nconst P = ':host{--editor-bg: #f3f4f6;--editor-surface: #ffffff;--editor-border: #e5e7eb;--editor-text: #111827;--editor-text-muted: #6b7280;--editor-primary: #3b82f6;--editor-primary-hover: #2563eb;--editor-danger: #ef4444;--editor-radius: 8px;--editor-radius-sm: 4px;--editor-font: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;--editor-panel-width: 280px;display:block;width:100%;height:100%;font-family:var(--editor-font);font-size:13px;color:var(--editor-text);line-height:1.4}:host([theme=\"dark\"]){--editor-bg: #1f2937;--editor-surface: #374151;--editor-border: #4b5563;--editor-text: #f9fafb;--editor-text-muted: #9ca3af}.editor-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative;overflow:hidden;background:var(--editor-bg)}.layout-desktop .editor-main{display:flex;flex:1;min-height:0}.layout-desktop .canvas-area{flex:1;min-width:0;position:relative;display:flex;flex-direction:column}.layout-desktop .area-panel{width:var(--editor-panel-width);border-left:1px solid var(--editor-border);background:var(--editor-surface);display:none;flex-direction:column;overflow:hidden}.layout-desktop .area-panel.area-panel-visible{display:flex}.layout-mobile .editor-main{display:flex;flex-direction:column;flex:1;min-height:0}.layout-mobile .canvas-area{flex:1;position:relative;display:flex;flex-direction:column;min-height:0}.layout-mobile .area-panel{position:absolute;bottom:0;left:0;right:0;max-height:50%;background:var(--editor-surface);border-top:1px solid var(--editor-border);border-radius:var(--editor-radius) var(--editor-radius) 0 0;box-shadow:0 -4px 20px #00000026;transform:translateY(100%);transition:transform .25s ease-out;z-index:20;display:flex;flex-direction:column;overflow:hidden}.layout-mobile .area-panel.area-panel-visible{transform:translateY(0)}.area-panel-backdrop{display:none}.layout-mobile .area-panel-backdrop{display:block;position:absolute;inset:0;background:#0000004d;z-index:15;opacity:0;pointer-events:none;transition:opacity .25s ease-out}.layout-mobile .area-panel-backdrop.area-panel-backdrop-visible{opacity:1;pointer-events:auto}.zoom-toolbar{display:flex;align-items:center;gap:4px;padding:8px 12px;background:var(--editor-surface);border-bottom:1px solid var(--editor-border)}.zoom-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:var(--editor-surface);color:var(--editor-text);cursor:pointer;font-size:14px;font-family:var(--editor-font);transition:background .15s;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.zoom-btn:hover{background:var(--editor-bg)}.zoom-btn:active{background:var(--editor-border)}.zoom-percent{margin-left:8px;font-size:12px;color:var(--editor-text-muted);min-width:40px}.view-select{margin-left:8px;padding:4px 8px;height:32px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:var(--editor-surface);color:var(--editor-text);font-family:var(--editor-font);font-size:12px;cursor:pointer;-webkit-tap-highlight-color:transparent}.view-select:hover{background:var(--editor-bg)}.view-select:focus{outline:2px solid var(--editor-primary);outline-offset:-1px}.zoom-toolbar-spacer{flex:1}.zoom-close-btn{width:auto;padding:0 12px;font-size:13px;gap:4px}.zoom-save-btn{width:auto;padding:0 16px;margin-left:8px;font-size:13px;font-weight:600;background:var(--editor-primary);color:#fff;border-color:var(--editor-primary)}.zoom-save-btn:hover{background:var(--editor-primary-hover)}.zoom-save-btn:disabled{opacity:.5;cursor:not-allowed}.canvas-wrapper{flex:1;position:relative;overflow:hidden;min-height:200px}.editor-canvas{position:absolute;top:0;left:0;will-change:transform}.area-panel-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--editor-border);flex-shrink:0}.area-panel-title{font-weight:600;font-size:14px}.area-panel-close-btn{width:28px;height:28px;border:none;background:none;color:var(--editor-text-muted);cursor:pointer;font-size:18px;line-height:1;border-radius:var(--editor-radius-sm);display:flex;align-items:center;justify-content:center}.area-panel-close-btn:hover{background:var(--editor-bg);color:var(--editor-text)}.area-panel-content{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px}.area-panel-empty{color:var(--editor-text-muted);font-size:12px;text-align:center;padding:20px 0}.area-card{padding:12px;border:1px solid var(--editor-border);border-radius:var(--editor-radius);background:var(--editor-surface);cursor:pointer;transition:border-color .15s}.area-card:hover{border-color:var(--editor-primary)}.area-card-selected{border-color:var(--editor-primary);box-shadow:0 0 0 1px var(--editor-primary)}.area-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.area-card-name-row{display:flex;align-items:center;gap:6px}.area-card-name{font-weight:600;font-size:13px}.area-card-badge{display:inline-block;padding:1px 6px;font-size:10px;font-weight:500;background:#fef3c7;color:#92400e;border-radius:10px}.area-card-reset-btn{padding:2px 8px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:none;color:var(--editor-text-muted);cursor:pointer;font-size:11px;font-family:var(--editor-font)}.area-card-reset-btn:hover{background:var(--editor-bg);color:var(--editor-danger);border-color:var(--editor-danger)}.area-card-mode-switcher{display:flex;gap:4px;margin-bottom:8px}.mode-btn{flex:1;padding:4px 8px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:var(--editor-surface);color:var(--editor-text);cursor:pointer;font-size:12px;font-family:var(--editor-font);transition:all .15s}.mode-btn-active{background:var(--editor-primary);color:#fff;border-color:var(--editor-primary)}.area-input-text{width:100%;padding:6px 8px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);font-family:var(--editor-font);font-size:13px;color:var(--editor-text);background:var(--editor-surface);box-sizing:border-box;margin-bottom:6px}.area-input-text:focus{outline:none;border-color:var(--editor-primary);box-shadow:0 0 0 1px var(--editor-primary)}.area-input-row{display:flex;gap:6px;align-items:center;margin-bottom:6px}.area-input-font{flex:1;padding:4px 6px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);font-family:var(--editor-font);font-size:12px;color:var(--editor-text);background:var(--editor-surface);min-width:0}.area-input-size{width:56px;padding:4px 6px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);font-family:var(--editor-font);font-size:12px;color:var(--editor-text);background:var(--editor-surface)}.area-input-align{display:flex;gap:2px}.align-btn{width:28px;height:28px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:var(--editor-surface);color:var(--editor-text);cursor:pointer;font-size:12px;font-weight:600;font-family:var(--editor-font)}.align-btn-active{background:var(--editor-primary);color:#fff;border-color:var(--editor-primary)}.area-input-color{width:32px;height:28px;padding:0;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);cursor:pointer;background:none}.area-upload-btn{width:100%;padding:10px;border:2px dashed var(--editor-border);border-radius:var(--editor-radius);background:var(--editor-bg);color:var(--editor-text-muted);cursor:pointer;font-family:var(--editor-font);font-size:12px;text-align:center;transition:all .15s;min-height:44px}.area-upload-btn:hover{border-color:var(--editor-primary);color:var(--editor-primary)}.area-image-preview{display:flex;gap:8px;align-items:center}.area-image-thumb{width:48px;height:48px;object-fit:cover;border-radius:var(--editor-radius-sm);border:1px solid var(--editor-border)}.area-image-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.area-image-name{font-size:12px;color:var(--editor-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.area-image-remove-btn{padding:2px 8px;border:1px solid var(--editor-danger);border-radius:var(--editor-radius-sm);background:none;color:var(--editor-danger);cursor:pointer;font-size:11px;font-family:var(--editor-font);width:fit-content}.area-image-remove-btn:hover{background:#fef2f2}.area-card-divider{height:1px;background:var(--editor-border);margin:8px 0}.transform-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.transform-title{font-weight:600;font-size:12px}.transform-reset-btn{padding:2px 8px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);background:none;color:var(--editor-text-muted);cursor:pointer;font-size:11px;font-family:var(--editor-font)}.transform-reset-btn:hover{background:var(--editor-bg)}.transform-label{font-size:11px;color:var(--editor-text-muted);white-space:nowrap}.transform-input{width:60px;padding:3px 6px;border:1px solid var(--editor-border);border-radius:var(--editor-radius-sm);font-family:var(--editor-font);font-size:12px;color:var(--editor-text);background:var(--editor-surface)}.transform-slider-row{flex-direction:column;align-items:stretch}.transform-slider{width:100%;accent-color:var(--editor-primary)}.area-image-preview{position:relative}.area-upload-spinner-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#fff9;border-radius:var(--editor-radius-sm);z-index:1}:host([theme=\"dark\"]) .area-upload-spinner-overlay{background:#37415199}.area-upload-spinner{width:16px;height:16px;border:2px solid var(--editor-border);border-top-color:var(--editor-primary);border-radius:50%;animation:spin .8s linear infinite}.loading-container{display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-height:200px}.loading-spinner{width:32px;height:32px;border:3px solid var(--editor-border);border-top-color:var(--editor-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.error-container{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;min-height:200px;padding:20px;text-align:center}.error-title{font-weight:600;font-size:16px;color:var(--editor-danger);margin-bottom:8px}.error-message{font-size:13px;color:var(--editor-text-muted);max-width:400px;white-space:pre-wrap}:host(:focus){outline:2px solid var(--editor-primary);outline-offset:-2px}input:focus,select:focus,button:focus-visible{outline:2px solid var(--editor-primary);outline-offset:-1px}.context-menu{position:absolute;z-index:100;min-width:160px;background:var(--editor-surface);border:1px solid var(--editor-border);border-radius:var(--editor-radius);box-shadow:0 4px 12px #00000026;padding:4px 0;font-size:13px}.context-menu-header{padding:6px 12px;font-weight:600;font-size:12px;color:var(--editor-text-muted);user-select:none}.context-menu-divider{height:1px;background:var(--editor-border);margin:4px 0}.context-menu-item{padding:6px 12px;cursor:pointer;color:var(--editor-text);user-select:none;transition:background .1s}.context-menu-item:hover{background:var(--editor-bg)}.context-menu-item:active{background:var(--editor-border)}.context-menu-item-disabled{color:var(--editor-text-muted);cursor:default;pointer-events:none}.editor-toast{position:absolute;top:16px;left:50%;transform:translate(-50%);padding:10px 20px;border-radius:var(--editor-radius);font-size:13px;font-family:var(--editor-font);line-height:1.4;z-index:200;max-width:400px;text-align:center;animation:toast-in .25s ease-out,toast-out .25s ease-in forwards;animation-delay:0s,var(--toast-duration, 3.75s);pointer-events:none;box-shadow:0 4px 12px #00000026}.editor-toast-warning{background:#fef3c7;color:#92400e;border:1px solid #f59e0b}.editor-toast-error{background:#fef2f2;color:#991b1b;border:1px solid var(--editor-danger)}.editor-toast-info{background:#eff6ff;color:#1e40af;border:1px solid var(--editor-primary)}@keyframes toast-in{0%{opacity:0;transform:translate(-50%) translateY(-10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@keyframes toast-out{0%{opacity:1;transform:translate(-50%) translateY(0)}to{opacity:0;transform:translate(-50%) translateY(-10px)}}.editor-modal-overlay{position:absolute;inset:0;background:#0006;z-index:300;display:flex;align-items:center;justify-content:center;animation:modal-overlay-in .2s ease-out}@keyframes modal-overlay-in{0%{opacity:0}to{opacity:1}}.editor-modal{background:var(--editor-surface);border-radius:var(--editor-radius);box-shadow:0 8px 32px #0003;max-width:380px;width:calc(100% - 32px);padding:20px;animation:modal-in .2s ease-out}@keyframes modal-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.editor-modal-title{font-weight:600;font-size:15px;margin-bottom:8px;color:var(--editor-text)}.editor-modal-body{font-size:13px;color:var(--editor-text-muted);margin-bottom:16px;line-height:1.5}.editor-modal-actions{display:flex;justify-content:flex-end;gap:8px}.editor-modal-btn{padding:8px 16px;border-radius:var(--editor-radius-sm);font-size:13px;font-family:var(--editor-font);cursor:pointer;border:1px solid var(--editor-border);background:var(--editor-surface);color:var(--editor-text);transition:background .15s}.editor-modal-btn:hover{background:var(--editor-bg)}.editor-modal-btn-primary{background:var(--editor-primary);color:#fff;border-color:var(--editor-primary)}.editor-modal-btn-primary:hover{background:var(--editor-primary-hover)}.area-validation-error{font-size:11px;color:var(--editor-danger);margin-top:4px}@media(pointer:coarse){.zoom-toolbar{padding:6px 8px;gap:2px}.zoom-btn{min-width:44px;min-height:44px}.zoom-percent{display:none}.view-select{max-width:110px;text-overflow:ellipsis;overflow:hidden;min-height:44px;font-size:16px}.zoom-close-btn,.zoom-save-btn{padding:0 8px}.area-input-text,.area-input-font,.area-input-size{min-height:44px;font-size:16px}.align-btn{min-width:44px;min-height:44px}.area-upload-btn{min-height:48px}}', at = \"2.0.0\", U = 768;\nclass E extends HTMLElement {\n constructor() {\n super(), this.resizeObserver = null, this.isScrolling = !1, this.scrollCleanup = null, this.pendingResizeRect = null, this.pendingUploads = /* @__PURE__ */ new Map(), this.isReady = !1, this.currentTemplate = null, this.loadingTemplateId = null, this.isMobileLayout = !1, this.productViews = [], this.activeViewName = null, this.perViewContents = /* @__PURE__ */ new Map(), this.subscriptions = [], this.renderAbortController = null, this.contentManagerUnsub = null, this.storageUsage = null, this.storageUsageLastRefresh = 0, this.emitChange = Z(() => {\n this.dispatchEvent(\n new CustomEvent(\"change\", {\n detail: { design: this.getDesign() },\n bubbles: !0,\n composed: !0\n })\n );\n }, 300), this.shadow = this.attachShadow({ mode: \"open\" });\n }\n static get observedAttributes() {\n return [\"template-id\", \"product-id\", \"theme\", \"mode\", \"store-id\", \"api-url\", \"show-close-button\", \"show-save-button\"];\n }\n async connectedCallback() {\n try {\n this.hasAttribute(\"tabindex\") || this.setAttribute(\"tabindex\", \"0\"), this.renderLoading(), await this.initialize();\n } catch (t) {\n this.showError(\"Failed to initialize editor\", t);\n }\n }\n disconnectedCallback() {\n this.cleanup();\n }\n attributeChangedCallback(t, e, i) {\n e !== i && (t === \"template-id\" && this.isReady && i && this.loadTemplate(i), t === \"product-id\" && this.isReady && i && this.loadProduct(i), t === \"show-close-button\" && this.zoomToolbar && this.zoomToolbar.setCloseButtonVisible(i !== \"false\"), t === \"show-save-button\" && this.zoomToolbar && this.zoomToolbar.setSaveButtonEnabled(i !== \"false\"));\n }\n // ─── Public API ───\n getDesign() {\n if (!this.currentTemplate) throw new Error(\"No design loaded\");\n return {\n templateId: this.currentTemplate.metadata.id,\n engineVersion: at,\n contents: this.contentManager.toJSON(),\n userData: {}\n };\n }\n setDesign(t) {\n if (t.templateId !== this.currentTemplate?.metadata.id)\n throw new Error(\"Design template ID does not match current template\");\n this.contentManager.fromJSON(t.contents), this.syncEngineContents(), this.stateManager.setState({\n contents: this.contentManager.toJSON(),\n isDirty: !0\n });\n }\n undo() {\n this.stateManager.undo() && this.syncFromState();\n }\n redo() {\n this.stateManager.redo() && this.syncFromState();\n }\n clear() {\n this.contentManager.reset(), this.syncEngineContents(), this.stateManager.setState({\n contents: this.contentManager.toJSON(),\n selectedAreaId: null,\n isDirty: !1\n }), this.zoomToolbar?.showSaveButton(!1), this.engine.setSelectedArea(null), this.inputPanel.setSelectedArea(null), this.engine.fitToView(), this.stateManager.update({\n zoom: this.engine.getZoom(),\n pan: this.engine.getPan()\n });\n }\n selectArea(t) {\n this.handleAreaSelect(t);\n }\n getSelectedAreaId() {\n return this.stateManager.getState().selectedAreaId;\n }\n getActiveView() {\n return this.activeViewName;\n }\n getViews() {\n return this.productViews.map((t) => ({\n viewName: t.viewName,\n viewOrder: t.viewOrder,\n isRequired: t.isRequired,\n isDefault: t.isDefault,\n templateId: t.template.id\n }));\n }\n setActiveView(t) {\n if (this.activeViewName === t) return;\n const e = this.productViews.find((i) => i.viewName === t);\n if (!e) throw new Error(`View not found: ${t}`);\n this.switchToView(e);\n }\n setAreaContent(t, e) {\n e.type === \"text\" ? this.contentManager.setTextContent(t, e) : this.contentManager.setImageContent(t, e.dataUrl, e.filename), this.syncEngineContents(), this.saveContentState();\n }\n getAreaContent(t) {\n return this.contentManager.getContent(t);\n }\n static hasEditorContent(t) {\n return t.type === \"text\" ? t.text.trim().length > 0 : t.type === \"image\" ? !!t.dataUrl : !1;\n }\n validateRequiredContent() {\n const t = [];\n if (this.productViews.length > 1) {\n this.activeViewName && this.contentManager && this.perViewContents.set(this.activeViewName, this.contentManager.toJSON());\n for (const e of this.productViews) {\n const i = this.perViewContents.get(e.viewName), s = i?.some(([, o]) => E.hasEditorContent(o)) ?? !1;\n if (e.isRequired && !s) {\n t.push(`View \"${e.viewName}\" is required`);\n continue;\n }\n const n = e.template.templateJson.areas || [];\n for (const o of n) {\n if (!o.required) continue;\n const r = i?.find(([d]) => d === o.id);\n (r ? E.hasEditorContent(r[1]) : !1) || t.push(`\"${o.name}\" in view \"${e.viewName}\" is required`);\n }\n }\n } else {\n const e = this.currentTemplate?.areas || [], i = this.contentManager.getContents();\n for (const s of e) {\n if (!s.required) continue;\n const n = i.get(s.id);\n (n ? E.hasEditorContent(n) : !1) || t.push(`\"${s.name}\" is required`);\n }\n }\n return t;\n }\n showValidationErrors(t) {\n return new Promise((e) => {\n const i = c(\"div\", { class: \"editor-modal-overlay\" }), s = c(\"div\", { class: \"editor-modal\" });\n s.appendChild(c(\"div\", { class: \"editor-modal-title\" }, \"Required content missing\"));\n const n = c(\"div\", { class: \"editor-modal-body\" }), o = document.createElement(\"ul\");\n o.style.margin = \"8px 0\", o.style.paddingLeft = \"20px\";\n for (const d of t) {\n const l = document.createElement(\"li\");\n l.textContent = d, o.appendChild(l);\n }\n n.appendChild(o), s.appendChild(n);\n const r = c(\"div\", { class: \"editor-modal-actions\" }), a = c(\"button\", { class: \"editor-modal-btn editor-modal-btn-primary\" }, \"OK\");\n a.addEventListener(\"click\", () => {\n i.remove(), e();\n }), r.appendChild(a), s.appendChild(r), i.appendChild(s), i.addEventListener(\"click\", (d) => {\n d.target === i && (i.remove(), e());\n }), this.shadow.appendChild(i);\n });\n }\n async finalize() {\n const t = this.validateRequiredContent();\n if (t.length > 0)\n return await this.showValidationErrors(t), null;\n const e = this.engine.checkSafeAreaViolations();\n if (e.length > 0) {\n const o = this.currentTemplate?.areas || [], r = e.map((d) => o.find((l) => l.id === d)?.name || d).join(\", \");\n if (!await this.showConfirmation(\n \"Content outside safe area\",\n `Content in ${r} extends beyond the safe area. It may be trimmed during printing. Continue?`,\n \"Cancel\",\n \"Proceed Anyway\"\n ))\n throw new Error(\"Finalization cancelled by user\");\n }\n const i = this.getAttribute(\"store-id\") || \"demo-shop\";\n if (this.pendingUploads.size > 0 && await Promise.allSettled(this.pendingUploads.values()), this.productViews.length > 1) {\n this.activeViewName && this.contentManager && this.perViewContents.set(this.activeViewName, this.contentManager.toJSON());\n const o = [];\n for (const p of this.productViews) {\n const u = this.perViewContents.get(p.viewName);\n !u || u.length === 0 || !u.some(([, m]) => E.hasEditorContent(m)) || o.push({\n templateId: p.template.id,\n viewName: p.viewName,\n contents: u\n });\n }\n if (o.length === 0)\n throw new Error(\"No views have content to finalize\");\n const r = this.getAttribute(\"product-id\");\n if (!r)\n throw new Error(\"product-id attribute is required for multi-view finalize\");\n const a = this.getAttribute(\"variant-id\") || void 0, d = await this.apiClient.finalizeMultiView({\n productId: r,\n designs: o,\n cartContext: { productId: r, variantId: a },\n customerEmail: this.getAttribute(\"customer-email\") || void 0\n }), l = d.views.map((p) => ({\n viewName: p.viewName,\n designId: p.designId,\n proofUrl: p.proofUrl || \"\",\n status: p.status\n })), h = l[0];\n return this.dispatchEvent(\n new CustomEvent(\"customizer:finalize\", {\n detail: {\n designId: h.designId,\n proofUrl: h.proofUrl,\n status: \"processing\",\n views: l,\n requestId: d.requestId\n },\n bubbles: !0,\n composed: !0\n })\n ), { ...h, views: l };\n }\n const s = this.getDesign(), n = await this.apiClient.finalizeDesign(i, s, {\n cartContext: {\n productId: this.getAttribute(\"product-id\") || void 0,\n variantId: this.getAttribute(\"variant-id\") || void 0\n },\n customerEmail: this.getAttribute(\"customer-email\") || void 0\n });\n return this.dispatchEvent(\n new CustomEvent(\"customizer:finalize\", {\n detail: {\n designId: n.designId,\n proofUrl: n.proofUrl,\n templateId: s.templateId,\n designJson: s,\n status: n.status\n },\n bubbles: !0,\n composed: !0\n })\n ), n;\n }\n async waitForResult(t, e) {\n const i = e?.pollInterval ?? 1500, s = e?.maxPolls ?? 40, n = e?.signal;\n let o = 0;\n for (; o < s; ) {\n if (n?.aborted)\n throw new DOMException(\"Polling aborted\", \"AbortError\");\n await new Promise((d, l) => {\n const h = setTimeout(d, i);\n n?.addEventListener(\"abort\", () => {\n clearTimeout(h), l(new DOMException(\"Polling aborted\", \"AbortError\"));\n }, { once: !0 });\n }), o++;\n let a;\n if (t.length === 1) {\n const d = await this.apiClient.getDesignStatus(t[0]);\n a = {\n designs: [d],\n allCompleted: d.status !== \"processing\"\n };\n } else\n a = await this.apiClient.pollMultiViewStatus(t);\n if (a.allCompleted)\n return this.dispatchEvent(\n new CustomEvent(\"customizer:render-complete\", {\n detail: a,\n bubbles: !0,\n composed: !0\n })\n ), a;\n }\n const r = {\n designs: t.map((a) => ({\n designId: a,\n status: \"failed\",\n proofUrl: null,\n errorMessage: \"Render timed out\"\n })),\n allCompleted: !0\n };\n return this.dispatchEvent(\n new CustomEvent(\"customizer:render-complete\", {\n detail: r,\n bubbles: !0,\n composed: !0\n })\n ), r;\n }\n // ─── Initialization ───\n renderLoading() {\n const t = document.createElement(\"style\");\n t.textContent = P, this.shadow.appendChild(t);\n const e = c(\n \"div\",\n { class: \"loading-container\" },\n c(\"div\", { class: \"loading-spinner\" })\n );\n this.shadow.appendChild(e);\n }\n async initialize() {\n const t = this.getAttribute(\"api-url\") || \"http://localhost:4000\";\n this.apiClient = new q(`${t.replace(/\\/+$/, \"\")}/public`);\n const e = this.getAttribute(\"product-id\"), i = this.getAttribute(\"template-id\");\n if (!e && !i)\n throw new Error(\"Either template-id or product-id attribute is required\");\n e ? await this.loadProduct(e) : await this.loadTemplate(i), this.isReady = !0, this.dispatchEvent(new CustomEvent(\"ready\", { bubbles: !0, composed: !0 }));\n }\n async loadTemplate(t) {\n if (this.loadingTemplateId !== t) {\n this.loadingTemplateId = t;\n try {\n const e = await this.apiClient.getTemplate(t);\n if (this.loadingTemplateId !== t) return;\n await this.loadTemplateData(e), this.loadingTemplateId = null;\n } catch (e) {\n throw this.loadingTemplateId = null, new Error(`Failed to load template: ${e.message}`);\n }\n }\n }\n async loadTemplateData(t) {\n this.currentTemplate = t;\n const e = t.areas || [];\n this.contentManager = new L(e);\n const i = {\n template: t,\n contents: this.contentManager.toJSON(),\n selectedAreaId: null,\n zoom: 1,\n pan: { x: 0, y: 0 },\n isDirty: !1,\n warnings: []\n };\n this.stateManager = new F(i), this.buildUI(t, e), this.engine = new B(this.canvas), this.engine.setArtboard({\n width: t.artboard.width,\n height: t.artboard.height,\n backgroundColor: t.artboard.backgroundColor ?? \"#ffffff\"\n }), this.engine.setAreas(e), this.engine.setContents(this.contentManager.getContents()), t.backgroundImage && this.engine.setBackgroundImage(t.backgroundImage);\n const s = t.artboard.safeArea ?? t.safeArea;\n s && this.engine.setSafeArea(s), this.engine.start(), requestAnimationFrame(() => {\n if (!this.canvasWrapper || !this.engine) return;\n const o = this.canvasWrapper.getBoundingClientRect();\n o.width > 0 && o.height > 0 && this.handleCanvasResize(o);\n }), this.interaction = new $(\n this.canvas,\n this.engine,\n () => this.contentManager.getContents(),\n () => this.stateManager.getState().selectedAreaId\n ), this.wireInteractionEvents(), this.contentManagerUnsub = this.contentManager.subscribe(() => {\n this.syncEngineContents(), this.inputPanel.setContents(this.contentManager.getContents());\n }), this.subscriptions.push(this.contentManagerUnsub), this.keyboard = new et(this), this.setupKeyboardShortcuts(), this.inputPanel.setContents(this.contentManager.getContents());\n const n = this.getAttribute(\"store-id\");\n n && this.apiClient.getStorageUsage(n).then((o) => {\n this.storageUsage = o, o.usagePercent >= 100 ? this.showToast(\"Storage quota exceeded. Upgrade your plan for more storage.\", \"error\") : o.usagePercent >= 80 && this.showToast(`Storage ${o.usagePercent}% full. Consider upgrading your plan.`, \"warning\");\n }).catch(() => {\n });\n }\n async loadProduct(t) {\n try {\n const e = await this.apiClient.getProduct(t);\n if (e.views.length === 0)\n throw new Error(\"Product has no active templates\");\n this.productViews = e.views, this.perViewContents.clear();\n const i = e.views.find((s) => s.isDefault) || e.views[0];\n await this.loadTemplateData(i.template.templateJson), this.activeViewName = i.viewName, this.zoomToolbar && e.views.length > 1 && (this.zoomToolbar.setViews(this.getViews()), this.zoomToolbar.setActiveView(i.viewName));\n } catch (e) {\n throw new Error(`Failed to load product: ${e.message}`);\n }\n }\n switchToView(t) {\n this.activeViewName && this.contentManager && this.perViewContents.set(this.activeViewName, this.contentManager.toJSON()), this.activeViewName = t.viewName, this.zoomToolbar?.setActiveView(t.viewName);\n const e = t.template.templateJson;\n this.currentTemplate = e;\n const i = e.areas || [];\n this.contentManager = new L(i), this.contentManagerUnsub && this.contentManagerUnsub(), this.contentManagerUnsub = this.contentManager.subscribe(() => {\n this.syncEngineContents(), this.inputPanel.setContents(this.contentManager.getContents());\n });\n const s = this.perViewContents.get(t.viewName);\n s && this.contentManager.fromJSON(s), this.engine.setArtboard({\n width: e.artboard.width,\n height: e.artboard.height,\n backgroundColor: e.artboard.backgroundColor ?? \"#ffffff\"\n }), this.engine.setAreas(i), this.engine.setContents(this.contentManager.getContents()), this.engine.setBackgroundImage(e.backgroundImage ?? void 0);\n const n = e.artboard.safeArea ?? e.safeArea;\n this.engine.setSafeArea(n ?? null), this.engine.fitToView(), this.stateManager.setState({\n template: e,\n contents: this.contentManager.toJSON(),\n selectedAreaId: null,\n isDirty: this.stateManager.getState().isDirty,\n zoom: this.engine.getZoom(),\n pan: this.engine.getPan(),\n warnings: []\n }), this.zoomToolbar.setZoom(this.engine.getZoom()), this.inputPanel.setAreas(i), this.inputPanel.setContents(this.contentManager.getContents()), this.inputPanel.setSelectedArea(null), this.engine.setSelectedArea(null), this.dispatchEvent(\n new CustomEvent(\"view-change\", {\n detail: { viewName: t.viewName },\n bubbles: !0,\n composed: !0\n })\n );\n }\n buildUI(t, e) {\n this.shadow.innerHTML = \"\";\n const i = document.createElement(\"style\");\n i.textContent = P, this.shadow.appendChild(i), this.container = c(\"div\", { class: \"editor-container\" }), this.zoomToolbar = new W(), this.subscriptions.push(this.zoomToolbar.on(\"zoom-in\", () => this.handleZoomIn())), this.subscriptions.push(this.zoomToolbar.on(\"zoom-out\", () => this.handleZoomOut())), this.subscriptions.push(this.zoomToolbar.on(\"zoom-fit\", () => this.handleZoomFit())), this.subscriptions.push(this.zoomToolbar.on(\"view-change\", ({ viewName: l }) => {\n const h = this.productViews.find((p) => p.viewName === l);\n h && this.switchToView(h);\n })), this.subscriptions.push(this.zoomToolbar.on(\"close\", () => {\n this.dispatchEvent(new CustomEvent(\"customizer:close\", {\n bubbles: !0,\n composed: !0\n }));\n })), this.subscriptions.push(this.zoomToolbar.on(\"save\", async () => {\n this.pendingUploads.size > 0 && (this.zoomToolbar.setSaveDisabled(!0, \"Uploading...\"), await Promise.allSettled(this.pendingUploads.values())), this.zoomToolbar.setSaveDisabled(!0, \"Saving...\");\n try {\n const l = await this.finalize();\n if (!l) {\n this.zoomToolbar.setSaveDisabled(!1, \"✓\");\n return;\n }\n const h = this.getAttribute(\"variant-id\");\n if (h)\n try {\n const u = l.views && l.requestId || \"\", g = await fetch(\"/cart/add.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n body: JSON.stringify({\n items: [{\n id: h,\n quantity: 1,\n properties: {\n _design_id: l.designId,\n ...u && { _request_id: u },\n Customized: \"Yes\"\n }\n }]\n })\n });\n if (!g.ok) throw new Error(\"Failed to add to cart\");\n const m = await g.json();\n this.dispatchEvent(new CustomEvent(\"customizer:cart-added\", {\n detail: { designId: l.designId, cart: m },\n bubbles: !0,\n composed: !0\n }));\n } catch (u) {\n console.error(\"Customizer: cart add failed\", u), this.showToast(\"Failed to add to cart. Please try again.\", \"error\");\n }\n this.zoomToolbar.setSaveDisabled(!0, \"Saved!\"), this.showToast(\"Design saved successfully!\", \"info\"), this.dispatchEvent(new CustomEvent(\"customizer:save\", {\n detail: l,\n bubbles: !0,\n composed: !0\n }));\n const p = l.views ? l.views.map((u) => u.designId) : [l.designId];\n this.renderAbortController?.abort(), this.renderAbortController = new AbortController(), this.waitForResult(p, { signal: this.renderAbortController.signal }).catch((u) => {\n u instanceof DOMException && u.name === \"AbortError\" || console.error(\"Customizer: background render polling failed\", u);\n }), setTimeout(() => {\n this.zoomToolbar.setSaveDisabled(!1, \"✓\"), this.zoomToolbar.showSaveButton(!1), this.stateManager.update({ isDirty: !1 });\n }, 2e3);\n } catch (l) {\n console.error(\"Customizer: finalize failed\", l);\n const h = l instanceof Error ? l.message : \"Save failed. Please try again.\";\n this.showToast(h, \"error\"), this.zoomToolbar.setSaveDisabled(!1, \"✓\");\n }\n })), this.getAttribute(\"show-close-button\") === \"false\" && this.zoomToolbar.setCloseButtonVisible(!1), this.getAttribute(\"show-save-button\") === \"false\" && this.zoomToolbar.setSaveButtonEnabled(!1);\n const s = c(\"div\", { class: \"canvas-area\" });\n s.appendChild(this.zoomToolbar.getElement()), this.canvasWrapper = c(\"div\", { class: \"canvas-wrapper\" }), this.canvas = document.createElement(\"canvas\"), this.canvas.className = \"editor-canvas\", this.canvasWrapper.appendChild(this.canvas), s.appendChild(this.canvasWrapper), this.inputPanel = new tt(e), this.wireInputPanelEvents();\n const n = c(\"div\", { class: \"editor-main\" });\n n.appendChild(s), n.appendChild(this.inputPanel.getBackdrop()), n.appendChild(this.inputPanel.getElement()), this.container.appendChild(n), this.shadow.appendChild(this.container);\n const o = this.getBoundingClientRect().width, r = o > 0 && o < U;\n this.container.classList.add(r ? \"layout-mobile\" : \"layout-desktop\"), this.isMobileLayout = r, this.inputPanel.setMobile(r), this.resizeObserver = new ResizeObserver((l) => {\n for (const h of l)\n h.target === this.canvasWrapper && this.handleCanvasResize(h.contentRect), h.target === this.container && this.handleLayoutResize(h.contentRect);\n }), this.resizeObserver.observe(this.canvasWrapper), this.resizeObserver.observe(this.container);\n let a = null;\n const d = () => {\n this.isScrolling = !0, a && clearTimeout(a), a = setTimeout(() => {\n if (this.isScrolling = !1, this.pendingResizeRect) {\n const l = this.pendingResizeRect;\n this.pendingResizeRect = null, this.handleCanvasResize(l);\n }\n }, 200);\n };\n window.addEventListener(\"scroll\", d, { passive: !0 }), this.scrollCleanup = () => {\n window.removeEventListener(\"scroll\", d), a && clearTimeout(a);\n };\n }\n // ─── Event Wiring ───\n wireInteractionEvents() {\n this.subscriptions.push(\n this.interaction.on(\"area:select\", ({ areaId: t }) => {\n this.handleAreaSelect(t);\n })\n ), this.subscriptions.push(\n this.interaction.on(\"content:drag\", ({ areaId: t, offset: e }) => {\n this.contentManager.setContentOffset(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.interaction.on(\"content:scale\", ({ areaId: t, scale: e }) => {\n this.contentManager.setImageScale(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.interaction.on(\"content:rotate\", ({ areaId: t, rotation: e }) => {\n this.contentManager.setImageRotation(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.interaction.on(\"zoom\", ({ zoom: t }) => {\n this.engine.setZoom(t);\n const e = this.engine.getCenteredPan(t);\n e && this.engine.setPan(e), this.stateManager.update({ zoom: this.engine.getZoom(), pan: this.engine.getPan() }), this.zoomToolbar.setZoom(this.engine.getZoom());\n })\n ), this.subscriptions.push(\n this.interaction.on(\"pan\", ({ pan: t }) => {\n this.engine.setPan(t), this.stateManager.update({ pan: t });\n })\n ), this.subscriptions.push(\n this.interaction.on(\"cursor\", ({ cursor: t }) => {\n this.canvas.style.cursor = t;\n })\n ), this.subscriptions.push(\n this.interaction.on(\"context-menu\", ({ areaId: t, clientX: e, clientY: i }) => {\n this.handleContextMenu(t, e, i);\n })\n );\n }\n wireInputPanelEvents() {\n this.subscriptions.push(\n this.inputPanel.on(\"text:change\", ({ areaId: t, updates: e }) => {\n e.text !== void 0 && e.text.length > 1e4 && (e = { ...e, text: e.text.slice(0, 1e4) }), this.contentManager.setTextContent(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"image:change\", async ({ areaId: t, dataUrl: e, filename: i }) => {\n const s = this.contentManager.getContents();\n let n = 0;\n for (const [a, d] of s)\n d.type === \"image\" && a !== t && n++;\n if (n >= 10) {\n this.showToast(\"Maximum of 10 images per design reached\", \"error\");\n return;\n }\n if (await this.refreshStorageUsage(), this.storageUsage && this.storageUsage.usagePercent >= 100) {\n this.showToast(\"Storage quota exceeded. Upgrade your plan for more storage.\", \"error\");\n return;\n }\n const o = this.currentTemplate?.areas.find((a) => a.id === t);\n if (o && this.currentTemplate) {\n const a = this.currentTemplate.print.targetDpi;\n try {\n const d = new Image();\n d.crossOrigin = \"anonymous\";\n const l = await new Promise((g, m) => {\n d.onload = () => g({ width: d.naturalWidth, height: d.naturalHeight }), d.onerror = () => m(new Error(\"Failed to load image\")), d.src = e;\n }), h = o.location.width / a, p = o.location.height / a, u = ot(\n l.width,\n l.height,\n h,\n p,\n a\n );\n if (u.actualDPI < 150) {\n if (!await this.showConfirmation(\n \"Low resolution detected\",\n `This image is ${u.actualDPI} DPI at print size. Print may appear blurry. Recommended: ${a} DPI.`,\n \"Cancel\",\n \"Use Anyway\"\n )) return;\n } else u.actualDPI < a && (this.showToast(\n `Image resolution is ${u.actualDPI} DPI (${a} recommended)`,\n \"warning\"\n ), this.stateManager.update({\n warnings: [\n ...this.stateManager.getState().warnings,\n { type: \"dpi\", message: `${u.actualDPI} DPI`, areaId: t }\n ]\n }));\n } catch {\n }\n }\n this.contentManager.setImageContent(t, e, i), this.saveContentState();\n const r = this.getAttribute(\"store-id\");\n if (r && this.preUploadImage(t, e, r), this.storageUsage) {\n const a = Math.round(e.length * 0.75);\n this.storageUsage.storageUsed += a, this.storageUsage.usagePercent = this.storageUsage.storageQuota > 0 ? Math.round(this.storageUsage.storageUsed / this.storageUsage.storageQuota * 100) : 0;\n }\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"validation:error\", ({ message: t }) => {\n this.showToast(t, \"error\");\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"clear\", ({ areaId: t }) => {\n this.contentManager.clearContent(t), this.syncEngineContents(), this.inputPanel.setContents(this.contentManager.getContents()), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"select\", ({ areaId: t }) => {\n this.handleAreaSelect(t);\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"offset:change\", ({ areaId: t, offset: e }) => {\n this.contentManager.setContentOffset(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"scale:change\", ({ areaId: t, scale: e }) => {\n this.contentManager.setImageScale(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"rotation:change\", ({ areaId: t, rotation: e }) => {\n this.contentManager.setImageRotation(t, e), this.saveContentState();\n })\n ), this.subscriptions.push(\n this.inputPanel.on(\"dismiss\", () => {\n this.handleAreaSelect(null);\n })\n );\n }\n // ─── Handlers ───\n handleAreaSelect(t, e = !1) {\n this.stateManager.update({ selectedAreaId: t }), this.engine.setSelectedArea(t), this.inputPanel.setSelectedArea(e ? t : null), t && document.activeElement !== this && this.focus(), this.dispatchEvent(\n new CustomEvent(\"area:select\", {\n detail: { areaId: t },\n bubbles: !0,\n composed: !0\n })\n );\n }\n handleContextMenu(t, e, i) {\n this.handleAreaSelect(t, !!t);\n }\n handleZoomIn() {\n const t = this.engine.getZoom(), e = Math.min(t * 1.25, 5), i = this.engine.getCenteredPan(e);\n this.engine.setZoom(e), i && this.engine.setPan(i), this.stateManager.update({ zoom: this.engine.getZoom(), pan: this.engine.getPan() }), this.zoomToolbar.setZoom(this.engine.getZoom());\n }\n handleZoomOut() {\n const t = this.engine.getZoom(), e = Math.max(t * 0.8, 0.1), i = this.engine.getCenteredPan(e);\n this.engine.setZoom(e), i && this.engine.setPan(i), this.stateManager.update({ zoom: this.engine.getZoom(), pan: this.engine.getPan() }), this.zoomToolbar.setZoom(this.engine.getZoom());\n }\n handleZoomFit() {\n this.engine.fitToView(), this.stateManager.update({ zoom: this.engine.getZoom(), pan: this.engine.getPan() }), this.zoomToolbar.setZoom(this.engine.getZoom());\n }\n handleCanvasResize(t) {\n const { width: e, height: i } = t;\n if (e === 0 || i === 0) return;\n if (this.isScrolling) {\n this.pendingResizeRect = t;\n return;\n }\n const s = window.devicePixelRatio || 1, n = Math.round(e * s), o = Math.round(i * s);\n this.canvas.width === n && this.canvas.height === o || (this.canvas.width = n, this.canvas.height = o, this.canvas.style.width = `${e}px`, this.canvas.style.height = `${i}px`, this.engine && (this.engine.fitToView(), this.stateManager.update({ zoom: this.engine.getZoom(), pan: this.engine.getPan() }), this.zoomToolbar.setZoom(this.engine.getZoom())));\n }\n handleLayoutResize(t) {\n const e = t.width < U;\n this.container.classList.toggle(\"layout-desktop\", !e), this.container.classList.toggle(\"layout-mobile\", e), e !== this.isMobileLayout && (this.isMobileLayout = e, this.inputPanel.setMobile(e));\n }\n // ─── State Management ───\n async refreshStorageUsage() {\n if (Date.now() - this.storageUsageLastRefresh < 3e4) return;\n const t = this.getAttribute(\"store-id\");\n if (t)\n try {\n this.storageUsage = await this.apiClient.getStorageUsage(t), this.storageUsageLastRefresh = Date.now();\n } catch {\n }\n }\n /**\n * Pre-upload an image to the server so finalize doesn't need to send base64.\n * On success, updates the content manager with assetId/assetUrl.\n * Tracks the promise so finalize() can await it.\n */\n preUploadImage(t, e, i) {\n const s = this.activeViewName, n = this._doPreUpload(t, e, i, s);\n return this.pendingUploads.set(t, n), this.inputPanel?.setUploading(t, !0), this.updateSaveButtonForUploads(), n.finally(() => {\n this.pendingUploads.get(t) === n && this.pendingUploads.delete(t), this.inputPanel?.setUploading(t, !1), this.updateSaveButtonForUploads();\n }), n;\n }\n async _doPreUpload(t, e, i, s) {\n const [n, o] = e.split(\",\"), r = n.match(/:(.*?);/)?.[1] || \"image/png\", a = atob(o), d = new Uint8Array(a.length);\n for (let g = 0; g < a.length; g++) d[g] = a.charCodeAt(g);\n const l = new Blob([d], { type: r }), h = r.split(\"/\")[1] || \"png\", p = new File([l], `upload.${h}`, { type: r });\n let u;\n try {\n u = await this.apiClient.uploadAsset(p, i);\n } catch (g) {\n console.error(\"Customizer: image pre-upload failed\", g), this.showToast(\"Image upload failed. Will retry on save.\", \"warning\");\n return;\n }\n if (this.activeViewName === s) {\n const g = this.contentManager.getContent(t);\n g?.type === \"image\" && g.dataUrl === e && this.contentManager.setImageContent(t, \"\", g.filename, {\n assetId: u.assetId,\n assetUrl: u.publicUrl\n });\n } else if (s) {\n const g = this.perViewContents.get(s);\n if (g) {\n const m = g.map(([b, w]) => {\n if (b === t && w.type === \"image\" && w.dataUrl === e) {\n const { dataUrl: y, ...v } = w;\n return [b, { ...v, assetId: u.assetId, assetUrl: u.publicUrl }];\n }\n return [b, w];\n });\n this.perViewContents.set(s, m);\n }\n }\n }\n saveContentState() {\n this.stateManager.setState({\n contents: this.contentManager.toJSON(),\n isDirty: !0\n }), this.zoomToolbar?.showSaveButton(!0), this.engine.checkSafeAreaViolations(), this.emitChange();\n }\n syncEngineContents() {\n this.engine?.setContents(this.contentManager.getContents());\n }\n syncFromState() {\n const t = this.stateManager.getState();\n this.contentManager.setContentsQuiet(t.contents), this.syncEngineContents(), this.inputPanel.setContents(this.contentManager.getContents()), this.engine.setSelectedArea(t.selectedAreaId), this.inputPanel.setSelectedArea(t.selectedAreaId);\n }\n // ─── Keyboard ───\n setupKeyboardShortcuts() {\n const t = st();\n this.keyboard.register({\n key: \"z\",\n [t]: !0,\n handler: () => this.undo()\n }), this.keyboard.register({\n key: \"z\",\n [t]: !0,\n shift: !0,\n handler: () => this.redo()\n }), this.keyboard.register({\n key: \"Escape\",\n handler: () => this.handleAreaSelect(null)\n });\n }\n updateSaveButtonForUploads() {\n this.zoomToolbar && this.stateManager?.getState().isDirty && (this.pendingUploads.size > 0 ? this.zoomToolbar.setSaveDisabled(!0, \"Uploading...\") : this.zoomToolbar.setSaveDisabled(!1, \"✓\"));\n }\n // ─── Toast & Modal ───\n showToast(t, e = \"info\") {\n const i = c(\"div\", { class: `editor-toast editor-toast-${e}` }, t);\n this.shadow.appendChild(i), setTimeout(() => i.remove(), 4e3);\n }\n showConfirmation(t, e, i = \"Cancel\", s = \"Continue\") {\n return new Promise((n) => {\n const o = c(\"div\", { class: \"editor-modal-overlay\" }), r = c(\"div\", { class: \"editor-modal\" });\n r.appendChild(c(\"div\", { class: \"editor-modal-title\" }, t)), r.appendChild(c(\"div\", { class: \"editor-modal-body\" }, e));\n const a = c(\"div\", { class: \"editor-modal-actions\" }), d = c(\"button\", { class: \"editor-modal-btn\" }, i);\n d.addEventListener(\"click\", () => {\n o.remove(), n(!1);\n });\n const l = c(\"button\", { class: \"editor-modal-btn editor-modal-btn-primary\" }, s);\n l.addEventListener(\"click\", () => {\n o.remove(), n(!0);\n }), a.appendChild(d), a.appendChild(l), r.appendChild(a), o.appendChild(r), o.addEventListener(\"click\", (h) => {\n h.target === o && (o.remove(), n(!1));\n }), this.shadow.appendChild(o);\n });\n }\n // ─── Error / Cleanup ───\n showError(t, e) {\n this.shadow.innerHTML = \"\";\n const i = document.createElement(\"style\");\n i.textContent = P, this.shadow.appendChild(i);\n const s = c(\"div\", { class: \"error-container\" });\n s.appendChild(c(\"div\", { class: \"error-title\" }, t)), s.appendChild(c(\"div\", { class: \"error-message\" }, e?.message ?? \"\")), this.shadow.appendChild(s), this.dispatchEvent(\n new CustomEvent(\"error\", {\n detail: { message: t, error: e },\n bubbles: !0,\n composed: !0\n })\n );\n }\n cleanup() {\n this.renderAbortController?.abort(), this.renderAbortController = null;\n for (const t of this.subscriptions)\n t();\n this.subscriptions = [], this.resizeObserver && (this.resizeObserver.disconnect(), this.resizeObserver = null), this.scrollCleanup && (this.scrollCleanup(), this.scrollCleanup = null), this.engine?.destroy(), this.interaction?.destroy(), this.keyboard?.destroy(), this.isReady = !1, this.currentTemplate = null, this.productViews = [], this.activeViewName = null, this.perViewContents.clear();\n }\n}\ncustomElements.get(\"customizer-editor\") || customElements.define(\"customizer-editor\", E);\nexport {\n E as CustomizerEditor\n};\n//# sourceMappingURL=customizer.esm.js.map\n","/**\n * Shared TypeScript types for the Customizer SDK\n * @packageDocumentation\n */\n\n// ── Scene-engine types (inlined to avoid unpublished @customizer/* dependency) ──\n\n/**\n * 2D transformation properties for positioning and transforming layers\n */\nexport interface Transform {\n x: number;\n y: number;\n rotation: number;\n scaleX: number;\n scaleY: number;\n}\n\nexport type LayerType = 'text' | 'image' | 'shape';\n\nexport interface BaseLayer {\n id: string;\n type: LayerType;\n name: string;\n locked: boolean;\n visible: boolean;\n transform: Transform;\n zIndex: number;\n}\n\nexport type TextAlign = 'left' | 'center' | 'right' | 'justify';\n\nexport interface TextLayer extends BaseLayer {\n type: 'text';\n fontFamily: string;\n fontSize: number;\n color: string;\n align: TextAlign;\n content: string;\n fontWeight?: number | string;\n lineHeight?: number;\n letterSpacing?: number;\n clipX?: number;\n clipY?: number;\n clipWidth?: number;\n clipHeight?: number;\n}\n\nexport interface ImageCrop {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface ImageLayer extends BaseLayer {\n type: 'image';\n assetId: string;\n crop?: ImageCrop;\n opacity: number;\n fitWidth?: number;\n fitHeight?: number;\n clipX?: number;\n clipY?: number;\n clipWidth?: number;\n clipHeight?: number;\n}\n\nexport type ShapeType = 'rectangle' | 'circle' | 'ellipse' | 'line';\n\nexport interface Stroke {\n color: string;\n width: number;\n}\n\nexport interface ShapeLayer extends BaseLayer {\n type: 'shape';\n shapeType: ShapeType;\n width: number;\n height: number;\n fill: string;\n stroke?: Stroke;\n}\n\nexport type Layer = TextLayer | ImageLayer | ShapeLayer;\n\nexport interface SafeArea {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport interface Artboard {\n width: number;\n height: number;\n bleed: number;\n safeArea?: SafeArea;\n backgroundColor: string;\n}\n\nexport interface Scene {\n artboard: Artboard;\n layers: Layer[];\n engineVersion: string;\n}\n\n/**\n * Design JSON format returned by the editor\n */\nexport interface DesignJSON {\n version: string;\n scene: Scene;\n metadata?: {\n createdAt?: string;\n modifiedAt?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * View info for products with multiple templates\n */\nexport interface ViewInfo {\n viewName: string;\n viewOrder: number;\n isRequired: boolean;\n isDefault: boolean;\n templateId: string;\n}\n\n/**\n * Configuration options for initializing the customizer\n */\nexport interface CustomizerOptions {\n /**\n * Template ID to load. Required unless productId is provided.\n */\n templateId?: string;\n\n /**\n * Product ID to load (fetches all views/templates for the product).\n * Alternative to templateId. Exactly one of templateId or productId must be provided.\n */\n productId?: string;\n\n /**\n * API base URL for fetching templates and finalizing designs\n * @default 'https://api.varianta.io'\n */\n apiUrl?: string;\n\n /**\n * Visual theme\n * @default 'light'\n */\n theme?: 'light' | 'dark';\n\n /**\n * Editor mode\n * @default 'edit'\n */\n mode?: 'edit' | 'preview';\n\n /**\n * Enable debug mode with additional logging\n * @default false\n */\n debug?: boolean;\n\n /**\n * Custom CSS class to add to the editor container\n */\n className?: string;\n\n /**\n * Initial design data to load\n */\n initialDesign?: DesignJSON;\n\n // Event handlers\n /**\n * Called when the editor is ready\n */\n onReady?: (instance: CustomizerInstance) => void;\n\n /**\n * Called when the design changes\n */\n onChange?: (design: DesignJSON) => void;\n\n /**\n * Called when a layer is selected\n */\n onLayerSelect?: (layerId: string | null) => void;\n\n /**\n * Called when a layer is added\n */\n onLayerAdd?: (layerId: string) => void;\n\n /**\n * Called when a layer is removed\n */\n onLayerRemove?: (layerId: string) => void;\n\n /**\n * Called when a layer is updated\n */\n onLayerUpdate?: (layerId: string) => void;\n\n /**\n * Called when an error occurs\n */\n onError?: (error: CustomizerError) => void;\n\n /**\n * Called when finalization is complete\n */\n onFinalize?: (result: FinalizeResult) => void;\n\n /**\n * Called when the active view changes (only relevant when using productId)\n */\n onViewChange?: (viewName: string) => void;\n\n /**\n * Called when the background render completes (after finalize returned instantly).\n * Receives the final render status for all design IDs.\n */\n onRenderComplete?: (result: RenderStatusResult) => void;\n\n /**\n * Show the Close button in the toolbar\n * @default true\n */\n showCloseButton?: boolean;\n\n /**\n * Show the Save Customization button in the toolbar.\n * When false, the button never appears even when the design is dirty.\n * @default true\n */\n showSaveButton?: boolean;\n\n /**\n * Called when the Close button is clicked\n */\n onClose?: () => void;\n\n /**\n * Called when the Save button is clicked and finalization completes successfully\n */\n onSave?: (result: FinalizeResult) => void;\n}\n\n/**\n * Type-safe error codes for the customizer SDK\n */\nexport type ErrorCode =\n | 'INIT_ERROR'\n | 'NOT_READY'\n | 'NOT_INITIALIZED'\n | 'VALIDATION_ERROR'\n | 'FINALIZE_ERROR'\n | 'NETWORK_ERROR'\n | 'POLL_TIMEOUT'\n | 'FINALIZE_CANCELLED'\n | 'UNKNOWN_ERROR';\n\n/**\n * Typed error class for the customizer SDK.\n * Extends Error so it works with try/catch and instanceof checks.\n */\nexport class CustomizerError extends Error {\n readonly code: ErrorCode;\n readonly details?: unknown;\n\n constructor(code: ErrorCode, message: string, details?: unknown) {\n super(message);\n Object.setPrototypeOf(this, CustomizerError.prototype);\n this.name = 'CustomizerError';\n this.code = code;\n this.details = details;\n }\n}\n\n/**\n * Result of polling for render completion (returned by waitForResult)\n */\nexport interface RenderStatusResult {\n designs: Array<{\n designId: string;\n status: 'processing' | 'completed' | 'failed';\n proofUrl: string | null;\n errorMessage: string | null;\n }>;\n allCompleted: boolean;\n}\n\n/**\n * Result of the finalize operation\n */\nexport interface FinalizeResult {\n designId: string;\n status: 'processing' | 'completed' | 'failed';\n proofUrl: string | null;\n errorMessage: string | null;\n requestId?: string;\n views?: Array<{\n viewName: string;\n designId: string;\n status: string;\n proofUrl: string | null;\n }>;\n}\n\n/**\n * Methods available on a customizer instance\n */\nexport interface CustomizerInstance {\n /**\n * Get the current design as JSON\n */\n getDesign(): DesignJSON;\n\n /**\n * Set the design from JSON\n */\n setDesign(design: DesignJSON): void;\n\n /**\n * Undo the last action\n */\n undo(): void;\n\n /**\n * Redo the last undone action\n */\n redo(): void;\n\n /**\n * Check if undo is available\n */\n canUndo(): boolean;\n\n /**\n * Check if redo is available\n */\n canRedo(): boolean;\n\n /**\n * Finalize the design and generate print-ready files.\n * Returns immediately after API submission (status: 'processing').\n * @param signal Optional AbortSignal to cancel the request\n */\n finalize(signal?: AbortSignal): Promise<FinalizeResult>;\n\n /**\n * Poll for render completion after finalize().\n * Resolves when all designs are completed or failed, or on timeout.\n */\n waitForResult(designIds: string[], options?: {\n pollInterval?: number;\n maxPolls?: number;\n signal?: AbortSignal;\n }): Promise<RenderStatusResult>;\n\n /**\n * Add a text layer\n */\n addTextLayer(text?: string): void;\n\n /**\n * Add an image layer\n */\n addImageLayer(url: string): Promise<void>;\n\n /**\n * Remove a layer by ID\n */\n removeLayer(layerId: string): void;\n\n /**\n * Select a layer by ID\n */\n selectLayer(layerId: string | null): void;\n\n /**\n * Get the selected layer ID\n */\n getSelectedLayerId(): string | null;\n\n /**\n * Get the currently active view name (null if not using productId)\n */\n getActiveView(): string | null;\n\n /**\n * Get all available views (empty array if not using productId)\n */\n getViews(): ViewInfo[];\n\n /**\n * Switch to a different view by name\n */\n setActiveView(viewName: string): void;\n\n /**\n * Set the theme\n */\n setTheme(theme: 'light' | 'dark'): void;\n\n /**\n * Set the mode\n */\n setMode(mode: 'edit' | 'preview'): void;\n\n /**\n * Destroy the editor instance and clean up\n */\n destroy(): void;\n\n /**\n * Get the underlying Web Component element\n */\n getElement(): HTMLElement;\n}\n\n/**\n * Event detail types\n */\nexport interface ReadyEventDetail {\n templateId: string;\n}\n\nexport interface ChangeEventDetail {\n design: DesignJSON;\n}\n\nexport interface LayerSelectEventDetail {\n layerId: string | null;\n}\n\nexport interface LayerAddEventDetail {\n layerId: string;\n}\n\nexport interface LayerRemoveEventDetail {\n layerId: string;\n}\n\nexport interface LayerUpdateEventDetail {\n layerId: string;\n}\n\nexport interface ErrorEventDetail {\n error: CustomizerError;\n}\n\n/**\n * Web Component element interface for type safety\n */\nexport interface CustomizerEditorElement extends HTMLElement {\n getDesign(): DesignJSON;\n setDesign(design: DesignJSON): void;\n undo(): void;\n redo(): void;\n canUndo(): boolean;\n canRedo(): boolean;\n finalize(signal?: AbortSignal): Promise<FinalizeResult>;\n waitForResult(designIds: string[], options?: {\n pollInterval?: number;\n maxPolls?: number;\n signal?: AbortSignal;\n }): Promise<RenderStatusResult>;\n addTextLayer(text?: string): void;\n addImageLayer(url: string): Promise<void>;\n removeLayer(layerId: string): void;\n selectLayer(layerId: string | null): void;\n getSelectedLayerId(): string | null;\n getActiveView(): string | null;\n getViews(): ViewInfo[];\n setActiveView(viewName: string): void;\n}\n\n","/**\n * Input validation utilities for the SDK public API boundary.\n * Pure functions, no dependencies beyond types.\n */\n\nimport { CustomizerError } from './types';\n\n/** Control characters that can corrupt SVG/PDF output (0x00-0x08, 0x0B-0x0C, 0x0E-0x1F) */\nconst CONTROL_CHARS_RE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/g;\n\nconst MAX_TEXT_LENGTH = 10_000;\n\n/**\n * Validate that a URL uses http: or https: protocol.\n * Blocks javascript:, data:, vbscript:, etc.\n */\nexport function validateApiUrl(url: string): void {\n if (typeof url !== 'string' || url.trim() === '') {\n throw new CustomizerError('VALIDATION_ERROR', 'apiUrl must be a non-empty string');\n }\n const lower = url.trim().toLowerCase();\n if (!lower.startsWith('http://') && !lower.startsWith('https://')) {\n throw new CustomizerError('VALIDATION_ERROR', 'apiUrl must use http:// or https:// protocol');\n }\n}\n\n/**\n * Validate that a value is a non-empty string.\n */\nexport function validateId(value: unknown, name: string): void {\n if (typeof value !== 'string' || value.trim() === '') {\n throw new CustomizerError('VALIDATION_ERROR', `${name} must be a non-empty string`);\n }\n}\n\n/**\n * Validate and sanitize text input.\n * Strips control characters and enforces max length.\n * @returns Sanitized text\n */\nexport function validateText(text: string): string {\n if (typeof text !== 'string') {\n throw new CustomizerError('VALIDATION_ERROR', 'text must be a string');\n }\n const sanitized = text.replace(CONTROL_CHARS_RE, '');\n if (sanitized.length > MAX_TEXT_LENGTH) {\n throw new CustomizerError('VALIDATION_ERROR', `text exceeds maximum length of ${MAX_TEXT_LENGTH} characters`);\n }\n return sanitized;\n}\n\n/**\n * Strip control characters from text without throwing.\n */\nexport function sanitizeText(text: string): string {\n if (typeof text !== 'string') return '';\n return text.replace(CONTROL_CHARS_RE, '');\n}\n\n/**\n * Validate an image URL. Allows http:, https:, data:image/*, and blob: protocols.\n * Blocks javascript:, vbscript:, and non-image data: URIs.\n */\nexport function validateImageUrl(url: string): void {\n if (typeof url !== 'string' || url.trim() === '') {\n throw new CustomizerError('VALIDATION_ERROR', 'image URL must be a non-empty string');\n }\n if (!isSafeUrl(url)) {\n throw new CustomizerError('VALIDATION_ERROR', 'image URL uses a disallowed protocol');\n }\n}\n\n/**\n * Check whether a URL is safe for use as an image source.\n * Allows http:, https:, data:image/*, and blob:.\n */\nexport function isSafeUrl(url: string): boolean {\n if (typeof url !== 'string') return false;\n const trimmed = url.trim().toLowerCase();\n if (trimmed.startsWith('https://') || trimmed.startsWith('http://')) return true;\n if (trimmed.startsWith('blob:')) return true;\n if (trimmed.startsWith('data:image/')) return true;\n // Everything else (javascript:, data:text/*, vbscript:, file:, etc.) is blocked\n return false;\n}\n\n/**\n * Validate an array of design IDs (non-empty array of non-empty strings).\n */\nexport function validateDesignIds(ids: unknown): void {\n if (!Array.isArray(ids) || ids.length === 0) {\n throw new CustomizerError('VALIDATION_ERROR', 'designIds must be a non-empty array');\n }\n for (let i = 0; i < ids.length; i++) {\n if (typeof ids[i] !== 'string' || (ids[i] as string).trim() === '') {\n throw new CustomizerError('VALIDATION_ERROR', `designIds[${i}] must be a non-empty string`);\n }\n }\n}\n","/**\n * Vanilla JavaScript SDK for Customizer Editor\n * @packageDocumentation\n */\n\n// Side-effect: registers <customizer-editor> web component.\n// Using namespace import so tsc omits it from .d.ts (value-only usage).\nimport * as _editorModule from '@customizer/editor';\nvoid _editorModule;\nimport {\n CustomizerError,\n type CustomizerOptions,\n type CustomizerInstance,\n type DesignJSON,\n type FinalizeResult,\n type RenderStatusResult,\n type CustomizerEditorElement,\n type ViewInfo,\n} from '../types';\nimport {\n validateApiUrl,\n validateId,\n validateText,\n validateImageUrl,\n validateDesignIds,\n} from '../validation';\n\n/**\n * Initialize the customizer editor\n *\n * @param elementOrSelector - DOM element or CSS selector where to mount the editor\n * @param options - Configuration options\n * @returns CustomizerInstance with methods to control the editor\n *\n * @example\n * ```typescript\n * import { initCustomizer } from '@varianta/sdk';\n *\n * const editor = initCustomizer('#editor', {\n * templateId: 'tshirt-001',\n * theme: 'light',\n * onReady: () => console.log('Editor ready!'),\n * onChange: (design) => console.log('Design changed:', design),\n * });\n *\n * // Get current design\n * const design = editor.getDesign();\n *\n * // Finalize design\n * const result = await editor.finalize();\n * ```\n */\nexport function initCustomizer(\n elementOrSelector: HTMLElement | string,\n options: CustomizerOptions\n): CustomizerInstance {\n // Resolve the container element\n const container =\n typeof elementOrSelector === 'string'\n ? document.querySelector<HTMLElement>(elementOrSelector)\n : elementOrSelector;\n\n if (!container) {\n throw new CustomizerError(\n 'INIT_ERROR',\n `Container not found: ${\n typeof elementOrSelector === 'string'\n ? elementOrSelector\n : 'provided element is null'\n }`\n );\n }\n\n // Validate that exactly one of templateId or productId is provided\n if (!options.templateId && !options.productId) {\n throw new CustomizerError('INIT_ERROR', 'Either templateId or productId must be provided');\n }\n if (options.templateId && options.productId) {\n throw new CustomizerError('INIT_ERROR', 'Only one of templateId or productId should be provided, not both');\n }\n\n // Validate IDs\n if (options.templateId) validateId(options.templateId, 'templateId');\n if (options.productId) validateId(options.productId, 'productId');\n if (options.apiUrl) validateApiUrl(options.apiUrl);\n\n // Create the editor element\n const editorElement = document.createElement('customizer-editor') as unknown as CustomizerEditorElement;\n\n // Set attributes\n if (options.productId) {\n editorElement.setAttribute('product-id', options.productId);\n } else {\n editorElement.setAttribute('template-id', options.templateId!);\n }\n if (options.theme) {\n editorElement.setAttribute('theme', options.theme);\n }\n if (options.mode) {\n editorElement.setAttribute('mode', options.mode);\n }\n if (options.className) {\n editorElement.classList.add(options.className);\n }\n if (options.showCloseButton === false) {\n editorElement.setAttribute('show-close-button', 'false');\n }\n if (options.showSaveButton === false) {\n editorElement.setAttribute('show-save-button', 'false');\n }\n // Apply custom styles if needed\n editorElement.style.width = '100%';\n editorElement.style.height = '100%';\n\n // Event listeners tracking\n const listeners: Array<{ event: string; handler: EventListener }> = [];\n\n const addEventListener = (event: string, handler: EventListener) => {\n editorElement.addEventListener(event, handler);\n listeners.push({ event, handler });\n };\n\n // Mount the editor first\n container.innerHTML = '';\n container.appendChild(editorElement);\n\n // Create the instance API BEFORE setting up event handlers\n const instance: CustomizerInstance = {\n getDesign(): DesignJSON {\n if (typeof editorElement.getDesign !== 'function') {\n throw new CustomizerError('NOT_READY', 'Editor not ready: getDesign method not available');\n }\n return editorElement.getDesign();\n },\n\n setDesign(design: DesignJSON): void {\n if (design == null || typeof design !== 'object') {\n throw new CustomizerError('VALIDATION_ERROR', 'design must be a non-null object');\n }\n if (typeof editorElement.setDesign !== 'function') {\n throw new CustomizerError('NOT_READY', 'Editor not ready: setDesign method not available');\n }\n editorElement.setDesign(design);\n },\n\n undo(): void {\n if (typeof editorElement.undo !== 'function') {\n throw new CustomizerError('NOT_READY', 'Editor not ready: undo method not available');\n }\n editorElement.undo();\n },\n\n redo(): void {\n if (typeof editorElement.redo !== 'function') {\n throw new CustomizerError('NOT_READY', 'Editor not ready: redo method not available');\n }\n editorElement.redo();\n },\n\n canUndo(): boolean {\n if (typeof editorElement.canUndo !== 'function') {\n return false;\n }\n return editorElement.canUndo();\n },\n\n canRedo(): boolean {\n if (typeof editorElement.canRedo !== 'function') {\n return false;\n }\n return editorElement.canRedo();\n },\n\n async finalize(signal?: AbortSignal): Promise<FinalizeResult> {\n const apiUrl = options.apiUrl || 'https://api.varianta.io';\n validateApiUrl(apiUrl);\n\n try {\n // Multi-view path: delegate to the web component which uses batch API\n if (options.productId && typeof editorElement.finalize === 'function') {\n const editorResult = await (editorElement as any).finalize();\n const result: FinalizeResult = {\n designId: editorResult.designId,\n status: 'processing',\n proofUrl: editorResult.proofUrl ?? null,\n errorMessage: null,\n requestId: editorResult.requestId,\n views: editorResult.views,\n };\n\n // Dispatch DOM event for theme integrations (e.g., add to cart with _design_id)\n container.dispatchEvent(new CustomEvent('customizer:finalize', {\n bubbles: true,\n detail: result,\n }));\n\n if (options.onFinalize) {\n options.onFinalize(result);\n }\n return result;\n }\n\n // Single-template path — submit and return immediately\n const design = this.getDesign();\n const response = await fetch(`${apiUrl}/public/finalize`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n templateId: (design as unknown as Record<string, unknown>).templateId || options.templateId,\n designJson: design,\n }),\n signal,\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({\n message: 'Finalization failed',\n }));\n throw new CustomizerError('FINALIZE_ERROR', error.message || 'Finalization failed');\n }\n\n const body = await response.json();\n const result: FinalizeResult = {\n designId: body.designId,\n status: body.status,\n proofUrl: body.proofUrl ?? null,\n errorMessage: body.errorMessage ?? null,\n };\n\n // Dispatch DOM event for theme integrations (e.g., add to cart with _design_id)\n container.dispatchEvent(new CustomEvent('customizer:finalize', {\n bubbles: true,\n detail: result,\n }));\n\n if (options.onFinalize) {\n options.onFinalize(result);\n }\n\n return result;\n } catch (error) {\n // Handle AbortController cancellation\n if (error instanceof DOMException && error.name === 'AbortError') {\n const cancelError = new CustomizerError('FINALIZE_CANCELLED', 'Finalization was cancelled', error);\n if (options.onError) {\n options.onError(cancelError);\n }\n throw cancelError;\n }\n\n const customizerError = error instanceof CustomizerError\n ? error\n : new CustomizerError(\n 'FINALIZE_ERROR',\n error instanceof Error ? error.message : 'Unknown error',\n error,\n );\n\n if (options.onError) {\n options.onError(customizerError);\n }\n\n throw customizerError;\n }\n },\n\n async waitForResult(designIds: string[], waitOptions?: {\n pollInterval?: number;\n maxPolls?: number;\n signal?: AbortSignal;\n }): Promise<RenderStatusResult> {\n validateDesignIds(designIds);\n // Delegate to the web component's waitForResult if available\n if (typeof editorElement.waitForResult === 'function') {\n const result = await editorElement.waitForResult(designIds, waitOptions);\n if (options.onRenderComplete) {\n options.onRenderComplete(result);\n }\n return result;\n }\n\n // Fallback: poll the status endpoint directly\n const apiUrl = options.apiUrl || 'https://api.varianta.io';\n const pollInterval = waitOptions?.pollInterval ?? 1500;\n const maxPolls = waitOptions?.maxPolls ?? 40;\n const signal = waitOptions?.signal;\n let polls = 0;\n\n while (polls < maxPolls) {\n if (signal?.aborted) {\n throw new DOMException('Polling aborted', 'AbortError');\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, pollInterval);\n signal?.addEventListener('abort', () => {\n clearTimeout(timer);\n reject(new DOMException('Polling aborted', 'AbortError'));\n }, { once: true });\n });\n polls++;\n\n let result: RenderStatusResult;\n if (designIds.length === 1) {\n const statusRes = await fetch(`${apiUrl}/public/designs/${designIds[0]}/status`);\n if (!statusRes.ok) throw new CustomizerError('NETWORK_ERROR', 'Failed to check design status');\n const single = await statusRes.json();\n result = {\n designs: [single],\n allCompleted: single.status !== 'processing',\n };\n } else {\n const statusRes = await fetch(\n `${apiUrl}/public/finalize-status?designIds=${designIds.join(',')}`\n );\n if (!statusRes.ok) throw new CustomizerError('NETWORK_ERROR', 'Failed to check design status');\n result = await statusRes.json();\n }\n\n if (result.allCompleted) {\n if (options.onRenderComplete) {\n options.onRenderComplete(result);\n }\n return result;\n }\n }\n\n // Timed out\n const timeoutResult: RenderStatusResult = {\n designs: designIds.map(id => ({\n designId: id,\n status: 'failed' as const,\n proofUrl: null,\n errorMessage: 'Render timed out',\n })),\n allCompleted: true,\n };\n\n if (options.onRenderComplete) {\n options.onRenderComplete(timeoutResult);\n }\n\n return timeoutResult;\n },\n\n addTextLayer(text?: string): void {\n if (text !== undefined) {\n text = validateText(text);\n }\n if (typeof editorElement.addTextLayer !== 'function') {\n throw new CustomizerError('NOT_READY', 'Editor not ready: addTextLayer method not available');\n }\n editorElement.addTextLayer(text);\n },\n\n async addImageLayer(url: string): Promise<void> {\n validateImageUrl(url);\n if (typeof editorElement.addImageLayer !== 'function') {\n throw new CustomizerError('NOT_READY', 'Editor not ready: addImageLayer method not available');\n }\n return editorElement.addImageLayer(url);\n },\n\n removeLayer(layerId: string): void {\n validateId(layerId, 'layerId');\n if (typeof editorElement.removeLayer !== 'function') {\n throw new CustomizerError('NOT_READY', 'Editor not ready: removeLayer method not available');\n }\n editorElement.removeLayer(layerId);\n },\n\n selectLayer(layerId: string | null): void {\n if (layerId !== null) validateId(layerId, 'layerId');\n if (typeof editorElement.selectLayer !== 'function') {\n throw new CustomizerError('NOT_READY', 'Editor not ready: selectLayer method not available');\n }\n editorElement.selectLayer(layerId);\n },\n\n getSelectedLayerId(): string | null {\n if (typeof editorElement.getSelectedLayerId !== 'function') {\n return null;\n }\n return editorElement.getSelectedLayerId();\n },\n\n getActiveView(): string | null {\n if (typeof editorElement.getActiveView !== 'function') {\n return null;\n }\n return editorElement.getActiveView();\n },\n\n getViews(): ViewInfo[] {\n if (typeof editorElement.getViews !== 'function') {\n return [];\n }\n return editorElement.getViews();\n },\n\n setActiveView(viewName: string): void {\n validateId(viewName, 'viewName');\n if (typeof editorElement.setActiveView !== 'function') {\n throw new CustomizerError('NOT_READY', 'Editor not ready: setActiveView method not available');\n }\n editorElement.setActiveView(viewName);\n },\n\n setTheme(theme: 'light' | 'dark'): void {\n editorElement.setAttribute('theme', theme);\n },\n\n setMode(mode: 'edit' | 'preview'): void {\n editorElement.setAttribute('mode', mode);\n },\n\n destroy(): void {\n // Remove all event listeners\n listeners.forEach(({ event, handler }) => {\n editorElement.removeEventListener(event, handler);\n });\n\n // Remove the element from DOM\n if (editorElement.parentNode) {\n editorElement.parentNode.removeChild(editorElement);\n }\n },\n\n getElement(): HTMLElement {\n return editorElement;\n },\n };\n\n // NOW set up event handlers (after instance is fully created)\n if (options.onReady) {\n addEventListener('ready', (() => {\n options.onReady?.(instance);\n }) as EventListener);\n }\n\n if (options.onChange) {\n addEventListener('change', ((e: CustomEvent) => {\n const design = e.detail.design;\n options.onChange?.(design);\n }) as EventListener);\n }\n\n if (options.onLayerSelect) {\n addEventListener('layer:select', ((e: CustomEvent) => {\n options.onLayerSelect?.(e.detail.layerId);\n }) as EventListener);\n }\n\n if (options.onLayerAdd) {\n addEventListener('layer:add', ((e: CustomEvent) => {\n options.onLayerAdd?.(e.detail.layerId);\n }) as EventListener);\n }\n\n if (options.onLayerRemove) {\n addEventListener('layer:remove', ((e: CustomEvent) => {\n options.onLayerRemove?.(e.detail.layerId);\n }) as EventListener);\n }\n\n if (options.onLayerUpdate) {\n addEventListener('layer:update', ((e: CustomEvent) => {\n options.onLayerUpdate?.(e.detail.layerId);\n }) as EventListener);\n }\n\n if (options.onError) {\n addEventListener('error', ((e: CustomEvent) => {\n const detail = e.detail;\n const error = detail instanceof CustomizerError\n ? detail\n : new CustomizerError(\n 'UNKNOWN_ERROR',\n typeof detail === 'string'\n ? detail\n : detail?.message ?? detail?.error?.message ?? 'Unknown error',\n detail instanceof Error ? detail : detail?.error,\n );\n options.onError?.(error);\n }) as EventListener);\n }\n\n if (options.onViewChange) {\n addEventListener('view-change', ((e: CustomEvent) => {\n options.onViewChange?.(e.detail.viewName);\n }) as EventListener);\n }\n\n if (options.onRenderComplete) {\n addEventListener('customizer:render-complete', ((e: CustomEvent) => {\n options.onRenderComplete?.(e.detail);\n }) as EventListener);\n }\n\n if (options.onClose) {\n addEventListener('customizer:close', (() => {\n options.onClose?.();\n }) as EventListener);\n }\n\n if (options.onSave) {\n addEventListener('customizer:save', ((e: CustomEvent) => {\n options.onSave?.(e.detail);\n }) as EventListener);\n }\n\n // Set initial design if provided\n if (options.initialDesign) {\n // Wait for the editor to be ready before setting the design\n editorElement.addEventListener(\n 'ready',\n () => {\n if (options.initialDesign) {\n editorElement.setDesign(options.initialDesign);\n }\n },\n { once: true }\n );\n }\n\n if (options.debug) {\n console.log('[Customizer SDK] Initialized with options:', options);\n console.log('[Customizer SDK] Instance:', instance);\n }\n\n return instance;\n}\n\n/**\n * Re-export types for convenience\n */\nexport type * from '../types';\n"],"names":["t","e","r","a","d","l","u","g","m","b","w","v","x","C","M","T","p","y","k","N","O","z","f","I","A","H","F","L","S","n","V","$","q","s","c","Z","W","Y","j","J","G","_","K","R","Q","D","o","tt","et","it","st","nt","ot","P","at","U","CustomizerError","code","message","details","CONTROL_CHARS_RE","MAX_TEXT_LENGTH","validateApiUrl","url","lower","validateId","value","name","validateText","text","sanitized","validateImageUrl","isSafeUrl","trimmed","validateDesignIds","ids","i","initCustomizer","elementOrSelector","options","container","editorElement","listeners","addEventListener","event","handler","instance","design","signal","apiUrl","editorResult","result","response","error","body","cancelError","customizerError","designIds","waitOptions","pollInterval","maxPolls","polls","resolve","reject","timer","statusRes","single","timeoutResult","id","layerId","viewName","theme","mode","detail"],"mappings":"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"}
|