@bluechaine/print-designer 0.1.1 → 0.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../node_modules/@iconify/iconify/dist/iconify.mjs","../../node_modules/@iconify-icons/lucide/align-center.js","../../node_modules/@iconify-icons/lucide/align-center-vertical.js","../../node_modules/@iconify-icons/lucide/align-end-vertical.js","../../node_modules/@iconify-icons/lucide/align-justify.js","../../node_modules/@iconify-icons/lucide/align-left.js","../../node_modules/@iconify-icons/lucide/align-right.js","../../node_modules/@iconify-icons/lucide/align-start-vertical.js","../../node_modules/@iconify-icons/lucide/arrow-down.js","../../node_modules/@iconify-icons/lucide/arrow-down-to-line.js","../../node_modules/@iconify-icons/lucide/arrow-up.js","../../node_modules/@iconify-icons/lucide/arrow-up-to-line.js","../../node_modules/@iconify-icons/lucide/barcode.js","../../node_modules/@iconify-icons/lucide/bold.js","../../node_modules/@iconify-icons/lucide/boxes.js","../../node_modules/@iconify-icons/lucide/chevron-down.js","../../node_modules/@iconify-icons/lucide/circle.js","../../node_modules/@iconify-icons/lucide/clipboard-paste.js","../../node_modules/@iconify-icons/lucide/code-2.js","../../node_modules/@iconify-icons/lucide/copy.js","../../node_modules/@iconify-icons/lucide/copy-plus.js","../../node_modules/@iconify-icons/lucide/eraser.js","../../node_modules/@iconify-icons/lucide/eye.js","../../node_modules/@iconify-icons/lucide/flip-horizontal.js","../../node_modules/@iconify-icons/lucide/flip-vertical.js","../../node_modules/@iconify-icons/lucide/history.js","../../node_modules/@iconify-icons/lucide/image.js","../../node_modules/@iconify-icons/lucide/layout-grid.js","../../node_modules/@iconify-icons/lucide/list-tree.js","../../node_modules/@iconify-icons/lucide/lock.js","../../node_modules/@iconify-icons/lucide/minus.js","../../node_modules/@iconify-icons/lucide/panel-left.js","../../node_modules/@iconify-icons/lucide/plus.js","../../node_modules/@iconify-icons/lucide/qr-code.js","../../node_modules/@iconify-icons/lucide/redo-2.js","../../node_modules/@iconify-icons/lucide/rotate-cw.js","../../node_modules/@iconify-icons/lucide/save.js","../../node_modules/@iconify-icons/lucide/scan-eye.js","../../node_modules/@iconify-icons/lucide/scissors.js","../../node_modules/@iconify-icons/lucide/separator-horizontal.js","../../node_modules/@iconify-icons/lucide/separator-vertical.js","../../node_modules/@iconify-icons/lucide/sliders-horizontal.js","../../node_modules/@iconify-icons/lucide/square.js","../../node_modules/@iconify-icons/lucide/table.js","../../node_modules/@iconify-icons/lucide/trash-2.js","../../node_modules/@iconify-icons/lucide/type.js","../../node_modules/@iconify-icons/lucide/undo-2.js","../../node_modules/@iconify-icons/lucide/unlock.js","../../node_modules/@iconify-icons/lucide/x.js","../../node_modules/@iconify-icons/lucide/zoom-in.js","../../node_modules/@iconify-icons/lucide/zoom-out.js","../../node_modules/@iconify-icons/lucide/move.js","../../node_modules/@iconify-icons/lucide/pencil-line.js","../../node_modules/@iconify-icons/lucide/align-horizontal-distribute-center.js","../../src/core/register-icons.ts","../../src/constants/icons.ts","../../src/constants.ts","../../src/core/hiprint-paper-list.ts","../../src/constants/default-table-element.ts","../../src/types.ts","../../src/core/svp-element-provider.ts","../../src/core/providers.ts","../../src/core/hiprint-bridge.ts","../../src/core/plugins.ts","../../src/core/stores.ts","../../src/core/history-labels.ts","../../src/core/history.ts","../../src/core/shortcuts.ts","../../src/core/storage.ts","../../src/core/json-editor-modal.ts","../../src/core/template-fields.ts","../../src/i18n/zh-CN.ts","../../src/i18n/en-US.ts","../../src/i18n/index.ts","../../src/core/designer-utils.ts","../../src/composables/useDesigner.ts","../../src/composables/useRuler.ts","../../src/core/theme.ts","../../src/constants/panel-layout.ts","../../src/core/designer-options.ts","../../src/constants/header-elements.ts","../../node_modules/@iconify/vue2/dist/iconify.mjs","../../src/components/SvpIcon.vue","../../src/components/Header.vue","../../src/composables/useDesignerUi.ts","../../src/components/Toolbar.vue","../../src/core/preview-html.ts","../../src/components/Preview.vue","../../src/components/JsonEditorModal.vue","../../src/components/PrintDataEditorModal.vue","../../src/composables/useDragBox.ts","../../src/components/DragBox.vue","../../src/components/panels/DraggableElsPanel.vue","../../src/components/panels/MiniMapPanel.vue","../../src/components/panels/PageStructurePanel.vue","../../src/components/panels/PageHistoryPanel.vue","../../src/components/panels/PropertiesPanel.vue","../../src/components/Designer.vue","../../src/components/Ruler.vue","../../plugins/plugin-api-pdf/src/index.ts","../../plugins/plugin-api-image/src/index.ts","../../plugins/plugin-view-code-edit/src/index.ts","../../src/index.ts"],"sourcesContent":["/**\n* (c) Iconify\n*\n* For the full copyright and license information, please view the license.txt or license.gpl.txt\n* files at https://github.com/iconify/iconify\n*\n* Licensed under MIT.\n*\n* @license MIT\n* @version 3.1.1\n*/\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n const colonSeparated = value.split(\":\");\n if (value.slice(0, 1) === \"@\") {\n if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n return null;\n }\n provider = colonSeparated.shift().slice(1);\n }\n if (colonSeparated.length > 3 || !colonSeparated.length) {\n return null;\n }\n if (colonSeparated.length > 1) {\n const name2 = colonSeparated.pop();\n const prefix = colonSeparated.pop();\n const result = {\n // Allow provider without '@': \"provider:prefix:name\"\n provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n prefix,\n name: name2\n };\n return validate && !validateIconName(result) ? null : result;\n }\n const name = colonSeparated[0];\n const dashSeparated = name.split(\"-\");\n if (dashSeparated.length > 1) {\n const result = {\n provider,\n prefix: dashSeparated.shift(),\n name: dashSeparated.join(\"-\")\n };\n return validate && !validateIconName(result) ? null : result;\n }\n if (allowSimpleName && provider === \"\") {\n const result = {\n provider,\n prefix: \"\",\n name\n };\n return validate && !validateIconName(result, allowSimpleName) ? null : result;\n }\n return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n if (!icon) {\n return false;\n }\n return !!((icon.provider === \"\" || icon.provider.match(matchIconName)) && (allowSimpleName && icon.prefix === \"\" || icon.prefix.match(matchIconName)) && icon.name.match(matchIconName));\n};\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n return data;\n}\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n return {\n provider,\n prefix,\n icons: /* @__PURE__ */ Object.create(null),\n missing: /* @__PURE__ */ new Set()\n };\n}\nfunction getStorage(provider, prefix) {\n const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n if (!quicklyValidateIconSet(data)) {\n return [];\n }\n return parseIconSet(data, (name, icon) => {\n if (icon) {\n storage.icons[name] = icon;\n } else {\n storage.missing.add(name);\n }\n });\n}\nfunction addIconToStorage(storage, name, icon) {\n try {\n if (typeof icon.body === \"string\") {\n storage.icons[name] = { ...icon };\n return true;\n }\n } catch (err) {\n }\n return false;\n}\nfunction listIcons(provider, prefix) {\n let allIcons = [];\n const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n providers.forEach((provider2) => {\n const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n prefixes.forEach((prefix2) => {\n const storage = getStorage(provider2, prefix2);\n allIcons = allIcons.concat(\n Object.keys(storage.icons).map(\n (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n )\n );\n });\n });\n return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n if (typeof allow === \"boolean\") {\n simpleNames = allow;\n }\n return simpleNames;\n}\nfunction getIconData(name) {\n const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n if (icon) {\n const storage = getStorage(icon.provider, icon.prefix);\n const iconName = icon.name;\n return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n }\n}\nfunction addIcon(name, data) {\n const icon = stringToIcon(name, true, simpleNames);\n if (!icon) {\n return false;\n }\n const storage = getStorage(icon.provider, icon.prefix);\n return addIconToStorage(storage, icon.name, data);\n}\nfunction addCollection(data, provider) {\n if (typeof data !== \"object\") {\n return false;\n }\n if (typeof provider !== \"string\") {\n provider = data.provider || \"\";\n }\n if (simpleNames && !provider && !data.prefix) {\n let added = false;\n if (quicklyValidateIconSet(data)) {\n data.prefix = \"\";\n parseIconSet(data, (name, icon) => {\n if (icon && addIcon(name, icon)) {\n added = true;\n }\n });\n }\n return added;\n }\n const prefix = data.prefix;\n if (!validateIconName({\n provider,\n prefix,\n name: \"a\"\n })) {\n return false;\n }\n const storage = getStorage(provider, prefix);\n return !!addIconSet(storage, data);\n}\nfunction iconExists(name) {\n return !!getIconData(name);\n}\nfunction getIcon(name) {\n const result = getIconData(name);\n return result ? {\n ...defaultIconProps,\n ...result\n } : null;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n // Dimensions\n ...defaultIconSizeCustomisations,\n // Transformations\n ...defaultIconTransformations\n});\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = '<g transform=\"' + transformations.join(\" \") + '\">' + body + \"</g>\";\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const attributes = {};\n const setAttr = (prop, value) => {\n if (!isUnsetKeyword(value)) {\n attributes[prop] = value.toString();\n }\n };\n setAttr(\"width\", width);\n setAttr(\"height\", height);\n attributes.viewBox = box.left.toString() + \" \" + box.top.toString() + \" \" + boxWidth.toString() + \" \" + boxHeight.toString();\n return {\n attributes,\n body\n };\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n // Allowed characters before id: [#;\"]\n // Allowed characters after id: [)\"], .[a-z]\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + suffix + \"$3\"\n );\n });\n body = body.replace(new RegExp(suffix, \"g\"), \"\");\n return body;\n}\n\nconst browserStorageConfig = {\n local: true,\n session: true\n};\nconst browserStorageEmptyItems = {\n local: /* @__PURE__ */ new Set(),\n session: /* @__PURE__ */ new Set()\n};\nlet browserStorageStatus = false;\nfunction setBrowserStorageStatus(status) {\n browserStorageStatus = status;\n}\n\nconst browserCacheVersion = \"iconify2\";\nconst browserCachePrefix = \"iconify\";\nconst browserCacheCountKey = browserCachePrefix + \"-count\";\nconst browserCacheVersionKey = browserCachePrefix + \"-version\";\nconst browserStorageHour = 36e5;\nconst browserStorageCacheExpiration = 168;\n\nfunction getStoredItem(func, key) {\n try {\n return func.getItem(key);\n } catch (err) {\n }\n}\nfunction setStoredItem(func, key, value) {\n try {\n func.setItem(key, value);\n return true;\n } catch (err) {\n }\n}\nfunction removeStoredItem(func, key) {\n try {\n func.removeItem(key);\n } catch (err) {\n }\n}\n\nfunction setBrowserStorageItemsCount(storage, value) {\n return setStoredItem(storage, browserCacheCountKey, value.toString());\n}\nfunction getBrowserStorageItemsCount(storage) {\n return parseInt(getStoredItem(storage, browserCacheCountKey)) || 0;\n}\n\nlet _window = typeof window === \"undefined\" ? {} : window;\nfunction getBrowserStorage(key) {\n const attr = key + \"Storage\";\n try {\n if (_window && _window[attr] && typeof _window[attr].length === \"number\") {\n return _window[attr];\n }\n } catch (err) {\n }\n browserStorageConfig[key] = false;\n}\n\nfunction iterateBrowserStorage(key, callback) {\n const func = getBrowserStorage(key);\n if (!func) {\n return;\n }\n const version = getStoredItem(func, browserCacheVersionKey);\n if (version !== browserCacheVersion) {\n if (version) {\n const total2 = getBrowserStorageItemsCount(func);\n for (let i = 0; i < total2; i++) {\n removeStoredItem(func, browserCachePrefix + i.toString());\n }\n }\n setStoredItem(func, browserCacheVersionKey, browserCacheVersion);\n setBrowserStorageItemsCount(func, 0);\n return;\n }\n const minTime = Math.floor(Date.now() / browserStorageHour) - browserStorageCacheExpiration;\n const parseItem = (index) => {\n const name = browserCachePrefix + index.toString();\n const item = getStoredItem(func, name);\n if (typeof item !== \"string\") {\n return;\n }\n try {\n const data = JSON.parse(item);\n if (typeof data === \"object\" && typeof data.cached === \"number\" && data.cached > minTime && typeof data.provider === \"string\" && typeof data.data === \"object\" && typeof data.data.prefix === \"string\" && // Valid item: run callback\n callback(data, index)) {\n return true;\n }\n } catch (err) {\n }\n removeStoredItem(func, name);\n };\n let total = getBrowserStorageItemsCount(func);\n for (let i = total - 1; i >= 0; i--) {\n if (!parseItem(i)) {\n if (i === total - 1) {\n total--;\n setBrowserStorageItemsCount(func, total);\n } else {\n browserStorageEmptyItems[key].add(i);\n }\n }\n }\n}\n\nfunction initBrowserStorage() {\n if (browserStorageStatus) {\n return;\n }\n setBrowserStorageStatus(true);\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n const provider = item.provider;\n const prefix = iconSet.prefix;\n const storage = getStorage(\n provider,\n prefix\n );\n if (!addIconSet(storage, iconSet).length) {\n return false;\n }\n const lastModified = iconSet.lastModified || -1;\n storage.lastModifiedCached = storage.lastModifiedCached ? Math.min(storage.lastModifiedCached, lastModified) : lastModified;\n return true;\n });\n }\n}\n\nfunction toggleBrowserCache(storage, value) {\n switch (storage) {\n case \"local\":\n case \"session\":\n browserStorageConfig[storage] = value;\n break;\n case \"all\":\n for (const key in browserStorageConfig) {\n browserStorageConfig[key] = value;\n }\n break;\n }\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n return storage[provider] || storage[\"\"];\n}\n\nfunction createAPIConfig(source) {\n let resources;\n if (typeof source.resources === \"string\") {\n resources = [source.resources];\n } else {\n resources = source.resources;\n if (!(resources instanceof Array) || !resources.length) {\n return null;\n }\n }\n const result = {\n // API hosts\n resources,\n // Root path\n path: source.path || \"/\",\n // URL length limit\n maxURL: source.maxURL || 500,\n // Timeout before next host is used.\n rotate: source.rotate || 750,\n // Timeout before failing query.\n timeout: source.timeout || 5e3,\n // Randomise default API end point.\n random: source.random === true,\n // Start index\n index: source.index || 0,\n // Receive data after time out (used if time out kicks in first, then API module sends data anyway).\n dataAfterTimeout: source.dataAfterTimeout !== false\n };\n return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n \"https://api.simplesvg.com\",\n \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n if (fallBackAPISources.length === 1) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n if (Math.random() > 0.5) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n fallBackAPI.push(fallBackAPISources.pop());\n }\n }\n}\nconfigStorage[\"\"] = createAPIConfig({\n resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n const config = createAPIConfig(customConfig);\n if (config === null) {\n return false;\n }\n configStorage[provider] = config;\n return true;\n}\nfunction getAPIConfig(provider) {\n return configStorage[provider];\n}\nfunction listAPIProviders() {\n return Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n let callback;\n try {\n callback = fetch;\n if (typeof callback === \"function\") {\n return callback;\n }\n } catch (err) {\n }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n fetchModule = fetch2;\n}\nfunction getFetch() {\n return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n const config = getAPIConfig(provider);\n if (!config) {\n return 0;\n }\n let result;\n if (!config.maxURL) {\n result = 0;\n } else {\n let maxHostLength = 0;\n config.resources.forEach((item) => {\n const host = item;\n maxHostLength = Math.max(maxHostLength, host.length);\n });\n const url = prefix + \".json?icons=\";\n result = config.maxURL - maxHostLength - config.path.length - url.length;\n }\n return result;\n}\nfunction shouldAbort(status) {\n return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n const results = [];\n const maxLength = calculateMaxLength(provider, prefix);\n const type = \"icons\";\n let item = {\n type,\n provider,\n prefix,\n icons: []\n };\n let length = 0;\n icons.forEach((name, index) => {\n length += name.length + 1;\n if (length >= maxLength && index > 0) {\n results.push(item);\n item = {\n type,\n provider,\n prefix,\n icons: []\n };\n length = name.length;\n }\n item.icons.push(name);\n });\n results.push(item);\n return results;\n};\nfunction getPath(provider) {\n if (typeof provider === \"string\") {\n const config = getAPIConfig(provider);\n if (config) {\n return config.path;\n }\n }\n return \"/\";\n}\nconst send = (host, params, callback) => {\n if (!fetchModule) {\n callback(\"abort\", 424);\n return;\n }\n let path = getPath(params.provider);\n switch (params.type) {\n case \"icons\": {\n const prefix = params.prefix;\n const icons = params.icons;\n const iconsList = icons.join(\",\");\n const urlParams = new URLSearchParams({\n icons: iconsList\n });\n path += prefix + \".json?\" + urlParams.toString();\n break;\n }\n case \"custom\": {\n const uri = params.uri;\n path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n break;\n }\n default:\n callback(\"abort\", 400);\n return;\n }\n let defaultError = 503;\n fetchModule(host + path).then((response) => {\n const status = response.status;\n if (status !== 200) {\n setTimeout(() => {\n callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n });\n return;\n }\n defaultError = 501;\n return response.json();\n }).then((data) => {\n if (typeof data !== \"object\" || data === null) {\n setTimeout(() => {\n if (data === 404) {\n callback(\"abort\", data);\n } else {\n callback(\"next\", defaultError);\n }\n });\n return;\n }\n setTimeout(() => {\n callback(\"success\", data);\n });\n }).catch(() => {\n callback(\"next\", defaultError);\n });\n};\nconst fetchAPIModule = {\n prepare,\n send\n};\n\nfunction sortIcons(icons) {\n const result = {\n loaded: [],\n missing: [],\n pending: []\n };\n const storage = /* @__PURE__ */ Object.create(null);\n icons.sort((a, b) => {\n if (a.provider !== b.provider) {\n return a.provider.localeCompare(b.provider);\n }\n if (a.prefix !== b.prefix) {\n return a.prefix.localeCompare(b.prefix);\n }\n return a.name.localeCompare(b.name);\n });\n let lastIcon = {\n provider: \"\",\n prefix: \"\",\n name: \"\"\n };\n icons.forEach((icon) => {\n if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n return;\n }\n lastIcon = icon;\n const provider = icon.provider;\n const prefix = icon.prefix;\n const name = icon.name;\n const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n let list;\n if (name in localStorage.icons) {\n list = result.loaded;\n } else if (prefix === \"\" || localStorage.missing.has(name)) {\n list = result.missing;\n } else {\n list = result.pending;\n }\n const item = {\n provider,\n prefix,\n name\n };\n list.push(item);\n });\n return result;\n}\n\nfunction removeCallback(storages, id) {\n storages.forEach((storage) => {\n const items = storage.loaderCallbacks;\n if (items) {\n storage.loaderCallbacks = items.filter((row) => row.id !== id);\n }\n });\n}\nfunction updateCallbacks(storage) {\n if (!storage.pendingCallbacksFlag) {\n storage.pendingCallbacksFlag = true;\n setTimeout(() => {\n storage.pendingCallbacksFlag = false;\n const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n if (!items.length) {\n return;\n }\n let hasPending = false;\n const provider = storage.provider;\n const prefix = storage.prefix;\n items.forEach((item) => {\n const icons = item.icons;\n const oldLength = icons.pending.length;\n icons.pending = icons.pending.filter((icon) => {\n if (icon.prefix !== prefix) {\n return true;\n }\n const name = icon.name;\n if (storage.icons[name]) {\n icons.loaded.push({\n provider,\n prefix,\n name\n });\n } else if (storage.missing.has(name)) {\n icons.missing.push({\n provider,\n prefix,\n name\n });\n } else {\n hasPending = true;\n return true;\n }\n return false;\n });\n if (icons.pending.length !== oldLength) {\n if (!hasPending) {\n removeCallback([storage], item.id);\n }\n item.callback(\n icons.loaded.slice(0),\n icons.missing.slice(0),\n icons.pending.slice(0),\n item.abort\n );\n }\n });\n });\n }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n const id = idCounter++;\n const abort = removeCallback.bind(null, pendingSources, id);\n if (!icons.pending.length) {\n return abort;\n }\n const item = {\n id,\n icons,\n callback,\n abort\n };\n pendingSources.forEach((storage) => {\n (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n });\n return abort;\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n const result = [];\n list.forEach((item) => {\n const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n if (icon) {\n result.push(icon);\n }\n });\n return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n resources: [],\n index: 0,\n timeout: 2e3,\n rotate: 750,\n random: false,\n dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n const resourcesCount = config.resources.length;\n const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n let resources;\n if (config.random) {\n let list = config.resources.slice(0);\n resources = [];\n while (list.length > 1) {\n const nextIndex = Math.floor(Math.random() * list.length);\n resources.push(list[nextIndex]);\n list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n }\n resources = resources.concat(list);\n } else {\n resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n }\n const startTime = Date.now();\n let status = \"pending\";\n let queriesSent = 0;\n let lastError;\n let timer = null;\n let queue = [];\n let doneCallbacks = [];\n if (typeof done === \"function\") {\n doneCallbacks.push(done);\n }\n function resetTimer() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function abort() {\n if (status === \"pending\") {\n status = \"aborted\";\n }\n resetTimer();\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function subscribe(callback, overwrite) {\n if (overwrite) {\n doneCallbacks = [];\n }\n if (typeof callback === \"function\") {\n doneCallbacks.push(callback);\n }\n }\n function getQueryStatus() {\n return {\n startTime,\n payload,\n status,\n queriesSent,\n queriesPending: queue.length,\n subscribe,\n abort\n };\n }\n function failQuery() {\n status = \"failed\";\n doneCallbacks.forEach((callback) => {\n callback(void 0, lastError);\n });\n }\n function clearQueue() {\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function moduleResponse(item, response, data) {\n const isError = response !== \"success\";\n queue = queue.filter((queued) => queued !== item);\n switch (status) {\n case \"pending\":\n break;\n case \"failed\":\n if (isError || !config.dataAfterTimeout) {\n return;\n }\n break;\n default:\n return;\n }\n if (response === \"abort\") {\n lastError = data;\n failQuery();\n return;\n }\n if (isError) {\n lastError = data;\n if (!queue.length) {\n if (!resources.length) {\n failQuery();\n } else {\n execNext();\n }\n }\n return;\n }\n resetTimer();\n clearQueue();\n if (!config.random) {\n const index = config.resources.indexOf(item.resource);\n if (index !== -1 && index !== config.index) {\n config.index = index;\n }\n }\n status = \"completed\";\n doneCallbacks.forEach((callback) => {\n callback(data);\n });\n }\n function execNext() {\n if (status !== \"pending\") {\n return;\n }\n resetTimer();\n const resource = resources.shift();\n if (resource === void 0) {\n if (queue.length) {\n timer = setTimeout(() => {\n resetTimer();\n if (status === \"pending\") {\n clearQueue();\n failQuery();\n }\n }, config.timeout);\n return;\n }\n failQuery();\n return;\n }\n const item = {\n status: \"pending\",\n resource,\n callback: (status2, data) => {\n moduleResponse(item, status2, data);\n }\n };\n queue.push(item);\n queriesSent++;\n timer = setTimeout(execNext, config.rotate);\n query(resource, payload, item.callback);\n }\n setTimeout(execNext);\n return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n const config = {\n ...defaultConfig,\n ...cfg\n };\n let queries = [];\n function cleanup() {\n queries = queries.filter((item) => item().status === \"pending\");\n }\n function query(payload, queryCallback, doneCallback) {\n const query2 = sendQuery(\n config,\n payload,\n queryCallback,\n (data, error) => {\n cleanup();\n if (doneCallback) {\n doneCallback(data, error);\n }\n }\n );\n queries.push(query2);\n return query2;\n }\n function find(callback) {\n return queries.find((value) => {\n return callback(value);\n }) || null;\n }\n const instance = {\n query,\n find,\n setIndex: (index) => {\n config.index = index;\n },\n getIndex: () => config.index,\n cleanup\n };\n return instance;\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n if (!redundancyCache[provider]) {\n const config = getAPIConfig(provider);\n if (!config) {\n return;\n }\n const redundancy = initRedundancy(config);\n const cachedReundancy = {\n config,\n redundancy\n };\n redundancyCache[provider] = cachedReundancy;\n }\n return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n let redundancy;\n let send;\n if (typeof target === \"string\") {\n const api = getAPIModule(target);\n if (!api) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n send = api.send;\n const cached = getRedundancyCache(target);\n if (cached) {\n redundancy = cached.redundancy;\n }\n } else {\n const config = createAPIConfig(target);\n if (config) {\n redundancy = initRedundancy(config);\n const moduleKey = target.resources ? target.resources[0] : \"\";\n const api = getAPIModule(moduleKey);\n if (api) {\n send = api.send;\n }\n }\n }\n if (!redundancy || !send) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n return redundancy.query(query, send, callback)().abort;\n}\n\nfunction updateLastModified(storage, lastModified) {\n const lastValue = storage.lastModifiedCached;\n if (\n // Matches or newer\n lastValue && lastValue >= lastModified\n ) {\n return lastValue === lastModified;\n }\n storage.lastModifiedCached = lastModified;\n if (lastValue) {\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n return item.provider !== storage.provider || iconSet.prefix !== storage.prefix || iconSet.lastModified === lastModified;\n });\n }\n }\n return true;\n}\nfunction storeInBrowserStorage(storage, data) {\n if (!browserStorageStatus) {\n initBrowserStorage();\n }\n function store(key) {\n let func;\n if (!browserStorageConfig[key] || !(func = getBrowserStorage(key))) {\n return;\n }\n const set = browserStorageEmptyItems[key];\n let index;\n if (set.size) {\n set.delete(index = Array.from(set).shift());\n } else {\n index = getBrowserStorageItemsCount(func);\n if (!setBrowserStorageItemsCount(func, index + 1)) {\n return;\n }\n }\n const item = {\n cached: Math.floor(Date.now() / browserStorageHour),\n provider: storage.provider,\n data\n };\n return setStoredItem(\n func,\n browserCachePrefix + index.toString(),\n JSON.stringify(item)\n );\n }\n if (data.lastModified && !updateLastModified(storage, data.lastModified)) {\n return;\n }\n if (!Object.keys(data.icons).length) {\n return;\n }\n if (data.not_found) {\n data = Object.assign({}, data);\n delete data.not_found;\n }\n if (!store(\"local\")) {\n store(\"session\");\n }\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n if (!storage.iconsLoaderFlag) {\n storage.iconsLoaderFlag = true;\n setTimeout(() => {\n storage.iconsLoaderFlag = false;\n updateCallbacks(storage);\n });\n }\n}\nfunction loadNewIcons(storage, icons) {\n if (!storage.iconsToLoad) {\n storage.iconsToLoad = icons;\n } else {\n storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n }\n if (!storage.iconsQueueFlag) {\n storage.iconsQueueFlag = true;\n setTimeout(() => {\n storage.iconsQueueFlag = false;\n const { provider, prefix } = storage;\n const icons2 = storage.iconsToLoad;\n delete storage.iconsToLoad;\n let api;\n if (!icons2 || !(api = getAPIModule(provider))) {\n return;\n }\n const params = api.prepare(provider, prefix, icons2);\n params.forEach((item) => {\n sendAPIQuery(provider, item, (data) => {\n if (typeof data !== \"object\") {\n item.icons.forEach((name) => {\n storage.missing.add(name);\n });\n } else {\n try {\n const parsed = addIconSet(\n storage,\n data\n );\n if (!parsed.length) {\n return;\n }\n const pending = storage.pendingIcons;\n if (pending) {\n parsed.forEach((name) => {\n pending.delete(name);\n });\n }\n storeInBrowserStorage(storage, data);\n } catch (err) {\n console.error(err);\n }\n }\n loadedNewIcons(storage);\n });\n });\n });\n }\n}\nconst isPending = (icon) => {\n const storage = getStorage(\n icon.provider,\n icon.prefix\n );\n const pending = storage.pendingIcons;\n return !!(pending && pending.has(icon.name));\n};\nconst loadIcons = (icons, callback) => {\n const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n const sortedIcons = sortIcons(cleanedIcons);\n if (!sortedIcons.pending.length) {\n let callCallback = true;\n if (callback) {\n setTimeout(() => {\n if (callCallback) {\n callback(\n sortedIcons.loaded,\n sortedIcons.missing,\n sortedIcons.pending,\n emptyCallback\n );\n }\n });\n }\n return () => {\n callCallback = false;\n };\n }\n const newIcons = /* @__PURE__ */ Object.create(null);\n const sources = [];\n let lastProvider, lastPrefix;\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix } = icon;\n if (prefix === lastPrefix && provider === lastProvider) {\n return;\n }\n lastProvider = provider;\n lastPrefix = prefix;\n sources.push(getStorage(provider, prefix));\n const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n if (!providerNewIcons[prefix]) {\n providerNewIcons[prefix] = [];\n }\n });\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n if (!pendingQueue.has(name)) {\n pendingQueue.add(name);\n newIcons[provider][prefix].push(name);\n }\n });\n sources.forEach((storage) => {\n const { provider, prefix } = storage;\n if (newIcons[provider][prefix].length) {\n loadNewIcons(storage, newIcons[provider][prefix]);\n }\n });\n return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = (icon) => {\n return new Promise((fulfill, reject) => {\n const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n if (!iconObj) {\n reject(icon);\n return;\n }\n loadIcons([iconObj || icon], (loaded) => {\n if (loaded.length && iconObj) {\n const data = getIconData(iconObj);\n if (data) {\n fulfill({\n ...defaultIconProps,\n ...data\n });\n return;\n }\n }\n reject(icon);\n });\n });\n};\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n/**\n * Class names\n */\nconst blockClass = 'iconify';\nconst inlineClass = 'iconify-inline';\n/**\n * Names of properties to add to nodes\n */\nconst elementDataProperty = ('iconifyData' + Date.now());\n\n/**\n * List of root nodes\n */\nlet nodes = [];\n/**\n * Find node\n */\nfunction findRootNode(node) {\n for (let i = 0; i < nodes.length; i++) {\n const item = nodes[i];\n const root = typeof item.node === 'function' ? item.node() : item.node;\n if (root === node) {\n return item;\n }\n }\n}\n/**\n * Add extra root node\n */\nfunction addRootNode(root, autoRemove = false) {\n let node = findRootNode(root);\n if (node) {\n // Node already exist: switch type if needed\n if (node.temporary) {\n node.temporary = autoRemove;\n }\n return node;\n }\n // Create item, add it to list\n node = {\n node: root,\n temporary: autoRemove,\n };\n nodes.push(node);\n return node;\n}\n/**\n * Add document.body node\n */\nfunction addBodyNode() {\n if (document.documentElement) {\n return addRootNode(document.documentElement);\n }\n nodes.push({\n node: () => {\n return document.documentElement;\n },\n });\n}\n/**\n * Remove root node\n */\nfunction removeRootNode(root) {\n nodes = nodes.filter((node) => root !== node &&\n root !== (typeof node.node === 'function' ? node.node() : node.node));\n}\n/**\n * Get list of root nodes\n */\nfunction listRootNodes() {\n return nodes;\n}\n\n/**\n * Execute function when DOM is ready\n */\nfunction onReady(callback) {\n const doc = document;\n if (doc.readyState && doc.readyState !== 'loading') {\n callback();\n }\n else {\n doc.addEventListener('DOMContentLoaded', callback);\n }\n}\n\n/**\n * Callback\n */\nlet callback = null;\n/**\n * Parameters for mutation observer\n */\nconst observerParams = {\n childList: true,\n subtree: true,\n attributes: true,\n};\n/**\n * Queue DOM scan\n */\nfunction queueScan(node) {\n if (!node.observer) {\n return;\n }\n const observer = node.observer;\n if (!observer.pendingScan) {\n observer.pendingScan = setTimeout(() => {\n delete observer.pendingScan;\n if (callback) {\n callback(node);\n }\n });\n }\n}\n/**\n * Check mutations for added nodes\n */\nfunction checkMutations(node, mutations) {\n if (!node.observer) {\n return;\n }\n const observer = node.observer;\n if (!observer.pendingScan) {\n for (let i = 0; i < mutations.length; i++) {\n const item = mutations[i];\n if (\n // Check for added nodes\n (item.addedNodes && item.addedNodes.length > 0) ||\n // Check for icon or placeholder with modified attributes\n (item.type === 'attributes' &&\n item.target[elementDataProperty] !==\n void 0)) {\n if (!observer.paused) {\n queueScan(node);\n }\n return;\n }\n }\n }\n}\n/**\n * Start/resume observer\n */\nfunction continueObserving(node, root) {\n node.observer.instance.observe(root, observerParams);\n}\n/**\n * Start mutation observer\n */\nfunction startObserver(node) {\n let observer = node.observer;\n if (observer && observer.instance) {\n // Already started\n return;\n }\n const root = typeof node.node === 'function' ? node.node() : node.node;\n if (!root || !window) {\n // document.body is not available yet or window is missing\n return;\n }\n if (!observer) {\n observer = {\n paused: 0,\n };\n node.observer = observer;\n }\n // Create new instance, observe\n observer.instance = new window.MutationObserver(checkMutations.bind(null, node));\n continueObserving(node, root);\n // Scan immediately\n if (!observer.paused) {\n queueScan(node);\n }\n}\n/**\n * Start all observers\n */\nfunction startObservers() {\n listRootNodes().forEach(startObserver);\n}\n/**\n * Stop observer\n */\nfunction stopObserver(node) {\n if (!node.observer) {\n return;\n }\n const observer = node.observer;\n // Stop scan\n if (observer.pendingScan) {\n clearTimeout(observer.pendingScan);\n delete observer.pendingScan;\n }\n // Disconnect observer\n if (observer.instance) {\n observer.instance.disconnect();\n delete observer.instance;\n }\n}\n/**\n * Start observer when DOM is ready\n */\nfunction initObserver(cb) {\n const isRestart = callback !== null;\n if (callback !== cb) {\n // Change callback and stop all pending observers\n callback = cb;\n if (isRestart) {\n listRootNodes().forEach(stopObserver);\n }\n }\n if (isRestart) {\n // Restart instances\n startObservers();\n return;\n }\n // Start observers when document is ready\n onReady(startObservers);\n}\n/**\n * Pause observing node\n */\nfunction pauseObservingNode(node) {\n (node ? [node] : listRootNodes()).forEach((node) => {\n if (!node.observer) {\n node.observer = {\n paused: 1,\n };\n return;\n }\n const observer = node.observer;\n observer.paused++;\n if (observer.paused > 1 || !observer.instance) {\n return;\n }\n // Disconnect observer\n const instance = observer.instance;\n // checkMutations(node, instance.takeRecords());\n instance.disconnect();\n });\n}\n/**\n * Pause observer\n */\nfunction pauseObserver(root) {\n if (root) {\n const node = findRootNode(root);\n if (node) {\n pauseObservingNode(node);\n }\n }\n else {\n pauseObservingNode();\n }\n}\n/**\n * Resume observer\n */\nfunction resumeObservingNode(observer) {\n (observer ? [observer] : listRootNodes()).forEach((node) => {\n if (!node.observer) {\n // Start observer\n startObserver(node);\n return;\n }\n const observer = node.observer;\n if (observer.paused) {\n observer.paused--;\n if (!observer.paused) {\n // Start / resume\n const root = typeof node.node === 'function' ? node.node() : node.node;\n if (!root) {\n return;\n }\n else if (observer.instance) {\n continueObserving(node, root);\n }\n else {\n startObserver(node);\n }\n }\n }\n });\n}\n/**\n * Resume observer\n */\nfunction resumeObserver(root) {\n if (root) {\n const node = findRootNode(root);\n if (node) {\n resumeObservingNode(node);\n }\n }\n else {\n resumeObservingNode();\n }\n}\n/**\n * Observe node\n */\nfunction observe(root, autoRemove = false) {\n const node = addRootNode(root, autoRemove);\n startObserver(node);\n return node;\n}\n/**\n * Remove observed node\n */\nfunction stopObserving(root) {\n const node = findRootNode(root);\n if (node) {\n stopObserver(node);\n removeRootNode(root);\n }\n}\n\n/**\n * Compare props\n */\nfunction propsChanged(props1, props2) {\n if (props1.name !== props2.name || props1.mode !== props2.mode) {\n return true;\n }\n const customisations1 = props1.customisations;\n const customisations2 = props2.customisations;\n for (const key in defaultExtendedIconCustomisations) {\n if (customisations1[key] !== customisations2[key]) {\n return true;\n }\n }\n return false;\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\n/**\n * Size attributes\n */\nconst sizeAttributes = ['width', 'height'];\n/**\n * Boolean attributes\n */\nconst booleanAttributes = [\n 'inline',\n 'hFlip',\n 'vFlip',\n];\n/**\n * Get attribute value\n */\nfunction getBooleanAttribute(value, key) {\n if (value === key || value === 'true') {\n return true;\n }\n if (value === '' || value === 'false') {\n return false;\n }\n return null;\n}\n/**\n * Get element properties from HTML element\n */\nfunction getElementProps(element) {\n // Get icon name\n const name = element.getAttribute('data-icon');\n const icon = typeof name === 'string' && stringToIcon(name, true);\n if (!icon) {\n return null;\n }\n // Get defaults and inline\n const customisations = {\n ...defaultExtendedIconCustomisations,\n inline: element.classList && element.classList.contains(inlineClass),\n };\n // Get dimensions\n sizeAttributes.forEach((attr) => {\n const value = element.getAttribute('data-' + attr);\n if (value) {\n customisations[attr] = value;\n }\n });\n // Get rotation\n const rotation = element.getAttribute('data-rotate');\n if (typeof rotation === 'string') {\n customisations.rotate = rotateFromString(rotation);\n }\n // Get flip shorthand\n const flip = element.getAttribute('data-flip');\n if (typeof flip === 'string') {\n flipFromString(customisations, flip);\n }\n // Boolean attributes\n booleanAttributes.forEach((attr) => {\n const key = 'data-' + attr;\n const value = getBooleanAttribute(element.getAttribute(key), key);\n if (typeof value === 'boolean') {\n customisations[attr] = value;\n }\n });\n // Get render mode. Not checking actual value because incorrect values are treated as inline\n const mode = element.getAttribute('data-mode');\n return {\n name,\n icon,\n customisations,\n mode,\n };\n}\n\n/**\n * Selector combining class names and tags\n */\nconst selector = 'svg.' +\n blockClass +\n ', i.' +\n blockClass +\n ', span.' +\n blockClass +\n ', i.' +\n inlineClass +\n ', span.' +\n inlineClass;\n/**\n * Find all parent nodes in DOM\n */\nfunction scanRootNode(root) {\n const nodes = [];\n root.querySelectorAll(selector).forEach((node) => {\n // Get props, ignore SVG rendered outside of SVG framework\n const props = node[elementDataProperty] || node.tagName.toLowerCase() !== 'svg'\n ? getElementProps(node)\n : null;\n if (props) {\n nodes.push({\n node,\n props,\n });\n }\n });\n return nodes;\n}\n\nfunction iconToHTML(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nlet policy;\nfunction createPolicy() {\n try {\n policy = window.trustedTypes.createPolicy(\"iconify\", {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n createHTML: (s) => s\n });\n } catch (err) {\n policy = null;\n }\n}\nfunction cleanUpInnerHTML(html) {\n if (policy === void 0) {\n createPolicy();\n }\n return policy ? policy.createHTML(html) : html;\n}\n\n/**\n * Get classes to add from icon name\n */\nfunction iconClasses(iconName) {\n const classesToAdd = new Set(['iconify']);\n ['provider', 'prefix'].forEach((attr) => {\n if (iconName[attr]) {\n classesToAdd.add('iconify--' + iconName[attr]);\n }\n });\n return classesToAdd;\n}\n/**\n * Add classes to SVG, removing previously added classes, keeping custom classes\n */\nfunction applyClasses(svg, classes, previouslyAddedClasses, placeholder) {\n const svgClasses = svg.classList;\n // Copy classes from placeholder\n if (placeholder) {\n const placeholderClasses = placeholder.classList;\n Array.from(placeholderClasses).forEach((item) => {\n svgClasses.add(item);\n });\n }\n // Add new classes\n const addedClasses = [];\n classes.forEach((item) => {\n if (!svgClasses.contains(item)) {\n // Add new class\n svgClasses.add(item);\n addedClasses.push(item);\n }\n else if (previouslyAddedClasses.has(item)) {\n // Was added before: keep it\n addedClasses.push(item);\n }\n });\n // Remove previously added classes\n previouslyAddedClasses.forEach((item) => {\n if (!classes.has(item)) {\n // Class that was added before, but no longer needed\n svgClasses.remove(item);\n }\n });\n return addedClasses;\n}\n\n/**\n * Copy old styles, apply new styles\n */\nfunction applyStyle(svg, styles, previouslyAddedStyles) {\n const svgStyle = svg.style;\n // Remove previously added styles\n (previouslyAddedStyles || []).forEach((prop) => {\n svgStyle.removeProperty(prop);\n });\n // Apply new styles, ignoring styles that already exist\n const appliedStyles = [];\n for (const prop in styles) {\n if (!svgStyle.getPropertyValue(prop)) {\n appliedStyles.push(prop);\n svgStyle.setProperty(prop, styles[prop]);\n }\n }\n return appliedStyles;\n}\n\n/**\n * Render icon as inline SVG\n */\nfunction renderInlineSVG(element, props, iconData) {\n // Create placeholder. Why placeholder? innerHTML setter on SVG does not work in some environments.\n let span;\n try {\n span = document.createElement('span');\n }\n catch (err) {\n return element;\n }\n // Generate data to render\n const customisations = props.customisations;\n const renderData = iconToSVG(iconData, customisations);\n // Get old data\n const oldData = element[elementDataProperty];\n // Generate SVG\n const html = iconToHTML(replaceIDs(renderData.body), {\n 'aria-hidden': 'true',\n 'role': 'img',\n ...renderData.attributes,\n });\n span.innerHTML = cleanUpInnerHTML(html);\n // Get SVG element\n const svg = span.childNodes[0];\n // Add attributes\n const placeholderAttributes = element.attributes;\n for (let i = 0; i < placeholderAttributes.length; i++) {\n const item = placeholderAttributes.item(i);\n const name = item.name;\n if (name !== 'class' && !svg.hasAttribute(name)) {\n svg.setAttribute(name, item.value);\n }\n }\n // Add classes\n const classesToAdd = iconClasses(props.icon);\n const addedClasses = applyClasses(svg, classesToAdd, new Set(oldData && oldData.addedClasses), element);\n // Update style\n const addedStyles = applyStyle(svg, customisations.inline\n ? {\n 'vertical-align': '-0.125em',\n }\n : {}, oldData && oldData.addedStyles);\n // Add data to element\n const newData = {\n ...props,\n status: 'loaded',\n addedClasses,\n addedStyles,\n };\n svg[elementDataProperty] = newData;\n // Replace old element\n if (element.parentNode) {\n element.parentNode.replaceChild(svg, element);\n }\n return svg;\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToData(svg) {\n return \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\nfunction svgToURL(svg) {\n return 'url(\"' + svgToData(svg) + '\")';\n}\n\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n 'background-color': 'currentColor',\n};\nconst coloredProps = {\n 'background-color': 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n image: 'var(--svg)',\n repeat: 'no-repeat',\n size: '100% 100%',\n};\nconst propsToAddTo = {\n '-webkit-mask': monotoneProps,\n 'mask': monotoneProps,\n 'background': coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + '-' + prop] = propsToAdd[prop];\n }\n}\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon as inline SVG\n */\nfunction renderBackground(element, props, iconData, useMask) {\n // Generate data to render\n const customisations = props.customisations;\n const renderData = iconToSVG(iconData, customisations);\n const renderAttribs = renderData.attributes;\n // Get old data\n const oldData = element[elementDataProperty];\n // Generate SVG\n const html = iconToHTML(renderData.body, {\n ...renderAttribs,\n width: iconData.width + '',\n height: iconData.height + '',\n });\n // Add classes\n const classesToAdd = iconClasses(props.icon);\n const addedClasses = applyClasses(element, classesToAdd, new Set(oldData && oldData.addedClasses));\n // Update style\n const url = svgToURL(html);\n const newStyles = {\n '--svg': url,\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n };\n if (customisations.inline) {\n newStyles['vertical-align'] = '-0.125em';\n }\n const addedStyles = applyStyle(element, newStyles, oldData && oldData.addedStyles);\n // Add data to element\n const newData = {\n ...props,\n status: 'loaded',\n addedClasses,\n addedStyles,\n };\n element[elementDataProperty] = newData;\n return element;\n}\n\n/**\n * Flag to avoid scanning DOM too often\n */\nlet scanQueued = false;\n/**\n * Icons have been loaded\n */\nfunction checkPendingIcons() {\n if (!scanQueued) {\n scanQueued = true;\n setTimeout(() => {\n if (scanQueued) {\n scanQueued = false;\n scanDOM();\n }\n });\n }\n}\n/**\n * Scan node for placeholders\n */\nfunction scanDOM(rootNode, addTempNode = false) {\n // List of icons to load: [provider][prefix] = Set<name>\n const iconsToLoad = Object.create(null);\n function getIcon(icon, load) {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const storedIcon = storage.icons[name];\n if (storedIcon) {\n return {\n status: 'loaded',\n icon: storedIcon,\n };\n }\n if (storage.missing.has(name)) {\n return {\n status: 'missing',\n };\n }\n if (load && !isPending(icon)) {\n const providerIconsToLoad = iconsToLoad[provider] ||\n (iconsToLoad[provider] = Object.create(null));\n const set = providerIconsToLoad[prefix] ||\n (providerIconsToLoad[prefix] = new Set());\n set.add(name);\n }\n return {\n status: 'loading',\n };\n }\n // Parse all root nodes\n (rootNode ? [rootNode] : listRootNodes()).forEach((observedNode) => {\n const root = typeof observedNode.node === 'function'\n ? observedNode.node()\n : observedNode.node;\n if (!root || !root.querySelectorAll) {\n return;\n }\n // Track placeholders\n let hasPlaceholders = false;\n // Observer\n let paused = false;\n /**\n * Render icon\n */\n function render(element, props, iconData) {\n if (!paused) {\n paused = true;\n pauseObservingNode(observedNode);\n }\n if (element.tagName.toUpperCase() !== 'SVG') {\n // Check for one of style modes\n const mode = props.mode;\n const isMask = mode === 'mask' ||\n (mode === 'bg'\n ? false\n : mode === 'style'\n ? iconData.body.indexOf('currentColor') !== -1\n : null);\n if (typeof isMask === 'boolean') {\n renderBackground(element, props, {\n ...defaultIconProps,\n ...iconData,\n }, isMask);\n return;\n }\n }\n renderInlineSVG(element, props, iconData);\n }\n // Find all elements\n scanRootNode(root).forEach(({ node, props }) => {\n // Check if item already has props\n const oldData = node[elementDataProperty];\n if (!oldData) {\n // New icon without data\n const { status, icon } = getIcon(props.icon, true);\n if (icon) {\n // Ready to render!\n render(node, props, icon);\n return;\n }\n // Loading or missing\n hasPlaceholders = hasPlaceholders || status === 'loading';\n node[elementDataProperty] = {\n ...props,\n status,\n };\n return;\n }\n // Previously found icon\n let item;\n if (!propsChanged(oldData, props)) {\n // Props have not changed. Check status\n const oldStatus = oldData.status;\n if (oldStatus !== 'loading') {\n return;\n }\n item = getIcon(props.icon, false);\n if (!item.icon) {\n // Nothing to render\n oldData.status = item.status;\n return;\n }\n }\n else {\n // Properties have changed: load icon if name has changed\n item = getIcon(props.icon, oldData.name !== props.name);\n if (!item.icon) {\n // Cannot render icon: update status and props\n hasPlaceholders =\n hasPlaceholders || item.status === 'loading';\n Object.assign(oldData, {\n ...props,\n status: item.status,\n });\n return;\n }\n }\n // Re-render icon\n render(node, props, item.icon);\n });\n // Observed node stuff\n if (observedNode.temporary && !hasPlaceholders) {\n // Remove temporary node\n stopObserving(root);\n }\n else if (addTempNode && hasPlaceholders) {\n // Add new temporary node\n observe(root, true);\n }\n else if (paused && observedNode.observer) {\n // Resume observer\n resumeObservingNode(observedNode);\n }\n });\n // Load icons\n for (const provider in iconsToLoad) {\n const providerIconsToLoad = iconsToLoad[provider];\n for (const prefix in providerIconsToLoad) {\n const set = providerIconsToLoad[prefix];\n loadIcons(Array.from(set).map((name) => ({\n provider,\n prefix,\n name,\n })), checkPendingIcons);\n }\n }\n}\n/**\n * Scan node for placeholders\n */\nfunction scanElement(root) {\n // Add temporary node\n const node = findRootNode(root);\n if (!node) {\n scanDOM({\n node: root,\n temporary: true,\n }, true);\n }\n else {\n scanDOM(node);\n }\n}\n\nfunction generateIcon(name, customisations, returnString = false) {\n // Get icon data\n const iconData = getIconData(name);\n if (!iconData) {\n return null;\n }\n // Split name\n const iconName = stringToIcon(name);\n // Clean up customisations\n const changes = mergeCustomisations(defaultExtendedIconCustomisations, customisations || {});\n // Get data\n const result = renderInlineSVG(document.createElement('span'), {\n name,\n icon: iconName,\n customisations: changes,\n }, iconData);\n return returnString\n ? result.outerHTML\n : result;\n}\n/**\n * Get version\n */\nfunction getVersion() {\n return '3.1.1';\n}\n/**\n * Generate SVG element\n */\nfunction renderSVG(name, customisations) {\n return generateIcon(name, customisations, false);\n}\n/**\n * Generate SVG as string\n */\nfunction renderHTML(name, customisations) {\n return generateIcon(name, customisations, true);\n}\n/**\n * Get rendered icon as object that can be used to create SVG (use replaceIDs on body)\n */\nfunction renderIcon(name, customisations) {\n // Get icon data\n const iconData = getIconData(name);\n if (!iconData) {\n return null;\n }\n // Clean up customisations\n const changes = mergeCustomisations(defaultExtendedIconCustomisations, customisations || {});\n // Get data\n return iconToSVG(iconData, changes);\n}\n/**\n * Scan DOM\n */\nfunction scan(root) {\n if (root) {\n scanElement(root);\n }\n else {\n scanDOM();\n }\n}\n/**\n * Initialise stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // Add document.body node\n addBodyNode();\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Load observer and scan DOM on next tick\n setTimeout(() => {\n initObserver(scanDOM);\n scanDOM();\n });\n}\n\n/**\n * Enable cache\n */\nfunction enableCache(storage, enable) {\n toggleBrowserCache(storage, enable !== false);\n}\n/**\n * Disable cache\n */\nfunction disableCache(storage) {\n toggleBrowserCache(storage, true);\n}\n/**\n * Initialise stuff\n */\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // Set cache and load existing cache\n initBrowserStorage();\n const _window = window;\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (const key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n/**\n * Global variable\n */\nconst Iconify = {\n // IconifyAPIInternalFunctions\n _api,\n // IconifyAPIFunctions\n addAPIProvider,\n loadIcons,\n loadIcon,\n // IconifyStorageFunctions\n iconExists,\n getIcon,\n listIcons,\n addIcon,\n addCollection,\n // IconifyBuilderFunctions\n replaceIDs,\n calculateSize,\n buildIcon: iconToSVG,\n // IconifyCommonFunctions\n getVersion,\n renderSVG,\n renderHTML,\n renderIcon,\n scan,\n observe,\n stopObserving,\n pauseObserver,\n resumeObserver,\n // IconifyBrowserCacheFunctions\n enableCache,\n disableCache,\n};\n\nexport { _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, Iconify as default, disableCache, enableCache, getIcon, getVersion, iconExists, listIcons, loadIcon, loadIcons, observe, pauseObserver, renderHTML, renderIcon, renderSVG, replaceIDs, resumeObserver, scan, stopObserving };\n\n// Export to window or web worker\ntry {\n\tif (self.Iconify === void 0) {\n\t\tself.Iconify = Iconify;\n\t}\n} catch (err) {\n}\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M21 6H3m14 6H7m12 6H5\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 2v20M8 10H4a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h4m8 6h4a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-4M8 20H7a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2h1m8 0h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"16\\\" height=\\\"6\\\" x=\\\"2\\\" y=\\\"4\\\" rx=\\\"2\\\"/><rect width=\\\"9\\\" height=\\\"6\\\" x=\\\"9\\\" y=\\\"14\\\" rx=\\\"2\\\"/><path d=\\\"M22 22V2\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M3 6h18M3 12h18M3 18h18\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M21 6H3m12 6H3m14 6H3\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M21 6H3m18 6H9m12 6H7\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"9\\\" height=\\\"6\\\" x=\\\"6\\\" y=\\\"14\\\" rx=\\\"2\\\"/><rect width=\\\"16\\\" height=\\\"6\\\" x=\\\"6\\\" y=\\\"4\\\" rx=\\\"2\\\"/><path d=\\\"M2 2v20\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 5v14m7-7l-7 7l-7-7\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 17V3m-6 8l6 6l6-6m1 10H5\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m5 12l7-7l7 7m-7 7V5\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 3h14m-1 10l-6-6l-6 6m6-6v14\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M3 5v14M8 5v14m4-14v14m5-14v14m4-14v14\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M14 12a4 4 0 0 0 0-8H6v8m9 8a4 4 0 0 0 0-8H6v8Z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3l-4.03 2.42ZM7 16.5l-4.74-2.85M7 16.5l5-3m-5 3v5.17m5-8.17V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Zm5 3l-5-3m5 3l4.74-2.85M17 16.5v5.17\\\"/><path d=\\\"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3l5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8ZM12 8L7.26 5.15M12 8l4.74-2.85M12 13.5V8\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 9l6 6l6-6\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M15 2H9a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V3c0-.6-.4-1-1-1Z\\\"/><path d=\\\"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2M16 4h2a2 2 0 0 1 2 2v2m-9 6h10\\\"/><path d=\\\"m17 10l4 4l-4 4\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m18 16l4-4l-4-4M6 8l-4 4l4 4m8.5-12l-5 16\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M15 12v6m-3-3h6\\\"/><rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m7 21l-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21m9 0H7M5 11l9 9\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M2 12s3-7 10-7s10 7 10 7s-3 7-10 7s-10-7-10-7Z\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3m8-18h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3m-4-1v2m0-8v2m0-8v2m0-8v2\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M21 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v3m18 8v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3m1-4H2m8 0H8m8 0h-2m8 0h-2\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5m4-1v5l4 2\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><circle cx=\\\"9\\\" cy=\\\"9\\\" r=\\\"2\\\"/><path d=\\\"m21 15l-3.086-3.086a2 2 0 0 0-2.828 0L6 21\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"14\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"14\\\" y=\\\"14\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"3\\\" y=\\\"14\\\" rx=\\\"1\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12h-8m8-6H8m13 12h-8M3 6v4c0 1.1.9 2 2 2h3\\\"/><path d=\\\"M3 10v6c0 1.1.9 2 2 2h3\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"18\\\" height=\\\"11\\\" x=\\\"3\\\" y=\\\"11\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M7 11V7a5 5 0 0 1 10 0v4\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M9 3v18\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7v14\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"5\\\" height=\\\"5\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"5\\\" height=\\\"5\\\" x=\\\"16\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"5\\\" height=\\\"5\\\" x=\\\"3\\\" y=\\\"16\\\" rx=\\\"1\\\"/><path d=\\\"M21 16h-3a2 2 0 0 0-2 2v3m5 0v.01M12 7v3a2 2 0 0 1-2 2H7m-4 0h.01M12 3h.01M12 16v.01M16 12h1m4 0v.01M12 21v-1\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"m15 14l5-5l-5-5\\\"/><path d=\\\"M20 9H9.5A5.5 5.5 0 0 0 4 14.5v0A5.5 5.5 0 0 0 9.5 20H13\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\\\"/><path d=\\\"M21 3v5h-5\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\\\"/><path d=\\\"M17 21v-8H7v8M7 3v5h8\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M3 7V5a2 2 0 0 1 2-2h2m10 0h2a2 2 0 0 1 2 2v2m0 10v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"1\\\"/><path d=\\\"M5 12s2.5-5 7-5s7 5 7 5s-2.5 5-7 5s-7-5-7-5\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"/><path d=\\\"M8.12 8.12L12 12m8-8L8.12 15.88\\\"/><circle cx=\\\"6\\\" cy=\\\"18\\\" r=\\\"3\\\"/><path d=\\\"M14.8 14.8L20 20\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M3 12h18M8 8l4-4l4 4m0 8l-4 4l-4-4\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 3v18M8 8l-4 4l4 4m8 0l4-4l-4-4\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M21 4h-7m-4 0H3m18 8h-9m-4 0H3m18 8h-5m-4 0H3M14 2v4m-6 4v4m8 4v4\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" rx=\\\"2\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M12 3v18\\\"/><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M3 9h18M3 15h18\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M3 6h18m-2 0v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6m3 0V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2m-6 5v6m4-6v6\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M4 7V4h16v3M9 20h6M12 4v16\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M9 14L4 9l5-5\\\"/><path d=\\\"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5v0a5.5 5.5 0 0 1-5.5 5.5H11\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"18\\\" height=\\\"11\\\" x=\\\"3\\\" y=\\\"11\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M7 11V7a5 5 0 0 1 9.9-1\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M18 6L6 18M6 6l12 12\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M11 8v6m-3-3h6\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M8 11h6\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m5 9l-3 3l3 3M9 5l3-3l3 3m0 14l-3 3l-3-3M19 9l3 3l-3 3M2 12h20M12 2v20\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 20h9M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1l1-4ZM15 5l3 3\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"6\\\" height=\\\"14\\\" x=\\\"4\\\" y=\\\"5\\\" rx=\\\"2\\\"/><rect width=\\\"6\\\" height=\\\"10\\\" x=\\\"14\\\" y=\\\"7\\\" rx=\\\"2\\\"/><path d=\\\"M17 22v-5m0-10V2M7 22v-3M7 5V2\\\"/></g>\"\n};\nexport default data;\n","/**\n * Register Lucide icons for offline Iconify usage (no CDN fetch at runtime).\n */\nimport { addIcon } from '@iconify/iconify'\nimport type { IconifyIcon } from '@iconify/types'\n\nimport alignCenter from '@iconify-icons/lucide/align-center'\nimport alignCenterVertical from '@iconify-icons/lucide/align-center-vertical'\nimport alignEndVertical from '@iconify-icons/lucide/align-end-vertical'\nimport alignJustify from '@iconify-icons/lucide/align-justify'\nimport alignLeft from '@iconify-icons/lucide/align-left'\nimport alignRight from '@iconify-icons/lucide/align-right'\nimport alignStartVertical from '@iconify-icons/lucide/align-start-vertical'\nimport arrowDown from '@iconify-icons/lucide/arrow-down'\nimport arrowDownToLine from '@iconify-icons/lucide/arrow-down-to-line'\nimport arrowUp from '@iconify-icons/lucide/arrow-up'\nimport arrowUpToLine from '@iconify-icons/lucide/arrow-up-to-line'\nimport barcode from '@iconify-icons/lucide/barcode'\nimport bold from '@iconify-icons/lucide/bold'\nimport boxes from '@iconify-icons/lucide/boxes'\nimport chevronDown from '@iconify-icons/lucide/chevron-down'\nimport circle from '@iconify-icons/lucide/circle'\nimport clipboardPaste from '@iconify-icons/lucide/clipboard-paste'\nimport code2 from '@iconify-icons/lucide/code-2'\nimport copy from '@iconify-icons/lucide/copy'\nimport copyPlus from '@iconify-icons/lucide/copy-plus'\nimport eraser from '@iconify-icons/lucide/eraser'\nimport eye from '@iconify-icons/lucide/eye'\nimport flipHorizontal from '@iconify-icons/lucide/flip-horizontal'\nimport flipVertical from '@iconify-icons/lucide/flip-vertical'\nimport history from '@iconify-icons/lucide/history'\nimport image from '@iconify-icons/lucide/image'\nimport layoutGrid from '@iconify-icons/lucide/layout-grid'\nimport listTree from '@iconify-icons/lucide/list-tree'\nimport lock from '@iconify-icons/lucide/lock'\nimport minus from '@iconify-icons/lucide/minus'\nimport panelLeft from '@iconify-icons/lucide/panel-left'\nimport plus from '@iconify-icons/lucide/plus'\nimport qrCode from '@iconify-icons/lucide/qr-code'\nimport redo2 from '@iconify-icons/lucide/redo-2'\nimport rotateCw from '@iconify-icons/lucide/rotate-cw'\nimport save from '@iconify-icons/lucide/save'\nimport scanEye from '@iconify-icons/lucide/scan-eye'\nimport scissors from '@iconify-icons/lucide/scissors'\nimport separatorHorizontal from '@iconify-icons/lucide/separator-horizontal'\nimport separatorVertical from '@iconify-icons/lucide/separator-vertical'\nimport slidersHorizontal from '@iconify-icons/lucide/sliders-horizontal'\nimport square from '@iconify-icons/lucide/square'\nimport table from '@iconify-icons/lucide/table'\nimport trash2 from '@iconify-icons/lucide/trash-2'\nimport typeIcon from '@iconify-icons/lucide/type'\nimport undo2 from '@iconify-icons/lucide/undo-2'\nimport unlock from '@iconify-icons/lucide/unlock'\nimport x from '@iconify-icons/lucide/x'\nimport zoomIn from '@iconify-icons/lucide/zoom-in'\nimport zoomOut from '@iconify-icons/lucide/zoom-out'\nimport move from '@iconify-icons/lucide/move'\nimport pencilLine from '@iconify-icons/lucide/pencil-line'\nimport alignHorizontalDistributeCenter from '@iconify-icons/lucide/align-horizontal-distribute-center'\n\nfunction register(name: string, data: IconifyIcon) {\n addIcon(`lucide:${name}`, data)\n}\n\nregister('align-center', alignCenter)\nregister('align-center-vertical', alignCenterVertical)\nregister('align-end-vertical', alignEndVertical)\nregister('align-justify', alignJustify)\nregister('align-left', alignLeft)\nregister('align-right', alignRight)\nregister('align-start-vertical', alignStartVertical)\nregister('arrow-down', arrowDown)\nregister('arrow-down-to-line', arrowDownToLine)\nregister('arrow-up', arrowUp)\nregister('arrow-up-to-line', arrowUpToLine)\nregister('barcode', barcode)\nregister('bold', bold)\nregister('boxes', boxes)\nregister('chevron-down', chevronDown)\nregister('circle', circle)\nregister('clipboard-paste', clipboardPaste)\nregister('code-2', code2)\nregister('copy', copy)\nregister('copy-plus', copyPlus)\nregister('eraser', eraser)\nregister('eye', eye)\nregister('flip-horizontal', flipHorizontal)\nregister('flip-vertical', flipVertical)\nregister('history', history)\nregister('image', image)\nregister('layout-grid', layoutGrid)\nregister('list-tree', listTree)\nregister('lock', lock)\nregister('minus', minus)\nregister('panel-left', panelLeft)\nregister('plus', plus)\nregister('qr-code', qrCode)\nregister('redo-2', redo2)\nregister('rotate-cw', rotateCw)\nregister('save', save)\nregister('scissors', scissors)\nregister('scan-eye', scanEye)\nregister('separator-horizontal', separatorHorizontal)\nregister('separator-vertical', separatorVertical)\nregister('sliders-horizontal', slidersHorizontal)\nregister('square', square)\nregister('table', table)\nregister('trash-2', trash2)\nregister('type', typeIcon)\nregister('undo-2', undo2)\nregister('unlock', unlock)\nregister('x', x)\nregister('zoom-in', zoomIn)\nregister('zoom-out', zoomOut)\nregister('move', move)\nregister('pencil-line', pencilLine)\nregister('align-horizontal-distribute-center', alignHorizontalDistributeCenter)\n","/** Iconify icon ids (Lucide set). */\nexport const ICON_DELETE = 'lucide:trash-2'\n\nexport const TOOL_ICONS = {\n undo: 'lucide:undo-2',\n redo: 'lucide:redo-2',\n alignLeft: 'lucide:align-left',\n alignCenter: 'lucide:align-center',\n alignRight: 'lucide:align-right',\n alignTop: 'lucide:align-start-vertical',\n alignMiddle: 'lucide:align-center-vertical',\n alignBottom: 'lucide:align-end-vertical',\n moveTop: 'lucide:arrow-up-to-line',\n moveUp: 'lucide:arrow-up',\n moveDown: 'lucide:arrow-down',\n moveBottom: 'lucide:arrow-down-to-line',\n flipH: 'lucide:flip-horizontal',\n flipV: 'lucide:flip-vertical',\n fontInc: 'lucide:plus',\n fontDec: 'lucide:minus',\n fontBold: 'lucide:bold',\n fontUnbold: 'lucide:bold',\n lock: 'lucide:lock',\n unlock: 'lucide:unlock',\n clone: 'lucide:copy-plus',\n copy: 'lucide:copy',\n cut: 'lucide:scissors',\n paste: 'lucide:clipboard-paste',\n delete: ICON_DELETE,\n zoomOut: 'lucide:zoom-out',\n zoomIn: 'lucide:zoom-in',\n rotate: 'lucide:rotate-cw',\n clear: 'lucide:eraser',\n toggle: 'lucide:panel-left',\n} as const\n\nexport const PANEL_ICONS = {\n draggableEls: 'lucide:boxes',\n miniMap: 'lucide:scan-eye',\n pageStructure: 'lucide:list-tree',\n pageHistory: 'lucide:history',\n properties: 'lucide:sliders-horizontal',\n} as const\n\nexport const ELEMENT_ICON_NAMES: Record<string, string> = {\n text: 'lucide:type',\n image: 'lucide:image',\n barcode: 'lucide:barcode',\n qrcode: 'lucide:qr-code',\n longText: 'lucide:align-justify',\n table: 'lucide:table',\n html: 'lucide:code-2',\n pageBreak: 'lucide:separator-horizontal',\n hline: 'lucide:minus',\n vline: 'lucide:separator-vertical',\n rect: 'lucide:square',\n oval: 'lucide:circle',\n}\n\nexport const HEADER_TAB_ICONS: Record<string, string> = {\n base: 'lucide:layout-grid',\n text: ELEMENT_ICON_NAMES.text,\n image: ELEMENT_ICON_NAMES.image,\n qrcode: ELEMENT_ICON_NAMES.qrcode,\n barcode: ELEMENT_ICON_NAMES.barcode,\n longText: ELEMENT_ICON_NAMES.longText,\n table: ELEMENT_ICON_NAMES.table,\n html: ELEMENT_ICON_NAMES.html,\n}\n\nexport const UI_ICONS = {\n save: 'lucide:save',\n preview: 'lucide:eye',\n editTemplate: 'lucide:file-json-2',\n editPrintData: 'lucide:database',\n exportFile: 'lucide:download',\n importFile: 'lucide:upload',\n chevronDown: 'lucide:chevron-down',\n close: 'lucide:x',\n} as const\n\n/** Icons for normalized history step labels. */\nexport const HISTORY_ICONS: Record<string, string> = {\n 移动: 'lucide:move',\n 元素对齐: 'lucide:align-horizontal-distribute-center',\n 参数修改: 'lucide:pencil-line',\n 初始: 'lucide:history',\n 缩放: 'lucide:zoom-in',\n}\n\nexport function iconForHistoryLabel(label: string, rawType?: string): string {\n return HISTORY_ICONS[label] || (rawType && HISTORY_ICONS[rawType]) || HISTORY_ICONS['参数修改']\n}\n\nexport function isIconifyName(value: string): boolean {\n return !!value && !value.trim().startsWith('<')\n}\n\nexport function elementTypeKey(item: any): string {\n const type = String(item?.printElementType?.type || '')\n if (type && ELEMENT_ICON_NAMES[type]) return type\n const tid = String(item?.printElementType?.tid || '')\n const short = tid.split('.').pop() || type\n return short && ELEMENT_ICON_NAMES[short] ? short : 'text'\n}\n\nexport function iconForElement(item: any): string {\n return ELEMENT_ICON_NAMES[elementTypeKey(item)] || ELEMENT_ICON_NAMES.text\n}\n\nexport function iconForElementKey(key: string): string {\n return ELEMENT_ICON_NAMES[key] || ELEMENT_ICON_NAMES.text\n}\n\nexport function iconForHeaderTab(key: string): string {\n return HEADER_TAB_ICONS[key] || HEADER_TAB_ICONS.base\n}\n","import type { PaperType, ToolDescriptor } from './types'\nimport { PANEL_ICONS, TOOL_ICONS } from './constants/icons'\n\nexport const DESIGN_CONTAINER_ID = 'hiprint-printTemplate'\nexport const SETTING_CONTAINER_ID = 'PrintElementOptionSetting'\nexport const PAGINATION_CLASS = 'hiprint-printPagination'\nexport const PAGINATION_SELECTOR = `.${PAGINATION_CLASS}`\n\nexport const DRAGGABLE_ITEM_CLASS = 'ep-draggable-item'\n\n/** Empty hiprint template JSON used by the JSON editor reset action. */\nexport const EMPTY_TEMPLATE_JSON = { panels: [] as any[] }\n\n/** Canvas zoom limits (fraction of 100%). */\nexport const ZOOM_MIN = 0.1\nexport const ZOOM_MAX = 2\nexport const ZOOM_STEP = 0.1\n\n/** Standard ISO paper sizes (in mm). \"自定义\" (Custom) keeps the current size. */\nexport const DEFAULT_PAPER_LIST: PaperType[] = [\n { type: '自定义', width: 0, height: 0 },\n { type: 'A1', width: 594, height: 841 },\n { type: 'A2', width: 420, height: 594 },\n { type: 'A3', width: 297, height: 420 },\n { type: 'A4', width: 210, height: 297 },\n { type: 'A5', width: 148, height: 210 },\n { type: 'A6', width: 105, height: 148 },\n { type: 'A7', width: 74, height: 105 },\n { type: 'B1', width: 707, height: 1000 },\n { type: 'B2', width: 500, height: 707 },\n { type: 'B3', width: 353, height: 500 },\n { type: 'B4', width: 250, height: 353 },\n { type: 'B5', width: 176, height: 250 },\n { type: 'B6', width: 125, height: 176 },\n { type: 'B7', width: 88, height: 125 },\n]\n\nexport const DEFAULT_FONT_LIST = [\n { title: '默认', value: '' },\n { title: '微软雅黑', value: 'Microsoft YaHei' },\n { title: '黑体', value: 'STHeitiSC-Light' },\n { title: '思源黑体', value: 'SourceHanSansCN-Normal' },\n { title: '宋体', value: 'SimSun' },\n { title: '楷体', value: 'STKaiti' },\n { title: 'Arial', value: 'Arial' },\n { title: 'Tahoma', value: 'Tahoma' },\n]\n\n/** Default drag-element catalogue rendered inside the DraggableEls panel. */\nexport interface ElementCatalogueItem {\n group: string\n key: string\n label: string\n /** Maps to the `tid` consumed by hiprint provider. */\n tid: string\n /** Iconify icon id for the drag tile. */\n icon?: string\n}\n\nexport const DEFAULT_ELEMENT_CATALOGUE: ElementCatalogueItem[] = [\n { group: '常规', key: 'text', label: '文本', tid: 'defaultModule.text' },\n { group: '常规', key: 'image', label: '图片', tid: 'defaultModule.image' },\n { group: '常规', key: 'barcode', label: 'barcode', tid: 'defaultModule.barcode' },\n { group: '常规', key: 'qrcode', label: 'qrcode', tid: 'defaultModule.qrcode' },\n { group: '常规', key: 'table', label: '表格', tid: 'defaultModule.table' },\n { group: '常规', key: 'html', label: 'html', tid: 'defaultModule.html' },\n { group: '辅助', key: 'hline', label: '横线', tid: 'defaultModule.hline' },\n { group: '辅助', key: 'vline', label: '竖线', tid: 'defaultModule.vline' },\n { group: '辅助', key: 'rect', label: '矩形', tid: 'defaultModule.rect' },\n { group: '辅助', key: 'oval', label: '椭圆', tid: 'defaultModule.oval' },\n]\n\n/**\n * 28 toolbar actions as required by `print设计器功能.md`.\n * Click handlers are wired against DesignerUtils, see Toolbar.vue.\n */\nexport const DEFAULT_TOOLBAR: ToolDescriptor[] = [\n { key: 'undo', i18n: 'tool.undo', icon: TOOL_ICONS.undo },\n { key: 'redo', i18n: 'tool.redo', icon: TOOL_ICONS.redo },\n { key: 'sep1', icon: '', separator: true },\n { key: 'alignLeft', i18n: 'tool.alignLeft', icon: TOOL_ICONS.alignLeft, needSelection: true },\n { key: 'alignCenter', i18n: 'tool.alignCenter', icon: TOOL_ICONS.alignCenter, needSelection: true },\n { key: 'alignRight', i18n: 'tool.alignRight', icon: TOOL_ICONS.alignRight, needSelection: true },\n { key: 'alignTop', i18n: 'tool.alignTop', icon: TOOL_ICONS.alignTop, needSelection: true },\n { key: 'alignMiddle', i18n: 'tool.alignMiddle', icon: TOOL_ICONS.alignMiddle, needSelection: true },\n { key: 'alignBottom', i18n: 'tool.alignBottom', icon: TOOL_ICONS.alignBottom, needSelection: true },\n { key: 'sep2', icon: '', separator: true },\n { key: 'moveTop', i18n: 'tool.moveTop', icon: TOOL_ICONS.moveTop, needSelection: true },\n { key: 'moveUp', i18n: 'tool.moveUp', icon: TOOL_ICONS.moveUp, needSelection: true },\n { key: 'moveDown', i18n: 'tool.moveDown', icon: TOOL_ICONS.moveDown, needSelection: true },\n { key: 'moveBottom', i18n: 'tool.moveBottom', icon: TOOL_ICONS.moveBottom, needSelection: true },\n { key: 'sep3', icon: '', separator: true },\n { key: 'flipH', i18n: 'tool.flipH', icon: TOOL_ICONS.flipH, needSelection: true },\n { key: 'flipV', i18n: 'tool.flipV', icon: TOOL_ICONS.flipV, needSelection: true },\n { key: 'sep4', icon: '', separator: true },\n { key: 'fontInc', i18n: 'tool.fontInc', icon: TOOL_ICONS.fontInc, needSelection: true },\n { key: 'fontDec', i18n: 'tool.fontDec', icon: TOOL_ICONS.fontDec, needSelection: true },\n { key: 'fontBold', i18n: 'tool.fontBold', icon: TOOL_ICONS.fontBold, needSelection: true },\n { key: 'fontUnbold', i18n: 'tool.fontUnbold', icon: TOOL_ICONS.fontUnbold, needSelection: true },\n { key: 'sep5', icon: '', separator: true },\n { key: 'lockToggle', display: 'lockToggle', icon: '', needSelection: true },\n { key: 'clone', i18n: 'tool.clone', icon: TOOL_ICONS.clone, needSelection: true },\n { key: 'copy', i18n: 'tool.copy', icon: TOOL_ICONS.copy, needSelection: true },\n { key: 'cut', i18n: 'tool.cut', icon: TOOL_ICONS.cut, needSelection: true },\n { key: 'paste', i18n: 'tool.paste', icon: TOOL_ICONS.paste },\n { key: 'delete', i18n: 'tool.delete', icon: TOOL_ICONS.delete, needSelection: true },\n { key: 'sep6', icon: '', separator: true },\n { key: 'zoomOut', i18n: 'tool.zoomOut', icon: TOOL_ICONS.zoomOut },\n { key: 'zoomPercent', display: 'zoomPercent', icon: '' },\n { key: 'zoomIn', i18n: 'tool.zoomIn', icon: TOOL_ICONS.zoomIn },\n { key: 'rotate', i18n: 'tool.rotate', icon: TOOL_ICONS.rotate, needSelection: true },\n { key: 'clear', i18n: 'tool.clear', icon: TOOL_ICONS.clear },\n { key: 'spacer', icon: '', separator: true },\n { key: 'panelDraggableEls', i18n: 'panel.draggableEls', icon: PANEL_ICONS.draggableEls, panelKey: 'draggableEls' },\n { key: 'panelMiniMap', i18n: 'panel.miniMap', icon: PANEL_ICONS.miniMap, panelKey: 'miniMap' },\n { key: 'panelPageStructure', i18n: 'panel.pageStructure', icon: PANEL_ICONS.pageStructure, panelKey: 'pageStructure' },\n { key: 'panelPageHistory', i18n: 'panel.pageHistory', icon: PANEL_ICONS.pageHistory, panelKey: 'pageHistory' },\n { key: 'panelProperties', i18n: 'panel.properties', icon: PANEL_ICONS.properties, panelKey: 'properties' },\n { key: 'sepPanels', icon: '', separator: true },\n { key: 'togglePanels', i18n: 'tool.togglePanels', icon: TOOL_ICONS.toggle },\n { key: 'sepLang', icon: '', separator: true },\n { key: 'langSelect', display: 'langSelect', icon: '' },\n]\n\nexport const STORAGE_PREFIX = 'svp:'\n","import { hiprint } from './hiprint-bridge'\nimport { DEFAULT_PAPER_LIST, DESIGN_CONTAINER_ID, SETTING_CONTAINER_ID } from '../constants'\nimport type { PaperType } from '../types'\n\nexport interface PaperListValue {\n type: string\n width: number\n height: number\n}\n\nlet defaultPaperList: PaperType[] = DEFAULT_PAPER_LIST\nlet patched = false\nconst templateRegistry = new Map<string, any>()\n\nexport function registerPrintTemplate(tpl: any) {\n const id = tpl?.id ?? tpl?.templateId\n if (id != null) templateRegistry.set(String(id), tpl)\n}\n\nfunction getJQuery(): any {\n return (window as any).jQuery || (window as any).$\n}\n\nexport function nearMm(a: number, b: number, eps = 1.5): boolean {\n return Math.abs(a - b) <= eps\n}\n\nexport function detectPaperType(\n width: number,\n height: number,\n list: PaperType[] = defaultPaperList,\n): string {\n const match = list.find(\n (p) => p.width > 0 && (\n (nearMm(p.width, width) && nearMm(p.height, height))\n || (nearMm(p.width, height) && nearMm(p.height, width))\n ),\n )\n return match?.type || '自定义'\n}\n\nfunction resolveTemplate(tplId: string): any | null {\n const cached = templateRegistry.get(tplId)\n if (cached) return cached\n try {\n const lib = (hiprint as any)?.instance ?? (hiprint as any)\n return lib?.getPrintTemplateById?.(tplId) ?? null\n } catch {\n return null\n }\n}\n\nexport function getTemplatePaperList(tpl?: any): PaperType[] {\n if (tpl?.getPaperList) {\n try {\n const list = tpl.getPaperList()\n if (Array.isArray(list) && list.length) return list\n } catch { /* ignore */ }\n }\n return defaultPaperList\n}\n\nexport function applyPaperList(\n tpl: any,\n value: PaperListValue,\n onApplied?: () => void,\n) {\n if (!tpl?.setPaper || !value) return\n const list = getTemplatePaperList(tpl)\n try {\n const preset = value.type !== '自定义'\n ? list.find((p) => p.type === value.type && p.width > 0)\n : null\n if (preset) {\n tpl.setPaper(String(preset.width), String(preset.height))\n } else if (value.width > 0 && value.height > 0) {\n tpl.setPaper(String(value.width), String(value.height))\n } else {\n return\n }\n const panel = tpl.editingPanel\n if (panel) panel.paperType = value.type || '自定义'\n onApplied?.()\n } catch (e) {\n console.warn('[hiprint-paper-list] setPaper failed', e)\n }\n}\n\nfunction buildPaperListValue(panel: any, list: PaperType[]): PaperListValue {\n const width = Number(panel?.mmwidth ?? panel?.width ?? 0)\n const height = Number(panel?.mmheight ?? panel?.height ?? 0)\n return {\n type: detectPaperType(width, height, list),\n width,\n height,\n }\n}\n\n/** Hiprint panel option item — 纸张列表 + 宽 + 高 (mm). */\nfunction PaperListOptionItem(this: any) {\n this.name = 'paperList'\n}\n\nPaperListOptionItem.prototype.createTarget = function (printTemplate: any) {\n const $ = getJQuery()\n if (!$) return $('<div />')\n\n this.printTemplate = printTemplate\n const wrapper = $('<div class=\"svp-hiprint-paper-list\" />')\n\n const typeRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">纸张列表</div>\n <div class=\"hiprint-option-item-field\">\n <select class=\"auto-submit svp-paper-type\"></select>\n </div>\n </div>`)\n\n const widthRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">宽</div>\n <div class=\"hiprint-option-item-field\">\n <input class=\"auto-submit svp-paper-width\" type=\"number\" min=\"1\" placeholder=\"宽(mm)\" />\n </div>\n </div>`)\n\n const heightRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">高</div>\n <div class=\"hiprint-option-item-field\">\n <input class=\"auto-submit svp-paper-height\" type=\"number\" min=\"1\" placeholder=\"高(mm)\" />\n </div>\n </div>`)\n\n this.typeSelect = typeRow.find('select')\n this.widthInput = widthRow.find('input')\n this.heightInput = heightRow.find('input')\n\n const list = getTemplatePaperList(printTemplate)\n list.forEach((p) => {\n this.typeSelect.append(\n $('<option />').attr('value', p.type).text(p.type),\n )\n })\n\n this.typeSelect.on('change', () => {\n const preset = list.find((p) => p.type === this.typeSelect.val())\n if (preset && preset.width > 0) {\n this.widthInput.val(preset.width)\n this.heightInput.val(preset.height)\n }\n })\n\n wrapper.append(typeRow, widthRow, heightRow)\n this.target = wrapper\n return wrapper\n}\n\nPaperListOptionItem.prototype.getValue = function (): PaperListValue {\n return {\n type: String(this.typeSelect?.val() || '自定义'),\n width: Number(this.widthInput?.val()) || 0,\n height: Number(this.heightInput?.val()) || 0,\n }\n}\n\nPaperListOptionItem.prototype.setValue = function (value: PaperListValue) {\n if (!value) return\n const $ = getJQuery()\n if (!$) return\n const list = getTemplatePaperList(this.printTemplate)\n list.forEach((p) => {\n if (!this.typeSelect.find(`option[value=\"${p.type}\"]`).length) {\n this.typeSelect.append($('<option />').attr('value', p.type).text(p.type))\n }\n })\n this.typeSelect.val(value.type || detectPaperType(value.width, value.height, list))\n this.widthInput.val(value.width || '')\n this.heightInput.val(value.height || '')\n}\n\nPaperListOptionItem.prototype.destroy = function () {\n this.target?.remove?.()\n}\n\n/** Hiprint panel option item — 打印方向 + 提示文案. */\nfunction OrientOptionItem(this: any) {\n this.name = 'orient'\n}\n\nOrientOptionItem.prototype.createTarget = function () {\n const $ = getJQuery()\n if (!$) return $('<div />')\n\n const wrapper = $('<div class=\"svp-hiprint-orient\" />')\n wrapper.append(\n $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">打印方向</div>\n <div class=\"hiprint-option-item-field\">\n <select class=\"auto-submit\">\n <option value=\"\">默认</option>\n <option value=\"1\">纵向</option>\n <option value=\"2\">横向</option>\n </select>\n </div>\n </div>`),\n )\n wrapper.append(\n $('<div class=\"hiprint-option-item-desc\">(仅自定义纸质有效)</div>'),\n )\n this.target = wrapper\n return this.target\n}\n\nOrientOptionItem.prototype.getValue = function () {\n const val = this.target?.find?.('select')?.val?.()\n if (val === '' || val == null) return undefined\n return parseFloat(String(val))\n}\n\nOrientOptionItem.prototype.setValue = function (value: any) {\n this.target?.find?.('select')?.val?.(value ?? '')\n}\n\nOrientOptionItem.prototype.destroy = function () {\n this.target?.remove?.()\n}\n\nconst WATERMARK_TIME_FORMATS = [\n 'YYYY-MM-DD HH:mm:ss',\n 'YYYY-MM-DD HH:mm',\n 'YYYY-MM-DD HH',\n 'YYYY-MM-DD',\n 'YYYY-MMMM',\n 'YYYY-MM',\n 'YYYY',\n]\n\n/** Hiprint panel option item — 水印功能 (one label + control per row). */\nfunction WatermarkOptionItem(this: any) {\n this.name = 'watermarkOptions'\n}\n\nWatermarkOptionItem.prototype.createTarget = function () {\n const $ = getJQuery()\n if (!$) return $('<div />')\n\n const wrapper = $('<div class=\"svp-hiprint-watermark\" />')\n wrapper.append($('<div class=\"hiprint-option-title\">水印功能</div>'))\n\n const contentRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">水印内容</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"text\" class=\"auto-submit\" placeholder=\"水印内容\" />\n </div>\n </div>`)\n\n const fillStyleRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">字体颜色</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"text\" class=\"auto-submit\" data-format=\"rgb\" data-opacity=\"0.3\" placeholder=\"字体颜色\" />\n </div>\n </div>`)\n\n const fontSizeRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">字体大小</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"range\" class=\"auto-submit\" min=\"10\" max=\"80\" placeholder=\"字体大小\" />\n </div>\n </div>`)\n\n const rotateRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">旋转角度</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"range\" class=\"auto-submit\" min=\"0\" max=\"180\" placeholder=\"旋转角度\" />\n </div>\n </div>`)\n\n const widthRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">水平密度</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"range\" class=\"auto-submit\" min=\"100\" max=\"800\" placeholder=\"水平密度\" />\n </div>\n </div>`)\n\n const heightRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">垂直密度</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"range\" class=\"auto-submit\" min=\"100\" max=\"800\" placeholder=\"垂直密度\" />\n </div>\n </div>`)\n\n const timestampRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">水印时间</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"checkbox\" class=\"auto-submit\" placeholder=\"水印时间\" />\n </div>\n </div>`)\n\n const formatRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">时间格式</div>\n <div class=\"hiprint-option-item-field\">\n <select class=\"auto-submit\"></select>\n </div>\n </div>`)\n\n const formatSelect = formatRow.find('select')\n formatSelect.append($('<option value=\"\">默认(YYYY-MM-DD HH:mm)</option>'))\n WATERMARK_TIME_FORMATS.forEach((fmt) => {\n formatSelect.append($(`<option value=\"${fmt}\">${fmt}</option>`))\n })\n\n wrapper.append(\n contentRow,\n fillStyleRow,\n fontSizeRow,\n rotateRow,\n widthRow,\n heightRow,\n timestampRow,\n formatRow,\n )\n\n this.content = contentRow.find('input')\n this.fillStyle = fillStyleRow.find('input')\n this.fontSize = fontSizeRow.find('input')\n this.rotate = rotateRow.find('input')\n this.width = widthRow.find('input')\n this.height = heightRow.find('input')\n this.timestamp = timestampRow.find('input')\n this.format = formatSelect\n this.target = wrapper\n return this.target\n}\n\nWatermarkOptionItem.prototype.getValue = function () {\n const format = this.format?.val?.()\n return {\n content: this.content?.val?.() || '',\n fillStyle: this.fillStyle?.val?.() || 'rgba(184, 184, 184, 0.3)',\n fontSize: `${parseInt(String(this.fontSize?.val?.() || '14'), 10)}px`,\n rotate: parseInt(String(this.rotate?.val?.() || '25'), 10),\n width: parseInt(String(this.width?.val?.() || '200'), 10),\n height: parseInt(String(this.height?.val?.() || '200'), 10),\n timestamp: !!this.timestamp?.is?.(':checked'),\n format: format ? String(format) : 'YYYY-MM-DD HH:mm',\n }\n}\n\nWatermarkOptionItem.prototype.setValue = function (value: any) {\n if (!value) value = {}\n this.content?.val?.(value.content || '')\n this.fillStyle?.val?.(value.fillStyle || 'rgba(184, 184, 184, 0.3)')\n try {\n this.fillStyle?.minicolors?.({\n format: 'rgb',\n opacity: true,\n theme: 'bootstrap',\n })\n } catch { /* minicolors optional until plugin ready */ }\n\n const fontSize = parseInt(String(value.fontSize || '14').replace(/px$/i, ''), 10) || 14\n this.fontSize?.val?.(fontSize)\n this.rotate?.val?.(value.rotate ?? 25)\n this.width?.val?.(value.width ?? 200)\n this.height?.val?.(value.height ?? 200)\n this.timestamp?.prop?.('checked', value.timestamp != null ? !!value.timestamp : false)\n this.format?.val?.(value.format || 'YYYY-MM-DD HH:mm')\n}\n\nWatermarkOptionItem.prototype.destroy = function () {\n this.target?.remove?.()\n}\n\n/** Hiprint panel / element option — 背景颜色 (row + minicolors). */\nfunction PanelBackgroundColorOptionItem(this: any) {\n this.name = 'backgroundColor'\n}\n\nPanelBackgroundColorOptionItem.prototype.createTarget = function () {\n const $ = getJQuery()\n if (!$) return $('<div />')\n\n const row = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">背景颜色</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"text\" class=\"auto-submit\" />\n </div>\n </div>`)\n\n this.input = row.find('input')\n this.target = row\n return this.target\n}\n\nPanelBackgroundColorOptionItem.prototype.getValue = function () {\n const val = this.input?.val?.()\n return val ? String(val) : undefined\n}\n\nPanelBackgroundColorOptionItem.prototype.setValue = function (value: any) {\n const color = value || '#ffffff'\n try {\n this.input?.minicolors?.({\n defaultValue: color,\n theme: 'bootstrap',\n })\n } catch { /* minicolors optional until plugin ready */ }\n this.input?.val?.(color)\n}\n\nPanelBackgroundColorOptionItem.prototype.css = function (target: any, value: any) {\n const $ = getJQuery()\n if (!$ || !target?.length) return null\n if (value) {\n $(target).css('background-color', value)\n return `background-color:${value}`\n }\n target[0].style.backgroundColor = ''\n return null\n}\n\nPanelBackgroundColorOptionItem.prototype.destroy = function () {\n this.target?.remove?.()\n}\n\nexport function applyPanelBackgroundColor(panel: any, color?: string) {\n if (!panel) return\n const value = color || '#ffffff'\n panel.backgroundColor = value\n const $ = getJQuery()\n const paper = panel.designPaper?.target\n || panel.target?.find?.('.hiprint-printPaper')\n || ($ && panel.target ? $(panel.target).find('.hiprint-printPaper') : null)\n if (paper?.css) {\n paper.css('background-color', value)\n } else if (paper?.length && paper[0]?.style) {\n paper[0].style.backgroundColor = value\n }\n}\n\n/** Hiprint panel option item — 排列填充纸张. */\nfunction PanelLayoutOptionItem(this: any) {\n this.name = 'panelLayoutOptions'\n}\n\nPanelLayoutOptionItem.prototype.createTarget = function () {\n const $ = getJQuery()\n if (!$) return $('<div />')\n\n const wrapper = $('<div class=\"svp-hiprint-panel-layout\" />')\n wrapper.append($('<div class=\"hiprint-option-title\">排列填充纸张</div>'))\n wrapper.append(\n $('<div class=\"hiprint-option-item-desc svp-panel-layout-hint\">小模板传数组&填充纸张宽高打印</div>'),\n )\n\n const layoutTypeRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">排列方式</div>\n <div class=\"hiprint-option-item-field\">\n <select class=\"auto-submit\">\n <option value=\"column\">纵向</option>\n <option value=\"row\">横向</option>\n </select>\n </div>\n </div>`)\n\n const layoutRowGapRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">垂直间距</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"number\" class=\"auto-submit\" placeholder=\"垂直间距mm\" />\n </div>\n </div>`)\n\n const layoutColumnGapRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">水平间距</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"number\" class=\"auto-submit\" placeholder=\"水平间距mm\" />\n </div>\n </div>`)\n\n const paperWidthRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">纸张宽度</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"number\" class=\"auto-submit\" placeholder=\"纸张宽度mm\" />\n </div>\n </div>`)\n\n const paperHeightRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">纸张高度</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"number\" class=\"auto-submit\" placeholder=\"纸张高度mm\" />\n </div>\n </div>`)\n\n const paperStyleRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">纸张样式</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"text\" class=\"auto-submit\" placeholder=\"align-content:center;justify-content:center\" />\n </div>\n </div>`)\n\n wrapper.append(\n layoutTypeRow,\n layoutRowGapRow,\n layoutColumnGapRow,\n paperWidthRow,\n paperHeightRow,\n paperStyleRow,\n )\n\n this.layoutType = layoutTypeRow.find('select')\n this.layoutRowGap = layoutRowGapRow.find('input')\n this.layoutColumnGap = layoutColumnGapRow.find('input')\n this.paperWidth = paperWidthRow.find('input')\n this.paperHeight = paperHeightRow.find('input')\n this.paperStyle = paperStyleRow.find('input')\n this.target = wrapper\n return this.target\n}\n\nPanelLayoutOptionItem.prototype.getValue = function () {\n const num = (el: any) => parseInt(String(el?.val?.() || 0), 10) || 0\n return {\n layoutType: this.layoutType?.val?.() || 'column',\n layoutRowGap: num(this.layoutRowGap),\n layoutColumnGap: num(this.layoutColumnGap),\n paperWidth: num(this.paperWidth),\n paperHeight: num(this.paperHeight),\n paperStyle: this.paperStyle?.val?.() || '',\n }\n}\n\nPanelLayoutOptionItem.prototype.setValue = function (value: any) {\n if (!value) return\n this.layoutType?.val?.(value.layoutType || 'column')\n this.layoutRowGap?.val?.(value.layoutRowGap ?? '')\n this.layoutColumnGap?.val?.(value.layoutColumnGap ?? '')\n this.paperWidth?.val?.(value.paperWidth ?? '')\n this.paperHeight?.val?.(value.paperHeight ?? '')\n this.paperStyle?.val?.(value.paperStyle ?? '')\n}\n\nPanelLayoutOptionItem.prototype.destroy = function () {\n this.target?.remove?.()\n}\n\nfunction reorderPanelSettingOptions(\n options: Record<string, any>,\n panel: any,\n paperList: PaperListValue,\n) {\n const {\n paperList: _pl,\n panelLayoutOptions,\n backgroundColor: _bg,\n watermarkOptions,\n ...rest\n } = options\n\n return {\n paperList,\n ...rest,\n backgroundColor: panel.backgroundColor ?? _bg ?? '#ffffff',\n watermarkOptions,\n panelLayoutOptions,\n }\n}\n\nfunction ensurePaperListSupportOptionsFirst() {\n try {\n const cfg = (window as any).HIPRINT_CONFIG\n const instanceOpts = (hiprint as any)?.instance?.panel?.supportOptions\n const cfgOpts = cfg?.panel?.supportOptions\n const opts = instanceOpts || cfgOpts\n if (!Array.isArray(opts)) return\n const idx = opts.findIndex((o: any) => o.name === 'paperList')\n if (idx > 0) {\n const [item] = opts.splice(idx, 1)\n opts.unshift(item)\n } else if (idx < 0) {\n opts.unshift({ name: 'paperList', hidden: false })\n }\n if (!opts.some((o: any) => o.name === 'backgroundColor')) {\n const wmIdx = opts.findIndex((o: any) => o.name === 'watermarkOptions')\n const entry = { name: 'backgroundColor', hidden: false }\n if (wmIdx >= 0) opts.splice(wmIdx, 0, entry)\n else opts.push(entry)\n }\n } catch { /* ignore */ }\n}\n\nfunction patchPrintTemplatePaperList() {\n const proto = hiprint.PrintTemplate?.prototype\n if (!proto || proto.__svpPaperListPatched) return\n\n proto.setPaperList = function (list: PaperType[]) {\n this._paperList = Array.isArray(list) && list.length ? list : defaultPaperList\n }\n proto.getPaperList = function (): PaperType[] {\n return this._paperList || defaultPaperList\n }\n proto.__svpPaperListPatched = true\n}\n\nfunction patchPanelSettingTrigger(onPaperApplied?: (tpl: any) => void) {\n const bus = (window as any).hinnn?.event\n if (!bus || bus.__svpPaperListTriggerPatch) return\n\n const origTrigger = bus.trigger.bind(bus)\n bus.trigger = function (key: string, ...args: any[]) {\n if (\n typeof key === 'string'\n && key.startsWith('BuildCustomOptionSettingEventKey_')\n && args[0]?.options\n ) {\n const tplId = key.slice('BuildCustomOptionSettingEventKey_'.length)\n const tpl = resolveTemplate(tplId)\n const panel = tpl?.editingPanel\n if (panel) {\n const payload = args[0]\n const list = getTemplatePaperList(tpl)\n const paperList = buildPaperListValue(panel, list)\n payload.options = reorderPanelSettingOptions(payload.options, panel, paperList)\n const origCallback = payload.callback\n payload.callback = (values: any) => {\n if (values?.paperList && tpl) {\n applyPaperList(tpl, values.paperList, () => onPaperApplied?.(tpl))\n }\n if (values && 'backgroundColor' in values) {\n applyPanelBackgroundColor(panel, values.backgroundColor)\n }\n origCallback?.(values)\n }\n }\n }\n return origTrigger(key, ...args)\n }\n bus.__svpPaperListTriggerPatch = true\n}\n\n/**\n * Register paper-list panel options into hiprint (sv-print compatible).\n * Call once during hiprint init.\n */\nexport function setupHiprintPaperList(\n paperList: PaperType[] = DEFAULT_PAPER_LIST,\n onPaperApplied?: (tpl: any) => void,\n) {\n defaultPaperList = paperList.length ? paperList : DEFAULT_PAPER_LIST\n if (patched) return\n\n patchPrintTemplatePaperList()\n patchPanelSettingTrigger(onPaperApplied)\n\n try {\n hiprint.setConfig({\n optionItems: [\n PaperListOptionItem as any,\n OrientOptionItem as any,\n PanelBackgroundColorOptionItem as any,\n WatermarkOptionItem as any,\n PanelLayoutOptionItem as any,\n ],\n panel: {\n supportOptions: [\n { name: 'paperList', hidden: false },\n { name: 'backgroundColor', hidden: false },\n ],\n },\n })\n ensurePaperListSupportOptionsFirst()\n } catch (e) {\n console.warn('[hiprint-paper-list] setConfig failed', e)\n }\n\n patched = true\n}\n\nexport function assignTemplatePaperList(tpl: any, paperList?: PaperType[]) {\n if (!tpl?.setPaperList) return\n tpl.setPaperList(paperList?.length ? paperList : defaultPaperList)\n}\n\n/** Open panel-level hiprint settings (same as clicking blank paper). */\nexport function openPanelSetting() {\n if (typeof window === 'undefined') return\n\n const tryOpen = (attempt = 0) => {\n const $ = getJQuery()\n const host = document.getElementById(SETTING_CONTAINER_ID)\n const paper = document.querySelector(\n `#${DESIGN_CONTAINER_ID} .hiprint-printPaper`,\n ) as HTMLElement | null\n\n if (paper && host) {\n if ($) {\n $(paper).trigger('click')\n } else {\n paper.click()\n }\n return\n }\n\n if (attempt < 20) {\n requestAnimationFrame(() => tryOpen(attempt + 1))\n }\n }\n\n tryOpen()\n}\n","/** Table field list used when dragging a new table onto the canvas. */\nexport const DEFAULT_TABLE_FIELDS = [\n { text: 'id', field: 'id' },\n { text: '姓名', field: 'name' },\n { text: '性别', field: 'gender' },\n { text: '数量', field: 'count' },\n] as const\n\n/** Column layout from `template.json` — applied to `defaultModule.table`. */\nexport const DEFAULT_TABLE_COLUMNS = [\n [\n {\n width: 102.30000000000001,\n checked: true,\n fixed: false,\n rowspan: 1,\n colspan: 1,\n },\n {\n width: 102.30000000000001,\n title: '姓名',\n field: 'name',\n checked: true,\n columnId: 'name',\n fixed: false,\n rowspan: 1,\n colspan: 1,\n align: 'center',\n tableSummary: 'count',\n },\n {\n width: 102.30000000000001,\n title: '数量',\n field: 'count',\n checked: true,\n columnId: 'count',\n fixed: false,\n rowspan: 1,\n colspan: 1,\n align: 'center',\n tableSummary: 'sum',\n },\n {\n width: 102.30000000000001,\n checked: true,\n fixed: false,\n rowspan: 1,\n colspan: 1,\n },\n {\n width: 102.30000000000001,\n checked: true,\n fixed: false,\n rowspan: 1,\n colspan: 1,\n },\n {\n width: 85.25,\n title: '性别',\n field: 'gender',\n checked: false,\n columnId: 'gender',\n fixed: false,\n rowspan: 1,\n colspan: 1,\n },\n ],\n] as const\n\n/** Overrides merged into hiprint `defaultModule.table` element type. */\nexport const DEFAULT_TABLE_ELEMENT_TYPE = {\n tid: 'defaultModule.table',\n title: '表格',\n type: 'table',\n field: 'table',\n tableFooterRepeat: '',\n fields: DEFAULT_TABLE_FIELDS.map((f) => ({ ...f })),\n columns: DEFAULT_TABLE_COLUMNS.map((row) => row.map((col) => ({ ...col }))),\n editable: true,\n columnDisplayEditable: true,\n columnDisplayIndexEditable: true,\n columnTitleEditable: true,\n columnResizable: true,\n columnAlignEditable: true,\n isEnableEditField: true,\n isEnableContextMenu: true,\n isEnableInsertRow: true,\n isEnableDeleteRow: true,\n isEnableInsertColumn: true,\n isEnableDeleteColumn: true,\n isEnableMergeCell: true,\n groupFields: [] as string[],\n groupFooterFormatter: undefined as undefined,\n}\n","/**\n * Public types for vue3-print-designer.\n *\n * These mirror the shape of the sv-print component contract so that\n * existing templates and plugin authors can migrate with minimal friction.\n */\n\n/** A daisyUI-style theme descriptor. */\nexport interface ThemeType {\n /** Theme name. When omitted a stable hash of the colors is used. */\n theme?: string\n primaryColor: string\n primaryContent?: string\n secondaryColor?: string\n secondaryContent?: string\n accentColor?: string\n accentContent?: string\n neutralColor?: string\n neutralContent?: string\n base100?: string\n base200?: string\n base300?: string\n baseContent?: string\n info?: string\n infoContent?: string\n success?: string\n successContent?: string\n warning?: string\n warningContent?: string\n error?: string\n errorContent?: string\n}\n\n/** Configures how a single floating panel (DragBox) shows up. */\nexport type DragBoxMode = 'default' | 'top' | 'left' | 'bottom' | 'right' | 'fixed'\n\nexport interface DragBoxStyleOptions {\n mode?: DragBoxMode\n /** Inline css string. */\n style?: string\n /** Initial visibility. */\n show?: boolean\n /** Title shown in the header. */\n title?: string\n /** Other free-form payload available in slots. */\n other?: Record<string, unknown>\n}\n\n/** Per-panel style/visibility overrides. */\nexport interface StyleOption {\n paperBox?: DragBoxStyleOptions\n panels?: DragBoxStyleOptions\n draggableEls?: DragBoxStyleOptions\n options?: DragBoxStyleOptions\n pageStructure?: DragBoxStyleOptions\n history?: DragBoxStyleOptions\n miniMap?: DragBoxStyleOptions\n editableTools?: DragBoxStyleOptions\n zIndexTools?: DragBoxStyleOptions\n fontTools?: DragBoxStyleOptions\n zoomTools?: DragBoxStyleOptions\n rotateTools?: DragBoxStyleOptions\n}\n\n/** Header / toolbar / footer visibility switches. */\nexport interface ShowOption {\n showHeader?: boolean\n showToolbar?: boolean\n showFooter?: boolean\n showPower?: boolean\n}\n\nexport interface PaperType {\n type: string\n width: number\n height: number\n}\n\nexport interface ProviderMap {\n /** CSS selector hiprint should fill with draggable items. */\n container: string\n /** Provider value (typically the tid prefix). */\n value: string\n render?: (e: any[]) => any\n}\n\nexport interface PreviewOptions {\n showPdf?: boolean\n showImg?: boolean\n showPrint2?: boolean\n}\n\n// ---------------------------------------------------------------------------\n// Plugin / hook system (mirrors sv-print)\n// ---------------------------------------------------------------------------\n\nexport type Hook =\n | 'init'\n | 'ready'\n | 'documentShortcutKeys'\n | 'shortcutKeys'\n | 'createPrintElement'\n | 'beforePrint'\n | 'beforePrint2'\n | 'getOptionItem'\n | 'onDesigned'\n | 'onPreview'\n | 'newPrintTemplate'\n | 'newPanel'\n | (string & {})\n\nexport interface HookOptions {\n hook: Hook\n name: string\n description?: string\n priority?: number\n run: (...args: any[]) => any | Promise<any>\n}\n\nexport interface PluginOptions {\n name: string\n description?: string\n init?: (input: any) => any\n hooks: HookOptions[]\n config?: Record<string, unknown>\n leastHiprintVersion?: string\n}\n\n/** Convenience factory typing for plugin authors. */\nexport type PluginFactory<T = unknown> = (opts?: T) => PluginOptions\n\n/** A `Provider` adds custom draggable element types into hiprint. */\nexport abstract class Provider {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n abstract addElementTypes(ctx: any): void\n}\n\n// ---------------------------------------------------------------------------\n// Designer / event surface\n// ---------------------------------------------------------------------------\n\nexport interface Events {\n onSave?: (key: string, data: any) => boolean | void\n onEdit?: (data: any) => boolean | void\n onEditData?: (data: any) => boolean | void\n onKeyDownEvent?: (e: KeyboardEvent, utils: any) => boolean | void\n}\n\nexport interface DesignOptions {\n grid?: boolean\n activePanel?: boolean\n adaptToSize?: boolean\n}\n\nexport interface DesignerPrintTemplateOptions {\n template: any\n fontList?: any[]\n fields?: any[]\n onImageChooseClick?: (target: any) => void\n onZoomChange?: (scale: number) => void\n onPanelAddClick?: (panel: any, createPanel: any) => void\n onFunctionClick?: (option: any, printElement: any, event: any) => void\n dataMode?: 1 | 2\n history?: boolean\n onDataChanged?: (type: string, json: any) => void\n onUpdateError?: (e: any) => void\n settingContainer?: string\n designContainer?: string\n paginationContainer?: string\n}\n\nexport interface RulerStyle {\n show?: boolean\n scale?: number\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n tickColor?: string\n paperRectColor?: string\n}\n\n/** Public props accepted by <Designer />. */\nexport interface DesignerProps {\n autoConnect?: boolean\n config?: any\n providers?: Provider[]\n providerMap?: ProviderMap | ProviderMap[]\n plugins?: PluginOptions[]\n /** Either a template JSON or template options object. */\n template?: any\n templateOptions?: DesignerPrintTemplateOptions\n designOptions?: DesignOptions\n printData?: any\n templateKey?: string\n title?: string\n authKey?: string\n headerLogoHtml?: string\n headerTitle?: string\n headerNewEle?: boolean\n headerEleList?: HeaderEle[]\n headerNewMenu?: boolean\n headerMenuList?: HeaderMenu[]\n events?: Events\n tags?: string[]\n styleOption?: StyleOption\n showOption?: ShowOption\n paperList?: PaperType[]\n theme?: string | ThemeType | ThemeType[]\n themeList?: string[]\n pageStructureGridMode?: boolean\n miniMapOriginMode?: boolean\n rulerStyle?: RulerStyle\n previewOptions?: PreviewOptions\n onPreviewClick?: (e: MouseEvent) => boolean | void\n onZoomChange?: (scale: number) => void\n onImageChooseClick?: (target: any) => void\n customDataFun?: (data: any, field: string, printData?: any) => string | number | object\n onPanelAddClick?: (panel: any, createPanel: any) => void\n onFunctionClick?: (option: any, printElement: any, event: any) => void\n onBeforeDragIn?: (printTemplate: any, panel: any, printElement: any) => boolean | void\n}\n\n/** Custom item inside the Header element-category bar. */\nexport interface HeaderEle {\n key: string\n label: string\n /** Iconify icon id or legacy inline SVG. */\n icon?: string\n tid?: string\n onClick?: (e: MouseEvent) => void\n}\n\n/** Header dropdown menu entry. */\nexport interface HeaderMenu {\n key: string\n label: string\n icon?: string\n onClick?: () => void\n children?: HeaderMenu[]\n}\n\n/** Internal: tool descriptor used by Toolbar.vue. */\nexport interface ToolDescriptor {\n key: string\n /** i18n key for tooltip. */\n i18n?: string\n /** Direct label, takes precedence over `i18n`. */\n label?: string\n /** Iconify icon id (e.g. `lucide:copy`) or legacy inline SVG markup. */\n icon: string\n /** When true the tool is rendered as a separator. */\n separator?: boolean\n /** Hide the tool. */\n hidden?: boolean\n /** Disabled when there is no current selection. */\n needSelection?: boolean\n /** Only on mobile. */\n mobileOnly?: boolean\n /** Hidden on mobile. */\n desktopOnly?: boolean\n /** Toggle a floating panel's visibility. */\n panelKey?: 'draggableEls' | 'miniMap' | 'pageStructure' | 'pageHistory' | 'properties'\n /** Render as a read-only label instead of a button. */\n display?: 'zoomPercent' | 'langSelect' | 'lockToggle'\n /** Click handler runs against DesignerUtils. */\n onClick?: (utils: any, ev: MouseEvent) => void\n}\n\nexport type Lang = 'zh-CN' | 'en-US' | (string & {})\n\nexport interface DesignedEventPayload {\n hiprint: any\n designerUtils: any\n}\n","import { defaultElementTypeProvider } from 'vue-plugin-hiprint'\nimport { DEFAULT_TABLE_ELEMENT_TYPE } from '../constants/default-table-element'\nimport { Provider } from '../types'\n\nconst TABLE_TID = 'defaultModule.table'\n\nfunction rebuildTableColumns(type: any) {\n if (typeof type.createTableColumnArray !== 'function') return\n type.columns = []\n DEFAULT_TABLE_ELEMENT_TYPE.columns.forEach((row) => {\n type.columns.push(type.createTableColumnArray(row.map((col) => ({ ...col }))))\n })\n if (typeof type.makeColumnObj === 'function') {\n type.columnObj = type.makeColumnObj()\n }\n}\n\nfunction applyCustomTableType(current: any) {\n Object.assign(current, {\n title: DEFAULT_TABLE_ELEMENT_TYPE.title,\n type: DEFAULT_TABLE_ELEMENT_TYPE.type,\n field: DEFAULT_TABLE_ELEMENT_TYPE.field,\n fields: DEFAULT_TABLE_ELEMENT_TYPE.fields.map((f) => ({ ...f })),\n editable: DEFAULT_TABLE_ELEMENT_TYPE.editable,\n columnDisplayEditable: DEFAULT_TABLE_ELEMENT_TYPE.columnDisplayEditable,\n columnDisplayIndexEditable: DEFAULT_TABLE_ELEMENT_TYPE.columnDisplayIndexEditable,\n columnTitleEditable: DEFAULT_TABLE_ELEMENT_TYPE.columnTitleEditable,\n columnResizable: DEFAULT_TABLE_ELEMENT_TYPE.columnResizable,\n columnAlignEditable: DEFAULT_TABLE_ELEMENT_TYPE.columnAlignEditable,\n isEnableEditField: DEFAULT_TABLE_ELEMENT_TYPE.isEnableEditField,\n isEnableContextMenu: DEFAULT_TABLE_ELEMENT_TYPE.isEnableContextMenu,\n isEnableInsertRow: DEFAULT_TABLE_ELEMENT_TYPE.isEnableInsertRow,\n isEnableDeleteRow: DEFAULT_TABLE_ELEMENT_TYPE.isEnableDeleteRow,\n isEnableInsertColumn: DEFAULT_TABLE_ELEMENT_TYPE.isEnableInsertColumn,\n isEnableDeleteColumn: DEFAULT_TABLE_ELEMENT_TYPE.isEnableDeleteColumn,\n isEnableMergeCell: DEFAULT_TABLE_ELEMENT_TYPE.isEnableMergeCell,\n groupFields: [],\n groupFooterFormatter: undefined,\n groupFormatter: undefined,\n })\n rebuildTableColumns(current)\n return current\n}\n\n/**\n * Hiprint provider: built-in element types, with `defaultModule.table`\n * replaced by the project default table layout (`template.json`).\n */\nexport class SvpElementTypeProvider extends Provider {\n addElementTypes(context: any): void {\n new defaultElementTypeProvider().addElementTypes(context)\n if (typeof context.updateElementType === 'function') {\n context.updateElementType(TABLE_TID, applyCustomTableType)\n return\n }\n const current = context.getElementType?.(TABLE_TID)\n if (current) applyCustomTableType(current)\n }\n}\n","import type { Provider, ProviderMap } from '../types'\nimport { SvpElementTypeProvider } from './svp-element-provider'\n\nexport { defaultElementTypeProvider } from 'vue-plugin-hiprint'\nexport { SvpElementTypeProvider } from './svp-element-provider'\n\nexport function ensureProviders(providers?: Provider[]): Provider[] {\n if (providers && providers.length) return providers\n return [new SvpElementTypeProvider()]\n}\n\nexport function normalizeProviderMap(map?: ProviderMap | ProviderMap[]): ProviderMap[] {\n if (!map) return []\n return Array.isArray(map) ? map : [map]\n}\n","/**\n * Thin wrapper around `vue-plugin-hiprint` so the rest of the codebase\n * only needs to touch a stable surface.\n */\nimport { hiprint, defaultElementTypeProvider, disAutoConnect } from 'vue-plugin-hiprint'\nimport { DEFAULT_PAPER_LIST } from '../constants'\nimport { setupHiprintPaperList } from './hiprint-paper-list'\nimport { ensureProviders } from './providers'\nimport type { PaperType, Provider } from '../types'\n\nlet initialized = false\n\nexport interface InitOptions {\n providers?: Provider[]\n autoConnect?: boolean\n config?: any\n paperList?: PaperType[]\n onPaperApplied?: (tpl: any) => void\n}\n\n/**\n * Initialise hiprint with at least one provider. Idempotent.\n */\nexport function initHiprint(options: InitOptions = {}): typeof hiprint {\n const providers = ensureProviders(options.providers)\n\n if (!initialized) {\n try {\n hiprint.init({ providers, ...(options.config ?? {}) })\n setupHiprintPaperList(\n options.paperList ?? DEFAULT_PAPER_LIST,\n options.onPaperApplied,\n )\n } catch (e) {\n console.error('[vue3-print-designer] hiprint.init failed', e)\n }\n initialized = true\n } else if (options.providers?.length) {\n // Re-register providers on subsequent init calls.\n try {\n // hiprint exposes `PrintElementTypeManager` whose `build` accepts\n // a provider list — calling it again is safe.\n options.providers.forEach((p) =>\n hiprint.PrintElementTypeManager?.build?.([p]),\n )\n } catch (e) {\n console.warn('[vue3-print-designer] re-build providers failed', e)\n }\n }\n\n if (options.autoConnect === false) {\n try { disAutoConnect() } catch (_) { /* ignore */ }\n }\n\n return hiprint\n}\n\n/**\n * Bind a selector list (e.g. `.ep-draggable-item`) into hiprint so the\n * elements become draggable. `vue-plugin-hiprint` exposes this via\n * `PrintElementTypeManager.buildByHtml`.\n */\nexport function buildByHtml(selectors: string[] | string): void {\n if (typeof window === 'undefined') return\n const $: any = (window as any).jQuery || (window as any).$\n if (!$) {\n console.warn('[vue3-print-designer] jQuery is required by hiprint but was not found on window')\n return\n }\n const list = Array.isArray(selectors) ? selectors : [selectors]\n list.forEach((sel) => {\n const $els = $(sel)\n if ($els.length) {\n try { hiprint.PrintElementTypeManager.buildByHtml($els) } catch (e) {\n console.warn('[vue3-print-designer] buildByHtml failed', sel, e)\n }\n }\n })\n}\n\nexport { hiprint, defaultElementTypeProvider }\n","import type { Hook, HookOptions, PluginOptions } from '../types'\n\n/**\n * Hook manager: stores plugin-provided callbacks keyed by hook name,\n * runs them sequentially in priority order.\n */\nexport class PluginManager {\n private hooks = new Map<Hook, HookOptions[]>()\n private plugins: PluginOptions[] = []\n\n setPlugins(plugins: PluginOptions[] = []) {\n this.hooks.clear()\n this.plugins = []\n plugins.forEach((p) => this.register(p))\n }\n\n register(plugin: PluginOptions) {\n if (!plugin || !Array.isArray(plugin.hooks)) return\n this.plugins.push(plugin)\n plugin.init?.(plugin.config ?? {})\n plugin.hooks.forEach((h) => {\n const arr = this.hooks.get(h.hook) ?? []\n arr.push(h)\n arr.sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100))\n this.hooks.set(h.hook, arr)\n })\n }\n\n list(): PluginOptions[] {\n return this.plugins.slice()\n }\n\n has(hook: Hook): boolean {\n return (this.hooks.get(hook)?.length ?? 0) > 0\n }\n\n /** Run all callbacks sequentially. Returns the array of results. */\n async run(hook: Hook, ...args: any[]): Promise<unknown[]> {\n const list = this.hooks.get(hook) ?? []\n const out: unknown[] = []\n for (const h of list) {\n try {\n out.push(await h.run(...args))\n } catch (e) {\n console.error(`[vue3-print-designer] hook \"${hook}\" (${h.name}) failed`, e)\n }\n }\n return out\n }\n\n /** Synchronous variant — useful for shortcut handlers that must return quickly. */\n runSync(hook: Hook, ...args: any[]): unknown[] {\n const list = this.hooks.get(hook) ?? []\n const out: unknown[] = []\n for (const h of list) {\n try {\n out.push(h.run(...args))\n } catch (e) {\n console.error(`[vue3-print-designer] hook \"${hook}\" (${h.name}) failed`, e)\n }\n }\n return out\n }\n}\n","import { reactive, ref, type Ref } from 'vue-demi'\nimport { ZOOM_MAX, ZOOM_MIN } from '../constants'\nimport type { ThemeType } from '../types'\n\nexport interface PanelVisibility {\n draggableEls: boolean\n miniMap: boolean\n pageStructure: boolean\n pageHistory: boolean\n properties: boolean\n}\n\nexport interface SelectionInfo {\n count: number\n ids: string[]\n /** Active hiprint elements. */\n elements: unknown[]\n}\n\nexport interface HistoryInfo {\n index: number\n total: number\n capacity: number\n canUndo: boolean\n canRedo: boolean\n}\n\nexport const designerStore = reactive({\n theme: 'svpLight' as string,\n themeList: [] as (string | ThemeType)[],\n lang: 'zh-CN' as string,\n zoom: 1,\n panels: {\n draggableEls: true,\n miniMap: true,\n pageStructure: true,\n pageHistory: true,\n properties: true,\n } as PanelVisibility,\n selection: { count: 0, ids: [], elements: [] } as SelectionInfo,\n history: { index: 0, total: 0, capacity: 50, canUndo: false, canRedo: false } as HistoryInfo,\n isMobile: false,\n /** Bumps when element UI state changes outside selection (e.g. lock). */\n uiPulse: 0,\n})\n\nexport type DesignerStore = typeof designerStore\n\nexport const designerStoreRef: Ref<DesignerStore> = ref(designerStore) as Ref<DesignerStore>\n\nexport function setZoom(value: number) {\n const v = Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, Number.isFinite(value) ? value : 1))\n designerStore.zoom = v\n}\n\nexport function setPanelVisibility(key: keyof PanelVisibility, show: boolean) {\n designerStore.panels[key] = show\n}\n\nexport function togglePanel(key: keyof PanelVisibility) {\n designerStore.panels[key] = !designerStore.panels[key]\n}\n\nexport function toggleAllPanels(forceShow?: boolean) {\n const keys = Object.keys(designerStore.panels) as Array<keyof PanelVisibility>\n const anyHidden = keys.some((k) => !designerStore.panels[k])\n const next = typeof forceShow === 'boolean' ? forceShow : anyHidden\n keys.forEach((k) => (designerStore.panels[k] = next))\n}\n\nexport function setSelection(info: Partial<SelectionInfo>) {\n Object.assign(designerStore.selection, info)\n}\n","/** Canonical history labels stored in hiprint `historyList[].type`. */\nexport const HISTORY_MOVE = '移动'\nexport const HISTORY_ALIGN = '元素对齐'\nexport const HISTORY_PARAM = '参数修改'\nexport const HISTORY_INITIAL = '初始'\nexport const HISTORY_ZOOM = '缩放'\n\nconst MOVE_TYPES = new Set([\n HISTORY_MOVE,\n '框选移动',\n '键盘移动',\n])\n\nconst ALIGN_TYPES = new Set([\n HISTORY_ALIGN,\n '对齐',\n '层级',\n '翻转',\n '旋转',\n '大小',\n])\n\nconst PARAM_TYPES = new Set([\n HISTORY_PARAM,\n '参数修改',\n '元素修改',\n '编辑修改',\n '批量修改',\n '字号',\n '字体粗细',\n '锁定',\n '解锁',\n '克隆',\n '粘贴',\n '复制',\n '删除',\n '清空',\n '新增',\n '模板调整',\n '调整表头',\n '调整表格列字段',\n])\n\nconst ZOOM_TYPES = new Set([\n HISTORY_ZOOM,\n '缩放',\n])\n\n/** Map hiprint / toolbar raw types to one of the three user-facing categories. */\nexport function normalizeHistoryLabel(type: string | undefined): string {\n const raw = (type || '').trim()\n if (!raw || raw === HISTORY_INITIAL) return HISTORY_INITIAL\n if (MOVE_TYPES.has(raw)) return HISTORY_MOVE\n if (ALIGN_TYPES.has(raw)) return HISTORY_ALIGN\n if (ZOOM_TYPES.has(raw)) return HISTORY_ZOOM\n if (PARAM_TYPES.has(raw)) return HISTORY_PARAM\n return HISTORY_PARAM\n}\n","/**\n * History helper. hiprint stores undo/redo on the template instance:\n * `historyList`, `historyPos`, and applies snapshots via `update(json)`.\n */\nimport { designerStore } from './stores'\nimport { normalizeHistoryLabel } from './history-labels'\n\nexport interface HistoryStep {\n index: number\n type: string\n label: string\n json?: unknown\n}\n\nexport type HistoryChangedHook = () => void\n\nexport class HistoryController {\n private getTpl: () => any\n private onChanged?: HistoryChangedHook\n steps: HistoryStep[] = []\n\n constructor(getTemplate: () => any, onChanged?: HistoryChangedHook) {\n this.getTpl = getTemplate\n this.onChanged = onChanged\n }\n\n private applySnapshot(tpl: any, json: unknown, panelIndex?: number) {\n if (!tpl?.update || json == null) return\n const index = panelIndex ?? tpl.editingPanel?.index ?? tpl.printPanels?.[0]?.index ?? 0\n tpl.update(json, index)\n }\n\n refreshFromTemplate() {\n const tpl = this.getTpl()\n if (!tpl?.history || !Array.isArray(tpl.historyList)) {\n this.steps = []\n designerStore.history = { index: 0, total: 0, capacity: 50, canUndo: false, canRedo: false }\n return\n }\n\n const list: any[] = tpl.historyList\n const pos = typeof tpl.historyPos === 'number' ? tpl.historyPos : list.length - 1\n this.steps = list.map((item: any, i: number) => {\n const type = String(item?.type ?? 'edit')\n return {\n index: i,\n type,\n label: normalizeHistoryLabel(type),\n json: item?.json,\n }\n })\n\n designerStore.history = {\n index: pos + 1,\n total: list.length,\n capacity: 50,\n canUndo: this.canUndo(),\n canRedo: this.canRedo(),\n }\n }\n\n canUndo(): boolean {\n const tpl = this.getTpl()\n return !!(tpl?.history && tpl.historyPos > 0)\n }\n\n canRedo(): boolean {\n const tpl = this.getTpl()\n if (!tpl?.history || !Array.isArray(tpl.historyList)) return false\n return tpl.historyPos < tpl.historyList.length - 1\n }\n\n undo() {\n const tpl = this.getTpl()\n if (!this.canUndo()) return\n tpl.historyPos -= 1\n const entry = tpl.historyList[tpl.historyPos]\n this.applySnapshot(tpl, entry?.json)\n this.finishChange()\n }\n\n redo() {\n const tpl = this.getTpl()\n if (!this.canRedo()) return\n tpl.historyPos += 1\n const entry = tpl.historyList[tpl.historyPos]\n this.applySnapshot(tpl, entry?.json)\n this.finishChange()\n }\n\n jump(index: number) {\n const tpl = this.getTpl()\n if (!tpl?.history || !tpl.historyList?.[index]) return\n tpl.historyPos = index\n const entry = tpl.historyList[index]\n this.applySnapshot(tpl, entry?.json)\n this.finishChange()\n }\n\n clear() {\n const tpl = this.getTpl()\n if (!tpl?.history || !Array.isArray(tpl.historyList) || !tpl.historyList.length) return\n const initial = tpl.historyList[0]\n tpl.historyList = [initial]\n tpl.historyPos = 0\n this.applySnapshot(tpl, initial?.json)\n this.finishChange()\n }\n\n /** Remove one history entry. Index 0 (initial) cannot be deleted. */\n remove(index: number) {\n const tpl = this.getTpl()\n if (!tpl?.history || !Array.isArray(tpl.historyList)) return\n if (index <= 0 || index >= tpl.historyList.length) return\n\n const pos = tpl.historyPos\n tpl.historyList.splice(index, 1)\n\n let newPos = pos\n if (index < pos) newPos = pos - 1\n else if (index === pos) newPos = Math.min(pos, tpl.historyList.length - 1)\n\n tpl.historyPos = newPos\n if (index <= pos) {\n const entry = tpl.historyList[tpl.historyPos]\n this.applySnapshot(tpl, entry?.json)\n }\n this.finishChange()\n }\n\n private finishChange() {\n this.refreshFromTemplate()\n this.onChanged?.()\n }\n}\n","/**\n * Keyboard shortcuts for the designer. Bound on `document` and dispatched\n * to DesignerUtils. Plugin authors can intercept via the\n * `documentShortcutKeys` / `shortcutKeys` hooks.\n */\ntype KeyHandler = (e: KeyboardEvent) => void | boolean\n\nexport interface ShortcutBinding {\n combo: string\n description?: string\n run: (e: KeyboardEvent) => void | boolean\n}\n\nexport interface ShortcutOptions {\n /** Receives every keydown event before bindings are evaluated; return false to block. */\n beforeDispatch?: (e: KeyboardEvent) => boolean | void\n}\n\nfunction normalize(e: KeyboardEvent): string {\n const parts: string[] = []\n if (e.ctrlKey || e.metaKey) parts.push('mod')\n if (e.shiftKey) parts.push('shift')\n if (e.altKey) parts.push('alt')\n const key = (e.key || '').toLowerCase()\n if (!['control', 'shift', 'alt', 'meta'].includes(key)) parts.push(key)\n return parts.join('+')\n}\n\nexport class ShortcutsController {\n private bindings = new Map<string, ShortcutBinding>()\n private handler: KeyHandler | null = null\n private options: ShortcutOptions\n\n constructor(options: ShortcutOptions = {}) {\n this.options = options\n }\n\n add(binding: ShortcutBinding | ShortcutBinding[]) {\n const list = Array.isArray(binding) ? binding : [binding]\n list.forEach((b) => this.bindings.set(b.combo.toLowerCase(), b))\n }\n\n remove(combo: string) {\n this.bindings.delete(combo.toLowerCase())\n }\n\n list(): ShortcutBinding[] {\n return Array.from(this.bindings.values())\n }\n\n mount() {\n if (typeof window === 'undefined' || this.handler) return\n this.handler = (e: KeyboardEvent) => {\n if (this.options.beforeDispatch?.(e) === false) return\n // Skip when typing inside an editable field.\n const t = e.target as HTMLElement | null\n if (t && (t.tagName === 'INPUT' || t.tagName === 'TEXTAREA' || t.isContentEditable)) {\n // Allow undo / redo though.\n const combo = normalize(e)\n if (combo !== 'mod+z' && combo !== 'mod+shift+z' && combo !== 'mod+y') return\n }\n const combo = normalize(e)\n const b = this.bindings.get(combo)\n if (!b) return\n const r = b.run(e)\n if (r !== false) {\n e.preventDefault()\n e.stopPropagation()\n }\n }\n document.addEventListener('keydown', this.handler, true)\n }\n\n unmount() {\n if (typeof window === 'undefined' || !this.handler) return\n document.removeEventListener('keydown', this.handler, true)\n this.handler = null\n }\n}\n","import { STORAGE_PREFIX } from '../constants'\n\nconst safe = (): Storage | null => {\n try { return typeof window !== 'undefined' ? window.localStorage : null }\n catch { return null }\n}\n\nexport function readJSON<T = unknown>(key: string, fallback: T): T {\n const s = safe()\n if (!s) return fallback\n const raw = s.getItem(STORAGE_PREFIX + key)\n if (!raw) return fallback\n try { return JSON.parse(raw) as T } catch { return fallback }\n}\n\nexport function writeJSON(key: string, value: unknown): void {\n const s = safe()\n if (!s) return\n try { s.setItem(STORAGE_PREFIX + key, JSON.stringify(value)) } catch (_) { /* ignore */ }\n}\n\nexport function removeKey(key: string): void {\n const s = safe()\n if (!s) return\n s.removeItem(STORAGE_PREFIX + key)\n}\n","import { EMPTY_TEMPLATE_JSON } from '../constants'\n\nexport interface JsonEditorModalOptions {\n title: string\n value: unknown\n confirmText?: string\n cancelText?: string\n invalidText?: string\n clearText?: string\n copyText?: string\n variant?: 'template' | 'default'\n}\n\nexport type JsonEditorModalHost = {\n open: (options: JsonEditorModalOptions) => Promise<unknown | null>\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value ?? {}, null, 2)\n } catch {\n try {\n const seen = new WeakSet<object>()\n return JSON.stringify(value, (_key, val) => {\n if (typeof val === 'object' && val !== null) {\n if (seen.has(val)) return undefined\n seen.add(val)\n }\n return val\n }, 2)\n } catch {\n return '{}'\n }\n }\n}\n\nfunction renderLineNumbers(text: string): string {\n const count = Math.max(1, text.split('\\n').length)\n return Array.from({ length: count }, (_, i) => String(i + 1)).join('\\n')\n}\n\n/** Imperative fallback when Vue host is unavailable. */\nexport function openJsonEditorModal(options: JsonEditorModalOptions): Promise<unknown | null> {\n return new Promise((resolve) => {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n resolve(null)\n return\n }\n\n document.querySelectorAll('.svp-dialog-mask[data-json-editor]').forEach((el) => el.remove())\n\n const showToolbar = options.variant === 'template'\n const initial = safeStringify(options.value)\n const mask = document.createElement('div')\n mask.className = 'svp-dialog-mask'\n mask.setAttribute('data-json-editor', '1')\n\n const modal = document.createElement('div')\n modal.className = 'svp-dialog svp-json-editor'\n modal.innerHTML = `\n <div class=\"svp-dialog__header\">\n <span class=\"svp-dialog__title\"></span>\n <button type=\"button\" class=\"svp-dialog__close\" data-act=\"cancel\" aria-label=\"close\">×</button>\n </div>\n <div class=\"svp-dialog__body svp-json-editor__body\">\n <div class=\"svp-json-editor__editor\">\n <pre class=\"svp-json-editor__lines\" aria-hidden=\"true\"></pre>\n <textarea class=\"svp-json-editor__textarea\" spellcheck=\"false\"></textarea>\n </div>\n <div class=\"svp-json-editor__error\" hidden></div>\n </div>\n <div class=\"svp-dialog__footer svp-json-editor__footer\">\n ${showToolbar ? `\n <div class=\"svp-json-editor__footer-left\">\n <button type=\"button\" class=\"svp-btn is-danger\" data-act=\"clear\"></button>\n <button type=\"button\" class=\"svp-btn is-info\" data-act=\"copy\"></button>\n </div>\n ` : ''}\n <div class=\"svp-json-editor__footer-right\">\n <button type=\"button\" class=\"svp-btn is-primary\" data-act=\"ok\"></button>\n <button type=\"button\" class=\"svp-btn\" data-act=\"cancel\"></button>\n </div>\n </div>\n `\n\n const titleEl = modal.querySelector('.svp-dialog__title') as HTMLElement\n const linesEl = modal.querySelector('.svp-json-editor__lines') as HTMLElement\n const ta = modal.querySelector('.svp-json-editor__textarea') as HTMLTextAreaElement\n const errorEl = modal.querySelector('.svp-json-editor__error') as HTMLElement\n const clearBtn = modal.querySelector('[data-act=\"clear\"]') as HTMLButtonElement | null\n const copyBtn = modal.querySelector('[data-act=\"copy\"]') as HTMLButtonElement | null\n const okBtn = modal.querySelector('[data-act=\"ok\"]') as HTMLButtonElement\n const cancelBtns = modal.querySelectorAll('[data-act=\"cancel\"]') as NodeListOf<HTMLButtonElement>\n\n titleEl.textContent = options.title\n okBtn.textContent = options.confirmText ?? 'OK'\n cancelBtns.forEach((btn) => { btn.textContent = options.cancelText ?? 'Cancel' })\n if (clearBtn) clearBtn.textContent = options.clearText ?? 'Clear'\n if (copyBtn) copyBtn.textContent = options.copyText ?? 'Copy'\n ta.value = initial\n linesEl.textContent = renderLineNumbers(initial)\n ta.scrollTop = 0\n linesEl.scrollTop = 0\n\n function syncLines() {\n linesEl.textContent = renderLineNumbers(ta.value)\n }\n\n function syncScroll() {\n linesEl.scrollTop = ta.scrollTop\n }\n\n function close(result: unknown | null) {\n mask.remove()\n resolve(result)\n }\n\n ta.addEventListener('input', () => {\n errorEl.hidden = true\n syncLines()\n })\n ta.addEventListener('scroll', syncScroll)\n\n modal.addEventListener('click', (e) => {\n const act = (e.target as HTMLElement).dataset.act\n if (act === 'cancel') close(null)\n else if (act === 'clear') {\n ta.value = showToolbar\n ? JSON.stringify(EMPTY_TEMPLATE_JSON, null, 2)\n : '{}'\n errorEl.hidden = true\n syncLines()\n ta.focus()\n } else if (act === 'copy') {\n navigator.clipboard?.writeText(ta.value).catch(() => {\n ta.focus()\n ta.select()\n try { document.execCommand('copy') } catch { /* ignore */ }\n })\n } else if (act === 'ok') {\n try {\n close(JSON.parse(ta.value))\n } catch {\n errorEl.hidden = false\n errorEl.textContent = options.invalidText ?? 'Invalid JSON'\n }\n }\n })\n\n mask.addEventListener('click', (e) => {\n if (e.target === mask) close(null)\n })\n\n mask.appendChild(modal)\n const host = document.querySelector('.svp-root') ?? document.body\n host.appendChild(mask)\n ta.setSelectionRange(0, 0)\n ta.focus({ preventScroll: true })\n })\n}\n","export interface BasicFieldDef {\n field: string\n label: string\n testData?: string\n}\n\nexport interface TableColumnDef {\n field: string\n label: string\n}\n\nexport interface TableFieldDef {\n /** Print data key, e.g. `table`. */\n field: string\n label: string\n columns: TableColumnDef[]\n}\n\nexport interface TemplateFieldSchema {\n basicFields: BasicFieldDef[]\n tables: TableFieldDef[]\n}\n\ntype FieldOption = { text?: string; field?: string }\n\nfunction asFieldOptions(value: unknown): FieldOption[] {\n if (!Array.isArray(value)) return []\n return value.filter((item): item is FieldOption => {\n return !!item && typeof item === 'object' && typeof (item as FieldOption).field === 'string'\n })\n}\n\nfunction labelForField(field: string, fields: FieldOption[], fallback?: string): string {\n const match = fields.find((item) => item.field === field)\n if (match?.text) return match.text\n if (fallback) return fallback\n return field\n}\n\nfunction collectTableColumns(options: Record<string, unknown>): TableColumnDef[] {\n const fromFields = asFieldOptions(options.fields)\n if (fromFields.length) {\n return fromFields.map((item) => ({\n field: item.field!,\n label: item.text || item.field!,\n }))\n }\n\n const columns = Array.isArray(options.columns) ? options.columns : []\n const seen = new Set<string>()\n const result: TableColumnDef[] = []\n\n columns.forEach((row) => {\n if (!Array.isArray(row)) return\n row.forEach((col) => {\n if (!col || typeof col !== 'object') return\n const field = (col as { field?: string }).field\n if (!field || seen.has(field)) return\n seen.add(field)\n result.push({\n field,\n label: (col as { title?: string }).title || field,\n })\n })\n })\n\n return result\n}\n\nfunction collectPrintElements(template: unknown): Array<{ options: Record<string, unknown>; printElementType: Record<string, unknown> }> {\n if (!template || typeof template !== 'object') return []\n const panels = Array.isArray((template as { panels?: unknown }).panels)\n ? (template as { panels: unknown[] }).panels\n : Array.isArray(template)\n ? template\n : []\n\n const elements: Array<{ options: Record<string, unknown>; printElementType: Record<string, unknown> }> = []\n panels.forEach((panel) => {\n if (!panel || typeof panel !== 'object') return\n const printElements = (panel as { printElements?: unknown }).printElements\n if (!Array.isArray(printElements)) return\n printElements.forEach((item) => {\n if (!item || typeof item !== 'object') return\n elements.push({\n options: ((item as { options?: unknown }).options ?? {}) as Record<string, unknown>,\n printElementType: ((item as { printElementType?: unknown }).printElementType ?? {}) as Record<string, unknown>,\n })\n })\n })\n return elements\n}\n\n/** Extract bindable fields from a hiprint template JSON. */\nexport function extractTemplateFields(template: unknown): TemplateFieldSchema {\n const basicMap = new Map<string, BasicFieldDef>()\n const tables: TableFieldDef[] = []\n\n collectPrintElements(template).forEach(({ options, printElementType }) => {\n const type = String(printElementType.type || '')\n const fieldOptions = asFieldOptions(options.fields)\n\n if (type === 'table') {\n const tableField = String(options.field || 'table')\n const columns = collectTableColumns(options)\n if (!columns.length) return\n tables.push({\n field: tableField,\n label: String(printElementType.title || options.title || tableField),\n columns,\n })\n return\n }\n\n if (type !== 'text' && type !== 'longText') return\n const field = typeof options.field === 'string' ? options.field.trim() : ''\n if (!field) return\n\n if (!basicMap.has(field)) {\n basicMap.set(field, {\n field,\n label: labelForField(field, fieldOptions, String(options.title || printElementType.title || field)),\n testData: typeof options.testData === 'string' ? options.testData : undefined,\n })\n }\n })\n\n return {\n basicFields: Array.from(basicMap.values()),\n tables,\n }\n}\n\nexport function createEmptyTableRow(columns: TableColumnDef[]): Record<string, string> {\n const row: Record<string, string> = {}\n columns.forEach((col) => { row[col.field] = '' })\n return row\n}\n\nexport function normalizeTableRows(\n value: unknown,\n columns: TableColumnDef[],\n): Record<string, string>[] {\n const rows = Array.isArray(value) ? value : []\n if (!rows.length) return [createEmptyTableRow(columns)]\n return rows.map((row) => {\n const next = createEmptyTableRow(columns)\n if (row && typeof row === 'object') {\n columns.forEach((col) => {\n const raw = (row as Record<string, unknown>)[col.field]\n next[col.field] = raw == null ? '' : String(raw)\n })\n }\n return next\n })\n}\n\nexport function buildPrintDataFromForm(\n schema: TemplateFieldSchema,\n basicValues: Record<string, string>,\n tableValues: Record<string, Record<string, string>[]>,\n existing: Record<string, unknown> = {},\n): Record<string, unknown> {\n const next: Record<string, unknown> = { ...existing }\n\n schema.basicFields.forEach((field) => {\n next[field.field] = basicValues[field.field] ?? ''\n })\n\n schema.tables.forEach((table) => {\n const rows = tableValues[table.field] ?? []\n next[table.field] = rows.map((row) => {\n const record: Record<string, string> = {}\n table.columns.forEach((col) => {\n record[col.field] = row[col.field] ?? ''\n })\n return record\n })\n })\n\n return next\n}\n\nexport function createPrintDataFormState(\n schema: TemplateFieldSchema,\n printData: Record<string, unknown> = {},\n): {\n basicValues: Record<string, string>\n tableValues: Record<string, Record<string, string>[]>\n} {\n const basicValues: Record<string, string> = {}\n schema.basicFields.forEach((field) => {\n const raw = printData[field.field]\n if (raw == null || raw === '') {\n basicValues[field.field] = field.testData ?? ''\n return\n }\n basicValues[field.field] = String(raw)\n })\n\n const tableValues: Record<string, Record<string, string>[]> = {}\n schema.tables.forEach((table) => {\n tableValues[table.field] = normalizeTableRows(printData[table.field], table.columns)\n })\n\n return { basicValues, tableValues }\n}\n","export default {\n designer: {\n save: '保存',\n preview: '预览',\n editTemplate: '编辑模板数据',\n editPrintData: '编辑打印数据',\n exportFile: '导出到本地文件',\n importFile: '从本地文件导入',\n print: '打印',\n pdf: '导出 PDF',\n image: '导出图片',\n close: '关闭',\n confirm: '确定',\n apply: '应用',\n clear: '清空',\n copy: '复制',\n cancel: '取消',\n invalidJson: 'JSON 格式不正确',\n printDataBasic: '基础信息数据',\n printDataTable: '表格信息数据',\n printDataEmpty: '当前模板中没有可绑定的字段,请先在画布中为文本或表格元素设置字段名。',\n printDataAddRow: '添加一行',\n printDataDeleteRow: '删除',\n printDataFieldKey: '字段',\n paper: '纸张',\n },\n header: {\n title: '打印设计器',\n },\n panel: {\n draggableEls: '拖拽元素',\n miniMap: '概览图',\n pageStructure: '页面结构',\n pageHistory: '历史记录',\n properties: '属性',\n fold: '折叠',\n expand: '展开',\n minimize: '缩小',\n show: '显示',\n hide: '隐藏',\n empty: '暂无数据',\n add: '添加',\n },\n history: {\n move: '移动',\n align: '元素对齐',\n param: '参数修改',\n initial: '初始',\n deleteRecord: '删除记录',\n zoom: '缩放',\n },\n tool: {\n undo: '撤销',\n redo: '重做',\n alignLeft: '左对齐',\n alignCenter: '水平居中',\n alignRight: '右对齐',\n alignTop: '顶部对齐',\n alignMiddle: '垂直居中',\n alignBottom: '底部对齐',\n moveTop: '移至顶层',\n moveUp: '上移一层',\n moveDown: '下移一层',\n moveBottom: '移至底层',\n flipH: '水平旋转',\n flipV: '垂直旋转',\n fontInc: '字号加大',\n fontDec: '字号减小',\n fontBold: '字号加粗',\n fontUnbold: '字号减粗',\n lock: '锁定移动',\n unlock: '解锁移动',\n clone: '克隆',\n copy: '复制',\n cut: '剪切',\n paste: '粘贴',\n delete: '删除',\n zoomOut: '缩小',\n zoomIn: '放大',\n rotate: '旋转',\n clear: '清空',\n togglePanels: '显示/隐藏所有面板',\n },\n category: {\n base: '基础',\n text: '文本',\n image: '图片',\n qrcode: '二维码',\n barcode: '条形码',\n longText: '长文',\n table: '表格',\n html: 'html',\n },\n group: {\n regular: '常规',\n helper: '辅助',\n },\n locale: {\n switch: '语言',\n zhCN: '中文',\n enUS: 'English',\n },\n}\n","export default {\n designer: {\n save: 'Save',\n preview: 'Preview',\n editTemplate: 'Edit Template',\n editPrintData: 'Edit Print Data',\n exportFile: 'Export to File',\n importFile: 'Import from File',\n print: 'Print',\n pdf: 'Export PDF',\n image: 'Export Image',\n close: 'Close',\n confirm: 'OK',\n apply: 'Apply',\n clear: 'Clear',\n copy: 'Copy',\n cancel: 'Cancel',\n invalidJson: 'Invalid JSON',\n printDataBasic: 'Basic Information',\n printDataTable: 'Table Data',\n printDataEmpty: 'No bindable fields found. Set field names on text or table elements first.',\n printDataAddRow: 'Add row',\n printDataDeleteRow: 'Delete',\n printDataFieldKey: 'Field',\n paper: 'Paper',\n },\n header: {\n title: 'Print Designer',\n },\n panel: {\n draggableEls: 'Elements',\n miniMap: 'Mini Map',\n pageStructure: 'Page Structure',\n pageHistory: 'History',\n properties: 'Properties',\n fold: 'Collapse',\n expand: 'Expand',\n minimize: 'Minimize',\n show: 'Show',\n hide: 'Hide',\n empty: 'No data',\n add: 'Add',\n },\n history: {\n move: 'Move',\n align: 'Element Align',\n param: 'Parameter Edit',\n initial: 'Initial',\n deleteRecord: 'Delete record',\n zoom: 'Zoom',\n },\n tool: {\n undo: 'Undo',\n redo: 'Redo',\n alignLeft: 'Align Left',\n alignCenter: 'Align Center',\n alignRight: 'Align Right',\n alignTop: 'Align Top',\n alignMiddle: 'Align Middle',\n alignBottom: 'Align Bottom',\n moveTop: 'Bring To Front',\n moveUp: 'Bring Forward',\n moveDown: 'Send Backward',\n moveBottom: 'Send To Back',\n flipH: 'Flip Horizontal',\n flipV: 'Flip Vertical',\n fontInc: 'Increase Font',\n fontDec: 'Decrease Font',\n fontBold: 'Bold',\n fontUnbold: 'Unbold',\n lock: 'Lock',\n unlock: 'Unlock',\n clone: 'Clone',\n copy: 'Copy',\n cut: 'Cut',\n paste: 'Paste',\n delete: 'Delete',\n zoomOut: 'Zoom Out',\n zoomIn: 'Zoom In',\n rotate: 'Rotate',\n clear: 'Clear',\n togglePanels: 'Toggle Panels',\n },\n category: {\n base: 'Base',\n text: 'Text',\n image: 'Image',\n qrcode: 'QR Code',\n barcode: 'Barcode',\n longText: 'Long Text',\n table: 'Table',\n html: 'HTML',\n },\n group: {\n regular: 'Regular',\n helper: 'Helpers',\n },\n locale: {\n switch: 'Language',\n zhCN: '中文',\n enUS: 'English',\n },\n}\n","import { ref, computed, type Ref } from 'vue-demi'\nimport zhCN from './zh-CN'\nimport enUS from './en-US'\nimport type { Lang } from '../types'\n\ntype Dict = Record<string, any>\n\nconst locales: Record<string, Dict> = {\n 'zh-CN': zhCN,\n 'en-US': enUS,\n}\n\nconst currentLang: Ref<Lang> = ref<Lang>('zh-CN')\n\nexport function setLocale(lang: Lang, messages?: Dict) {\n if (messages) locales[lang] = { ...(locales[lang] ?? {}), ...messages }\n if (locales[lang]) currentLang.value = lang\n}\n\nexport function getLocaleList(): Lang[] {\n return Object.keys(locales)\n}\n\nfunction lookup(dict: Dict, path: string): string | undefined {\n return path.split('.').reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object' && key in (acc as Dict)) {\n return (acc as Dict)[key]\n }\n return undefined\n }, dict) as string | undefined\n}\n\nexport function useI18n() {\n const lang = computed(() => currentLang.value)\n const dict = computed(() => locales[currentLang.value] ?? zhCN)\n\n function t(key: string, fallback?: string): string {\n return translate(key, fallback)\n }\n\n return { t, lang, setLocale }\n}\n\n/** Non-component i18n lookup (core utilities, modals, etc.). */\nexport function translate(key: string, fallback?: string): string {\n const dict = locales[currentLang.value] ?? zhCN\n const val = lookup(dict, key)\n if (typeof val === 'string') return val\n const en = lookup(enUS, key)\n return (typeof en === 'string' ? en : fallback ?? key)\n}\n","import { reactive } from 'vue-demi'\nimport { hiprint, initHiprint, buildByHtml } from './hiprint-bridge'\nimport { assignTemplatePaperList, openPanelSetting, registerPrintTemplate } from './hiprint-paper-list'\nimport { PluginManager } from './plugins'\nimport { HistoryController } from './history'\nimport { HISTORY_ALIGN, HISTORY_PARAM } from './history-labels'\nimport { ShortcutsController } from './shortcuts'\nimport { ensureProviders, normalizeProviderMap } from './providers'\nimport { writeJSON, readJSON } from './storage'\nimport { openJsonEditorModal, type JsonEditorModalHost } from './json-editor-modal'\nimport type { PrintDataEditorModalHost } from './print-data-editor-modal'\nimport { extractTemplateFields } from './template-fields'\nimport { translate } from '../i18n'\nimport { designerStore, setZoom as storeSetZoom, setSelection } from './stores'\nimport {\n DESIGN_CONTAINER_ID,\n DRAGGABLE_ITEM_CLASS,\n SETTING_CONTAINER_ID,\n ZOOM_MAX,\n ZOOM_MIN,\n ZOOM_STEP,\n} from '../constants'\nimport type {\n DesignOptions,\n DesignerPrintTemplateOptions,\n Events,\n PluginOptions,\n Provider,\n ProviderMap,\n} from '../types'\n\nconst LAYER_Z_TOP = 999\nconst LAYER_Z_BOTTOM = 1\n\nexport interface DesignerUtilsOptions {\n connect?: boolean\n config?: any\n paperList?: import('../types').PaperType[]\n providers?: Provider[]\n providerMap?: ProviderMap | ProviderMap[]\n plugins?: PluginOptions[]\n tags?: string[]\n templateKey?: string\n title?: string\n printData?: any\n events?: Events\n designOptions?: DesignOptions\n}\n\nconst PANEL_PAPER_KEYS = [\n 'index',\n 'name',\n 'width',\n 'height',\n 'paperHeader',\n 'paperFooter',\n 'paperType',\n] as const\n\nfunction normalizeTemplateJson(json: unknown): { panels: any[] } {\n if (!json || typeof json !== 'object') return { panels: [] }\n const value = json as { panels?: unknown }\n if (Array.isArray(value.panels)) return { panels: value.panels }\n if (Array.isArray(json)) return { panels: json as any[] }\n return { panels: [json as any] }\n}\n\nfunction pickPanelPaperSettings(panel: any): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const key of PANEL_PAPER_KEYS) {\n if (panel?.[key] != null) out[key] = panel[key]\n }\n return out\n}\n\n/** Keep current paper count/size; only apply imported elements onto matching panels. */\nfunction mergeImportOntoCurrentPanels(currentJson: any, importJson: any): { panels: any[] } {\n const currentPanels = normalizeTemplateJson(currentJson).panels\n const importPanels = normalizeTemplateJson(importJson).panels\n if (!currentPanels.length) return normalizeTemplateJson(importJson)\n\n return {\n panels: currentPanels.map((current, index) => {\n const imported = importPanels[index]\n if (!imported) return current\n return {\n ...imported,\n ...pickPanelPaperSettings(current),\n printElements: imported.printElements ?? [],\n }\n }),\n }\n}\n\n/**\n * Façade exposed to Vue components & plugins. Mirrors the public API of\n * sv-print's `DesignerUtils` so that templates and plugins port cleanly.\n */\nexport default class DesignerUtils {\n static instance: DesignerUtils | null = null\n\n options: DesignerUtilsOptions = {}\n printTemplate: any = null\n printData: any = {}\n plugins: PluginManager = new PluginManager()\n history: HistoryController\n shortcuts: ShortcutsController\n\n /** Sub-component refs registered by Vue components on mount. */\n ruler: any = null\n preview: any = null\n toolbar: any = null\n miniMap: any = null\n mobilePanel: any = null\n pageHistory: any = null\n editor: any = null\n printDataEditor: PrintDataEditorModalHost | null = null\n\n /** Reactive state shared with the UI. */\n state = designerStore\n\n /** Clipboard for cut / copy / paste shortcuts. */\n private clipboard: any[] = []\n private pasteOffsetStep = 0\n private selectionEventCleanup: (() => void) | null = null\n private zoomEventCleanup: (() => void) | null = null\n\n /** Optional hooks set by `<Designer>` after template / print-data edits. */\n onTemplateChange?: (json: any) => void\n onPrintDataChange?: (data: any) => void\n\n constructor() {\n this.history = new HistoryController(() => this.printTemplate, () => this.afterHistoryApply())\n this.shortcuts = new ShortcutsController({\n beforeDispatch: (e) => {\n const blocked = this.plugins\n .runSync('documentShortcutKeys', e, this)\n .some((r) => r === false)\n return !blocked\n },\n })\n this.bindShortcuts()\n }\n\n private afterHistoryApply() {\n this.refreshPrintTemplate()\n this.refreshSelection()\n this.reapplyElementTransforms()\n openPanelSetting()\n designerStore.uiPulse += 1\n }\n\n static getInstance(): DesignerUtils {\n if (!DesignerUtils.instance) DesignerUtils.instance = new DesignerUtils()\n return DesignerUtils.instance\n }\n\n static setInstance(u: DesignerUtils) {\n DesignerUtils.instance = u\n }\n\n // -------------------------------------------------------------------------\n // Setters used by Vue components when they mount\n // -------------------------------------------------------------------------\n setRuler(ruler: any) { this.ruler = ruler }\n setPreview(preview: any) { this.preview = preview }\n setToolBar(toolbar: any) { this.toolbar = toolbar }\n setMiniMap(miniMap: any) { this.miniMap = miniMap }\n setMobilePanel(panel: any) { this.mobilePanel = panel }\n setPageHistory(history: any) { this.pageHistory = history }\n setEditor(editor: any) { this.editor = editor }\n setPrintDataEditor(editor: PrintDataEditorModalHost | null) { this.printDataEditor = editor }\n setPrintData(data: any) { this.printData = data ?? {} }\n\n // -------------------------------------------------------------------------\n // Plugin / provider / config wiring\n // -------------------------------------------------------------------------\n setPlugins(plugins: PluginOptions[] = []) {\n this.plugins.setPlugins(plugins)\n this.plugins.run('init', this).catch(() => {/* ignore */})\n }\n\n setConfig(config?: any) {\n if (config) Object.assign(this.options, { config })\n }\n\n setConnect(connect?: boolean, _callback?: (status?: boolean, msg?: any) => void) {\n // Forwarded to hiprint when the bridge initialises; nothing to do here yet.\n this.options.connect = connect\n }\n\n initProviders(providers?: Provider[]) {\n initHiprint({\n providers: ensureProviders(providers),\n autoConnect: this.options.connect,\n config: this.options.config,\n paperList: this.options.paperList,\n onPaperApplied: () => {\n try { this.ruler?.redraw?.() } catch { /* ignore */ }\n },\n })\n }\n\n buildByProvider(map?: ProviderMap | ProviderMap[], _clear?: boolean) {\n const list = normalizeProviderMap(map ?? this.options.providerMap)\n if (!list.length) return\n if (typeof window === 'undefined') return\n const $: any = (window as any).jQuery || (window as any).$\n if (!$) return\n list.forEach((m) => {\n try {\n const $els = $(m.container)\n if ($els.length) hiprint.PrintElementTypeManager.buildByHtml($els)\n } catch (e) { console.warn('buildByProvider', e) }\n })\n }\n\n buildByHtml(tags: string[] = [`.${DRAGGABLE_ITEM_CLASS}`]) {\n buildByHtml(tags)\n }\n\n // -------------------------------------------------------------------------\n // PrintTemplate lifecycle\n // -------------------------------------------------------------------------\n newPrintTemplate(template: any) {\n const tpl = new hiprint.PrintTemplate({ template })\n return tpl\n }\n\n newDesigner(\n options: DesignerPrintTemplateOptions,\n designOptions: DesignOptions = {},\n ) {\n if (this.printTemplate) {\n this.unbindSelectionEvents()\n this.unbindZoomEvents()\n try { this.printTemplate.clear?.() } catch (_) { /* ignore */ }\n }\n const tpl = new hiprint.PrintTemplate({\n template: options.template,\n settingContainer: options.settingContainer\n ? options.settingContainer\n : `#${SETTING_CONTAINER_ID}`,\n paginationContainer: options.paginationContainer,\n dataMode: options.dataMode ?? 1,\n history: options.history ?? true,\n onImageChooseClick: options.onImageChooseClick,\n onZoomChange: (scale: number) => {\n storeSetZoom(scale)\n options.onZoomChange?.(scale)\n },\n onPanelAddClick: options.onPanelAddClick,\n onFunctionClick: options.onFunctionClick,\n onDataChanged: (type: string, json: any) => {\n this.history.refreshFromTemplate()\n this.refreshSelection()\n this.reapplyElementTransforms()\n designerStore.uiPulse += 1\n options.onDataChanged?.(type, json)\n },\n onUpdateError: options.onUpdateError,\n })\n if (Array.isArray(options.fontList) && tpl.setFontList) {\n tpl.setFontList(options.fontList)\n }\n if (Array.isArray(options.fields) && tpl.setFields) {\n try { tpl.setFields(options.fields) } catch (_) { /* ignore */ }\n }\n assignTemplatePaperList(tpl, this.options.paperList)\n registerPrintTemplate(tpl)\n\n this.printTemplate = tpl\n const target = options.designContainer ?? `#${DESIGN_CONTAINER_ID}`\n try { tpl.design(target, designOptions) } catch (e) {\n console.error('[vue3-print-designer] template.design failed', e)\n }\n openPanelSetting()\n this.history.refreshFromTemplate()\n this.refreshSelection()\n this.bindSelectionEvents(tpl)\n this.bindZoomEvents(tpl)\n this.syncZoomFromTemplate()\n this.plugins.run('newPrintTemplate', tpl, this).catch(() => {/* ignore */})\n return tpl\n }\n\n private unbindSelectionEvents() {\n this.selectionEventCleanup?.()\n this.selectionEventCleanup = null\n }\n\n private unbindZoomEvents() {\n this.zoomEventCleanup?.()\n this.zoomEventCleanup = null\n }\n\n /** Keep store/ruler in sync when hiprint paper scale changes (e.g. zoom toolbar). */\n private bindZoomEvents(tpl: any) {\n this.unbindZoomEvents()\n const paper = tpl?.editingPanel?.designPaper\n if (!paper?.subscribePaperBaseInfoChanged) return\n\n const onPaperInfo = (info: { scale?: number }) => {\n if (typeof info?.scale !== 'number' || !(info.scale > 0)) return\n const next = Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, info.scale))\n if (Math.abs(next - this.state.zoom) < 0.001) return\n storeSetZoom(next)\n this.ruler?.redraw?.()\n }\n\n paper.subscribePaperBaseInfoChanged(onPaperInfo)\n this.zoomEventCleanup = () => {\n try { paper.onPaperBaseInfoChanged = null } catch { /* ignore */ }\n }\n }\n\n private syncZoomFromTemplate() {\n storeSetZoom(this.getZoom())\n this.ruler?.redraw?.()\n }\n\n private readTemplateScale(): number | null {\n const tpl = this.printTemplate\n if (!tpl) return null\n const scale = tpl.editingPanel?.designPaper?.scale\n ?? tpl.editingPanel?.scale\n ?? tpl.scale\n return typeof scale === 'number' && scale > 0 ? scale : null\n }\n\n /** Sync Vue selection state when hiprint selects / deselects print elements. */\n private bindSelectionEvents(tpl: any) {\n this.unbindSelectionEvents()\n if (typeof window === 'undefined' || !tpl) return\n const eventBus = (window as any).hinnn?.event\n const tplId = tpl.id ?? tpl.templateId\n if (!eventBus || tplId == null) return\n\n const selectKey = `PrintElementSelectEventKey_${tplId}`\n const mouseUpKey = `hiprintTemplateMouseUp_${tplId}`\n const historyKey = `hiprintTemplateDataChanged_${tplId}`\n\n const scheduleRefresh = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => this.refreshSelection())\n })\n }\n\n const onSelect = (payload?: { printElement?: any }) => {\n const pe = payload?.printElement\n if (pe) {\n setSelection({\n count: 1,\n ids: [pe?.id ?? ''].filter(Boolean),\n elements: [pe],\n })\n return\n }\n scheduleRefresh()\n }\n\n const onClear = () => {\n setSelection({ count: 0, ids: [], elements: [] })\n }\n\n const onHistoryPush = () => {\n this.history.refreshFromTemplate()\n designerStore.uiPulse += 1\n }\n\n eventBus.on(selectKey, onSelect)\n eventBus.on(mouseUpKey, scheduleRefresh)\n eventBus.on('clearSettingContainer', onClear)\n eventBus.on(historyKey, onHistoryPush)\n\n this.selectionEventCleanup = () => {\n eventBus.off(selectKey, onSelect)\n eventBus.off(mouseUpKey, scheduleRefresh)\n eventBus.off('clearSettingContainer', onClear)\n eventBus.off(historyKey, onHistoryPush)\n }\n }\n\n refreshPrintTemplate() {\n try { this.printTemplate?.refresh?.() } catch (_) { /* ignore */ }\n this.reapplyElementTransforms()\n }\n\n private getElementTransformParts(el: any) {\n const opts = el?.options ?? {}\n return {\n rotate: Number(opts.transform ?? opts.rotate ?? 0) || 0,\n scaleX: Number(opts.scaleX ?? 1) || 1,\n scaleY: Number(opts.scaleY ?? 1) || 1,\n }\n }\n\n private buildTransformValue(parts: { rotate: number; scaleX: number; scaleY: number }) {\n const tokens: string[] = []\n if (parts.rotate) tokens.push(`rotate(${parts.rotate}deg)`)\n if (parts.scaleX !== 1) tokens.push(`scaleX(${parts.scaleX})`)\n if (parts.scaleY !== 1) tokens.push(`scaleY(${parts.scaleY})`)\n return tokens.join(' ')\n }\n\n private getTransformTarget(el: any) {\n const dt = el?.designTarget\n if (!dt?.find) return dt\n try {\n const inner = dt.find('.hiprint-printElement-content').parent('.hiprint-printElement')\n if (inner?.length) return inner\n } catch { /* ignore */ }\n return dt\n }\n\n private applyElementTransform(el: any) {\n const value = this.buildTransformValue(this.getElementTransformParts(el))\n const target = this.getTransformTarget(el)\n if (!target?.css) return\n\n const keys = ['transform', '-ms-transform', '-moz-transform', '-webkit-transform', '-o-transform']\n keys.forEach((key) => target.css(key, value))\n if (value.includes('scale')) {\n target.css('transform-origin', 'center center')\n }\n }\n\n private reapplyElementTransforms() {\n this.getPanelElements().forEach((el) => {\n const { scaleX, scaleY } = this.getElementTransformParts(el)\n if (scaleX !== 1 || scaleY !== 1) this.applyElementTransform(el)\n })\n }\n\n refreshSelection() {\n const tpl = this.printTemplate\n if (!tpl) {\n setSelection({ count: 0, ids: [], elements: [] })\n return\n }\n\n let els: any[] = []\n try { els = tpl.getSelectEls?.() ?? [] } catch { /* ignore */ }\n\n if (!els.length) {\n els = tpl.editingPanel?.printElements?.filter?.((e: any) => {\n if (e?.selected) return true\n try {\n return !!e?.designTarget?.hasClass?.('hiprint-printElement-selected')\n || !!e?.designTarget?.hasClass?.('selected')\n } catch {\n return false\n }\n }) ?? []\n }\n\n setSelection({\n count: els.length,\n ids: els.map((e) => e?.id ?? '').filter(Boolean),\n elements: els,\n })\n }\n\n /** Select a print element from auxiliary panels (page structure, etc.). */\n selectPrintElement(item: any) {\n const tpl = this.printTemplate\n if (!tpl || !item) return\n\n const $: any = typeof window !== 'undefined'\n ? (window as any).$ || (window as any).jQuery\n : null\n\n const dt = $?.(item.designTarget)\n if ($ && dt?.length) {\n tpl.editingPanel?.printElements?.forEach((el: any) => {\n if (el === item) return\n const target = $(el.designTarget)\n if (!target?.length) return\n target.children('div[panelindex]').removeClass('selected').css({ display: 'none' })\n })\n\n const type = String(item.printElementType?.type || '')\n if (type.includes('table')) {\n dt.find('tr:first td:first').trigger('click')\n } else {\n dt.children('div[panelindex]').addClass('selected').css({ display: 'block' })\n try {\n dt.data('hidraggable')?.options?.onBeforeSelectAllDrag?.call(dt[0], {})\n } catch { /* ignore */ }\n }\n }\n\n const tplId = tpl.id ?? tpl.templateId\n const eventBus = (window as any).hinnn?.event\n if (eventBus && tplId != null) {\n eventBus.trigger(`PrintElementSelectEventKey_${tplId}`, { printElement: item })\n }\n\n setSelection({\n count: 1,\n ids: [String(item.id ?? '')].filter(Boolean),\n elements: [item],\n })\n }\n\n /** Re-apply hiprint selection UI after toolbar actions that would clear it. */\n private restoreSelection(elements: any[]) {\n const items = elements.filter(Boolean)\n if (!items.length) return\n\n const $: any = typeof window !== 'undefined'\n ? (window as any).$ || (window as any).jQuery\n : null\n if (!$) return\n\n items.forEach((item) => {\n const dt = $(item.designTarget)\n if (!dt?.length) return\n\n const type = String(item.printElementType?.type || '')\n if (type.includes('table')) {\n dt.find('tr:first td:first').trigger('click')\n return\n }\n\n dt.children('div[panelindex]').addClass('selected').css({ display: 'block' })\n try {\n const dom = dt[0]\n dt.data('hidraggable')?.options?.onBeforeSelectAllDrag?.call(dom, {})\n } catch { /* ignore */ }\n })\n\n setSelection({\n count: items.length,\n ids: items.map((e) => String(e?.id ?? '')).filter(Boolean),\n elements: items,\n })\n }\n\n // -------------------------------------------------------------------------\n // Persistence / IO\n // -------------------------------------------------------------------------\n getTemplateJson(): any {\n try { return this.printTemplate?.getJson?.() ?? null } catch { return null }\n }\n\n private templateStorageKey(): string {\n return `tpl:${this.options.templateKey || 'default'}`\n }\n\n save() {\n const json = this.getTemplateJson()\n if (!json) return\n const key = this.options.templateKey || 'default'\n const blocked = this.options.events?.onSave?.(key, json) === false\n if (blocked) return\n writeJSON(this.templateStorageKey(), json)\n }\n\n loadSaved(): any | null {\n return readJSON(this.templateStorageKey(), null as any)\n }\n\n private async openJsonEditor(options: Parameters<JsonEditorModalHost['open']>[0]) {\n const host = this.editor as JsonEditorModalHost | null\n if (host?.open) return host.open(options)\n return openJsonEditorModal(options)\n }\n\n async edit() {\n const json = this.getTemplateJson()\n if (this.options.events?.onEdit?.(json) === false) return\n\n try {\n const next = await this.openJsonEditor({\n title: translate('designer.editTemplate'),\n value: json,\n variant: 'template',\n confirmText: translate('designer.apply'),\n cancelText: translate('designer.cancel'),\n clearText: translate('designer.clear'),\n copyText: translate('designer.copy'),\n invalidText: translate('designer.invalidJson'),\n })\n if (next == null) return\n\n this.applyTemplateJson(next)\n writeJSON(this.templateStorageKey(), next)\n } catch (e) {\n console.error('[vue3-print-designer] edit template failed', e)\n }\n }\n\n async editData() {\n if (this.options.events?.onEditData?.(this.printData) === false) return\n\n try {\n const schema = extractTemplateFields(this.getTemplateJson())\n const host = this.printDataEditor\n if (!host?.open) {\n console.warn('[vue3-print-designer] print data editor host is unavailable')\n return\n }\n\n const next = await host.open({\n title: translate('designer.editPrintData'),\n schema,\n value: this.printData ?? {},\n confirmText: translate('designer.apply'),\n cancelText: translate('designer.cancel'),\n clearText: translate('designer.clear'),\n copyText: translate('designer.copy'),\n basicSectionTitle: translate('designer.printDataBasic'),\n tableSectionTitle: translate('designer.printDataTable'),\n emptyHint: translate('designer.printDataEmpty'),\n addRowText: translate('designer.printDataAddRow'),\n deleteRowText: translate('designer.printDataDeleteRow'),\n tableFieldLabel: translate('designer.printDataFieldKey'),\n })\n if (next == null) return\n\n this.setPrintData(next)\n this.onPrintDataChange?.(next)\n } catch (e) {\n console.error('[vue3-print-designer] edit print data failed', e)\n }\n }\n\n editFunction(option: any, printElement: any, event: any) {\n // Plugins (e.g. plugin-view-code-edit) listen for this hook.\n this.plugins.runSync('createPrintElement', option, printElement, event)\n }\n\n export() {\n const json = this.getTemplateJson()\n if (!json || typeof window === 'undefined') return\n const blob = new Blob([JSON.stringify(json, null, 2)], { type: 'application/json' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = `${this.options.templateKey || 'template'}.json`\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 1000)\n }\n\n import() {\n if (typeof window === 'undefined') return\n const input = document.createElement('input')\n input.type = 'file'\n input.accept = '.json,application/json'\n input.onchange = () => {\n const file = input.files?.[0]\n if (!file) return\n const reader = new FileReader()\n reader.onload = () => {\n try {\n const json = JSON.parse(String(reader.result))\n this.applyImportTemplateJson(json)\n } catch (e) { console.error('Invalid template JSON', e) }\n }\n reader.readAsText(file)\n }\n input.click()\n }\n\n /** Import onto existing paper(s) without creating extra panels. */\n private applyImportTemplateJson(json: any) {\n const tpl = this.printTemplate\n const currentJson = this.getTemplateJson()\n\n if (!tpl?.update || !currentJson?.panels?.length) {\n this.applyTemplateJson(json)\n return\n }\n\n const merged = mergeImportOntoCurrentPanels(currentJson, json)\n const activeIndex = tpl.editingPanel?.index ?? tpl.printPanels?.[0]?.index ?? 0\n\n try {\n tpl.update(merged, activeIndex)\n } catch (e) {\n console.error('[vue3-print-designer] import template failed', e)\n return\n }\n\n this.history.refreshFromTemplate()\n this.refreshSelection()\n this.reapplyElementTransforms()\n openPanelSetting()\n\n const nextJson = this.getTemplateJson()\n if (nextJson) this.onTemplateChange?.(nextJson)\n }\n\n applyTemplateJson(json: any) {\n this.newDesigner(\n { template: json, history: true, dataMode: 1 },\n this.options.designOptions || {},\n )\n this.onTemplateChange?.(json)\n }\n\n getPrinterList(): any[] {\n try { return hiprint.hiwebSocket?.getPrinterList?.() ?? [] } catch { return [] }\n }\n\n // -------------------------------------------------------------------------\n // Zoom / view-port helpers\n // -------------------------------------------------------------------------\n setZoom(value: number) {\n const scale = Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, Number.isFinite(value) ? value : 1))\n storeSetZoom(scale)\n try { this.printTemplate?.zoom?.(scale) } catch (_) { /* ignore */ }\n this.ruler?.redraw?.()\n }\n\n getZoom() {\n const scale = this.readTemplateScale()\n if (scale != null) return Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, scale))\n return this.state.zoom\n }\n\n zoomIn() {\n const next = Math.min(ZOOM_MAX, Math.round((this.getZoom() + ZOOM_STEP) * 10) / 10)\n this.setZoom(next)\n }\n\n zoomOut() {\n const next = Math.max(ZOOM_MIN, Math.round((this.getZoom() - ZOOM_STEP) * 10) / 10)\n this.setZoom(next)\n }\n\n canZoomIn(): boolean {\n return this.getZoom() < ZOOM_MAX - 0.001\n }\n\n canZoomOut(): boolean {\n return this.getZoom() > ZOOM_MIN + 0.001\n }\n\n adaptToSize() {\n if (typeof window === 'undefined') return\n const host = document.getElementById(DESIGN_CONTAINER_ID)\n const paper = host?.querySelector?.('.hiprint-printPanel, .hiprint-printPaper') as HTMLElement | null\n if (!host || !paper) return\n const hostRect = host.getBoundingClientRect()\n const zoom = Math.max(ZOOM_MIN, this.getZoom())\n const paperW = (paper.offsetWidth || 1) / zoom\n const scale = Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, (hostRect.width - 60) / paperW))\n this.setZoom(scale)\n }\n\n // -------------------------------------------------------------------------\n // Toolbar action helpers (used by Toolbar.vue + shortcuts)\n // -------------------------------------------------------------------------\n hasSelection(): boolean { return this.state.selection.count > 0 }\n\n /** Elements on the active design panel (shallow copy for Vue reactivity). */\n getPageElements(): any[] {\n return [...this.getPanelElements()]\n }\n\n private getSelectedElements(): any[] {\n const tpl = this.printTemplate\n if (!tpl) return []\n let els: any[] = []\n try { els = tpl.getSelectEls?.() ?? [] } catch { /* ignore */ }\n if (!els.length) els = this.state.selection.elements as any[]\n return els.filter(Boolean)\n }\n\n private getPanelElements(): any[] {\n return this.printTemplate?.editingPanel?.printElements ?? []\n }\n\n private getExplicitZIndex(el: any): number | null {\n const raw = el?.options?.zIndex\n if (raw != null && raw !== '' && Number.isFinite(Number(raw))) return Number(raw)\n return null\n }\n\n private setElementZIndex(el: any, zIndex: number) {\n this.updateElementOption(el, 'zIndex', zIndex, true)\n }\n\n private updateElementOption(el: any, name: string, value: unknown, silent = true): boolean {\n try {\n if (typeof el?.updateOption === 'function') {\n el.updateOption(name, value, silent)\n return true\n }\n } catch { /* fall through */ }\n\n try {\n el.options[name] = value\n el.updateDesignViewFromOptions?.()\n return true\n } catch { /* ignore */ }\n return false\n }\n\n private getElementFontSize(el: any): number {\n const raw = el?.options?.fontSize\n const size = Number(raw)\n if (Number.isFinite(size) && size > 0) return size\n const typeDefault = Number(el?.printElementType?.fontSize)\n return Number.isFinite(typeDefault) && typeDefault > 0 ? typeDefault : 12\n }\n\n private resolveElementTid(el: any): string | null {\n const tid = el?.printElementType?.tid ?? el?.tid\n if (tid) return String(tid)\n const type = String(el?.printElementType?.type || '')\n if (!type) return null\n return `defaultModule.${type}`\n }\n\n private serializeElement(el: any): any | null {\n if (!el) return null\n try {\n const tid = this.resolveElementTid(el)\n const optionsSource = el.options?.getPrintElementOptionEntity?.() ?? el.options ?? {}\n const options = JSON.parse(JSON.stringify(optionsSource))\n const printElementType = el.printElementType\n ? JSON.parse(JSON.stringify(el.printElementType))\n : undefined\n if (!tid && !printElementType?.type) return null\n return { tid: tid ?? undefined, printElementType, options }\n } catch {\n return null\n }\n }\n\n private offsetElementEntity(entity: any, delta: number) {\n const copy = JSON.parse(JSON.stringify(entity))\n copy.options = { ...(copy.options || {}) }\n copy.options.left = (Number(copy.options.left) || 0) + delta\n copy.options.top = (Number(copy.options.top) || 0) + delta\n return copy\n }\n\n private insertElementEntity(entity: any, initSizeByHtml = false): any | null {\n const panel = this.printTemplate?.editingPanel\n const tpl = this.printTemplate\n if (!panel || (!entity?.tid && !entity?.printElementType?.type)) return null\n\n try {\n const type = panel.getPrintElementTypeByEntity?.(entity)\n if (!type?.createPrintElement) return null\n\n const el = type.createPrintElement(entity.options)\n el.setTemplateId?.(tpl.id ?? tpl.templateId)\n el.setPanel?.(panel)\n panel.appendDesignPrintElement?.(panel.designPaper, el, initSizeByHtml)\n panel.printElements.push(el)\n el.design?.(undefined, panel.designPaper)\n\n if (el.options?.field && tpl?.qtDesigner && typeof tpl.qtDesignderFunction === 'function') {\n el.options.qid = tpl.qtDesignderFunction(el.options.field)\n }\n\n this.applyElementTransform(el)\n return el\n } catch {\n return null\n }\n }\n\n /** Insert a new canvas element by hiprint `tid` (e.g. `defaultModule.text`). */\n addElementByTid(tid: string, options: { left?: number; top?: number } = {}) {\n const left = Number.isFinite(options.left) ? Number(options.left) : 60\n const top = Number.isFinite(options.top) ? Number(options.top) : 60\n const el = this.insertElementEntity({ tid, options: { left, top } }, true)\n if (!el) return null\n this.markTemplateChanged('新增元素')\n this.selectPrintElement(el)\n const json = this.getTemplateJson()\n if (json) this.onTemplateChange?.(json)\n return el\n }\n\n /** Clone a live print element using hiprint's native clone path. */\n private duplicateElement(el: any, delta = 10): any | null {\n const panel = this.printTemplate?.editingPanel\n const tpl = this.printTemplate\n if (!panel || !tpl || !el) return null\n\n try {\n let copy: any = null\n if (typeof el.clone === 'function') {\n copy = el.clone()\n } else if (el.printElementType?.createPrintElement) {\n copy = el.printElementType.createPrintElement()\n Object.keys(el.options || {}).forEach((key) => {\n copy.options[key] = el.options[key]\n })\n }\n if (!copy) return null\n\n const left = (Number(copy.options.left) || 0) + delta\n const top = (Number(copy.options.top) || 0) + delta\n if (typeof copy.options.setLeft === 'function') copy.options.setLeft(left)\n else copy.options.left = left\n if (typeof copy.options.setTop === 'function') copy.options.setTop(top)\n else copy.options.top = top\n\n copy.setTemplateId?.(tpl.id ?? tpl.templateId)\n copy.setPanel?.(panel)\n panel.appendDesignPrintElement?.(panel.designPaper, copy, false)\n panel.printElements.push(copy)\n copy.design?.(undefined, panel.designPaper)\n\n if (copy.options?.field && tpl?.qtDesigner && typeof tpl.qtDesignderFunction === 'function') {\n copy.options.qid = tpl.qtDesignderFunction(copy.options.field)\n }\n\n this.applyElementTransform(copy)\n return copy\n } catch {\n return null\n }\n }\n\n private setElementDraggable(el: any, draggable: boolean) {\n if (!el?.options) return\n el.options.draggable = draggable\n try {\n el.designTarget?.hidraggable?.('update', { draggable })\n } catch { /* ignore */ }\n try {\n el.designTarget?.hireizeable?.('update', { draggable })\n } catch { /* ignore */ }\n }\n\n private buildOrderWithSelectedAtEnd(selected: any[]) {\n const selectedSet = new Set(selected)\n const list = this.getPanelElements()\n return [\n ...list.filter((el) => !selectedSet.has(el)),\n ...list.filter((el) => selectedSet.has(el)),\n ]\n }\n\n private buildOrderWithSelectedAtStart(selected: any[]) {\n const selectedSet = new Set(selected)\n const list = this.getPanelElements()\n return [\n ...list.filter((el) => selectedSet.has(el)),\n ...list.filter((el) => !selectedSet.has(el)),\n ]\n }\n\n private syncPanelElementOrder(ordered: any[]) {\n const panel = this.printTemplate?.editingPanel\n if (!panel) return\n panel.printElements = ordered\n\n try {\n const $ = (window as any).jQuery || (window as any).$\n const container = panel.designPaper?.target ?? panel.target\n if ($ && container?.length) {\n ordered.forEach((el) => {\n if (el?.designTarget) $(el.designTarget).appendTo(container)\n })\n }\n } catch { /* ignore */ }\n }\n\n private getPanelSizePt(panel: any): { width: number; height: number } {\n const hinnn = (window as any).hinnn\n const mmW = Number(panel?.width ?? panel?.mmwidth ?? 0)\n const mmH = Number(panel?.height ?? panel?.mmheight ?? 0)\n if (hinnn?.mm?.toPt) {\n return { width: hinnn.mm.toPt(mmW), height: hinnn.mm.toPt(mmH) }\n }\n return { width: mmW, height: mmH }\n }\n\n private getElementRect(el: any) {\n const opts = el?.options\n if (!opts) return null\n const left = Number(opts.getLeft?.() ?? opts.left ?? 0)\n const top = Number(opts.getTop?.() ?? opts.top ?? 0)\n const width = Number(opts.getWidth?.() ?? opts.width ?? 0)\n const height = Number(opts.getHeight?.() ?? opts.height ?? 0)\n return { el, left, top, width, height, right: left + width, bottom: top + height }\n }\n\n private applyElementPosition(el: any, left: number, top: number) {\n const opts = el?.options\n if (!opts) return\n const width = Number(opts.getWidth?.() ?? opts.width ?? 0)\n const height = Number(opts.getHeight?.() ?? opts.height ?? 0)\n try {\n if (typeof el.updateSizeAndPositionOptions === 'function') {\n el.updateSizeAndPositionOptions(left, top, width, height)\n } else {\n opts.setLeft?.(left)\n opts.setTop?.(top)\n opts.copyDesignTopFromTop?.()\n }\n } catch { /* ignore */ }\n\n try {\n const dt = el.designTarget\n if (dt?.css) {\n dt.css('left', opts.displayLeft?.() ?? `${left}pt`)\n dt.css('top', opts.displayTop?.() ?? `${top}pt`)\n }\n el.createLineOfPosition?.()\n } catch { /* ignore */ }\n }\n\n private markTemplateChanged(label = HISTORY_PARAM) {\n const tpl = this.printTemplate\n if (!tpl) return\n try {\n const lib = (hiprint as any)?.instance ?? (window as any).HiPrintlib?.instance\n if (lib) lib.changed = true\n const tplId = tpl.id ?? tpl.templateId\n const bus = (window as any).hinnn?.event\n if (bus && tplId != null) bus.trigger(`hiprintTemplateDataChanged_${tplId}`, label)\n } catch { /* ignore */ }\n this.refreshPrintTemplate()\n this.history.refreshFromTemplate()\n }\n\n align(side: 'left' | 'center' | 'right' | 'top' | 'middle' | 'bottom') {\n const tpl = this.printTemplate\n if (!tpl) return\n\n const rects = this.getSelectedElements()\n .map((el) => this.getElementRect(el))\n .filter(Boolean) as Array<NonNullable<ReturnType<DesignerUtils['getElementRect']>>>\n if (!rects.length) return\n\n let refLeft: number\n let refTop: number\n let refRight: number\n let refBottom: number\n\n if (rects.length === 1) {\n const panel = tpl.editingPanel ?? rects[0].el?.panel\n const { width, height } = this.getPanelSizePt(panel)\n refLeft = 0\n refTop = 0\n refRight = width\n refBottom = height\n } else {\n refLeft = Math.min(...rects.map((r) => r.left))\n refTop = Math.min(...rects.map((r) => r.top))\n refRight = Math.max(...rects.map((r) => r.right))\n refBottom = Math.max(...rects.map((r) => r.bottom))\n }\n\n const refCenterX = (refLeft + refRight) / 2\n const refCenterY = (refTop + refBottom) / 2\n\n rects.forEach((r) => {\n let nextLeft = r.left\n let nextTop = r.top\n switch (side) {\n case 'left':\n nextLeft = refLeft\n break\n case 'right':\n nextLeft = refRight - r.width\n break\n case 'center':\n nextLeft = refCenterX - r.width / 2\n break\n case 'top':\n nextTop = refTop\n break\n case 'bottom':\n nextTop = refBottom - r.height\n break\n case 'middle':\n nextTop = refCenterY - r.height / 2\n break\n }\n if (nextLeft !== r.left || nextTop !== r.top) {\n this.applyElementPosition(r.el, nextLeft, nextTop)\n }\n })\n\n this.markTemplateChanged(HISTORY_ALIGN)\n }\n\n private callOnSelection(method: string, ...args: any[]) {\n const els = this.state.selection.elements as any[]\n els.forEach((el) => {\n try { el?.[method]?.(...args) } catch (_) { /* ignore */ }\n })\n this.refreshPrintTemplate()\n }\n\n moveZ(action: 'top' | 'up' | 'down' | 'bottom') {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n if (action === 'top') {\n selected.forEach((el) => this.setElementZIndex(el, LAYER_Z_TOP))\n this.syncPanelElementOrder(this.buildOrderWithSelectedAtEnd(selected))\n } else if (action === 'bottom') {\n selected.forEach((el) => this.setElementZIndex(el, LAYER_Z_BOTTOM))\n this.syncPanelElementOrder(this.buildOrderWithSelectedAtStart(selected))\n } else {\n selected.forEach((el) => {\n const explicit = this.getExplicitZIndex(el)\n if (action === 'up') {\n const base = explicit ?? 0\n const next = Math.min(LAYER_Z_TOP, base + 1)\n if (next !== explicit) this.setElementZIndex(el, next)\n return\n }\n if (explicit == null || explicit <= LAYER_Z_BOTTOM) return\n this.setElementZIndex(el, Math.max(LAYER_Z_BOTTOM, explicit - 1))\n })\n }\n\n this.markTemplateChanged(HISTORY_ALIGN)\n }\n\n flip(axis: 'h' | 'v') {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n const key = axis === 'h' ? 'scaleX' : 'scaleY'\n selected.forEach((el) => {\n const opts = el.options ||= {}\n const current = Number(opts[key] ?? 1)\n opts[key] = current === -1 ? 1 : -1\n this.applyElementTransform(el)\n })\n\n this.markTemplateChanged(HISTORY_ALIGN)\n }\n\n changeFont(delta: number) {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n let changed = false\n selected.forEach((el) => {\n const next = Math.max(6, Math.min(72, this.getElementFontSize(el) + delta))\n if (this.updateElementOption(el, 'fontSize', next, true)) changed = true\n })\n\n if (changed) this.markTemplateChanged(HISTORY_PARAM)\n }\n\n setBold(bold: boolean) {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n const weight = bold ? 'bold' : ''\n let changed = false\n selected.forEach((el) => {\n if (this.updateElementOption(el, 'fontWeight', weight, true)) changed = true\n })\n\n if (changed) this.markTemplateChanged(HISTORY_PARAM)\n }\n\n isSelectionLocked(): boolean {\n const selected = this.getSelectedElements()\n return selected.length > 0 && selected.every((el) => el?.options?.draggable === false)\n }\n\n isSelectionUnlocked(): boolean {\n const selected = this.getSelectedElements()\n return selected.length > 0 && selected.every((el) => el?.options?.draggable !== false)\n }\n\n setLock(locked: boolean) {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n selected.forEach((el) => {\n this.setElementDraggable(el, !locked)\n })\n\n this.markTemplateChanged(HISTORY_PARAM)\n this.restoreSelection(selected)\n designerStore.uiPulse += 1\n }\n\n clone() {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n const created: any[] = []\n selected.forEach((el) => {\n const copy = this.duplicateElement(el, 10)\n if (copy) created.push(copy)\n })\n\n if (!created.length) return\n\n this.markTemplateChanged(HISTORY_PARAM)\n this.restoreSelection(created)\n designerStore.uiPulse += 1\n }\n\n copy() {\n const selected = this.getSelectedElements()\n this.clipboard = selected\n .map((el) => this.serializeElement(el))\n .filter(Boolean)\n this.pasteOffsetStep = 0\n }\n\n cut() {\n if (!this.getSelectedElements().length) return\n this.copy()\n this.delete()\n }\n\n paste() {\n if (!this.clipboard.length) return\n\n this.pasteOffsetStep += 1\n const delta = 10 * this.pasteOffsetStep\n const created: any[] = []\n\n this.clipboard.forEach((entity) => {\n const copy = this.insertElementEntity(this.offsetElementEntity(entity, delta), false)\n if (copy) created.push(copy)\n })\n\n if (!created.length) return\n\n this.markTemplateChanged(HISTORY_PARAM)\n this.restoreSelection(created)\n designerStore.uiPulse += 1\n }\n\n delete() {\n const selected = this.getSelectedElements()\n const panel = this.printTemplate?.editingPanel\n if (!panel || !selected.length) return\n\n selected.forEach((el) => {\n try {\n panel.deletePrintElement?.(el)\n } catch {\n try { el?.delete?.() } catch { /* ignore */ }\n }\n })\n\n this.refreshSelection()\n this.markTemplateChanged(HISTORY_PARAM)\n }\n\n /** Delete a single element from the structure panel or other auxiliary UI. */\n deletePrintElement(item: any) {\n if (!item) return\n const panel = this.printTemplate?.editingPanel\n if (!panel) return\n\n try {\n panel.deletePrintElement?.(item)\n } catch {\n try { item?.delete?.() } catch { /* ignore */ }\n }\n\n this.refreshSelection()\n this.markTemplateChanged(HISTORY_PARAM)\n designerStore.uiPulse += 1\n }\n\n rotate(deg = 90) {\n const els = this.getSelectedElements()\n if (!els.length) return\n els.forEach((el) => {\n try {\n const opts = el.options ||= {}\n const cur = Number(opts.transform ?? opts.rotate ?? 0) || 0\n const next = ((cur + deg) % 360 + 360) % 360\n if (typeof el.updateOption === 'function') el.updateOption('transform', next, true)\n else opts.transform = next\n this.applyElementTransform(el)\n } catch { /* ignore */ }\n })\n this.markTemplateChanged(HISTORY_ALIGN)\n }\n\n clearPanel() {\n const panel = this.printTemplate?.editingPanel\n if (!panel) return\n const list = (panel.printElements ?? []).slice()\n list.forEach((el: any) => { try { panel.deletePrintElement?.(el) } catch (_) { /* ignore */ } })\n this.refreshSelection()\n this.markTemplateChanged(HISTORY_PARAM)\n }\n\n // -------------------------------------------------------------------------\n // Shortcut wiring\n // -------------------------------------------------------------------------\n private bindShortcuts() {\n this.shortcuts.add([\n { combo: 'mod+z', description: 'Undo', run: () => this.history.undo() },\n { combo: 'mod+shift+z', description: 'Redo', run: () => this.history.redo() },\n { combo: 'mod+y', description: 'Redo', run: () => this.history.redo() },\n { combo: 'mod+c', description: 'Copy', run: () => this.copy() },\n { combo: 'mod+x', description: 'Cut', run: () => this.cut() },\n { combo: 'mod+v', description: 'Paste', run: () => this.paste() },\n { combo: 'mod+d', description: 'Clone', run: () => this.clone() },\n { combo: 'delete', description: 'Delete', run: () => this.delete() },\n { combo: 'backspace', description: 'Delete', run: () => this.delete() },\n { combo: 'mod+=', description: 'Zoom in', run: () => this.zoomIn() },\n { combo: 'mod+-', description: 'Zoom out', run: () => this.zoomOut() },\n ])\n }\n}\n\n/** Reactive wrapper, so consumers can `import { utils }` and read state. */\nexport const reactiveDesignerUtils = () =>\n reactive(DesignerUtils.getInstance()) as DesignerUtils\n","import { inject, provide, type InjectionKey } from 'vue-demi'\nimport DesignerUtils from '../core/designer-utils'\n\nexport const DESIGNER_INJECTION_KEY: InjectionKey<DesignerUtils> = Symbol('vue3-print-designer/utils')\n\nexport function provideDesigner(utils: DesignerUtils): DesignerUtils {\n provide(DESIGNER_INJECTION_KEY, utils)\n return utils\n}\n\n/**\n * Get the current DesignerUtils from the Vue injection chain.\n * Falls back to the global singleton when no provider is present.\n */\nexport function useDesigner(): DesignerUtils {\n const found = inject(DESIGNER_INJECTION_KEY, null as DesignerUtils | null)\n return found ?? DesignerUtils.getInstance()\n}\n","/**\n * Canvas ruler — matches sv-print visual behaviour:\n * - unit: mm\n * - major label every 10 mm (… -20, -10, 0, 10, 20 …)\n * - mid tick every 5 mm, fine tick every 1 mm (when zoom allows)\n * - negative axis: horizontal from -90 mm, vertical from -10 mm (0 at paper top-left)\n * - paper region highlighted on the ruler\n */\nimport { onMounted, onBeforeUnmount, watch } from 'vue-demi'\nimport { designerStore } from '../core/stores'\nimport { DESIGN_CONTAINER_ID } from '../constants'\n\nexport interface UseRulerOptions {\n canvasX: () => HTMLCanvasElement | null\n canvasY: () => HTMLCanvasElement | null\n scrollerEl: () => HTMLElement | null\n /** Workspace container — observed for vertical ruler height changes. */\n workspaceEl?: () => HTMLElement | null\n}\n\nconst RULER_SIZE = 24\nconst LABEL_STEP_MM = 10\nconst MID_STEP_MM = 5\n/** Minimum padding from scroller edge. */\nconst PAPER_ORIGIN_PAD = 24\n/** Ruler negative range before paper origin (mm). */\nconst RULER_NEG_START_MM_X = 90\nconst RULER_NEG_START_MM_Y = 10\n\ninterface PaperGeom {\n x: number\n y: number\n widthPx: number\n heightPx: number\n widthMm: number\n heightMm: number\n}\n\nfunction readCssVar(name: string, fallback: string): string {\n const root = document.querySelector('.svp-root')\n if (!root) return fallback\n const v = getComputedStyle(root).getPropertyValue(name).trim()\n return v || fallback\n}\n\nfunction syncPaperPadding(scroller: HTMLElement): PaperGeom | null {\n const host = document.getElementById(DESIGN_CONTAINER_ID)\n if (!host) return null\n const paper = host.querySelector('.hiprint-printPaper') as HTMLElement | null\n if (!paper) return null\n\n const paperW = paper.offsetWidth || paper.getBoundingClientRect().width\n const paperH = paper.offsetHeight || paper.getBoundingClientRect().height\n const sw = paper.style.width || ''\n const sh = paper.style.height || ''\n const wMm = /^(\\d+(?:\\.\\d+)?)\\s*mm$/i.exec(sw)\n const hMm = /^(\\d+(?:\\.\\d+)?)\\s*mm$/i.exec(sh)\n const widthMm = wMm ? parseFloat(wMm[1]) : 210\n const heightMm = hMm ? parseFloat(hMm[1]) : 297\n const pxPerMmX = paperW / Math.max(1, widthMm)\n const pxPerMmY = paperH / Math.max(1, heightMm)\n\n const padLeft = Math.max(PAPER_ORIGIN_PAD, RULER_NEG_START_MM_X * pxPerMmX)\n const padTop = Math.max(PAPER_ORIGIN_PAD, RULER_NEG_START_MM_Y * pxPerMmY)\n const padRight = Math.max(PAPER_ORIGIN_PAD, scroller.clientWidth - paperW - padLeft)\n const padBottom = Math.max(PAPER_ORIGIN_PAD, scroller.clientHeight - paperH - padTop)\n const padding = `${padTop}px ${padRight}px ${padBottom}px ${padLeft}px`\n if (host.style.padding !== padding) host.style.padding = padding\n\n const widthPx = paperW\n const heightPx = paperH\n return {\n x: padLeft,\n y: padTop,\n widthPx,\n heightPx,\n widthMm,\n heightMm,\n }\n}\n\nfunction readPaperGeometry(scroller: HTMLElement | null): PaperGeom | null {\n if (!scroller) return null\n return syncPaperPadding(scroller)\n}\n\ninterface DrawArgs {\n size: number\n length: number\n scrollPx: number\n originPx: number\n pxPerMm: number\n paperPx: number\n vertical: boolean\n}\n\ninterface RulerColors {\n bg: string\n paper: string\n border: string\n tick: string\n text: string\n}\n\nfunction readColors(): RulerColors {\n return {\n bg: readCssVar('--svp-ruler-bg', '#ffffff'),\n paper: readCssVar('--svp-ruler-paper', '#f5f5f5'),\n border: readCssVar('--svp-ruler-border', '#cccccc'),\n tick: readCssVar('--svp-ruler-tick', '#343a40'),\n text: readCssVar('--svp-ruler-fg', '#343a40'),\n }\n}\n\nfunction drawRuler(canvas: HTMLCanvasElement, a: DrawArgs) {\n const dpr = window.devicePixelRatio || 1\n const canvasW = a.vertical ? a.size : a.length\n const canvasH = a.vertical ? a.length : a.size\n canvas.width = Math.max(1, Math.round(canvasW * dpr))\n canvas.height = Math.max(1, Math.round(canvasH * dpr))\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0)\n ctx.clearRect(0, 0, canvasW, canvasH)\n\n const colors = readColors()\n ctx.fillStyle = colors.bg\n ctx.fillRect(0, 0, canvasW, canvasH)\n\n const paperStart = a.originPx - a.scrollPx\n const paperEnd = paperStart + a.paperPx\n const spanStart = Math.max(0, paperStart)\n const spanEnd = Math.min(a.length, paperEnd)\n if (spanEnd > spanStart) {\n ctx.fillStyle = colors.paper\n if (a.vertical) {\n ctx.fillRect(0, spanStart, a.size, spanEnd - spanStart)\n } else {\n ctx.fillRect(spanStart, 0, spanEnd - spanStart, a.size)\n }\n }\n\n ctx.strokeStyle = colors.border\n ctx.lineWidth = 1\n ctx.beginPath()\n if (a.vertical) {\n ctx.moveTo(a.size - 0.5, 0)\n ctx.lineTo(a.size - 0.5, a.length)\n } else {\n ctx.moveTo(0, a.size - 0.5)\n ctx.lineTo(a.length, a.size - 0.5)\n }\n ctx.stroke()\n\n ctx.strokeStyle = colors.tick\n ctx.fillStyle = colors.text\n const fontSize = Math.max(9, Math.round(a.size * 0.42))\n ctx.font = `${fontSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif`\n ctx.textBaseline = 'alphabetic'\n ctx.lineWidth = 1\n\n const showFine = a.pxPerMm >= 3\n const showMid = a.pxPerMm * MID_STEP_MM >= 3\n\n const startMm = Math.floor((a.scrollPx - a.originPx) / a.pxPerMm) - 2\n const endMm = Math.ceil((a.scrollPx + a.length - a.originPx) / a.pxPerMm) + 2\n\n const majorLen = Math.round(a.size * 0.72)\n const midLen = Math.round(a.size * 0.48)\n const fineLen = Math.round(a.size * 0.22)\n\n function posFor(mm: number) {\n return Math.round(mm * a.pxPerMm + a.originPx - a.scrollPx) + 0.5\n }\n\n if (showFine) {\n ctx.beginPath()\n for (let mm = startMm; mm <= endMm; mm += 1) {\n if (mm % MID_STEP_MM === 0) continue\n const pos = posFor(mm)\n if (pos < -2 || pos > a.length + 2) continue\n if (a.vertical) {\n ctx.moveTo(a.size, pos)\n ctx.lineTo(a.size - fineLen, pos)\n } else {\n ctx.moveTo(pos, a.size)\n ctx.lineTo(pos, a.size - fineLen)\n }\n }\n ctx.stroke()\n }\n\n if (showMid) {\n ctx.beginPath()\n for (let mm = Math.ceil(startMm / MID_STEP_MM) * MID_STEP_MM; mm <= endMm; mm += MID_STEP_MM) {\n if (mm % LABEL_STEP_MM === 0) continue\n const pos = posFor(mm)\n if (pos < -2 || pos > a.length + 2) continue\n if (a.vertical) {\n ctx.moveTo(a.size, pos)\n ctx.lineTo(a.size - midLen, pos)\n } else {\n ctx.moveTo(pos, a.size)\n ctx.lineTo(pos, a.size - midLen)\n }\n }\n ctx.stroke()\n }\n\n ctx.beginPath()\n for (let mm = Math.ceil(startMm / LABEL_STEP_MM) * LABEL_STEP_MM; mm <= endMm; mm += LABEL_STEP_MM) {\n const pos = posFor(mm)\n if (pos < -24 || pos > a.length + 24) continue\n if (a.vertical) {\n ctx.moveTo(a.size, pos)\n ctx.lineTo(a.size - majorLen, pos)\n } else {\n ctx.moveTo(pos, a.size)\n ctx.lineTo(pos, a.size - majorLen)\n }\n }\n ctx.stroke()\n\n for (let mm = Math.ceil(startMm / LABEL_STEP_MM) * LABEL_STEP_MM; mm <= endMm; mm += LABEL_STEP_MM) {\n const pos = posFor(mm)\n if (pos < -24 || pos > a.length + 24) continue\n const label = String(mm)\n if (a.vertical) {\n ctx.save()\n ctx.translate(fontSize * 0.85, pos)\n ctx.rotate(-Math.PI / 2)\n ctx.textAlign = 'left'\n ctx.fillText(label, 1, 0)\n ctx.restore()\n } else {\n ctx.textAlign = 'left'\n ctx.fillText(label, pos + 2, a.size * 0.68)\n }\n }\n}\n\nexport function useRuler(opts: UseRulerOptions) {\n function redraw() {\n const cx = opts.canvasX()\n const cy = opts.canvasY()\n const scroller = opts.scrollerEl()\n if (!scroller) return\n const geom = readPaperGeometry(scroller)\n if (!geom) return\n const pxPerMmX = geom.widthPx / Math.max(1, geom.widthMm)\n\n if (cx) {\n drawRuler(cx, {\n size: RULER_SIZE,\n length: cx.clientWidth,\n scrollPx: scroller.scrollLeft,\n originPx: geom.x,\n pxPerMm: pxPerMmX,\n paperPx: geom.widthPx,\n vertical: false,\n })\n }\n if (cy) {\n drawRuler(cy, {\n size: RULER_SIZE,\n length: cy.clientHeight,\n scrollPx: scroller.scrollTop,\n originPx: geom.y,\n pxPerMm: geom.heightPx / Math.max(1, geom.heightMm),\n paperPx: geom.heightPx,\n vertical: true,\n })\n }\n }\n\n let resizeObserver: ResizeObserver | null = null\n let mutationObserver: MutationObserver | null = null\n let scrollHandler: (() => void) | null = null\n let raf = 0\n\n function schedule() {\n if (raf) return\n raf = requestAnimationFrame(() => { raf = 0; redraw() })\n }\n\n onMounted(() => {\n const scroller = opts.scrollerEl()\n scrollHandler = () => schedule()\n scroller?.addEventListener('scroll', scrollHandler, { passive: true })\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(() => schedule())\n if (scroller) resizeObserver.observe(scroller)\n const workspace = opts.workspaceEl?.()\n if (workspace) resizeObserver.observe(workspace)\n const host = document.getElementById(DESIGN_CONTAINER_ID)\n if (host) resizeObserver.observe(host)\n const paper = host?.querySelector('.hiprint-printPaper')\n if (paper) resizeObserver.observe(paper)\n }\n if (typeof MutationObserver !== 'undefined') {\n const host = document.getElementById(DESIGN_CONTAINER_ID)\n if (host) {\n mutationObserver = new MutationObserver(() => schedule())\n mutationObserver.observe(host, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'class'],\n })\n }\n }\n redraw()\n setTimeout(redraw, 100)\n setTimeout(redraw, 400)\n setTimeout(redraw, 1000)\n })\n\n onBeforeUnmount(() => {\n const scroller = opts.scrollerEl()\n if (scroller && scrollHandler) scroller.removeEventListener('scroll', scrollHandler)\n resizeObserver?.disconnect()\n mutationObserver?.disconnect()\n if (raf) cancelAnimationFrame(raf)\n })\n\n watch(() => designerStore.zoom, () => schedule())\n\n return { redraw }\n}\n","/**\n * Runtime theme injection. When users pass `ThemeType` objects via the\n * <Designer> `theme` prop we generate a `[data-theme=\"...\"]` block so the\n * CSS variables defined in tokens.scss are overridden in-place.\n */\nimport type { ThemeType } from '../types'\n\nconst STYLE_ID = 'svp-runtime-theme'\n\nfunction rgba(color: string, alpha: number): string {\n return color\n ? `color-mix(in srgb, ${color} ${Math.round(alpha * 100)}%, transparent)`\n : 'transparent'\n}\n\nfunction block(theme: ThemeType): string {\n const name = theme.theme || 'svpCustom'\n const lines = [\n theme.primaryColor && ` --svp-primary: ${theme.primaryColor};`,\n theme.primaryContent && ` --svp-primary-content: ${theme.primaryContent};`,\n theme.base100 && ` --svp-bg: ${theme.base100};`,\n theme.base200 && ` --svp-bg-soft: ${theme.base200};`,\n theme.base300 && ` --svp-border: ${theme.base300};`,\n theme.baseContent && ` --svp-fg: ${theme.baseContent};`,\n theme.baseContent && ` --svp-fg-muted: ${rgba(theme.baseContent, 0.62)};`,\n ].filter(Boolean)\n return `.svp-root[data-theme=\"${name}\"] {\\n${lines.join('\\n')}\\n}`\n}\n\nexport function injectThemes(theme: unknown): void {\n if (typeof document === 'undefined') return\n if (!theme) return\n const list: ThemeType[] = []\n if (typeof theme === 'string') return\n if (Array.isArray(theme)) list.push(...(theme as ThemeType[]))\n else list.push(theme as ThemeType)\n\n const css = list\n .filter((t) => t && typeof t === 'object' && t.primaryColor)\n .map(block)\n .join('\\n\\n')\n if (!css) return\n\n let el = document.getElementById(STYLE_ID) as HTMLStyleElement | null\n if (!el) {\n el = document.createElement('style')\n el.id = STYLE_ID\n document.head.appendChild(el)\n }\n el.textContent = css\n}\n","/**\n * Default floating-panel layout — mirrors sv-print `styleOption` defaults.\n * Coordinates are relative to `.svp-workspace` (below header + toolbar).\n */\nexport const SVP_CHROME_TOP = 82\n\n/** Matches `--svp-ruler-size`; panels must not overlap ruler strips. */\nexport const SVP_RULER_INSET = 24\n\n/** Gap between stacked panels in the same column. */\nexport const SVP_PANEL_GAP = 8\n\n/** Bottom margin for bottom-anchored panels (miniMap, pageHistory). */\nexport const SVP_PANEL_BOTTOM = 30\n\n/** Fixed height of bottom-docked panels. */\nexport const SVP_PANEL_DOCK_HEIGHT = 200\n\n/** Top-anchored panels share the workspace with a bottom-docked panel below. */\nexport const SVP_STACKED_HEIGHT_INSET =\n SVP_PANEL_BOTTOM + SVP_PANEL_DOCK_HEIGHT + SVP_PANEL_GAP\n\nexport interface PanelLayoutSpec {\n width: number\n height?: number\n left?: number\n top?: number\n right?: number\n bottom?: number\n /** height = boundsHeight - heightInset */\n heightInset?: number\n}\n\nexport const SVP_PANEL_LAYOUT = {\n draggableEls: { left: 28, top: 28, width: 240, heightInset: 28 + SVP_STACKED_HEIGHT_INSET },\n miniMap: { left: 28, bottom: SVP_PANEL_BOTTOM, width: 200, height: SVP_PANEL_DOCK_HEIGHT },\n properties: { right: 0, top: 28, width: 270, heightInset: 46 },\n pageStructure: { right: 280, top: 28, width: 200, heightInset: 28 + SVP_STACKED_HEIGHT_INSET },\n pageHistory: { right: 280, bottom: SVP_PANEL_BOTTOM, width: 200, height: SVP_PANEL_DOCK_HEIGHT },\n} as const satisfies Record<string, PanelLayoutSpec>\n\nexport type SvpPanelLayoutKey = keyof typeof SVP_PANEL_LAYOUT\n\nexport interface PanelRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport function resolvePanelLayout(\n spec: PanelLayoutSpec,\n bounds: { width: number; height: number },\n): PanelRect {\n const width = spec.width\n let height = spec.height ?? Math.max(72, bounds.height - (spec.heightInset ?? 0))\n let x = spec.left ?? (spec.right != null ? bounds.width - spec.right - width : 0)\n let y = spec.top ?? (spec.bottom != null ? bounds.height - spec.bottom - height : 0)\n if (spec.left != null) x = Math.max(SVP_RULER_INSET, x)\n if (spec.top != null) y = Math.max(SVP_RULER_INSET, y)\n x = Math.max(0, Math.round(x))\n y = Math.max(0, Math.round(y))\n height = Math.max(72, Math.round(height))\n return { x, y, width, height }\n}\n\nfunction rectsOverlap(a: PanelRect, b: PanelRect, gap = SVP_PANEL_GAP): boolean {\n return !(\n a.x + a.width + gap <= b.x\n || b.x + b.width + gap <= a.x\n || a.y + a.height + gap <= b.y\n || b.y + b.height + gap <= a.y\n )\n}\n\n/** Resolve all default panel rects and verify they do not overlap. */\nexport function resolveAllPanelLayouts(\n bounds: { width: number; height: number },\n keys: SvpPanelLayoutKey[] = Object.keys(SVP_PANEL_LAYOUT) as SvpPanelLayoutKey[],\n): Record<SvpPanelLayoutKey, PanelRect> {\n const out = {} as Record<SvpPanelLayoutKey, PanelRect>\n keys.forEach((key) => {\n out[key] = resolvePanelLayout(SVP_PANEL_LAYOUT[key], bounds)\n })\n return out\n}\n\nexport function findPanelOverlaps(\n layouts: Record<string, PanelRect>,\n gap = SVP_PANEL_GAP,\n): Array<[string, string]> {\n const keys = Object.keys(layouts)\n const pairs: Array<[string, string]> = []\n for (let i = 0; i < keys.length; i += 1) {\n for (let j = i + 1; j < keys.length; j += 1) {\n const a = keys[i]\n const b = keys[j]\n if (rectsOverlap(layouts[a], layouts[b], gap)) pairs.push([a, b])\n }\n }\n return pairs\n}\n","import type { InjectionKey, Ref } from 'vue-demi'\nimport {\n SVP_PANEL_LAYOUT,\n SVP_RULER_INSET,\n type PanelLayoutSpec,\n type SvpPanelLayoutKey,\n} from '../constants/panel-layout'\nimport { setPanelVisibility, type PanelVisibility } from './stores'\nimport type { DragBoxMode, DragBoxStyleOptions, ShowOption, StyleOption } from '../types'\n\n/** Maps `styleOption` keys to floating panel store keys. */\nexport const STYLE_OPTION_PANEL_KEYS: Record<string, keyof PanelVisibility> = {\n draggableEls: 'draggableEls',\n miniMap: 'miniMap',\n pageStructure: 'pageStructure',\n history: 'pageHistory',\n options: 'properties',\n}\n\n/** Maps `styleOption` keys to default layout keys. */\nexport const STYLE_OPTION_LAYOUT_KEYS: Record<string, SvpPanelLayoutKey> = {\n draggableEls: 'draggableEls',\n miniMap: 'miniMap',\n pageStructure: 'pageStructure',\n history: 'pageHistory',\n options: 'properties',\n}\n\n/** Toolbar buttons controlled by `styleOption.*.show`. */\nexport const TOOL_STYLE_GROUP: Record<string, keyof StyleOption> = {\n alignLeft: 'editableTools',\n alignCenter: 'editableTools',\n alignRight: 'editableTools',\n alignTop: 'editableTools',\n alignMiddle: 'editableTools',\n alignBottom: 'editableTools',\n flipH: 'editableTools',\n flipV: 'editableTools',\n moveTop: 'zIndexTools',\n moveUp: 'zIndexTools',\n moveDown: 'zIndexTools',\n moveBottom: 'zIndexTools',\n fontInc: 'fontTools',\n fontDec: 'fontTools',\n fontBold: 'fontTools',\n fontUnbold: 'fontTools',\n zoomOut: 'zoomTools',\n zoomPercent: 'zoomTools',\n zoomIn: 'zoomTools',\n rotate: 'rotateTools',\n}\n\nexport interface ResolvedShowOption {\n showHeader: boolean\n showToolbar: boolean\n showFooter: boolean\n showPower: boolean\n}\n\nexport interface DesignerUiContext {\n styleOption: Ref<StyleOption | undefined>\n showOption: Ref<ResolvedShowOption>\n}\n\nexport const DESIGNER_UI_INJECTION_KEY: InjectionKey<DesignerUiContext> = Symbol('svp-designer-ui')\n\nexport function resolveShowOption(\n showOption?: ShowOption,\n showToolbarFallback = true,\n): ResolvedShowOption {\n return {\n showHeader: showOption?.showHeader ?? true,\n showToolbar: showOption?.showToolbar ?? showToolbarFallback,\n showFooter: showOption?.showFooter ?? true,\n showPower: showOption?.showPower ?? true,\n }\n}\n\nexport function parseInlineStyle(style?: string): Record<string, string> {\n if (!style?.trim()) return {}\n const out: Record<string, string> = {}\n style.split(';').forEach((chunk) => {\n const idx = chunk.indexOf(':')\n if (idx <= 0) return\n const key = chunk.slice(0, idx).trim()\n const value = chunk.slice(idx + 1).trim()\n if (key && value) out[key] = value\n })\n return out\n}\n\nfunction layoutSpecForMode(\n base: PanelLayoutSpec,\n mode?: DragBoxMode,\n): PanelLayoutSpec {\n if (!mode || mode === 'default') return { ...base }\n const spec: PanelLayoutSpec = { ...base }\n if (mode === 'left') {\n spec.left = SVP_RULER_INSET\n spec.right = undefined\n } else if (mode === 'right') {\n spec.right = 0\n spec.left = undefined\n } else if (mode === 'top') {\n spec.top = SVP_RULER_INSET\n spec.bottom = undefined\n } else if (mode === 'bottom') {\n spec.bottom = 30\n spec.top = undefined\n }\n return spec\n}\n\nexport function resolvePanelDragBoxOptions(\n styleKey: string,\n styleOption?: StyleOption,\n): {\n panelKey?: keyof PanelVisibility\n layoutKey?: SvpPanelLayoutKey\n layoutSpec?: PanelLayoutSpec\n boxStyleExtra: Record<string, string>\n bodyStyleExtra: Record<string, string>\n draggable: boolean\n title?: string\n} {\n const panelStyle = styleOption?.[styleKey as keyof StyleOption] as DragBoxStyleOptions | undefined\n const panelKey = STYLE_OPTION_PANEL_KEYS[styleKey]\n const layoutKey = STYLE_OPTION_LAYOUT_KEYS[styleKey]\n const baseSpec = layoutKey ? SVP_PANEL_LAYOUT[layoutKey] : undefined\n const layoutSpec = baseSpec && panelStyle?.mode !== 'fixed'\n ? layoutSpecForMode(baseSpec, panelStyle?.mode)\n : undefined\n const parsed = parseInlineStyle(panelStyle?.style)\n const draggable = panelStyle?.mode !== 'fixed'\n\n const boxStyleExtra: Record<string, string> = { ...parsed }\n if (panelStyle?.mode === 'fixed') {\n boxStyleExtra.position = 'fixed'\n }\n\n return {\n panelKey,\n layoutKey,\n layoutSpec,\n boxStyleExtra,\n bodyStyleExtra: {},\n draggable,\n title: panelStyle?.title,\n }\n}\n\nexport function applyStyleOption(styleOption?: StyleOption) {\n if (!styleOption) return\n Object.entries(STYLE_OPTION_PANEL_KEYS).forEach(([styleKey, panelKey]) => {\n const panelStyle = styleOption[styleKey as keyof StyleOption] as DragBoxStyleOptions | undefined\n if (panelStyle && typeof panelStyle.show === 'boolean') {\n setPanelVisibility(panelKey, panelStyle.show)\n }\n })\n}\n\nexport function isToolGroupVisible(toolKey: string, styleOption?: StyleOption): boolean {\n const group = TOOL_STYLE_GROUP[toolKey]\n if (!group) return true\n const cfg = styleOption?.[group] as DragBoxStyleOptions | undefined\n if (cfg && typeof cfg.show === 'boolean') return cfg.show\n return true\n}\n","import { DEFAULT_ELEMENT_CATALOGUE, type ElementCatalogueItem } from '../constants'\nimport { iconForElementKey } from './icons'\nimport type { HeaderEle } from '../types'\n\nexport function headerElementsFromCatalogue(\n catalogue: ElementCatalogueItem[] = DEFAULT_ELEMENT_CATALOGUE,\n): HeaderEle[] {\n return catalogue.map((item) => ({\n key: item.key,\n label: item.label,\n tid: item.tid,\n icon: item.icon ?? iconForElementKey(item.key),\n }))\n}\n","import Vue from 'vue';\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n const colonSeparated = value.split(\":\");\n if (value.slice(0, 1) === \"@\") {\n if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n return null;\n }\n provider = colonSeparated.shift().slice(1);\n }\n if (colonSeparated.length > 3 || !colonSeparated.length) {\n return null;\n }\n if (colonSeparated.length > 1) {\n const name2 = colonSeparated.pop();\n const prefix = colonSeparated.pop();\n const result = {\n provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n prefix,\n name: name2\n };\n return validate && !validateIconName(result) ? null : result;\n }\n const name = colonSeparated[0];\n const dashSeparated = name.split(\"-\");\n if (dashSeparated.length > 1) {\n const result = {\n provider,\n prefix: dashSeparated.shift(),\n name: dashSeparated.join(\"-\")\n };\n return validate && !validateIconName(result) ? null : result;\n }\n if (allowSimpleName && provider === \"\") {\n const result = {\n provider,\n prefix: \"\",\n name\n };\n return validate && !validateIconName(result, allowSimpleName) ? null : result;\n }\n return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n if (!icon) {\n return false;\n }\n return !!((icon.provider === \"\" || icon.provider.match(matchIconName)) && (allowSimpleName && icon.prefix === \"\" || icon.prefix.match(matchIconName)) && icon.name.match(matchIconName));\n};\n\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n return data;\n}\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n return {\n provider,\n prefix,\n icons: /* @__PURE__ */ Object.create(null),\n missing: /* @__PURE__ */ new Set()\n };\n}\nfunction getStorage(provider, prefix) {\n const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n if (!quicklyValidateIconSet(data)) {\n return [];\n }\n return parseIconSet(data, (name, icon) => {\n if (icon) {\n storage.icons[name] = icon;\n } else {\n storage.missing.add(name);\n }\n });\n}\nfunction addIconToStorage(storage, name, icon) {\n try {\n if (typeof icon.body === \"string\") {\n storage.icons[name] = { ...icon };\n return true;\n }\n } catch (err) {\n }\n return false;\n}\nfunction listIcons(provider, prefix) {\n let allIcons = [];\n const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n providers.forEach((provider2) => {\n const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n prefixes.forEach((prefix2) => {\n const storage = getStorage(provider2, prefix2);\n allIcons = allIcons.concat(\n Object.keys(storage.icons).map(\n (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n )\n );\n });\n });\n return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n if (typeof allow === \"boolean\") {\n simpleNames = allow;\n }\n return simpleNames;\n}\nfunction getIconData(name) {\n const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n if (icon) {\n const storage = getStorage(icon.provider, icon.prefix);\n const iconName = icon.name;\n return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n }\n}\nfunction addIcon(name, data) {\n const icon = stringToIcon(name, true, simpleNames);\n if (!icon) {\n return false;\n }\n const storage = getStorage(icon.provider, icon.prefix);\n return addIconToStorage(storage, icon.name, data);\n}\nfunction addCollection(data, provider) {\n if (typeof data !== \"object\") {\n return false;\n }\n if (typeof provider !== \"string\") {\n provider = data.provider || \"\";\n }\n if (simpleNames && !provider && !data.prefix) {\n let added = false;\n if (quicklyValidateIconSet(data)) {\n data.prefix = \"\";\n parseIconSet(data, (name, icon) => {\n if (icon && addIcon(name, icon)) {\n added = true;\n }\n });\n }\n return added;\n }\n const prefix = data.prefix;\n if (!validateIconName({\n provider,\n prefix,\n name: \"a\"\n })) {\n return false;\n }\n const storage = getStorage(provider, prefix);\n return !!addIconSet(storage, data);\n}\nfunction iconExists(name) {\n return !!getIconData(name);\n}\nfunction getIcon(name) {\n const result = getIconData(name);\n return result ? {\n ...defaultIconProps,\n ...result\n } : null;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n ...defaultIconSizeCustomisations,\n ...defaultIconTransformations\n});\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = '<g transform=\"' + transformations.join(\" \") + '\">' + body + \"</g>\";\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const attributes = {};\n const setAttr = (prop, value) => {\n if (!isUnsetKeyword(value)) {\n attributes[prop] = value.toString();\n }\n };\n setAttr(\"width\", width);\n setAttr(\"height\", height);\n attributes.viewBox = box.left.toString() + \" \" + box.top.toString() + \" \" + boxWidth.toString() + \" \" + boxHeight.toString();\n return {\n attributes,\n body\n };\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + suffix + \"$3\"\n );\n });\n body = body.replace(new RegExp(suffix, \"g\"), \"\");\n return body;\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n return storage[provider] || storage[\"\"];\n}\n\nfunction createAPIConfig(source) {\n let resources;\n if (typeof source.resources === \"string\") {\n resources = [source.resources];\n } else {\n resources = source.resources;\n if (!(resources instanceof Array) || !resources.length) {\n return null;\n }\n }\n const result = {\n resources,\n path: source.path || \"/\",\n maxURL: source.maxURL || 500,\n rotate: source.rotate || 750,\n timeout: source.timeout || 5e3,\n random: source.random === true,\n index: source.index || 0,\n dataAfterTimeout: source.dataAfterTimeout !== false\n };\n return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n \"https://api.simplesvg.com\",\n \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n if (fallBackAPISources.length === 1) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n if (Math.random() > 0.5) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n fallBackAPI.push(fallBackAPISources.pop());\n }\n }\n}\nconfigStorage[\"\"] = createAPIConfig({\n resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n const config = createAPIConfig(customConfig);\n if (config === null) {\n return false;\n }\n configStorage[provider] = config;\n return true;\n}\nfunction getAPIConfig(provider) {\n return configStorage[provider];\n}\nfunction listAPIProviders() {\n return Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n let callback;\n try {\n callback = fetch;\n if (typeof callback === \"function\") {\n return callback;\n }\n } catch (err) {\n }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n fetchModule = fetch2;\n}\nfunction getFetch() {\n return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n const config = getAPIConfig(provider);\n if (!config) {\n return 0;\n }\n let result;\n if (!config.maxURL) {\n result = 0;\n } else {\n let maxHostLength = 0;\n config.resources.forEach((item) => {\n const host = item;\n maxHostLength = Math.max(maxHostLength, host.length);\n });\n const url = prefix + \".json?icons=\";\n result = config.maxURL - maxHostLength - config.path.length - url.length;\n }\n return result;\n}\nfunction shouldAbort(status) {\n return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n const results = [];\n const maxLength = calculateMaxLength(provider, prefix);\n const type = \"icons\";\n let item = {\n type,\n provider,\n prefix,\n icons: []\n };\n let length = 0;\n icons.forEach((name, index) => {\n length += name.length + 1;\n if (length >= maxLength && index > 0) {\n results.push(item);\n item = {\n type,\n provider,\n prefix,\n icons: []\n };\n length = name.length;\n }\n item.icons.push(name);\n });\n results.push(item);\n return results;\n};\nfunction getPath(provider) {\n if (typeof provider === \"string\") {\n const config = getAPIConfig(provider);\n if (config) {\n return config.path;\n }\n }\n return \"/\";\n}\nconst send = (host, params, callback) => {\n if (!fetchModule) {\n callback(\"abort\", 424);\n return;\n }\n let path = getPath(params.provider);\n switch (params.type) {\n case \"icons\": {\n const prefix = params.prefix;\n const icons = params.icons;\n const iconsList = icons.join(\",\");\n const urlParams = new URLSearchParams({\n icons: iconsList\n });\n path += prefix + \".json?\" + urlParams.toString();\n break;\n }\n case \"custom\": {\n const uri = params.uri;\n path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n break;\n }\n default:\n callback(\"abort\", 400);\n return;\n }\n let defaultError = 503;\n fetchModule(host + path).then((response) => {\n const status = response.status;\n if (status !== 200) {\n setTimeout(() => {\n callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n });\n return;\n }\n defaultError = 501;\n return response.json();\n }).then((data) => {\n if (typeof data !== \"object\" || data === null) {\n setTimeout(() => {\n if (data === 404) {\n callback(\"abort\", data);\n } else {\n callback(\"next\", defaultError);\n }\n });\n return;\n }\n setTimeout(() => {\n callback(\"success\", data);\n });\n }).catch(() => {\n callback(\"next\", defaultError);\n });\n};\nconst fetchAPIModule = {\n prepare,\n send\n};\n\nfunction sortIcons(icons) {\n const result = {\n loaded: [],\n missing: [],\n pending: []\n };\n const storage = /* @__PURE__ */ Object.create(null);\n icons.sort((a, b) => {\n if (a.provider !== b.provider) {\n return a.provider.localeCompare(b.provider);\n }\n if (a.prefix !== b.prefix) {\n return a.prefix.localeCompare(b.prefix);\n }\n return a.name.localeCompare(b.name);\n });\n let lastIcon = {\n provider: \"\",\n prefix: \"\",\n name: \"\"\n };\n icons.forEach((icon) => {\n if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n return;\n }\n lastIcon = icon;\n const provider = icon.provider;\n const prefix = icon.prefix;\n const name = icon.name;\n const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n let list;\n if (name in localStorage.icons) {\n list = result.loaded;\n } else if (prefix === \"\" || localStorage.missing.has(name)) {\n list = result.missing;\n } else {\n list = result.pending;\n }\n const item = {\n provider,\n prefix,\n name\n };\n list.push(item);\n });\n return result;\n}\n\nfunction removeCallback(storages, id) {\n storages.forEach((storage) => {\n const items = storage.loaderCallbacks;\n if (items) {\n storage.loaderCallbacks = items.filter((row) => row.id !== id);\n }\n });\n}\nfunction updateCallbacks(storage) {\n if (!storage.pendingCallbacksFlag) {\n storage.pendingCallbacksFlag = true;\n setTimeout(() => {\n storage.pendingCallbacksFlag = false;\n const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n if (!items.length) {\n return;\n }\n let hasPending = false;\n const provider = storage.provider;\n const prefix = storage.prefix;\n items.forEach((item) => {\n const icons = item.icons;\n const oldLength = icons.pending.length;\n icons.pending = icons.pending.filter((icon) => {\n if (icon.prefix !== prefix) {\n return true;\n }\n const name = icon.name;\n if (storage.icons[name]) {\n icons.loaded.push({\n provider,\n prefix,\n name\n });\n } else if (storage.missing.has(name)) {\n icons.missing.push({\n provider,\n prefix,\n name\n });\n } else {\n hasPending = true;\n return true;\n }\n return false;\n });\n if (icons.pending.length !== oldLength) {\n if (!hasPending) {\n removeCallback([storage], item.id);\n }\n item.callback(\n icons.loaded.slice(0),\n icons.missing.slice(0),\n icons.pending.slice(0),\n item.abort\n );\n }\n });\n });\n }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n const id = idCounter++;\n const abort = removeCallback.bind(null, pendingSources, id);\n if (!icons.pending.length) {\n return abort;\n }\n const item = {\n id,\n icons,\n callback,\n abort\n };\n pendingSources.forEach((storage) => {\n (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n });\n return abort;\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n const result = [];\n list.forEach((item) => {\n const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n if (icon) {\n result.push(icon);\n }\n });\n return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n resources: [],\n index: 0,\n timeout: 2e3,\n rotate: 750,\n random: false,\n dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n const resourcesCount = config.resources.length;\n const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n let resources;\n if (config.random) {\n let list = config.resources.slice(0);\n resources = [];\n while (list.length > 1) {\n const nextIndex = Math.floor(Math.random() * list.length);\n resources.push(list[nextIndex]);\n list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n }\n resources = resources.concat(list);\n } else {\n resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n }\n const startTime = Date.now();\n let status = \"pending\";\n let queriesSent = 0;\n let lastError;\n let timer = null;\n let queue = [];\n let doneCallbacks = [];\n if (typeof done === \"function\") {\n doneCallbacks.push(done);\n }\n function resetTimer() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function abort() {\n if (status === \"pending\") {\n status = \"aborted\";\n }\n resetTimer();\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function subscribe(callback, overwrite) {\n if (overwrite) {\n doneCallbacks = [];\n }\n if (typeof callback === \"function\") {\n doneCallbacks.push(callback);\n }\n }\n function getQueryStatus() {\n return {\n startTime,\n payload,\n status,\n queriesSent,\n queriesPending: queue.length,\n subscribe,\n abort\n };\n }\n function failQuery() {\n status = \"failed\";\n doneCallbacks.forEach((callback) => {\n callback(void 0, lastError);\n });\n }\n function clearQueue() {\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function moduleResponse(item, response, data) {\n const isError = response !== \"success\";\n queue = queue.filter((queued) => queued !== item);\n switch (status) {\n case \"pending\":\n break;\n case \"failed\":\n if (isError || !config.dataAfterTimeout) {\n return;\n }\n break;\n default:\n return;\n }\n if (response === \"abort\") {\n lastError = data;\n failQuery();\n return;\n }\n if (isError) {\n lastError = data;\n if (!queue.length) {\n if (!resources.length) {\n failQuery();\n } else {\n execNext();\n }\n }\n return;\n }\n resetTimer();\n clearQueue();\n if (!config.random) {\n const index = config.resources.indexOf(item.resource);\n if (index !== -1 && index !== config.index) {\n config.index = index;\n }\n }\n status = \"completed\";\n doneCallbacks.forEach((callback) => {\n callback(data);\n });\n }\n function execNext() {\n if (status !== \"pending\") {\n return;\n }\n resetTimer();\n const resource = resources.shift();\n if (resource === void 0) {\n if (queue.length) {\n timer = setTimeout(() => {\n resetTimer();\n if (status === \"pending\") {\n clearQueue();\n failQuery();\n }\n }, config.timeout);\n return;\n }\n failQuery();\n return;\n }\n const item = {\n status: \"pending\",\n resource,\n callback: (status2, data) => {\n moduleResponse(item, status2, data);\n }\n };\n queue.push(item);\n queriesSent++;\n timer = setTimeout(execNext, config.rotate);\n query(resource, payload, item.callback);\n }\n setTimeout(execNext);\n return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n const config = {\n ...defaultConfig,\n ...cfg\n };\n let queries = [];\n function cleanup() {\n queries = queries.filter((item) => item().status === \"pending\");\n }\n function query(payload, queryCallback, doneCallback) {\n const query2 = sendQuery(\n config,\n payload,\n queryCallback,\n (data, error) => {\n cleanup();\n if (doneCallback) {\n doneCallback(data, error);\n }\n }\n );\n queries.push(query2);\n return query2;\n }\n function find(callback) {\n return queries.find((value) => {\n return callback(value);\n }) || null;\n }\n const instance = {\n query,\n find,\n setIndex: (index) => {\n config.index = index;\n },\n getIndex: () => config.index,\n cleanup\n };\n return instance;\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n if (!redundancyCache[provider]) {\n const config = getAPIConfig(provider);\n if (!config) {\n return;\n }\n const redundancy = initRedundancy(config);\n const cachedReundancy = {\n config,\n redundancy\n };\n redundancyCache[provider] = cachedReundancy;\n }\n return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n let redundancy;\n let send;\n if (typeof target === \"string\") {\n const api = getAPIModule(target);\n if (!api) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n send = api.send;\n const cached = getRedundancyCache(target);\n if (cached) {\n redundancy = cached.redundancy;\n }\n } else {\n const config = createAPIConfig(target);\n if (config) {\n redundancy = initRedundancy(config);\n const moduleKey = target.resources ? target.resources[0] : \"\";\n const api = getAPIModule(moduleKey);\n if (api) {\n send = api.send;\n }\n }\n }\n if (!redundancy || !send) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n return redundancy.query(query, send, callback)().abort;\n}\n\nconst browserCacheVersion = \"iconify2\";\nconst browserCachePrefix = \"iconify\";\nconst browserCacheCountKey = browserCachePrefix + \"-count\";\nconst browserCacheVersionKey = browserCachePrefix + \"-version\";\nconst browserStorageHour = 36e5;\nconst browserStorageCacheExpiration = 168;\n\nfunction getStoredItem(func, key) {\n try {\n return func.getItem(key);\n } catch (err) {\n }\n}\nfunction setStoredItem(func, key, value) {\n try {\n func.setItem(key, value);\n return true;\n } catch (err) {\n }\n}\nfunction removeStoredItem(func, key) {\n try {\n func.removeItem(key);\n } catch (err) {\n }\n}\n\nfunction setBrowserStorageItemsCount(storage, value) {\n return setStoredItem(storage, browserCacheCountKey, value.toString());\n}\nfunction getBrowserStorageItemsCount(storage) {\n return parseInt(getStoredItem(storage, browserCacheCountKey)) || 0;\n}\n\nconst browserStorageConfig = {\n local: true,\n session: true\n};\nconst browserStorageEmptyItems = {\n local: /* @__PURE__ */ new Set(),\n session: /* @__PURE__ */ new Set()\n};\nlet browserStorageStatus = false;\nfunction setBrowserStorageStatus(status) {\n browserStorageStatus = status;\n}\n\nlet _window = typeof window === \"undefined\" ? {} : window;\nfunction getBrowserStorage(key) {\n const attr = key + \"Storage\";\n try {\n if (_window && _window[attr] && typeof _window[attr].length === \"number\") {\n return _window[attr];\n }\n } catch (err) {\n }\n browserStorageConfig[key] = false;\n}\n\nfunction iterateBrowserStorage(key, callback) {\n const func = getBrowserStorage(key);\n if (!func) {\n return;\n }\n const version = getStoredItem(func, browserCacheVersionKey);\n if (version !== browserCacheVersion) {\n if (version) {\n const total2 = getBrowserStorageItemsCount(func);\n for (let i = 0; i < total2; i++) {\n removeStoredItem(func, browserCachePrefix + i.toString());\n }\n }\n setStoredItem(func, browserCacheVersionKey, browserCacheVersion);\n setBrowserStorageItemsCount(func, 0);\n return;\n }\n const minTime = Math.floor(Date.now() / browserStorageHour) - browserStorageCacheExpiration;\n const parseItem = (index) => {\n const name = browserCachePrefix + index.toString();\n const item = getStoredItem(func, name);\n if (typeof item !== \"string\") {\n return;\n }\n try {\n const data = JSON.parse(item);\n if (typeof data === \"object\" && typeof data.cached === \"number\" && data.cached > minTime && typeof data.provider === \"string\" && typeof data.data === \"object\" && typeof data.data.prefix === \"string\" && callback(data, index)) {\n return true;\n }\n } catch (err) {\n }\n removeStoredItem(func, name);\n };\n let total = getBrowserStorageItemsCount(func);\n for (let i = total - 1; i >= 0; i--) {\n if (!parseItem(i)) {\n if (i === total - 1) {\n total--;\n setBrowserStorageItemsCount(func, total);\n } else {\n browserStorageEmptyItems[key].add(i);\n }\n }\n }\n}\n\nfunction initBrowserStorage() {\n if (browserStorageStatus) {\n return;\n }\n setBrowserStorageStatus(true);\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n const provider = item.provider;\n const prefix = iconSet.prefix;\n const storage = getStorage(\n provider,\n prefix\n );\n if (!addIconSet(storage, iconSet).length) {\n return false;\n }\n const lastModified = iconSet.lastModified || -1;\n storage.lastModifiedCached = storage.lastModifiedCached ? Math.min(storage.lastModifiedCached, lastModified) : lastModified;\n return true;\n });\n }\n}\n\nfunction updateLastModified(storage, lastModified) {\n const lastValue = storage.lastModifiedCached;\n if (lastValue && lastValue >= lastModified) {\n return lastValue === lastModified;\n }\n storage.lastModifiedCached = lastModified;\n if (lastValue) {\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n return item.provider !== storage.provider || iconSet.prefix !== storage.prefix || iconSet.lastModified === lastModified;\n });\n }\n }\n return true;\n}\nfunction storeInBrowserStorage(storage, data) {\n if (!browserStorageStatus) {\n initBrowserStorage();\n }\n function store(key) {\n let func;\n if (!browserStorageConfig[key] || !(func = getBrowserStorage(key))) {\n return;\n }\n const set = browserStorageEmptyItems[key];\n let index;\n if (set.size) {\n set.delete(index = Array.from(set).shift());\n } else {\n index = getBrowserStorageItemsCount(func);\n if (!setBrowserStorageItemsCount(func, index + 1)) {\n return;\n }\n }\n const item = {\n cached: Math.floor(Date.now() / browserStorageHour),\n provider: storage.provider,\n data\n };\n return setStoredItem(\n func,\n browserCachePrefix + index.toString(),\n JSON.stringify(item)\n );\n }\n if (data.lastModified && !updateLastModified(storage, data.lastModified)) {\n return;\n }\n if (!Object.keys(data.icons).length) {\n return;\n }\n if (data.not_found) {\n data = Object.assign({}, data);\n delete data.not_found;\n }\n if (!store(\"local\")) {\n store(\"session\");\n }\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n if (!storage.iconsLoaderFlag) {\n storage.iconsLoaderFlag = true;\n setTimeout(() => {\n storage.iconsLoaderFlag = false;\n updateCallbacks(storage);\n });\n }\n}\nfunction loadNewIcons(storage, icons) {\n if (!storage.iconsToLoad) {\n storage.iconsToLoad = icons;\n } else {\n storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n }\n if (!storage.iconsQueueFlag) {\n storage.iconsQueueFlag = true;\n setTimeout(() => {\n storage.iconsQueueFlag = false;\n const { provider, prefix } = storage;\n const icons2 = storage.iconsToLoad;\n delete storage.iconsToLoad;\n let api;\n if (!icons2 || !(api = getAPIModule(provider))) {\n return;\n }\n const params = api.prepare(provider, prefix, icons2);\n params.forEach((item) => {\n sendAPIQuery(provider, item, (data) => {\n if (typeof data !== \"object\") {\n item.icons.forEach((name) => {\n storage.missing.add(name);\n });\n } else {\n try {\n const parsed = addIconSet(\n storage,\n data\n );\n if (!parsed.length) {\n return;\n }\n const pending = storage.pendingIcons;\n if (pending) {\n parsed.forEach((name) => {\n pending.delete(name);\n });\n }\n storeInBrowserStorage(storage, data);\n } catch (err) {\n console.error(err);\n }\n }\n loadedNewIcons(storage);\n });\n });\n });\n }\n}\nconst loadIcons = (icons, callback) => {\n const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n const sortedIcons = sortIcons(cleanedIcons);\n if (!sortedIcons.pending.length) {\n let callCallback = true;\n if (callback) {\n setTimeout(() => {\n if (callCallback) {\n callback(\n sortedIcons.loaded,\n sortedIcons.missing,\n sortedIcons.pending,\n emptyCallback\n );\n }\n });\n }\n return () => {\n callCallback = false;\n };\n }\n const newIcons = /* @__PURE__ */ Object.create(null);\n const sources = [];\n let lastProvider, lastPrefix;\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix } = icon;\n if (prefix === lastPrefix && provider === lastProvider) {\n return;\n }\n lastProvider = provider;\n lastPrefix = prefix;\n sources.push(getStorage(provider, prefix));\n const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n if (!providerNewIcons[prefix]) {\n providerNewIcons[prefix] = [];\n }\n });\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n if (!pendingQueue.has(name)) {\n pendingQueue.add(name);\n newIcons[provider][prefix].push(name);\n }\n });\n sources.forEach((storage) => {\n const { provider, prefix } = storage;\n if (newIcons[provider][prefix].length) {\n loadNewIcons(storage, newIcons[provider][prefix]);\n }\n });\n return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = (icon) => {\n return new Promise((fulfill, reject) => {\n const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n if (!iconObj) {\n reject(icon);\n return;\n }\n loadIcons([iconObj || icon], (loaded) => {\n if (loaded.length && iconObj) {\n const data = getIconData(iconObj);\n if (data) {\n fulfill({\n ...defaultIconProps,\n ...data\n });\n return;\n }\n }\n reject(icon);\n });\n });\n};\n\nfunction toggleBrowserCache(storage, value) {\n switch (storage) {\n case \"local\":\n case \"session\":\n browserStorageConfig[storage] = value;\n break;\n case \"all\":\n for (const key in browserStorageConfig) {\n browserStorageConfig[key] = value;\n }\n break;\n }\n}\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Render icon\n */\nconst render = (createElement, \n// context.props\nprops, \n// context.data\ncontextData, \n// Icon must be validated before calling this function\nicon) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Style in Vue 2 components is always passed to rendered component, so no point in parsing it\n const style = {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default:\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n // Add icon stuff\n for (let key in item.attributes) {\n componentProps[key] = item.attributes[key];\n }\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Generate node data\n const data = {\n attrs: componentProps,\n domProps: {\n innerHTML: replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyVue'),\n },\n };\n if (Object.keys(style).length > 0) {\n data.style = style;\n }\n if (contextData) {\n ['on', 'ref'].forEach((attr) => {\n if (contextData[attr] !== void 0) {\n data[attr] = contextData[attr];\n }\n });\n ['staticClass', 'class'].forEach((attr) => {\n if (contextData[attr] !== void 0) {\n data.class = contextData[attr];\n }\n });\n }\n // Render icon\n return createElement('svg', data);\n};\n\n/**\n * Enable cache\n */\nfunction enableCache(storage) {\n toggleBrowserCache(storage, true);\n}\n/**\n * Disable cache\n */\nfunction disableCache(storage) {\n toggleBrowserCache(storage, false);\n}\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // Set cache and load existing cache\n initBrowserStorage();\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\n/**\n * Empty icon data, rendered when icon is not available\n */\nconst emptyIcon = {\n body: '',\n};\nconst Icon = Vue.extend({\n // Do not inherit other attributes: it is handled by render()\n // In Vue 2 style is still passed!\n inheritAttrs: false,\n // Set initial data\n data() {\n return {\n // Mounted status\n iconMounted: false,\n };\n },\n beforeMount() {\n // Current icon name\n this._name = '';\n // Loading\n this._loadingIcon = null;\n // Mark as mounted\n this.iconMounted = true;\n },\n beforeDestroy() {\n this.abortLoading();\n },\n methods: {\n abortLoading() {\n if (this._loadingIcon) {\n this._loadingIcon.abort();\n this._loadingIcon = null;\n }\n },\n // Get data for icon to render or null\n getIcon(icon, onload) {\n // Icon is an object\n if (typeof icon === 'object' &&\n icon !== null &&\n typeof icon.body === 'string') {\n // Stop loading\n this._name = '';\n this.abortLoading();\n return {\n data: icon,\n };\n }\n // Invalid icon?\n let iconName;\n if (typeof icon !== 'string' ||\n (iconName = stringToIcon(icon, false, true)) === null) {\n this.abortLoading();\n return null;\n }\n // Load icon\n const data = getIconData(iconName);\n if (!data) {\n // Icon data is not available\n if (!this._loadingIcon || this._loadingIcon.name !== icon) {\n // New icon to load\n this.abortLoading();\n this._name = '';\n if (data !== null) {\n // Icon was not loaded\n this._loadingIcon = {\n name: icon,\n abort: loadIcons([iconName], () => {\n this.$forceUpdate();\n }),\n };\n }\n }\n return null;\n }\n // Icon data is available\n this.abortLoading();\n if (this._name !== icon) {\n this._name = icon;\n if (onload) {\n onload(icon);\n }\n }\n // Add classes\n const classes = ['iconify'];\n if (iconName.prefix !== '') {\n classes.push('iconify--' + iconName.prefix);\n }\n if (iconName.provider !== '') {\n classes.push('iconify--' + iconName.provider);\n }\n return { data, classes };\n },\n },\n // Render icon\n render(createElement) {\n const props = Object.assign({}, this.$attrs);\n let context = this.$data;\n // Get icon data\n const icon = this.iconMounted\n ? this.getIcon(props.icon, props.onLoad)\n : null;\n // Validate icon object\n if (!icon) {\n return render(createElement, props, context, emptyIcon);\n }\n // Add classes\n if (icon.classes) {\n context = {\n ...context,\n class: (typeof context['class'] === 'string'\n ? context['class'] + ' '\n : '') + icon.classes.join(' '),\n };\n }\n // Render icon\n return render(createElement, props, context, icon.data);\n },\n});\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, disableCache, enableCache, getIcon, iconExists, listIcons, loadIcon, loadIcons, replaceIDs };\n","<template>\n <span\n v-if=\"isSvg\"\n :class=\"['svp-icon', 'svp-icon--svg', $attrs.class]\"\n :style=\"wrapStyle\"\n v-html=\"icon\"\n />\n <span v-else :class=\"['svp-icon', $attrs.class]\" :style=\"wrapStyle\">\n <Icon :icon=\"icon\" :width=\"sizePx\" :height=\"sizePx\" />\n </span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed } from 'vue-demi'\nimport { Icon } from '@iconify/vue'\nimport { isIconifyName } from '../constants/icons'\n\nexport default defineComponent({\n name: 'SvpIcon',\n components: { Icon },\n inheritAttrs: false,\n props: {\n icon: { type: String, required: true },\n size: { type: [String, Number], default: 16 },\n },\n setup(props) {\n const isSvg = computed(() => !isIconifyName(props.icon))\n const sizePx = computed(() => {\n const raw = props.size\n if (typeof raw === 'number') return raw\n const n = parseFloat(raw)\n return Number.isFinite(n) ? n : 16\n })\n const wrapStyle = computed(() => ({\n width: `${sizePx.value}px`,\n height: `${sizePx.value}px`,\n }))\n return { isSvg, sizePx, wrapStyle }\n },\n})\n</script>\n\n<style scoped lang=\"scss\">\n.svp-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n line-height: 0;\n color: inherit;\n vertical-align: middle;\n\n :deep(svg) {\n display: block;\n }\n}\n\n.svp-icon--svg :deep(svg) {\n width: 100%;\n height: 100%;\n}\n</style>\n","<template>\n <header class=\"svp-header\">\n <div class=\"svp-header__aside svp-header__aside--left\">\n <slot name=\"left\">\n <span v-if=\"logoHtml\" class=\"svp-header__logo\" v-html=\"logoHtml\" />\n <span v-if=\"title\" class=\"svp-header__title\">{{ title }}</span>\n </slot>\n </div>\n\n <div class=\"svp-header__center\">\n <slot name=\"center\">\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.editTemplate')\" @click=\"$emit('edit-template')\">\n <SvpIcon :icon=\"UI_ICONS.editTemplate\" :size=\"22\" />\n <span>{{ t('designer.editTemplate') }}</span>\n </button>\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.editPrintData')\" @click=\"$emit('edit-print-data')\">\n <SvpIcon :icon=\"UI_ICONS.editPrintData\" :size=\"22\" />\n <span>{{ t('designer.editPrintData') }}</span>\n </button>\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.exportFile')\" @click=\"$emit('export-file')\">\n <SvpIcon :icon=\"UI_ICONS.exportFile\" :size=\"22\" />\n <span>{{ t('designer.exportFile') }}</span>\n </button>\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.importFile')\" @click=\"$emit('import-file')\">\n <SvpIcon :icon=\"UI_ICONS.importFile\" :size=\"22\" />\n <span>{{ t('designer.importFile') }}</span>\n </button>\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.save')\" @click=\"$emit('save')\">\n <SvpIcon :icon=\"UI_ICONS.save\" :size=\"22\" />\n <span>{{ t('designer.save') }}</span>\n </button>\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.preview')\" @click=\"$emit('preview')\">\n <SvpIcon :icon=\"UI_ICONS.preview\" :size=\"22\" />\n <span>{{ t('designer.preview') }}</span>\n </button>\n\n <template v-if=\"showElementBar\">\n <span class=\"svp-header__divider\" aria-hidden=\"true\" />\n <button\n v-for=\"item in resolvedEleList\"\n :key=\"item.key\"\n type=\"button\"\n class=\"svp-header__ele\"\n :title=\"item.label\"\n @click=\"onElementClick(item, $event)\"\n >\n <SvpIcon v-if=\"item.icon\" :icon=\"item.icon\" :size=\"18\" />\n <span>{{ item.label }}</span>\n </button>\n </template>\n </slot>\n </div>\n\n <div class=\"svp-header__aside svp-header__aside--right\">\n <slot name=\"right\" />\n </div>\n </header>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, type PropType } from 'vue-demi'\nimport SvpIcon from './SvpIcon.vue'\nimport { useDesigner } from '../composables/useDesigner'\nimport { useI18n } from '../i18n'\nimport { UI_ICONS } from '../constants/icons'\nimport type { HeaderEle } from '../types'\n\nexport default defineComponent({\n name: 'SvpHeader',\n components: { SvpIcon },\n props: {\n title: { type: String, default: '' },\n logoHtml: { type: String, default: '' },\n headerNewEle: { type: Boolean, default: false },\n headerEleList: { type: Array as PropType<HeaderEle[]>, default: () => [] },\n },\n emits: ['save', 'preview', 'edit-template', 'edit-print-data', 'export-file', 'import-file'],\n setup(props) {\n const { t } = useI18n()\n const utils = useDesigner()\n\n const showElementBar = computed(() => props.headerNewEle && props.headerEleList.length > 0)\n const resolvedEleList = computed(() => props.headerEleList)\n\n function onElementClick(item: HeaderEle, event: MouseEvent) {\n if (typeof item.onClick === 'function') {\n item.onClick(event)\n return\n }\n if (item.tid) utils.addElementByTid(item.tid)\n }\n\n return {\n t,\n UI_ICONS,\n showElementBar,\n resolvedEleList,\n onElementClick,\n }\n },\n})\n</script>\n","import { inject } from 'vue-demi'\nimport {\n DESIGNER_UI_INJECTION_KEY,\n type DesignerUiContext,\n} from '../core/designer-options'\n\nexport function useDesignerUi(): DesignerUiContext | null {\n return inject(DESIGNER_UI_INJECTION_KEY, null)\n}\n","<template>\n <div class=\"svp-toolbar\" role=\"toolbar\" @mousedown=\"onToolbarMouseDown\">\n <template v-for=\"tool in visibleTools\" :key=\"tool.key\">\n <span v-if=\"tool.separator && tool.key === 'spacer'\" class=\"svp-toolbar__spacer\" />\n <span v-else-if=\"tool.separator\" class=\"svp-toolbar__sep\" />\n <span v-else-if=\"tool.display === 'zoomPercent'\" class=\"svp-toolbar__zoom\">\n {{ zoomPercentText }}\n </span>\n <select\n v-else-if=\"tool.display === 'langSelect'\"\n class=\"svp-toolbar__lang-select\"\n :value=\"lang\"\n :title=\"t('locale.switch')\"\n @change=\"onLangChange\"\n >\n <option v-for=\"code in localeList\" :key=\"code\" :value=\"code\">\n {{ localeLabel(code) }}\n </option>\n </select>\n <button\n v-else-if=\"tool.display === 'lockToggle'\"\n type=\"button\"\n :class=\"['svp-toolbar__btn', { 'is-disabled': isLockToggleDisabled(), 'is-active': isSelectionLocked() }]\"\n :title=\"lockToggleTooltip()\"\n :disabled=\"isLockToggleDisabled()\"\n @click=\"onLockToggleClick\"\n >\n <SvpIcon :icon=\"lockToggleIcon()\" :size=\"16\" />\n </button>\n <button\n v-else\n type=\"button\"\n :class=\"['svp-toolbar__btn', { 'is-disabled': isDisabled(tool), 'is-active': isActive(tool) }]\"\n :title=\"tooltipFor(tool)\"\n :disabled=\"isDisabled(tool)\"\n @click=\"onClick(tool)\"\n >\n <SvpIcon :icon=\"tool.icon\" :size=\"16\" />\n </button>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, type PropType } from 'vue-demi'\nimport SvpIcon from './SvpIcon.vue'\nimport { useDesigner } from '../composables/useDesigner'\nimport { useDesignerUi } from '../composables/useDesignerUi'\nimport { useI18n, setLocale, getLocaleList } from '../i18n'\nimport { designerStore, toggleAllPanels, togglePanel } from '../core/stores'\nimport { isToolGroupVisible } from '../core/designer-options'\nimport { DEFAULT_TOOLBAR, ZOOM_MAX, ZOOM_MIN } from '../constants'\nimport { TOOL_ICONS } from '../constants/icons'\nimport type { Lang, ToolDescriptor } from '../types'\n\nexport default defineComponent({\n name: 'SvpToolbar',\n components: { SvpIcon },\n props: {\n tools: { type: Array as PropType<ToolDescriptor[]>, default: () => DEFAULT_TOOLBAR },\n hiddenKeys: { type: Array as PropType<string[]>, default: () => [] },\n mobileOnlyKeys: { type: Array as PropType<string[]>, default: () => [] },\n },\n setup(props) {\n const utils = useDesigner()\n const designerUi = useDesignerUi()\n const { t, lang } = useI18n()\n const localeList = getLocaleList()\n\n const visibleTools = computed(() =>\n props.tools.filter((tool) => {\n if (props.hiddenKeys.includes(tool.key)) return false\n if (tool.mobileOnly && !designerStore.isMobile) return false\n if (tool.desktopOnly && designerStore.isMobile) return false\n if (props.mobileOnlyKeys.includes(tool.key) && !designerStore.isMobile) return false\n if (!isToolGroupVisible(tool.key, designerUi?.styleOption.value)) return false\n return true\n }),\n )\n\n const zoomPercentText = computed(() => `${Math.round(designerStore.zoom * 100)}%`)\n\n function localeLabel(code: string) {\n if (code === 'zh-CN') return t('locale.zhCN')\n if (code === 'en-US') return t('locale.enUS')\n return code\n }\n\n function onLangChange(e: Event) {\n const next = (e.target as HTMLSelectElement).value as Lang\n setLocale(next)\n designerStore.lang = next\n }\n\n /** Keep canvas selection when interacting with toolbar buttons. */\n function onToolbarMouseDown(e: MouseEvent) {\n if ((e.target as HTMLElement | null)?.closest('button')) {\n e.preventDefault()\n }\n }\n\n function tooltipFor(tool: ToolDescriptor): string {\n if (tool.label) return tool.label\n if (tool.i18n) return t(tool.i18n)\n return tool.key\n }\n\n function isDisabled(tool: ToolDescriptor): boolean {\n void designerStore.history.index\n void designerStore.history.canUndo\n void designerStore.history.canRedo\n void designerStore.zoom\n if (tool.key === 'undo') return !designerStore.history.canUndo\n if (tool.key === 'redo') return !designerStore.history.canRedo\n if (tool.key === 'zoomOut') return designerStore.zoom <= ZOOM_MIN + 0.001\n if (tool.key === 'zoomIn') return designerStore.zoom >= ZOOM_MAX - 0.001\n if (tool.needSelection && !utils.hasSelection()) return true\n return false\n }\n\n function isActive(tool: ToolDescriptor): boolean {\n void designerStore.uiPulse\n if (tool.panelKey) return !!designerStore.panels[tool.panelKey]\n if (tool.key === 'togglePanels') {\n return Object.values(designerStore.panels).every(Boolean)\n }\n return false\n }\n\n function isLockToggleDisabled(): boolean {\n return !utils.hasSelection()\n }\n\n function isSelectionLocked(): boolean {\n void designerStore.uiPulse\n return utils.isSelectionLocked()\n }\n\n function lockToggleIcon(): string {\n return isSelectionLocked() ? TOOL_ICONS.lock : TOOL_ICONS.unlock\n }\n\n function lockToggleTooltip(): string {\n return isSelectionLocked() ? t('tool.unlock') : t('tool.lock')\n }\n\n function onLockToggleClick() {\n if (isLockToggleDisabled()) return\n utils.setLock(!isSelectionLocked())\n }\n\n /** Map every toolbar key to the corresponding DesignerUtils action. */\n function onClick(tool: ToolDescriptor) {\n if (isDisabled(tool)) return\n if (tool.panelKey) {\n togglePanel(tool.panelKey)\n return\n }\n if (typeof tool.onClick === 'function') {\n tool.onClick(utils, new MouseEvent('click'))\n return\n }\n switch (tool.key) {\n case 'undo': return utils.history.undo()\n case 'redo': return utils.history.redo()\n case 'alignLeft': return utils.align('left')\n case 'alignCenter': return utils.align('center')\n case 'alignRight': return utils.align('right')\n case 'alignTop': return utils.align('top')\n case 'alignMiddle': return utils.align('middle')\n case 'alignBottom': return utils.align('bottom')\n case 'moveTop': return utils.moveZ('top')\n case 'moveUp': return utils.moveZ('up')\n case 'moveDown': return utils.moveZ('down')\n case 'moveBottom': return utils.moveZ('bottom')\n case 'flipH': return utils.flip('h')\n case 'flipV': return utils.flip('v')\n case 'fontInc': return utils.changeFont(1)\n case 'fontDec': return utils.changeFont(-1)\n case 'fontBold': return utils.setBold(true)\n case 'fontUnbold': return utils.setBold(false)\n case 'clone': return utils.clone()\n case 'copy': return utils.copy()\n case 'cut': return utils.cut()\n case 'paste': return utils.paste()\n case 'delete': return utils.delete()\n case 'zoomOut': return utils.zoomOut()\n case 'zoomIn': return utils.zoomIn()\n case 'rotate': return utils.rotate(90)\n case 'clear': return utils.clearPanel()\n case 'togglePanels': return toggleAllPanels()\n default: return\n }\n }\n\n return {\n t,\n lang,\n localeList,\n utils,\n visibleTools,\n zoomPercentText,\n localeLabel,\n onLangChange,\n onToolbarMouseDown,\n tooltipFor,\n isDisabled,\n isActive,\n onClick,\n TOOL_ICONS,\n isLockToggleDisabled,\n isSelectionLocked,\n lockToggleIcon,\n lockToggleTooltip,\n onLockToggleClick,\n }\n },\n})\n</script>\n","/** Normalize hiprint `getHtml()` output (jQuery / array-like) to an HTML string. */\nexport function resolvePreviewHtml(value: unknown): string {\n if (value == null || value === false) return ''\n if (typeof value === 'string') return value\n\n const any = value as Record<string | number, unknown> & {\n html?: () => string\n length?: number\n target?: unknown\n }\n\n if (typeof any.html === 'function') {\n try {\n const html = any.html()\n if (typeof html === 'string') return html\n } catch {\n /* fall through */\n }\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => resolvePreviewHtml(item)).join('')\n }\n\n if (typeof any.length === 'number' && any.length > 0 && any[0] != null) {\n return resolvePreviewHtml(any[0])\n }\n\n if (any.target != null) {\n return resolvePreviewHtml(any.target)\n }\n\n return ''\n}\n","<template>\n <div v-if=\"visible\" class=\"svp-dialog-mask\" @click.self=\"close\">\n <div class=\"svp-dialog svp-preview\">\n <div class=\"svp-dialog__header\">\n <span class=\"svp-dialog__title\">{{ t('designer.preview') }}</span>\n <button type=\"button\" class=\"svp-dialog__close\" aria-label=\"close\" @click=\"close\">×</button>\n </div>\n\n <div class=\"svp-dialog__body svp-preview__body\">\n <div v-if=\"html\" class=\"svp-preview__content\" v-html=\"html\" />\n <div v-else class=\"svp-preview__empty\">\n {{ t('panel.empty') }}\n </div>\n </div>\n\n <div class=\"svp-dialog__footer svp-preview__footer\">\n <button v-if=\"canExportPdf\" type=\"button\" class=\"svp-btn\" @click=\"onPdf\">\n {{ t('designer.pdf') }}\n </button>\n <button v-if=\"canExportImage\" type=\"button\" class=\"svp-btn\" @click=\"onImage\">\n {{ t('designer.image') }}\n </button>\n <button v-if=\"canPrint\" type=\"button\" class=\"svp-btn is-primary\" @click=\"onPrint\">\n {{ t('designer.print') }}\n </button>\n <button type=\"button\" class=\"svp-btn\" @click=\"close\">\n {{ t('designer.cancel') }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, reactive, computed, type PropType } from 'vue-demi'\nimport { useDesigner } from '../composables/useDesigner'\nimport { useI18n } from '../i18n'\nimport { resolvePreviewHtml } from '../core/preview-html'\nimport type { PreviewOptions } from '../types'\n\nexport default defineComponent({\n name: 'SvpPreview',\n props: {\n options: { type: Object as PropType<PreviewOptions>, default: () => ({}) },\n },\n setup(props, { expose }) {\n const { t } = useI18n()\n const utils = useDesigner()\n const visible = ref(false)\n const html = ref('')\n const opts = reactive<PreviewOptions>({ showPdf: true, showImg: true, showPrint2: true, ...props.options })\n\n const tpl = computed(() => (utils as any).printTemplate)\n\n const canExportPdf = computed(() => {\n if (opts.showPdf === false) return false\n return typeof tpl.value?.toPdf === 'function'\n })\n\n const canExportImage = computed(() => {\n if (opts.showImg === false) return false\n return typeof tpl.value?.toImage === 'function'\n })\n\n const canPrint = computed(() => {\n if (opts.showPrint2 === false) return false\n return typeof tpl.value?.print === 'function'\n })\n\n function open(content?: unknown) {\n const raw = content !== undefined ? content : tpl.value?.getHtml?.(utils.printData)\n html.value = resolvePreviewHtml(raw)\n visible.value = true\n utils.plugins.run('onPreview', html.value, utils).catch(() => { /* ignore */ })\n }\n\n function close() { visible.value = false }\n\n async function onPrint() {\n await utils.plugins.run('beforePrint', tpl.value, utils)\n try { tpl.value?.print?.(utils.printData) } catch (e) { console.error(e) }\n }\n\n async function onPdf() {\n const results = await utils.plugins.run('beforePrint2', tpl.value, utils, 'pdf')\n if (results.some((r) => r === false)) return\n try {\n if (typeof tpl.value?.toPdf === 'function') tpl.value.toPdf(utils.printData)\n } catch (e) { console.error(e) }\n }\n\n async function onImage() {\n const results = await utils.plugins.run('beforePrint2', tpl.value, utils, 'image')\n if (results.some((r) => r === false)) return\n try {\n if (typeof tpl.value?.toImage === 'function') tpl.value.toImage(utils.printData)\n } catch (e) { console.error(e) }\n }\n\n expose({ open, close })\n\n return {\n t,\n visible,\n html,\n canExportPdf,\n canExportImage,\n canPrint,\n close,\n onPrint,\n onPdf,\n onImage,\n }\n },\n})\n</script>\n","<template>\n <div v-if=\"visible\" class=\"svp-dialog-mask\" @click.self=\"close(null)\">\n <div class=\"svp-dialog svp-json-editor\">\n <div class=\"svp-dialog__header\">\n <span class=\"svp-dialog__title\">{{ title }}</span>\n <button type=\"button\" class=\"svp-dialog__close\" aria-label=\"close\" @click=\"close(null)\">×</button>\n </div>\n\n <div class=\"svp-dialog__body svp-json-editor__body\">\n <div class=\"svp-json-editor__editor\">\n <pre ref=\"linesRef\" class=\"svp-json-editor__lines\" aria-hidden=\"true\">{{ lineNumbers }}</pre>\n <textarea\n ref=\"textareaRef\"\n v-model=\"text\"\n class=\"svp-json-editor__textarea\"\n spellcheck=\"false\"\n @input=\"onInput\"\n @scroll=\"syncScroll\"\n />\n </div>\n <div v-if=\"error\" class=\"svp-json-editor__error\">{{ error }}</div>\n </div>\n\n <div class=\"svp-dialog__footer svp-json-editor__footer\">\n <div v-if=\"showToolbar\" class=\"svp-json-editor__footer-left\">\n <button type=\"button\" class=\"svp-btn is-danger\" @click=\"doClear\">{{ clearTextLabel }}</button>\n <button type=\"button\" class=\"svp-btn is-info\" @click=\"doCopy\">{{ copyTextLabel }}</button>\n </div>\n <div class=\"svp-json-editor__footer-right\">\n <button type=\"button\" class=\"svp-btn is-primary\" @click=\"apply\">{{ confirmText }}</button>\n <button type=\"button\" class=\"svp-btn\" @click=\"close(null)\">{{ cancelText }}</button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, nextTick } from 'vue-demi'\nimport { EMPTY_TEMPLATE_JSON } from '../constants'\nimport type { JsonEditorModalOptions } from '../core/json-editor-modal'\n\nexport interface JsonEditorOpenOptions extends JsonEditorModalOptions {\n variant?: 'template' | 'default'\n}\n\nexport default defineComponent({\n name: 'SvpJsonEditorModal',\n setup(_, { expose }) {\n const visible = ref(false)\n const title = ref('')\n const text = ref('{}')\n const error = ref('')\n const confirmText = ref('OK')\n const cancelText = ref('Cancel')\n const clearTextLabel = ref('Clear')\n const copyTextLabel = ref('Copy')\n const invalidText = ref('Invalid JSON')\n const showToolbar = ref(false)\n const variant = ref<'template' | 'default'>('default')\n\n const linesRef = ref<HTMLElement | null>(null)\n const textareaRef = ref<HTMLTextAreaElement | null>(null)\n\n let resolver: ((value: unknown | null) => void) | null = null\n\n const lineNumbers = computed(() => {\n const count = Math.max(1, text.value.split('\\n').length)\n return Array.from({ length: count }, (_, i) => String(i + 1)).join('\\n')\n })\n\n function safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value ?? {}, null, 2)\n } catch {\n try {\n const seen = new WeakSet<object>()\n return JSON.stringify(value, (_key, val) => {\n if (typeof val === 'object' && val !== null) {\n if (seen.has(val)) return undefined\n seen.add(val)\n }\n return val\n }, 2)\n } catch {\n return '{}'\n }\n }\n }\n\n function close(result: unknown | null) {\n visible.value = false\n error.value = ''\n const done = resolver\n resolver = null\n done?.(result)\n }\n\n function open(options: JsonEditorOpenOptions): Promise<unknown | null> {\n if (resolver) {\n const prev = resolver\n resolver = null\n prev(null)\n }\n return new Promise((resolve) => {\n resolver = resolve\n title.value = options.title\n text.value = safeStringify(options.value)\n confirmText.value = options.confirmText ?? 'OK'\n cancelText.value = options.cancelText ?? 'Cancel'\n clearTextLabel.value = options.clearText ?? 'Clear'\n copyTextLabel.value = options.copyText ?? 'Copy'\n invalidText.value = options.invalidText ?? 'Invalid JSON'\n showToolbar.value = options.variant === 'template'\n variant.value = options.variant === 'template' ? 'template' : 'default'\n error.value = ''\n visible.value = true\n nextTick(() => {\n const ta = textareaRef.value\n const lines = linesRef.value\n if (ta) {\n ta.scrollTop = 0\n ta.setSelectionRange(0, 0)\n ta.focus({ preventScroll: true })\n }\n if (lines) lines.scrollTop = 0\n })\n })\n }\n\n function onInput() {\n error.value = ''\n }\n\n function syncScroll() {\n const ta = textareaRef.value\n const lines = linesRef.value\n if (ta && lines) lines.scrollTop = ta.scrollTop\n }\n\n function doClear() {\n text.value = variant.value === 'template'\n ? JSON.stringify(EMPTY_TEMPLATE_JSON, null, 2)\n : '{}'\n error.value = ''\n textareaRef.value?.focus()\n }\n\n async function doCopy() {\n try {\n await navigator.clipboard.writeText(text.value)\n } catch {\n const helper = textareaRef.value\n if (!helper) return\n helper.focus()\n helper.select()\n try { document.execCommand('copy') } catch { /* ignore */ }\n }\n }\n\n function apply() {\n try {\n close(JSON.parse(text.value))\n } catch {\n error.value = invalidText.value\n }\n }\n\n expose({ open, close })\n\n return {\n visible,\n title,\n text,\n error,\n confirmText,\n cancelText,\n clearTextLabel,\n copyTextLabel,\n showToolbar,\n linesRef,\n textareaRef,\n lineNumbers,\n close,\n onInput,\n syncScroll,\n doClear,\n doCopy,\n apply,\n }\n },\n})\n</script>\n","<template>\n <div v-if=\"visible\" class=\"svp-dialog-mask\" @click.self=\"close(null)\">\n <div class=\"svp-dialog svp-print-data-editor\">\n <div class=\"svp-dialog__header\">\n <span class=\"svp-dialog__title\">{{ title }}</span>\n <button type=\"button\" class=\"svp-dialog__close\" aria-label=\"close\" @click=\"close(null)\">×</button>\n </div>\n\n <div class=\"svp-dialog__body svp-print-data-editor__body\">\n <div v-if=\"isEmpty\" class=\"svp-print-data-editor__empty\">{{ emptyHint }}</div>\n\n <template v-else>\n <section v-if=\"schema.basicFields.length\" class=\"svp-print-data-editor__section\">\n <div class=\"svp-print-data-editor__section-title\">{{ basicSectionTitle }}</div>\n <div class=\"svp-print-data-editor__basic-grid\">\n <label\n v-for=\"field in schema.basicFields\"\n :key=\"field.field\"\n class=\"svp-print-data-editor__field\"\n >\n <span class=\"svp-print-data-editor__field-label\">{{ field.label }}</span>\n <input\n v-model=\"basicValues[field.field]\"\n type=\"text\"\n class=\"svp-print-data-editor__input\"\n :placeholder=\"field.field\"\n />\n </label>\n </div>\n </section>\n\n <section\n v-for=\"table in schema.tables\"\n :key=\"table.field\"\n class=\"svp-print-data-editor__section\"\n >\n <div class=\"svp-print-data-editor__section-title\">\n {{ tableSectionTitle }}\n <span class=\"svp-print-data-editor__section-sub\">\n {{ table.label }}({{ tableFieldLabel }}: {{ table.field }})\n </span>\n </div>\n\n <div class=\"svp-print-data-editor__table-wrap\">\n <table class=\"svp-print-data-editor__table\">\n <thead>\n <tr>\n <th v-for=\"col in table.columns\" :key=\"col.field\">{{ col.label }}</th>\n <th class=\"svp-print-data-editor__actions-col\">{{ deleteRowText }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(row, rowIndex) in tableValues[table.field]\" :key=\"`${table.field}-${rowIndex}`\">\n <td v-for=\"col in table.columns\" :key=\"col.field\">\n <input\n v-model=\"row[col.field]\"\n type=\"text\"\n class=\"svp-print-data-editor__input\"\n :placeholder=\"col.field\"\n />\n </td>\n <td class=\"svp-print-data-editor__actions-col\">\n <button\n type=\"button\"\n class=\"svp-print-data-editor__row-delete\"\n :disabled=\"tableValues[table.field].length <= 1\"\n @click=\"removeTableRow(table.field, rowIndex)\"\n >\n <SvpIcon :icon=\"ICON_DELETE\" :size=\"14\" />\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <button type=\"button\" class=\"svp-btn svp-print-data-editor__add-row\" @click=\"addTableRow(table)\">\n {{ addRowText }}\n </button>\n </section>\n </template>\n </div>\n\n <div class=\"svp-dialog__footer svp-print-data-editor__footer\">\n <div class=\"svp-print-data-editor__footer-left\">\n <button type=\"button\" class=\"svp-btn is-danger\" @click=\"doClear\">{{ clearTextLabel }}</button>\n <button type=\"button\" class=\"svp-btn is-info\" @click=\"doCopy\">{{ copyTextLabel }}</button>\n </div>\n <div class=\"svp-print-data-editor__footer-right\">\n <button type=\"button\" class=\"svp-btn is-primary\" @click=\"apply\">{{ confirmText }}</button>\n <button type=\"button\" class=\"svp-btn\" @click=\"close(null)\">{{ cancelText }}</button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, reactive } from 'vue-demi'\nimport SvpIcon from './SvpIcon.vue'\nimport { ICON_DELETE } from '../constants/icons'\nimport {\n buildPrintDataFromForm,\n createEmptyTableRow,\n createPrintDataFormState,\n type TableFieldDef,\n type TemplateFieldSchema,\n} from '../core/template-fields'\nimport type { PrintDataEditorModalOptions } from '../core/print-data-editor-modal'\n\nexport default defineComponent({\n name: 'SvpPrintDataEditorModal',\n components: { SvpIcon },\n setup(_, { expose }) {\n const visible = ref(false)\n const title = ref('')\n const confirmText = ref('OK')\n const cancelText = ref('Cancel')\n const clearTextLabel = ref('Clear')\n const copyTextLabel = ref('Copy')\n const basicSectionTitle = ref('')\n const tableSectionTitle = ref('')\n const emptyHint = ref('')\n const addRowText = ref('')\n const deleteRowText = ref('')\n const tableFieldLabel = ref('')\n\n const schema = ref<TemplateFieldSchema>({ basicFields: [], tables: [] })\n const basicValues = reactive<Record<string, string>>({})\n const tableValues = reactive<Record<string, Record<string, string>[]>>({})\n let existingData: Record<string, unknown> = {}\n\n let resolver: ((value: Record<string, unknown> | null) => void) | null = null\n\n const isEmpty = computed(() => (\n schema.value.basicFields.length === 0 && schema.value.tables.length === 0\n ))\n\n function resetFormState(nextSchema: TemplateFieldSchema, value: Record<string, unknown>) {\n schema.value = nextSchema\n existingData = { ...value }\n\n Object.keys(basicValues).forEach((key) => { delete basicValues[key] })\n Object.keys(tableValues).forEach((key) => { delete tableValues[key] })\n\n const state = createPrintDataFormState(nextSchema, value)\n Object.assign(basicValues, state.basicValues)\n Object.assign(tableValues, state.tableValues)\n }\n\n function close(result: Record<string, unknown> | null) {\n visible.value = false\n const done = resolver\n resolver = null\n done?.(result)\n }\n\n function open(options: PrintDataEditorModalOptions): Promise<Record<string, unknown> | null> {\n if (resolver) {\n const prev = resolver\n resolver = null\n prev(null)\n }\n\n return new Promise((resolve) => {\n resolver = resolve\n title.value = options.title\n confirmText.value = options.confirmText ?? 'OK'\n cancelText.value = options.cancelText ?? 'Cancel'\n clearTextLabel.value = options.clearText ?? 'Clear'\n copyTextLabel.value = options.copyText ?? 'Copy'\n basicSectionTitle.value = options.basicSectionTitle ?? 'Basic Data'\n tableSectionTitle.value = options.tableSectionTitle ?? 'Table Data'\n emptyHint.value = options.emptyHint ?? 'No bindable fields found in template.'\n addRowText.value = options.addRowText ?? 'Add row'\n deleteRowText.value = options.deleteRowText ?? 'Delete'\n tableFieldLabel.value = options.tableFieldLabel ?? 'Field'\n resetFormState(options.schema, options.value ?? {})\n visible.value = true\n })\n }\n\n function addTableRow(table: TableFieldDef) {\n const rows = tableValues[table.field] ?? []\n rows.push(createEmptyTableRow(table.columns))\n tableValues[table.field] = rows\n }\n\n function removeTableRow(tableField: string, rowIndex: number) {\n const rows = tableValues[tableField] ?? []\n if (rows.length <= 1) return\n rows.splice(rowIndex, 1)\n tableValues[tableField] = rows\n }\n\n function buildResult(): Record<string, unknown> {\n const tableSnapshot: Record<string, Record<string, string>[]> = {}\n schema.value.tables.forEach((table) => {\n tableSnapshot[table.field] = (tableValues[table.field] ?? []).map((row) => ({ ...row }))\n })\n return buildPrintDataFromForm(\n schema.value,\n { ...basicValues },\n tableSnapshot,\n existingData,\n )\n }\n\n function doClear() {\n resetFormState(schema.value, {})\n }\n\n async function doCopy() {\n const text = JSON.stringify(buildResult(), null, 2)\n try {\n await navigator.clipboard.writeText(text)\n } catch {\n /* ignore */\n }\n }\n\n function apply() {\n close(buildResult())\n }\n\n expose({ open, close })\n\n return {\n visible,\n title,\n confirmText,\n cancelText,\n clearTextLabel,\n copyTextLabel,\n basicSectionTitle,\n tableSectionTitle,\n emptyHint,\n addRowText,\n deleteRowText,\n tableFieldLabel,\n schema,\n basicValues,\n tableValues,\n isEmpty,\n ICON_DELETE,\n close,\n addTableRow,\n removeTableRow,\n doClear,\n doCopy,\n apply,\n }\n },\n})\n</script>\n","import { reactive, onMounted, onBeforeUnmount } from 'vue-demi'\nimport { readJSON, writeJSON } from '../core/storage'\nimport {\n resolvePanelLayout,\n SVP_PANEL_LAYOUT,\n SVP_RULER_INSET,\n type PanelLayoutSpec,\n type SvpPanelLayoutKey,\n} from '../constants/panel-layout'\n\nexport interface DragBoxState {\n x: number\n y: number\n width: number\n height: number\n folded: boolean\n visible: boolean\n}\n\nexport interface UseDragBoxOptions {\n key?: string\n defaultX?: number\n defaultY?: number\n defaultWidth?: number\n defaultHeight?: number\n defaultFolded?: boolean\n defaultVisible?: boolean\n /** Apply sv-print default layout (recomputed on workspace resize). */\n layoutKey?: SvpPanelLayoutKey\n /** Override or extend the sv-print layout spec. */\n layoutSpec?: PanelLayoutSpec\n handleSelector?: string\n boundsSelector?: string\n /** When false the panel cannot be dragged. */\n draggable?: boolean\n}\n\nfunction getBounds(selector?: string, el?: HTMLElement | null) {\n const node = (selector ? document.querySelector(selector) : el?.parentElement) as HTMLElement | null\n if (!node) return { width: window.innerWidth, height: window.innerHeight }\n return { width: node.clientWidth, height: node.clientHeight }\n}\n\nexport function useDragBox(boxEl: () => HTMLElement | null, opts: UseDragBoxOptions = {}) {\n const persisted = opts.key\n ? readJSON<DragBoxState | null>(`dragbox:${opts.key}`, null)\n : null\n\n const state = reactive<DragBoxState>({\n x: persisted?.x ?? opts.defaultX ?? 16,\n y: persisted?.y ?? opts.defaultY ?? 64,\n width: persisted?.width ?? opts.defaultWidth ?? 220,\n height: persisted?.height ?? opts.defaultHeight ?? 220,\n folded: persisted?.folded ?? opts.defaultFolded ?? false,\n visible: persisted?.visible ?? opts.defaultVisible ?? true,\n })\n\n let dragging = false\n let userMoved = persisted != null && (persisted.x !== opts.defaultX || persisted.y !== opts.defaultY)\n let startX = 0\n let startY = 0\n let origX = 0\n let origY = 0\n let resizeObserver: ResizeObserver | null = null\n\n function clamp(v: number, min: number, max: number) {\n return Math.max(min, Math.min(max, v))\n }\n\n function applyLayout(force = false) {\n if (!opts.layoutKey && !opts.layoutSpec) return\n if (userMoved && !force) return\n const spec = opts.layoutSpec ?? SVP_PANEL_LAYOUT[opts.layoutKey!]\n const bounds = getBounds(opts.boundsSelector, boxEl())\n const rect = resolvePanelLayout(spec, bounds)\n state.x = rect.x\n state.y = rect.y\n state.width = rect.width\n state.height = rect.height\n }\n\n function onMouseDown(e: MouseEvent) {\n if (opts.draggable === false) return\n const el = boxEl()\n if (!el) return\n const handle = opts.handleSelector ? el.querySelector(opts.handleSelector) : el\n if (!handle || !(handle as HTMLElement).contains(e.target as Node)) return\n dragging = true\n startX = e.clientX\n startY = e.clientY\n origX = state.x\n origY = state.y\n document.addEventListener('mousemove', onMouseMove)\n document.addEventListener('mouseup', onMouseUp)\n e.preventDefault()\n }\n\n function onMouseMove(e: MouseEvent) {\n if (!dragging) return\n const el = boxEl()\n if (!el) return\n const bounds = getBounds(opts.boundsSelector, el)\n const dx = e.clientX - startX\n const dy = e.clientY - startY\n let nextX = origX + dx\n let nextY = origY + dy\n nextX = clamp(nextX, SVP_RULER_INSET, Math.max(SVP_RULER_INSET, bounds.width - 60))\n nextY = clamp(nextY, SVP_RULER_INSET, Math.max(SVP_RULER_INSET, bounds.height - 28))\n state.x = nextX\n state.y = nextY\n }\n\n function onMouseUp() {\n if (!dragging) return\n dragging = false\n userMoved = true\n document.removeEventListener('mousemove', onMouseMove)\n document.removeEventListener('mouseup', onMouseUp)\n persist()\n }\n\n function persist() {\n if (opts.key) writeJSON(`dragbox:${opts.key}`, state)\n }\n\n function toggleFolded() {\n state.folded = !state.folded\n persist()\n }\n\n function setVisible(v: boolean) {\n state.visible = v\n persist()\n }\n\n onMounted(() => {\n const el = boxEl()\n el?.addEventListener('mousedown', onMouseDown)\n applyLayout(true)\n const boundsNode = opts.boundsSelector\n ? document.querySelector(opts.boundsSelector)\n : el?.parentElement\n if (boundsNode && typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(() => applyLayout())\n resizeObserver.observe(boundsNode)\n }\n window.addEventListener('resize', onWindowResize)\n })\n\n function onWindowResize() {\n applyLayout()\n }\n\n onBeforeUnmount(() => {\n const el = boxEl()\n el?.removeEventListener('mousedown', onMouseDown)\n document.removeEventListener('mousemove', onMouseMove)\n document.removeEventListener('mouseup', onMouseUp)\n window.removeEventListener('resize', onWindowResize)\n resizeObserver?.disconnect()\n })\n\n return { state, toggleFolded, setVisible, persist, applyLayout, dragging: () => dragging }\n}\n","<template>\n <div\n v-show=\"show\"\n ref=\"boxRef\"\n :class=\"['svp-dragbox', { 'is-folded': state.folded, 'is-fixed': !draggable }]\"\n :style=\"boxStyle\"\n >\n <div class=\"svp-dragbox__header\">\n <span class=\"svp-dragbox__title\">\n <slot name=\"title\">{{ resolvedTitle }}</slot>\n </span>\n <div class=\"svp-dragbox__menu\">\n <slot name=\"actions\" />\n <span\n v-if=\"showFold\"\n :class=\"['svp-dragbox__icon', { 'is-min': state.folded }]\"\n :title=\"state.folded ? t('panel.expand') : t('panel.minimize')\"\n @click.stop=\"toggleFolded\"\n >\n <SvpIcon :icon=\"UI_ICONS.chevronDown\" :size=\"16\" aria-hidden=\"true\" />\n </span>\n <span\n v-if=\"showClose\"\n class=\"svp-dragbox__icon\"\n :title=\"t('panel.hide')\"\n @click.stop=\"onClose\"\n >\n <SvpIcon :icon=\"UI_ICONS.close\" :size=\"16\" aria-hidden=\"true\" />\n </span>\n </div>\n </div>\n <div v-show=\"!state.folded\" class=\"svp-dragbox__body\" :style=\"bodyStyle\">\n <slot />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, watch, reactive, type PropType } from 'vue-demi'\nimport SvpIcon from './SvpIcon.vue'\nimport { useDragBox } from '../composables/useDragBox'\nimport { useDesignerUi } from '../composables/useDesignerUi'\nimport { useI18n } from '../i18n'\nimport { designerStore, setPanelVisibility, type PanelVisibility } from '../core/stores'\nimport { resolvePanelDragBoxOptions } from '../core/designer-options'\nimport { UI_ICONS } from '../constants/icons'\nimport type { SvpPanelLayoutKey } from '../constants/panel-layout'\n\nexport default defineComponent({\n name: 'SvpDragBox',\n components: { SvpIcon },\n props: {\n title: { type: String, default: '' },\n storageKey: { type: String, default: '' },\n layoutKey: { type: String as PropType<SvpPanelLayoutKey>, default: '' },\n styleOptionKey: { type: String, default: '' },\n panelKey: { type: String as PropType<keyof PanelVisibility>, default: '' },\n defaultX: { type: Number, default: 16 },\n defaultY: { type: Number, default: 64 },\n width: { type: Number, default: 220 },\n height: { type: Number, default: 240 },\n visible: { type: Boolean, default: true },\n folded: { type: Boolean, default: false },\n foldable: { type: Boolean, default: true },\n closable: { type: Boolean, default: undefined },\n bodyPadding: { type: String, default: '' },\n boundsSelector: { type: String, default: '.svp-workspace' },\n bodyStyleExtra: { type: Object as PropType<Record<string, string>>, default: () => ({}) },\n },\n emits: ['update:visible', 'close'],\n setup(props, { emit }) {\n const boxRef = ref<HTMLElement | null>(null)\n const { t } = useI18n()\n const designerUi = useDesignerUi()\n\n const styleOverrides = computed(() => (\n props.styleOptionKey\n ? resolvePanelDragBoxOptions(props.styleOptionKey, designerUi?.styleOption.value)\n : null\n ))\n\n const resolvedTitle = computed(() => styleOverrides.value?.title || props.title)\n const draggable = computed(() => styleOverrides.value?.draggable ?? true)\n\n const showFold = computed(() => props.foldable)\n const showClose = computed(() => props.closable ?? !!props.panelKey)\n\n const dragBoxOptions = reactive({\n key: props.storageKey || undefined,\n layoutKey: (styleOverrides.value?.layoutKey || props.layoutKey || undefined) as SvpPanelLayoutKey | undefined,\n layoutSpec: styleOverrides.value?.layoutSpec,\n defaultX: props.defaultX,\n defaultY: props.defaultY,\n defaultWidth: props.width,\n defaultHeight: props.height,\n defaultFolded: props.folded,\n defaultVisible: props.visible,\n handleSelector: '.svp-dragbox__title',\n boundsSelector: props.boundsSelector || undefined,\n draggable: draggable.value,\n })\n\n const { state, toggleFolded, setVisible } = useDragBox(() => boxRef.value, dragBoxOptions)\n\n watch(draggable, (v) => { dragBoxOptions.draggable = v }, { immediate: true })\n watch(\n () => styleOverrides.value?.layoutSpec,\n (spec) => { dragBoxOptions.layoutSpec = spec },\n )\n watch(\n () => styleOverrides.value?.layoutKey,\n (key) => { dragBoxOptions.layoutKey = (key || props.layoutKey || undefined) as SvpPanelLayoutKey | undefined },\n )\n\n const show = computed(() =>\n props.panelKey\n ? designerStore.panels[props.panelKey]\n : state.visible,\n )\n\n watch(\n show,\n (v) => { if (v !== state.visible) setVisible(v) },\n { immediate: true },\n )\n\n watch(\n () => props.visible,\n (v) => {\n if (props.panelKey) return\n if (v !== state.visible) setVisible(v)\n },\n )\n\n const boxStyle = computed(() => {\n const extra = { ...(styleOverrides.value?.boxStyleExtra ?? {}) }\n const isFixed = extra.position === 'fixed'\n if (!isFixed) {\n delete extra.left\n delete extra.top\n delete extra.width\n delete extra.height\n }\n return {\n left: isFixed ? extra.left : `${state.x}px`,\n top: isFixed ? extra.top : `${state.y}px`,\n width: (!isFixed ? `${state.width}px` : extra.width) ?? `${state.width}px`,\n height: state.folded ? 'auto' : ((!isFixed ? `${state.height}px` : extra.height) ?? `${state.height}px`),\n ...extra,\n }\n })\n\n const bodyStyle = computed(() => ({\n padding: props.bodyPadding || undefined,\n ...props.bodyStyleExtra,\n ...styleOverrides.value?.bodyStyleExtra,\n }))\n\n function onClose() {\n if (props.panelKey) {\n setPanelVisibility(props.panelKey, false)\n } else {\n setVisible(false)\n emit('update:visible', false)\n }\n emit('close')\n }\n\n return {\n boxRef,\n state,\n show,\n showFold,\n showClose,\n toggleFolded,\n boxStyle,\n bodyStyle,\n onClose,\n resolvedTitle,\n draggable,\n t,\n UI_ICONS,\n }\n },\n})\n</script>\n","<template>\n <DragBox\n :title=\"t('panel.draggableEls')\"\n storage-key=\"draggableEls.v6\"\n layout-key=\"draggableEls\"\n panel-key=\"draggableEls\"\n style-option-key=\"draggableEls\"\n body-padding=\"0\"\n >\n <div class=\"svp-drag-els\">\n <div v-for=\"group in grouped\" :key=\"group.name\" class=\"svp-drag-els__group\">\n <div class=\"svp-drag-els__group-title\">{{ group.name }}</div>\n <div class=\"svp-drag-els__list\">\n <div\n v-for=\"item in group.items\"\n :key=\"item.key\"\n :class=\"['ep-draggable-item', `tag-${item.key}`]\"\n :tid=\"item.tid\"\n >\n <span class=\"svp-drag-els__icon\">\n <SvpIcon :icon=\"iconFor(item.key)\" :size=\"28\" />\n </span>\n <span>{{ item.label }}</span>\n </div>\n </div>\n </div>\n </div>\n </DragBox>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, onMounted, nextTick, type PropType } from 'vue-demi'\nimport DragBox from '../DragBox.vue'\nimport SvpIcon from '../SvpIcon.vue'\nimport { useDesigner } from '../../composables/useDesigner'\nimport { useI18n } from '../../i18n'\nimport { designerStore } from '../../core/stores'\nimport { DEFAULT_ELEMENT_CATALOGUE, type ElementCatalogueItem } from '../../constants'\nimport { iconForElementKey } from '../../constants/icons'\n\nexport default defineComponent({\n name: 'DraggableElsPanel',\n components: { DragBox, SvpIcon },\n props: {\n catalogue: {\n type: Array as PropType<ElementCatalogueItem[]>,\n default: () => DEFAULT_ELEMENT_CATALOGUE,\n },\n },\n setup(props) {\n const utils = useDesigner()\n const { t } = useI18n()\n\n const grouped = computed(() => {\n const map = new Map<string, ElementCatalogueItem[]>()\n props.catalogue.forEach((item) => {\n const list = map.get(item.group) ?? []\n list.push(item)\n map.set(item.group, list)\n })\n return Array.from(map.entries()).map(([name, items]) => ({ name, items }))\n })\n\n function iconFor(key: string) {\n return iconForElementKey(key)\n }\n\n onMounted(async () => {\n await nextTick()\n try { utils.buildByHtml() } catch { /* ignore */ }\n })\n\n return { t, grouped, iconFor, state: designerStore }\n },\n})\n</script>\n","<template>\n <DragBox\n :title=\"t('panel.miniMap')\"\n storage-key=\"miniMap.v7\"\n layout-key=\"miniMap\"\n panel-key=\"miniMap\"\n style-option-key=\"miniMap\"\n body-padding=\"6px\"\n >\n <div ref=\"miniMapRef\" class=\"svp-minimap\">\n <div class=\"svp-minimap__stage\" :style=\"stageStyle\">\n <div class=\"svp-minimap__paper\">\n <div\n v-if=\"snapshot.headerLine\"\n class=\"svp-minimap__guide svp-minimap__guide--header\"\n :style=\"snapshot.headerLine\"\n />\n <div\n v-if=\"snapshot.footerLine\"\n class=\"svp-minimap__guide svp-minimap__guide--footer\"\n :style=\"snapshot.footerLine\"\n />\n <div\n v-for=\"item in snapshot.elements\"\n :key=\"item.key\"\n :class=\"['svp-minimap__el', `svp-minimap__el--${item.kind}`]\"\n :style=\"item.style\"\n >\n <SvpIcon v-if=\"item.showIcon\" :icon=\"item.icon\" :size=\"8\" aria-hidden=\"true\" />\n </div>\n </div>\n </div>\n <div class=\"svp-minimap__viewport\" :style=\"viewportStyle\" />\n </div>\n </DragBox>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, onMounted, onBeforeUnmount, reactive, watch } from 'vue-demi'\nimport DragBox from '../DragBox.vue'\nimport SvpIcon from '../SvpIcon.vue'\nimport { useDesigner } from '../../composables/useDesigner'\nimport { useI18n } from '../../i18n'\nimport { designerStore } from '../../core/stores'\nimport { DESIGN_CONTAINER_ID } from '../../constants'\nimport { iconForElementKey } from '../../constants/icons'\n\ninterface MiniMapElementView {\n key: string\n kind: string\n icon: string\n showIcon: boolean\n style: Record<string, string>\n}\n\nconst LINE_KINDS = new Set(['hline', 'vline'])\n\nexport default defineComponent({\n name: 'MiniMapPanel',\n components: { DragBox, SvpIcon },\n setup() {\n const utils = useDesigner()\n const { t } = useI18n()\n const miniMapRef = ref<HTMLElement | null>(null)\n const region = reactive({ left: 0, top: 0, width: 100, height: 60 })\n const stage = reactive({ left: 0, top: 0, width: 100, height: 140 })\n const snapshot = reactive<{\n elements: MiniMapElementView[]\n headerLine: Record<string, string> | null\n footerLine: Record<string, string> | null\n }>({\n elements: [],\n headerLine: null,\n footerLine: null,\n })\n let raf = 0\n\n function kindFromClass(className: string): string {\n const match = className.match(/hiprint-printElement-(\\w+)/)\n return match?.[1] || 'text'\n }\n\n function buildGuideStyle(paperRect: DOMRect, lineRect: DOMRect, stageH: number): Record<string, string> {\n const top = ((lineRect.top - paperRect.top) / paperRect.height) * 100\n const height = Math.max(1, (lineRect.height / paperRect.height) * stageH)\n return {\n top: `${top}%`,\n height: `${height}px`,\n }\n }\n\n function buildElements(paper: HTMLElement, paperRect: DOMRect, stageW: number, stageH: number): MiniMapElementView[] {\n return Array.from(paper.querySelectorAll('.hiprint-printElement')).map((node, index) => {\n const el = node as HTMLElement\n const rect = el.getBoundingClientRect()\n const kind = kindFromClass(el.className)\n const isLine = LINE_KINDS.has(kind)\n const width = Math.max(isLine ? 1 : 2, (rect.width / paperRect.width) * stageW)\n const height = Math.max(isLine ? 1 : 2, (rect.height / paperRect.height) * stageH)\n const showIcon = !isLine && width >= 10 && height >= 8\n return {\n key: `${kind}-${index}-${Math.round(rect.left)}-${Math.round(rect.top)}`,\n kind,\n icon: iconForElementKey(kind),\n showIcon,\n style: {\n left: `${((rect.left - paperRect.left) / paperRect.width) * 100}%`,\n top: `${((rect.top - paperRect.top) / paperRect.height) * 100}%`,\n width: `${width}px`,\n height: `${height}px`,\n },\n }\n })\n }\n\n function refresh() {\n const map = miniMapRef.value\n const host = document.getElementById(DESIGN_CONTAINER_ID)\n const scroller = host?.parentElement as HTMLElement | null\n const paper = host?.querySelector?.('.hiprint-printPaper') as HTMLElement | null\n if (!map || !scroller || !paper) return\n\n const mapW = map.clientWidth\n const mapH = map.clientHeight\n if (mapW <= 0 || mapH <= 0) return\n\n const paperRect = paper.getBoundingClientRect()\n if (paperRect.width <= 0 || paperRect.height <= 0) return\n\n const fitScale = Math.min((mapW - 4) / paperRect.width, (mapH - 4) / paperRect.height)\n const stageW = paperRect.width * fitScale\n const stageH = paperRect.height * fitScale\n stage.left = (mapW - stageW) / 2\n stage.top = (mapH - stageH) / 2\n stage.width = stageW\n stage.height = stageH\n\n const header = paper.querySelector('.hiprint-headerLine') as HTMLElement | null\n const footer = paper.querySelector('.hiprint-footerLine') as HTMLElement | null\n snapshot.headerLine = header\n ? buildGuideStyle(paperRect, header.getBoundingClientRect(), stageH)\n : null\n snapshot.footerLine = footer\n ? buildGuideStyle(paperRect, footer.getBoundingClientRect(), stageH)\n : null\n snapshot.elements = buildElements(paper, paperRect, stageW, stageH)\n\n const scrollW = Math.max(scroller.scrollWidth, 1)\n const scrollH = Math.max(scroller.scrollHeight, 1)\n const maxScrollLeft = Math.max(0, scroller.scrollWidth - scroller.clientWidth)\n const maxScrollTop = Math.max(0, scroller.scrollHeight - scroller.clientHeight)\n\n region.width = Math.max(20, Math.min(stageW, (scroller.clientWidth / scrollW) * stageW))\n region.height = Math.max(15, Math.min(stageH, (scroller.clientHeight / scrollH) * stageH))\n\n const trackW = Math.max(0, stageW - region.width)\n const trackH = Math.max(0, stageH - region.height)\n\n region.left = stage.left + (maxScrollLeft > 0 ? (scroller.scrollLeft / maxScrollLeft) * trackW : 0)\n region.top = stage.top + (maxScrollTop > 0 ? (scroller.scrollTop / maxScrollTop) * trackH : 0)\n }\n\n function loop() {\n refresh()\n raf = requestAnimationFrame(loop)\n }\n\n onMounted(() => {\n utils.setMiniMap({ refresh })\n raf = requestAnimationFrame(loop)\n })\n onBeforeUnmount(() => { if (raf) cancelAnimationFrame(raf) })\n\n const stageStyle = computed(() => ({\n left: `${stage.left}px`,\n top: `${stage.top}px`,\n width: `${stage.width}px`,\n height: `${stage.height}px`,\n }))\n\n const viewportStyle = computed(() => ({\n left: `${region.left}px`,\n top: `${region.top}px`,\n width: `${region.width}px`,\n height: `${region.height}px`,\n }))\n\n watch(() => designerStore.zoom, () => refresh())\n\n return {\n t,\n miniMapRef,\n snapshot,\n stageStyle,\n viewportStyle,\n }\n },\n})\n</script>\n","<template>\n <DragBox\n :title=\"t('panel.pageStructure')\"\n storage-key=\"pageStructure.v6\"\n layout-key=\"pageStructure\"\n panel-key=\"pageStructure\"\n style-option-key=\"pageStructure\"\n body-padding=\"4px\"\n >\n <ul class=\"svp-structure\">\n <li v-if=\"!items.length\" class=\"svp-structure__empty\">{{ t('panel.empty') }}</li>\n <li\n v-for=\"(item, idx) in items\"\n :key=\"item.id || idx\"\n :class=\"['svp-structure__item', { active: isItemSelected(item) }]\"\n :title=\"labelFor(item)\"\n @click=\"onSelect(item)\"\n >\n <SvpIcon class=\"svp-structure__icon\" :icon=\"iconFor(item)\" :size=\"16\" />\n <span class=\"svp-structure__label\">{{ labelFor(item) }}</span>\n <button\n type=\"button\"\n class=\"svp-structure__delete\"\n title=\"删除元素\"\n @click.stop=\"onDelete(item)\"\n >\n <SvpIcon :icon=\"ICON_DELETE\" :size=\"14\" />\n </button>\n </li>\n </ul>\n </DragBox>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed } from 'vue-demi'\nimport DragBox from '../DragBox.vue'\nimport SvpIcon from '../SvpIcon.vue'\nimport { useDesigner } from '../../composables/useDesigner'\nimport { useI18n } from '../../i18n'\nimport { designerStore } from '../../core/stores'\nimport { ICON_DELETE, iconForElement } from '../../constants/icons'\n\nexport default defineComponent({\n name: 'PageStructurePanel',\n components: { DragBox, SvpIcon },\n setup() {\n const utils = useDesigner()\n const { t } = useI18n()\n\n const items = computed(() => {\n void designerStore.uiPulse\n void designerStore.history.index\n return utils.getPageElements()\n })\n\n const selectedIds = computed(() => {\n void designerStore.selection.count\n return designerStore.selection.ids.map(String)\n })\n\n function labelFor(item: any) {\n const opts = item?.options || {}\n const type = item?.printElementType\n return opts.title || opts.field || type?.title || type?.type || '元素'\n }\n\n function iconFor(item: any) {\n return iconForElement(item)\n }\n\n function isItemSelected(item: any) {\n const id = item?.id\n if (id == null) return false\n return selectedIds.value.includes(String(id))\n }\n\n function onSelect(item: any) {\n if (!item) return\n utils.selectPrintElement(item)\n }\n\n function onDelete(item: any) {\n if (!item) return\n utils.deletePrintElement(item)\n }\n\n return {\n t,\n items,\n selectedIds,\n ICON_DELETE,\n labelFor,\n iconFor,\n isItemSelected,\n onSelect,\n onDelete,\n }\n },\n})\n</script>\n\n<style scoped lang=\"scss\">\n.svp-structure {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.svp-structure__empty {\n padding: 6px 8px;\n font-size: 12px;\n color: var(--svp-fg-muted);\n}\n\n.svp-structure__item {\n display: flex;\n align-items: center;\n gap: 6px;\n min-height: 24px;\n padding: 2px 4px;\n border-radius: 0;\n cursor: pointer;\n font-size: 12px;\n color: var(--svp-fg);\n\n &:hover {\n background: var(--svp-bg-soft);\n }\n\n &.active {\n background: var(--svp-primary);\n color: var(--svp-primary-content);\n\n &:hover {\n background: var(--svp-primary);\n }\n }\n}\n\n.svp-structure__icon {\n flex: 0 0 18px;\n}\n\n.svp-structure__label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.svp-structure__delete {\n flex: 0 0 auto;\n width: 20px;\n height: 20px;\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n opacity: 0.75;\n\n &:hover {\n opacity: 1;\n color: #ef4444;\n }\n}\n</style>\n","<template>\n <DragBox\n :title=\"t('panel.pageHistory')\"\n storage-key=\"pageHistory.v6\"\n layout-key=\"pageHistory\"\n panel-key=\"pageHistory\"\n style-option-key=\"history\"\n body-padding=\"6px\"\n >\n <div class=\"svp-history__meta\">\n <span class=\"svp-history__counter\">\n {{ state.history.index }}/{{ state.history.total }}/{{ state.history.capacity }}\n </span>\n <button type=\"button\" class=\"svp-btn is-icon\" :title=\"t('tool.clear')\" @click=\"onClear\">\n <SvpIcon :icon=\"TOOL_ICONS.clear\" :size=\"10\" />\n </button>\n </div>\n <ul class=\"svp-list\">\n <li v-if=\"!steps.length\" class=\"svp-list__item is-disabled\">{{ t('panel.empty') }}</li>\n <li\n v-for=\"step in steps\"\n :key=\"step.index\"\n :class=\"['svp-list__item', { active: step.index === currentIdx }]\"\n @click=\"onJump(step.index)\"\n >\n <SvpIcon class=\"svp-list__item-icon\" :icon=\"stepIcon(step)\" :size=\"14\" />\n <span class=\"svp-list__item-label\">{{ stepLabel(step) }}</span>\n <button\n v-if=\"canRemove(step)\"\n type=\"button\"\n class=\"svp-list__item-delete\"\n :title=\"t('history.deleteRecord')\"\n @click.stop=\"onRemove(step.index)\"\n >\n <SvpIcon :icon=\"ICON_DELETE\" :size=\"12\" />\n </button>\n </li>\n </ul>\n </DragBox>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, onMounted } from 'vue-demi'\nimport DragBox from '../DragBox.vue'\nimport SvpIcon from '../SvpIcon.vue'\nimport { useDesigner } from '../../composables/useDesigner'\nimport { useI18n } from '../../i18n'\nimport { designerStore } from '../../core/stores'\nimport { TOOL_ICONS, ICON_DELETE, iconForHistoryLabel } from '../../constants/icons'\nimport { HISTORY_INITIAL } from '../../core/history-labels'\nimport type { HistoryStep } from '../../core/history'\n\nexport default defineComponent({\n name: 'PageHistoryPanel',\n components: { DragBox, SvpIcon },\n setup() {\n const utils = useDesigner()\n const { t } = useI18n()\n\n onMounted(() => {\n utils.setPageHistory({ refresh: () => utils.history.refreshFromTemplate() })\n utils.history.refreshFromTemplate()\n })\n\n const steps = computed(() => {\n void designerStore.history.index\n void designerStore.history.total\n return utils.history.steps\n })\n const currentIdx = computed(() => designerStore.history.index - 1)\n\n function stepLabel(step: HistoryStep): string {\n const keyMap: Record<string, string> = {\n 移动: 'history.move',\n 元素对齐: 'history.align',\n 参数修改: 'history.param',\n 初始: 'history.initial',\n 缩放: 'history.zoom',\n }\n const key = keyMap[step.label]\n return key ? t(key) : step.label || step.type\n }\n\n function stepIcon(step: HistoryStep): string {\n return iconForHistoryLabel(step.label, step.type)\n }\n\n function canRemove(step: HistoryStep): boolean {\n return step.index > 0 && step.label !== HISTORY_INITIAL\n }\n\n function onJump(idx: number) { utils.history.jump(idx) }\n function onClear() { utils.history.clear() }\n function onRemove(idx: number) { utils.history.remove(idx) }\n\n return {\n t,\n state: designerStore,\n steps,\n currentIdx,\n stepLabel,\n stepIcon,\n canRemove,\n onJump,\n onClear,\n onRemove,\n TOOL_ICONS,\n ICON_DELETE,\n }\n },\n})\n</script>\n\n<style scoped lang=\"scss\">\n.svp-history__meta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 4px;\n}\n\n.svp-history__counter {\n font-size: 11px;\n color: var(--svp-fg-muted);\n}\n\n.svp-list__item-icon {\n flex: 0 0 16px;\n}\n\n.svp-list__item-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.svp-list__item-delete {\n flex: 0 0 auto;\n width: 20px;\n height: 20px;\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n opacity: 0.75;\n\n &:hover {\n opacity: 1;\n color: #ef4444;\n }\n}\n</style>\n","<template>\n <DragBox\n :title=\"t('panel.properties')\"\n storage-key=\"properties.v6\"\n layout-key=\"properties\"\n panel-key=\"properties\"\n style-option-key=\"options\"\n body-padding=\"0\"\n >\n <div :id=\"SETTING_CONTAINER_ID\" class=\"svp-properties-host\" />\n </DragBox>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, watch, nextTick } from 'vue-demi'\nimport DragBox from '../DragBox.vue'\nimport { useDesigner } from '../../composables/useDesigner'\nimport { useI18n } from '../../i18n'\nimport { designerStore } from '../../core/stores'\nimport { openPanelSetting } from '../../core/hiprint-paper-list'\nimport { SETTING_CONTAINER_ID } from '../../constants'\n\nexport default defineComponent({\n name: 'PropertiesPanel',\n components: { DragBox },\n setup() {\n const { t } = useI18n()\n const utils = useDesigner()\n\n watch(\n () => designerStore.panels.properties,\n async (visible) => {\n if (!visible) return\n await nextTick()\n const host = document.getElementById(SETTING_CONTAINER_ID)\n if (host?.childElementCount) return\n\n const selected = designerStore.selection.elements\n if (selected.length === 1) {\n utils.selectPrintElement(selected[0] as any)\n } else {\n openPanelSetting()\n }\n },\n )\n\n return {\n t,\n SETTING_CONTAINER_ID,\n }\n },\n})\n</script>\n\n<style scoped>\n.svp-properties-host {\n height: 100%;\n min-width: 0;\n overflow-x: hidden;\n overflow-y: auto;\n}\n</style>\n","<template>\n <div :class=\"['svp-root', `theme-${activeTheme}`]\" :data-theme=\"activeTheme\">\n <template v-if=\"resolvedShow.showHeader\">\n <slot name=\"header\">\n <Header\n :title=\"headerTitle\"\n :logo-html=\"headerLogoHtml\"\n :header-new-ele=\"headerNewEle\"\n :header-ele-list=\"resolvedHeaderEleList\"\n @edit-template=\"handleEditTemplate\"\n @edit-print-data=\"handleEditPrintData\"\n @export-file=\"handleExportFile\"\n @import-file=\"handleImportFile\"\n @save=\"handleSave\"\n @preview=\"handlePreview\"\n />\n </slot>\n </template>\n\n <slot name=\"toolbar\">\n <Toolbar v-if=\"resolvedShow.showToolbar\" />\n </slot>\n\n <div ref=\"workspaceRef\" class=\"svp-workspace\">\n <div class=\"svp-ruler-corner\" />\n <div class=\"svp-ruler-x\"><canvas ref=\"rulerXRef\" style=\"width:100%;height:100%;display:block\" /></div>\n <div class=\"svp-ruler-y\"><canvas ref=\"rulerYRef\" style=\"width:100%;height:100%;display:block\" /></div>\n\n <div class=\"svp-canvas-scroller-wrap\">\n <div ref=\"scrollerRef\" class=\"svp-canvas-scroller\">\n <div :id=\"DESIGN_CONTAINER_ID\" class=\"svp-design-host\" />\n </div>\n </div>\n\n <slot name=\"draggableEls\">\n <DraggableElsPanel :catalogue=\"catalogue\" />\n </slot>\n <slot name=\"miniMap\">\n <MiniMapPanel />\n </slot>\n <slot name=\"pageStructure\">\n <PageStructurePanel />\n </slot>\n <slot name=\"pageHistory\">\n <PageHistoryPanel />\n </slot>\n <slot name=\"properties\">\n <PropertiesPanel />\n </slot>\n\n <slot name=\"other\" />\n </div>\n\n <footer v-if=\"resolvedShow.showFooter\" class=\"svp-footer\">\n <slot name=\"footer\">{{ footerText }}</slot>\n </footer>\n\n <Preview ref=\"previewRef\" />\n <JsonEditorModal ref=\"jsonEditorRef\" />\n <PrintDataEditorModal ref=\"printDataEditorRef\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineComponent,\n ref,\n computed,\n onMounted,\n onBeforeUnmount,\n watch,\n nextTick,\n provide,\n type PropType,\n} from 'vue-demi'\nimport DesignerUtils from '../core/designer-utils'\nimport { provideDesigner } from '../composables/useDesigner'\nimport { useRuler } from '../composables/useRuler'\nimport { setLocale } from '../i18n'\nimport { designerStore } from '../core/stores'\nimport { injectThemes } from '../core/theme'\nimport {\n applyStyleOption,\n DESIGNER_UI_INJECTION_KEY,\n resolveShowOption,\n} from '../core/designer-options'\nimport { headerElementsFromCatalogue } from '../constants/header-elements'\nimport {\n DESIGN_CONTAINER_ID,\n DEFAULT_ELEMENT_CATALOGUE,\n DEFAULT_PAPER_LIST,\n} from '../constants'\nimport type {\n DesignerProps,\n DesignedEventPayload,\n Events,\n HeaderEle,\n PaperType,\n PluginOptions,\n Provider,\n ProviderMap,\n ShowOption,\n StyleOption,\n ThemeType,\n} from '../types'\n\nimport Header from './Header.vue'\nimport Toolbar from './Toolbar.vue'\nimport Preview from './Preview.vue'\nimport JsonEditorModal from './JsonEditorModal.vue'\nimport PrintDataEditorModal from './PrintDataEditorModal.vue'\nimport { openJsonEditorModal, type JsonEditorModalHost } from '../core/json-editor-modal'\nimport type { PrintDataEditorModalHost } from '../core/print-data-editor-modal'\nimport DraggableElsPanel from './panels/DraggableElsPanel.vue'\nimport MiniMapPanel from './panels/MiniMapPanel.vue'\nimport PageStructurePanel from './panels/PageStructurePanel.vue'\nimport PageHistoryPanel from './panels/PageHistoryPanel.vue'\nimport PropertiesPanel from './panels/PropertiesPanel.vue'\n\nexport default defineComponent({\n name: 'SvpDesigner',\n components: {\n Header,\n Toolbar,\n Preview,\n JsonEditorModal,\n PrintDataEditorModal,\n DraggableElsPanel,\n MiniMapPanel,\n PageStructurePanel,\n PageHistoryPanel,\n PropertiesPanel,\n },\n props: {\n template: { type: [Object, Array, String] as PropType<DesignerProps['template']>, default: () => ({ panels: [] }) },\n printData: { type: Object as PropType<DesignerProps['printData']>, default: () => ({}) },\n providers: { type: Array as PropType<Provider[]>, default: () => [] },\n providerMap: { type: [Object, Array] as PropType<ProviderMap | ProviderMap[]>, default: () => [] },\n plugins: { type: Array as PropType<PluginOptions[]>, default: () => [] },\n autoConnect: { type: Boolean, default: false },\n config: { type: Object, default: () => ({}) },\n templateKey: { type: String, default: '' },\n title: { type: String, default: '' },\n headerLogoHtml: { type: String, default: '' },\n headerTitle: { type: String, default: '' },\n headerNewEle: { type: Boolean, default: false },\n headerEleList: { type: Array as PropType<HeaderEle[]>, default: () => [] },\n events: { type: Object as PropType<Events>, default: () => ({}) },\n styleOption: { type: Object as PropType<StyleOption>, default: () => ({}) },\n showOption: { type: Object as PropType<ShowOption>, default: () => ({}) },\n catalogue: { type: Array as PropType<typeof DEFAULT_ELEMENT_CATALOGUE>, default: () => DEFAULT_ELEMENT_CATALOGUE },\n showToolbar: { type: Boolean, default: true },\n theme: { type: [String, Object, Array] as PropType<string | ThemeType | ThemeType[]>, default: 'svpLight' },\n lang: { type: String, default: 'zh-CN' },\n tags: { type: Array as PropType<string[]>, default: () => [] },\n designOptions: { type: Object, default: () => ({}) },\n paperList: { type: Array as PropType<PaperType[]>, default: () => DEFAULT_PAPER_LIST },\n },\n emits: ['onDesigned', 'update:template', 'update:printData'],\n setup(props, { emit }) {\n const utils = DesignerUtils.getInstance()\n provideDesigner(utils)\n\n const workspaceRef = ref<HTMLElement | null>(null)\n const scrollerRef = ref<HTMLElement | null>(null)\n const rulerXRef = ref<HTMLCanvasElement | null>(null)\n const rulerYRef = ref<HTMLCanvasElement | null>(null)\n const previewRef = ref<any>(null)\n const jsonEditorRef = ref<{ open?: JsonEditorModalHost['open'] } | null>(null)\n const printDataEditorRef = ref<{ open?: PrintDataEditorModalHost['open'] } | null>(null)\n\n const resolvedShow = computed(() => resolveShowOption(props.showOption, props.showToolbar))\n const footerText = computed(() => (\n resolvedShow.value.showPower === false ? '' : 'hiprint设计器'\n ))\n\n const resolvedHeaderEleList = computed(() => {\n if (props.headerEleList.length) return props.headerEleList\n if (!props.headerNewEle) return []\n return headerElementsFromCatalogue(props.catalogue)\n })\n\n provide(DESIGNER_UI_INJECTION_KEY, {\n styleOption: computed(() => props.styleOption),\n showOption: resolvedShow,\n })\n\n const jsonEditorHost: JsonEditorModalHost = {\n open: (options) => {\n const host = jsonEditorRef.value\n if (typeof host?.open === 'function') return host.open(options)\n return openJsonEditorModal(options)\n },\n }\n\n const printDataEditorHost: PrintDataEditorModalHost = {\n open: (options) => {\n const host = printDataEditorRef.value\n if (typeof host?.open !== 'function') {\n return Promise.resolve(null)\n }\n return host.open(options)\n },\n }\n\n const activeTheme = computed(() => {\n if (typeof props.theme === 'string') return props.theme\n if (Array.isArray(props.theme)) return props.theme[0]?.theme || 'svpLight'\n return (props.theme as ThemeType)?.theme || 'svpLight'\n })\n\n const { redraw: redrawRuler } = useRuler({\n canvasX: () => rulerXRef.value,\n canvasY: () => rulerYRef.value,\n scrollerEl: () => scrollerRef.value,\n workspaceEl: () => workspaceRef.value,\n })\n utils.setRuler({ redraw: redrawRuler })\n\n let skipTemplateWatch = false\n\n function templateHasPanels(json: unknown): boolean {\n if (!json || typeof json !== 'object') return false\n const panels = (json as { panels?: unknown }).panels\n if (Array.isArray(panels) && panels.length > 0) return true\n return Array.isArray(json) && json.length > 0\n }\n\n function resolveInitialTemplate() {\n if (templateHasPanels(props.template)) return props.template\n const saved = utils.loadSaved?.()\n if (saved && templateHasPanels(saved)) return saved\n return props.template\n }\n\n function bootstrap() {\n utils.options.connect = props.autoConnect\n utils.options.config = props.config\n utils.options.providerMap = props.providerMap\n utils.options.templateKey = props.templateKey\n utils.options.printData = props.printData\n utils.options.designOptions = props.designOptions\n utils.options.paperList = props.paperList\n utils.options.events = props.events\n utils.onTemplateChange = (json) => {\n skipTemplateWatch = true\n emit('update:template', json)\n queueMicrotask(() => { skipTemplateWatch = false })\n }\n utils.onPrintDataChange = (data) => emit('update:printData', data)\n utils.setPrintData(props.printData)\n utils.setPlugins(props.plugins)\n utils.initProviders(props.providers)\n applyStyleOption(props.styleOption)\n }\n\n function buildDesigner() {\n utils.newDesigner(\n {\n template: resolveInitialTemplate(),\n history: true,\n dataMode: 1,\n },\n props.designOptions || {},\n )\n const payload: DesignedEventPayload = {\n hiprint: (utils as any).printTemplate ? (window as any).hiprint || null : null,\n designerUtils: utils,\n }\n emit('onDesigned', payload)\n utils.plugins.run('onDesigned', payload).catch(() => { /* ignore */ })\n utils.setPreview(previewRef.value)\n if (props.designOptions?.adaptToSize) {\n requestAnimationFrame(() => utils.adaptToSize())\n }\n }\n\n let resizeHandler: (() => void) | null = null\n\n onMounted(async () => {\n setLocale(props.lang)\n designerStore.lang = props.lang\n designerStore.theme = activeTheme.value\n injectThemes(props.theme)\n bootstrap()\n utils.setEditor(jsonEditorHost)\n utils.setPrintDataEditor(printDataEditorHost)\n await nextTick()\n buildDesigner()\n utils.shortcuts.mount()\n await nextTick()\n try { utils.buildByHtml() } catch { /* ignore */ }\n if (props.designOptions?.adaptToSize) {\n resizeHandler = () => utils.adaptToSize()\n window.addEventListener('resize', resizeHandler)\n }\n })\n\n onBeforeUnmount(() => {\n utils.shortcuts.unmount()\n if (resizeHandler) window.removeEventListener('resize', resizeHandler)\n })\n\n watch(() => props.template, () => {\n if (skipTemplateWatch) return\n utils.applyTemplateJson(props.template)\n }, { deep: true })\n\n watch(() => props.lang, (v) => {\n setLocale(v)\n designerStore.lang = v\n })\n watch(() => props.printData, (v) => utils.setPrintData(v), { deep: true })\n watch(activeTheme, (v) => { designerStore.theme = v })\n watch(() => props.theme, (v) => injectThemes(v), { deep: true })\n watch(() => props.events, (v) => { utils.options.events = v }, { deep: true })\n watch(() => props.styleOption, (v) => applyStyleOption(v), { deep: true })\n\n function handleSave() { utils.save() }\n function handleEditTemplate() { void utils.edit() }\n function handleEditPrintData() { void utils.editData() }\n function handleExportFile() { utils.export() }\n function handleImportFile() { utils.import() }\n function handlePreview() {\n previewRef.value?.open?.()\n }\n\n return {\n DESIGN_CONTAINER_ID,\n workspaceRef,\n scrollerRef,\n rulerXRef,\n rulerYRef,\n previewRef,\n jsonEditorRef,\n printDataEditorRef,\n activeTheme,\n resolvedShow,\n resolvedHeaderEleList,\n footerText,\n handleSave,\n handleEditTemplate,\n handleEditPrintData,\n handleExportFile,\n handleImportFile,\n handlePreview,\n }\n },\n})\n</script>\n","<template>\n <div class=\"svp-ruler\">\n <div class=\"svp-ruler-corner\" />\n <div class=\"svp-ruler-x\">\n <canvas ref=\"rulerXRef\" style=\"width:100%;height:100%;display:block\" />\n </div>\n <div class=\"svp-ruler-y\">\n <canvas ref=\"rulerYRef\" style=\"width:100%;height:100%;display:block\" />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, type PropType } from 'vue-demi'\nimport { useRuler } from '../composables/useRuler'\n\nexport default defineComponent({\n name: 'SvpRuler',\n props: {\n scroller: {\n type: Function as PropType<() => HTMLElement | null>,\n required: true,\n },\n },\n setup(props) {\n const rulerXRef = ref<HTMLCanvasElement | null>(null)\n const rulerYRef = ref<HTMLCanvasElement | null>(null)\n useRuler({\n canvasX: () => rulerXRef.value,\n canvasY: () => rulerYRef.value,\n scrollerEl: () => props.scroller(),\n })\n return { rulerXRef, rulerYRef }\n },\n})\n</script>\n","/**\n * Print-to-PDF plugin. Wires `hiprintTemplate.toPdf` so the `Preview` modal\n * can offer a \"Export PDF\" button. The user must supply jspdf + html2canvas\n * in their host project (peer dependencies), or override the implementation.\n */\nimport type { PluginFactory, PluginOptions } from '../../../src/types'\n\nexport interface PdfPluginOptions {\n filename?: string | ((data: any) => string)\n /**\n * Custom converter. If omitted we try `hiprintTemplate.toPdf` then jspdf.\n */\n convert?: (template: any, data: any) => Promise<void> | void\n}\n\nexport const pluginApiPdf: PluginFactory<PdfPluginOptions> = (opts = {}) => {\n const plugin: PluginOptions = {\n name: 'plugin-api-pdf',\n description: 'Exports the current template as a PDF document.',\n config: { ...opts },\n hooks: [\n {\n hook: 'ready',\n name: 'install-toPdf',\n priority: 100,\n run: (_utils: any) => {\n // Hook reserved for future extension.\n },\n },\n {\n hook: 'beforePrint2',\n name: 'export-pdf',\n priority: 100,\n run: async (tpl: any, utils: any, kind: string) => {\n if (kind !== 'pdf') return\n const data = utils?.printData ?? {}\n if (typeof opts.convert === 'function') {\n await opts.convert(tpl, data)\n return false\n }\n if (tpl && typeof tpl.toPdf === 'function') {\n const name = typeof opts.filename === 'function'\n ? opts.filename(data)\n : opts.filename ?? 'document'\n tpl.toPdf(data, name)\n return false\n }\n console.warn('[plugin-api-pdf] hiprintTemplate.toPdf not available; provide opts.convert')\n return undefined\n },\n },\n ],\n }\n return plugin\n}\n\nexport default pluginApiPdf\n","/**\n * Print-to-image plugin. Backs the Preview modal's \"Export image\" button.\n */\nimport type { PluginFactory, PluginOptions } from '../../../src/types'\n\nexport interface ImagePluginOptions {\n filename?: string | ((data: any) => string)\n type?: 'png' | 'jpeg'\n convert?: (template: any, data: any) => Promise<void> | void\n}\n\nexport const pluginApiImage: PluginFactory<ImagePluginOptions> = (opts = {}) => {\n const plugin: PluginOptions = {\n name: 'plugin-api-image',\n description: 'Exports the current template as PNG / JPEG.',\n config: { type: 'png', ...opts },\n hooks: [\n {\n hook: 'beforePrint2',\n name: 'export-image',\n priority: 100,\n run: async (tpl: any, utils: any, kind: string) => {\n if (kind !== 'image') return\n const data = utils?.printData ?? {}\n if (typeof opts.convert === 'function') {\n await opts.convert(tpl, data)\n return false\n }\n if (tpl && typeof tpl.toImage === 'function') {\n const name = typeof opts.filename === 'function'\n ? opts.filename(data)\n : opts.filename ?? 'image'\n tpl.toImage(data, name, opts.type ?? 'png')\n return false\n }\n console.warn('[plugin-api-image] hiprintTemplate.toImage not available; provide opts.convert')\n return undefined\n },\n },\n ],\n }\n return plugin\n}\n\nexport default pluginApiImage\n","/**\n * Code editor plugin. Pops up a textarea (Monaco is opt-in via `editor`)\n * whenever a property exposes a `function` editor (e.g. `formatter`).\n *\n * Plugin authors can swap the editor by passing a custom `editor` callback\n * that receives the current source and resolves with the next source.\n */\nimport type { PluginFactory, PluginOptions } from '../../../src/types'\n\nexport interface CodeEditPluginOptions {\n editor?: (source: string, ctx: { name: string }) => Promise<string | null>\n}\n\nfunction defaultEditor(source: string, ctx: { name: string }): Promise<string | null> {\n return new Promise((resolve) => {\n if (typeof window === 'undefined') return resolve(null)\n const mask = document.createElement('div')\n mask.className = 'svp-modal-mask'\n const modal = document.createElement('div')\n modal.className = 'svp-modal'\n modal.style.width = 'min(720px, 90vw)'\n modal.innerHTML = `\n <div class=\"svp-modal__header\">编辑 ${ctx.name}</div>\n <div class=\"svp-modal__body\" style=\"padding:0\">\n <textarea style=\"width:100%;height:50vh;border:0;padding:12px;font-family:Menlo,Consolas,monospace;font-size:12px;outline:none\"></textarea>\n </div>\n <div class=\"svp-modal__footer\">\n <button class=\"svp-btn\" data-act=\"cancel\">取消</button>\n <button class=\"svp-btn is-primary\" data-act=\"ok\">确定</button>\n </div>\n `\n const ta = modal.querySelector('textarea') as HTMLTextAreaElement\n ta.value = source\n function close(value: string | null) {\n document.body.removeChild(mask)\n resolve(value)\n }\n modal.addEventListener('click', (e) => {\n const t = e.target as HTMLElement\n if (t.dataset.act === 'cancel') close(null)\n else if (t.dataset.act === 'ok') close(ta.value)\n })\n mask.addEventListener('click', (e) => { if (e.target === mask) close(null) })\n mask.appendChild(modal)\n document.body.appendChild(mask)\n ta.focus()\n })\n}\n\nexport const pluginViewCodeEdit: PluginFactory<CodeEditPluginOptions> = (opts = {}) => {\n const editor = opts.editor ?? defaultEditor\n const plugin: PluginOptions = {\n name: 'plugin-view-code-edit',\n description: 'Provides a small in-browser editor for `function` options.',\n config: { ...opts } as Record<string, unknown>,\n hooks: [\n {\n hook: 'createPrintElement',\n name: 'editor-create-print-element',\n priority: 100,\n run: async (option: any, _printElement: any, _ev: any) => {\n if (!option || typeof option !== 'object') return\n if (option.type !== 'function' && option.editor !== 'code') return\n const next = await editor(String(option.value ?? ''), { name: option.name ?? 'function' })\n if (next == null) return\n option.value = next\n option?.onChange?.(next)\n },\n },\n ],\n }\n return plugin\n}\n\nexport default pluginViewCodeEdit\n","/**\n * vue3-print-designer — public entry.\n *\n * The package ships two builds (`dist/vue2/` and `dist/vue3/`); both compile\n * from this same source file thanks to `vue-demi`.\n */\nimport './core/register-icons'\nimport './styles/app.scss'\n\n// ---------------------------------------------------------------------------\n// Components\n// ---------------------------------------------------------------------------\nexport { default as Designer } from './components/Designer.vue'\nexport { default as Header } from './components/Header.vue'\nexport { default as Toolbar } from './components/Toolbar.vue'\nexport { default as Preview } from './components/Preview.vue'\nexport { default as Ruler } from './components/Ruler.vue'\nexport { default as DragBox } from './components/DragBox.vue'\nexport { default as SvpIcon } from './components/SvpIcon.vue'\n\nexport { default as DraggableElsPanel } from './components/panels/DraggableElsPanel.vue'\nexport { default as MiniMapPanel } from './components/panels/MiniMapPanel.vue'\nexport { default as PageStructurePanel } from './components/panels/PageStructurePanel.vue'\nexport { default as PageHistoryPanel } from './components/panels/PageHistoryPanel.vue'\nexport { default as PropertiesPanel } from './components/panels/PropertiesPanel.vue'\n\n// ---------------------------------------------------------------------------\n// Core APIs\n// ---------------------------------------------------------------------------\nexport { default as DesignerUtils } from './core/designer-utils'\nexport { PluginManager } from './core/plugins'\nexport { HistoryController } from './core/history'\nexport {\n HISTORY_MOVE,\n HISTORY_ALIGN,\n HISTORY_PARAM,\n HISTORY_INITIAL,\n normalizeHistoryLabel,\n} from './core/history-labels'\nexport { ShortcutsController } from './core/shortcuts'\nexport {\n hiprint,\n initHiprint,\n buildByHtml,\n defaultElementTypeProvider,\n} from './core/hiprint-bridge'\nexport { SvpElementTypeProvider } from './core/svp-element-provider'\nexport {\n applyStyleOption,\n resolveShowOption,\n DESIGNER_UI_INJECTION_KEY,\n} from './core/designer-options'\nexport {\n extractTemplateFields,\n buildPrintDataFromForm,\n createPrintDataFormState,\n type TemplateFieldSchema,\n type BasicFieldDef,\n type TableFieldDef,\n} from './core/template-fields'\nexport { headerElementsFromCatalogue } from './constants/header-elements'\nexport {\n DEFAULT_TABLE_COLUMNS,\n DEFAULT_TABLE_ELEMENT_TYPE,\n DEFAULT_TABLE_FIELDS,\n} from './constants/default-table-element'\nexport {\n designerStore,\n setZoom,\n setPanelVisibility,\n togglePanel,\n toggleAllPanels,\n setSelection,\n} from './core/stores'\nexport { readJSON, writeJSON, removeKey } from './core/storage'\n\n// ---------------------------------------------------------------------------\n// Composables\n// ---------------------------------------------------------------------------\nexport { useDesigner, provideDesigner, DESIGNER_INJECTION_KEY } from './composables/useDesigner'\nexport { useDesignerUi } from './composables/useDesignerUi'\nexport { useDragBox } from './composables/useDragBox'\nexport { useRuler } from './composables/useRuler'\n\n// ---------------------------------------------------------------------------\n// i18n\n// ---------------------------------------------------------------------------\nexport { useI18n, setLocale, getLocaleList } from './i18n'\nexport { default as zhCN } from './i18n/zh-CN'\nexport { default as enUS } from './i18n/en-US'\n\n// ---------------------------------------------------------------------------\n// Constants & types\n// ---------------------------------------------------------------------------\nexport * from './constants'\nexport * from './constants/icons'\nexport * from './types'\n\n// ---------------------------------------------------------------------------\n// Bundled plugin factories (also available as separate sub-packages)\n// ---------------------------------------------------------------------------\nexport { pluginApiPdf } from '../plugins/plugin-api-pdf/src'\nexport { pluginApiImage } from '../plugins/plugin-api-image/src'\nexport { pluginViewCodeEdit } from '../plugins/plugin-view-code-edit/src'\n\n/** Convenience Vue plugin: `app.use(Vue3PrintDesigner)`. */\nimport type { App as Vue3App } from 'vue-demi'\nimport { Designer, Header, Toolbar, Preview, DragBox } from './index'\n\nexport default {\n install(app: Vue3App) {\n app.component('SvpDesigner', Designer)\n app.component('SvpHeader', Header)\n app.component('SvpToolbar', Toolbar)\n app.component('SvpPreview', Preview)\n app.component('SvpDragBox', DragBox)\n },\n}\n"],"names":["defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultExtendedIconProps","mergeIconTransformations","mergeIconData","getIconsTree","data","internalGetIconData","parseIconSet","callback","matchIconName","stringToIcon","validateIconName","optionalPropertyDefaults","checkOptionalProps","quicklyValidateIconSet","dataStorage","newStorage","getStorage","addIconSet","storage","addIconToStorage","simpleNames","allowSimpleNames","getIconData","addIcon","addCollection","defaultIconSizeCustomisations","defaultIconCustomisations","unitsSplit","unitsTest","calculateSize","isUnsetKeyword","iconToSVG","regex","randomPrefix","counter","replaceIDs","browserStorageConfig","browserStorageEmptyItems","browserStorageStatus","setBrowserStorageStatus","browserCacheVersion","browserCachePrefix","browserCacheCountKey","browserCacheVersionKey","browserStorageHour","browserStorageCacheExpiration","getStoredItem","setStoredItem","removeStoredItem","setBrowserStorageItemsCount","getBrowserStorageItemsCount","_window","getBrowserStorage","iterateBrowserStorage","index","initBrowserStorage","setAPIModule","getAPIModule","createAPIConfig","configStorage","fallBackAPISources","fallBackAPI","addAPIProvider","getAPIConfig","detectFetch","fetchModule","calculateMaxLength","shouldAbort","prepare","getPath","send","fetchAPIModule","sortIcons","removeCallback","updateCallbacks","idCounter","storeCallback","listToIcons","defaultConfig","sendQuery","initRedundancy","emptyCallback$1","redundancyCache","getRedundancyCache","sendAPIQuery","updateLastModified","storeInBrowserStorage","emptyCallback","loadedNewIcons","loadNewIcons","loadIcons","mergeCustomisations","defaultExtendedIconCustomisations","node","observer","rotateFromString","separator","flipFromString","nodes","getIcon","render","alignCenter","alignCenterVertical","alignEndVertical","alignJustify","alignLeft","alignRight","alignStartVertical","arrowDown","arrowDownToLine","arrowUp","arrowUpToLine","barcode","bold","boxes","chevronDown","circle","clipboardPaste","code2","copy","copyPlus","eraser","eye","flipHorizontal","flipVertical","history","image","layoutGrid","listTree","lock","minus","panelLeft","plus","qrCode","redo2","rotateCw","save","scissors","scanEye","separatorHorizontal","separatorVertical","slidersHorizontal","square","table","trash2","typeIcon","undo2","unlock","x","zoomIn","zoomOut","move","pencilLine","alignHorizontalDistributeCenter","_a","combo","storeSetZoom","_b","_d","_c","_openBlock","_createElementBlock","_normalizeClass","_normalizeStyle","_hoisted_1","_createVNode","_hoisted_2","_hoisted_5","_hoisted_13","_createElementVNode","_renderSlot","_hoisted_3","_createCommentVNode","_hoisted_4","_toDisplayString","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_Fragment","_renderList","_createBlock","_hoisted_12","_","safeStringify","_withDirectives","_vModelText","_createTextVNode","selector","_vShow","_withModifiers"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,81]}
1
+ {"version":3,"file":"index.mjs","sources":["../../node_modules/@iconify/iconify/dist/iconify.mjs","../../node_modules/@iconify-icons/lucide/align-center.js","../../node_modules/@iconify-icons/lucide/align-center-vertical.js","../../node_modules/@iconify-icons/lucide/align-end-vertical.js","../../node_modules/@iconify-icons/lucide/align-justify.js","../../node_modules/@iconify-icons/lucide/align-left.js","../../node_modules/@iconify-icons/lucide/align-right.js","../../node_modules/@iconify-icons/lucide/align-start-vertical.js","../../node_modules/@iconify-icons/lucide/arrow-down.js","../../node_modules/@iconify-icons/lucide/arrow-down-to-line.js","../../node_modules/@iconify-icons/lucide/arrow-up.js","../../node_modules/@iconify-icons/lucide/arrow-up-to-line.js","../../node_modules/@iconify-icons/lucide/barcode.js","../../node_modules/@iconify-icons/lucide/bold.js","../../node_modules/@iconify-icons/lucide/boxes.js","../../node_modules/@iconify-icons/lucide/chevron-down.js","../../node_modules/@iconify-icons/lucide/circle.js","../../node_modules/@iconify-icons/lucide/clipboard-paste.js","../../node_modules/@iconify-icons/lucide/code-2.js","../../node_modules/@iconify-icons/lucide/copy.js","../../node_modules/@iconify-icons/lucide/copy-plus.js","../../node_modules/@iconify-icons/lucide/eraser.js","../../node_modules/@iconify-icons/lucide/eye.js","../../node_modules/@iconify-icons/lucide/flip-horizontal.js","../../node_modules/@iconify-icons/lucide/flip-vertical.js","../../node_modules/@iconify-icons/lucide/history.js","../../node_modules/@iconify-icons/lucide/image.js","../../node_modules/@iconify-icons/lucide/layout-grid.js","../../node_modules/@iconify-icons/lucide/list-tree.js","../../node_modules/@iconify-icons/lucide/lock.js","../../node_modules/@iconify-icons/lucide/minus.js","../../node_modules/@iconify-icons/lucide/panel-left.js","../../node_modules/@iconify-icons/lucide/plus.js","../../node_modules/@iconify-icons/lucide/qr-code.js","../../node_modules/@iconify-icons/lucide/redo-2.js","../../node_modules/@iconify-icons/lucide/rotate-cw.js","../../node_modules/@iconify-icons/lucide/save.js","../../node_modules/@iconify-icons/lucide/scan-eye.js","../../node_modules/@iconify-icons/lucide/scissors.js","../../node_modules/@iconify-icons/lucide/separator-horizontal.js","../../node_modules/@iconify-icons/lucide/separator-vertical.js","../../node_modules/@iconify-icons/lucide/sliders-horizontal.js","../../node_modules/@iconify-icons/lucide/square.js","../../node_modules/@iconify-icons/lucide/table.js","../../node_modules/@iconify-icons/lucide/trash-2.js","../../node_modules/@iconify-icons/lucide/type.js","../../node_modules/@iconify-icons/lucide/undo-2.js","../../node_modules/@iconify-icons/lucide/unlock.js","../../node_modules/@iconify-icons/lucide/x.js","../../node_modules/@iconify-icons/lucide/zoom-in.js","../../node_modules/@iconify-icons/lucide/zoom-out.js","../../node_modules/@iconify-icons/lucide/move.js","../../node_modules/@iconify-icons/lucide/pencil-line.js","../../node_modules/@iconify-icons/lucide/align-horizontal-distribute-center.js","../../src/core/register-icons.ts","../../src/constants/icons.ts","../../src/constants.ts","../../src/core/hiprint-paper-list.ts","../../src/constants/default-table-element.ts","../../src/types.ts","../../src/core/svp-element-provider.ts","../../src/core/providers.ts","../../src/core/hiprint-bridge.ts","../../src/core/print-client.ts","../../src/core/preview-html.ts","../../src/core/batch-print.ts","../../src/core/plugins.ts","../../src/core/stores.ts","../../src/core/history-labels.ts","../../src/core/history.ts","../../src/core/shortcuts.ts","../../src/core/storage.ts","../../src/core/json-editor-modal.ts","../../src/core/template-fields.ts","../../src/i18n/zh-CN.ts","../../src/i18n/en-US.ts","../../src/i18n/index.ts","../../src/core/designer-utils.ts","../../src/composables/useDesigner.ts","../../src/composables/useRuler.ts","../../src/core/theme.ts","../../src/constants/panel-layout.ts","../../src/core/designer-options.ts","../../src/constants/header-elements.ts","../../node_modules/@iconify/vue2/dist/iconify.mjs","../../src/components/SvpIcon.vue","../../src/components/Header.vue","../../src/composables/useDesignerUi.ts","../../src/components/Toolbar.vue","../../src/components/Preview.vue","../../src/components/JsonEditorModal.vue","../../src/components/PrintDataEditorModal.vue","../../src/composables/useDragBox.ts","../../src/components/DragBox.vue","../../src/components/panels/DraggableElsPanel.vue","../../src/components/panels/MiniMapPanel.vue","../../src/components/panels/PageStructurePanel.vue","../../src/components/panels/PageHistoryPanel.vue","../../src/components/panels/PropertiesPanel.vue","../../src/components/Designer.vue","../../src/components/Ruler.vue","../../plugins/plugin-api-pdf/src/index.ts","../../plugins/plugin-api-image/src/index.ts","../../plugins/plugin-view-code-edit/src/index.ts","../../src/index.ts"],"sourcesContent":["/**\n* (c) Iconify\n*\n* For the full copyright and license information, please view the license.txt or license.gpl.txt\n* files at https://github.com/iconify/iconify\n*\n* Licensed under MIT.\n*\n* @license MIT\n* @version 3.1.1\n*/\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n const colonSeparated = value.split(\":\");\n if (value.slice(0, 1) === \"@\") {\n if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n return null;\n }\n provider = colonSeparated.shift().slice(1);\n }\n if (colonSeparated.length > 3 || !colonSeparated.length) {\n return null;\n }\n if (colonSeparated.length > 1) {\n const name2 = colonSeparated.pop();\n const prefix = colonSeparated.pop();\n const result = {\n // Allow provider without '@': \"provider:prefix:name\"\n provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n prefix,\n name: name2\n };\n return validate && !validateIconName(result) ? null : result;\n }\n const name = colonSeparated[0];\n const dashSeparated = name.split(\"-\");\n if (dashSeparated.length > 1) {\n const result = {\n provider,\n prefix: dashSeparated.shift(),\n name: dashSeparated.join(\"-\")\n };\n return validate && !validateIconName(result) ? null : result;\n }\n if (allowSimpleName && provider === \"\") {\n const result = {\n provider,\n prefix: \"\",\n name\n };\n return validate && !validateIconName(result, allowSimpleName) ? null : result;\n }\n return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n if (!icon) {\n return false;\n }\n return !!((icon.provider === \"\" || icon.provider.match(matchIconName)) && (allowSimpleName && icon.prefix === \"\" || icon.prefix.match(matchIconName)) && icon.name.match(matchIconName));\n};\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n return data;\n}\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n return {\n provider,\n prefix,\n icons: /* @__PURE__ */ Object.create(null),\n missing: /* @__PURE__ */ new Set()\n };\n}\nfunction getStorage(provider, prefix) {\n const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n if (!quicklyValidateIconSet(data)) {\n return [];\n }\n return parseIconSet(data, (name, icon) => {\n if (icon) {\n storage.icons[name] = icon;\n } else {\n storage.missing.add(name);\n }\n });\n}\nfunction addIconToStorage(storage, name, icon) {\n try {\n if (typeof icon.body === \"string\") {\n storage.icons[name] = { ...icon };\n return true;\n }\n } catch (err) {\n }\n return false;\n}\nfunction listIcons(provider, prefix) {\n let allIcons = [];\n const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n providers.forEach((provider2) => {\n const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n prefixes.forEach((prefix2) => {\n const storage = getStorage(provider2, prefix2);\n allIcons = allIcons.concat(\n Object.keys(storage.icons).map(\n (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n )\n );\n });\n });\n return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n if (typeof allow === \"boolean\") {\n simpleNames = allow;\n }\n return simpleNames;\n}\nfunction getIconData(name) {\n const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n if (icon) {\n const storage = getStorage(icon.provider, icon.prefix);\n const iconName = icon.name;\n return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n }\n}\nfunction addIcon(name, data) {\n const icon = stringToIcon(name, true, simpleNames);\n if (!icon) {\n return false;\n }\n const storage = getStorage(icon.provider, icon.prefix);\n return addIconToStorage(storage, icon.name, data);\n}\nfunction addCollection(data, provider) {\n if (typeof data !== \"object\") {\n return false;\n }\n if (typeof provider !== \"string\") {\n provider = data.provider || \"\";\n }\n if (simpleNames && !provider && !data.prefix) {\n let added = false;\n if (quicklyValidateIconSet(data)) {\n data.prefix = \"\";\n parseIconSet(data, (name, icon) => {\n if (icon && addIcon(name, icon)) {\n added = true;\n }\n });\n }\n return added;\n }\n const prefix = data.prefix;\n if (!validateIconName({\n provider,\n prefix,\n name: \"a\"\n })) {\n return false;\n }\n const storage = getStorage(provider, prefix);\n return !!addIconSet(storage, data);\n}\nfunction iconExists(name) {\n return !!getIconData(name);\n}\nfunction getIcon(name) {\n const result = getIconData(name);\n return result ? {\n ...defaultIconProps,\n ...result\n } : null;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n // Dimensions\n ...defaultIconSizeCustomisations,\n // Transformations\n ...defaultIconTransformations\n});\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = '<g transform=\"' + transformations.join(\" \") + '\">' + body + \"</g>\";\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const attributes = {};\n const setAttr = (prop, value) => {\n if (!isUnsetKeyword(value)) {\n attributes[prop] = value.toString();\n }\n };\n setAttr(\"width\", width);\n setAttr(\"height\", height);\n attributes.viewBox = box.left.toString() + \" \" + box.top.toString() + \" \" + boxWidth.toString() + \" \" + boxHeight.toString();\n return {\n attributes,\n body\n };\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n // Allowed characters before id: [#;\"]\n // Allowed characters after id: [)\"], .[a-z]\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + suffix + \"$3\"\n );\n });\n body = body.replace(new RegExp(suffix, \"g\"), \"\");\n return body;\n}\n\nconst browserStorageConfig = {\n local: true,\n session: true\n};\nconst browserStorageEmptyItems = {\n local: /* @__PURE__ */ new Set(),\n session: /* @__PURE__ */ new Set()\n};\nlet browserStorageStatus = false;\nfunction setBrowserStorageStatus(status) {\n browserStorageStatus = status;\n}\n\nconst browserCacheVersion = \"iconify2\";\nconst browserCachePrefix = \"iconify\";\nconst browserCacheCountKey = browserCachePrefix + \"-count\";\nconst browserCacheVersionKey = browserCachePrefix + \"-version\";\nconst browserStorageHour = 36e5;\nconst browserStorageCacheExpiration = 168;\n\nfunction getStoredItem(func, key) {\n try {\n return func.getItem(key);\n } catch (err) {\n }\n}\nfunction setStoredItem(func, key, value) {\n try {\n func.setItem(key, value);\n return true;\n } catch (err) {\n }\n}\nfunction removeStoredItem(func, key) {\n try {\n func.removeItem(key);\n } catch (err) {\n }\n}\n\nfunction setBrowserStorageItemsCount(storage, value) {\n return setStoredItem(storage, browserCacheCountKey, value.toString());\n}\nfunction getBrowserStorageItemsCount(storage) {\n return parseInt(getStoredItem(storage, browserCacheCountKey)) || 0;\n}\n\nlet _window = typeof window === \"undefined\" ? {} : window;\nfunction getBrowserStorage(key) {\n const attr = key + \"Storage\";\n try {\n if (_window && _window[attr] && typeof _window[attr].length === \"number\") {\n return _window[attr];\n }\n } catch (err) {\n }\n browserStorageConfig[key] = false;\n}\n\nfunction iterateBrowserStorage(key, callback) {\n const func = getBrowserStorage(key);\n if (!func) {\n return;\n }\n const version = getStoredItem(func, browserCacheVersionKey);\n if (version !== browserCacheVersion) {\n if (version) {\n const total2 = getBrowserStorageItemsCount(func);\n for (let i = 0; i < total2; i++) {\n removeStoredItem(func, browserCachePrefix + i.toString());\n }\n }\n setStoredItem(func, browserCacheVersionKey, browserCacheVersion);\n setBrowserStorageItemsCount(func, 0);\n return;\n }\n const minTime = Math.floor(Date.now() / browserStorageHour) - browserStorageCacheExpiration;\n const parseItem = (index) => {\n const name = browserCachePrefix + index.toString();\n const item = getStoredItem(func, name);\n if (typeof item !== \"string\") {\n return;\n }\n try {\n const data = JSON.parse(item);\n if (typeof data === \"object\" && typeof data.cached === \"number\" && data.cached > minTime && typeof data.provider === \"string\" && typeof data.data === \"object\" && typeof data.data.prefix === \"string\" && // Valid item: run callback\n callback(data, index)) {\n return true;\n }\n } catch (err) {\n }\n removeStoredItem(func, name);\n };\n let total = getBrowserStorageItemsCount(func);\n for (let i = total - 1; i >= 0; i--) {\n if (!parseItem(i)) {\n if (i === total - 1) {\n total--;\n setBrowserStorageItemsCount(func, total);\n } else {\n browserStorageEmptyItems[key].add(i);\n }\n }\n }\n}\n\nfunction initBrowserStorage() {\n if (browserStorageStatus) {\n return;\n }\n setBrowserStorageStatus(true);\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n const provider = item.provider;\n const prefix = iconSet.prefix;\n const storage = getStorage(\n provider,\n prefix\n );\n if (!addIconSet(storage, iconSet).length) {\n return false;\n }\n const lastModified = iconSet.lastModified || -1;\n storage.lastModifiedCached = storage.lastModifiedCached ? Math.min(storage.lastModifiedCached, lastModified) : lastModified;\n return true;\n });\n }\n}\n\nfunction toggleBrowserCache(storage, value) {\n switch (storage) {\n case \"local\":\n case \"session\":\n browserStorageConfig[storage] = value;\n break;\n case \"all\":\n for (const key in browserStorageConfig) {\n browserStorageConfig[key] = value;\n }\n break;\n }\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n return storage[provider] || storage[\"\"];\n}\n\nfunction createAPIConfig(source) {\n let resources;\n if (typeof source.resources === \"string\") {\n resources = [source.resources];\n } else {\n resources = source.resources;\n if (!(resources instanceof Array) || !resources.length) {\n return null;\n }\n }\n const result = {\n // API hosts\n resources,\n // Root path\n path: source.path || \"/\",\n // URL length limit\n maxURL: source.maxURL || 500,\n // Timeout before next host is used.\n rotate: source.rotate || 750,\n // Timeout before failing query.\n timeout: source.timeout || 5e3,\n // Randomise default API end point.\n random: source.random === true,\n // Start index\n index: source.index || 0,\n // Receive data after time out (used if time out kicks in first, then API module sends data anyway).\n dataAfterTimeout: source.dataAfterTimeout !== false\n };\n return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n \"https://api.simplesvg.com\",\n \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n if (fallBackAPISources.length === 1) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n if (Math.random() > 0.5) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n fallBackAPI.push(fallBackAPISources.pop());\n }\n }\n}\nconfigStorage[\"\"] = createAPIConfig({\n resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n const config = createAPIConfig(customConfig);\n if (config === null) {\n return false;\n }\n configStorage[provider] = config;\n return true;\n}\nfunction getAPIConfig(provider) {\n return configStorage[provider];\n}\nfunction listAPIProviders() {\n return Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n let callback;\n try {\n callback = fetch;\n if (typeof callback === \"function\") {\n return callback;\n }\n } catch (err) {\n }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n fetchModule = fetch2;\n}\nfunction getFetch() {\n return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n const config = getAPIConfig(provider);\n if (!config) {\n return 0;\n }\n let result;\n if (!config.maxURL) {\n result = 0;\n } else {\n let maxHostLength = 0;\n config.resources.forEach((item) => {\n const host = item;\n maxHostLength = Math.max(maxHostLength, host.length);\n });\n const url = prefix + \".json?icons=\";\n result = config.maxURL - maxHostLength - config.path.length - url.length;\n }\n return result;\n}\nfunction shouldAbort(status) {\n return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n const results = [];\n const maxLength = calculateMaxLength(provider, prefix);\n const type = \"icons\";\n let item = {\n type,\n provider,\n prefix,\n icons: []\n };\n let length = 0;\n icons.forEach((name, index) => {\n length += name.length + 1;\n if (length >= maxLength && index > 0) {\n results.push(item);\n item = {\n type,\n provider,\n prefix,\n icons: []\n };\n length = name.length;\n }\n item.icons.push(name);\n });\n results.push(item);\n return results;\n};\nfunction getPath(provider) {\n if (typeof provider === \"string\") {\n const config = getAPIConfig(provider);\n if (config) {\n return config.path;\n }\n }\n return \"/\";\n}\nconst send = (host, params, callback) => {\n if (!fetchModule) {\n callback(\"abort\", 424);\n return;\n }\n let path = getPath(params.provider);\n switch (params.type) {\n case \"icons\": {\n const prefix = params.prefix;\n const icons = params.icons;\n const iconsList = icons.join(\",\");\n const urlParams = new URLSearchParams({\n icons: iconsList\n });\n path += prefix + \".json?\" + urlParams.toString();\n break;\n }\n case \"custom\": {\n const uri = params.uri;\n path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n break;\n }\n default:\n callback(\"abort\", 400);\n return;\n }\n let defaultError = 503;\n fetchModule(host + path).then((response) => {\n const status = response.status;\n if (status !== 200) {\n setTimeout(() => {\n callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n });\n return;\n }\n defaultError = 501;\n return response.json();\n }).then((data) => {\n if (typeof data !== \"object\" || data === null) {\n setTimeout(() => {\n if (data === 404) {\n callback(\"abort\", data);\n } else {\n callback(\"next\", defaultError);\n }\n });\n return;\n }\n setTimeout(() => {\n callback(\"success\", data);\n });\n }).catch(() => {\n callback(\"next\", defaultError);\n });\n};\nconst fetchAPIModule = {\n prepare,\n send\n};\n\nfunction sortIcons(icons) {\n const result = {\n loaded: [],\n missing: [],\n pending: []\n };\n const storage = /* @__PURE__ */ Object.create(null);\n icons.sort((a, b) => {\n if (a.provider !== b.provider) {\n return a.provider.localeCompare(b.provider);\n }\n if (a.prefix !== b.prefix) {\n return a.prefix.localeCompare(b.prefix);\n }\n return a.name.localeCompare(b.name);\n });\n let lastIcon = {\n provider: \"\",\n prefix: \"\",\n name: \"\"\n };\n icons.forEach((icon) => {\n if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n return;\n }\n lastIcon = icon;\n const provider = icon.provider;\n const prefix = icon.prefix;\n const name = icon.name;\n const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n let list;\n if (name in localStorage.icons) {\n list = result.loaded;\n } else if (prefix === \"\" || localStorage.missing.has(name)) {\n list = result.missing;\n } else {\n list = result.pending;\n }\n const item = {\n provider,\n prefix,\n name\n };\n list.push(item);\n });\n return result;\n}\n\nfunction removeCallback(storages, id) {\n storages.forEach((storage) => {\n const items = storage.loaderCallbacks;\n if (items) {\n storage.loaderCallbacks = items.filter((row) => row.id !== id);\n }\n });\n}\nfunction updateCallbacks(storage) {\n if (!storage.pendingCallbacksFlag) {\n storage.pendingCallbacksFlag = true;\n setTimeout(() => {\n storage.pendingCallbacksFlag = false;\n const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n if (!items.length) {\n return;\n }\n let hasPending = false;\n const provider = storage.provider;\n const prefix = storage.prefix;\n items.forEach((item) => {\n const icons = item.icons;\n const oldLength = icons.pending.length;\n icons.pending = icons.pending.filter((icon) => {\n if (icon.prefix !== prefix) {\n return true;\n }\n const name = icon.name;\n if (storage.icons[name]) {\n icons.loaded.push({\n provider,\n prefix,\n name\n });\n } else if (storage.missing.has(name)) {\n icons.missing.push({\n provider,\n prefix,\n name\n });\n } else {\n hasPending = true;\n return true;\n }\n return false;\n });\n if (icons.pending.length !== oldLength) {\n if (!hasPending) {\n removeCallback([storage], item.id);\n }\n item.callback(\n icons.loaded.slice(0),\n icons.missing.slice(0),\n icons.pending.slice(0),\n item.abort\n );\n }\n });\n });\n }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n const id = idCounter++;\n const abort = removeCallback.bind(null, pendingSources, id);\n if (!icons.pending.length) {\n return abort;\n }\n const item = {\n id,\n icons,\n callback,\n abort\n };\n pendingSources.forEach((storage) => {\n (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n });\n return abort;\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n const result = [];\n list.forEach((item) => {\n const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n if (icon) {\n result.push(icon);\n }\n });\n return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n resources: [],\n index: 0,\n timeout: 2e3,\n rotate: 750,\n random: false,\n dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n const resourcesCount = config.resources.length;\n const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n let resources;\n if (config.random) {\n let list = config.resources.slice(0);\n resources = [];\n while (list.length > 1) {\n const nextIndex = Math.floor(Math.random() * list.length);\n resources.push(list[nextIndex]);\n list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n }\n resources = resources.concat(list);\n } else {\n resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n }\n const startTime = Date.now();\n let status = \"pending\";\n let queriesSent = 0;\n let lastError;\n let timer = null;\n let queue = [];\n let doneCallbacks = [];\n if (typeof done === \"function\") {\n doneCallbacks.push(done);\n }\n function resetTimer() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function abort() {\n if (status === \"pending\") {\n status = \"aborted\";\n }\n resetTimer();\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function subscribe(callback, overwrite) {\n if (overwrite) {\n doneCallbacks = [];\n }\n if (typeof callback === \"function\") {\n doneCallbacks.push(callback);\n }\n }\n function getQueryStatus() {\n return {\n startTime,\n payload,\n status,\n queriesSent,\n queriesPending: queue.length,\n subscribe,\n abort\n };\n }\n function failQuery() {\n status = \"failed\";\n doneCallbacks.forEach((callback) => {\n callback(void 0, lastError);\n });\n }\n function clearQueue() {\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function moduleResponse(item, response, data) {\n const isError = response !== \"success\";\n queue = queue.filter((queued) => queued !== item);\n switch (status) {\n case \"pending\":\n break;\n case \"failed\":\n if (isError || !config.dataAfterTimeout) {\n return;\n }\n break;\n default:\n return;\n }\n if (response === \"abort\") {\n lastError = data;\n failQuery();\n return;\n }\n if (isError) {\n lastError = data;\n if (!queue.length) {\n if (!resources.length) {\n failQuery();\n } else {\n execNext();\n }\n }\n return;\n }\n resetTimer();\n clearQueue();\n if (!config.random) {\n const index = config.resources.indexOf(item.resource);\n if (index !== -1 && index !== config.index) {\n config.index = index;\n }\n }\n status = \"completed\";\n doneCallbacks.forEach((callback) => {\n callback(data);\n });\n }\n function execNext() {\n if (status !== \"pending\") {\n return;\n }\n resetTimer();\n const resource = resources.shift();\n if (resource === void 0) {\n if (queue.length) {\n timer = setTimeout(() => {\n resetTimer();\n if (status === \"pending\") {\n clearQueue();\n failQuery();\n }\n }, config.timeout);\n return;\n }\n failQuery();\n return;\n }\n const item = {\n status: \"pending\",\n resource,\n callback: (status2, data) => {\n moduleResponse(item, status2, data);\n }\n };\n queue.push(item);\n queriesSent++;\n timer = setTimeout(execNext, config.rotate);\n query(resource, payload, item.callback);\n }\n setTimeout(execNext);\n return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n const config = {\n ...defaultConfig,\n ...cfg\n };\n let queries = [];\n function cleanup() {\n queries = queries.filter((item) => item().status === \"pending\");\n }\n function query(payload, queryCallback, doneCallback) {\n const query2 = sendQuery(\n config,\n payload,\n queryCallback,\n (data, error) => {\n cleanup();\n if (doneCallback) {\n doneCallback(data, error);\n }\n }\n );\n queries.push(query2);\n return query2;\n }\n function find(callback) {\n return queries.find((value) => {\n return callback(value);\n }) || null;\n }\n const instance = {\n query,\n find,\n setIndex: (index) => {\n config.index = index;\n },\n getIndex: () => config.index,\n cleanup\n };\n return instance;\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n if (!redundancyCache[provider]) {\n const config = getAPIConfig(provider);\n if (!config) {\n return;\n }\n const redundancy = initRedundancy(config);\n const cachedReundancy = {\n config,\n redundancy\n };\n redundancyCache[provider] = cachedReundancy;\n }\n return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n let redundancy;\n let send;\n if (typeof target === \"string\") {\n const api = getAPIModule(target);\n if (!api) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n send = api.send;\n const cached = getRedundancyCache(target);\n if (cached) {\n redundancy = cached.redundancy;\n }\n } else {\n const config = createAPIConfig(target);\n if (config) {\n redundancy = initRedundancy(config);\n const moduleKey = target.resources ? target.resources[0] : \"\";\n const api = getAPIModule(moduleKey);\n if (api) {\n send = api.send;\n }\n }\n }\n if (!redundancy || !send) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n return redundancy.query(query, send, callback)().abort;\n}\n\nfunction updateLastModified(storage, lastModified) {\n const lastValue = storage.lastModifiedCached;\n if (\n // Matches or newer\n lastValue && lastValue >= lastModified\n ) {\n return lastValue === lastModified;\n }\n storage.lastModifiedCached = lastModified;\n if (lastValue) {\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n return item.provider !== storage.provider || iconSet.prefix !== storage.prefix || iconSet.lastModified === lastModified;\n });\n }\n }\n return true;\n}\nfunction storeInBrowserStorage(storage, data) {\n if (!browserStorageStatus) {\n initBrowserStorage();\n }\n function store(key) {\n let func;\n if (!browserStorageConfig[key] || !(func = getBrowserStorage(key))) {\n return;\n }\n const set = browserStorageEmptyItems[key];\n let index;\n if (set.size) {\n set.delete(index = Array.from(set).shift());\n } else {\n index = getBrowserStorageItemsCount(func);\n if (!setBrowserStorageItemsCount(func, index + 1)) {\n return;\n }\n }\n const item = {\n cached: Math.floor(Date.now() / browserStorageHour),\n provider: storage.provider,\n data\n };\n return setStoredItem(\n func,\n browserCachePrefix + index.toString(),\n JSON.stringify(item)\n );\n }\n if (data.lastModified && !updateLastModified(storage, data.lastModified)) {\n return;\n }\n if (!Object.keys(data.icons).length) {\n return;\n }\n if (data.not_found) {\n data = Object.assign({}, data);\n delete data.not_found;\n }\n if (!store(\"local\")) {\n store(\"session\");\n }\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n if (!storage.iconsLoaderFlag) {\n storage.iconsLoaderFlag = true;\n setTimeout(() => {\n storage.iconsLoaderFlag = false;\n updateCallbacks(storage);\n });\n }\n}\nfunction loadNewIcons(storage, icons) {\n if (!storage.iconsToLoad) {\n storage.iconsToLoad = icons;\n } else {\n storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n }\n if (!storage.iconsQueueFlag) {\n storage.iconsQueueFlag = true;\n setTimeout(() => {\n storage.iconsQueueFlag = false;\n const { provider, prefix } = storage;\n const icons2 = storage.iconsToLoad;\n delete storage.iconsToLoad;\n let api;\n if (!icons2 || !(api = getAPIModule(provider))) {\n return;\n }\n const params = api.prepare(provider, prefix, icons2);\n params.forEach((item) => {\n sendAPIQuery(provider, item, (data) => {\n if (typeof data !== \"object\") {\n item.icons.forEach((name) => {\n storage.missing.add(name);\n });\n } else {\n try {\n const parsed = addIconSet(\n storage,\n data\n );\n if (!parsed.length) {\n return;\n }\n const pending = storage.pendingIcons;\n if (pending) {\n parsed.forEach((name) => {\n pending.delete(name);\n });\n }\n storeInBrowserStorage(storage, data);\n } catch (err) {\n console.error(err);\n }\n }\n loadedNewIcons(storage);\n });\n });\n });\n }\n}\nconst isPending = (icon) => {\n const storage = getStorage(\n icon.provider,\n icon.prefix\n );\n const pending = storage.pendingIcons;\n return !!(pending && pending.has(icon.name));\n};\nconst loadIcons = (icons, callback) => {\n const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n const sortedIcons = sortIcons(cleanedIcons);\n if (!sortedIcons.pending.length) {\n let callCallback = true;\n if (callback) {\n setTimeout(() => {\n if (callCallback) {\n callback(\n sortedIcons.loaded,\n sortedIcons.missing,\n sortedIcons.pending,\n emptyCallback\n );\n }\n });\n }\n return () => {\n callCallback = false;\n };\n }\n const newIcons = /* @__PURE__ */ Object.create(null);\n const sources = [];\n let lastProvider, lastPrefix;\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix } = icon;\n if (prefix === lastPrefix && provider === lastProvider) {\n return;\n }\n lastProvider = provider;\n lastPrefix = prefix;\n sources.push(getStorage(provider, prefix));\n const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n if (!providerNewIcons[prefix]) {\n providerNewIcons[prefix] = [];\n }\n });\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n if (!pendingQueue.has(name)) {\n pendingQueue.add(name);\n newIcons[provider][prefix].push(name);\n }\n });\n sources.forEach((storage) => {\n const { provider, prefix } = storage;\n if (newIcons[provider][prefix].length) {\n loadNewIcons(storage, newIcons[provider][prefix]);\n }\n });\n return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = (icon) => {\n return new Promise((fulfill, reject) => {\n const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n if (!iconObj) {\n reject(icon);\n return;\n }\n loadIcons([iconObj || icon], (loaded) => {\n if (loaded.length && iconObj) {\n const data = getIconData(iconObj);\n if (data) {\n fulfill({\n ...defaultIconProps,\n ...data\n });\n return;\n }\n }\n reject(icon);\n });\n });\n};\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n/**\n * Class names\n */\nconst blockClass = 'iconify';\nconst inlineClass = 'iconify-inline';\n/**\n * Names of properties to add to nodes\n */\nconst elementDataProperty = ('iconifyData' + Date.now());\n\n/**\n * List of root nodes\n */\nlet nodes = [];\n/**\n * Find node\n */\nfunction findRootNode(node) {\n for (let i = 0; i < nodes.length; i++) {\n const item = nodes[i];\n const root = typeof item.node === 'function' ? item.node() : item.node;\n if (root === node) {\n return item;\n }\n }\n}\n/**\n * Add extra root node\n */\nfunction addRootNode(root, autoRemove = false) {\n let node = findRootNode(root);\n if (node) {\n // Node already exist: switch type if needed\n if (node.temporary) {\n node.temporary = autoRemove;\n }\n return node;\n }\n // Create item, add it to list\n node = {\n node: root,\n temporary: autoRemove,\n };\n nodes.push(node);\n return node;\n}\n/**\n * Add document.body node\n */\nfunction addBodyNode() {\n if (document.documentElement) {\n return addRootNode(document.documentElement);\n }\n nodes.push({\n node: () => {\n return document.documentElement;\n },\n });\n}\n/**\n * Remove root node\n */\nfunction removeRootNode(root) {\n nodes = nodes.filter((node) => root !== node &&\n root !== (typeof node.node === 'function' ? node.node() : node.node));\n}\n/**\n * Get list of root nodes\n */\nfunction listRootNodes() {\n return nodes;\n}\n\n/**\n * Execute function when DOM is ready\n */\nfunction onReady(callback) {\n const doc = document;\n if (doc.readyState && doc.readyState !== 'loading') {\n callback();\n }\n else {\n doc.addEventListener('DOMContentLoaded', callback);\n }\n}\n\n/**\n * Callback\n */\nlet callback = null;\n/**\n * Parameters for mutation observer\n */\nconst observerParams = {\n childList: true,\n subtree: true,\n attributes: true,\n};\n/**\n * Queue DOM scan\n */\nfunction queueScan(node) {\n if (!node.observer) {\n return;\n }\n const observer = node.observer;\n if (!observer.pendingScan) {\n observer.pendingScan = setTimeout(() => {\n delete observer.pendingScan;\n if (callback) {\n callback(node);\n }\n });\n }\n}\n/**\n * Check mutations for added nodes\n */\nfunction checkMutations(node, mutations) {\n if (!node.observer) {\n return;\n }\n const observer = node.observer;\n if (!observer.pendingScan) {\n for (let i = 0; i < mutations.length; i++) {\n const item = mutations[i];\n if (\n // Check for added nodes\n (item.addedNodes && item.addedNodes.length > 0) ||\n // Check for icon or placeholder with modified attributes\n (item.type === 'attributes' &&\n item.target[elementDataProperty] !==\n void 0)) {\n if (!observer.paused) {\n queueScan(node);\n }\n return;\n }\n }\n }\n}\n/**\n * Start/resume observer\n */\nfunction continueObserving(node, root) {\n node.observer.instance.observe(root, observerParams);\n}\n/**\n * Start mutation observer\n */\nfunction startObserver(node) {\n let observer = node.observer;\n if (observer && observer.instance) {\n // Already started\n return;\n }\n const root = typeof node.node === 'function' ? node.node() : node.node;\n if (!root || !window) {\n // document.body is not available yet or window is missing\n return;\n }\n if (!observer) {\n observer = {\n paused: 0,\n };\n node.observer = observer;\n }\n // Create new instance, observe\n observer.instance = new window.MutationObserver(checkMutations.bind(null, node));\n continueObserving(node, root);\n // Scan immediately\n if (!observer.paused) {\n queueScan(node);\n }\n}\n/**\n * Start all observers\n */\nfunction startObservers() {\n listRootNodes().forEach(startObserver);\n}\n/**\n * Stop observer\n */\nfunction stopObserver(node) {\n if (!node.observer) {\n return;\n }\n const observer = node.observer;\n // Stop scan\n if (observer.pendingScan) {\n clearTimeout(observer.pendingScan);\n delete observer.pendingScan;\n }\n // Disconnect observer\n if (observer.instance) {\n observer.instance.disconnect();\n delete observer.instance;\n }\n}\n/**\n * Start observer when DOM is ready\n */\nfunction initObserver(cb) {\n const isRestart = callback !== null;\n if (callback !== cb) {\n // Change callback and stop all pending observers\n callback = cb;\n if (isRestart) {\n listRootNodes().forEach(stopObserver);\n }\n }\n if (isRestart) {\n // Restart instances\n startObservers();\n return;\n }\n // Start observers when document is ready\n onReady(startObservers);\n}\n/**\n * Pause observing node\n */\nfunction pauseObservingNode(node) {\n (node ? [node] : listRootNodes()).forEach((node) => {\n if (!node.observer) {\n node.observer = {\n paused: 1,\n };\n return;\n }\n const observer = node.observer;\n observer.paused++;\n if (observer.paused > 1 || !observer.instance) {\n return;\n }\n // Disconnect observer\n const instance = observer.instance;\n // checkMutations(node, instance.takeRecords());\n instance.disconnect();\n });\n}\n/**\n * Pause observer\n */\nfunction pauseObserver(root) {\n if (root) {\n const node = findRootNode(root);\n if (node) {\n pauseObservingNode(node);\n }\n }\n else {\n pauseObservingNode();\n }\n}\n/**\n * Resume observer\n */\nfunction resumeObservingNode(observer) {\n (observer ? [observer] : listRootNodes()).forEach((node) => {\n if (!node.observer) {\n // Start observer\n startObserver(node);\n return;\n }\n const observer = node.observer;\n if (observer.paused) {\n observer.paused--;\n if (!observer.paused) {\n // Start / resume\n const root = typeof node.node === 'function' ? node.node() : node.node;\n if (!root) {\n return;\n }\n else if (observer.instance) {\n continueObserving(node, root);\n }\n else {\n startObserver(node);\n }\n }\n }\n });\n}\n/**\n * Resume observer\n */\nfunction resumeObserver(root) {\n if (root) {\n const node = findRootNode(root);\n if (node) {\n resumeObservingNode(node);\n }\n }\n else {\n resumeObservingNode();\n }\n}\n/**\n * Observe node\n */\nfunction observe(root, autoRemove = false) {\n const node = addRootNode(root, autoRemove);\n startObserver(node);\n return node;\n}\n/**\n * Remove observed node\n */\nfunction stopObserving(root) {\n const node = findRootNode(root);\n if (node) {\n stopObserver(node);\n removeRootNode(root);\n }\n}\n\n/**\n * Compare props\n */\nfunction propsChanged(props1, props2) {\n if (props1.name !== props2.name || props1.mode !== props2.mode) {\n return true;\n }\n const customisations1 = props1.customisations;\n const customisations2 = props2.customisations;\n for (const key in defaultExtendedIconCustomisations) {\n if (customisations1[key] !== customisations2[key]) {\n return true;\n }\n }\n return false;\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\n/**\n * Size attributes\n */\nconst sizeAttributes = ['width', 'height'];\n/**\n * Boolean attributes\n */\nconst booleanAttributes = [\n 'inline',\n 'hFlip',\n 'vFlip',\n];\n/**\n * Get attribute value\n */\nfunction getBooleanAttribute(value, key) {\n if (value === key || value === 'true') {\n return true;\n }\n if (value === '' || value === 'false') {\n return false;\n }\n return null;\n}\n/**\n * Get element properties from HTML element\n */\nfunction getElementProps(element) {\n // Get icon name\n const name = element.getAttribute('data-icon');\n const icon = typeof name === 'string' && stringToIcon(name, true);\n if (!icon) {\n return null;\n }\n // Get defaults and inline\n const customisations = {\n ...defaultExtendedIconCustomisations,\n inline: element.classList && element.classList.contains(inlineClass),\n };\n // Get dimensions\n sizeAttributes.forEach((attr) => {\n const value = element.getAttribute('data-' + attr);\n if (value) {\n customisations[attr] = value;\n }\n });\n // Get rotation\n const rotation = element.getAttribute('data-rotate');\n if (typeof rotation === 'string') {\n customisations.rotate = rotateFromString(rotation);\n }\n // Get flip shorthand\n const flip = element.getAttribute('data-flip');\n if (typeof flip === 'string') {\n flipFromString(customisations, flip);\n }\n // Boolean attributes\n booleanAttributes.forEach((attr) => {\n const key = 'data-' + attr;\n const value = getBooleanAttribute(element.getAttribute(key), key);\n if (typeof value === 'boolean') {\n customisations[attr] = value;\n }\n });\n // Get render mode. Not checking actual value because incorrect values are treated as inline\n const mode = element.getAttribute('data-mode');\n return {\n name,\n icon,\n customisations,\n mode,\n };\n}\n\n/**\n * Selector combining class names and tags\n */\nconst selector = 'svg.' +\n blockClass +\n ', i.' +\n blockClass +\n ', span.' +\n blockClass +\n ', i.' +\n inlineClass +\n ', span.' +\n inlineClass;\n/**\n * Find all parent nodes in DOM\n */\nfunction scanRootNode(root) {\n const nodes = [];\n root.querySelectorAll(selector).forEach((node) => {\n // Get props, ignore SVG rendered outside of SVG framework\n const props = node[elementDataProperty] || node.tagName.toLowerCase() !== 'svg'\n ? getElementProps(node)\n : null;\n if (props) {\n nodes.push({\n node,\n props,\n });\n }\n });\n return nodes;\n}\n\nfunction iconToHTML(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nlet policy;\nfunction createPolicy() {\n try {\n policy = window.trustedTypes.createPolicy(\"iconify\", {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n createHTML: (s) => s\n });\n } catch (err) {\n policy = null;\n }\n}\nfunction cleanUpInnerHTML(html) {\n if (policy === void 0) {\n createPolicy();\n }\n return policy ? policy.createHTML(html) : html;\n}\n\n/**\n * Get classes to add from icon name\n */\nfunction iconClasses(iconName) {\n const classesToAdd = new Set(['iconify']);\n ['provider', 'prefix'].forEach((attr) => {\n if (iconName[attr]) {\n classesToAdd.add('iconify--' + iconName[attr]);\n }\n });\n return classesToAdd;\n}\n/**\n * Add classes to SVG, removing previously added classes, keeping custom classes\n */\nfunction applyClasses(svg, classes, previouslyAddedClasses, placeholder) {\n const svgClasses = svg.classList;\n // Copy classes from placeholder\n if (placeholder) {\n const placeholderClasses = placeholder.classList;\n Array.from(placeholderClasses).forEach((item) => {\n svgClasses.add(item);\n });\n }\n // Add new classes\n const addedClasses = [];\n classes.forEach((item) => {\n if (!svgClasses.contains(item)) {\n // Add new class\n svgClasses.add(item);\n addedClasses.push(item);\n }\n else if (previouslyAddedClasses.has(item)) {\n // Was added before: keep it\n addedClasses.push(item);\n }\n });\n // Remove previously added classes\n previouslyAddedClasses.forEach((item) => {\n if (!classes.has(item)) {\n // Class that was added before, but no longer needed\n svgClasses.remove(item);\n }\n });\n return addedClasses;\n}\n\n/**\n * Copy old styles, apply new styles\n */\nfunction applyStyle(svg, styles, previouslyAddedStyles) {\n const svgStyle = svg.style;\n // Remove previously added styles\n (previouslyAddedStyles || []).forEach((prop) => {\n svgStyle.removeProperty(prop);\n });\n // Apply new styles, ignoring styles that already exist\n const appliedStyles = [];\n for (const prop in styles) {\n if (!svgStyle.getPropertyValue(prop)) {\n appliedStyles.push(prop);\n svgStyle.setProperty(prop, styles[prop]);\n }\n }\n return appliedStyles;\n}\n\n/**\n * Render icon as inline SVG\n */\nfunction renderInlineSVG(element, props, iconData) {\n // Create placeholder. Why placeholder? innerHTML setter on SVG does not work in some environments.\n let span;\n try {\n span = document.createElement('span');\n }\n catch (err) {\n return element;\n }\n // Generate data to render\n const customisations = props.customisations;\n const renderData = iconToSVG(iconData, customisations);\n // Get old data\n const oldData = element[elementDataProperty];\n // Generate SVG\n const html = iconToHTML(replaceIDs(renderData.body), {\n 'aria-hidden': 'true',\n 'role': 'img',\n ...renderData.attributes,\n });\n span.innerHTML = cleanUpInnerHTML(html);\n // Get SVG element\n const svg = span.childNodes[0];\n // Add attributes\n const placeholderAttributes = element.attributes;\n for (let i = 0; i < placeholderAttributes.length; i++) {\n const item = placeholderAttributes.item(i);\n const name = item.name;\n if (name !== 'class' && !svg.hasAttribute(name)) {\n svg.setAttribute(name, item.value);\n }\n }\n // Add classes\n const classesToAdd = iconClasses(props.icon);\n const addedClasses = applyClasses(svg, classesToAdd, new Set(oldData && oldData.addedClasses), element);\n // Update style\n const addedStyles = applyStyle(svg, customisations.inline\n ? {\n 'vertical-align': '-0.125em',\n }\n : {}, oldData && oldData.addedStyles);\n // Add data to element\n const newData = {\n ...props,\n status: 'loaded',\n addedClasses,\n addedStyles,\n };\n svg[elementDataProperty] = newData;\n // Replace old element\n if (element.parentNode) {\n element.parentNode.replaceChild(svg, element);\n }\n return svg;\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToData(svg) {\n return \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\nfunction svgToURL(svg) {\n return 'url(\"' + svgToData(svg) + '\")';\n}\n\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n 'background-color': 'currentColor',\n};\nconst coloredProps = {\n 'background-color': 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n image: 'var(--svg)',\n repeat: 'no-repeat',\n size: '100% 100%',\n};\nconst propsToAddTo = {\n '-webkit-mask': monotoneProps,\n 'mask': monotoneProps,\n 'background': coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + '-' + prop] = propsToAdd[prop];\n }\n}\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon as inline SVG\n */\nfunction renderBackground(element, props, iconData, useMask) {\n // Generate data to render\n const customisations = props.customisations;\n const renderData = iconToSVG(iconData, customisations);\n const renderAttribs = renderData.attributes;\n // Get old data\n const oldData = element[elementDataProperty];\n // Generate SVG\n const html = iconToHTML(renderData.body, {\n ...renderAttribs,\n width: iconData.width + '',\n height: iconData.height + '',\n });\n // Add classes\n const classesToAdd = iconClasses(props.icon);\n const addedClasses = applyClasses(element, classesToAdd, new Set(oldData && oldData.addedClasses));\n // Update style\n const url = svgToURL(html);\n const newStyles = {\n '--svg': url,\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n };\n if (customisations.inline) {\n newStyles['vertical-align'] = '-0.125em';\n }\n const addedStyles = applyStyle(element, newStyles, oldData && oldData.addedStyles);\n // Add data to element\n const newData = {\n ...props,\n status: 'loaded',\n addedClasses,\n addedStyles,\n };\n element[elementDataProperty] = newData;\n return element;\n}\n\n/**\n * Flag to avoid scanning DOM too often\n */\nlet scanQueued = false;\n/**\n * Icons have been loaded\n */\nfunction checkPendingIcons() {\n if (!scanQueued) {\n scanQueued = true;\n setTimeout(() => {\n if (scanQueued) {\n scanQueued = false;\n scanDOM();\n }\n });\n }\n}\n/**\n * Scan node for placeholders\n */\nfunction scanDOM(rootNode, addTempNode = false) {\n // List of icons to load: [provider][prefix] = Set<name>\n const iconsToLoad = Object.create(null);\n function getIcon(icon, load) {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const storedIcon = storage.icons[name];\n if (storedIcon) {\n return {\n status: 'loaded',\n icon: storedIcon,\n };\n }\n if (storage.missing.has(name)) {\n return {\n status: 'missing',\n };\n }\n if (load && !isPending(icon)) {\n const providerIconsToLoad = iconsToLoad[provider] ||\n (iconsToLoad[provider] = Object.create(null));\n const set = providerIconsToLoad[prefix] ||\n (providerIconsToLoad[prefix] = new Set());\n set.add(name);\n }\n return {\n status: 'loading',\n };\n }\n // Parse all root nodes\n (rootNode ? [rootNode] : listRootNodes()).forEach((observedNode) => {\n const root = typeof observedNode.node === 'function'\n ? observedNode.node()\n : observedNode.node;\n if (!root || !root.querySelectorAll) {\n return;\n }\n // Track placeholders\n let hasPlaceholders = false;\n // Observer\n let paused = false;\n /**\n * Render icon\n */\n function render(element, props, iconData) {\n if (!paused) {\n paused = true;\n pauseObservingNode(observedNode);\n }\n if (element.tagName.toUpperCase() !== 'SVG') {\n // Check for one of style modes\n const mode = props.mode;\n const isMask = mode === 'mask' ||\n (mode === 'bg'\n ? false\n : mode === 'style'\n ? iconData.body.indexOf('currentColor') !== -1\n : null);\n if (typeof isMask === 'boolean') {\n renderBackground(element, props, {\n ...defaultIconProps,\n ...iconData,\n }, isMask);\n return;\n }\n }\n renderInlineSVG(element, props, iconData);\n }\n // Find all elements\n scanRootNode(root).forEach(({ node, props }) => {\n // Check if item already has props\n const oldData = node[elementDataProperty];\n if (!oldData) {\n // New icon without data\n const { status, icon } = getIcon(props.icon, true);\n if (icon) {\n // Ready to render!\n render(node, props, icon);\n return;\n }\n // Loading or missing\n hasPlaceholders = hasPlaceholders || status === 'loading';\n node[elementDataProperty] = {\n ...props,\n status,\n };\n return;\n }\n // Previously found icon\n let item;\n if (!propsChanged(oldData, props)) {\n // Props have not changed. Check status\n const oldStatus = oldData.status;\n if (oldStatus !== 'loading') {\n return;\n }\n item = getIcon(props.icon, false);\n if (!item.icon) {\n // Nothing to render\n oldData.status = item.status;\n return;\n }\n }\n else {\n // Properties have changed: load icon if name has changed\n item = getIcon(props.icon, oldData.name !== props.name);\n if (!item.icon) {\n // Cannot render icon: update status and props\n hasPlaceholders =\n hasPlaceholders || item.status === 'loading';\n Object.assign(oldData, {\n ...props,\n status: item.status,\n });\n return;\n }\n }\n // Re-render icon\n render(node, props, item.icon);\n });\n // Observed node stuff\n if (observedNode.temporary && !hasPlaceholders) {\n // Remove temporary node\n stopObserving(root);\n }\n else if (addTempNode && hasPlaceholders) {\n // Add new temporary node\n observe(root, true);\n }\n else if (paused && observedNode.observer) {\n // Resume observer\n resumeObservingNode(observedNode);\n }\n });\n // Load icons\n for (const provider in iconsToLoad) {\n const providerIconsToLoad = iconsToLoad[provider];\n for (const prefix in providerIconsToLoad) {\n const set = providerIconsToLoad[prefix];\n loadIcons(Array.from(set).map((name) => ({\n provider,\n prefix,\n name,\n })), checkPendingIcons);\n }\n }\n}\n/**\n * Scan node for placeholders\n */\nfunction scanElement(root) {\n // Add temporary node\n const node = findRootNode(root);\n if (!node) {\n scanDOM({\n node: root,\n temporary: true,\n }, true);\n }\n else {\n scanDOM(node);\n }\n}\n\nfunction generateIcon(name, customisations, returnString = false) {\n // Get icon data\n const iconData = getIconData(name);\n if (!iconData) {\n return null;\n }\n // Split name\n const iconName = stringToIcon(name);\n // Clean up customisations\n const changes = mergeCustomisations(defaultExtendedIconCustomisations, customisations || {});\n // Get data\n const result = renderInlineSVG(document.createElement('span'), {\n name,\n icon: iconName,\n customisations: changes,\n }, iconData);\n return returnString\n ? result.outerHTML\n : result;\n}\n/**\n * Get version\n */\nfunction getVersion() {\n return '3.1.1';\n}\n/**\n * Generate SVG element\n */\nfunction renderSVG(name, customisations) {\n return generateIcon(name, customisations, false);\n}\n/**\n * Generate SVG as string\n */\nfunction renderHTML(name, customisations) {\n return generateIcon(name, customisations, true);\n}\n/**\n * Get rendered icon as object that can be used to create SVG (use replaceIDs on body)\n */\nfunction renderIcon(name, customisations) {\n // Get icon data\n const iconData = getIconData(name);\n if (!iconData) {\n return null;\n }\n // Clean up customisations\n const changes = mergeCustomisations(defaultExtendedIconCustomisations, customisations || {});\n // Get data\n return iconToSVG(iconData, changes);\n}\n/**\n * Scan DOM\n */\nfunction scan(root) {\n if (root) {\n scanElement(root);\n }\n else {\n scanDOM();\n }\n}\n/**\n * Initialise stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // Add document.body node\n addBodyNode();\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Load observer and scan DOM on next tick\n setTimeout(() => {\n initObserver(scanDOM);\n scanDOM();\n });\n}\n\n/**\n * Enable cache\n */\nfunction enableCache(storage, enable) {\n toggleBrowserCache(storage, enable !== false);\n}\n/**\n * Disable cache\n */\nfunction disableCache(storage) {\n toggleBrowserCache(storage, true);\n}\n/**\n * Initialise stuff\n */\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // Set cache and load existing cache\n initBrowserStorage();\n const _window = window;\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (const key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n/**\n * Global variable\n */\nconst Iconify = {\n // IconifyAPIInternalFunctions\n _api,\n // IconifyAPIFunctions\n addAPIProvider,\n loadIcons,\n loadIcon,\n // IconifyStorageFunctions\n iconExists,\n getIcon,\n listIcons,\n addIcon,\n addCollection,\n // IconifyBuilderFunctions\n replaceIDs,\n calculateSize,\n buildIcon: iconToSVG,\n // IconifyCommonFunctions\n getVersion,\n renderSVG,\n renderHTML,\n renderIcon,\n scan,\n observe,\n stopObserving,\n pauseObserver,\n resumeObserver,\n // IconifyBrowserCacheFunctions\n enableCache,\n disableCache,\n};\n\nexport { _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, Iconify as default, disableCache, enableCache, getIcon, getVersion, iconExists, listIcons, loadIcon, loadIcons, observe, pauseObserver, renderHTML, renderIcon, renderSVG, replaceIDs, resumeObserver, scan, stopObserving };\n\n// Export to window or web worker\ntry {\n\tif (self.Iconify === void 0) {\n\t\tself.Iconify = Iconify;\n\t}\n} catch (err) {\n}\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M21 6H3m14 6H7m12 6H5\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 2v20M8 10H4a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h4m8 6h4a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-4M8 20H7a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2h1m8 0h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"16\\\" height=\\\"6\\\" x=\\\"2\\\" y=\\\"4\\\" rx=\\\"2\\\"/><rect width=\\\"9\\\" height=\\\"6\\\" x=\\\"9\\\" y=\\\"14\\\" rx=\\\"2\\\"/><path d=\\\"M22 22V2\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M3 6h18M3 12h18M3 18h18\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M21 6H3m12 6H3m14 6H3\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M21 6H3m18 6H9m12 6H7\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"9\\\" height=\\\"6\\\" x=\\\"6\\\" y=\\\"14\\\" rx=\\\"2\\\"/><rect width=\\\"16\\\" height=\\\"6\\\" x=\\\"6\\\" y=\\\"4\\\" rx=\\\"2\\\"/><path d=\\\"M2 2v20\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 5v14m7-7l-7 7l-7-7\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 17V3m-6 8l6 6l6-6m1 10H5\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m5 12l7-7l7 7m-7 7V5\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 3h14m-1 10l-6-6l-6 6m6-6v14\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M3 5v14M8 5v14m4-14v14m5-14v14m4-14v14\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M14 12a4 4 0 0 0 0-8H6v8m9 8a4 4 0 0 0 0-8H6v8Z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3l-4.03 2.42ZM7 16.5l-4.74-2.85M7 16.5l5-3m-5 3v5.17m5-8.17V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Zm5 3l-5-3m5 3l4.74-2.85M17 16.5v5.17\\\"/><path d=\\\"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3l5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8ZM12 8L7.26 5.15M12 8l4.74-2.85M12 13.5V8\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 9l6 6l6-6\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M15 2H9a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V3c0-.6-.4-1-1-1Z\\\"/><path d=\\\"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2M16 4h2a2 2 0 0 1 2 2v2m-9 6h10\\\"/><path d=\\\"m17 10l4 4l-4 4\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m18 16l4-4l-4-4M6 8l-4 4l4 4m8.5-12l-5 16\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M15 12v6m-3-3h6\\\"/><rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m7 21l-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21m9 0H7M5 11l9 9\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M2 12s3-7 10-7s10 7 10 7s-3 7-10 7s-10-7-10-7Z\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3m8-18h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3m-4-1v2m0-8v2m0-8v2m0-8v2\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M21 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v3m18 8v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3m1-4H2m8 0H8m8 0h-2m8 0h-2\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5m4-1v5l4 2\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><circle cx=\\\"9\\\" cy=\\\"9\\\" r=\\\"2\\\"/><path d=\\\"m21 15l-3.086-3.086a2 2 0 0 0-2.828 0L6 21\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"14\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"14\\\" y=\\\"14\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"3\\\" y=\\\"14\\\" rx=\\\"1\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12h-8m8-6H8m13 12h-8M3 6v4c0 1.1.9 2 2 2h3\\\"/><path d=\\\"M3 10v6c0 1.1.9 2 2 2h3\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"18\\\" height=\\\"11\\\" x=\\\"3\\\" y=\\\"11\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M7 11V7a5 5 0 0 1 10 0v4\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M9 3v18\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7v14\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"5\\\" height=\\\"5\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"5\\\" height=\\\"5\\\" x=\\\"16\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"5\\\" height=\\\"5\\\" x=\\\"3\\\" y=\\\"16\\\" rx=\\\"1\\\"/><path d=\\\"M21 16h-3a2 2 0 0 0-2 2v3m5 0v.01M12 7v3a2 2 0 0 1-2 2H7m-4 0h.01M12 3h.01M12 16v.01M16 12h1m4 0v.01M12 21v-1\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"m15 14l5-5l-5-5\\\"/><path d=\\\"M20 9H9.5A5.5 5.5 0 0 0 4 14.5v0A5.5 5.5 0 0 0 9.5 20H13\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\\\"/><path d=\\\"M21 3v5h-5\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\\\"/><path d=\\\"M17 21v-8H7v8M7 3v5h8\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M3 7V5a2 2 0 0 1 2-2h2m10 0h2a2 2 0 0 1 2 2v2m0 10v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"1\\\"/><path d=\\\"M5 12s2.5-5 7-5s7 5 7 5s-2.5 5-7 5s-7-5-7-5\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"/><path d=\\\"M8.12 8.12L12 12m8-8L8.12 15.88\\\"/><circle cx=\\\"6\\\" cy=\\\"18\\\" r=\\\"3\\\"/><path d=\\\"M14.8 14.8L20 20\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M3 12h18M8 8l4-4l4 4m0 8l-4 4l-4-4\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 3v18M8 8l-4 4l4 4m8 0l4-4l-4-4\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M21 4h-7m-4 0H3m18 8h-9m-4 0H3m18 8h-5m-4 0H3M14 2v4m-6 4v4m8 4v4\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" rx=\\\"2\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M12 3v18\\\"/><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M3 9h18M3 15h18\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M3 6h18m-2 0v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6m3 0V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2m-6 5v6m4-6v6\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M4 7V4h16v3M9 20h6M12 4v16\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M9 14L4 9l5-5\\\"/><path d=\\\"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5v0a5.5 5.5 0 0 1-5.5 5.5H11\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"18\\\" height=\\\"11\\\" x=\\\"3\\\" y=\\\"11\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M7 11V7a5 5 0 0 1 9.9-1\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M18 6L6 18M6 6l12 12\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M11 8v6m-3-3h6\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M8 11h6\\\"/></g>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m5 9l-3 3l3 3M9 5l3-3l3 3m0 14l-3 3l-3-3M19 9l3 3l-3 3M2 12h20M12 2v20\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 20h9M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1l1-4ZM15 5l3 3\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 24,\n\t\"height\": 24,\n\t\"body\": \"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"6\\\" height=\\\"14\\\" x=\\\"4\\\" y=\\\"5\\\" rx=\\\"2\\\"/><rect width=\\\"6\\\" height=\\\"10\\\" x=\\\"14\\\" y=\\\"7\\\" rx=\\\"2\\\"/><path d=\\\"M17 22v-5m0-10V2M7 22v-3M7 5V2\\\"/></g>\"\n};\nexport default data;\n","/**\n * Register Lucide icons for offline Iconify usage (no CDN fetch at runtime).\n */\nimport { addIcon } from '@iconify/iconify'\nimport type { IconifyIcon } from '@iconify/types'\n\nimport alignCenter from '@iconify-icons/lucide/align-center'\nimport alignCenterVertical from '@iconify-icons/lucide/align-center-vertical'\nimport alignEndVertical from '@iconify-icons/lucide/align-end-vertical'\nimport alignJustify from '@iconify-icons/lucide/align-justify'\nimport alignLeft from '@iconify-icons/lucide/align-left'\nimport alignRight from '@iconify-icons/lucide/align-right'\nimport alignStartVertical from '@iconify-icons/lucide/align-start-vertical'\nimport arrowDown from '@iconify-icons/lucide/arrow-down'\nimport arrowDownToLine from '@iconify-icons/lucide/arrow-down-to-line'\nimport arrowUp from '@iconify-icons/lucide/arrow-up'\nimport arrowUpToLine from '@iconify-icons/lucide/arrow-up-to-line'\nimport barcode from '@iconify-icons/lucide/barcode'\nimport bold from '@iconify-icons/lucide/bold'\nimport boxes from '@iconify-icons/lucide/boxes'\nimport chevronDown from '@iconify-icons/lucide/chevron-down'\nimport circle from '@iconify-icons/lucide/circle'\nimport clipboardPaste from '@iconify-icons/lucide/clipboard-paste'\nimport code2 from '@iconify-icons/lucide/code-2'\nimport copy from '@iconify-icons/lucide/copy'\nimport copyPlus from '@iconify-icons/lucide/copy-plus'\nimport eraser from '@iconify-icons/lucide/eraser'\nimport eye from '@iconify-icons/lucide/eye'\nimport flipHorizontal from '@iconify-icons/lucide/flip-horizontal'\nimport flipVertical from '@iconify-icons/lucide/flip-vertical'\nimport history from '@iconify-icons/lucide/history'\nimport image from '@iconify-icons/lucide/image'\nimport layoutGrid from '@iconify-icons/lucide/layout-grid'\nimport listTree from '@iconify-icons/lucide/list-tree'\nimport lock from '@iconify-icons/lucide/lock'\nimport minus from '@iconify-icons/lucide/minus'\nimport panelLeft from '@iconify-icons/lucide/panel-left'\nimport plus from '@iconify-icons/lucide/plus'\nimport qrCode from '@iconify-icons/lucide/qr-code'\nimport redo2 from '@iconify-icons/lucide/redo-2'\nimport rotateCw from '@iconify-icons/lucide/rotate-cw'\nimport save from '@iconify-icons/lucide/save'\nimport scanEye from '@iconify-icons/lucide/scan-eye'\nimport scissors from '@iconify-icons/lucide/scissors'\nimport separatorHorizontal from '@iconify-icons/lucide/separator-horizontal'\nimport separatorVertical from '@iconify-icons/lucide/separator-vertical'\nimport slidersHorizontal from '@iconify-icons/lucide/sliders-horizontal'\nimport square from '@iconify-icons/lucide/square'\nimport table from '@iconify-icons/lucide/table'\nimport trash2 from '@iconify-icons/lucide/trash-2'\nimport typeIcon from '@iconify-icons/lucide/type'\nimport undo2 from '@iconify-icons/lucide/undo-2'\nimport unlock from '@iconify-icons/lucide/unlock'\nimport x from '@iconify-icons/lucide/x'\nimport zoomIn from '@iconify-icons/lucide/zoom-in'\nimport zoomOut from '@iconify-icons/lucide/zoom-out'\nimport move from '@iconify-icons/lucide/move'\nimport pencilLine from '@iconify-icons/lucide/pencil-line'\nimport alignHorizontalDistributeCenter from '@iconify-icons/lucide/align-horizontal-distribute-center'\n\nfunction register(name: string, data: IconifyIcon) {\n addIcon(`lucide:${name}`, data)\n}\n\nregister('align-center', alignCenter)\nregister('align-center-vertical', alignCenterVertical)\nregister('align-end-vertical', alignEndVertical)\nregister('align-justify', alignJustify)\nregister('align-left', alignLeft)\nregister('align-right', alignRight)\nregister('align-start-vertical', alignStartVertical)\nregister('arrow-down', arrowDown)\nregister('arrow-down-to-line', arrowDownToLine)\nregister('arrow-up', arrowUp)\nregister('arrow-up-to-line', arrowUpToLine)\nregister('barcode', barcode)\nregister('bold', bold)\nregister('boxes', boxes)\nregister('chevron-down', chevronDown)\nregister('circle', circle)\nregister('clipboard-paste', clipboardPaste)\nregister('code-2', code2)\nregister('copy', copy)\nregister('copy-plus', copyPlus)\nregister('eraser', eraser)\nregister('eye', eye)\nregister('flip-horizontal', flipHorizontal)\nregister('flip-vertical', flipVertical)\nregister('history', history)\nregister('image', image)\nregister('layout-grid', layoutGrid)\nregister('list-tree', listTree)\nregister('lock', lock)\nregister('minus', minus)\nregister('panel-left', panelLeft)\nregister('plus', plus)\nregister('qr-code', qrCode)\nregister('redo-2', redo2)\nregister('rotate-cw', rotateCw)\nregister('save', save)\nregister('scissors', scissors)\nregister('scan-eye', scanEye)\nregister('separator-horizontal', separatorHorizontal)\nregister('separator-vertical', separatorVertical)\nregister('sliders-horizontal', slidersHorizontal)\nregister('square', square)\nregister('table', table)\nregister('trash-2', trash2)\nregister('type', typeIcon)\nregister('undo-2', undo2)\nregister('unlock', unlock)\nregister('x', x)\nregister('zoom-in', zoomIn)\nregister('zoom-out', zoomOut)\nregister('move', move)\nregister('pencil-line', pencilLine)\nregister('align-horizontal-distribute-center', alignHorizontalDistributeCenter)\n","/** Iconify icon ids (Lucide set). */\nexport const ICON_DELETE = 'lucide:trash-2'\n\nexport const TOOL_ICONS = {\n undo: 'lucide:undo-2',\n redo: 'lucide:redo-2',\n alignLeft: 'lucide:align-left',\n alignCenter: 'lucide:align-center',\n alignRight: 'lucide:align-right',\n alignTop: 'lucide:align-start-vertical',\n alignMiddle: 'lucide:align-center-vertical',\n alignBottom: 'lucide:align-end-vertical',\n moveTop: 'lucide:arrow-up-to-line',\n moveUp: 'lucide:arrow-up',\n moveDown: 'lucide:arrow-down',\n moveBottom: 'lucide:arrow-down-to-line',\n flipH: 'lucide:flip-horizontal',\n flipV: 'lucide:flip-vertical',\n fontInc: 'lucide:plus',\n fontDec: 'lucide:minus',\n fontBold: 'lucide:bold',\n fontUnbold: 'lucide:bold',\n lock: 'lucide:lock',\n unlock: 'lucide:unlock',\n clone: 'lucide:copy-plus',\n copy: 'lucide:copy',\n cut: 'lucide:scissors',\n paste: 'lucide:clipboard-paste',\n delete: ICON_DELETE,\n zoomOut: 'lucide:zoom-out',\n zoomIn: 'lucide:zoom-in',\n rotate: 'lucide:rotate-cw',\n clear: 'lucide:eraser',\n toggle: 'lucide:panel-left',\n} as const\n\nexport const PANEL_ICONS = {\n draggableEls: 'lucide:boxes',\n miniMap: 'lucide:scan-eye',\n pageStructure: 'lucide:list-tree',\n pageHistory: 'lucide:history',\n properties: 'lucide:sliders-horizontal',\n} as const\n\nexport const ELEMENT_ICON_NAMES: Record<string, string> = {\n text: 'lucide:type',\n image: 'lucide:image',\n barcode: 'lucide:barcode',\n qrcode: 'lucide:qr-code',\n longText: 'lucide:align-justify',\n table: 'lucide:table',\n html: 'lucide:code-2',\n pageBreak: 'lucide:separator-horizontal',\n hline: 'lucide:minus',\n vline: 'lucide:separator-vertical',\n rect: 'lucide:square',\n oval: 'lucide:circle',\n}\n\nexport const HEADER_TAB_ICONS: Record<string, string> = {\n base: 'lucide:layout-grid',\n text: ELEMENT_ICON_NAMES.text,\n image: ELEMENT_ICON_NAMES.image,\n qrcode: ELEMENT_ICON_NAMES.qrcode,\n barcode: ELEMENT_ICON_NAMES.barcode,\n longText: ELEMENT_ICON_NAMES.longText,\n table: ELEMENT_ICON_NAMES.table,\n html: ELEMENT_ICON_NAMES.html,\n}\n\nexport const UI_ICONS = {\n save: 'lucide:save',\n preview: 'lucide:eye',\n editTemplate: 'lucide:file-json-2',\n editPrintData: 'lucide:database',\n exportFile: 'lucide:download',\n importFile: 'lucide:upload',\n chevronDown: 'lucide:chevron-down',\n close: 'lucide:x',\n} as const\n\n/** Icons for normalized history step labels. */\nexport const HISTORY_ICONS: Record<string, string> = {\n 移动: 'lucide:move',\n 元素对齐: 'lucide:align-horizontal-distribute-center',\n 参数修改: 'lucide:pencil-line',\n 初始: 'lucide:history',\n 缩放: 'lucide:zoom-in',\n}\n\nexport function iconForHistoryLabel(label: string, rawType?: string): string {\n return HISTORY_ICONS[label] || (rawType && HISTORY_ICONS[rawType]) || HISTORY_ICONS['参数修改']\n}\n\nexport function isIconifyName(value: string): boolean {\n return !!value && !value.trim().startsWith('<')\n}\n\nexport function elementTypeKey(item: any): string {\n const type = String(item?.printElementType?.type || '')\n if (type && ELEMENT_ICON_NAMES[type]) return type\n const tid = String(item?.printElementType?.tid || '')\n const short = tid.split('.').pop() || type\n return short && ELEMENT_ICON_NAMES[short] ? short : 'text'\n}\n\nexport function iconForElement(item: any): string {\n return ELEMENT_ICON_NAMES[elementTypeKey(item)] || ELEMENT_ICON_NAMES.text\n}\n\nexport function iconForElementKey(key: string): string {\n return ELEMENT_ICON_NAMES[key] || ELEMENT_ICON_NAMES.text\n}\n\nexport function iconForHeaderTab(key: string): string {\n return HEADER_TAB_ICONS[key] || HEADER_TAB_ICONS.base\n}\n","import type { PaperType, ToolDescriptor } from './types'\nimport { PANEL_ICONS, TOOL_ICONS } from './constants/icons'\n\nexport const DESIGN_CONTAINER_ID = 'hiprint-printTemplate'\nexport const SETTING_CONTAINER_ID = 'PrintElementOptionSetting'\nexport const PAGINATION_CLASS = 'hiprint-printPagination'\nexport const PAGINATION_SELECTOR = `.${PAGINATION_CLASS}`\n\nexport const DRAGGABLE_ITEM_CLASS = 'ep-draggable-item'\n\n/** Empty hiprint template JSON used by the JSON editor reset action. */\nexport const EMPTY_TEMPLATE_JSON = { panels: [] as any[] }\n\n/** Canvas zoom limits (fraction of 100%). */\nexport const ZOOM_MIN = 0.1\nexport const ZOOM_MAX = 2\nexport const ZOOM_STEP = 0.1\n\n/** Standard ISO paper sizes (in mm). \"自定义\" (Custom) keeps the current size. */\nexport const DEFAULT_PAPER_LIST: PaperType[] = [\n { type: '自定义', width: 0, height: 0 },\n { type: 'A1', width: 594, height: 841 },\n { type: 'A2', width: 420, height: 594 },\n { type: 'A3', width: 297, height: 420 },\n { type: 'A4', width: 210, height: 297 },\n { type: 'A5', width: 148, height: 210 },\n { type: 'A6', width: 105, height: 148 },\n { type: 'A7', width: 74, height: 105 },\n { type: 'B1', width: 707, height: 1000 },\n { type: 'B2', width: 500, height: 707 },\n { type: 'B3', width: 353, height: 500 },\n { type: 'B4', width: 250, height: 353 },\n { type: 'B5', width: 176, height: 250 },\n { type: 'B6', width: 125, height: 176 },\n { type: 'B7', width: 88, height: 125 },\n]\n\nexport const DEFAULT_FONT_LIST = [\n { title: '默认', value: '' },\n { title: '微软雅黑', value: 'Microsoft YaHei' },\n { title: '黑体', value: 'STHeitiSC-Light' },\n { title: '思源黑体', value: 'SourceHanSansCN-Normal' },\n { title: '宋体', value: 'SimSun' },\n { title: '楷体', value: 'STKaiti' },\n { title: 'Arial', value: 'Arial' },\n { title: 'Tahoma', value: 'Tahoma' },\n]\n\n/** Default drag-element catalogue rendered inside the DraggableEls panel. */\nexport interface ElementCatalogueItem {\n group: string\n key: string\n label: string\n /** Maps to the `tid` consumed by hiprint provider. */\n tid: string\n /** Iconify icon id for the drag tile. */\n icon?: string\n}\n\nexport const DEFAULT_ELEMENT_CATALOGUE: ElementCatalogueItem[] = [\n { group: '常规', key: 'text', label: '文本', tid: 'defaultModule.text' },\n { group: '常规', key: 'image', label: '图片', tid: 'defaultModule.image' },\n { group: '常规', key: 'barcode', label: 'barcode', tid: 'defaultModule.barcode' },\n { group: '常规', key: 'qrcode', label: 'qrcode', tid: 'defaultModule.qrcode' },\n { group: '常规', key: 'table', label: '表格', tid: 'defaultModule.table' },\n { group: '常规', key: 'html', label: 'html', tid: 'defaultModule.html' },\n { group: '辅助', key: 'hline', label: '横线', tid: 'defaultModule.hline' },\n { group: '辅助', key: 'vline', label: '竖线', tid: 'defaultModule.vline' },\n { group: '辅助', key: 'rect', label: '矩形', tid: 'defaultModule.rect' },\n { group: '辅助', key: 'oval', label: '椭圆', tid: 'defaultModule.oval' },\n]\n\n/**\n * 28 toolbar actions as required by `print设计器功能.md`.\n * Click handlers are wired against DesignerUtils, see Toolbar.vue.\n */\nexport const DEFAULT_TOOLBAR: ToolDescriptor[] = [\n { key: 'undo', i18n: 'tool.undo', icon: TOOL_ICONS.undo },\n { key: 'redo', i18n: 'tool.redo', icon: TOOL_ICONS.redo },\n { key: 'sep1', icon: '', separator: true },\n { key: 'alignLeft', i18n: 'tool.alignLeft', icon: TOOL_ICONS.alignLeft, needSelection: true },\n { key: 'alignCenter', i18n: 'tool.alignCenter', icon: TOOL_ICONS.alignCenter, needSelection: true },\n { key: 'alignRight', i18n: 'tool.alignRight', icon: TOOL_ICONS.alignRight, needSelection: true },\n { key: 'alignTop', i18n: 'tool.alignTop', icon: TOOL_ICONS.alignTop, needSelection: true },\n { key: 'alignMiddle', i18n: 'tool.alignMiddle', icon: TOOL_ICONS.alignMiddle, needSelection: true },\n { key: 'alignBottom', i18n: 'tool.alignBottom', icon: TOOL_ICONS.alignBottom, needSelection: true },\n { key: 'sep2', icon: '', separator: true },\n { key: 'moveTop', i18n: 'tool.moveTop', icon: TOOL_ICONS.moveTop, needSelection: true },\n { key: 'moveUp', i18n: 'tool.moveUp', icon: TOOL_ICONS.moveUp, needSelection: true },\n { key: 'moveDown', i18n: 'tool.moveDown', icon: TOOL_ICONS.moveDown, needSelection: true },\n { key: 'moveBottom', i18n: 'tool.moveBottom', icon: TOOL_ICONS.moveBottom, needSelection: true },\n { key: 'sep3', icon: '', separator: true },\n { key: 'flipH', i18n: 'tool.flipH', icon: TOOL_ICONS.flipH, needSelection: true },\n { key: 'flipV', i18n: 'tool.flipV', icon: TOOL_ICONS.flipV, needSelection: true },\n { key: 'sep4', icon: '', separator: true },\n { key: 'fontInc', i18n: 'tool.fontInc', icon: TOOL_ICONS.fontInc, needSelection: true },\n { key: 'fontDec', i18n: 'tool.fontDec', icon: TOOL_ICONS.fontDec, needSelection: true },\n { key: 'fontBold', i18n: 'tool.fontBold', icon: TOOL_ICONS.fontBold, needSelection: true },\n { key: 'fontUnbold', i18n: 'tool.fontUnbold', icon: TOOL_ICONS.fontUnbold, needSelection: true },\n { key: 'sep5', icon: '', separator: true },\n { key: 'lockToggle', display: 'lockToggle', icon: '', needSelection: true },\n { key: 'clone', i18n: 'tool.clone', icon: TOOL_ICONS.clone, needSelection: true },\n { key: 'copy', i18n: 'tool.copy', icon: TOOL_ICONS.copy, needSelection: true },\n { key: 'cut', i18n: 'tool.cut', icon: TOOL_ICONS.cut, needSelection: true },\n { key: 'paste', i18n: 'tool.paste', icon: TOOL_ICONS.paste },\n { key: 'delete', i18n: 'tool.delete', icon: TOOL_ICONS.delete, needSelection: true },\n { key: 'sep6', icon: '', separator: true },\n { key: 'zoomOut', i18n: 'tool.zoomOut', icon: TOOL_ICONS.zoomOut },\n { key: 'zoomPercent', display: 'zoomPercent', icon: '' },\n { key: 'zoomIn', i18n: 'tool.zoomIn', icon: TOOL_ICONS.zoomIn },\n { key: 'rotate', i18n: 'tool.rotate', icon: TOOL_ICONS.rotate, needSelection: true },\n { key: 'clear', i18n: 'tool.clear', icon: TOOL_ICONS.clear },\n { key: 'spacer', icon: '', separator: true },\n { key: 'panelDraggableEls', i18n: 'panel.draggableEls', icon: PANEL_ICONS.draggableEls, panelKey: 'draggableEls' },\n { key: 'panelMiniMap', i18n: 'panel.miniMap', icon: PANEL_ICONS.miniMap, panelKey: 'miniMap' },\n { key: 'panelPageStructure', i18n: 'panel.pageStructure', icon: PANEL_ICONS.pageStructure, panelKey: 'pageStructure' },\n { key: 'panelPageHistory', i18n: 'panel.pageHistory', icon: PANEL_ICONS.pageHistory, panelKey: 'pageHistory' },\n { key: 'panelProperties', i18n: 'panel.properties', icon: PANEL_ICONS.properties, panelKey: 'properties' },\n { key: 'sepPanels', icon: '', separator: true },\n { key: 'togglePanels', i18n: 'tool.togglePanels', icon: TOOL_ICONS.toggle },\n { key: 'sepLang', icon: '', separator: true },\n { key: 'langSelect', display: 'langSelect', icon: '' },\n]\n\nexport const STORAGE_PREFIX = 'svp:'\n","import { hiprint } from './hiprint-bridge'\nimport { DEFAULT_PAPER_LIST, DESIGN_CONTAINER_ID, SETTING_CONTAINER_ID } from '../constants'\nimport type { PaperType } from '../types'\n\nexport interface PaperListValue {\n type: string\n width: number\n height: number\n}\n\nlet defaultPaperList: PaperType[] = DEFAULT_PAPER_LIST\nlet patched = false\nconst templateRegistry = new Map<string, any>()\n\nexport function registerPrintTemplate(tpl: any) {\n const id = tpl?.id ?? tpl?.templateId\n if (id != null) templateRegistry.set(String(id), tpl)\n}\n\nfunction getJQuery(): any {\n return (window as any).jQuery || (window as any).$\n}\n\nexport function nearMm(a: number, b: number, eps = 1.5): boolean {\n return Math.abs(a - b) <= eps\n}\n\nexport function detectPaperType(\n width: number,\n height: number,\n list: PaperType[] = defaultPaperList,\n): string {\n const match = list.find(\n (p) => p.width > 0 && (\n (nearMm(p.width, width) && nearMm(p.height, height))\n || (nearMm(p.width, height) && nearMm(p.height, width))\n ),\n )\n return match?.type || '自定义'\n}\n\nfunction resolveTemplate(tplId: string): any | null {\n const cached = templateRegistry.get(tplId)\n if (cached) return cached\n try {\n const lib = (hiprint as any)?.instance ?? (hiprint as any)\n return lib?.getPrintTemplateById?.(tplId) ?? null\n } catch {\n return null\n }\n}\n\nexport function getTemplatePaperList(tpl?: any): PaperType[] {\n if (tpl?.getPaperList) {\n try {\n const list = tpl.getPaperList()\n if (Array.isArray(list) && list.length) return list\n } catch { /* ignore */ }\n }\n return defaultPaperList\n}\n\nexport function applyPaperList(\n tpl: any,\n value: PaperListValue,\n onApplied?: () => void,\n) {\n if (!tpl?.setPaper || !value) return\n const list = getTemplatePaperList(tpl)\n try {\n const preset = value.type !== '自定义'\n ? list.find((p) => p.type === value.type && p.width > 0)\n : null\n if (preset) {\n tpl.setPaper(String(preset.width), String(preset.height))\n } else if (value.width > 0 && value.height > 0) {\n tpl.setPaper(String(value.width), String(value.height))\n } else {\n return\n }\n const panel = tpl.editingPanel\n if (panel) panel.paperType = value.type || '自定义'\n onApplied?.()\n } catch (e) {\n console.warn('[hiprint-paper-list] setPaper failed', e)\n }\n}\n\nfunction buildPaperListValue(panel: any, list: PaperType[]): PaperListValue {\n const width = Number(panel?.mmwidth ?? panel?.width ?? 0)\n const height = Number(panel?.mmheight ?? panel?.height ?? 0)\n return {\n type: detectPaperType(width, height, list),\n width,\n height,\n }\n}\n\n/** Hiprint panel option item — 纸张列表 + 宽 + 高 (mm). */\nfunction PaperListOptionItem(this: any) {\n this.name = 'paperList'\n}\n\nPaperListOptionItem.prototype.createTarget = function (printTemplate: any) {\n const $ = getJQuery()\n if (!$) return $('<div />')\n\n this.printTemplate = printTemplate\n const wrapper = $('<div class=\"svp-hiprint-paper-list\" />')\n\n const typeRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">纸张列表</div>\n <div class=\"hiprint-option-item-field\">\n <select class=\"auto-submit svp-paper-type\"></select>\n </div>\n </div>`)\n\n const widthRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">宽</div>\n <div class=\"hiprint-option-item-field\">\n <input class=\"auto-submit svp-paper-width\" type=\"number\" min=\"1\" placeholder=\"宽(mm)\" />\n </div>\n </div>`)\n\n const heightRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">高</div>\n <div class=\"hiprint-option-item-field\">\n <input class=\"auto-submit svp-paper-height\" type=\"number\" min=\"1\" placeholder=\"高(mm)\" />\n </div>\n </div>`)\n\n this.typeSelect = typeRow.find('select')\n this.widthInput = widthRow.find('input')\n this.heightInput = heightRow.find('input')\n\n const list = getTemplatePaperList(printTemplate)\n list.forEach((p) => {\n this.typeSelect.append(\n $('<option />').attr('value', p.type).text(p.type),\n )\n })\n\n this.typeSelect.on('change', () => {\n const preset = list.find((p) => p.type === this.typeSelect.val())\n if (preset && preset.width > 0) {\n this.widthInput.val(preset.width)\n this.heightInput.val(preset.height)\n }\n })\n\n wrapper.append(typeRow, widthRow, heightRow)\n this.target = wrapper\n return wrapper\n}\n\nPaperListOptionItem.prototype.getValue = function (): PaperListValue {\n return {\n type: String(this.typeSelect?.val() || '自定义'),\n width: Number(this.widthInput?.val()) || 0,\n height: Number(this.heightInput?.val()) || 0,\n }\n}\n\nPaperListOptionItem.prototype.setValue = function (value: PaperListValue) {\n if (!value) return\n const $ = getJQuery()\n if (!$) return\n const list = getTemplatePaperList(this.printTemplate)\n list.forEach((p) => {\n if (!this.typeSelect.find(`option[value=\"${p.type}\"]`).length) {\n this.typeSelect.append($('<option />').attr('value', p.type).text(p.type))\n }\n })\n this.typeSelect.val(value.type || detectPaperType(value.width, value.height, list))\n this.widthInput.val(value.width || '')\n this.heightInput.val(value.height || '')\n}\n\nPaperListOptionItem.prototype.destroy = function () {\n this.target?.remove?.()\n}\n\n/** Hiprint panel option item — 打印方向 + 提示文案. */\nfunction OrientOptionItem(this: any) {\n this.name = 'orient'\n}\n\nOrientOptionItem.prototype.createTarget = function () {\n const $ = getJQuery()\n if (!$) return $('<div />')\n\n const wrapper = $('<div class=\"svp-hiprint-orient\" />')\n wrapper.append(\n $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">打印方向</div>\n <div class=\"hiprint-option-item-field\">\n <select class=\"auto-submit\">\n <option value=\"\">默认</option>\n <option value=\"1\">纵向</option>\n <option value=\"2\">横向</option>\n </select>\n </div>\n </div>`),\n )\n wrapper.append(\n $('<div class=\"hiprint-option-item-desc\">(仅自定义纸质有效)</div>'),\n )\n this.target = wrapper\n return this.target\n}\n\nOrientOptionItem.prototype.getValue = function () {\n const val = this.target?.find?.('select')?.val?.()\n if (val === '' || val == null) return undefined\n return parseFloat(String(val))\n}\n\nOrientOptionItem.prototype.setValue = function (value: any) {\n this.target?.find?.('select')?.val?.(value ?? '')\n}\n\nOrientOptionItem.prototype.destroy = function () {\n this.target?.remove?.()\n}\n\nconst WATERMARK_TIME_FORMATS = [\n 'YYYY-MM-DD HH:mm:ss',\n 'YYYY-MM-DD HH:mm',\n 'YYYY-MM-DD HH',\n 'YYYY-MM-DD',\n 'YYYY-MMMM',\n 'YYYY-MM',\n 'YYYY',\n]\n\n/** Hiprint panel option item — 水印功能 (one label + control per row). */\nfunction WatermarkOptionItem(this: any) {\n this.name = 'watermarkOptions'\n}\n\nWatermarkOptionItem.prototype.createTarget = function () {\n const $ = getJQuery()\n if (!$) return $('<div />')\n\n const wrapper = $('<div class=\"svp-hiprint-watermark\" />')\n wrapper.append($('<div class=\"hiprint-option-title\">水印功能</div>'))\n\n const contentRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">水印内容</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"text\" class=\"auto-submit\" placeholder=\"水印内容\" />\n </div>\n </div>`)\n\n const fillStyleRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">字体颜色</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"text\" class=\"auto-submit\" data-format=\"rgb\" data-opacity=\"0.3\" placeholder=\"字体颜色\" />\n </div>\n </div>`)\n\n const fontSizeRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">字体大小</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"range\" class=\"auto-submit\" min=\"10\" max=\"80\" placeholder=\"字体大小\" />\n </div>\n </div>`)\n\n const rotateRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">旋转角度</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"range\" class=\"auto-submit\" min=\"0\" max=\"180\" placeholder=\"旋转角度\" />\n </div>\n </div>`)\n\n const widthRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">水平密度</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"range\" class=\"auto-submit\" min=\"100\" max=\"800\" placeholder=\"水平密度\" />\n </div>\n </div>`)\n\n const heightRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">垂直密度</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"range\" class=\"auto-submit\" min=\"100\" max=\"800\" placeholder=\"垂直密度\" />\n </div>\n </div>`)\n\n const timestampRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">水印时间</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"checkbox\" class=\"auto-submit\" placeholder=\"水印时间\" />\n </div>\n </div>`)\n\n const formatRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">时间格式</div>\n <div class=\"hiprint-option-item-field\">\n <select class=\"auto-submit\"></select>\n </div>\n </div>`)\n\n const formatSelect = formatRow.find('select')\n formatSelect.append($('<option value=\"\">默认(YYYY-MM-DD HH:mm)</option>'))\n WATERMARK_TIME_FORMATS.forEach((fmt) => {\n formatSelect.append($(`<option value=\"${fmt}\">${fmt}</option>`))\n })\n\n wrapper.append(\n contentRow,\n fillStyleRow,\n fontSizeRow,\n rotateRow,\n widthRow,\n heightRow,\n timestampRow,\n formatRow,\n )\n\n this.content = contentRow.find('input')\n this.fillStyle = fillStyleRow.find('input')\n this.fontSize = fontSizeRow.find('input')\n this.rotate = rotateRow.find('input')\n this.width = widthRow.find('input')\n this.height = heightRow.find('input')\n this.timestamp = timestampRow.find('input')\n this.format = formatSelect\n this.target = wrapper\n return this.target\n}\n\nWatermarkOptionItem.prototype.getValue = function () {\n const format = this.format?.val?.()\n return {\n content: this.content?.val?.() || '',\n fillStyle: this.fillStyle?.val?.() || 'rgba(184, 184, 184, 0.3)',\n fontSize: `${parseInt(String(this.fontSize?.val?.() || '14'), 10)}px`,\n rotate: parseInt(String(this.rotate?.val?.() || '25'), 10),\n width: parseInt(String(this.width?.val?.() || '200'), 10),\n height: parseInt(String(this.height?.val?.() || '200'), 10),\n timestamp: !!this.timestamp?.is?.(':checked'),\n format: format ? String(format) : 'YYYY-MM-DD HH:mm',\n }\n}\n\nWatermarkOptionItem.prototype.setValue = function (value: any) {\n if (!value) value = {}\n this.content?.val?.(value.content || '')\n this.fillStyle?.val?.(value.fillStyle || 'rgba(184, 184, 184, 0.3)')\n try {\n this.fillStyle?.minicolors?.({\n format: 'rgb',\n opacity: true,\n theme: 'bootstrap',\n })\n } catch { /* minicolors optional until plugin ready */ }\n\n const fontSize = parseInt(String(value.fontSize || '14').replace(/px$/i, ''), 10) || 14\n this.fontSize?.val?.(fontSize)\n this.rotate?.val?.(value.rotate ?? 25)\n this.width?.val?.(value.width ?? 200)\n this.height?.val?.(value.height ?? 200)\n this.timestamp?.prop?.('checked', value.timestamp != null ? !!value.timestamp : false)\n this.format?.val?.(value.format || 'YYYY-MM-DD HH:mm')\n}\n\nWatermarkOptionItem.prototype.destroy = function () {\n this.target?.remove?.()\n}\n\n/** Hiprint panel / element option — 背景颜色 (row + minicolors). */\nfunction PanelBackgroundColorOptionItem(this: any) {\n this.name = 'backgroundColor'\n}\n\nPanelBackgroundColorOptionItem.prototype.createTarget = function () {\n const $ = getJQuery()\n if (!$) return $('<div />')\n\n const row = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">背景颜色</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"text\" class=\"auto-submit\" />\n </div>\n </div>`)\n\n this.input = row.find('input')\n this.target = row\n return this.target\n}\n\nPanelBackgroundColorOptionItem.prototype.getValue = function () {\n const val = this.input?.val?.()\n return val ? String(val) : undefined\n}\n\nPanelBackgroundColorOptionItem.prototype.setValue = function (value: any) {\n const color = value || '#ffffff'\n try {\n this.input?.minicolors?.({\n defaultValue: color,\n theme: 'bootstrap',\n })\n } catch { /* minicolors optional until plugin ready */ }\n this.input?.val?.(color)\n}\n\nPanelBackgroundColorOptionItem.prototype.css = function (target: any, value: any) {\n const $ = getJQuery()\n if (!$ || !target?.length) return null\n if (value) {\n $(target).css('background-color', value)\n return `background-color:${value}`\n }\n target[0].style.backgroundColor = ''\n return null\n}\n\nPanelBackgroundColorOptionItem.prototype.destroy = function () {\n this.target?.remove?.()\n}\n\nexport function applyPanelBackgroundColor(panel: any, color?: string) {\n if (!panel) return\n const value = color || '#ffffff'\n panel.backgroundColor = value\n const $ = getJQuery()\n const paper = panel.designPaper?.target\n || panel.target?.find?.('.hiprint-printPaper')\n || ($ && panel.target ? $(panel.target).find('.hiprint-printPaper') : null)\n if (paper?.css) {\n paper.css('background-color', value)\n } else if (paper?.length && paper[0]?.style) {\n paper[0].style.backgroundColor = value\n }\n}\n\n/** Hiprint panel option item — 排列填充纸张. */\nfunction PanelLayoutOptionItem(this: any) {\n this.name = 'panelLayoutOptions'\n}\n\nPanelLayoutOptionItem.prototype.createTarget = function () {\n const $ = getJQuery()\n if (!$) return $('<div />')\n\n const wrapper = $('<div class=\"svp-hiprint-panel-layout\" />')\n wrapper.append($('<div class=\"hiprint-option-title\">排列填充纸张</div>'))\n wrapper.append(\n $('<div class=\"hiprint-option-item-desc svp-panel-layout-hint\">小模板传数组&填充纸张宽高打印</div>'),\n )\n\n const layoutTypeRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">排列方式</div>\n <div class=\"hiprint-option-item-field\">\n <select class=\"auto-submit\">\n <option value=\"column\">纵向</option>\n <option value=\"row\">横向</option>\n </select>\n </div>\n </div>`)\n\n const layoutRowGapRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">垂直间距</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"number\" class=\"auto-submit\" placeholder=\"垂直间距mm\" />\n </div>\n </div>`)\n\n const layoutColumnGapRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">水平间距</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"number\" class=\"auto-submit\" placeholder=\"水平间距mm\" />\n </div>\n </div>`)\n\n const paperWidthRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">纸张宽度</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"number\" class=\"auto-submit\" placeholder=\"纸张宽度mm\" />\n </div>\n </div>`)\n\n const paperHeightRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">纸张高度</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"number\" class=\"auto-submit\" placeholder=\"纸张高度mm\" />\n </div>\n </div>`)\n\n const paperStyleRow = $(`<div class=\"hiprint-option-item hiprint-option-item-row\">\n <div class=\"hiprint-option-item-label\">纸张样式</div>\n <div class=\"hiprint-option-item-field\">\n <input type=\"text\" class=\"auto-submit\" placeholder=\"align-content:center;justify-content:center\" />\n </div>\n </div>`)\n\n wrapper.append(\n layoutTypeRow,\n layoutRowGapRow,\n layoutColumnGapRow,\n paperWidthRow,\n paperHeightRow,\n paperStyleRow,\n )\n\n this.layoutType = layoutTypeRow.find('select')\n this.layoutRowGap = layoutRowGapRow.find('input')\n this.layoutColumnGap = layoutColumnGapRow.find('input')\n this.paperWidth = paperWidthRow.find('input')\n this.paperHeight = paperHeightRow.find('input')\n this.paperStyle = paperStyleRow.find('input')\n this.target = wrapper\n return this.target\n}\n\nPanelLayoutOptionItem.prototype.getValue = function () {\n const num = (el: any) => parseInt(String(el?.val?.() || 0), 10) || 0\n return {\n layoutType: this.layoutType?.val?.() || 'column',\n layoutRowGap: num(this.layoutRowGap),\n layoutColumnGap: num(this.layoutColumnGap),\n paperWidth: num(this.paperWidth),\n paperHeight: num(this.paperHeight),\n paperStyle: this.paperStyle?.val?.() || '',\n }\n}\n\nPanelLayoutOptionItem.prototype.setValue = function (value: any) {\n if (!value) return\n this.layoutType?.val?.(value.layoutType || 'column')\n this.layoutRowGap?.val?.(value.layoutRowGap ?? '')\n this.layoutColumnGap?.val?.(value.layoutColumnGap ?? '')\n this.paperWidth?.val?.(value.paperWidth ?? '')\n this.paperHeight?.val?.(value.paperHeight ?? '')\n this.paperStyle?.val?.(value.paperStyle ?? '')\n}\n\nPanelLayoutOptionItem.prototype.destroy = function () {\n this.target?.remove?.()\n}\n\nfunction reorderPanelSettingOptions(\n options: Record<string, any>,\n panel: any,\n paperList: PaperListValue,\n) {\n const {\n paperList: _pl,\n panelLayoutOptions,\n backgroundColor: _bg,\n watermarkOptions,\n ...rest\n } = options\n\n return {\n paperList,\n ...rest,\n backgroundColor: panel.backgroundColor ?? _bg ?? '#ffffff',\n watermarkOptions,\n panelLayoutOptions,\n }\n}\n\nfunction ensurePaperListSupportOptionsFirst() {\n try {\n const cfg = (window as any).HIPRINT_CONFIG\n const instanceOpts = (hiprint as any)?.instance?.panel?.supportOptions\n const cfgOpts = cfg?.panel?.supportOptions\n const opts = instanceOpts || cfgOpts\n if (!Array.isArray(opts)) return\n const idx = opts.findIndex((o: any) => o.name === 'paperList')\n if (idx > 0) {\n const [item] = opts.splice(idx, 1)\n opts.unshift(item)\n } else if (idx < 0) {\n opts.unshift({ name: 'paperList', hidden: false })\n }\n if (!opts.some((o: any) => o.name === 'backgroundColor')) {\n const wmIdx = opts.findIndex((o: any) => o.name === 'watermarkOptions')\n const entry = { name: 'backgroundColor', hidden: false }\n if (wmIdx >= 0) opts.splice(wmIdx, 0, entry)\n else opts.push(entry)\n }\n } catch { /* ignore */ }\n}\n\nfunction patchPrintTemplatePaperList() {\n const proto = hiprint.PrintTemplate?.prototype\n if (!proto || proto.__svpPaperListPatched) return\n\n proto.setPaperList = function (list: PaperType[]) {\n this._paperList = Array.isArray(list) && list.length ? list : defaultPaperList\n }\n proto.getPaperList = function (): PaperType[] {\n return this._paperList || defaultPaperList\n }\n proto.__svpPaperListPatched = true\n}\n\nfunction patchPanelSettingTrigger(onPaperApplied?: (tpl: any) => void) {\n const bus = (window as any).hinnn?.event\n if (!bus || bus.__svpPaperListTriggerPatch) return\n\n const origTrigger = bus.trigger.bind(bus)\n bus.trigger = function (key: string, ...args: any[]) {\n if (\n typeof key === 'string'\n && key.startsWith('BuildCustomOptionSettingEventKey_')\n && args[0]?.options\n ) {\n const tplId = key.slice('BuildCustomOptionSettingEventKey_'.length)\n const tpl = resolveTemplate(tplId)\n const panel = tpl?.editingPanel\n if (panel) {\n const payload = args[0]\n const list = getTemplatePaperList(tpl)\n const paperList = buildPaperListValue(panel, list)\n payload.options = reorderPanelSettingOptions(payload.options, panel, paperList)\n const origCallback = payload.callback\n payload.callback = (values: any) => {\n if (values?.paperList && tpl) {\n applyPaperList(tpl, values.paperList, () => onPaperApplied?.(tpl))\n }\n if (values && 'backgroundColor' in values) {\n applyPanelBackgroundColor(panel, values.backgroundColor)\n }\n origCallback?.(values)\n }\n }\n }\n return origTrigger(key, ...args)\n }\n bus.__svpPaperListTriggerPatch = true\n}\n\n/**\n * Register paper-list panel options into hiprint (sv-print compatible).\n * Call once during hiprint init.\n */\nexport function setupHiprintPaperList(\n paperList: PaperType[] = DEFAULT_PAPER_LIST,\n onPaperApplied?: (tpl: any) => void,\n) {\n defaultPaperList = paperList.length ? paperList : DEFAULT_PAPER_LIST\n if (patched) return\n\n patchPrintTemplatePaperList()\n patchPanelSettingTrigger(onPaperApplied)\n\n try {\n hiprint.setConfig({\n optionItems: [\n PaperListOptionItem as any,\n OrientOptionItem as any,\n PanelBackgroundColorOptionItem as any,\n WatermarkOptionItem as any,\n PanelLayoutOptionItem as any,\n ],\n panel: {\n supportOptions: [\n { name: 'paperList', hidden: false },\n { name: 'backgroundColor', hidden: false },\n ],\n },\n })\n ensurePaperListSupportOptionsFirst()\n } catch (e) {\n console.warn('[hiprint-paper-list] setConfig failed', e)\n }\n\n patched = true\n}\n\nexport function assignTemplatePaperList(tpl: any, paperList?: PaperType[]) {\n if (!tpl?.setPaperList) return\n tpl.setPaperList(paperList?.length ? paperList : defaultPaperList)\n}\n\n/** Open panel-level hiprint settings (same as clicking blank paper). */\nexport function openPanelSetting() {\n if (typeof window === 'undefined') return\n\n const tryOpen = (attempt = 0) => {\n const $ = getJQuery()\n const host = document.getElementById(SETTING_CONTAINER_ID)\n const paper = document.querySelector(\n `#${DESIGN_CONTAINER_ID} .hiprint-printPaper`,\n ) as HTMLElement | null\n\n if (paper && host) {\n if ($) {\n $(paper).trigger('click')\n } else {\n paper.click()\n }\n return\n }\n\n if (attempt < 20) {\n requestAnimationFrame(() => tryOpen(attempt + 1))\n }\n }\n\n tryOpen()\n}\n","/** Table field list used when dragging a new table onto the canvas. */\nexport const DEFAULT_TABLE_FIELDS = [\n { text: 'id', field: 'id' },\n { text: '姓名', field: 'name' },\n { text: '性别', field: 'gender' },\n { text: '数量', field: 'count' },\n] as const\n\n/** Column layout from `template.json` — applied to `defaultModule.table`. */\nexport const DEFAULT_TABLE_COLUMNS = [\n [\n {\n width: 102.30000000000001,\n checked: true,\n fixed: false,\n rowspan: 1,\n colspan: 1,\n },\n {\n width: 102.30000000000001,\n title: '姓名',\n field: 'name',\n checked: true,\n columnId: 'name',\n fixed: false,\n rowspan: 1,\n colspan: 1,\n align: 'center',\n tableSummary: 'count',\n },\n {\n width: 102.30000000000001,\n title: '数量',\n field: 'count',\n checked: true,\n columnId: 'count',\n fixed: false,\n rowspan: 1,\n colspan: 1,\n align: 'center',\n tableSummary: 'sum',\n },\n {\n width: 102.30000000000001,\n checked: true,\n fixed: false,\n rowspan: 1,\n colspan: 1,\n },\n {\n width: 102.30000000000001,\n checked: true,\n fixed: false,\n rowspan: 1,\n colspan: 1,\n },\n {\n width: 85.25,\n title: '性别',\n field: 'gender',\n checked: false,\n columnId: 'gender',\n fixed: false,\n rowspan: 1,\n colspan: 1,\n },\n ],\n] as const\n\n/** Overrides merged into hiprint `defaultModule.table` element type. */\nexport const DEFAULT_TABLE_ELEMENT_TYPE = {\n tid: 'defaultModule.table',\n title: '表格',\n type: 'table',\n field: 'table',\n tableFooterRepeat: '',\n fields: DEFAULT_TABLE_FIELDS.map((f) => ({ ...f })),\n columns: DEFAULT_TABLE_COLUMNS.map((row) => row.map((col) => ({ ...col }))),\n editable: true,\n columnDisplayEditable: true,\n columnDisplayIndexEditable: true,\n columnTitleEditable: true,\n columnResizable: true,\n columnAlignEditable: true,\n isEnableEditField: true,\n isEnableContextMenu: true,\n isEnableInsertRow: true,\n isEnableDeleteRow: true,\n isEnableInsertColumn: true,\n isEnableDeleteColumn: true,\n isEnableMergeCell: true,\n groupFields: [] as string[],\n groupFooterFormatter: undefined as undefined,\n}\n","/**\n * Public types for vue3-print-designer.\n *\n * These mirror the shape of the sv-print component contract so that\n * existing templates and plugin authors can migrate with minimal friction.\n */\n\n/** A daisyUI-style theme descriptor. */\nexport interface ThemeType {\n /** Theme name. When omitted a stable hash of the colors is used. */\n theme?: string\n primaryColor: string\n primaryContent?: string\n secondaryColor?: string\n secondaryContent?: string\n accentColor?: string\n accentContent?: string\n neutralColor?: string\n neutralContent?: string\n base100?: string\n base200?: string\n base300?: string\n baseContent?: string\n info?: string\n infoContent?: string\n success?: string\n successContent?: string\n warning?: string\n warningContent?: string\n error?: string\n errorContent?: string\n}\n\n/** Configures how a single floating panel (DragBox) shows up. */\nexport type DragBoxMode = 'default' | 'top' | 'left' | 'bottom' | 'right' | 'fixed'\n\nexport interface DragBoxStyleOptions {\n mode?: DragBoxMode\n /** Inline css string. */\n style?: string\n /** Initial visibility. */\n show?: boolean\n /** Title shown in the header. */\n title?: string\n /** Other free-form payload available in slots. */\n other?: Record<string, unknown>\n}\n\n/** Per-panel style/visibility overrides. */\nexport interface StyleOption {\n paperBox?: DragBoxStyleOptions\n panels?: DragBoxStyleOptions\n draggableEls?: DragBoxStyleOptions\n options?: DragBoxStyleOptions\n pageStructure?: DragBoxStyleOptions\n history?: DragBoxStyleOptions\n miniMap?: DragBoxStyleOptions\n editableTools?: DragBoxStyleOptions\n zIndexTools?: DragBoxStyleOptions\n fontTools?: DragBoxStyleOptions\n zoomTools?: DragBoxStyleOptions\n rotateTools?: DragBoxStyleOptions\n}\n\n/** Header / toolbar / footer visibility switches. */\nexport interface ShowOption {\n showHeader?: boolean\n showToolbar?: boolean\n showFooter?: boolean\n showPower?: boolean\n}\n\nexport interface PaperType {\n type: string\n width: number\n height: number\n}\n\nexport interface ProviderMap {\n /** CSS selector hiprint should fill with draggable items. */\n container: string\n /** Provider value (typically the tid prefix). */\n value: string\n render?: (e: any[]) => any\n}\n\nexport interface PreviewOptions {\n showPdf?: boolean\n showImg?: boolean\n /** Show browser print button (window.print dialog). Default true. */\n showBrowserPrint?: boolean\n /** Show silent print (print2) button. Default false. */\n showPrint2?: boolean\n /** Alias of `showPrint2`. */\n showSilentPrint?: boolean\n /** Show batch print button (browser, no electron-hiprint). Default true. */\n showBatchPrint?: boolean\n /**\n * Show the print-client connect bar (status + connect button + printer\n * dropdown). Default false. When enabling silent print (`showPrint2`),\n * this bar is shown automatically.\n */\n showPrintClient?: boolean\n /** Default copies value for the batch input. Default 1. */\n defaultCopies?: number\n}\n\n// ---------------------------------------------------------------------------\n// Silent print / PrintClient\n// ---------------------------------------------------------------------------\n\nexport interface PrintClientConnectOptions {\n /** electron-hiprint host, e.g. `http://localhost:17521`. */\n host?: string\n token?: string\n /** Connection timeout in ms. Default 10000. */\n timeout?: number\n}\n\nexport interface PrintClientStatus {\n connected: boolean\n message?: string\n}\n\nexport interface PrinterInfo {\n name: string\n displayName?: string\n isDefault?: boolean\n /** Raw payload from hiprint when present. */\n [key: string]: unknown\n}\n\nexport interface ClientInfo {\n id?: string\n name?: string\n /** Raw payload from hiprint when present. */\n [key: string]: unknown\n}\n\nexport interface Print2Options {\n printer?: string\n title?: string\n /** Target client id when using transit proxy. */\n client?: string\n printByFragments?: boolean\n generateHTMLInterval?: number\n fragmentSize?: number\n sendInterval?: number\n /** Extra options forwarded to hiprint print2. */\n [key: string]: unknown\n}\n\n// ---------------------------------------------------------------------------\n// Plugin / hook system (mirrors sv-print)\n// ---------------------------------------------------------------------------\n\nexport type Hook =\n | 'init'\n | 'ready'\n | 'documentShortcutKeys'\n | 'shortcutKeys'\n | 'createPrintElement'\n | 'beforePrint'\n | 'beforePrint2'\n | 'getOptionItem'\n | 'onDesigned'\n | 'onPreview'\n | 'newPrintTemplate'\n | 'newPanel'\n | (string & {})\n\nexport interface HookOptions {\n hook: Hook\n name: string\n description?: string\n priority?: number\n run: (...args: any[]) => any | Promise<any>\n}\n\nexport interface PluginOptions {\n name: string\n description?: string\n init?: (input: any) => any\n hooks: HookOptions[]\n config?: Record<string, unknown>\n leastHiprintVersion?: string\n}\n\n/** Convenience factory typing for plugin authors. */\nexport type PluginFactory<T = unknown> = (opts?: T) => PluginOptions\n\n/** A `Provider` adds custom draggable element types into hiprint. */\nexport abstract class Provider {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n abstract addElementTypes(ctx: any): void\n}\n\n// ---------------------------------------------------------------------------\n// Designer / event surface\n// ---------------------------------------------------------------------------\n\nexport interface Events {\n onSave?: (key: string, data: any) => boolean | void\n onEdit?: (data: any) => boolean | void\n onEditData?: (data: any) => boolean | void\n onKeyDownEvent?: (e: KeyboardEvent, utils: any) => boolean | void\n}\n\nexport interface DesignOptions {\n grid?: boolean\n activePanel?: boolean\n adaptToSize?: boolean\n}\n\nexport interface DesignerPrintTemplateOptions {\n template: any\n fontList?: any[]\n fields?: any[]\n onImageChooseClick?: (target: any) => void\n onZoomChange?: (scale: number) => void\n onPanelAddClick?: (panel: any, createPanel: any) => void\n onFunctionClick?: (option: any, printElement: any, event: any) => void\n dataMode?: 1 | 2\n history?: boolean\n onDataChanged?: (type: string, json: any) => void\n onUpdateError?: (e: any) => void\n settingContainer?: string\n designContainer?: string\n paginationContainer?: string\n}\n\nexport interface RulerStyle {\n show?: boolean\n scale?: number\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n tickColor?: string\n paperRectColor?: string\n}\n\n/** Public props accepted by <Designer />. */\nexport interface DesignerProps {\n autoConnect?: boolean\n config?: any\n providers?: Provider[]\n providerMap?: ProviderMap | ProviderMap[]\n plugins?: PluginOptions[]\n /** Either a template JSON or template options object. */\n template?: any\n templateOptions?: DesignerPrintTemplateOptions\n designOptions?: DesignOptions\n printData?: any\n templateKey?: string\n title?: string\n authKey?: string\n headerLogoHtml?: string\n headerTitle?: string\n headerNewEle?: boolean\n headerEleList?: HeaderEle[]\n headerNewMenu?: boolean\n headerMenuList?: HeaderMenu[]\n events?: Events\n tags?: string[]\n styleOption?: StyleOption\n showOption?: ShowOption\n paperList?: PaperType[]\n theme?: string | ThemeType | ThemeType[]\n themeList?: string[]\n pageStructureGridMode?: boolean\n miniMapOriginMode?: boolean\n rulerStyle?: RulerStyle\n previewOptions?: PreviewOptions\n onPreviewClick?: (e: MouseEvent) => boolean | void\n onZoomChange?: (scale: number) => void\n onImageChooseClick?: (target: any) => void\n customDataFun?: (data: any, field: string, printData?: any) => string | number | object\n onPanelAddClick?: (panel: any, createPanel: any) => void\n onFunctionClick?: (option: any, printElement: any, event: any) => void\n onBeforeDragIn?: (printTemplate: any, panel: any, printElement: any) => boolean | void\n}\n\n/** Custom item inside the Header element-category bar. */\nexport interface HeaderEle {\n key: string\n label: string\n /** Iconify icon id or legacy inline SVG. */\n icon?: string\n tid?: string\n onClick?: (e: MouseEvent) => void\n}\n\n/** Header dropdown menu entry. */\nexport interface HeaderMenu {\n key: string\n label: string\n icon?: string\n onClick?: () => void\n children?: HeaderMenu[]\n}\n\n/** Internal: tool descriptor used by Toolbar.vue. */\nexport interface ToolDescriptor {\n key: string\n /** i18n key for tooltip. */\n i18n?: string\n /** Direct label, takes precedence over `i18n`. */\n label?: string\n /** Iconify icon id (e.g. `lucide:copy`) or legacy inline SVG markup. */\n icon: string\n /** When true the tool is rendered as a separator. */\n separator?: boolean\n /** Hide the tool. */\n hidden?: boolean\n /** Disabled when there is no current selection. */\n needSelection?: boolean\n /** Only on mobile. */\n mobileOnly?: boolean\n /** Hidden on mobile. */\n desktopOnly?: boolean\n /** Toggle a floating panel's visibility. */\n panelKey?: 'draggableEls' | 'miniMap' | 'pageStructure' | 'pageHistory' | 'properties'\n /** Render as a read-only label instead of a button. */\n display?: 'zoomPercent' | 'langSelect' | 'lockToggle'\n /** Click handler runs against DesignerUtils. */\n onClick?: (utils: any, ev: MouseEvent) => void\n}\n\nexport type Lang = 'zh-CN' | 'en-US' | (string & {})\n\nexport interface DesignedEventPayload {\n hiprint: any\n designerUtils: any\n}\n","import { defaultElementTypeProvider } from 'vue-plugin-hiprint'\nimport { DEFAULT_TABLE_ELEMENT_TYPE } from '../constants/default-table-element'\nimport { Provider } from '../types'\n\nconst TABLE_TID = 'defaultModule.table'\n\nfunction rebuildTableColumns(type: any) {\n if (typeof type.createTableColumnArray !== 'function') return\n type.columns = []\n DEFAULT_TABLE_ELEMENT_TYPE.columns.forEach((row) => {\n type.columns.push(type.createTableColumnArray(row.map((col) => ({ ...col }))))\n })\n if (typeof type.makeColumnObj === 'function') {\n type.columnObj = type.makeColumnObj()\n }\n}\n\nfunction applyCustomTableType(current: any) {\n Object.assign(current, {\n title: DEFAULT_TABLE_ELEMENT_TYPE.title,\n type: DEFAULT_TABLE_ELEMENT_TYPE.type,\n field: DEFAULT_TABLE_ELEMENT_TYPE.field,\n fields: DEFAULT_TABLE_ELEMENT_TYPE.fields.map((f) => ({ ...f })),\n editable: DEFAULT_TABLE_ELEMENT_TYPE.editable,\n columnDisplayEditable: DEFAULT_TABLE_ELEMENT_TYPE.columnDisplayEditable,\n columnDisplayIndexEditable: DEFAULT_TABLE_ELEMENT_TYPE.columnDisplayIndexEditable,\n columnTitleEditable: DEFAULT_TABLE_ELEMENT_TYPE.columnTitleEditable,\n columnResizable: DEFAULT_TABLE_ELEMENT_TYPE.columnResizable,\n columnAlignEditable: DEFAULT_TABLE_ELEMENT_TYPE.columnAlignEditable,\n isEnableEditField: DEFAULT_TABLE_ELEMENT_TYPE.isEnableEditField,\n isEnableContextMenu: DEFAULT_TABLE_ELEMENT_TYPE.isEnableContextMenu,\n isEnableInsertRow: DEFAULT_TABLE_ELEMENT_TYPE.isEnableInsertRow,\n isEnableDeleteRow: DEFAULT_TABLE_ELEMENT_TYPE.isEnableDeleteRow,\n isEnableInsertColumn: DEFAULT_TABLE_ELEMENT_TYPE.isEnableInsertColumn,\n isEnableDeleteColumn: DEFAULT_TABLE_ELEMENT_TYPE.isEnableDeleteColumn,\n isEnableMergeCell: DEFAULT_TABLE_ELEMENT_TYPE.isEnableMergeCell,\n groupFields: [],\n groupFooterFormatter: undefined,\n groupFormatter: undefined,\n })\n rebuildTableColumns(current)\n return current\n}\n\n/**\n * Hiprint provider: built-in element types, with `defaultModule.table`\n * replaced by the project default table layout (`template.json`).\n */\nexport class SvpElementTypeProvider extends Provider {\n addElementTypes(context: any): void {\n new defaultElementTypeProvider().addElementTypes(context)\n if (typeof context.updateElementType === 'function') {\n context.updateElementType(TABLE_TID, applyCustomTableType)\n return\n }\n const current = context.getElementType?.(TABLE_TID)\n if (current) applyCustomTableType(current)\n }\n}\n","import type { Provider, ProviderMap } from '../types'\nimport { SvpElementTypeProvider } from './svp-element-provider'\n\nexport { defaultElementTypeProvider } from 'vue-plugin-hiprint'\nexport { SvpElementTypeProvider } from './svp-element-provider'\n\nexport function ensureProviders(providers?: Provider[]): Provider[] {\n if (providers && providers.length) return providers\n return [new SvpElementTypeProvider()]\n}\n\nexport function normalizeProviderMap(map?: ProviderMap | ProviderMap[]): ProviderMap[] {\n if (!map) return []\n return Array.isArray(map) ? map : [map]\n}\n","/**\n * Thin wrapper around `vue-plugin-hiprint` so the rest of the codebase\n * only needs to touch a stable surface.\n */\nimport * as VuePluginHiprint from 'vue-plugin-hiprint'\nimport { DEFAULT_PAPER_LIST } from '../constants'\nimport { setupHiprintPaperList } from './hiprint-paper-list'\nimport { ensureProviders } from './providers'\nimport type { PaperType, Provider } from '../types'\n\nconst plugin = VuePluginHiprint as Record<string, any>\nexport const hiprint = plugin.hiprint ?? plugin.default?.hiprint\nexport const defaultElementTypeProvider = plugin.defaultElementTypeProvider\n ?? plugin.default?.defaultElementTypeProvider\nexport const autoConnect = plugin.autoConnect ?? plugin.default?.autoConnect\nexport const disAutoConnect = plugin.disAutoConnect ?? plugin.default?.disAutoConnect\n\nlet initialized = false\n\nexport interface InitOptions {\n providers?: Provider[]\n autoConnect?: boolean\n config?: any\n paperList?: PaperType[]\n onPaperApplied?: (tpl: any) => void\n}\n\n/**\n * Initialise hiprint with at least one provider. Idempotent.\n */\nexport function initHiprint(options: InitOptions = {}): typeof hiprint {\n const providers = ensureProviders(options.providers)\n\n if (!initialized) {\n try {\n hiprint.init({ providers, ...(options.config ?? {}) })\n setupHiprintPaperList(\n options.paperList ?? DEFAULT_PAPER_LIST,\n options.onPaperApplied,\n )\n } catch (e) {\n console.error('[vue3-print-designer] hiprint.init failed', e)\n }\n initialized = true\n } else if (options.providers?.length) {\n // Re-register providers on subsequent init calls.\n try {\n // hiprint exposes `PrintElementTypeManager` whose `build` accepts\n // a provider list — calling it again is safe.\n options.providers.forEach((p) =>\n hiprint.PrintElementTypeManager?.build?.([p]),\n )\n } catch (e) {\n console.warn('[vue3-print-designer] re-build providers failed', e)\n }\n }\n\n if (options.autoConnect === false) {\n try { disAutoConnect() } catch (_) { /* ignore */ }\n }\n\n return hiprint\n}\n\n/**\n * Bind a selector list (e.g. `.ep-draggable-item`) into hiprint so the\n * elements become draggable. `vue-plugin-hiprint` exposes this via\n * `PrintElementTypeManager.buildByHtml`.\n */\nexport function buildByHtml(selectors: string[] | string): void {\n if (typeof window === 'undefined') return\n const $: any = (window as any).jQuery || (window as any).$\n if (!$) {\n console.warn('[vue3-print-designer] jQuery is required by hiprint but was not found on window')\n return\n }\n const list = Array.isArray(selectors) ? selectors : [selectors]\n list.forEach((sel) => {\n const $els = $(sel)\n if ($els.length) {\n try { hiprint.PrintElementTypeManager.buildByHtml($els) } catch (e) {\n console.warn('[vue3-print-designer] buildByHtml failed', sel, e)\n }\n }\n })\n}\n","import { hiprint, initHiprint, autoConnect, disAutoConnect } from './hiprint-bridge'\nimport { ensureProviders } from './providers'\nimport type {\n ClientInfo,\n Print2Options,\n PrintClientConnectOptions,\n PrintClientStatus,\n PrinterInfo,\n} from '../types'\n\nexport type Unsubscribe = () => void\n\nfunction normalizePrinterList(raw: unknown): PrinterInfo[] {\n if (!Array.isArray(raw)) return []\n return raw\n .map((item) => {\n if (typeof item === 'string') {\n return { name: item, displayName: item }\n }\n if (!item || typeof item !== 'object') return null\n const record = item as Record<string, unknown>\n const name = String(record.name ?? record.Name ?? '')\n if (!name) return null\n return {\n ...record,\n name,\n displayName: String(record.displayName ?? record.DisplayName ?? name),\n isDefault: Boolean(record.isDefault ?? record.IsDefault ?? record.default),\n } as PrinterInfo\n })\n .filter((item): item is PrinterInfo => item != null)\n}\n\nfunction normalizeClientList(raw: unknown): ClientInfo[] {\n if (!Array.isArray(raw)) return []\n return raw.filter((item) => item && typeof item === 'object') as ClientInfo[]\n}\n\nfunction buildPrint2Payload(options?: Print2Options): Record<string, unknown> {\n if (!options) {\n return { printer: '', title: 'print' }\n }\n const {\n printer,\n title,\n client,\n printByFragments,\n generateHTMLInterval,\n fragmentSize,\n sendInterval,\n ...rest\n } = options\n return {\n printer: printer ?? '',\n title: title ?? 'print',\n ...(client != null ? { client } : {}),\n ...(printByFragments != null ? { printByFragments } : {}),\n ...(generateHTMLInterval != null ? { generateHTMLInterval } : {}),\n ...(fragmentSize != null ? { fragmentSize } : {}),\n ...(sendInterval != null ? { sendInterval } : {}),\n ...rest,\n }\n}\n\nfunction readSocketConnected(): boolean {\n try {\n const ws = hiprint.hiwebSocket as Record<string, unknown> | undefined\n if (!ws) return false\n if (ws.opened === true || ws.connected === true) return true\n if (typeof ws.isConnected === 'function' && ws.isConnected()) return true\n return false\n } catch {\n return false\n }\n}\n\n/**\n * Headless print client wrapping vue-plugin-hiprint socket + print2 APIs.\n */\nexport class PrintClient {\n private static instance: PrintClient | null = null\n\n private status: PrintClientStatus = { connected: false }\n private initConfig: Record<string, unknown> = {}\n private connectPromise: Promise<PrintClientStatus> | null = null\n private connectionCallbacks = new Set<(status: PrintClientStatus) => void>()\n private printSuccessCallbacks = new Set<(data: unknown) => void>()\n private printErrorCallbacks = new Set<(data: unknown) => void>()\n\n static getInstance(): PrintClient {\n if (!PrintClient.instance) PrintClient.instance = new PrintClient()\n return PrintClient.instance\n }\n\n connect(options: PrintClientConnectOptions = {}): Promise<PrintClientStatus> {\n if (typeof window === 'undefined') {\n const status = { connected: false, message: 'PrintClient requires a browser environment.' }\n this.updateStatus(status)\n return Promise.resolve(status)\n }\n\n if (this.getStatus().connected) {\n return Promise.resolve(this.getStatus())\n }\n\n if (this.connectPromise) return this.connectPromise\n\n this.connectPromise = new Promise((resolve) => {\n const timeoutMs = options.timeout ?? 10_000\n let settled = false\n\n const finish = (status: PrintClientStatus) => {\n if (settled) return\n settled = true\n window.clearTimeout(timer)\n this.connectPromise = null\n this.updateStatus(status)\n resolve(status)\n }\n\n const timer = window.setTimeout(() => {\n finish({\n connected: false,\n message: 'Connection timeout. Is electron-hiprint running?',\n })\n }, timeoutMs)\n\n const config: Record<string, unknown> = { ...this.initConfig }\n if (options.host) config.host = options.host\n if (options.token) config.token = options.token\n this.initConfig = config\n\n initHiprint({\n providers: ensureProviders(),\n autoConnect: false,\n config,\n })\n\n try {\n if (options.host && typeof hiprint.hiwebSocket?.setHost === 'function') {\n hiprint.hiwebSocket.setHost(options.host, options.token)\n }\n } catch (e) {\n console.warn('[print-designer] hiwebSocket.setHost failed', e)\n }\n\n try {\n autoConnect((status: boolean, msg?: unknown) => {\n const message = typeof msg === 'string'\n ? msg\n : msg != null\n ? String(msg)\n : status\n ? undefined\n : 'Failed to connect to print client.'\n finish({ connected: !!status, message })\n })\n } catch (e) {\n finish({\n connected: false,\n message: e instanceof Error ? e.message : String(e),\n })\n }\n })\n\n return this.connectPromise\n }\n\n disconnect(): void {\n try { disAutoConnect() } catch { /* ignore */ }\n this.connectPromise = null\n this.updateStatus({ connected: false, message: 'Disconnected.' })\n }\n\n getStatus(): PrintClientStatus {\n const socketConnected = readSocketConnected()\n if (socketConnected && !this.status.connected) {\n this.status = { connected: true }\n }\n if (!socketConnected && this.status.connected) {\n this.status = { connected: false, message: this.status.message ?? 'Disconnected.' }\n }\n return { ...this.status }\n }\n\n getPrinterList(): PrinterInfo[] {\n try {\n const list = hiprint.hiwebSocket?.getPrinterList?.()\n return normalizePrinterList(list)\n } catch {\n return []\n }\n }\n\n getClients(): ClientInfo[] {\n try {\n const ws = hiprint.hiwebSocket as Record<string, unknown> | undefined\n if (!ws) return []\n if (Array.isArray(ws.clients)) return normalizeClientList(ws.clients)\n if (typeof ws.getClients === 'function') {\n return normalizeClientList(ws.getClients())\n }\n return []\n } catch {\n return []\n }\n }\n\n async printByTemplate(\n template: object,\n printData: object | object[],\n options?: Print2Options,\n ): Promise<void> {\n initHiprint({\n providers: ensureProviders(),\n autoConnect: false,\n config: this.initConfig,\n })\n const instance = new hiprint.PrintTemplate({ template })\n return this.printByInstance(instance, printData, options)\n }\n\n async printByInstance(\n printTemplate: any,\n printData: object | object[],\n options?: Print2Options,\n ): Promise<void> {\n if (!this.getStatus().connected) {\n throw new Error('[print-designer] Print client is not connected. Call connect() first.')\n }\n if (typeof printTemplate?.print2 !== 'function') {\n throw new Error('[print-designer] print2 is not available on the template instance.')\n }\n\n return new Promise((resolve, reject) => {\n const onSuccess = (data: unknown) => {\n cleanup()\n this.notifyPrintSuccess(data)\n resolve()\n }\n const onError = (data: unknown) => {\n cleanup()\n this.notifyPrintError(data)\n reject(data instanceof Error ? data : new Error(String(data ?? 'Print failed')))\n }\n const cleanup = () => {\n try { printTemplate.off?.('printSuccess', onSuccess) } catch { /* ignore */ }\n try { printTemplate.off?.('printError', onError) } catch { /* ignore */ }\n }\n\n try {\n printTemplate.on?.('printSuccess', onSuccess)\n printTemplate.on?.('printError', onError)\n printTemplate.print2(printData, buildPrint2Payload(options))\n } catch (e) {\n cleanup()\n reject(e)\n }\n })\n }\n\n onConnectionChange(callback: (status: PrintClientStatus) => void): Unsubscribe {\n this.connectionCallbacks.add(callback)\n return () => { this.connectionCallbacks.delete(callback) }\n }\n\n onPrintSuccess(callback: (data: unknown) => void): Unsubscribe {\n this.printSuccessCallbacks.add(callback)\n return () => { this.printSuccessCallbacks.delete(callback) }\n }\n\n onPrintError(callback: (data: unknown) => void): Unsubscribe {\n this.printErrorCallbacks.add(callback)\n return () => { this.printErrorCallbacks.delete(callback) }\n }\n\n private updateStatus(status: PrintClientStatus): void {\n this.status = status\n this.notifyConnectionChange(status)\n }\n\n private notifyConnectionChange(status: PrintClientStatus): void {\n this.connectionCallbacks.forEach((cb) => {\n try { cb(status) } catch (e) { console.error('[print-designer] connection listener failed', e) }\n })\n }\n\n private notifyPrintSuccess(data: unknown): void {\n this.printSuccessCallbacks.forEach((cb) => {\n try { cb(data) } catch (e) { console.error('[print-designer] printSuccess listener failed', e) }\n })\n }\n\n private notifyPrintError(data: unknown): void {\n this.printErrorCallbacks.forEach((cb) => {\n try { cb(data) } catch (e) { console.error('[print-designer] printError listener failed', e) }\n })\n }\n}\n\nexport function getPrintClient(): PrintClient {\n return PrintClient.getInstance()\n}\n","/** Normalize hiprint `getHtml()` output (jQuery / array-like) to an HTML string. */\nexport function resolvePreviewHtml(value: unknown): string {\n if (value == null || value === false) return ''\n if (typeof value === 'string') return value\n\n const any = value as Record<string | number, unknown> & {\n html?: () => string\n length?: number\n target?: unknown\n }\n\n if (typeof any.html === 'function') {\n try {\n const html = any.html()\n if (typeof html === 'string') return html\n } catch {\n /* fall through */\n }\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => resolvePreviewHtml(item)).join('')\n }\n\n if (typeof any.length === 'number' && any.length > 0 && any[0] != null) {\n return resolvePreviewHtml(any[0])\n }\n\n if (any.target != null) {\n return resolvePreviewHtml(any.target)\n }\n\n return ''\n}\n","import { resolvePreviewHtml } from './preview-html'\n\nexport interface BatchPrintOptions {\n /** Copies per record. Default 1. */\n copies?: number\n /**\n * Print one record per page. Default true. When false, all records are\n * concatenated without page breaks (rarely useful, kept for parity).\n */\n pageBreak?: boolean\n /** Document title for the printed window. Default \"print\". */\n title?: string\n /**\n * Extra CSS to inject into the print iframe head. Useful when you need\n * to override or extend `print-lock.css`.\n */\n styleHandler?: () => string\n /**\n * Whether to clone `<link rel=\"stylesheet\">` and `<style>` from the host\n * document into the iframe. Default true (keeps print-lock.css working).\n */\n importCss?: boolean\n /** Called once the print dialog has been triggered. */\n callback?: () => void\n /** Iframe load timeout in ms when the browser fails to fire load. */\n timeout?: number\n}\n\ninterface InternalPrintArgs {\n html: string\n title: string\n styleHandler?: () => string\n importCss: boolean\n callback?: () => void\n timeout: number\n}\n\nfunction collectHostStyles(): string {\n if (typeof document === 'undefined') return ''\n const parts: string[] = []\n document.querySelectorAll<HTMLLinkElement>('link[rel=\"stylesheet\"]').forEach((el) => {\n const href = el.getAttribute('href')\n if (!href) return\n const media = el.getAttribute('media')\n const mediaAttr = media ? ` media=\"${media}\"` : ''\n parts.push(`<link rel=\"stylesheet\" href=\"${href}\"${mediaAttr}>`)\n if (media && /print/i.test(media) && href.includes('print-lock.css')) {\n parts.push(`<link rel=\"stylesheet\" href=\"${href}\">`)\n }\n })\n document.querySelectorAll<HTMLStyleElement>('style').forEach((el) => {\n parts.push(`<style>${el.textContent ?? ''}</style>`)\n })\n return parts.join('\\n')\n}\n\nfunction buildIframeDocument(args: InternalPrintArgs): string {\n const handlerStyles = args.styleHandler ? args.styleHandler() : ''\n const hostStyles = args.importCss ? collectHostStyles() : ''\n return `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>${args.title}</title>\n${hostStyles}\n${handlerStyles}\n</head>\n<body>${args.html}</body>\n</html>`\n}\n\nfunction printIframe(args: InternalPrintArgs): Promise<void> {\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n return Promise.resolve()\n }\n\n const previous = document.getElementById('svp_batch_print_iframe')\n if (previous?.parentNode) previous.parentNode.removeChild(previous)\n\n const iframe = document.createElement('iframe')\n iframe.id = 'svp_batch_print_iframe'\n iframe.setAttribute(\n 'style',\n 'visibility: hidden; height: 0; width: 0; position: absolute; border: 0;',\n )\n document.body.appendChild(iframe)\n\n const cleanup = () => {\n try {\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe)\n } catch { /* ignore */ }\n }\n\n return new Promise((resolve) => {\n let triggered = false\n const trigger = () => {\n if (triggered) return\n triggered = true\n try {\n const win = iframe.contentWindow\n if (!win) {\n cleanup()\n resolve()\n return\n }\n const finish = () => {\n args.callback?.()\n setTimeout(() => {\n cleanup()\n resolve()\n }, 500)\n }\n const onAfterPrint = () => {\n win.removeEventListener('afterprint', onAfterPrint)\n finish()\n }\n win.addEventListener('afterprint', onAfterPrint)\n try {\n win.focus()\n win.print()\n } catch (e) {\n console.error('[batch-print] window.print failed', e)\n finish()\n }\n setTimeout(finish, 60_000)\n } catch (e) {\n console.error('[batch-print] trigger failed', e)\n cleanup()\n resolve()\n }\n }\n\n iframe.onload = () => {\n waitForImages(iframe.contentDocument, trigger)\n }\n setTimeout(() => {\n if (!triggered) trigger()\n }, args.timeout)\n\n const doc = iframe.contentDocument\n const docString = buildIframeDocument(args)\n if (doc) {\n doc.open()\n doc.write(docString)\n doc.close()\n } else {\n iframe.srcdoc = docString\n }\n })\n}\n\nfunction waitForImages(doc: Document | null, done: () => void, attempt = 0): void {\n if (!doc) {\n done()\n return\n }\n const imgs = doc.getElementsByTagName('img')\n let ready = true\n for (let i = 0; i < imgs.length; i++) {\n const img = imgs[i]\n if (!img.src || img.src.indexOf('base64') >= 0) continue\n if (img.complete && (img.naturalWidth ?? 1) > 0) continue\n ready = false\n break\n }\n if (ready || attempt >= 10) {\n done()\n return\n }\n setTimeout(() => waitForImages(doc, done, attempt + 1), 500)\n}\n\nfunction pageWrap(html: string, withBreak: boolean): string {\n const breakStyle = withBreak\n ? ' style=\"page-break-after: always; break-after: page;\"'\n : ''\n return `<div class=\"svp-batch-page\"${breakStyle}>${html}</div>`\n}\n\n/**\n * Merge multiple records into a single HTML payload and open the browser\n * print dialog once. Works without electron-hiprint.\n */\nexport async function batchPrint(\n printTemplate: any,\n printDataList: unknown[],\n options: BatchPrintOptions = {},\n): Promise<void> {\n if (!printTemplate || typeof printTemplate.getHtml !== 'function') {\n throw new Error('[batch-print] printTemplate.getHtml is required.')\n }\n const list = Array.isArray(printDataList) ? printDataList : [printDataList]\n if (!list.length) {\n throw new Error('[batch-print] printDataList is empty.')\n }\n const copies = Math.max(1, Math.floor(options.copies ?? 1))\n const pageBreak = options.pageBreak !== false\n const title = options.title ?? 'print'\n\n const expanded: unknown[] = []\n for (const item of list) {\n for (let i = 0; i < copies; i++) expanded.push(item)\n }\n\n const fragments: string[] = []\n for (let i = 0; i < expanded.length; i++) {\n const raw = printTemplate.getHtml(expanded[i])\n const html = resolvePreviewHtml(raw)\n if (!html) continue\n const isLast = i === expanded.length - 1\n fragments.push(pageWrap(html, pageBreak && !isLast))\n }\n if (!fragments.length) {\n throw new Error('[batch-print] No HTML produced from print data.')\n }\n\n await printIframe({\n html: fragments.join('\\n'),\n title,\n styleHandler: options.styleHandler,\n importCss: options.importCss !== false,\n callback: options.callback,\n timeout: Math.max(500, options.timeout ?? 1500),\n })\n}\n","import type { Hook, HookOptions, PluginOptions } from '../types'\n\n/**\n * Hook manager: stores plugin-provided callbacks keyed by hook name,\n * runs them sequentially in priority order.\n */\nexport class PluginManager {\n private hooks = new Map<Hook, HookOptions[]>()\n private plugins: PluginOptions[] = []\n\n setPlugins(plugins: PluginOptions[] = []) {\n this.hooks.clear()\n this.plugins = []\n plugins.forEach((p) => this.register(p))\n }\n\n register(plugin: PluginOptions) {\n if (!plugin || !Array.isArray(plugin.hooks)) return\n this.plugins.push(plugin)\n plugin.init?.(plugin.config ?? {})\n plugin.hooks.forEach((h) => {\n const arr = this.hooks.get(h.hook) ?? []\n arr.push(h)\n arr.sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100))\n this.hooks.set(h.hook, arr)\n })\n }\n\n list(): PluginOptions[] {\n return this.plugins.slice()\n }\n\n has(hook: Hook): boolean {\n return (this.hooks.get(hook)?.length ?? 0) > 0\n }\n\n /** Run all callbacks sequentially. Returns the array of results. */\n async run(hook: Hook, ...args: any[]): Promise<unknown[]> {\n const list = this.hooks.get(hook) ?? []\n const out: unknown[] = []\n for (const h of list) {\n try {\n out.push(await h.run(...args))\n } catch (e) {\n console.error(`[vue3-print-designer] hook \"${hook}\" (${h.name}) failed`, e)\n }\n }\n return out\n }\n\n /** Synchronous variant — useful for shortcut handlers that must return quickly. */\n runSync(hook: Hook, ...args: any[]): unknown[] {\n const list = this.hooks.get(hook) ?? []\n const out: unknown[] = []\n for (const h of list) {\n try {\n out.push(h.run(...args))\n } catch (e) {\n console.error(`[vue3-print-designer] hook \"${hook}\" (${h.name}) failed`, e)\n }\n }\n return out\n }\n}\n","import { reactive, ref, type Ref } from 'vue-demi'\nimport { ZOOM_MAX, ZOOM_MIN } from '../constants'\nimport type { ThemeType } from '../types'\n\nexport interface PanelVisibility {\n draggableEls: boolean\n miniMap: boolean\n pageStructure: boolean\n pageHistory: boolean\n properties: boolean\n}\n\nexport interface SelectionInfo {\n count: number\n ids: string[]\n /** Active hiprint elements. */\n elements: unknown[]\n}\n\nexport interface HistoryInfo {\n index: number\n total: number\n capacity: number\n canUndo: boolean\n canRedo: boolean\n}\n\nexport const designerStore = reactive({\n theme: 'svpLight' as string,\n themeList: [] as (string | ThemeType)[],\n lang: 'zh-CN' as string,\n zoom: 1,\n panels: {\n draggableEls: true,\n miniMap: true,\n pageStructure: true,\n pageHistory: true,\n properties: true,\n } as PanelVisibility,\n selection: { count: 0, ids: [], elements: [] } as SelectionInfo,\n history: { index: 0, total: 0, capacity: 50, canUndo: false, canRedo: false } as HistoryInfo,\n isMobile: false,\n /** Bumps when element UI state changes outside selection (e.g. lock). */\n uiPulse: 0,\n})\n\nexport type DesignerStore = typeof designerStore\n\nexport const designerStoreRef: Ref<DesignerStore> = ref(designerStore) as Ref<DesignerStore>\n\nexport function setZoom(value: number) {\n const v = Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, Number.isFinite(value) ? value : 1))\n designerStore.zoom = v\n}\n\nexport function setPanelVisibility(key: keyof PanelVisibility, show: boolean) {\n designerStore.panels[key] = show\n}\n\nexport function togglePanel(key: keyof PanelVisibility) {\n designerStore.panels[key] = !designerStore.panels[key]\n}\n\nexport function toggleAllPanels(forceShow?: boolean) {\n const keys = Object.keys(designerStore.panels) as Array<keyof PanelVisibility>\n const anyHidden = keys.some((k) => !designerStore.panels[k])\n const next = typeof forceShow === 'boolean' ? forceShow : anyHidden\n keys.forEach((k) => (designerStore.panels[k] = next))\n}\n\nexport function setSelection(info: Partial<SelectionInfo>) {\n Object.assign(designerStore.selection, info)\n}\n","/** Canonical history labels stored in hiprint `historyList[].type`. */\nexport const HISTORY_MOVE = '移动'\nexport const HISTORY_ALIGN = '元素对齐'\nexport const HISTORY_PARAM = '参数修改'\nexport const HISTORY_INITIAL = '初始'\nexport const HISTORY_ZOOM = '缩放'\n\nconst MOVE_TYPES = new Set([\n HISTORY_MOVE,\n '框选移动',\n '键盘移动',\n])\n\nconst ALIGN_TYPES = new Set([\n HISTORY_ALIGN,\n '对齐',\n '层级',\n '翻转',\n '旋转',\n '大小',\n])\n\nconst PARAM_TYPES = new Set([\n HISTORY_PARAM,\n '参数修改',\n '元素修改',\n '编辑修改',\n '批量修改',\n '字号',\n '字体粗细',\n '锁定',\n '解锁',\n '克隆',\n '粘贴',\n '复制',\n '删除',\n '清空',\n '新增',\n '模板调整',\n '调整表头',\n '调整表格列字段',\n])\n\nconst ZOOM_TYPES = new Set([\n HISTORY_ZOOM,\n '缩放',\n])\n\n/** Map hiprint / toolbar raw types to one of the three user-facing categories. */\nexport function normalizeHistoryLabel(type: string | undefined): string {\n const raw = (type || '').trim()\n if (!raw || raw === HISTORY_INITIAL) return HISTORY_INITIAL\n if (MOVE_TYPES.has(raw)) return HISTORY_MOVE\n if (ALIGN_TYPES.has(raw)) return HISTORY_ALIGN\n if (ZOOM_TYPES.has(raw)) return HISTORY_ZOOM\n if (PARAM_TYPES.has(raw)) return HISTORY_PARAM\n return HISTORY_PARAM\n}\n","/**\n * History helper. hiprint stores undo/redo on the template instance:\n * `historyList`, `historyPos`, and applies snapshots via `update(json)`.\n */\nimport { designerStore } from './stores'\nimport { normalizeHistoryLabel } from './history-labels'\n\nexport interface HistoryStep {\n index: number\n type: string\n label: string\n json?: unknown\n}\n\nexport type HistoryChangedHook = () => void\n\nexport class HistoryController {\n private getTpl: () => any\n private onChanged?: HistoryChangedHook\n steps: HistoryStep[] = []\n\n constructor(getTemplate: () => any, onChanged?: HistoryChangedHook) {\n this.getTpl = getTemplate\n this.onChanged = onChanged\n }\n\n private applySnapshot(tpl: any, json: unknown, panelIndex?: number) {\n if (!tpl?.update || json == null) return\n const index = panelIndex ?? tpl.editingPanel?.index ?? tpl.printPanels?.[0]?.index ?? 0\n tpl.update(json, index)\n }\n\n refreshFromTemplate() {\n const tpl = this.getTpl()\n if (!tpl?.history || !Array.isArray(tpl.historyList)) {\n this.steps = []\n designerStore.history = { index: 0, total: 0, capacity: 50, canUndo: false, canRedo: false }\n return\n }\n\n const list: any[] = tpl.historyList\n const pos = typeof tpl.historyPos === 'number' ? tpl.historyPos : list.length - 1\n this.steps = list.map((item: any, i: number) => {\n const type = String(item?.type ?? 'edit')\n return {\n index: i,\n type,\n label: normalizeHistoryLabel(type),\n json: item?.json,\n }\n })\n\n designerStore.history = {\n index: pos + 1,\n total: list.length,\n capacity: 50,\n canUndo: this.canUndo(),\n canRedo: this.canRedo(),\n }\n }\n\n canUndo(): boolean {\n const tpl = this.getTpl()\n return !!(tpl?.history && tpl.historyPos > 0)\n }\n\n canRedo(): boolean {\n const tpl = this.getTpl()\n if (!tpl?.history || !Array.isArray(tpl.historyList)) return false\n return tpl.historyPos < tpl.historyList.length - 1\n }\n\n undo() {\n const tpl = this.getTpl()\n if (!this.canUndo()) return\n tpl.historyPos -= 1\n const entry = tpl.historyList[tpl.historyPos]\n this.applySnapshot(tpl, entry?.json)\n this.finishChange()\n }\n\n redo() {\n const tpl = this.getTpl()\n if (!this.canRedo()) return\n tpl.historyPos += 1\n const entry = tpl.historyList[tpl.historyPos]\n this.applySnapshot(tpl, entry?.json)\n this.finishChange()\n }\n\n jump(index: number) {\n const tpl = this.getTpl()\n if (!tpl?.history || !tpl.historyList?.[index]) return\n tpl.historyPos = index\n const entry = tpl.historyList[index]\n this.applySnapshot(tpl, entry?.json)\n this.finishChange()\n }\n\n clear() {\n const tpl = this.getTpl()\n if (!tpl?.history || !Array.isArray(tpl.historyList) || !tpl.historyList.length) return\n const initial = tpl.historyList[0]\n tpl.historyList = [initial]\n tpl.historyPos = 0\n this.applySnapshot(tpl, initial?.json)\n this.finishChange()\n }\n\n /** Remove one history entry. Index 0 (initial) cannot be deleted. */\n remove(index: number) {\n const tpl = this.getTpl()\n if (!tpl?.history || !Array.isArray(tpl.historyList)) return\n if (index <= 0 || index >= tpl.historyList.length) return\n\n const pos = tpl.historyPos\n tpl.historyList.splice(index, 1)\n\n let newPos = pos\n if (index < pos) newPos = pos - 1\n else if (index === pos) newPos = Math.min(pos, tpl.historyList.length - 1)\n\n tpl.historyPos = newPos\n if (index <= pos) {\n const entry = tpl.historyList[tpl.historyPos]\n this.applySnapshot(tpl, entry?.json)\n }\n this.finishChange()\n }\n\n private finishChange() {\n this.refreshFromTemplate()\n this.onChanged?.()\n }\n}\n","/**\n * Keyboard shortcuts for the designer. Bound on `document` and dispatched\n * to DesignerUtils. Plugin authors can intercept via the\n * `documentShortcutKeys` / `shortcutKeys` hooks.\n */\ntype KeyHandler = (e: KeyboardEvent) => void | boolean\n\nexport interface ShortcutBinding {\n combo: string\n description?: string\n run: (e: KeyboardEvent) => void | boolean\n}\n\nexport interface ShortcutOptions {\n /** Receives every keydown event before bindings are evaluated; return false to block. */\n beforeDispatch?: (e: KeyboardEvent) => boolean | void\n}\n\nfunction normalize(e: KeyboardEvent): string {\n const parts: string[] = []\n if (e.ctrlKey || e.metaKey) parts.push('mod')\n if (e.shiftKey) parts.push('shift')\n if (e.altKey) parts.push('alt')\n const key = (e.key || '').toLowerCase()\n if (!['control', 'shift', 'alt', 'meta'].includes(key)) parts.push(key)\n return parts.join('+')\n}\n\nexport class ShortcutsController {\n private bindings = new Map<string, ShortcutBinding>()\n private handler: KeyHandler | null = null\n private options: ShortcutOptions\n\n constructor(options: ShortcutOptions = {}) {\n this.options = options\n }\n\n add(binding: ShortcutBinding | ShortcutBinding[]) {\n const list = Array.isArray(binding) ? binding : [binding]\n list.forEach((b) => this.bindings.set(b.combo.toLowerCase(), b))\n }\n\n remove(combo: string) {\n this.bindings.delete(combo.toLowerCase())\n }\n\n list(): ShortcutBinding[] {\n return Array.from(this.bindings.values())\n }\n\n mount() {\n if (typeof window === 'undefined' || this.handler) return\n this.handler = (e: KeyboardEvent) => {\n if (this.options.beforeDispatch?.(e) === false) return\n // Skip when typing inside an editable field.\n const t = e.target as HTMLElement | null\n if (t && (t.tagName === 'INPUT' || t.tagName === 'TEXTAREA' || t.isContentEditable)) {\n // Allow undo / redo though.\n const combo = normalize(e)\n if (combo !== 'mod+z' && combo !== 'mod+shift+z' && combo !== 'mod+y') return\n }\n const combo = normalize(e)\n const b = this.bindings.get(combo)\n if (!b) return\n const r = b.run(e)\n if (r !== false) {\n e.preventDefault()\n e.stopPropagation()\n }\n }\n document.addEventListener('keydown', this.handler, true)\n }\n\n unmount() {\n if (typeof window === 'undefined' || !this.handler) return\n document.removeEventListener('keydown', this.handler, true)\n this.handler = null\n }\n}\n","import { STORAGE_PREFIX } from '../constants'\n\nconst safe = (): Storage | null => {\n try { return typeof window !== 'undefined' ? window.localStorage : null }\n catch { return null }\n}\n\nexport function readJSON<T = unknown>(key: string, fallback: T): T {\n const s = safe()\n if (!s) return fallback\n const raw = s.getItem(STORAGE_PREFIX + key)\n if (!raw) return fallback\n try { return JSON.parse(raw) as T } catch { return fallback }\n}\n\nexport function writeJSON(key: string, value: unknown): void {\n const s = safe()\n if (!s) return\n try { s.setItem(STORAGE_PREFIX + key, JSON.stringify(value)) } catch (_) { /* ignore */ }\n}\n\nexport function removeKey(key: string): void {\n const s = safe()\n if (!s) return\n s.removeItem(STORAGE_PREFIX + key)\n}\n","import { EMPTY_TEMPLATE_JSON } from '../constants'\n\nexport interface JsonEditorModalOptions {\n title: string\n value: unknown\n confirmText?: string\n cancelText?: string\n invalidText?: string\n clearText?: string\n copyText?: string\n variant?: 'template' | 'default'\n}\n\nexport type JsonEditorModalHost = {\n open: (options: JsonEditorModalOptions) => Promise<unknown | null>\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value ?? {}, null, 2)\n } catch {\n try {\n const seen = new WeakSet<object>()\n return JSON.stringify(value, (_key, val) => {\n if (typeof val === 'object' && val !== null) {\n if (seen.has(val)) return undefined\n seen.add(val)\n }\n return val\n }, 2)\n } catch {\n return '{}'\n }\n }\n}\n\nfunction renderLineNumbers(text: string): string {\n const count = Math.max(1, text.split('\\n').length)\n return Array.from({ length: count }, (_, i) => String(i + 1)).join('\\n')\n}\n\n/** Imperative fallback when Vue host is unavailable. */\nexport function openJsonEditorModal(options: JsonEditorModalOptions): Promise<unknown | null> {\n return new Promise((resolve) => {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n resolve(null)\n return\n }\n\n document.querySelectorAll('.svp-dialog-mask[data-json-editor]').forEach((el) => el.remove())\n\n const showToolbar = options.variant === 'template'\n const initial = safeStringify(options.value)\n const mask = document.createElement('div')\n mask.className = 'svp-dialog-mask'\n mask.setAttribute('data-json-editor', '1')\n\n const modal = document.createElement('div')\n modal.className = 'svp-dialog svp-json-editor'\n modal.innerHTML = `\n <div class=\"svp-dialog__header\">\n <span class=\"svp-dialog__title\"></span>\n <button type=\"button\" class=\"svp-dialog__close\" data-act=\"cancel\" aria-label=\"close\">×</button>\n </div>\n <div class=\"svp-dialog__body svp-json-editor__body\">\n <div class=\"svp-json-editor__editor\">\n <pre class=\"svp-json-editor__lines\" aria-hidden=\"true\"></pre>\n <textarea class=\"svp-json-editor__textarea\" spellcheck=\"false\"></textarea>\n </div>\n <div class=\"svp-json-editor__error\" hidden></div>\n </div>\n <div class=\"svp-dialog__footer svp-json-editor__footer\">\n ${showToolbar ? `\n <div class=\"svp-json-editor__footer-left\">\n <button type=\"button\" class=\"svp-btn is-danger\" data-act=\"clear\"></button>\n <button type=\"button\" class=\"svp-btn is-info\" data-act=\"copy\"></button>\n </div>\n ` : ''}\n <div class=\"svp-json-editor__footer-right\">\n <button type=\"button\" class=\"svp-btn is-primary\" data-act=\"ok\"></button>\n <button type=\"button\" class=\"svp-btn\" data-act=\"cancel\"></button>\n </div>\n </div>\n `\n\n const titleEl = modal.querySelector('.svp-dialog__title') as HTMLElement\n const linesEl = modal.querySelector('.svp-json-editor__lines') as HTMLElement\n const ta = modal.querySelector('.svp-json-editor__textarea') as HTMLTextAreaElement\n const errorEl = modal.querySelector('.svp-json-editor__error') as HTMLElement\n const clearBtn = modal.querySelector('[data-act=\"clear\"]') as HTMLButtonElement | null\n const copyBtn = modal.querySelector('[data-act=\"copy\"]') as HTMLButtonElement | null\n const okBtn = modal.querySelector('[data-act=\"ok\"]') as HTMLButtonElement\n const cancelBtns = modal.querySelectorAll('[data-act=\"cancel\"]') as NodeListOf<HTMLButtonElement>\n\n titleEl.textContent = options.title\n okBtn.textContent = options.confirmText ?? 'OK'\n cancelBtns.forEach((btn) => { btn.textContent = options.cancelText ?? 'Cancel' })\n if (clearBtn) clearBtn.textContent = options.clearText ?? 'Clear'\n if (copyBtn) copyBtn.textContent = options.copyText ?? 'Copy'\n ta.value = initial\n linesEl.textContent = renderLineNumbers(initial)\n ta.scrollTop = 0\n linesEl.scrollTop = 0\n\n function syncLines() {\n linesEl.textContent = renderLineNumbers(ta.value)\n }\n\n function syncScroll() {\n linesEl.scrollTop = ta.scrollTop\n }\n\n function close(result: unknown | null) {\n mask.remove()\n resolve(result)\n }\n\n ta.addEventListener('input', () => {\n errorEl.hidden = true\n syncLines()\n })\n ta.addEventListener('scroll', syncScroll)\n\n modal.addEventListener('click', (e) => {\n const act = (e.target as HTMLElement).dataset.act\n if (act === 'cancel') close(null)\n else if (act === 'clear') {\n ta.value = showToolbar\n ? JSON.stringify(EMPTY_TEMPLATE_JSON, null, 2)\n : '{}'\n errorEl.hidden = true\n syncLines()\n ta.focus()\n } else if (act === 'copy') {\n navigator.clipboard?.writeText(ta.value).catch(() => {\n ta.focus()\n ta.select()\n try { document.execCommand('copy') } catch { /* ignore */ }\n })\n } else if (act === 'ok') {\n try {\n close(JSON.parse(ta.value))\n } catch {\n errorEl.hidden = false\n errorEl.textContent = options.invalidText ?? 'Invalid JSON'\n }\n }\n })\n\n mask.addEventListener('click', (e) => {\n if (e.target === mask) close(null)\n })\n\n mask.appendChild(modal)\n const host = document.querySelector('.svp-root') ?? document.body\n host.appendChild(mask)\n ta.setSelectionRange(0, 0)\n ta.focus({ preventScroll: true })\n })\n}\n","export interface BasicFieldDef {\n field: string\n label: string\n testData?: string\n}\n\nexport interface TableColumnDef {\n field: string\n label: string\n}\n\nexport interface TableFieldDef {\n /** Print data key, e.g. `table`. */\n field: string\n label: string\n columns: TableColumnDef[]\n}\n\nexport interface TemplateFieldSchema {\n basicFields: BasicFieldDef[]\n tables: TableFieldDef[]\n}\n\ntype FieldOption = { text?: string; field?: string }\n\nfunction asFieldOptions(value: unknown): FieldOption[] {\n if (!Array.isArray(value)) return []\n return value.filter((item): item is FieldOption => {\n return !!item && typeof item === 'object' && typeof (item as FieldOption).field === 'string'\n })\n}\n\nfunction labelForField(field: string, fields: FieldOption[], fallback?: string): string {\n const match = fields.find((item) => item.field === field)\n if (match?.text) return match.text\n if (fallback) return fallback\n return field\n}\n\nfunction collectTableColumns(options: Record<string, unknown>): TableColumnDef[] {\n const fromFields = asFieldOptions(options.fields)\n if (fromFields.length) {\n return fromFields.map((item) => ({\n field: item.field!,\n label: item.text || item.field!,\n }))\n }\n\n const columns = Array.isArray(options.columns) ? options.columns : []\n const seen = new Set<string>()\n const result: TableColumnDef[] = []\n\n columns.forEach((row) => {\n if (!Array.isArray(row)) return\n row.forEach((col) => {\n if (!col || typeof col !== 'object') return\n const field = (col as { field?: string }).field\n if (!field || seen.has(field)) return\n seen.add(field)\n result.push({\n field,\n label: (col as { title?: string }).title || field,\n })\n })\n })\n\n return result\n}\n\nfunction collectPrintElements(template: unknown): Array<{ options: Record<string, unknown>; printElementType: Record<string, unknown> }> {\n if (!template || typeof template !== 'object') return []\n const panels = Array.isArray((template as { panels?: unknown }).panels)\n ? (template as { panels: unknown[] }).panels\n : Array.isArray(template)\n ? template\n : []\n\n const elements: Array<{ options: Record<string, unknown>; printElementType: Record<string, unknown> }> = []\n panels.forEach((panel) => {\n if (!panel || typeof panel !== 'object') return\n const printElements = (panel as { printElements?: unknown }).printElements\n if (!Array.isArray(printElements)) return\n printElements.forEach((item) => {\n if (!item || typeof item !== 'object') return\n elements.push({\n options: ((item as { options?: unknown }).options ?? {}) as Record<string, unknown>,\n printElementType: ((item as { printElementType?: unknown }).printElementType ?? {}) as Record<string, unknown>,\n })\n })\n })\n return elements\n}\n\n/** Extract bindable fields from a hiprint template JSON. */\nexport function extractTemplateFields(template: unknown): TemplateFieldSchema {\n const basicMap = new Map<string, BasicFieldDef>()\n const tables: TableFieldDef[] = []\n\n collectPrintElements(template).forEach(({ options, printElementType }) => {\n const type = String(printElementType.type || '')\n const fieldOptions = asFieldOptions(options.fields)\n\n if (type === 'table') {\n const tableField = String(options.field || 'table')\n const columns = collectTableColumns(options)\n if (!columns.length) return\n tables.push({\n field: tableField,\n label: String(printElementType.title || options.title || tableField),\n columns,\n })\n return\n }\n\n if (type !== 'text' && type !== 'longText') return\n const field = typeof options.field === 'string' ? options.field.trim() : ''\n if (!field) return\n\n if (!basicMap.has(field)) {\n basicMap.set(field, {\n field,\n label: labelForField(field, fieldOptions, String(options.title || printElementType.title || field)),\n testData: typeof options.testData === 'string' ? options.testData : undefined,\n })\n }\n })\n\n return {\n basicFields: Array.from(basicMap.values()),\n tables,\n }\n}\n\nexport function createEmptyTableRow(columns: TableColumnDef[]): Record<string, string> {\n const row: Record<string, string> = {}\n columns.forEach((col) => { row[col.field] = '' })\n return row\n}\n\nexport function normalizeTableRows(\n value: unknown,\n columns: TableColumnDef[],\n): Record<string, string>[] {\n const rows = Array.isArray(value) ? value : []\n if (!rows.length) return [createEmptyTableRow(columns)]\n return rows.map((row) => {\n const next = createEmptyTableRow(columns)\n if (row && typeof row === 'object') {\n columns.forEach((col) => {\n const raw = (row as Record<string, unknown>)[col.field]\n next[col.field] = raw == null ? '' : String(raw)\n })\n }\n return next\n })\n}\n\nexport function buildPrintDataFromForm(\n schema: TemplateFieldSchema,\n basicValues: Record<string, string>,\n tableValues: Record<string, Record<string, string>[]>,\n existing: Record<string, unknown> = {},\n): Record<string, unknown> {\n const next: Record<string, unknown> = { ...existing }\n\n schema.basicFields.forEach((field) => {\n next[field.field] = basicValues[field.field] ?? ''\n })\n\n schema.tables.forEach((table) => {\n const rows = tableValues[table.field] ?? []\n next[table.field] = rows.map((row) => {\n const record: Record<string, string> = {}\n table.columns.forEach((col) => {\n record[col.field] = row[col.field] ?? ''\n })\n return record\n })\n })\n\n return next\n}\n\nexport function createPrintDataFormState(\n schema: TemplateFieldSchema,\n printData: Record<string, unknown> = {},\n): {\n basicValues: Record<string, string>\n tableValues: Record<string, Record<string, string>[]>\n} {\n const basicValues: Record<string, string> = {}\n schema.basicFields.forEach((field) => {\n const raw = printData[field.field]\n if (raw == null || raw === '') {\n basicValues[field.field] = field.testData ?? ''\n return\n }\n basicValues[field.field] = String(raw)\n })\n\n const tableValues: Record<string, Record<string, string>[]> = {}\n schema.tables.forEach((table) => {\n tableValues[table.field] = normalizeTableRows(printData[table.field], table.columns)\n })\n\n return { basicValues, tableValues }\n}\n","export default {\n designer: {\n save: '保存',\n preview: '预览',\n editTemplate: '编辑模板数据',\n editPrintData: '编辑打印数据',\n exportFile: '导出到本地文件',\n importFile: '从本地文件导入',\n print: '打印',\n pdf: '导出 PDF',\n image: '导出图片',\n close: '关闭',\n confirm: '确定',\n apply: '应用',\n clear: '清空',\n copy: '复制',\n cancel: '取消',\n invalidJson: 'JSON 格式不正确',\n printDataBasic: '基础信息数据',\n printDataTable: '表格信息数据',\n printDataEmpty: '当前模板中没有可绑定的字段,请先在画布中为文本或表格元素设置字段名。',\n printDataAddRow: '添加一行',\n printDataDeleteRow: '删除',\n printDataFieldKey: '字段',\n paper: '纸张',\n browserPrint: '浏览器打印',\n silentPrint: '静默打印',\n batchPrint: '批量打印',\n batchPrinting: '正在准备…',\n batchCopies: '每条份数',\n batchHint: '共 {rows} 条数据 × 每条份数 = 合计 {total} 页(无需客户端)',\n printClientConnected: '打印客户端已连接',\n printClientDisconnected: '打印客户端未连接',\n printClientConnect: '连接客户端',\n printClientDisconnect: '断开连接',\n printClientNoPrinters: '未检测到打印机',\n defaultPrinter: '默认',\n },\n header: {\n title: '打印设计器',\n },\n panel: {\n draggableEls: '拖拽元素',\n miniMap: '概览图',\n pageStructure: '页面结构',\n pageHistory: '历史记录',\n properties: '属性',\n fold: '折叠',\n expand: '展开',\n minimize: '缩小',\n show: '显示',\n hide: '隐藏',\n empty: '暂无数据',\n add: '添加',\n },\n history: {\n move: '移动',\n align: '元素对齐',\n param: '参数修改',\n initial: '初始',\n deleteRecord: '删除记录',\n zoom: '缩放',\n },\n tool: {\n undo: '撤销',\n redo: '重做',\n alignLeft: '左对齐',\n alignCenter: '水平居中',\n alignRight: '右对齐',\n alignTop: '顶部对齐',\n alignMiddle: '垂直居中',\n alignBottom: '底部对齐',\n moveTop: '移至顶层',\n moveUp: '上移一层',\n moveDown: '下移一层',\n moveBottom: '移至底层',\n flipH: '水平旋转',\n flipV: '垂直旋转',\n fontInc: '字号加大',\n fontDec: '字号减小',\n fontBold: '字号加粗',\n fontUnbold: '字号减粗',\n lock: '锁定移动',\n unlock: '解锁移动',\n clone: '克隆',\n copy: '复制',\n cut: '剪切',\n paste: '粘贴',\n delete: '删除',\n zoomOut: '缩小',\n zoomIn: '放大',\n rotate: '旋转',\n clear: '清空',\n togglePanels: '显示/隐藏所有面板',\n },\n category: {\n base: '基础',\n text: '文本',\n image: '图片',\n qrcode: '二维码',\n barcode: '条形码',\n longText: '长文',\n table: '表格',\n html: 'html',\n },\n group: {\n regular: '常规',\n helper: '辅助',\n },\n locale: {\n switch: '语言',\n zhCN: '中文',\n enUS: 'English',\n },\n}\n","export default {\n designer: {\n save: 'Save',\n preview: 'Preview',\n editTemplate: 'Edit Template',\n editPrintData: 'Edit Print Data',\n exportFile: 'Export to File',\n importFile: 'Import from File',\n print: 'Print',\n pdf: 'Export PDF',\n image: 'Export Image',\n close: 'Close',\n confirm: 'OK',\n apply: 'Apply',\n clear: 'Clear',\n copy: 'Copy',\n cancel: 'Cancel',\n invalidJson: 'Invalid JSON',\n printDataBasic: 'Basic Information',\n printDataTable: 'Table Data',\n printDataEmpty: 'No bindable fields found. Set field names on text or table elements first.',\n printDataAddRow: 'Add row',\n printDataDeleteRow: 'Delete',\n printDataFieldKey: 'Field',\n paper: 'Paper',\n browserPrint: 'Browser Print',\n silentPrint: 'Silent Print',\n batchPrint: 'Batch Print',\n batchPrinting: 'Preparing…',\n batchCopies: 'Copies per record',\n batchHint: '{rows} records × copies = {total} pages (no client required)',\n printClientConnected: 'Print client connected',\n printClientDisconnected: 'Print client disconnected',\n printClientConnect: 'Connect Client',\n printClientDisconnect: 'Disconnect',\n printClientNoPrinters: 'No printers found',\n defaultPrinter: 'Default',\n },\n header: {\n title: 'Print Designer',\n },\n panel: {\n draggableEls: 'Elements',\n miniMap: 'Mini Map',\n pageStructure: 'Page Structure',\n pageHistory: 'History',\n properties: 'Properties',\n fold: 'Collapse',\n expand: 'Expand',\n minimize: 'Minimize',\n show: 'Show',\n hide: 'Hide',\n empty: 'No data',\n add: 'Add',\n },\n history: {\n move: 'Move',\n align: 'Element Align',\n param: 'Parameter Edit',\n initial: 'Initial',\n deleteRecord: 'Delete record',\n zoom: 'Zoom',\n },\n tool: {\n undo: 'Undo',\n redo: 'Redo',\n alignLeft: 'Align Left',\n alignCenter: 'Align Center',\n alignRight: 'Align Right',\n alignTop: 'Align Top',\n alignMiddle: 'Align Middle',\n alignBottom: 'Align Bottom',\n moveTop: 'Bring To Front',\n moveUp: 'Bring Forward',\n moveDown: 'Send Backward',\n moveBottom: 'Send To Back',\n flipH: 'Flip Horizontal',\n flipV: 'Flip Vertical',\n fontInc: 'Increase Font',\n fontDec: 'Decrease Font',\n fontBold: 'Bold',\n fontUnbold: 'Unbold',\n lock: 'Lock',\n unlock: 'Unlock',\n clone: 'Clone',\n copy: 'Copy',\n cut: 'Cut',\n paste: 'Paste',\n delete: 'Delete',\n zoomOut: 'Zoom Out',\n zoomIn: 'Zoom In',\n rotate: 'Rotate',\n clear: 'Clear',\n togglePanels: 'Toggle Panels',\n },\n category: {\n base: 'Base',\n text: 'Text',\n image: 'Image',\n qrcode: 'QR Code',\n barcode: 'Barcode',\n longText: 'Long Text',\n table: 'Table',\n html: 'HTML',\n },\n group: {\n regular: 'Regular',\n helper: 'Helpers',\n },\n locale: {\n switch: 'Language',\n zhCN: '中文',\n enUS: 'English',\n },\n}\n","import { ref, computed, type Ref } from 'vue-demi'\nimport zhCN from './zh-CN'\nimport enUS from './en-US'\nimport type { Lang } from '../types'\n\ntype Dict = Record<string, any>\n\nconst locales: Record<string, Dict> = {\n 'zh-CN': zhCN,\n 'en-US': enUS,\n}\n\nconst currentLang: Ref<Lang> = ref<Lang>('zh-CN')\n\nexport function setLocale(lang: Lang, messages?: Dict) {\n if (messages) locales[lang] = { ...(locales[lang] ?? {}), ...messages }\n if (locales[lang]) currentLang.value = lang\n}\n\nexport function getLocaleList(): Lang[] {\n return Object.keys(locales)\n}\n\nfunction lookup(dict: Dict, path: string): string | undefined {\n return path.split('.').reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object' && key in (acc as Dict)) {\n return (acc as Dict)[key]\n }\n return undefined\n }, dict) as string | undefined\n}\n\nexport function useI18n() {\n const lang = computed(() => currentLang.value)\n const dict = computed(() => locales[currentLang.value] ?? zhCN)\n\n function t(key: string, fallback?: string): string {\n return translate(key, fallback)\n }\n\n return { t, lang, setLocale }\n}\n\n/** Non-component i18n lookup (core utilities, modals, etc.). */\nexport function translate(key: string, fallback?: string): string {\n const dict = locales[currentLang.value] ?? zhCN\n const val = lookup(dict, key)\n if (typeof val === 'string') return val\n const en = lookup(enUS, key)\n return (typeof en === 'string' ? en : fallback ?? key)\n}\n","import { reactive } from 'vue-demi'\nimport { hiprint, initHiprint, buildByHtml } from './hiprint-bridge'\nimport { getPrintClient } from './print-client'\nimport { batchPrint, type BatchPrintOptions } from './batch-print'\nimport { assignTemplatePaperList, openPanelSetting, registerPrintTemplate } from './hiprint-paper-list'\nimport { PluginManager } from './plugins'\nimport { HistoryController } from './history'\nimport { HISTORY_ALIGN, HISTORY_PARAM } from './history-labels'\nimport { ShortcutsController } from './shortcuts'\nimport { ensureProviders, normalizeProviderMap } from './providers'\nimport { writeJSON, readJSON } from './storage'\nimport { openJsonEditorModal, type JsonEditorModalHost } from './json-editor-modal'\nimport type { PrintDataEditorModalHost } from './print-data-editor-modal'\nimport { extractTemplateFields } from './template-fields'\nimport { translate } from '../i18n'\nimport { designerStore, setZoom as storeSetZoom, setSelection } from './stores'\nimport {\n DESIGN_CONTAINER_ID,\n DRAGGABLE_ITEM_CLASS,\n SETTING_CONTAINER_ID,\n ZOOM_MAX,\n ZOOM_MIN,\n ZOOM_STEP,\n} from '../constants'\nimport type {\n DesignOptions,\n DesignerPrintTemplateOptions,\n Events,\n PluginOptions,\n Provider,\n ProviderMap,\n Print2Options,\n PrintClientStatus,\n PrinterInfo,\n} from '../types'\n\nconst LAYER_Z_TOP = 999\nconst LAYER_Z_BOTTOM = 1\n\nexport interface DesignerUtilsOptions {\n connect?: boolean\n config?: any\n paperList?: import('../types').PaperType[]\n providers?: Provider[]\n providerMap?: ProviderMap | ProviderMap[]\n plugins?: PluginOptions[]\n tags?: string[]\n templateKey?: string\n title?: string\n printData?: any\n events?: Events\n designOptions?: DesignOptions\n}\n\nconst PANEL_PAPER_KEYS = [\n 'index',\n 'name',\n 'width',\n 'height',\n 'paperHeader',\n 'paperFooter',\n 'paperType',\n] as const\n\nfunction normalizeTemplateJson(json: unknown): { panels: any[] } {\n if (!json || typeof json !== 'object') return { panels: [] }\n const value = json as { panels?: unknown }\n if (Array.isArray(value.panels)) return { panels: value.panels }\n if (Array.isArray(json)) return { panels: json as any[] }\n return { panels: [json as any] }\n}\n\nfunction pickPanelPaperSettings(panel: any): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const key of PANEL_PAPER_KEYS) {\n if (panel?.[key] != null) out[key] = panel[key]\n }\n return out\n}\n\n/** Keep current paper count/size; only apply imported elements onto matching panels. */\nfunction mergeImportOntoCurrentPanels(currentJson: any, importJson: any): { panels: any[] } {\n const currentPanels = normalizeTemplateJson(currentJson).panels\n const importPanels = normalizeTemplateJson(importJson).panels\n if (!currentPanels.length) return normalizeTemplateJson(importJson)\n\n return {\n panels: currentPanels.map((current, index) => {\n const imported = importPanels[index]\n if (!imported) return current\n return {\n ...imported,\n ...pickPanelPaperSettings(current),\n printElements: imported.printElements ?? [],\n }\n }),\n }\n}\n\n/**\n * Façade exposed to Vue components & plugins. Mirrors the public API of\n * sv-print's `DesignerUtils` so that templates and plugins port cleanly.\n */\nexport default class DesignerUtils {\n static instance: DesignerUtils | null = null\n\n options: DesignerUtilsOptions = {}\n printTemplate: any = null\n printData: any = {}\n plugins: PluginManager = new PluginManager()\n history: HistoryController\n shortcuts: ShortcutsController\n\n /** Sub-component refs registered by Vue components on mount. */\n ruler: any = null\n preview: any = null\n toolbar: any = null\n miniMap: any = null\n mobilePanel: any = null\n pageHistory: any = null\n editor: any = null\n printDataEditor: PrintDataEditorModalHost | null = null\n\n /** Reactive state shared with the UI. */\n state = designerStore\n\n /** Clipboard for cut / copy / paste shortcuts. */\n private clipboard: any[] = []\n private pasteOffsetStep = 0\n private selectionEventCleanup: (() => void) | null = null\n private zoomEventCleanup: (() => void) | null = null\n\n /** Optional hooks set by `<Designer>` after template / print-data edits. */\n onTemplateChange?: (json: any) => void\n onPrintDataChange?: (data: any) => void\n\n constructor() {\n this.history = new HistoryController(() => this.printTemplate, () => this.afterHistoryApply())\n this.shortcuts = new ShortcutsController({\n beforeDispatch: (e) => {\n const blocked = this.plugins\n .runSync('documentShortcutKeys', e, this)\n .some((r) => r === false)\n return !blocked\n },\n })\n this.bindShortcuts()\n }\n\n private afterHistoryApply() {\n this.refreshPrintTemplate()\n this.refreshSelection()\n this.reapplyElementTransforms()\n openPanelSetting()\n designerStore.uiPulse += 1\n }\n\n static getInstance(): DesignerUtils {\n if (!DesignerUtils.instance) DesignerUtils.instance = new DesignerUtils()\n return DesignerUtils.instance\n }\n\n static setInstance(u: DesignerUtils) {\n DesignerUtils.instance = u\n }\n\n // -------------------------------------------------------------------------\n // Setters used by Vue components when they mount\n // -------------------------------------------------------------------------\n setRuler(ruler: any) { this.ruler = ruler }\n setPreview(preview: any) { this.preview = preview }\n setToolBar(toolbar: any) { this.toolbar = toolbar }\n setMiniMap(miniMap: any) { this.miniMap = miniMap }\n setMobilePanel(panel: any) { this.mobilePanel = panel }\n setPageHistory(history: any) { this.pageHistory = history }\n setEditor(editor: any) { this.editor = editor }\n setPrintDataEditor(editor: PrintDataEditorModalHost | null) { this.printDataEditor = editor }\n setPrintData(data: any) { this.printData = data ?? {} }\n\n // -------------------------------------------------------------------------\n // Plugin / provider / config wiring\n // -------------------------------------------------------------------------\n setPlugins(plugins: PluginOptions[] = []) {\n this.plugins.setPlugins(plugins)\n this.plugins.run('init', this).catch(() => {/* ignore */})\n }\n\n setConfig(config?: any) {\n if (config) Object.assign(this.options, { config })\n }\n\n setConnect(connect?: boolean, callback?: (status?: boolean, msg?: any) => void) {\n this.options.connect = connect\n const client = getPrintClient()\n if (connect) {\n void client.connect({\n host: this.options.config?.host,\n token: this.options.config?.token,\n }).then((status) => {\n callback?.(status.connected, status.message)\n })\n return\n }\n client.disconnect()\n callback?.(false)\n }\n\n initProviders(providers?: Provider[]) {\n initHiprint({\n providers: ensureProviders(providers),\n autoConnect: this.options.connect,\n config: this.options.config,\n paperList: this.options.paperList,\n onPaperApplied: () => {\n try { this.ruler?.redraw?.() } catch { /* ignore */ }\n },\n })\n }\n\n buildByProvider(map?: ProviderMap | ProviderMap[], _clear?: boolean) {\n const list = normalizeProviderMap(map ?? this.options.providerMap)\n if (!list.length) return\n if (typeof window === 'undefined') return\n const $: any = (window as any).jQuery || (window as any).$\n if (!$) return\n list.forEach((m) => {\n try {\n const $els = $(m.container)\n if ($els.length) hiprint.PrintElementTypeManager.buildByHtml($els)\n } catch (e) { console.warn('buildByProvider', e) }\n })\n }\n\n buildByHtml(tags: string[] = [`.${DRAGGABLE_ITEM_CLASS}`]) {\n buildByHtml(tags)\n }\n\n // -------------------------------------------------------------------------\n // PrintTemplate lifecycle\n // -------------------------------------------------------------------------\n newPrintTemplate(template: any) {\n const tpl = new hiprint.PrintTemplate({ template })\n return tpl\n }\n\n newDesigner(\n options: DesignerPrintTemplateOptions,\n designOptions: DesignOptions = {},\n ) {\n if (this.printTemplate) {\n this.unbindSelectionEvents()\n this.unbindZoomEvents()\n try { this.printTemplate.clear?.() } catch (_) { /* ignore */ }\n }\n const tpl = new hiprint.PrintTemplate({\n template: options.template,\n settingContainer: options.settingContainer\n ? options.settingContainer\n : `#${SETTING_CONTAINER_ID}`,\n paginationContainer: options.paginationContainer,\n dataMode: options.dataMode ?? 1,\n history: options.history ?? true,\n onImageChooseClick: options.onImageChooseClick,\n onZoomChange: (scale: number) => {\n storeSetZoom(scale)\n options.onZoomChange?.(scale)\n },\n onPanelAddClick: options.onPanelAddClick,\n onFunctionClick: options.onFunctionClick,\n onDataChanged: (type: string, json: any) => {\n this.history.refreshFromTemplate()\n this.refreshSelection()\n this.reapplyElementTransforms()\n designerStore.uiPulse += 1\n options.onDataChanged?.(type, json)\n },\n onUpdateError: options.onUpdateError,\n })\n if (Array.isArray(options.fontList) && tpl.setFontList) {\n tpl.setFontList(options.fontList)\n }\n if (Array.isArray(options.fields) && tpl.setFields) {\n try { tpl.setFields(options.fields) } catch (_) { /* ignore */ }\n }\n assignTemplatePaperList(tpl, this.options.paperList)\n registerPrintTemplate(tpl)\n\n this.printTemplate = tpl\n const target = options.designContainer ?? `#${DESIGN_CONTAINER_ID}`\n try { tpl.design(target, designOptions) } catch (e) {\n console.error('[vue3-print-designer] template.design failed', e)\n }\n openPanelSetting()\n this.history.refreshFromTemplate()\n this.refreshSelection()\n this.bindSelectionEvents(tpl)\n this.bindZoomEvents(tpl)\n this.syncZoomFromTemplate()\n this.plugins.run('newPrintTemplate', tpl, this).catch(() => {/* ignore */})\n return tpl\n }\n\n private unbindSelectionEvents() {\n this.selectionEventCleanup?.()\n this.selectionEventCleanup = null\n }\n\n private unbindZoomEvents() {\n this.zoomEventCleanup?.()\n this.zoomEventCleanup = null\n }\n\n /** Keep store/ruler in sync when hiprint paper scale changes (e.g. zoom toolbar). */\n private bindZoomEvents(tpl: any) {\n this.unbindZoomEvents()\n const paper = tpl?.editingPanel?.designPaper\n if (!paper?.subscribePaperBaseInfoChanged) return\n\n const onPaperInfo = (info: { scale?: number }) => {\n if (typeof info?.scale !== 'number' || !(info.scale > 0)) return\n const next = Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, info.scale))\n if (Math.abs(next - this.state.zoom) < 0.001) return\n storeSetZoom(next)\n this.ruler?.redraw?.()\n }\n\n paper.subscribePaperBaseInfoChanged(onPaperInfo)\n this.zoomEventCleanup = () => {\n try { paper.onPaperBaseInfoChanged = null } catch { /* ignore */ }\n }\n }\n\n private syncZoomFromTemplate() {\n storeSetZoom(this.getZoom())\n this.ruler?.redraw?.()\n }\n\n private readTemplateScale(): number | null {\n const tpl = this.printTemplate\n if (!tpl) return null\n const scale = tpl.editingPanel?.designPaper?.scale\n ?? tpl.editingPanel?.scale\n ?? tpl.scale\n return typeof scale === 'number' && scale > 0 ? scale : null\n }\n\n /** Sync Vue selection state when hiprint selects / deselects print elements. */\n private bindSelectionEvents(tpl: any) {\n this.unbindSelectionEvents()\n if (typeof window === 'undefined' || !tpl) return\n const eventBus = (window as any).hinnn?.event\n const tplId = tpl.id ?? tpl.templateId\n if (!eventBus || tplId == null) return\n\n const selectKey = `PrintElementSelectEventKey_${tplId}`\n const mouseUpKey = `hiprintTemplateMouseUp_${tplId}`\n const historyKey = `hiprintTemplateDataChanged_${tplId}`\n\n const scheduleRefresh = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => this.refreshSelection())\n })\n }\n\n const onSelect = (payload?: { printElement?: any }) => {\n const pe = payload?.printElement\n if (pe) {\n setSelection({\n count: 1,\n ids: [pe?.id ?? ''].filter(Boolean),\n elements: [pe],\n })\n return\n }\n scheduleRefresh()\n }\n\n const onClear = () => {\n setSelection({ count: 0, ids: [], elements: [] })\n }\n\n const onHistoryPush = () => {\n this.history.refreshFromTemplate()\n designerStore.uiPulse += 1\n }\n\n eventBus.on(selectKey, onSelect)\n eventBus.on(mouseUpKey, scheduleRefresh)\n eventBus.on('clearSettingContainer', onClear)\n eventBus.on(historyKey, onHistoryPush)\n\n this.selectionEventCleanup = () => {\n eventBus.off(selectKey, onSelect)\n eventBus.off(mouseUpKey, scheduleRefresh)\n eventBus.off('clearSettingContainer', onClear)\n eventBus.off(historyKey, onHistoryPush)\n }\n }\n\n refreshPrintTemplate() {\n try { this.printTemplate?.refresh?.() } catch (_) { /* ignore */ }\n this.reapplyElementTransforms()\n }\n\n private getElementTransformParts(el: any) {\n const opts = el?.options ?? {}\n return {\n rotate: Number(opts.transform ?? opts.rotate ?? 0) || 0,\n scaleX: Number(opts.scaleX ?? 1) || 1,\n scaleY: Number(opts.scaleY ?? 1) || 1,\n }\n }\n\n private buildTransformValue(parts: { rotate: number; scaleX: number; scaleY: number }) {\n const tokens: string[] = []\n if (parts.rotate) tokens.push(`rotate(${parts.rotate}deg)`)\n if (parts.scaleX !== 1) tokens.push(`scaleX(${parts.scaleX})`)\n if (parts.scaleY !== 1) tokens.push(`scaleY(${parts.scaleY})`)\n return tokens.join(' ')\n }\n\n private getTransformTarget(el: any) {\n const dt = el?.designTarget\n if (!dt?.find) return dt\n try {\n const inner = dt.find('.hiprint-printElement-content').parent('.hiprint-printElement')\n if (inner?.length) return inner\n } catch { /* ignore */ }\n return dt\n }\n\n private applyElementTransform(el: any) {\n const value = this.buildTransformValue(this.getElementTransformParts(el))\n const target = this.getTransformTarget(el)\n if (!target?.css) return\n\n const keys = ['transform', '-ms-transform', '-moz-transform', '-webkit-transform', '-o-transform']\n keys.forEach((key) => target.css(key, value))\n if (value.includes('scale')) {\n target.css('transform-origin', 'center center')\n }\n }\n\n private reapplyElementTransforms() {\n this.getPanelElements().forEach((el) => {\n const { scaleX, scaleY } = this.getElementTransformParts(el)\n if (scaleX !== 1 || scaleY !== 1) this.applyElementTransform(el)\n })\n }\n\n refreshSelection() {\n const tpl = this.printTemplate\n if (!tpl) {\n setSelection({ count: 0, ids: [], elements: [] })\n return\n }\n\n let els: any[] = []\n try { els = tpl.getSelectEls?.() ?? [] } catch { /* ignore */ }\n\n if (!els.length) {\n els = tpl.editingPanel?.printElements?.filter?.((e: any) => {\n if (e?.selected) return true\n try {\n return !!e?.designTarget?.hasClass?.('hiprint-printElement-selected')\n || !!e?.designTarget?.hasClass?.('selected')\n } catch {\n return false\n }\n }) ?? []\n }\n\n setSelection({\n count: els.length,\n ids: els.map((e) => e?.id ?? '').filter(Boolean),\n elements: els,\n })\n }\n\n /** Select a print element from auxiliary panels (page structure, etc.). */\n selectPrintElement(item: any) {\n const tpl = this.printTemplate\n if (!tpl || !item) return\n\n const $: any = typeof window !== 'undefined'\n ? (window as any).$ || (window as any).jQuery\n : null\n\n const dt = $?.(item.designTarget)\n if ($ && dt?.length) {\n tpl.editingPanel?.printElements?.forEach((el: any) => {\n if (el === item) return\n const target = $(el.designTarget)\n if (!target?.length) return\n target.children('div[panelindex]').removeClass('selected').css({ display: 'none' })\n })\n\n const type = String(item.printElementType?.type || '')\n if (type.includes('table')) {\n dt.find('tr:first td:first').trigger('click')\n } else {\n dt.children('div[panelindex]').addClass('selected').css({ display: 'block' })\n try {\n dt.data('hidraggable')?.options?.onBeforeSelectAllDrag?.call(dt[0], {})\n } catch { /* ignore */ }\n }\n }\n\n const tplId = tpl.id ?? tpl.templateId\n const eventBus = (window as any).hinnn?.event\n if (eventBus && tplId != null) {\n eventBus.trigger(`PrintElementSelectEventKey_${tplId}`, { printElement: item })\n }\n\n setSelection({\n count: 1,\n ids: [String(item.id ?? '')].filter(Boolean),\n elements: [item],\n })\n }\n\n /** Re-apply hiprint selection UI after toolbar actions that would clear it. */\n private restoreSelection(elements: any[]) {\n const items = elements.filter(Boolean)\n if (!items.length) return\n\n const $: any = typeof window !== 'undefined'\n ? (window as any).$ || (window as any).jQuery\n : null\n if (!$) return\n\n items.forEach((item) => {\n const dt = $(item.designTarget)\n if (!dt?.length) return\n\n const type = String(item.printElementType?.type || '')\n if (type.includes('table')) {\n dt.find('tr:first td:first').trigger('click')\n return\n }\n\n dt.children('div[panelindex]').addClass('selected').css({ display: 'block' })\n try {\n const dom = dt[0]\n dt.data('hidraggable')?.options?.onBeforeSelectAllDrag?.call(dom, {})\n } catch { /* ignore */ }\n })\n\n setSelection({\n count: items.length,\n ids: items.map((e) => String(e?.id ?? '')).filter(Boolean),\n elements: items,\n })\n }\n\n // -------------------------------------------------------------------------\n // Persistence / IO\n // -------------------------------------------------------------------------\n getTemplateJson(): any {\n try { return this.printTemplate?.getJson?.() ?? null } catch { return null }\n }\n\n private templateStorageKey(): string {\n return `tpl:${this.options.templateKey || 'default'}`\n }\n\n save() {\n const json = this.getTemplateJson()\n if (!json) return\n const key = this.options.templateKey || 'default'\n const blocked = this.options.events?.onSave?.(key, json) === false\n if (blocked) return\n writeJSON(this.templateStorageKey(), json)\n }\n\n loadSaved(): any | null {\n return readJSON(this.templateStorageKey(), null as any)\n }\n\n private async openJsonEditor(options: Parameters<JsonEditorModalHost['open']>[0]) {\n const host = this.editor as JsonEditorModalHost | null\n if (host?.open) return host.open(options)\n return openJsonEditorModal(options)\n }\n\n async edit() {\n const json = this.getTemplateJson()\n if (this.options.events?.onEdit?.(json) === false) return\n\n try {\n const next = await this.openJsonEditor({\n title: translate('designer.editTemplate'),\n value: json,\n variant: 'template',\n confirmText: translate('designer.apply'),\n cancelText: translate('designer.cancel'),\n clearText: translate('designer.clear'),\n copyText: translate('designer.copy'),\n invalidText: translate('designer.invalidJson'),\n })\n if (next == null) return\n\n this.applyTemplateJson(next)\n writeJSON(this.templateStorageKey(), next)\n } catch (e) {\n console.error('[vue3-print-designer] edit template failed', e)\n }\n }\n\n async editData() {\n if (this.options.events?.onEditData?.(this.printData) === false) return\n\n try {\n const schema = extractTemplateFields(this.getTemplateJson())\n const host = this.printDataEditor\n if (!host?.open) {\n console.warn('[vue3-print-designer] print data editor host is unavailable')\n return\n }\n\n const next = await host.open({\n title: translate('designer.editPrintData'),\n schema,\n value: this.printData ?? {},\n confirmText: translate('designer.apply'),\n cancelText: translate('designer.cancel'),\n clearText: translate('designer.clear'),\n copyText: translate('designer.copy'),\n basicSectionTitle: translate('designer.printDataBasic'),\n tableSectionTitle: translate('designer.printDataTable'),\n emptyHint: translate('designer.printDataEmpty'),\n addRowText: translate('designer.printDataAddRow'),\n deleteRowText: translate('designer.printDataDeleteRow'),\n tableFieldLabel: translate('designer.printDataFieldKey'),\n })\n if (next == null) return\n\n this.setPrintData(next)\n this.onPrintDataChange?.(next)\n } catch (e) {\n console.error('[vue3-print-designer] edit print data failed', e)\n }\n }\n\n editFunction(option: any, printElement: any, event: any) {\n // Plugins (e.g. plugin-view-code-edit) listen for this hook.\n this.plugins.runSync('createPrintElement', option, printElement, event)\n }\n\n export() {\n const json = this.getTemplateJson()\n if (!json || typeof window === 'undefined') return\n const blob = new Blob([JSON.stringify(json, null, 2)], { type: 'application/json' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = `${this.options.templateKey || 'template'}.json`\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 1000)\n }\n\n import() {\n if (typeof window === 'undefined') return\n const input = document.createElement('input')\n input.type = 'file'\n input.accept = '.json,application/json'\n input.onchange = () => {\n const file = input.files?.[0]\n if (!file) return\n const reader = new FileReader()\n reader.onload = () => {\n try {\n const json = JSON.parse(String(reader.result))\n this.applyImportTemplateJson(json)\n } catch (e) { console.error('Invalid template JSON', e) }\n }\n reader.readAsText(file)\n }\n input.click()\n }\n\n /** Import onto existing paper(s) without creating extra panels. */\n private applyImportTemplateJson(json: any) {\n const tpl = this.printTemplate\n const currentJson = this.getTemplateJson()\n\n if (!tpl?.update || !currentJson?.panels?.length) {\n this.applyTemplateJson(json)\n return\n }\n\n const merged = mergeImportOntoCurrentPanels(currentJson, json)\n const activeIndex = tpl.editingPanel?.index ?? tpl.printPanels?.[0]?.index ?? 0\n\n try {\n tpl.update(merged, activeIndex)\n } catch (e) {\n console.error('[vue3-print-designer] import template failed', e)\n return\n }\n\n this.history.refreshFromTemplate()\n this.refreshSelection()\n this.reapplyElementTransforms()\n openPanelSetting()\n\n const nextJson = this.getTemplateJson()\n if (nextJson) this.onTemplateChange?.(nextJson)\n }\n\n applyTemplateJson(json: any) {\n this.newDesigner(\n { template: json, history: true, dataMode: 1 },\n this.options.designOptions || {},\n )\n this.onTemplateChange?.(json)\n }\n\n getPrinterList(): PrinterInfo[] {\n return getPrintClient().getPrinterList()\n }\n\n getPrintClientStatus(): PrintClientStatus {\n return getPrintClient().getStatus()\n }\n\n /**\n * Browser-side batch print. Combines records into a single print job —\n * works without electron-hiprint. `printDataList` can be a single\n * object or an array; each record can also be printed multiple times\n * via `options.copies`.\n */\n async batchPrint(\n printDataList?: unknown | unknown[],\n options?: BatchPrintOptions,\n ): Promise<void> {\n if (!this.printTemplate) {\n throw new Error('[print-designer] No active print template.')\n }\n const data = printDataList ?? this.printData ?? {}\n const list = Array.isArray(data) ? data : [data]\n await this.plugins.run('beforePrint', this.printTemplate, this)\n await batchPrint(this.printTemplate, list, options)\n }\n\n async print2(printData?: any, options?: Print2Options): Promise<void> {\n const data = printData ?? this.printData\n if (!this.printTemplate) {\n throw new Error('[print-designer] No active print template.')\n }\n return getPrintClient().printByInstance(this.printTemplate, data, options)\n }\n\n // -------------------------------------------------------------------------\n // Zoom / view-port helpers\n // -------------------------------------------------------------------------\n setZoom(value: number) {\n const scale = Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, Number.isFinite(value) ? value : 1))\n storeSetZoom(scale)\n try { this.printTemplate?.zoom?.(scale) } catch (_) { /* ignore */ }\n this.ruler?.redraw?.()\n }\n\n getZoom() {\n const scale = this.readTemplateScale()\n if (scale != null) return Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, scale))\n return this.state.zoom\n }\n\n zoomIn() {\n const next = Math.min(ZOOM_MAX, Math.round((this.getZoom() + ZOOM_STEP) * 10) / 10)\n this.setZoom(next)\n }\n\n zoomOut() {\n const next = Math.max(ZOOM_MIN, Math.round((this.getZoom() - ZOOM_STEP) * 10) / 10)\n this.setZoom(next)\n }\n\n canZoomIn(): boolean {\n return this.getZoom() < ZOOM_MAX - 0.001\n }\n\n canZoomOut(): boolean {\n return this.getZoom() > ZOOM_MIN + 0.001\n }\n\n adaptToSize() {\n if (typeof window === 'undefined') return\n const host = document.getElementById(DESIGN_CONTAINER_ID)\n const paper = host?.querySelector?.('.hiprint-printPanel, .hiprint-printPaper') as HTMLElement | null\n if (!host || !paper) return\n const hostRect = host.getBoundingClientRect()\n const zoom = Math.max(ZOOM_MIN, this.getZoom())\n const paperW = (paper.offsetWidth || 1) / zoom\n const scale = Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, (hostRect.width - 60) / paperW))\n this.setZoom(scale)\n }\n\n // -------------------------------------------------------------------------\n // Toolbar action helpers (used by Toolbar.vue + shortcuts)\n // -------------------------------------------------------------------------\n hasSelection(): boolean { return this.state.selection.count > 0 }\n\n /** Elements on the active design panel (shallow copy for Vue reactivity). */\n getPageElements(): any[] {\n return [...this.getPanelElements()]\n }\n\n private getSelectedElements(): any[] {\n const tpl = this.printTemplate\n if (!tpl) return []\n let els: any[] = []\n try { els = tpl.getSelectEls?.() ?? [] } catch { /* ignore */ }\n if (!els.length) els = this.state.selection.elements as any[]\n return els.filter(Boolean)\n }\n\n private getPanelElements(): any[] {\n return this.printTemplate?.editingPanel?.printElements ?? []\n }\n\n private getExplicitZIndex(el: any): number | null {\n const raw = el?.options?.zIndex\n if (raw != null && raw !== '' && Number.isFinite(Number(raw))) return Number(raw)\n return null\n }\n\n private setElementZIndex(el: any, zIndex: number) {\n this.updateElementOption(el, 'zIndex', zIndex, true)\n }\n\n private updateElementOption(el: any, name: string, value: unknown, silent = true): boolean {\n try {\n if (typeof el?.updateOption === 'function') {\n el.updateOption(name, value, silent)\n return true\n }\n } catch { /* fall through */ }\n\n try {\n el.options[name] = value\n el.updateDesignViewFromOptions?.()\n return true\n } catch { /* ignore */ }\n return false\n }\n\n private getElementFontSize(el: any): number {\n const raw = el?.options?.fontSize\n const size = Number(raw)\n if (Number.isFinite(size) && size > 0) return size\n const typeDefault = Number(el?.printElementType?.fontSize)\n return Number.isFinite(typeDefault) && typeDefault > 0 ? typeDefault : 12\n }\n\n private resolveElementTid(el: any): string | null {\n const tid = el?.printElementType?.tid ?? el?.tid\n if (tid) return String(tid)\n const type = String(el?.printElementType?.type || '')\n if (!type) return null\n return `defaultModule.${type}`\n }\n\n private serializeElement(el: any): any | null {\n if (!el) return null\n try {\n const tid = this.resolveElementTid(el)\n const optionsSource = el.options?.getPrintElementOptionEntity?.() ?? el.options ?? {}\n const options = JSON.parse(JSON.stringify(optionsSource))\n const printElementType = el.printElementType\n ? JSON.parse(JSON.stringify(el.printElementType))\n : undefined\n if (!tid && !printElementType?.type) return null\n return { tid: tid ?? undefined, printElementType, options }\n } catch {\n return null\n }\n }\n\n private offsetElementEntity(entity: any, delta: number) {\n const copy = JSON.parse(JSON.stringify(entity))\n copy.options = { ...(copy.options || {}) }\n copy.options.left = (Number(copy.options.left) || 0) + delta\n copy.options.top = (Number(copy.options.top) || 0) + delta\n return copy\n }\n\n private insertElementEntity(entity: any, initSizeByHtml = false): any | null {\n const panel = this.printTemplate?.editingPanel\n const tpl = this.printTemplate\n if (!panel || (!entity?.tid && !entity?.printElementType?.type)) return null\n\n try {\n const type = panel.getPrintElementTypeByEntity?.(entity)\n if (!type?.createPrintElement) return null\n\n const el = type.createPrintElement(entity.options)\n el.setTemplateId?.(tpl.id ?? tpl.templateId)\n el.setPanel?.(panel)\n panel.appendDesignPrintElement?.(panel.designPaper, el, initSizeByHtml)\n panel.printElements.push(el)\n el.design?.(undefined, panel.designPaper)\n\n if (el.options?.field && tpl?.qtDesigner && typeof tpl.qtDesignderFunction === 'function') {\n el.options.qid = tpl.qtDesignderFunction(el.options.field)\n }\n\n this.applyElementTransform(el)\n return el\n } catch {\n return null\n }\n }\n\n /** Insert a new canvas element by hiprint `tid` (e.g. `defaultModule.text`). */\n addElementByTid(tid: string, options: { left?: number; top?: number } = {}) {\n const left = Number.isFinite(options.left) ? Number(options.left) : 60\n const top = Number.isFinite(options.top) ? Number(options.top) : 60\n const el = this.insertElementEntity({ tid, options: { left, top } }, true)\n if (!el) return null\n this.markTemplateChanged('新增元素')\n this.selectPrintElement(el)\n const json = this.getTemplateJson()\n if (json) this.onTemplateChange?.(json)\n return el\n }\n\n /** Clone a live print element using hiprint's native clone path. */\n private duplicateElement(el: any, delta = 10): any | null {\n const panel = this.printTemplate?.editingPanel\n const tpl = this.printTemplate\n if (!panel || !tpl || !el) return null\n\n try {\n let copy: any = null\n if (typeof el.clone === 'function') {\n copy = el.clone()\n } else if (el.printElementType?.createPrintElement) {\n copy = el.printElementType.createPrintElement()\n Object.keys(el.options || {}).forEach((key) => {\n copy.options[key] = el.options[key]\n })\n }\n if (!copy) return null\n\n const left = (Number(copy.options.left) || 0) + delta\n const top = (Number(copy.options.top) || 0) + delta\n if (typeof copy.options.setLeft === 'function') copy.options.setLeft(left)\n else copy.options.left = left\n if (typeof copy.options.setTop === 'function') copy.options.setTop(top)\n else copy.options.top = top\n\n copy.setTemplateId?.(tpl.id ?? tpl.templateId)\n copy.setPanel?.(panel)\n panel.appendDesignPrintElement?.(panel.designPaper, copy, false)\n panel.printElements.push(copy)\n copy.design?.(undefined, panel.designPaper)\n\n if (copy.options?.field && tpl?.qtDesigner && typeof tpl.qtDesignderFunction === 'function') {\n copy.options.qid = tpl.qtDesignderFunction(copy.options.field)\n }\n\n this.applyElementTransform(copy)\n return copy\n } catch {\n return null\n }\n }\n\n private setElementDraggable(el: any, draggable: boolean) {\n if (!el?.options) return\n el.options.draggable = draggable\n try {\n el.designTarget?.hidraggable?.('update', { draggable })\n } catch { /* ignore */ }\n try {\n el.designTarget?.hireizeable?.('update', { draggable })\n } catch { /* ignore */ }\n }\n\n private buildOrderWithSelectedAtEnd(selected: any[]) {\n const selectedSet = new Set(selected)\n const list = this.getPanelElements()\n return [\n ...list.filter((el) => !selectedSet.has(el)),\n ...list.filter((el) => selectedSet.has(el)),\n ]\n }\n\n private buildOrderWithSelectedAtStart(selected: any[]) {\n const selectedSet = new Set(selected)\n const list = this.getPanelElements()\n return [\n ...list.filter((el) => selectedSet.has(el)),\n ...list.filter((el) => !selectedSet.has(el)),\n ]\n }\n\n private syncPanelElementOrder(ordered: any[]) {\n const panel = this.printTemplate?.editingPanel\n if (!panel) return\n panel.printElements = ordered\n\n try {\n const $ = (window as any).jQuery || (window as any).$\n const container = panel.designPaper?.target ?? panel.target\n if ($ && container?.length) {\n ordered.forEach((el) => {\n if (el?.designTarget) $(el.designTarget).appendTo(container)\n })\n }\n } catch { /* ignore */ }\n }\n\n private getPanelSizePt(panel: any): { width: number; height: number } {\n const hinnn = (window as any).hinnn\n const mmW = Number(panel?.width ?? panel?.mmwidth ?? 0)\n const mmH = Number(panel?.height ?? panel?.mmheight ?? 0)\n if (hinnn?.mm?.toPt) {\n return { width: hinnn.mm.toPt(mmW), height: hinnn.mm.toPt(mmH) }\n }\n return { width: mmW, height: mmH }\n }\n\n private getElementRect(el: any) {\n const opts = el?.options\n if (!opts) return null\n const left = Number(opts.getLeft?.() ?? opts.left ?? 0)\n const top = Number(opts.getTop?.() ?? opts.top ?? 0)\n const width = Number(opts.getWidth?.() ?? opts.width ?? 0)\n const height = Number(opts.getHeight?.() ?? opts.height ?? 0)\n return { el, left, top, width, height, right: left + width, bottom: top + height }\n }\n\n private applyElementPosition(el: any, left: number, top: number) {\n const opts = el?.options\n if (!opts) return\n const width = Number(opts.getWidth?.() ?? opts.width ?? 0)\n const height = Number(opts.getHeight?.() ?? opts.height ?? 0)\n try {\n if (typeof el.updateSizeAndPositionOptions === 'function') {\n el.updateSizeAndPositionOptions(left, top, width, height)\n } else {\n opts.setLeft?.(left)\n opts.setTop?.(top)\n opts.copyDesignTopFromTop?.()\n }\n } catch { /* ignore */ }\n\n try {\n const dt = el.designTarget\n if (dt?.css) {\n dt.css('left', opts.displayLeft?.() ?? `${left}pt`)\n dt.css('top', opts.displayTop?.() ?? `${top}pt`)\n }\n el.createLineOfPosition?.()\n } catch { /* ignore */ }\n }\n\n private markTemplateChanged(label = HISTORY_PARAM) {\n const tpl = this.printTemplate\n if (!tpl) return\n try {\n const lib = (hiprint as any)?.instance ?? (window as any).HiPrintlib?.instance\n if (lib) lib.changed = true\n const tplId = tpl.id ?? tpl.templateId\n const bus = (window as any).hinnn?.event\n if (bus && tplId != null) bus.trigger(`hiprintTemplateDataChanged_${tplId}`, label)\n } catch { /* ignore */ }\n this.refreshPrintTemplate()\n this.history.refreshFromTemplate()\n }\n\n align(side: 'left' | 'center' | 'right' | 'top' | 'middle' | 'bottom') {\n const tpl = this.printTemplate\n if (!tpl) return\n\n const rects = this.getSelectedElements()\n .map((el) => this.getElementRect(el))\n .filter(Boolean) as Array<NonNullable<ReturnType<DesignerUtils['getElementRect']>>>\n if (!rects.length) return\n\n let refLeft: number\n let refTop: number\n let refRight: number\n let refBottom: number\n\n if (rects.length === 1) {\n const panel = tpl.editingPanel ?? rects[0].el?.panel\n const { width, height } = this.getPanelSizePt(panel)\n refLeft = 0\n refTop = 0\n refRight = width\n refBottom = height\n } else {\n refLeft = Math.min(...rects.map((r) => r.left))\n refTop = Math.min(...rects.map((r) => r.top))\n refRight = Math.max(...rects.map((r) => r.right))\n refBottom = Math.max(...rects.map((r) => r.bottom))\n }\n\n const refCenterX = (refLeft + refRight) / 2\n const refCenterY = (refTop + refBottom) / 2\n\n rects.forEach((r) => {\n let nextLeft = r.left\n let nextTop = r.top\n switch (side) {\n case 'left':\n nextLeft = refLeft\n break\n case 'right':\n nextLeft = refRight - r.width\n break\n case 'center':\n nextLeft = refCenterX - r.width / 2\n break\n case 'top':\n nextTop = refTop\n break\n case 'bottom':\n nextTop = refBottom - r.height\n break\n case 'middle':\n nextTop = refCenterY - r.height / 2\n break\n }\n if (nextLeft !== r.left || nextTop !== r.top) {\n this.applyElementPosition(r.el, nextLeft, nextTop)\n }\n })\n\n this.markTemplateChanged(HISTORY_ALIGN)\n }\n\n private callOnSelection(method: string, ...args: any[]) {\n const els = this.state.selection.elements as any[]\n els.forEach((el) => {\n try { el?.[method]?.(...args) } catch (_) { /* ignore */ }\n })\n this.refreshPrintTemplate()\n }\n\n moveZ(action: 'top' | 'up' | 'down' | 'bottom') {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n if (action === 'top') {\n selected.forEach((el) => this.setElementZIndex(el, LAYER_Z_TOP))\n this.syncPanelElementOrder(this.buildOrderWithSelectedAtEnd(selected))\n } else if (action === 'bottom') {\n selected.forEach((el) => this.setElementZIndex(el, LAYER_Z_BOTTOM))\n this.syncPanelElementOrder(this.buildOrderWithSelectedAtStart(selected))\n } else {\n selected.forEach((el) => {\n const explicit = this.getExplicitZIndex(el)\n if (action === 'up') {\n const base = explicit ?? 0\n const next = Math.min(LAYER_Z_TOP, base + 1)\n if (next !== explicit) this.setElementZIndex(el, next)\n return\n }\n if (explicit == null || explicit <= LAYER_Z_BOTTOM) return\n this.setElementZIndex(el, Math.max(LAYER_Z_BOTTOM, explicit - 1))\n })\n }\n\n this.markTemplateChanged(HISTORY_ALIGN)\n }\n\n flip(axis: 'h' | 'v') {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n const key = axis === 'h' ? 'scaleX' : 'scaleY'\n selected.forEach((el) => {\n const opts = el.options ||= {}\n const current = Number(opts[key] ?? 1)\n opts[key] = current === -1 ? 1 : -1\n this.applyElementTransform(el)\n })\n\n this.markTemplateChanged(HISTORY_ALIGN)\n }\n\n changeFont(delta: number) {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n let changed = false\n selected.forEach((el) => {\n const next = Math.max(6, Math.min(72, this.getElementFontSize(el) + delta))\n if (this.updateElementOption(el, 'fontSize', next, true)) changed = true\n })\n\n if (changed) this.markTemplateChanged(HISTORY_PARAM)\n }\n\n setBold(bold: boolean) {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n const weight = bold ? 'bold' : ''\n let changed = false\n selected.forEach((el) => {\n if (this.updateElementOption(el, 'fontWeight', weight, true)) changed = true\n })\n\n if (changed) this.markTemplateChanged(HISTORY_PARAM)\n }\n\n isSelectionLocked(): boolean {\n const selected = this.getSelectedElements()\n return selected.length > 0 && selected.every((el) => el?.options?.draggable === false)\n }\n\n isSelectionUnlocked(): boolean {\n const selected = this.getSelectedElements()\n return selected.length > 0 && selected.every((el) => el?.options?.draggable !== false)\n }\n\n setLock(locked: boolean) {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n selected.forEach((el) => {\n this.setElementDraggable(el, !locked)\n })\n\n this.markTemplateChanged(HISTORY_PARAM)\n this.restoreSelection(selected)\n designerStore.uiPulse += 1\n }\n\n clone() {\n const selected = this.getSelectedElements()\n if (!selected.length) return\n\n const created: any[] = []\n selected.forEach((el) => {\n const copy = this.duplicateElement(el, 10)\n if (copy) created.push(copy)\n })\n\n if (!created.length) return\n\n this.markTemplateChanged(HISTORY_PARAM)\n this.restoreSelection(created)\n designerStore.uiPulse += 1\n }\n\n copy() {\n const selected = this.getSelectedElements()\n this.clipboard = selected\n .map((el) => this.serializeElement(el))\n .filter(Boolean)\n this.pasteOffsetStep = 0\n }\n\n cut() {\n if (!this.getSelectedElements().length) return\n this.copy()\n this.delete()\n }\n\n paste() {\n if (!this.clipboard.length) return\n\n this.pasteOffsetStep += 1\n const delta = 10 * this.pasteOffsetStep\n const created: any[] = []\n\n this.clipboard.forEach((entity) => {\n const copy = this.insertElementEntity(this.offsetElementEntity(entity, delta), false)\n if (copy) created.push(copy)\n })\n\n if (!created.length) return\n\n this.markTemplateChanged(HISTORY_PARAM)\n this.restoreSelection(created)\n designerStore.uiPulse += 1\n }\n\n delete() {\n const selected = this.getSelectedElements()\n const panel = this.printTemplate?.editingPanel\n if (!panel || !selected.length) return\n\n selected.forEach((el) => {\n try {\n panel.deletePrintElement?.(el)\n } catch {\n try { el?.delete?.() } catch { /* ignore */ }\n }\n })\n\n this.refreshSelection()\n this.markTemplateChanged(HISTORY_PARAM)\n }\n\n /** Delete a single element from the structure panel or other auxiliary UI. */\n deletePrintElement(item: any) {\n if (!item) return\n const panel = this.printTemplate?.editingPanel\n if (!panel) return\n\n try {\n panel.deletePrintElement?.(item)\n } catch {\n try { item?.delete?.() } catch { /* ignore */ }\n }\n\n this.refreshSelection()\n this.markTemplateChanged(HISTORY_PARAM)\n designerStore.uiPulse += 1\n }\n\n rotate(deg = 90) {\n const els = this.getSelectedElements()\n if (!els.length) return\n els.forEach((el) => {\n try {\n const opts = el.options ||= {}\n const cur = Number(opts.transform ?? opts.rotate ?? 0) || 0\n const next = ((cur + deg) % 360 + 360) % 360\n if (typeof el.updateOption === 'function') el.updateOption('transform', next, true)\n else opts.transform = next\n this.applyElementTransform(el)\n } catch { /* ignore */ }\n })\n this.markTemplateChanged(HISTORY_ALIGN)\n }\n\n clearPanel() {\n const panel = this.printTemplate?.editingPanel\n if (!panel) return\n const list = (panel.printElements ?? []).slice()\n list.forEach((el: any) => { try { panel.deletePrintElement?.(el) } catch (_) { /* ignore */ } })\n this.refreshSelection()\n this.markTemplateChanged(HISTORY_PARAM)\n }\n\n // -------------------------------------------------------------------------\n // Shortcut wiring\n // -------------------------------------------------------------------------\n private bindShortcuts() {\n this.shortcuts.add([\n { combo: 'mod+z', description: 'Undo', run: () => this.history.undo() },\n { combo: 'mod+shift+z', description: 'Redo', run: () => this.history.redo() },\n { combo: 'mod+y', description: 'Redo', run: () => this.history.redo() },\n { combo: 'mod+c', description: 'Copy', run: () => this.copy() },\n { combo: 'mod+x', description: 'Cut', run: () => this.cut() },\n { combo: 'mod+v', description: 'Paste', run: () => this.paste() },\n { combo: 'mod+d', description: 'Clone', run: () => this.clone() },\n { combo: 'delete', description: 'Delete', run: () => this.delete() },\n { combo: 'backspace', description: 'Delete', run: () => this.delete() },\n { combo: 'mod+=', description: 'Zoom in', run: () => this.zoomIn() },\n { combo: 'mod+-', description: 'Zoom out', run: () => this.zoomOut() },\n ])\n }\n}\n\n/** Reactive wrapper, so consumers can `import { utils }` and read state. */\nexport const reactiveDesignerUtils = () =>\n reactive(DesignerUtils.getInstance()) as DesignerUtils\n","import { inject, provide, type InjectionKey } from 'vue-demi'\nimport DesignerUtils from '../core/designer-utils'\n\nexport const DESIGNER_INJECTION_KEY: InjectionKey<DesignerUtils> = Symbol('vue3-print-designer/utils')\n\nexport function provideDesigner(utils: DesignerUtils): DesignerUtils {\n provide(DESIGNER_INJECTION_KEY, utils)\n return utils\n}\n\n/**\n * Get the current DesignerUtils from the Vue injection chain.\n * Falls back to the global singleton when no provider is present.\n */\nexport function useDesigner(): DesignerUtils {\n const found = inject(DESIGNER_INJECTION_KEY, null as DesignerUtils | null)\n return found ?? DesignerUtils.getInstance()\n}\n","/**\n * Canvas ruler — matches sv-print visual behaviour:\n * - unit: mm\n * - major label every 10 mm (… -20, -10, 0, 10, 20 …)\n * - mid tick every 5 mm, fine tick every 1 mm (when zoom allows)\n * - negative axis: horizontal from -90 mm, vertical from -10 mm (0 at paper top-left)\n * - paper region highlighted on the ruler\n */\nimport { onMounted, onBeforeUnmount, watch } from 'vue-demi'\nimport { designerStore } from '../core/stores'\nimport { DESIGN_CONTAINER_ID } from '../constants'\n\nexport interface UseRulerOptions {\n canvasX: () => HTMLCanvasElement | null\n canvasY: () => HTMLCanvasElement | null\n scrollerEl: () => HTMLElement | null\n /** Workspace container — observed for vertical ruler height changes. */\n workspaceEl?: () => HTMLElement | null\n}\n\nconst RULER_SIZE = 24\nconst LABEL_STEP_MM = 10\nconst MID_STEP_MM = 5\n/** Minimum padding from scroller edge. */\nconst PAPER_ORIGIN_PAD = 24\n/** Ruler negative range before paper origin (mm). */\nconst RULER_NEG_START_MM_X = 90\nconst RULER_NEG_START_MM_Y = 10\n\ninterface PaperGeom {\n x: number\n y: number\n widthPx: number\n heightPx: number\n widthMm: number\n heightMm: number\n}\n\nfunction readCssVar(name: string, fallback: string): string {\n const root = document.querySelector('.svp-root')\n if (!root) return fallback\n const v = getComputedStyle(root).getPropertyValue(name).trim()\n return v || fallback\n}\n\nfunction syncPaperPadding(scroller: HTMLElement): PaperGeom | null {\n const host = document.getElementById(DESIGN_CONTAINER_ID)\n if (!host) return null\n const paper = host.querySelector('.hiprint-printPaper') as HTMLElement | null\n if (!paper) return null\n\n const paperW = paper.offsetWidth || paper.getBoundingClientRect().width\n const paperH = paper.offsetHeight || paper.getBoundingClientRect().height\n const sw = paper.style.width || ''\n const sh = paper.style.height || ''\n const wMm = /^(\\d+(?:\\.\\d+)?)\\s*mm$/i.exec(sw)\n const hMm = /^(\\d+(?:\\.\\d+)?)\\s*mm$/i.exec(sh)\n const widthMm = wMm ? parseFloat(wMm[1]) : 210\n const heightMm = hMm ? parseFloat(hMm[1]) : 297\n const pxPerMmX = paperW / Math.max(1, widthMm)\n const pxPerMmY = paperH / Math.max(1, heightMm)\n\n const padLeft = Math.max(PAPER_ORIGIN_PAD, RULER_NEG_START_MM_X * pxPerMmX)\n const padTop = Math.max(PAPER_ORIGIN_PAD, RULER_NEG_START_MM_Y * pxPerMmY)\n const padRight = Math.max(PAPER_ORIGIN_PAD, scroller.clientWidth - paperW - padLeft)\n const padBottom = Math.max(PAPER_ORIGIN_PAD, scroller.clientHeight - paperH - padTop)\n const padding = `${padTop}px ${padRight}px ${padBottom}px ${padLeft}px`\n if (host.style.padding !== padding) host.style.padding = padding\n\n const widthPx = paperW\n const heightPx = paperH\n return {\n x: padLeft,\n y: padTop,\n widthPx,\n heightPx,\n widthMm,\n heightMm,\n }\n}\n\nfunction readPaperGeometry(scroller: HTMLElement | null): PaperGeom | null {\n if (!scroller) return null\n return syncPaperPadding(scroller)\n}\n\ninterface DrawArgs {\n size: number\n length: number\n scrollPx: number\n originPx: number\n pxPerMm: number\n paperPx: number\n vertical: boolean\n}\n\ninterface RulerColors {\n bg: string\n paper: string\n border: string\n tick: string\n text: string\n}\n\nfunction readColors(): RulerColors {\n return {\n bg: readCssVar('--svp-ruler-bg', '#ffffff'),\n paper: readCssVar('--svp-ruler-paper', '#f5f5f5'),\n border: readCssVar('--svp-ruler-border', '#cccccc'),\n tick: readCssVar('--svp-ruler-tick', '#343a40'),\n text: readCssVar('--svp-ruler-fg', '#343a40'),\n }\n}\n\nfunction drawRuler(canvas: HTMLCanvasElement, a: DrawArgs) {\n const dpr = window.devicePixelRatio || 1\n const canvasW = a.vertical ? a.size : a.length\n const canvasH = a.vertical ? a.length : a.size\n canvas.width = Math.max(1, Math.round(canvasW * dpr))\n canvas.height = Math.max(1, Math.round(canvasH * dpr))\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0)\n ctx.clearRect(0, 0, canvasW, canvasH)\n\n const colors = readColors()\n ctx.fillStyle = colors.bg\n ctx.fillRect(0, 0, canvasW, canvasH)\n\n const paperStart = a.originPx - a.scrollPx\n const paperEnd = paperStart + a.paperPx\n const spanStart = Math.max(0, paperStart)\n const spanEnd = Math.min(a.length, paperEnd)\n if (spanEnd > spanStart) {\n ctx.fillStyle = colors.paper\n if (a.vertical) {\n ctx.fillRect(0, spanStart, a.size, spanEnd - spanStart)\n } else {\n ctx.fillRect(spanStart, 0, spanEnd - spanStart, a.size)\n }\n }\n\n ctx.strokeStyle = colors.border\n ctx.lineWidth = 1\n ctx.beginPath()\n if (a.vertical) {\n ctx.moveTo(a.size - 0.5, 0)\n ctx.lineTo(a.size - 0.5, a.length)\n } else {\n ctx.moveTo(0, a.size - 0.5)\n ctx.lineTo(a.length, a.size - 0.5)\n }\n ctx.stroke()\n\n ctx.strokeStyle = colors.tick\n ctx.fillStyle = colors.text\n const fontSize = Math.max(9, Math.round(a.size * 0.42))\n ctx.font = `${fontSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif`\n ctx.textBaseline = 'alphabetic'\n ctx.lineWidth = 1\n\n const showFine = a.pxPerMm >= 3\n const showMid = a.pxPerMm * MID_STEP_MM >= 3\n\n const startMm = Math.floor((a.scrollPx - a.originPx) / a.pxPerMm) - 2\n const endMm = Math.ceil((a.scrollPx + a.length - a.originPx) / a.pxPerMm) + 2\n\n const majorLen = Math.round(a.size * 0.72)\n const midLen = Math.round(a.size * 0.48)\n const fineLen = Math.round(a.size * 0.22)\n\n function posFor(mm: number) {\n return Math.round(mm * a.pxPerMm + a.originPx - a.scrollPx) + 0.5\n }\n\n if (showFine) {\n ctx.beginPath()\n for (let mm = startMm; mm <= endMm; mm += 1) {\n if (mm % MID_STEP_MM === 0) continue\n const pos = posFor(mm)\n if (pos < -2 || pos > a.length + 2) continue\n if (a.vertical) {\n ctx.moveTo(a.size, pos)\n ctx.lineTo(a.size - fineLen, pos)\n } else {\n ctx.moveTo(pos, a.size)\n ctx.lineTo(pos, a.size - fineLen)\n }\n }\n ctx.stroke()\n }\n\n if (showMid) {\n ctx.beginPath()\n for (let mm = Math.ceil(startMm / MID_STEP_MM) * MID_STEP_MM; mm <= endMm; mm += MID_STEP_MM) {\n if (mm % LABEL_STEP_MM === 0) continue\n const pos = posFor(mm)\n if (pos < -2 || pos > a.length + 2) continue\n if (a.vertical) {\n ctx.moveTo(a.size, pos)\n ctx.lineTo(a.size - midLen, pos)\n } else {\n ctx.moveTo(pos, a.size)\n ctx.lineTo(pos, a.size - midLen)\n }\n }\n ctx.stroke()\n }\n\n ctx.beginPath()\n for (let mm = Math.ceil(startMm / LABEL_STEP_MM) * LABEL_STEP_MM; mm <= endMm; mm += LABEL_STEP_MM) {\n const pos = posFor(mm)\n if (pos < -24 || pos > a.length + 24) continue\n if (a.vertical) {\n ctx.moveTo(a.size, pos)\n ctx.lineTo(a.size - majorLen, pos)\n } else {\n ctx.moveTo(pos, a.size)\n ctx.lineTo(pos, a.size - majorLen)\n }\n }\n ctx.stroke()\n\n for (let mm = Math.ceil(startMm / LABEL_STEP_MM) * LABEL_STEP_MM; mm <= endMm; mm += LABEL_STEP_MM) {\n const pos = posFor(mm)\n if (pos < -24 || pos > a.length + 24) continue\n const label = String(mm)\n if (a.vertical) {\n ctx.save()\n ctx.translate(fontSize * 0.85, pos)\n ctx.rotate(-Math.PI / 2)\n ctx.textAlign = 'left'\n ctx.fillText(label, 1, 0)\n ctx.restore()\n } else {\n ctx.textAlign = 'left'\n ctx.fillText(label, pos + 2, a.size * 0.68)\n }\n }\n}\n\nexport function useRuler(opts: UseRulerOptions) {\n function redraw() {\n const cx = opts.canvasX()\n const cy = opts.canvasY()\n const scroller = opts.scrollerEl()\n if (!scroller) return\n const geom = readPaperGeometry(scroller)\n if (!geom) return\n const pxPerMmX = geom.widthPx / Math.max(1, geom.widthMm)\n\n if (cx) {\n drawRuler(cx, {\n size: RULER_SIZE,\n length: cx.clientWidth,\n scrollPx: scroller.scrollLeft,\n originPx: geom.x,\n pxPerMm: pxPerMmX,\n paperPx: geom.widthPx,\n vertical: false,\n })\n }\n if (cy) {\n drawRuler(cy, {\n size: RULER_SIZE,\n length: cy.clientHeight,\n scrollPx: scroller.scrollTop,\n originPx: geom.y,\n pxPerMm: geom.heightPx / Math.max(1, geom.heightMm),\n paperPx: geom.heightPx,\n vertical: true,\n })\n }\n }\n\n let resizeObserver: ResizeObserver | null = null\n let mutationObserver: MutationObserver | null = null\n let scrollHandler: (() => void) | null = null\n let raf = 0\n\n function schedule() {\n if (raf) return\n raf = requestAnimationFrame(() => { raf = 0; redraw() })\n }\n\n onMounted(() => {\n const scroller = opts.scrollerEl()\n scrollHandler = () => schedule()\n scroller?.addEventListener('scroll', scrollHandler, { passive: true })\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(() => schedule())\n if (scroller) resizeObserver.observe(scroller)\n const workspace = opts.workspaceEl?.()\n if (workspace) resizeObserver.observe(workspace)\n const host = document.getElementById(DESIGN_CONTAINER_ID)\n if (host) resizeObserver.observe(host)\n const paper = host?.querySelector('.hiprint-printPaper')\n if (paper) resizeObserver.observe(paper)\n }\n if (typeof MutationObserver !== 'undefined') {\n const host = document.getElementById(DESIGN_CONTAINER_ID)\n if (host) {\n mutationObserver = new MutationObserver(() => schedule())\n mutationObserver.observe(host, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'class'],\n })\n }\n }\n redraw()\n setTimeout(redraw, 100)\n setTimeout(redraw, 400)\n setTimeout(redraw, 1000)\n })\n\n onBeforeUnmount(() => {\n const scroller = opts.scrollerEl()\n if (scroller && scrollHandler) scroller.removeEventListener('scroll', scrollHandler)\n resizeObserver?.disconnect()\n mutationObserver?.disconnect()\n if (raf) cancelAnimationFrame(raf)\n })\n\n watch(() => designerStore.zoom, () => schedule())\n\n return { redraw }\n}\n","/**\n * Runtime theme injection. When users pass `ThemeType` objects via the\n * <Designer> `theme` prop we generate a `[data-theme=\"...\"]` block so the\n * CSS variables defined in tokens.scss are overridden in-place.\n */\nimport type { ThemeType } from '../types'\n\nconst STYLE_ID = 'svp-runtime-theme'\n\nfunction rgba(color: string, alpha: number): string {\n return color\n ? `color-mix(in srgb, ${color} ${Math.round(alpha * 100)}%, transparent)`\n : 'transparent'\n}\n\nfunction block(theme: ThemeType): string {\n const name = theme.theme || 'svpCustom'\n const lines = [\n theme.primaryColor && ` --svp-primary: ${theme.primaryColor};`,\n theme.primaryContent && ` --svp-primary-content: ${theme.primaryContent};`,\n theme.base100 && ` --svp-bg: ${theme.base100};`,\n theme.base200 && ` --svp-bg-soft: ${theme.base200};`,\n theme.base300 && ` --svp-border: ${theme.base300};`,\n theme.baseContent && ` --svp-fg: ${theme.baseContent};`,\n theme.baseContent && ` --svp-fg-muted: ${rgba(theme.baseContent, 0.62)};`,\n ].filter(Boolean)\n return `.svp-root[data-theme=\"${name}\"] {\\n${lines.join('\\n')}\\n}`\n}\n\nexport function injectThemes(theme: unknown): void {\n if (typeof document === 'undefined') return\n if (!theme) return\n const list: ThemeType[] = []\n if (typeof theme === 'string') return\n if (Array.isArray(theme)) list.push(...(theme as ThemeType[]))\n else list.push(theme as ThemeType)\n\n const css = list\n .filter((t) => t && typeof t === 'object' && t.primaryColor)\n .map(block)\n .join('\\n\\n')\n if (!css) return\n\n let el = document.getElementById(STYLE_ID) as HTMLStyleElement | null\n if (!el) {\n el = document.createElement('style')\n el.id = STYLE_ID\n document.head.appendChild(el)\n }\n el.textContent = css\n}\n","/**\n * Default floating-panel layout — mirrors sv-print `styleOption` defaults.\n * Coordinates are relative to `.svp-workspace` (below header + toolbar).\n */\nexport const SVP_CHROME_TOP = 82\n\n/** Matches `--svp-ruler-size`; panels must not overlap ruler strips. */\nexport const SVP_RULER_INSET = 24\n\n/** Gap between stacked panels in the same column. */\nexport const SVP_PANEL_GAP = 8\n\n/** Bottom margin for bottom-anchored panels (miniMap, pageHistory). */\nexport const SVP_PANEL_BOTTOM = 30\n\n/** Fixed height of bottom-docked panels. */\nexport const SVP_PANEL_DOCK_HEIGHT = 200\n\n/** Top-anchored panels share the workspace with a bottom-docked panel below. */\nexport const SVP_STACKED_HEIGHT_INSET =\n SVP_PANEL_BOTTOM + SVP_PANEL_DOCK_HEIGHT + SVP_PANEL_GAP\n\nexport interface PanelLayoutSpec {\n width: number\n height?: number\n left?: number\n top?: number\n right?: number\n bottom?: number\n /** height = boundsHeight - heightInset */\n heightInset?: number\n}\n\nexport const SVP_PANEL_LAYOUT = {\n draggableEls: { left: 28, top: 28, width: 240, heightInset: 28 + SVP_STACKED_HEIGHT_INSET },\n miniMap: { left: 28, bottom: SVP_PANEL_BOTTOM, width: 200, height: SVP_PANEL_DOCK_HEIGHT },\n properties: { right: 0, top: 28, width: 270, heightInset: 46 },\n pageStructure: { right: 280, top: 28, width: 200, heightInset: 28 + SVP_STACKED_HEIGHT_INSET },\n pageHistory: { right: 280, bottom: SVP_PANEL_BOTTOM, width: 200, height: SVP_PANEL_DOCK_HEIGHT },\n} as const satisfies Record<string, PanelLayoutSpec>\n\nexport type SvpPanelLayoutKey = keyof typeof SVP_PANEL_LAYOUT\n\nexport interface PanelRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport function resolvePanelLayout(\n spec: PanelLayoutSpec,\n bounds: { width: number; height: number },\n): PanelRect {\n const width = spec.width\n let height = spec.height ?? Math.max(72, bounds.height - (spec.heightInset ?? 0))\n let x = spec.left ?? (spec.right != null ? bounds.width - spec.right - width : 0)\n let y = spec.top ?? (spec.bottom != null ? bounds.height - spec.bottom - height : 0)\n if (spec.left != null) x = Math.max(SVP_RULER_INSET, x)\n if (spec.top != null) y = Math.max(SVP_RULER_INSET, y)\n x = Math.max(0, Math.round(x))\n y = Math.max(0, Math.round(y))\n height = Math.max(72, Math.round(height))\n return { x, y, width, height }\n}\n\nfunction rectsOverlap(a: PanelRect, b: PanelRect, gap = SVP_PANEL_GAP): boolean {\n return !(\n a.x + a.width + gap <= b.x\n || b.x + b.width + gap <= a.x\n || a.y + a.height + gap <= b.y\n || b.y + b.height + gap <= a.y\n )\n}\n\n/** Resolve all default panel rects and verify they do not overlap. */\nexport function resolveAllPanelLayouts(\n bounds: { width: number; height: number },\n keys: SvpPanelLayoutKey[] = Object.keys(SVP_PANEL_LAYOUT) as SvpPanelLayoutKey[],\n): Record<SvpPanelLayoutKey, PanelRect> {\n const out = {} as Record<SvpPanelLayoutKey, PanelRect>\n keys.forEach((key) => {\n out[key] = resolvePanelLayout(SVP_PANEL_LAYOUT[key], bounds)\n })\n return out\n}\n\nexport function findPanelOverlaps(\n layouts: Record<string, PanelRect>,\n gap = SVP_PANEL_GAP,\n): Array<[string, string]> {\n const keys = Object.keys(layouts)\n const pairs: Array<[string, string]> = []\n for (let i = 0; i < keys.length; i += 1) {\n for (let j = i + 1; j < keys.length; j += 1) {\n const a = keys[i]\n const b = keys[j]\n if (rectsOverlap(layouts[a], layouts[b], gap)) pairs.push([a, b])\n }\n }\n return pairs\n}\n","import type { InjectionKey, Ref } from 'vue-demi'\nimport {\n SVP_PANEL_LAYOUT,\n SVP_RULER_INSET,\n type PanelLayoutSpec,\n type SvpPanelLayoutKey,\n} from '../constants/panel-layout'\nimport { setPanelVisibility, type PanelVisibility } from './stores'\nimport type { DragBoxMode, DragBoxStyleOptions, ShowOption, StyleOption } from '../types'\n\n/** Maps `styleOption` keys to floating panel store keys. */\nexport const STYLE_OPTION_PANEL_KEYS: Record<string, keyof PanelVisibility> = {\n draggableEls: 'draggableEls',\n miniMap: 'miniMap',\n pageStructure: 'pageStructure',\n history: 'pageHistory',\n options: 'properties',\n}\n\n/** Maps `styleOption` keys to default layout keys. */\nexport const STYLE_OPTION_LAYOUT_KEYS: Record<string, SvpPanelLayoutKey> = {\n draggableEls: 'draggableEls',\n miniMap: 'miniMap',\n pageStructure: 'pageStructure',\n history: 'pageHistory',\n options: 'properties',\n}\n\n/** Toolbar buttons controlled by `styleOption.*.show`. */\nexport const TOOL_STYLE_GROUP: Record<string, keyof StyleOption> = {\n alignLeft: 'editableTools',\n alignCenter: 'editableTools',\n alignRight: 'editableTools',\n alignTop: 'editableTools',\n alignMiddle: 'editableTools',\n alignBottom: 'editableTools',\n flipH: 'editableTools',\n flipV: 'editableTools',\n moveTop: 'zIndexTools',\n moveUp: 'zIndexTools',\n moveDown: 'zIndexTools',\n moveBottom: 'zIndexTools',\n fontInc: 'fontTools',\n fontDec: 'fontTools',\n fontBold: 'fontTools',\n fontUnbold: 'fontTools',\n zoomOut: 'zoomTools',\n zoomPercent: 'zoomTools',\n zoomIn: 'zoomTools',\n rotate: 'rotateTools',\n}\n\nexport interface ResolvedShowOption {\n showHeader: boolean\n showToolbar: boolean\n showFooter: boolean\n showPower: boolean\n}\n\nexport interface DesignerUiContext {\n styleOption: Ref<StyleOption | undefined>\n showOption: Ref<ResolvedShowOption>\n}\n\nexport const DESIGNER_UI_INJECTION_KEY: InjectionKey<DesignerUiContext> = Symbol('svp-designer-ui')\n\nexport function resolveShowOption(\n showOption?: ShowOption,\n showToolbarFallback = true,\n): ResolvedShowOption {\n return {\n showHeader: showOption?.showHeader ?? true,\n showToolbar: showOption?.showToolbar ?? showToolbarFallback,\n showFooter: showOption?.showFooter ?? true,\n showPower: showOption?.showPower ?? true,\n }\n}\n\nexport function parseInlineStyle(style?: string): Record<string, string> {\n if (!style?.trim()) return {}\n const out: Record<string, string> = {}\n style.split(';').forEach((chunk) => {\n const idx = chunk.indexOf(':')\n if (idx <= 0) return\n const key = chunk.slice(0, idx).trim()\n const value = chunk.slice(idx + 1).trim()\n if (key && value) out[key] = value\n })\n return out\n}\n\nfunction layoutSpecForMode(\n base: PanelLayoutSpec,\n mode?: DragBoxMode,\n): PanelLayoutSpec {\n if (!mode || mode === 'default') return { ...base }\n const spec: PanelLayoutSpec = { ...base }\n if (mode === 'left') {\n spec.left = SVP_RULER_INSET\n spec.right = undefined\n } else if (mode === 'right') {\n spec.right = 0\n spec.left = undefined\n } else if (mode === 'top') {\n spec.top = SVP_RULER_INSET\n spec.bottom = undefined\n } else if (mode === 'bottom') {\n spec.bottom = 30\n spec.top = undefined\n }\n return spec\n}\n\nexport function resolvePanelDragBoxOptions(\n styleKey: string,\n styleOption?: StyleOption,\n): {\n panelKey?: keyof PanelVisibility\n layoutKey?: SvpPanelLayoutKey\n layoutSpec?: PanelLayoutSpec\n boxStyleExtra: Record<string, string>\n bodyStyleExtra: Record<string, string>\n draggable: boolean\n title?: string\n} {\n const panelStyle = styleOption?.[styleKey as keyof StyleOption] as DragBoxStyleOptions | undefined\n const panelKey = STYLE_OPTION_PANEL_KEYS[styleKey]\n const layoutKey = STYLE_OPTION_LAYOUT_KEYS[styleKey]\n const baseSpec = layoutKey ? SVP_PANEL_LAYOUT[layoutKey] : undefined\n const layoutSpec = baseSpec && panelStyle?.mode !== 'fixed'\n ? layoutSpecForMode(baseSpec, panelStyle?.mode)\n : undefined\n const parsed = parseInlineStyle(panelStyle?.style)\n const draggable = panelStyle?.mode !== 'fixed'\n\n const boxStyleExtra: Record<string, string> = { ...parsed }\n if (panelStyle?.mode === 'fixed') {\n boxStyleExtra.position = 'fixed'\n }\n\n return {\n panelKey,\n layoutKey,\n layoutSpec,\n boxStyleExtra,\n bodyStyleExtra: {},\n draggable,\n title: panelStyle?.title,\n }\n}\n\nexport function applyStyleOption(styleOption?: StyleOption) {\n if (!styleOption) return\n Object.entries(STYLE_OPTION_PANEL_KEYS).forEach(([styleKey, panelKey]) => {\n const panelStyle = styleOption[styleKey as keyof StyleOption] as DragBoxStyleOptions | undefined\n if (panelStyle && typeof panelStyle.show === 'boolean') {\n setPanelVisibility(panelKey, panelStyle.show)\n }\n })\n}\n\nexport function isToolGroupVisible(toolKey: string, styleOption?: StyleOption): boolean {\n const group = TOOL_STYLE_GROUP[toolKey]\n if (!group) return true\n const cfg = styleOption?.[group] as DragBoxStyleOptions | undefined\n if (cfg && typeof cfg.show === 'boolean') return cfg.show\n return true\n}\n","import { DEFAULT_ELEMENT_CATALOGUE, type ElementCatalogueItem } from '../constants'\nimport { iconForElementKey } from './icons'\nimport type { HeaderEle } from '../types'\n\nexport function headerElementsFromCatalogue(\n catalogue: ElementCatalogueItem[] = DEFAULT_ELEMENT_CATALOGUE,\n): HeaderEle[] {\n return catalogue.map((item) => ({\n key: item.key,\n label: item.label,\n tid: item.tid,\n icon: item.icon ?? iconForElementKey(item.key),\n }))\n}\n","import Vue from 'vue';\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n const colonSeparated = value.split(\":\");\n if (value.slice(0, 1) === \"@\") {\n if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n return null;\n }\n provider = colonSeparated.shift().slice(1);\n }\n if (colonSeparated.length > 3 || !colonSeparated.length) {\n return null;\n }\n if (colonSeparated.length > 1) {\n const name2 = colonSeparated.pop();\n const prefix = colonSeparated.pop();\n const result = {\n provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n prefix,\n name: name2\n };\n return validate && !validateIconName(result) ? null : result;\n }\n const name = colonSeparated[0];\n const dashSeparated = name.split(\"-\");\n if (dashSeparated.length > 1) {\n const result = {\n provider,\n prefix: dashSeparated.shift(),\n name: dashSeparated.join(\"-\")\n };\n return validate && !validateIconName(result) ? null : result;\n }\n if (allowSimpleName && provider === \"\") {\n const result = {\n provider,\n prefix: \"\",\n name\n };\n return validate && !validateIconName(result, allowSimpleName) ? null : result;\n }\n return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n if (!icon) {\n return false;\n }\n return !!((icon.provider === \"\" || icon.provider.match(matchIconName)) && (allowSimpleName && icon.prefix === \"\" || icon.prefix.match(matchIconName)) && icon.name.match(matchIconName));\n};\n\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n return data;\n}\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n return {\n provider,\n prefix,\n icons: /* @__PURE__ */ Object.create(null),\n missing: /* @__PURE__ */ new Set()\n };\n}\nfunction getStorage(provider, prefix) {\n const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n if (!quicklyValidateIconSet(data)) {\n return [];\n }\n return parseIconSet(data, (name, icon) => {\n if (icon) {\n storage.icons[name] = icon;\n } else {\n storage.missing.add(name);\n }\n });\n}\nfunction addIconToStorage(storage, name, icon) {\n try {\n if (typeof icon.body === \"string\") {\n storage.icons[name] = { ...icon };\n return true;\n }\n } catch (err) {\n }\n return false;\n}\nfunction listIcons(provider, prefix) {\n let allIcons = [];\n const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n providers.forEach((provider2) => {\n const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n prefixes.forEach((prefix2) => {\n const storage = getStorage(provider2, prefix2);\n allIcons = allIcons.concat(\n Object.keys(storage.icons).map(\n (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n )\n );\n });\n });\n return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n if (typeof allow === \"boolean\") {\n simpleNames = allow;\n }\n return simpleNames;\n}\nfunction getIconData(name) {\n const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n if (icon) {\n const storage = getStorage(icon.provider, icon.prefix);\n const iconName = icon.name;\n return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n }\n}\nfunction addIcon(name, data) {\n const icon = stringToIcon(name, true, simpleNames);\n if (!icon) {\n return false;\n }\n const storage = getStorage(icon.provider, icon.prefix);\n return addIconToStorage(storage, icon.name, data);\n}\nfunction addCollection(data, provider) {\n if (typeof data !== \"object\") {\n return false;\n }\n if (typeof provider !== \"string\") {\n provider = data.provider || \"\";\n }\n if (simpleNames && !provider && !data.prefix) {\n let added = false;\n if (quicklyValidateIconSet(data)) {\n data.prefix = \"\";\n parseIconSet(data, (name, icon) => {\n if (icon && addIcon(name, icon)) {\n added = true;\n }\n });\n }\n return added;\n }\n const prefix = data.prefix;\n if (!validateIconName({\n provider,\n prefix,\n name: \"a\"\n })) {\n return false;\n }\n const storage = getStorage(provider, prefix);\n return !!addIconSet(storage, data);\n}\nfunction iconExists(name) {\n return !!getIconData(name);\n}\nfunction getIcon(name) {\n const result = getIconData(name);\n return result ? {\n ...defaultIconProps,\n ...result\n } : null;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n ...defaultIconSizeCustomisations,\n ...defaultIconTransformations\n});\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = '<g transform=\"' + transformations.join(\" \") + '\">' + body + \"</g>\";\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const attributes = {};\n const setAttr = (prop, value) => {\n if (!isUnsetKeyword(value)) {\n attributes[prop] = value.toString();\n }\n };\n setAttr(\"width\", width);\n setAttr(\"height\", height);\n attributes.viewBox = box.left.toString() + \" \" + box.top.toString() + \" \" + boxWidth.toString() + \" \" + boxHeight.toString();\n return {\n attributes,\n body\n };\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + suffix + \"$3\"\n );\n });\n body = body.replace(new RegExp(suffix, \"g\"), \"\");\n return body;\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n return storage[provider] || storage[\"\"];\n}\n\nfunction createAPIConfig(source) {\n let resources;\n if (typeof source.resources === \"string\") {\n resources = [source.resources];\n } else {\n resources = source.resources;\n if (!(resources instanceof Array) || !resources.length) {\n return null;\n }\n }\n const result = {\n resources,\n path: source.path || \"/\",\n maxURL: source.maxURL || 500,\n rotate: source.rotate || 750,\n timeout: source.timeout || 5e3,\n random: source.random === true,\n index: source.index || 0,\n dataAfterTimeout: source.dataAfterTimeout !== false\n };\n return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n \"https://api.simplesvg.com\",\n \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n if (fallBackAPISources.length === 1) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n if (Math.random() > 0.5) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n fallBackAPI.push(fallBackAPISources.pop());\n }\n }\n}\nconfigStorage[\"\"] = createAPIConfig({\n resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n const config = createAPIConfig(customConfig);\n if (config === null) {\n return false;\n }\n configStorage[provider] = config;\n return true;\n}\nfunction getAPIConfig(provider) {\n return configStorage[provider];\n}\nfunction listAPIProviders() {\n return Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n let callback;\n try {\n callback = fetch;\n if (typeof callback === \"function\") {\n return callback;\n }\n } catch (err) {\n }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n fetchModule = fetch2;\n}\nfunction getFetch() {\n return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n const config = getAPIConfig(provider);\n if (!config) {\n return 0;\n }\n let result;\n if (!config.maxURL) {\n result = 0;\n } else {\n let maxHostLength = 0;\n config.resources.forEach((item) => {\n const host = item;\n maxHostLength = Math.max(maxHostLength, host.length);\n });\n const url = prefix + \".json?icons=\";\n result = config.maxURL - maxHostLength - config.path.length - url.length;\n }\n return result;\n}\nfunction shouldAbort(status) {\n return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n const results = [];\n const maxLength = calculateMaxLength(provider, prefix);\n const type = \"icons\";\n let item = {\n type,\n provider,\n prefix,\n icons: []\n };\n let length = 0;\n icons.forEach((name, index) => {\n length += name.length + 1;\n if (length >= maxLength && index > 0) {\n results.push(item);\n item = {\n type,\n provider,\n prefix,\n icons: []\n };\n length = name.length;\n }\n item.icons.push(name);\n });\n results.push(item);\n return results;\n};\nfunction getPath(provider) {\n if (typeof provider === \"string\") {\n const config = getAPIConfig(provider);\n if (config) {\n return config.path;\n }\n }\n return \"/\";\n}\nconst send = (host, params, callback) => {\n if (!fetchModule) {\n callback(\"abort\", 424);\n return;\n }\n let path = getPath(params.provider);\n switch (params.type) {\n case \"icons\": {\n const prefix = params.prefix;\n const icons = params.icons;\n const iconsList = icons.join(\",\");\n const urlParams = new URLSearchParams({\n icons: iconsList\n });\n path += prefix + \".json?\" + urlParams.toString();\n break;\n }\n case \"custom\": {\n const uri = params.uri;\n path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n break;\n }\n default:\n callback(\"abort\", 400);\n return;\n }\n let defaultError = 503;\n fetchModule(host + path).then((response) => {\n const status = response.status;\n if (status !== 200) {\n setTimeout(() => {\n callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n });\n return;\n }\n defaultError = 501;\n return response.json();\n }).then((data) => {\n if (typeof data !== \"object\" || data === null) {\n setTimeout(() => {\n if (data === 404) {\n callback(\"abort\", data);\n } else {\n callback(\"next\", defaultError);\n }\n });\n return;\n }\n setTimeout(() => {\n callback(\"success\", data);\n });\n }).catch(() => {\n callback(\"next\", defaultError);\n });\n};\nconst fetchAPIModule = {\n prepare,\n send\n};\n\nfunction sortIcons(icons) {\n const result = {\n loaded: [],\n missing: [],\n pending: []\n };\n const storage = /* @__PURE__ */ Object.create(null);\n icons.sort((a, b) => {\n if (a.provider !== b.provider) {\n return a.provider.localeCompare(b.provider);\n }\n if (a.prefix !== b.prefix) {\n return a.prefix.localeCompare(b.prefix);\n }\n return a.name.localeCompare(b.name);\n });\n let lastIcon = {\n provider: \"\",\n prefix: \"\",\n name: \"\"\n };\n icons.forEach((icon) => {\n if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n return;\n }\n lastIcon = icon;\n const provider = icon.provider;\n const prefix = icon.prefix;\n const name = icon.name;\n const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n let list;\n if (name in localStorage.icons) {\n list = result.loaded;\n } else if (prefix === \"\" || localStorage.missing.has(name)) {\n list = result.missing;\n } else {\n list = result.pending;\n }\n const item = {\n provider,\n prefix,\n name\n };\n list.push(item);\n });\n return result;\n}\n\nfunction removeCallback(storages, id) {\n storages.forEach((storage) => {\n const items = storage.loaderCallbacks;\n if (items) {\n storage.loaderCallbacks = items.filter((row) => row.id !== id);\n }\n });\n}\nfunction updateCallbacks(storage) {\n if (!storage.pendingCallbacksFlag) {\n storage.pendingCallbacksFlag = true;\n setTimeout(() => {\n storage.pendingCallbacksFlag = false;\n const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n if (!items.length) {\n return;\n }\n let hasPending = false;\n const provider = storage.provider;\n const prefix = storage.prefix;\n items.forEach((item) => {\n const icons = item.icons;\n const oldLength = icons.pending.length;\n icons.pending = icons.pending.filter((icon) => {\n if (icon.prefix !== prefix) {\n return true;\n }\n const name = icon.name;\n if (storage.icons[name]) {\n icons.loaded.push({\n provider,\n prefix,\n name\n });\n } else if (storage.missing.has(name)) {\n icons.missing.push({\n provider,\n prefix,\n name\n });\n } else {\n hasPending = true;\n return true;\n }\n return false;\n });\n if (icons.pending.length !== oldLength) {\n if (!hasPending) {\n removeCallback([storage], item.id);\n }\n item.callback(\n icons.loaded.slice(0),\n icons.missing.slice(0),\n icons.pending.slice(0),\n item.abort\n );\n }\n });\n });\n }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n const id = idCounter++;\n const abort = removeCallback.bind(null, pendingSources, id);\n if (!icons.pending.length) {\n return abort;\n }\n const item = {\n id,\n icons,\n callback,\n abort\n };\n pendingSources.forEach((storage) => {\n (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n });\n return abort;\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n const result = [];\n list.forEach((item) => {\n const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n if (icon) {\n result.push(icon);\n }\n });\n return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n resources: [],\n index: 0,\n timeout: 2e3,\n rotate: 750,\n random: false,\n dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n const resourcesCount = config.resources.length;\n const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n let resources;\n if (config.random) {\n let list = config.resources.slice(0);\n resources = [];\n while (list.length > 1) {\n const nextIndex = Math.floor(Math.random() * list.length);\n resources.push(list[nextIndex]);\n list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n }\n resources = resources.concat(list);\n } else {\n resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n }\n const startTime = Date.now();\n let status = \"pending\";\n let queriesSent = 0;\n let lastError;\n let timer = null;\n let queue = [];\n let doneCallbacks = [];\n if (typeof done === \"function\") {\n doneCallbacks.push(done);\n }\n function resetTimer() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function abort() {\n if (status === \"pending\") {\n status = \"aborted\";\n }\n resetTimer();\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function subscribe(callback, overwrite) {\n if (overwrite) {\n doneCallbacks = [];\n }\n if (typeof callback === \"function\") {\n doneCallbacks.push(callback);\n }\n }\n function getQueryStatus() {\n return {\n startTime,\n payload,\n status,\n queriesSent,\n queriesPending: queue.length,\n subscribe,\n abort\n };\n }\n function failQuery() {\n status = \"failed\";\n doneCallbacks.forEach((callback) => {\n callback(void 0, lastError);\n });\n }\n function clearQueue() {\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function moduleResponse(item, response, data) {\n const isError = response !== \"success\";\n queue = queue.filter((queued) => queued !== item);\n switch (status) {\n case \"pending\":\n break;\n case \"failed\":\n if (isError || !config.dataAfterTimeout) {\n return;\n }\n break;\n default:\n return;\n }\n if (response === \"abort\") {\n lastError = data;\n failQuery();\n return;\n }\n if (isError) {\n lastError = data;\n if (!queue.length) {\n if (!resources.length) {\n failQuery();\n } else {\n execNext();\n }\n }\n return;\n }\n resetTimer();\n clearQueue();\n if (!config.random) {\n const index = config.resources.indexOf(item.resource);\n if (index !== -1 && index !== config.index) {\n config.index = index;\n }\n }\n status = \"completed\";\n doneCallbacks.forEach((callback) => {\n callback(data);\n });\n }\n function execNext() {\n if (status !== \"pending\") {\n return;\n }\n resetTimer();\n const resource = resources.shift();\n if (resource === void 0) {\n if (queue.length) {\n timer = setTimeout(() => {\n resetTimer();\n if (status === \"pending\") {\n clearQueue();\n failQuery();\n }\n }, config.timeout);\n return;\n }\n failQuery();\n return;\n }\n const item = {\n status: \"pending\",\n resource,\n callback: (status2, data) => {\n moduleResponse(item, status2, data);\n }\n };\n queue.push(item);\n queriesSent++;\n timer = setTimeout(execNext, config.rotate);\n query(resource, payload, item.callback);\n }\n setTimeout(execNext);\n return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n const config = {\n ...defaultConfig,\n ...cfg\n };\n let queries = [];\n function cleanup() {\n queries = queries.filter((item) => item().status === \"pending\");\n }\n function query(payload, queryCallback, doneCallback) {\n const query2 = sendQuery(\n config,\n payload,\n queryCallback,\n (data, error) => {\n cleanup();\n if (doneCallback) {\n doneCallback(data, error);\n }\n }\n );\n queries.push(query2);\n return query2;\n }\n function find(callback) {\n return queries.find((value) => {\n return callback(value);\n }) || null;\n }\n const instance = {\n query,\n find,\n setIndex: (index) => {\n config.index = index;\n },\n getIndex: () => config.index,\n cleanup\n };\n return instance;\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n if (!redundancyCache[provider]) {\n const config = getAPIConfig(provider);\n if (!config) {\n return;\n }\n const redundancy = initRedundancy(config);\n const cachedReundancy = {\n config,\n redundancy\n };\n redundancyCache[provider] = cachedReundancy;\n }\n return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n let redundancy;\n let send;\n if (typeof target === \"string\") {\n const api = getAPIModule(target);\n if (!api) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n send = api.send;\n const cached = getRedundancyCache(target);\n if (cached) {\n redundancy = cached.redundancy;\n }\n } else {\n const config = createAPIConfig(target);\n if (config) {\n redundancy = initRedundancy(config);\n const moduleKey = target.resources ? target.resources[0] : \"\";\n const api = getAPIModule(moduleKey);\n if (api) {\n send = api.send;\n }\n }\n }\n if (!redundancy || !send) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n return redundancy.query(query, send, callback)().abort;\n}\n\nconst browserCacheVersion = \"iconify2\";\nconst browserCachePrefix = \"iconify\";\nconst browserCacheCountKey = browserCachePrefix + \"-count\";\nconst browserCacheVersionKey = browserCachePrefix + \"-version\";\nconst browserStorageHour = 36e5;\nconst browserStorageCacheExpiration = 168;\n\nfunction getStoredItem(func, key) {\n try {\n return func.getItem(key);\n } catch (err) {\n }\n}\nfunction setStoredItem(func, key, value) {\n try {\n func.setItem(key, value);\n return true;\n } catch (err) {\n }\n}\nfunction removeStoredItem(func, key) {\n try {\n func.removeItem(key);\n } catch (err) {\n }\n}\n\nfunction setBrowserStorageItemsCount(storage, value) {\n return setStoredItem(storage, browserCacheCountKey, value.toString());\n}\nfunction getBrowserStorageItemsCount(storage) {\n return parseInt(getStoredItem(storage, browserCacheCountKey)) || 0;\n}\n\nconst browserStorageConfig = {\n local: true,\n session: true\n};\nconst browserStorageEmptyItems = {\n local: /* @__PURE__ */ new Set(),\n session: /* @__PURE__ */ new Set()\n};\nlet browserStorageStatus = false;\nfunction setBrowserStorageStatus(status) {\n browserStorageStatus = status;\n}\n\nlet _window = typeof window === \"undefined\" ? {} : window;\nfunction getBrowserStorage(key) {\n const attr = key + \"Storage\";\n try {\n if (_window && _window[attr] && typeof _window[attr].length === \"number\") {\n return _window[attr];\n }\n } catch (err) {\n }\n browserStorageConfig[key] = false;\n}\n\nfunction iterateBrowserStorage(key, callback) {\n const func = getBrowserStorage(key);\n if (!func) {\n return;\n }\n const version = getStoredItem(func, browserCacheVersionKey);\n if (version !== browserCacheVersion) {\n if (version) {\n const total2 = getBrowserStorageItemsCount(func);\n for (let i = 0; i < total2; i++) {\n removeStoredItem(func, browserCachePrefix + i.toString());\n }\n }\n setStoredItem(func, browserCacheVersionKey, browserCacheVersion);\n setBrowserStorageItemsCount(func, 0);\n return;\n }\n const minTime = Math.floor(Date.now() / browserStorageHour) - browserStorageCacheExpiration;\n const parseItem = (index) => {\n const name = browserCachePrefix + index.toString();\n const item = getStoredItem(func, name);\n if (typeof item !== \"string\") {\n return;\n }\n try {\n const data = JSON.parse(item);\n if (typeof data === \"object\" && typeof data.cached === \"number\" && data.cached > minTime && typeof data.provider === \"string\" && typeof data.data === \"object\" && typeof data.data.prefix === \"string\" && callback(data, index)) {\n return true;\n }\n } catch (err) {\n }\n removeStoredItem(func, name);\n };\n let total = getBrowserStorageItemsCount(func);\n for (let i = total - 1; i >= 0; i--) {\n if (!parseItem(i)) {\n if (i === total - 1) {\n total--;\n setBrowserStorageItemsCount(func, total);\n } else {\n browserStorageEmptyItems[key].add(i);\n }\n }\n }\n}\n\nfunction initBrowserStorage() {\n if (browserStorageStatus) {\n return;\n }\n setBrowserStorageStatus(true);\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n const provider = item.provider;\n const prefix = iconSet.prefix;\n const storage = getStorage(\n provider,\n prefix\n );\n if (!addIconSet(storage, iconSet).length) {\n return false;\n }\n const lastModified = iconSet.lastModified || -1;\n storage.lastModifiedCached = storage.lastModifiedCached ? Math.min(storage.lastModifiedCached, lastModified) : lastModified;\n return true;\n });\n }\n}\n\nfunction updateLastModified(storage, lastModified) {\n const lastValue = storage.lastModifiedCached;\n if (lastValue && lastValue >= lastModified) {\n return lastValue === lastModified;\n }\n storage.lastModifiedCached = lastModified;\n if (lastValue) {\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n return item.provider !== storage.provider || iconSet.prefix !== storage.prefix || iconSet.lastModified === lastModified;\n });\n }\n }\n return true;\n}\nfunction storeInBrowserStorage(storage, data) {\n if (!browserStorageStatus) {\n initBrowserStorage();\n }\n function store(key) {\n let func;\n if (!browserStorageConfig[key] || !(func = getBrowserStorage(key))) {\n return;\n }\n const set = browserStorageEmptyItems[key];\n let index;\n if (set.size) {\n set.delete(index = Array.from(set).shift());\n } else {\n index = getBrowserStorageItemsCount(func);\n if (!setBrowserStorageItemsCount(func, index + 1)) {\n return;\n }\n }\n const item = {\n cached: Math.floor(Date.now() / browserStorageHour),\n provider: storage.provider,\n data\n };\n return setStoredItem(\n func,\n browserCachePrefix + index.toString(),\n JSON.stringify(item)\n );\n }\n if (data.lastModified && !updateLastModified(storage, data.lastModified)) {\n return;\n }\n if (!Object.keys(data.icons).length) {\n return;\n }\n if (data.not_found) {\n data = Object.assign({}, data);\n delete data.not_found;\n }\n if (!store(\"local\")) {\n store(\"session\");\n }\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n if (!storage.iconsLoaderFlag) {\n storage.iconsLoaderFlag = true;\n setTimeout(() => {\n storage.iconsLoaderFlag = false;\n updateCallbacks(storage);\n });\n }\n}\nfunction loadNewIcons(storage, icons) {\n if (!storage.iconsToLoad) {\n storage.iconsToLoad = icons;\n } else {\n storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n }\n if (!storage.iconsQueueFlag) {\n storage.iconsQueueFlag = true;\n setTimeout(() => {\n storage.iconsQueueFlag = false;\n const { provider, prefix } = storage;\n const icons2 = storage.iconsToLoad;\n delete storage.iconsToLoad;\n let api;\n if (!icons2 || !(api = getAPIModule(provider))) {\n return;\n }\n const params = api.prepare(provider, prefix, icons2);\n params.forEach((item) => {\n sendAPIQuery(provider, item, (data) => {\n if (typeof data !== \"object\") {\n item.icons.forEach((name) => {\n storage.missing.add(name);\n });\n } else {\n try {\n const parsed = addIconSet(\n storage,\n data\n );\n if (!parsed.length) {\n return;\n }\n const pending = storage.pendingIcons;\n if (pending) {\n parsed.forEach((name) => {\n pending.delete(name);\n });\n }\n storeInBrowserStorage(storage, data);\n } catch (err) {\n console.error(err);\n }\n }\n loadedNewIcons(storage);\n });\n });\n });\n }\n}\nconst loadIcons = (icons, callback) => {\n const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n const sortedIcons = sortIcons(cleanedIcons);\n if (!sortedIcons.pending.length) {\n let callCallback = true;\n if (callback) {\n setTimeout(() => {\n if (callCallback) {\n callback(\n sortedIcons.loaded,\n sortedIcons.missing,\n sortedIcons.pending,\n emptyCallback\n );\n }\n });\n }\n return () => {\n callCallback = false;\n };\n }\n const newIcons = /* @__PURE__ */ Object.create(null);\n const sources = [];\n let lastProvider, lastPrefix;\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix } = icon;\n if (prefix === lastPrefix && provider === lastProvider) {\n return;\n }\n lastProvider = provider;\n lastPrefix = prefix;\n sources.push(getStorage(provider, prefix));\n const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n if (!providerNewIcons[prefix]) {\n providerNewIcons[prefix] = [];\n }\n });\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n if (!pendingQueue.has(name)) {\n pendingQueue.add(name);\n newIcons[provider][prefix].push(name);\n }\n });\n sources.forEach((storage) => {\n const { provider, prefix } = storage;\n if (newIcons[provider][prefix].length) {\n loadNewIcons(storage, newIcons[provider][prefix]);\n }\n });\n return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = (icon) => {\n return new Promise((fulfill, reject) => {\n const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n if (!iconObj) {\n reject(icon);\n return;\n }\n loadIcons([iconObj || icon], (loaded) => {\n if (loaded.length && iconObj) {\n const data = getIconData(iconObj);\n if (data) {\n fulfill({\n ...defaultIconProps,\n ...data\n });\n return;\n }\n }\n reject(icon);\n });\n });\n};\n\nfunction toggleBrowserCache(storage, value) {\n switch (storage) {\n case \"local\":\n case \"session\":\n browserStorageConfig[storage] = value;\n break;\n case \"all\":\n for (const key in browserStorageConfig) {\n browserStorageConfig[key] = value;\n }\n break;\n }\n}\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Render icon\n */\nconst render = (createElement, \n// context.props\nprops, \n// context.data\ncontextData, \n// Icon must be validated before calling this function\nicon) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Style in Vue 2 components is always passed to rendered component, so no point in parsing it\n const style = {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default:\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n // Add icon stuff\n for (let key in item.attributes) {\n componentProps[key] = item.attributes[key];\n }\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Generate node data\n const data = {\n attrs: componentProps,\n domProps: {\n innerHTML: replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyVue'),\n },\n };\n if (Object.keys(style).length > 0) {\n data.style = style;\n }\n if (contextData) {\n ['on', 'ref'].forEach((attr) => {\n if (contextData[attr] !== void 0) {\n data[attr] = contextData[attr];\n }\n });\n ['staticClass', 'class'].forEach((attr) => {\n if (contextData[attr] !== void 0) {\n data.class = contextData[attr];\n }\n });\n }\n // Render icon\n return createElement('svg', data);\n};\n\n/**\n * Enable cache\n */\nfunction enableCache(storage) {\n toggleBrowserCache(storage, true);\n}\n/**\n * Disable cache\n */\nfunction disableCache(storage) {\n toggleBrowserCache(storage, false);\n}\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // Set cache and load existing cache\n initBrowserStorage();\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\n/**\n * Empty icon data, rendered when icon is not available\n */\nconst emptyIcon = {\n body: '',\n};\nconst Icon = Vue.extend({\n // Do not inherit other attributes: it is handled by render()\n // In Vue 2 style is still passed!\n inheritAttrs: false,\n // Set initial data\n data() {\n return {\n // Mounted status\n iconMounted: false,\n };\n },\n beforeMount() {\n // Current icon name\n this._name = '';\n // Loading\n this._loadingIcon = null;\n // Mark as mounted\n this.iconMounted = true;\n },\n beforeDestroy() {\n this.abortLoading();\n },\n methods: {\n abortLoading() {\n if (this._loadingIcon) {\n this._loadingIcon.abort();\n this._loadingIcon = null;\n }\n },\n // Get data for icon to render or null\n getIcon(icon, onload) {\n // Icon is an object\n if (typeof icon === 'object' &&\n icon !== null &&\n typeof icon.body === 'string') {\n // Stop loading\n this._name = '';\n this.abortLoading();\n return {\n data: icon,\n };\n }\n // Invalid icon?\n let iconName;\n if (typeof icon !== 'string' ||\n (iconName = stringToIcon(icon, false, true)) === null) {\n this.abortLoading();\n return null;\n }\n // Load icon\n const data = getIconData(iconName);\n if (!data) {\n // Icon data is not available\n if (!this._loadingIcon || this._loadingIcon.name !== icon) {\n // New icon to load\n this.abortLoading();\n this._name = '';\n if (data !== null) {\n // Icon was not loaded\n this._loadingIcon = {\n name: icon,\n abort: loadIcons([iconName], () => {\n this.$forceUpdate();\n }),\n };\n }\n }\n return null;\n }\n // Icon data is available\n this.abortLoading();\n if (this._name !== icon) {\n this._name = icon;\n if (onload) {\n onload(icon);\n }\n }\n // Add classes\n const classes = ['iconify'];\n if (iconName.prefix !== '') {\n classes.push('iconify--' + iconName.prefix);\n }\n if (iconName.provider !== '') {\n classes.push('iconify--' + iconName.provider);\n }\n return { data, classes };\n },\n },\n // Render icon\n render(createElement) {\n const props = Object.assign({}, this.$attrs);\n let context = this.$data;\n // Get icon data\n const icon = this.iconMounted\n ? this.getIcon(props.icon, props.onLoad)\n : null;\n // Validate icon object\n if (!icon) {\n return render(createElement, props, context, emptyIcon);\n }\n // Add classes\n if (icon.classes) {\n context = {\n ...context,\n class: (typeof context['class'] === 'string'\n ? context['class'] + ' '\n : '') + icon.classes.join(' '),\n };\n }\n // Render icon\n return render(createElement, props, context, icon.data);\n },\n});\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, disableCache, enableCache, getIcon, iconExists, listIcons, loadIcon, loadIcons, replaceIDs };\n","<template>\n <span\n v-if=\"isSvg\"\n :class=\"['svp-icon', 'svp-icon--svg', $attrs.class]\"\n :style=\"wrapStyle\"\n v-html=\"icon\"\n />\n <span v-else :class=\"['svp-icon', $attrs.class]\" :style=\"wrapStyle\">\n <Icon :icon=\"icon\" :width=\"sizePx\" :height=\"sizePx\" />\n </span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed } from 'vue-demi'\nimport { Icon } from '@iconify/vue'\nimport { isIconifyName } from '../constants/icons'\n\nexport default defineComponent({\n name: 'SvpIcon',\n components: { Icon },\n inheritAttrs: false,\n props: {\n icon: { type: String, required: true },\n size: { type: [String, Number], default: 16 },\n },\n setup(props) {\n const isSvg = computed(() => !isIconifyName(props.icon))\n const sizePx = computed(() => {\n const raw = props.size\n if (typeof raw === 'number') return raw\n const n = parseFloat(raw)\n return Number.isFinite(n) ? n : 16\n })\n const wrapStyle = computed(() => ({\n width: `${sizePx.value}px`,\n height: `${sizePx.value}px`,\n }))\n return { isSvg, sizePx, wrapStyle }\n },\n})\n</script>\n\n<style scoped lang=\"scss\">\n.svp-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n line-height: 0;\n color: inherit;\n vertical-align: middle;\n\n :deep(svg) {\n display: block;\n }\n}\n\n.svp-icon--svg :deep(svg) {\n width: 100%;\n height: 100%;\n}\n</style>\n","<template>\n <header class=\"svp-header\">\n <div class=\"svp-header__aside svp-header__aside--left\">\n <slot name=\"left\">\n <span v-if=\"logoHtml\" class=\"svp-header__logo\" v-html=\"logoHtml\" />\n <span v-if=\"title\" class=\"svp-header__title\">{{ title }}</span>\n </slot>\n </div>\n\n <div class=\"svp-header__center\">\n <slot name=\"center\">\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.editTemplate')\" @click=\"$emit('edit-template')\">\n <SvpIcon :icon=\"UI_ICONS.editTemplate\" :size=\"22\" />\n <span>{{ t('designer.editTemplate') }}</span>\n </button>\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.editPrintData')\" @click=\"$emit('edit-print-data')\">\n <SvpIcon :icon=\"UI_ICONS.editPrintData\" :size=\"22\" />\n <span>{{ t('designer.editPrintData') }}</span>\n </button>\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.exportFile')\" @click=\"$emit('export-file')\">\n <SvpIcon :icon=\"UI_ICONS.exportFile\" :size=\"22\" />\n <span>{{ t('designer.exportFile') }}</span>\n </button>\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.importFile')\" @click=\"$emit('import-file')\">\n <SvpIcon :icon=\"UI_ICONS.importFile\" :size=\"22\" />\n <span>{{ t('designer.importFile') }}</span>\n </button>\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.save')\" @click=\"$emit('save')\">\n <SvpIcon :icon=\"UI_ICONS.save\" :size=\"22\" />\n <span>{{ t('designer.save') }}</span>\n </button>\n <button type=\"button\" class=\"svp-header__menu\" :title=\"t('designer.preview')\" @click=\"$emit('preview')\">\n <SvpIcon :icon=\"UI_ICONS.preview\" :size=\"22\" />\n <span>{{ t('designer.preview') }}</span>\n </button>\n\n <template v-if=\"showElementBar\">\n <span class=\"svp-header__divider\" aria-hidden=\"true\" />\n <button\n v-for=\"item in resolvedEleList\"\n :key=\"item.key\"\n type=\"button\"\n class=\"svp-header__ele\"\n :title=\"item.label\"\n @click=\"onElementClick(item, $event)\"\n >\n <SvpIcon v-if=\"item.icon\" :icon=\"item.icon\" :size=\"18\" />\n <span>{{ item.label }}</span>\n </button>\n </template>\n </slot>\n </div>\n\n <div class=\"svp-header__aside svp-header__aside--right\">\n <slot name=\"right\" />\n </div>\n </header>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, type PropType } from 'vue-demi'\nimport SvpIcon from './SvpIcon.vue'\nimport { useDesigner } from '../composables/useDesigner'\nimport { useI18n } from '../i18n'\nimport { UI_ICONS } from '../constants/icons'\nimport type { HeaderEle } from '../types'\n\nexport default defineComponent({\n name: 'SvpHeader',\n components: { SvpIcon },\n props: {\n title: { type: String, default: '' },\n logoHtml: { type: String, default: '' },\n headerNewEle: { type: Boolean, default: false },\n headerEleList: { type: Array as PropType<HeaderEle[]>, default: () => [] },\n },\n emits: ['save', 'preview', 'edit-template', 'edit-print-data', 'export-file', 'import-file'],\n setup(props) {\n const { t } = useI18n()\n const utils = useDesigner()\n\n const showElementBar = computed(() => props.headerNewEle && props.headerEleList.length > 0)\n const resolvedEleList = computed(() => props.headerEleList)\n\n function onElementClick(item: HeaderEle, event: MouseEvent) {\n if (typeof item.onClick === 'function') {\n item.onClick(event)\n return\n }\n if (item.tid) utils.addElementByTid(item.tid)\n }\n\n return {\n t,\n UI_ICONS,\n showElementBar,\n resolvedEleList,\n onElementClick,\n }\n },\n})\n</script>\n","import { inject } from 'vue-demi'\nimport {\n DESIGNER_UI_INJECTION_KEY,\n type DesignerUiContext,\n} from '../core/designer-options'\n\nexport function useDesignerUi(): DesignerUiContext | null {\n return inject(DESIGNER_UI_INJECTION_KEY, null)\n}\n","<template>\n <div class=\"svp-toolbar\" role=\"toolbar\" @mousedown=\"onToolbarMouseDown\">\n <template v-for=\"tool in visibleTools\" :key=\"tool.key\">\n <span v-if=\"tool.separator && tool.key === 'spacer'\" class=\"svp-toolbar__spacer\" />\n <span v-else-if=\"tool.separator\" class=\"svp-toolbar__sep\" />\n <span v-else-if=\"tool.display === 'zoomPercent'\" class=\"svp-toolbar__zoom\">\n {{ zoomPercentText }}\n </span>\n <select\n v-else-if=\"tool.display === 'langSelect'\"\n class=\"svp-toolbar__lang-select\"\n :value=\"lang\"\n :title=\"t('locale.switch')\"\n @change=\"onLangChange\"\n >\n <option v-for=\"code in localeList\" :key=\"code\" :value=\"code\">\n {{ localeLabel(code) }}\n </option>\n </select>\n <button\n v-else-if=\"tool.display === 'lockToggle'\"\n type=\"button\"\n :class=\"['svp-toolbar__btn', { 'is-disabled': isLockToggleDisabled(), 'is-active': isSelectionLocked() }]\"\n :title=\"lockToggleTooltip()\"\n :disabled=\"isLockToggleDisabled()\"\n @click=\"onLockToggleClick\"\n >\n <SvpIcon :icon=\"lockToggleIcon()\" :size=\"16\" />\n </button>\n <button\n v-else\n type=\"button\"\n :class=\"['svp-toolbar__btn', { 'is-disabled': isDisabled(tool), 'is-active': isActive(tool) }]\"\n :title=\"tooltipFor(tool)\"\n :disabled=\"isDisabled(tool)\"\n @click=\"onClick(tool)\"\n >\n <SvpIcon :icon=\"tool.icon\" :size=\"16\" />\n </button>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, type PropType } from 'vue-demi'\nimport SvpIcon from './SvpIcon.vue'\nimport { useDesigner } from '../composables/useDesigner'\nimport { useDesignerUi } from '../composables/useDesignerUi'\nimport { useI18n, setLocale, getLocaleList } from '../i18n'\nimport { designerStore, toggleAllPanels, togglePanel } from '../core/stores'\nimport { isToolGroupVisible } from '../core/designer-options'\nimport { DEFAULT_TOOLBAR, ZOOM_MAX, ZOOM_MIN } from '../constants'\nimport { TOOL_ICONS } from '../constants/icons'\nimport type { Lang, ToolDescriptor } from '../types'\n\nexport default defineComponent({\n name: 'SvpToolbar',\n components: { SvpIcon },\n props: {\n tools: { type: Array as PropType<ToolDescriptor[]>, default: () => DEFAULT_TOOLBAR },\n hiddenKeys: { type: Array as PropType<string[]>, default: () => [] },\n mobileOnlyKeys: { type: Array as PropType<string[]>, default: () => [] },\n },\n setup(props) {\n const utils = useDesigner()\n const designerUi = useDesignerUi()\n const { t, lang } = useI18n()\n const localeList = getLocaleList()\n\n const visibleTools = computed(() =>\n props.tools.filter((tool) => {\n if (props.hiddenKeys.includes(tool.key)) return false\n if (tool.mobileOnly && !designerStore.isMobile) return false\n if (tool.desktopOnly && designerStore.isMobile) return false\n if (props.mobileOnlyKeys.includes(tool.key) && !designerStore.isMobile) return false\n if (!isToolGroupVisible(tool.key, designerUi?.styleOption.value)) return false\n return true\n }),\n )\n\n const zoomPercentText = computed(() => `${Math.round(designerStore.zoom * 100)}%`)\n\n function localeLabel(code: string) {\n if (code === 'zh-CN') return t('locale.zhCN')\n if (code === 'en-US') return t('locale.enUS')\n return code\n }\n\n function onLangChange(e: Event) {\n const next = (e.target as HTMLSelectElement).value as Lang\n setLocale(next)\n designerStore.lang = next\n }\n\n /** Keep canvas selection when interacting with toolbar buttons. */\n function onToolbarMouseDown(e: MouseEvent) {\n if ((e.target as HTMLElement | null)?.closest('button')) {\n e.preventDefault()\n }\n }\n\n function tooltipFor(tool: ToolDescriptor): string {\n if (tool.label) return tool.label\n if (tool.i18n) return t(tool.i18n)\n return tool.key\n }\n\n function isDisabled(tool: ToolDescriptor): boolean {\n void designerStore.history.index\n void designerStore.history.canUndo\n void designerStore.history.canRedo\n void designerStore.zoom\n if (tool.key === 'undo') return !designerStore.history.canUndo\n if (tool.key === 'redo') return !designerStore.history.canRedo\n if (tool.key === 'zoomOut') return designerStore.zoom <= ZOOM_MIN + 0.001\n if (tool.key === 'zoomIn') return designerStore.zoom >= ZOOM_MAX - 0.001\n if (tool.needSelection && !utils.hasSelection()) return true\n return false\n }\n\n function isActive(tool: ToolDescriptor): boolean {\n void designerStore.uiPulse\n if (tool.panelKey) return !!designerStore.panels[tool.panelKey]\n if (tool.key === 'togglePanels') {\n return Object.values(designerStore.panels).every(Boolean)\n }\n return false\n }\n\n function isLockToggleDisabled(): boolean {\n return !utils.hasSelection()\n }\n\n function isSelectionLocked(): boolean {\n void designerStore.uiPulse\n return utils.isSelectionLocked()\n }\n\n function lockToggleIcon(): string {\n return isSelectionLocked() ? TOOL_ICONS.lock : TOOL_ICONS.unlock\n }\n\n function lockToggleTooltip(): string {\n return isSelectionLocked() ? t('tool.unlock') : t('tool.lock')\n }\n\n function onLockToggleClick() {\n if (isLockToggleDisabled()) return\n utils.setLock(!isSelectionLocked())\n }\n\n /** Map every toolbar key to the corresponding DesignerUtils action. */\n function onClick(tool: ToolDescriptor) {\n if (isDisabled(tool)) return\n if (tool.panelKey) {\n togglePanel(tool.panelKey)\n return\n }\n if (typeof tool.onClick === 'function') {\n tool.onClick(utils, new MouseEvent('click'))\n return\n }\n switch (tool.key) {\n case 'undo': return utils.history.undo()\n case 'redo': return utils.history.redo()\n case 'alignLeft': return utils.align('left')\n case 'alignCenter': return utils.align('center')\n case 'alignRight': return utils.align('right')\n case 'alignTop': return utils.align('top')\n case 'alignMiddle': return utils.align('middle')\n case 'alignBottom': return utils.align('bottom')\n case 'moveTop': return utils.moveZ('top')\n case 'moveUp': return utils.moveZ('up')\n case 'moveDown': return utils.moveZ('down')\n case 'moveBottom': return utils.moveZ('bottom')\n case 'flipH': return utils.flip('h')\n case 'flipV': return utils.flip('v')\n case 'fontInc': return utils.changeFont(1)\n case 'fontDec': return utils.changeFont(-1)\n case 'fontBold': return utils.setBold(true)\n case 'fontUnbold': return utils.setBold(false)\n case 'clone': return utils.clone()\n case 'copy': return utils.copy()\n case 'cut': return utils.cut()\n case 'paste': return utils.paste()\n case 'delete': return utils.delete()\n case 'zoomOut': return utils.zoomOut()\n case 'zoomIn': return utils.zoomIn()\n case 'rotate': return utils.rotate(90)\n case 'clear': return utils.clearPanel()\n case 'togglePanels': return toggleAllPanels()\n default: return\n }\n }\n\n return {\n t,\n lang,\n localeList,\n utils,\n visibleTools,\n zoomPercentText,\n localeLabel,\n onLangChange,\n onToolbarMouseDown,\n tooltipFor,\n isDisabled,\n isActive,\n onClick,\n TOOL_ICONS,\n isLockToggleDisabled,\n isSelectionLocked,\n lockToggleIcon,\n lockToggleTooltip,\n onLockToggleClick,\n }\n },\n})\n</script>\n","<template>\n <div v-if=\"visible\" class=\"svp-dialog-mask\" @click.self=\"close\">\n <div class=\"svp-dialog svp-preview\">\n <div class=\"svp-dialog__header\">\n <span class=\"svp-dialog__title\">{{ t('designer.preview') }}</span>\n <button type=\"button\" class=\"svp-dialog__close\" aria-label=\"close\" @click=\"close\">×</button>\n </div>\n\n <div class=\"svp-dialog__body svp-preview__body\">\n <div v-if=\"html\" class=\"svp-preview__content\" v-html=\"html\" />\n <div v-else class=\"svp-preview__empty\">\n {{ t('panel.empty') }}\n </div>\n </div>\n\n <div v-if=\"showPrintClientBar\" class=\"svp-preview__print-bar\">\n <span\n class=\"svp-preview__status\"\n :class=\"{ 'is-connected': clientStatus.connected }\"\n >\n {{ clientStatus.connected ? t('designer.printClientConnected') : t('designer.printClientDisconnected') }}\n </span>\n <button type=\"button\" class=\"svp-btn\" @click=\"toggleConnect\">\n {{ clientStatus.connected ? t('designer.printClientDisconnect') : t('designer.printClientConnect') }}\n </button>\n <select\n v-if=\"clientStatus.connected && printers.length\"\n v-model=\"selectedPrinter\"\n class=\"svp-preview__printer-select\"\n >\n <option v-for=\"printer in printers\" :key=\"printer.name\" :value=\"printer.name\">\n {{ formatPrinterLabel(printer) }}\n </option>\n </select>\n <span v-else-if=\"clientStatus.connected\" class=\"svp-preview__printer-empty\">\n {{ t('designer.printClientNoPrinters') }}\n </span>\n </div>\n\n <div v-if=\"canBatchPrint\" class=\"svp-preview__print-bar svp-preview__batch-bar\">\n <label class=\"svp-preview__batch-label\">\n {{ t('designer.batchCopies') }}\n <input\n v-model.number=\"batchCopies\"\n type=\"number\"\n min=\"1\"\n max=\"999\"\n class=\"svp-preview__batch-input\"\n />\n </label>\n <span class=\"svp-preview__batch-hint\">{{ batchHintText }}</span>\n </div>\n\n <div class=\"svp-dialog__footer svp-preview__footer\">\n <button v-if=\"canBatchPrint\" type=\"button\" class=\"svp-btn is-primary\" :disabled=\"batchPrinting\" @click=\"onBatchPrint\">\n {{ batchPrinting ? t('designer.batchPrinting') : t('designer.batchPrint') }}\n </button>\n <button v-if=\"canSilentPrint\" type=\"button\" class=\"svp-btn\" @click=\"onSilentPrint\">\n {{ t('designer.silentPrint') }}\n </button>\n <button v-if=\"canBrowserPrint\" type=\"button\" class=\"svp-btn\" @click=\"onPrint\">\n {{ t('designer.browserPrint') }}\n </button>\n <button v-if=\"canExportPdf\" type=\"button\" class=\"svp-btn\" @click=\"onPdf\">\n {{ t('designer.pdf') }}\n </button>\n <button v-if=\"canExportImage\" type=\"button\" class=\"svp-btn\" @click=\"onImage\">\n {{ t('designer.image') }}\n </button>\n <button type=\"button\" class=\"svp-btn\" @click=\"close\">\n {{ t('designer.cancel') }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, reactive, computed, type PropType } from 'vue-demi'\nimport { useDesigner } from '../composables/useDesigner'\nimport { useI18n } from '../i18n'\nimport { resolvePreviewHtml } from '../core/preview-html'\nimport type { PreviewOptions, PrintClientStatus, PrinterInfo } from '../types'\n\nexport default defineComponent({\n name: 'SvpPreview',\n props: {\n options: { type: Object as PropType<PreviewOptions>, default: () => ({}) },\n },\n setup(props, { expose }) {\n const { t } = useI18n()\n const utils = useDesigner()\n const visible = ref(false)\n const html = ref('')\n const opts = reactive<PreviewOptions>({\n showPdf: true,\n showImg: true,\n showBrowserPrint: true,\n showPrint2: false,\n showBatchPrint: true,\n showPrintClient: false,\n ...props.options,\n })\n const clientStatus = ref<PrintClientStatus>({ connected: false })\n const printers = ref<PrinterInfo[]>([])\n const selectedPrinter = ref('')\n const connecting = ref(false)\n const batchCopies = ref<number>(Math.max(1, Math.floor(props.options?.defaultCopies ?? 1)))\n const batchPrinting = ref(false)\n\n const tpl = computed(() => (utils as any).printTemplate)\n\n const canExportPdf = computed(() => {\n if (opts.showPdf === false) return false\n return typeof tpl.value?.toPdf === 'function'\n })\n\n const canExportImage = computed(() => {\n if (opts.showImg === false) return false\n return typeof tpl.value?.toImage === 'function'\n })\n\n const canBrowserPrint = computed(() => {\n if (opts.showBrowserPrint === false) return false\n return typeof tpl.value?.print === 'function'\n })\n\n const canSilentPrint = computed(() => {\n if (opts.showPrint2 === false || opts.showSilentPrint === false) return false\n return typeof tpl.value?.print2 === 'function'\n })\n\n const showPrintClientBar = computed(() => {\n if (opts.showPrintClient === true) return true\n return canSilentPrint.value\n })\n\n const canBatchPrint = computed(() => {\n if (opts.showBatchPrint === false) return false\n return typeof tpl.value?.getHtml === 'function'\n })\n\n const batchDataRows = computed(() => {\n const data = utils.printData\n if (Array.isArray(data)) return data.length\n return data == null ? 0 : 1\n })\n\n const batchTotalPages = computed(() => {\n const copies = Math.max(1, Math.floor(batchCopies.value || 1))\n return batchDataRows.value * copies\n })\n\n const batchHintText = computed(() => {\n const template = t('designer.batchHint')\n return template\n .replace('{rows}', String(batchDataRows.value))\n .replace('{total}', String(batchTotalPages.value))\n })\n\n function formatPrinterLabel(printer: PrinterInfo): string {\n const label = printer.displayName || printer.name\n return printer.isDefault ? `${label} (${t('designer.defaultPrinter')})` : label\n }\n\n function syncDefaultPrinter(list: PrinterInfo[]) {\n if (!list.length) {\n selectedPrinter.value = ''\n return\n }\n if (selectedPrinter.value && list.some((item) => item.name === selectedPrinter.value)) {\n return\n }\n const fallback = list.find((item) => item.isDefault) ?? list[0]\n selectedPrinter.value = fallback?.name ?? ''\n }\n\n function refreshClientState() {\n clientStatus.value = utils.getPrintClientStatus()\n if (!clientStatus.value.connected) {\n printers.value = []\n return\n }\n printers.value = utils.getPrinterList()\n syncDefaultPrinter(printers.value)\n }\n\n function open(content?: unknown) {\n const raw = content !== undefined ? content : tpl.value?.getHtml?.(utils.printData)\n html.value = resolvePreviewHtml(raw)\n visible.value = true\n refreshClientState()\n utils.plugins.run('onPreview', html.value, utils).catch(() => { /* ignore */ })\n }\n\n function close() { visible.value = false }\n\n async function toggleConnect() {\n if (connecting.value) return\n connecting.value = true\n try {\n if (clientStatus.value.connected) {\n await new Promise<void>((resolve) => {\n utils.setConnect(false, () => resolve())\n })\n } else {\n await new Promise<void>((resolve) => {\n utils.setConnect(true, () => resolve())\n })\n }\n refreshClientState()\n } finally {\n connecting.value = false\n }\n }\n\n async function onPrint() {\n await utils.plugins.run('beforePrint', tpl.value, utils)\n try { tpl.value?.print?.(utils.printData) } catch (e) { console.error(e) }\n }\n\n async function onSilentPrint() {\n const results = await utils.plugins.run('beforePrint2', tpl.value, utils, 'silent')\n if (results.some((r) => r === false)) return\n try {\n await utils.print2(utils.printData, {\n printer: selectedPrinter.value,\n title: t('designer.silentPrint'),\n })\n } catch (e) {\n console.error(e)\n }\n }\n\n async function onPdf() {\n const results = await utils.plugins.run('beforePrint2', tpl.value, utils, 'pdf')\n if (results.some((r) => r === false)) return\n try {\n if (typeof tpl.value?.toPdf === 'function') tpl.value.toPdf(utils.printData)\n } catch (e) { console.error(e) }\n }\n\n async function onImage() {\n const results = await utils.plugins.run('beforePrint2', tpl.value, utils, 'image')\n if (results.some((r) => r === false)) return\n try {\n if (typeof tpl.value?.toImage === 'function') tpl.value.toImage(utils.printData)\n } catch (e) { console.error(e) }\n }\n\n async function onBatchPrint() {\n if (batchPrinting.value) return\n const data = utils.printData\n const list = Array.isArray(data) ? data : [data]\n if (!list.length) return\n const copies = Math.max(1, Math.floor(batchCopies.value || 1))\n batchPrinting.value = true\n try {\n await utils.batchPrint(list, { copies, title: t('designer.batchPrint') })\n } catch (e) {\n console.error(e)\n } finally {\n batchPrinting.value = false\n }\n }\n\n expose({ open, close })\n\n return {\n t,\n visible,\n html,\n clientStatus,\n printers,\n selectedPrinter,\n batchCopies,\n batchPrinting,\n batchDataRows,\n batchTotalPages,\n batchHintText,\n canExportPdf,\n canExportImage,\n canBrowserPrint,\n canSilentPrint,\n canBatchPrint,\n showPrintClientBar,\n formatPrinterLabel,\n close,\n toggleConnect,\n onPrint,\n onSilentPrint,\n onBatchPrint,\n onPdf,\n onImage,\n }\n },\n})\n</script>\n","<template>\n <div v-if=\"visible\" class=\"svp-dialog-mask\" @click.self=\"close(null)\">\n <div class=\"svp-dialog svp-json-editor\">\n <div class=\"svp-dialog__header\">\n <span class=\"svp-dialog__title\">{{ title }}</span>\n <button type=\"button\" class=\"svp-dialog__close\" aria-label=\"close\" @click=\"close(null)\">×</button>\n </div>\n\n <div class=\"svp-dialog__body svp-json-editor__body\">\n <div class=\"svp-json-editor__editor\">\n <pre ref=\"linesRef\" class=\"svp-json-editor__lines\" aria-hidden=\"true\">{{ lineNumbers }}</pre>\n <textarea\n ref=\"textareaRef\"\n v-model=\"text\"\n class=\"svp-json-editor__textarea\"\n spellcheck=\"false\"\n @input=\"onInput\"\n @scroll=\"syncScroll\"\n />\n </div>\n <div v-if=\"error\" class=\"svp-json-editor__error\">{{ error }}</div>\n </div>\n\n <div class=\"svp-dialog__footer svp-json-editor__footer\">\n <div v-if=\"showToolbar\" class=\"svp-json-editor__footer-left\">\n <button type=\"button\" class=\"svp-btn is-danger\" @click=\"doClear\">{{ clearTextLabel }}</button>\n <button type=\"button\" class=\"svp-btn is-info\" @click=\"doCopy\">{{ copyTextLabel }}</button>\n </div>\n <div class=\"svp-json-editor__footer-right\">\n <button type=\"button\" class=\"svp-btn is-primary\" @click=\"apply\">{{ confirmText }}</button>\n <button type=\"button\" class=\"svp-btn\" @click=\"close(null)\">{{ cancelText }}</button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, nextTick } from 'vue-demi'\nimport { EMPTY_TEMPLATE_JSON } from '../constants'\nimport type { JsonEditorModalOptions } from '../core/json-editor-modal'\n\nexport interface JsonEditorOpenOptions extends JsonEditorModalOptions {\n variant?: 'template' | 'default'\n}\n\nexport default defineComponent({\n name: 'SvpJsonEditorModal',\n setup(_, { expose }) {\n const visible = ref(false)\n const title = ref('')\n const text = ref('{}')\n const error = ref('')\n const confirmText = ref('OK')\n const cancelText = ref('Cancel')\n const clearTextLabel = ref('Clear')\n const copyTextLabel = ref('Copy')\n const invalidText = ref('Invalid JSON')\n const showToolbar = ref(false)\n const variant = ref<'template' | 'default'>('default')\n\n const linesRef = ref<HTMLElement | null>(null)\n const textareaRef = ref<HTMLTextAreaElement | null>(null)\n\n let resolver: ((value: unknown | null) => void) | null = null\n\n const lineNumbers = computed(() => {\n const count = Math.max(1, text.value.split('\\n').length)\n return Array.from({ length: count }, (_, i) => String(i + 1)).join('\\n')\n })\n\n function safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value ?? {}, null, 2)\n } catch {\n try {\n const seen = new WeakSet<object>()\n return JSON.stringify(value, (_key, val) => {\n if (typeof val === 'object' && val !== null) {\n if (seen.has(val)) return undefined\n seen.add(val)\n }\n return val\n }, 2)\n } catch {\n return '{}'\n }\n }\n }\n\n function close(result: unknown | null) {\n visible.value = false\n error.value = ''\n const done = resolver\n resolver = null\n done?.(result)\n }\n\n function open(options: JsonEditorOpenOptions): Promise<unknown | null> {\n if (resolver) {\n const prev = resolver\n resolver = null\n prev(null)\n }\n return new Promise((resolve) => {\n resolver = resolve\n title.value = options.title\n text.value = safeStringify(options.value)\n confirmText.value = options.confirmText ?? 'OK'\n cancelText.value = options.cancelText ?? 'Cancel'\n clearTextLabel.value = options.clearText ?? 'Clear'\n copyTextLabel.value = options.copyText ?? 'Copy'\n invalidText.value = options.invalidText ?? 'Invalid JSON'\n showToolbar.value = options.variant === 'template'\n variant.value = options.variant === 'template' ? 'template' : 'default'\n error.value = ''\n visible.value = true\n nextTick(() => {\n const ta = textareaRef.value\n const lines = linesRef.value\n if (ta) {\n ta.scrollTop = 0\n ta.setSelectionRange(0, 0)\n ta.focus({ preventScroll: true })\n }\n if (lines) lines.scrollTop = 0\n })\n })\n }\n\n function onInput() {\n error.value = ''\n }\n\n function syncScroll() {\n const ta = textareaRef.value\n const lines = linesRef.value\n if (ta && lines) lines.scrollTop = ta.scrollTop\n }\n\n function doClear() {\n text.value = variant.value === 'template'\n ? JSON.stringify(EMPTY_TEMPLATE_JSON, null, 2)\n : '{}'\n error.value = ''\n textareaRef.value?.focus()\n }\n\n async function doCopy() {\n try {\n await navigator.clipboard.writeText(text.value)\n } catch {\n const helper = textareaRef.value\n if (!helper) return\n helper.focus()\n helper.select()\n try { document.execCommand('copy') } catch { /* ignore */ }\n }\n }\n\n function apply() {\n try {\n close(JSON.parse(text.value))\n } catch {\n error.value = invalidText.value\n }\n }\n\n expose({ open, close })\n\n return {\n visible,\n title,\n text,\n error,\n confirmText,\n cancelText,\n clearTextLabel,\n copyTextLabel,\n showToolbar,\n linesRef,\n textareaRef,\n lineNumbers,\n close,\n onInput,\n syncScroll,\n doClear,\n doCopy,\n apply,\n }\n },\n})\n</script>\n","<template>\n <div v-if=\"visible\" class=\"svp-dialog-mask\" @click.self=\"close(null)\">\n <div class=\"svp-dialog svp-print-data-editor\">\n <div class=\"svp-dialog__header\">\n <span class=\"svp-dialog__title\">{{ title }}</span>\n <button type=\"button\" class=\"svp-dialog__close\" aria-label=\"close\" @click=\"close(null)\">×</button>\n </div>\n\n <div class=\"svp-dialog__body svp-print-data-editor__body\">\n <div v-if=\"isEmpty\" class=\"svp-print-data-editor__empty\">{{ emptyHint }}</div>\n\n <template v-else>\n <section v-if=\"schema.basicFields.length\" class=\"svp-print-data-editor__section\">\n <div class=\"svp-print-data-editor__section-title\">{{ basicSectionTitle }}</div>\n <div class=\"svp-print-data-editor__basic-grid\">\n <label\n v-for=\"field in schema.basicFields\"\n :key=\"field.field\"\n class=\"svp-print-data-editor__field\"\n >\n <span class=\"svp-print-data-editor__field-label\">{{ field.label }}</span>\n <input\n v-model=\"basicValues[field.field]\"\n type=\"text\"\n class=\"svp-print-data-editor__input\"\n :placeholder=\"field.field\"\n />\n </label>\n </div>\n </section>\n\n <section\n v-for=\"table in schema.tables\"\n :key=\"table.field\"\n class=\"svp-print-data-editor__section\"\n >\n <div class=\"svp-print-data-editor__section-title\">\n {{ tableSectionTitle }}\n <span class=\"svp-print-data-editor__section-sub\">\n {{ table.label }}({{ tableFieldLabel }}: {{ table.field }})\n </span>\n </div>\n\n <div class=\"svp-print-data-editor__table-wrap\">\n <table class=\"svp-print-data-editor__table\">\n <thead>\n <tr>\n <th v-for=\"col in table.columns\" :key=\"col.field\">{{ col.label }}</th>\n <th class=\"svp-print-data-editor__actions-col\">{{ deleteRowText }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(row, rowIndex) in tableValues[table.field]\" :key=\"`${table.field}-${rowIndex}`\">\n <td v-for=\"col in table.columns\" :key=\"col.field\">\n <input\n v-model=\"row[col.field]\"\n type=\"text\"\n class=\"svp-print-data-editor__input\"\n :placeholder=\"col.field\"\n />\n </td>\n <td class=\"svp-print-data-editor__actions-col\">\n <button\n type=\"button\"\n class=\"svp-print-data-editor__row-delete\"\n :disabled=\"tableValues[table.field].length <= 1\"\n @click=\"removeTableRow(table.field, rowIndex)\"\n >\n <SvpIcon :icon=\"ICON_DELETE\" :size=\"14\" />\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <button type=\"button\" class=\"svp-btn svp-print-data-editor__add-row\" @click=\"addTableRow(table)\">\n {{ addRowText }}\n </button>\n </section>\n </template>\n </div>\n\n <div class=\"svp-dialog__footer svp-print-data-editor__footer\">\n <div class=\"svp-print-data-editor__footer-left\">\n <button type=\"button\" class=\"svp-btn is-danger\" @click=\"doClear\">{{ clearTextLabel }}</button>\n <button type=\"button\" class=\"svp-btn is-info\" @click=\"doCopy\">{{ copyTextLabel }}</button>\n </div>\n <div class=\"svp-print-data-editor__footer-right\">\n <button type=\"button\" class=\"svp-btn is-primary\" @click=\"apply\">{{ confirmText }}</button>\n <button type=\"button\" class=\"svp-btn\" @click=\"close(null)\">{{ cancelText }}</button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, reactive } from 'vue-demi'\nimport SvpIcon from './SvpIcon.vue'\nimport { ICON_DELETE } from '../constants/icons'\nimport {\n buildPrintDataFromForm,\n createEmptyTableRow,\n createPrintDataFormState,\n type TableFieldDef,\n type TemplateFieldSchema,\n} from '../core/template-fields'\nimport type { PrintDataEditorModalOptions } from '../core/print-data-editor-modal'\n\nexport default defineComponent({\n name: 'SvpPrintDataEditorModal',\n components: { SvpIcon },\n setup(_, { expose }) {\n const visible = ref(false)\n const title = ref('')\n const confirmText = ref('OK')\n const cancelText = ref('Cancel')\n const clearTextLabel = ref('Clear')\n const copyTextLabel = ref('Copy')\n const basicSectionTitle = ref('')\n const tableSectionTitle = ref('')\n const emptyHint = ref('')\n const addRowText = ref('')\n const deleteRowText = ref('')\n const tableFieldLabel = ref('')\n\n const schema = ref<TemplateFieldSchema>({ basicFields: [], tables: [] })\n const basicValues = reactive<Record<string, string>>({})\n const tableValues = reactive<Record<string, Record<string, string>[]>>({})\n let existingData: Record<string, unknown> = {}\n\n let resolver: ((value: Record<string, unknown> | null) => void) | null = null\n\n const isEmpty = computed(() => (\n schema.value.basicFields.length === 0 && schema.value.tables.length === 0\n ))\n\n function resetFormState(nextSchema: TemplateFieldSchema, value: Record<string, unknown>) {\n schema.value = nextSchema\n existingData = { ...value }\n\n Object.keys(basicValues).forEach((key) => { delete basicValues[key] })\n Object.keys(tableValues).forEach((key) => { delete tableValues[key] })\n\n const state = createPrintDataFormState(nextSchema, value)\n Object.assign(basicValues, state.basicValues)\n Object.assign(tableValues, state.tableValues)\n }\n\n function close(result: Record<string, unknown> | null) {\n visible.value = false\n const done = resolver\n resolver = null\n done?.(result)\n }\n\n function open(options: PrintDataEditorModalOptions): Promise<Record<string, unknown> | null> {\n if (resolver) {\n const prev = resolver\n resolver = null\n prev(null)\n }\n\n return new Promise((resolve) => {\n resolver = resolve\n title.value = options.title\n confirmText.value = options.confirmText ?? 'OK'\n cancelText.value = options.cancelText ?? 'Cancel'\n clearTextLabel.value = options.clearText ?? 'Clear'\n copyTextLabel.value = options.copyText ?? 'Copy'\n basicSectionTitle.value = options.basicSectionTitle ?? 'Basic Data'\n tableSectionTitle.value = options.tableSectionTitle ?? 'Table Data'\n emptyHint.value = options.emptyHint ?? 'No bindable fields found in template.'\n addRowText.value = options.addRowText ?? 'Add row'\n deleteRowText.value = options.deleteRowText ?? 'Delete'\n tableFieldLabel.value = options.tableFieldLabel ?? 'Field'\n resetFormState(options.schema, options.value ?? {})\n visible.value = true\n })\n }\n\n function addTableRow(table: TableFieldDef) {\n const rows = tableValues[table.field] ?? []\n rows.push(createEmptyTableRow(table.columns))\n tableValues[table.field] = rows\n }\n\n function removeTableRow(tableField: string, rowIndex: number) {\n const rows = tableValues[tableField] ?? []\n if (rows.length <= 1) return\n rows.splice(rowIndex, 1)\n tableValues[tableField] = rows\n }\n\n function buildResult(): Record<string, unknown> {\n const tableSnapshot: Record<string, Record<string, string>[]> = {}\n schema.value.tables.forEach((table) => {\n tableSnapshot[table.field] = (tableValues[table.field] ?? []).map((row) => ({ ...row }))\n })\n return buildPrintDataFromForm(\n schema.value,\n { ...basicValues },\n tableSnapshot,\n existingData,\n )\n }\n\n function doClear() {\n resetFormState(schema.value, {})\n }\n\n async function doCopy() {\n const text = JSON.stringify(buildResult(), null, 2)\n try {\n await navigator.clipboard.writeText(text)\n } catch {\n /* ignore */\n }\n }\n\n function apply() {\n close(buildResult())\n }\n\n expose({ open, close })\n\n return {\n visible,\n title,\n confirmText,\n cancelText,\n clearTextLabel,\n copyTextLabel,\n basicSectionTitle,\n tableSectionTitle,\n emptyHint,\n addRowText,\n deleteRowText,\n tableFieldLabel,\n schema,\n basicValues,\n tableValues,\n isEmpty,\n ICON_DELETE,\n close,\n addTableRow,\n removeTableRow,\n doClear,\n doCopy,\n apply,\n }\n },\n})\n</script>\n","import { reactive, onMounted, onBeforeUnmount } from 'vue-demi'\nimport { readJSON, writeJSON } from '../core/storage'\nimport {\n resolvePanelLayout,\n SVP_PANEL_LAYOUT,\n SVP_RULER_INSET,\n type PanelLayoutSpec,\n type SvpPanelLayoutKey,\n} from '../constants/panel-layout'\n\nexport interface DragBoxState {\n x: number\n y: number\n width: number\n height: number\n folded: boolean\n visible: boolean\n}\n\nexport interface UseDragBoxOptions {\n key?: string\n defaultX?: number\n defaultY?: number\n defaultWidth?: number\n defaultHeight?: number\n defaultFolded?: boolean\n defaultVisible?: boolean\n /** Apply sv-print default layout (recomputed on workspace resize). */\n layoutKey?: SvpPanelLayoutKey\n /** Override or extend the sv-print layout spec. */\n layoutSpec?: PanelLayoutSpec\n handleSelector?: string\n boundsSelector?: string\n /** When false the panel cannot be dragged. */\n draggable?: boolean\n}\n\nfunction getBounds(selector?: string, el?: HTMLElement | null) {\n const node = (selector ? document.querySelector(selector) : el?.parentElement) as HTMLElement | null\n if (!node) return { width: window.innerWidth, height: window.innerHeight }\n return { width: node.clientWidth, height: node.clientHeight }\n}\n\nexport function useDragBox(boxEl: () => HTMLElement | null, opts: UseDragBoxOptions = {}) {\n const persisted = opts.key\n ? readJSON<DragBoxState | null>(`dragbox:${opts.key}`, null)\n : null\n\n const state = reactive<DragBoxState>({\n x: persisted?.x ?? opts.defaultX ?? 16,\n y: persisted?.y ?? opts.defaultY ?? 64,\n width: persisted?.width ?? opts.defaultWidth ?? 220,\n height: persisted?.height ?? opts.defaultHeight ?? 220,\n folded: persisted?.folded ?? opts.defaultFolded ?? false,\n visible: persisted?.visible ?? opts.defaultVisible ?? true,\n })\n\n let dragging = false\n let userMoved = persisted != null && (persisted.x !== opts.defaultX || persisted.y !== opts.defaultY)\n let startX = 0\n let startY = 0\n let origX = 0\n let origY = 0\n let resizeObserver: ResizeObserver | null = null\n\n function clamp(v: number, min: number, max: number) {\n return Math.max(min, Math.min(max, v))\n }\n\n function applyLayout(force = false) {\n if (!opts.layoutKey && !opts.layoutSpec) return\n if (userMoved && !force) return\n const spec = opts.layoutSpec ?? SVP_PANEL_LAYOUT[opts.layoutKey!]\n const bounds = getBounds(opts.boundsSelector, boxEl())\n const rect = resolvePanelLayout(spec, bounds)\n state.x = rect.x\n state.y = rect.y\n state.width = rect.width\n state.height = rect.height\n }\n\n function onMouseDown(e: MouseEvent) {\n if (opts.draggable === false) return\n const el = boxEl()\n if (!el) return\n const handle = opts.handleSelector ? el.querySelector(opts.handleSelector) : el\n if (!handle || !(handle as HTMLElement).contains(e.target as Node)) return\n dragging = true\n startX = e.clientX\n startY = e.clientY\n origX = state.x\n origY = state.y\n document.addEventListener('mousemove', onMouseMove)\n document.addEventListener('mouseup', onMouseUp)\n e.preventDefault()\n }\n\n function onMouseMove(e: MouseEvent) {\n if (!dragging) return\n const el = boxEl()\n if (!el) return\n const bounds = getBounds(opts.boundsSelector, el)\n const dx = e.clientX - startX\n const dy = e.clientY - startY\n let nextX = origX + dx\n let nextY = origY + dy\n nextX = clamp(nextX, SVP_RULER_INSET, Math.max(SVP_RULER_INSET, bounds.width - 60))\n nextY = clamp(nextY, SVP_RULER_INSET, Math.max(SVP_RULER_INSET, bounds.height - 28))\n state.x = nextX\n state.y = nextY\n }\n\n function onMouseUp() {\n if (!dragging) return\n dragging = false\n userMoved = true\n document.removeEventListener('mousemove', onMouseMove)\n document.removeEventListener('mouseup', onMouseUp)\n persist()\n }\n\n function persist() {\n if (opts.key) writeJSON(`dragbox:${opts.key}`, state)\n }\n\n function toggleFolded() {\n state.folded = !state.folded\n persist()\n }\n\n function setVisible(v: boolean) {\n state.visible = v\n persist()\n }\n\n onMounted(() => {\n const el = boxEl()\n el?.addEventListener('mousedown', onMouseDown)\n applyLayout(true)\n const boundsNode = opts.boundsSelector\n ? document.querySelector(opts.boundsSelector)\n : el?.parentElement\n if (boundsNode && typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(() => applyLayout())\n resizeObserver.observe(boundsNode)\n }\n window.addEventListener('resize', onWindowResize)\n })\n\n function onWindowResize() {\n applyLayout()\n }\n\n onBeforeUnmount(() => {\n const el = boxEl()\n el?.removeEventListener('mousedown', onMouseDown)\n document.removeEventListener('mousemove', onMouseMove)\n document.removeEventListener('mouseup', onMouseUp)\n window.removeEventListener('resize', onWindowResize)\n resizeObserver?.disconnect()\n })\n\n return { state, toggleFolded, setVisible, persist, applyLayout, dragging: () => dragging }\n}\n","<template>\n <div\n v-show=\"show\"\n ref=\"boxRef\"\n :class=\"['svp-dragbox', { 'is-folded': state.folded, 'is-fixed': !draggable }]\"\n :style=\"boxStyle\"\n >\n <div class=\"svp-dragbox__header\">\n <span class=\"svp-dragbox__title\">\n <slot name=\"title\">{{ resolvedTitle }}</slot>\n </span>\n <div class=\"svp-dragbox__menu\">\n <slot name=\"actions\" />\n <span\n v-if=\"showFold\"\n :class=\"['svp-dragbox__icon', { 'is-min': state.folded }]\"\n :title=\"state.folded ? t('panel.expand') : t('panel.minimize')\"\n @click.stop=\"toggleFolded\"\n >\n <SvpIcon :icon=\"UI_ICONS.chevronDown\" :size=\"16\" aria-hidden=\"true\" />\n </span>\n <span\n v-if=\"showClose\"\n class=\"svp-dragbox__icon\"\n :title=\"t('panel.hide')\"\n @click.stop=\"onClose\"\n >\n <SvpIcon :icon=\"UI_ICONS.close\" :size=\"16\" aria-hidden=\"true\" />\n </span>\n </div>\n </div>\n <div v-show=\"!state.folded\" class=\"svp-dragbox__body\" :style=\"bodyStyle\">\n <slot />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, watch, reactive, type PropType } from 'vue-demi'\nimport SvpIcon from './SvpIcon.vue'\nimport { useDragBox } from '../composables/useDragBox'\nimport { useDesignerUi } from '../composables/useDesignerUi'\nimport { useI18n } from '../i18n'\nimport { designerStore, setPanelVisibility, type PanelVisibility } from '../core/stores'\nimport { resolvePanelDragBoxOptions } from '../core/designer-options'\nimport { UI_ICONS } from '../constants/icons'\nimport type { SvpPanelLayoutKey } from '../constants/panel-layout'\n\nexport default defineComponent({\n name: 'SvpDragBox',\n components: { SvpIcon },\n props: {\n title: { type: String, default: '' },\n storageKey: { type: String, default: '' },\n layoutKey: { type: String as PropType<SvpPanelLayoutKey>, default: '' },\n styleOptionKey: { type: String, default: '' },\n panelKey: { type: String as PropType<keyof PanelVisibility>, default: '' },\n defaultX: { type: Number, default: 16 },\n defaultY: { type: Number, default: 64 },\n width: { type: Number, default: 220 },\n height: { type: Number, default: 240 },\n visible: { type: Boolean, default: true },\n folded: { type: Boolean, default: false },\n foldable: { type: Boolean, default: true },\n closable: { type: Boolean, default: undefined },\n bodyPadding: { type: String, default: '' },\n boundsSelector: { type: String, default: '.svp-workspace' },\n bodyStyleExtra: { type: Object as PropType<Record<string, string>>, default: () => ({}) },\n },\n emits: ['update:visible', 'close'],\n setup(props, { emit }) {\n const boxRef = ref<HTMLElement | null>(null)\n const { t } = useI18n()\n const designerUi = useDesignerUi()\n\n const styleOverrides = computed(() => (\n props.styleOptionKey\n ? resolvePanelDragBoxOptions(props.styleOptionKey, designerUi?.styleOption.value)\n : null\n ))\n\n const resolvedTitle = computed(() => styleOverrides.value?.title || props.title)\n const draggable = computed(() => styleOverrides.value?.draggable ?? true)\n\n const showFold = computed(() => props.foldable)\n const showClose = computed(() => props.closable ?? !!props.panelKey)\n\n const dragBoxOptions = reactive({\n key: props.storageKey || undefined,\n layoutKey: (styleOverrides.value?.layoutKey || props.layoutKey || undefined) as SvpPanelLayoutKey | undefined,\n layoutSpec: styleOverrides.value?.layoutSpec,\n defaultX: props.defaultX,\n defaultY: props.defaultY,\n defaultWidth: props.width,\n defaultHeight: props.height,\n defaultFolded: props.folded,\n defaultVisible: props.visible,\n handleSelector: '.svp-dragbox__title',\n boundsSelector: props.boundsSelector || undefined,\n draggable: draggable.value,\n })\n\n const { state, toggleFolded, setVisible } = useDragBox(() => boxRef.value, dragBoxOptions)\n\n watch(draggable, (v) => { dragBoxOptions.draggable = v }, { immediate: true })\n watch(\n () => styleOverrides.value?.layoutSpec,\n (spec) => { dragBoxOptions.layoutSpec = spec },\n )\n watch(\n () => styleOverrides.value?.layoutKey,\n (key) => { dragBoxOptions.layoutKey = (key || props.layoutKey || undefined) as SvpPanelLayoutKey | undefined },\n )\n\n const show = computed(() =>\n props.panelKey\n ? designerStore.panels[props.panelKey]\n : state.visible,\n )\n\n watch(\n show,\n (v) => { if (v !== state.visible) setVisible(v) },\n { immediate: true },\n )\n\n watch(\n () => props.visible,\n (v) => {\n if (props.panelKey) return\n if (v !== state.visible) setVisible(v)\n },\n )\n\n const boxStyle = computed(() => {\n const extra = { ...(styleOverrides.value?.boxStyleExtra ?? {}) }\n const isFixed = extra.position === 'fixed'\n if (!isFixed) {\n delete extra.left\n delete extra.top\n delete extra.width\n delete extra.height\n }\n return {\n left: isFixed ? extra.left : `${state.x}px`,\n top: isFixed ? extra.top : `${state.y}px`,\n width: (!isFixed ? `${state.width}px` : extra.width) ?? `${state.width}px`,\n height: state.folded ? 'auto' : ((!isFixed ? `${state.height}px` : extra.height) ?? `${state.height}px`),\n ...extra,\n }\n })\n\n const bodyStyle = computed(() => ({\n padding: props.bodyPadding || undefined,\n ...props.bodyStyleExtra,\n ...styleOverrides.value?.bodyStyleExtra,\n }))\n\n function onClose() {\n if (props.panelKey) {\n setPanelVisibility(props.panelKey, false)\n } else {\n setVisible(false)\n emit('update:visible', false)\n }\n emit('close')\n }\n\n return {\n boxRef,\n state,\n show,\n showFold,\n showClose,\n toggleFolded,\n boxStyle,\n bodyStyle,\n onClose,\n resolvedTitle,\n draggable,\n t,\n UI_ICONS,\n }\n },\n})\n</script>\n","<template>\n <DragBox\n :title=\"t('panel.draggableEls')\"\n storage-key=\"draggableEls.v6\"\n layout-key=\"draggableEls\"\n panel-key=\"draggableEls\"\n style-option-key=\"draggableEls\"\n body-padding=\"0\"\n >\n <div class=\"svp-drag-els\">\n <div v-for=\"group in grouped\" :key=\"group.name\" class=\"svp-drag-els__group\">\n <div class=\"svp-drag-els__group-title\">{{ group.name }}</div>\n <div class=\"svp-drag-els__list\">\n <div\n v-for=\"item in group.items\"\n :key=\"item.key\"\n :class=\"['ep-draggable-item', `tag-${item.key}`]\"\n :tid=\"item.tid\"\n >\n <span class=\"svp-drag-els__icon\">\n <SvpIcon :icon=\"iconFor(item.key)\" :size=\"28\" />\n </span>\n <span>{{ item.label }}</span>\n </div>\n </div>\n </div>\n </div>\n </DragBox>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, onMounted, nextTick, type PropType } from 'vue-demi'\nimport DragBox from '../DragBox.vue'\nimport SvpIcon from '../SvpIcon.vue'\nimport { useDesigner } from '../../composables/useDesigner'\nimport { useI18n } from '../../i18n'\nimport { designerStore } from '../../core/stores'\nimport { DEFAULT_ELEMENT_CATALOGUE, type ElementCatalogueItem } from '../../constants'\nimport { iconForElementKey } from '../../constants/icons'\n\nexport default defineComponent({\n name: 'DraggableElsPanel',\n components: { DragBox, SvpIcon },\n props: {\n catalogue: {\n type: Array as PropType<ElementCatalogueItem[]>,\n default: () => DEFAULT_ELEMENT_CATALOGUE,\n },\n },\n setup(props) {\n const utils = useDesigner()\n const { t } = useI18n()\n\n const grouped = computed(() => {\n const map = new Map<string, ElementCatalogueItem[]>()\n props.catalogue.forEach((item) => {\n const list = map.get(item.group) ?? []\n list.push(item)\n map.set(item.group, list)\n })\n return Array.from(map.entries()).map(([name, items]) => ({ name, items }))\n })\n\n function iconFor(key: string) {\n return iconForElementKey(key)\n }\n\n onMounted(async () => {\n await nextTick()\n try { utils.buildByHtml() } catch { /* ignore */ }\n })\n\n return { t, grouped, iconFor, state: designerStore }\n },\n})\n</script>\n","<template>\n <DragBox\n :title=\"t('panel.miniMap')\"\n storage-key=\"miniMap.v7\"\n layout-key=\"miniMap\"\n panel-key=\"miniMap\"\n style-option-key=\"miniMap\"\n body-padding=\"6px\"\n >\n <div ref=\"miniMapRef\" class=\"svp-minimap\">\n <div class=\"svp-minimap__stage\" :style=\"stageStyle\">\n <div class=\"svp-minimap__paper\">\n <div\n v-if=\"snapshot.headerLine\"\n class=\"svp-minimap__guide svp-minimap__guide--header\"\n :style=\"snapshot.headerLine\"\n />\n <div\n v-if=\"snapshot.footerLine\"\n class=\"svp-minimap__guide svp-minimap__guide--footer\"\n :style=\"snapshot.footerLine\"\n />\n <div\n v-for=\"item in snapshot.elements\"\n :key=\"item.key\"\n :class=\"['svp-minimap__el', `svp-minimap__el--${item.kind}`]\"\n :style=\"item.style\"\n >\n <SvpIcon v-if=\"item.showIcon\" :icon=\"item.icon\" :size=\"8\" aria-hidden=\"true\" />\n </div>\n </div>\n </div>\n <div class=\"svp-minimap__viewport\" :style=\"viewportStyle\" />\n </div>\n </DragBox>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, onMounted, onBeforeUnmount, reactive, watch } from 'vue-demi'\nimport DragBox from '../DragBox.vue'\nimport SvpIcon from '../SvpIcon.vue'\nimport { useDesigner } from '../../composables/useDesigner'\nimport { useI18n } from '../../i18n'\nimport { designerStore } from '../../core/stores'\nimport { DESIGN_CONTAINER_ID } from '../../constants'\nimport { iconForElementKey } from '../../constants/icons'\n\ninterface MiniMapElementView {\n key: string\n kind: string\n icon: string\n showIcon: boolean\n style: Record<string, string>\n}\n\nconst LINE_KINDS = new Set(['hline', 'vline'])\n\nexport default defineComponent({\n name: 'MiniMapPanel',\n components: { DragBox, SvpIcon },\n setup() {\n const utils = useDesigner()\n const { t } = useI18n()\n const miniMapRef = ref<HTMLElement | null>(null)\n const region = reactive({ left: 0, top: 0, width: 100, height: 60 })\n const stage = reactive({ left: 0, top: 0, width: 100, height: 140 })\n const snapshot = reactive<{\n elements: MiniMapElementView[]\n headerLine: Record<string, string> | null\n footerLine: Record<string, string> | null\n }>({\n elements: [],\n headerLine: null,\n footerLine: null,\n })\n let raf = 0\n\n function kindFromClass(className: string): string {\n const match = className.match(/hiprint-printElement-(\\w+)/)\n return match?.[1] || 'text'\n }\n\n function buildGuideStyle(paperRect: DOMRect, lineRect: DOMRect, stageH: number): Record<string, string> {\n const top = ((lineRect.top - paperRect.top) / paperRect.height) * 100\n const height = Math.max(1, (lineRect.height / paperRect.height) * stageH)\n return {\n top: `${top}%`,\n height: `${height}px`,\n }\n }\n\n function buildElements(paper: HTMLElement, paperRect: DOMRect, stageW: number, stageH: number): MiniMapElementView[] {\n return Array.from(paper.querySelectorAll('.hiprint-printElement')).map((node, index) => {\n const el = node as HTMLElement\n const rect = el.getBoundingClientRect()\n const kind = kindFromClass(el.className)\n const isLine = LINE_KINDS.has(kind)\n const width = Math.max(isLine ? 1 : 2, (rect.width / paperRect.width) * stageW)\n const height = Math.max(isLine ? 1 : 2, (rect.height / paperRect.height) * stageH)\n const showIcon = !isLine && width >= 10 && height >= 8\n return {\n key: `${kind}-${index}-${Math.round(rect.left)}-${Math.round(rect.top)}`,\n kind,\n icon: iconForElementKey(kind),\n showIcon,\n style: {\n left: `${((rect.left - paperRect.left) / paperRect.width) * 100}%`,\n top: `${((rect.top - paperRect.top) / paperRect.height) * 100}%`,\n width: `${width}px`,\n height: `${height}px`,\n },\n }\n })\n }\n\n function refresh() {\n const map = miniMapRef.value\n const host = document.getElementById(DESIGN_CONTAINER_ID)\n const scroller = host?.parentElement as HTMLElement | null\n const paper = host?.querySelector?.('.hiprint-printPaper') as HTMLElement | null\n if (!map || !scroller || !paper) return\n\n const mapW = map.clientWidth\n const mapH = map.clientHeight\n if (mapW <= 0 || mapH <= 0) return\n\n const paperRect = paper.getBoundingClientRect()\n if (paperRect.width <= 0 || paperRect.height <= 0) return\n\n const fitScale = Math.min((mapW - 4) / paperRect.width, (mapH - 4) / paperRect.height)\n const stageW = paperRect.width * fitScale\n const stageH = paperRect.height * fitScale\n stage.left = (mapW - stageW) / 2\n stage.top = (mapH - stageH) / 2\n stage.width = stageW\n stage.height = stageH\n\n const header = paper.querySelector('.hiprint-headerLine') as HTMLElement | null\n const footer = paper.querySelector('.hiprint-footerLine') as HTMLElement | null\n snapshot.headerLine = header\n ? buildGuideStyle(paperRect, header.getBoundingClientRect(), stageH)\n : null\n snapshot.footerLine = footer\n ? buildGuideStyle(paperRect, footer.getBoundingClientRect(), stageH)\n : null\n snapshot.elements = buildElements(paper, paperRect, stageW, stageH)\n\n const scrollW = Math.max(scroller.scrollWidth, 1)\n const scrollH = Math.max(scroller.scrollHeight, 1)\n const maxScrollLeft = Math.max(0, scroller.scrollWidth - scroller.clientWidth)\n const maxScrollTop = Math.max(0, scroller.scrollHeight - scroller.clientHeight)\n\n region.width = Math.max(20, Math.min(stageW, (scroller.clientWidth / scrollW) * stageW))\n region.height = Math.max(15, Math.min(stageH, (scroller.clientHeight / scrollH) * stageH))\n\n const trackW = Math.max(0, stageW - region.width)\n const trackH = Math.max(0, stageH - region.height)\n\n region.left = stage.left + (maxScrollLeft > 0 ? (scroller.scrollLeft / maxScrollLeft) * trackW : 0)\n region.top = stage.top + (maxScrollTop > 0 ? (scroller.scrollTop / maxScrollTop) * trackH : 0)\n }\n\n function loop() {\n refresh()\n raf = requestAnimationFrame(loop)\n }\n\n onMounted(() => {\n utils.setMiniMap({ refresh })\n raf = requestAnimationFrame(loop)\n })\n onBeforeUnmount(() => { if (raf) cancelAnimationFrame(raf) })\n\n const stageStyle = computed(() => ({\n left: `${stage.left}px`,\n top: `${stage.top}px`,\n width: `${stage.width}px`,\n height: `${stage.height}px`,\n }))\n\n const viewportStyle = computed(() => ({\n left: `${region.left}px`,\n top: `${region.top}px`,\n width: `${region.width}px`,\n height: `${region.height}px`,\n }))\n\n watch(() => designerStore.zoom, () => refresh())\n\n return {\n t,\n miniMapRef,\n snapshot,\n stageStyle,\n viewportStyle,\n }\n },\n})\n</script>\n","<template>\n <DragBox\n :title=\"t('panel.pageStructure')\"\n storage-key=\"pageStructure.v6\"\n layout-key=\"pageStructure\"\n panel-key=\"pageStructure\"\n style-option-key=\"pageStructure\"\n body-padding=\"4px\"\n >\n <ul class=\"svp-structure\">\n <li v-if=\"!items.length\" class=\"svp-structure__empty\">{{ t('panel.empty') }}</li>\n <li\n v-for=\"(item, idx) in items\"\n :key=\"item.id || idx\"\n :class=\"['svp-structure__item', { active: isItemSelected(item) }]\"\n :title=\"labelFor(item)\"\n @click=\"onSelect(item)\"\n >\n <SvpIcon class=\"svp-structure__icon\" :icon=\"iconFor(item)\" :size=\"16\" />\n <span class=\"svp-structure__label\">{{ labelFor(item) }}</span>\n <button\n type=\"button\"\n class=\"svp-structure__delete\"\n title=\"删除元素\"\n @click.stop=\"onDelete(item)\"\n >\n <SvpIcon :icon=\"ICON_DELETE\" :size=\"14\" />\n </button>\n </li>\n </ul>\n </DragBox>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed } from 'vue-demi'\nimport DragBox from '../DragBox.vue'\nimport SvpIcon from '../SvpIcon.vue'\nimport { useDesigner } from '../../composables/useDesigner'\nimport { useI18n } from '../../i18n'\nimport { designerStore } from '../../core/stores'\nimport { ICON_DELETE, iconForElement } from '../../constants/icons'\n\nexport default defineComponent({\n name: 'PageStructurePanel',\n components: { DragBox, SvpIcon },\n setup() {\n const utils = useDesigner()\n const { t } = useI18n()\n\n const items = computed(() => {\n void designerStore.uiPulse\n void designerStore.history.index\n return utils.getPageElements()\n })\n\n const selectedIds = computed(() => {\n void designerStore.selection.count\n return designerStore.selection.ids.map(String)\n })\n\n function labelFor(item: any) {\n const opts = item?.options || {}\n const type = item?.printElementType\n return opts.title || opts.field || type?.title || type?.type || '元素'\n }\n\n function iconFor(item: any) {\n return iconForElement(item)\n }\n\n function isItemSelected(item: any) {\n const id = item?.id\n if (id == null) return false\n return selectedIds.value.includes(String(id))\n }\n\n function onSelect(item: any) {\n if (!item) return\n utils.selectPrintElement(item)\n }\n\n function onDelete(item: any) {\n if (!item) return\n utils.deletePrintElement(item)\n }\n\n return {\n t,\n items,\n selectedIds,\n ICON_DELETE,\n labelFor,\n iconFor,\n isItemSelected,\n onSelect,\n onDelete,\n }\n },\n})\n</script>\n\n<style scoped lang=\"scss\">\n.svp-structure {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.svp-structure__empty {\n padding: 6px 8px;\n font-size: 12px;\n color: var(--svp-fg-muted);\n}\n\n.svp-structure__item {\n display: flex;\n align-items: center;\n gap: 6px;\n min-height: 24px;\n padding: 2px 4px;\n border-radius: 0;\n cursor: pointer;\n font-size: 12px;\n color: var(--svp-fg);\n\n &:hover {\n background: var(--svp-bg-soft);\n }\n\n &.active {\n background: var(--svp-primary);\n color: var(--svp-primary-content);\n\n &:hover {\n background: var(--svp-primary);\n }\n }\n}\n\n.svp-structure__icon {\n flex: 0 0 18px;\n}\n\n.svp-structure__label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.svp-structure__delete {\n flex: 0 0 auto;\n width: 20px;\n height: 20px;\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n opacity: 0.75;\n\n &:hover {\n opacity: 1;\n color: #ef4444;\n }\n}\n</style>\n","<template>\n <DragBox\n :title=\"t('panel.pageHistory')\"\n storage-key=\"pageHistory.v6\"\n layout-key=\"pageHistory\"\n panel-key=\"pageHistory\"\n style-option-key=\"history\"\n body-padding=\"6px\"\n >\n <div class=\"svp-history__meta\">\n <span class=\"svp-history__counter\">\n {{ state.history.index }}/{{ state.history.total }}/{{ state.history.capacity }}\n </span>\n <button type=\"button\" class=\"svp-btn is-icon\" :title=\"t('tool.clear')\" @click=\"onClear\">\n <SvpIcon :icon=\"TOOL_ICONS.clear\" :size=\"10\" />\n </button>\n </div>\n <ul class=\"svp-list\">\n <li v-if=\"!steps.length\" class=\"svp-list__item is-disabled\">{{ t('panel.empty') }}</li>\n <li\n v-for=\"step in steps\"\n :key=\"step.index\"\n :class=\"['svp-list__item', { active: step.index === currentIdx }]\"\n @click=\"onJump(step.index)\"\n >\n <SvpIcon class=\"svp-list__item-icon\" :icon=\"stepIcon(step)\" :size=\"14\" />\n <span class=\"svp-list__item-label\">{{ stepLabel(step) }}</span>\n <button\n v-if=\"canRemove(step)\"\n type=\"button\"\n class=\"svp-list__item-delete\"\n :title=\"t('history.deleteRecord')\"\n @click.stop=\"onRemove(step.index)\"\n >\n <SvpIcon :icon=\"ICON_DELETE\" :size=\"12\" />\n </button>\n </li>\n </ul>\n </DragBox>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, onMounted } from 'vue-demi'\nimport DragBox from '../DragBox.vue'\nimport SvpIcon from '../SvpIcon.vue'\nimport { useDesigner } from '../../composables/useDesigner'\nimport { useI18n } from '../../i18n'\nimport { designerStore } from '../../core/stores'\nimport { TOOL_ICONS, ICON_DELETE, iconForHistoryLabel } from '../../constants/icons'\nimport { HISTORY_INITIAL } from '../../core/history-labels'\nimport type { HistoryStep } from '../../core/history'\n\nexport default defineComponent({\n name: 'PageHistoryPanel',\n components: { DragBox, SvpIcon },\n setup() {\n const utils = useDesigner()\n const { t } = useI18n()\n\n onMounted(() => {\n utils.setPageHistory({ refresh: () => utils.history.refreshFromTemplate() })\n utils.history.refreshFromTemplate()\n })\n\n const steps = computed(() => {\n void designerStore.history.index\n void designerStore.history.total\n return utils.history.steps\n })\n const currentIdx = computed(() => designerStore.history.index - 1)\n\n function stepLabel(step: HistoryStep): string {\n const keyMap: Record<string, string> = {\n 移动: 'history.move',\n 元素对齐: 'history.align',\n 参数修改: 'history.param',\n 初始: 'history.initial',\n 缩放: 'history.zoom',\n }\n const key = keyMap[step.label]\n return key ? t(key) : step.label || step.type\n }\n\n function stepIcon(step: HistoryStep): string {\n return iconForHistoryLabel(step.label, step.type)\n }\n\n function canRemove(step: HistoryStep): boolean {\n return step.index > 0 && step.label !== HISTORY_INITIAL\n }\n\n function onJump(idx: number) { utils.history.jump(idx) }\n function onClear() { utils.history.clear() }\n function onRemove(idx: number) { utils.history.remove(idx) }\n\n return {\n t,\n state: designerStore,\n steps,\n currentIdx,\n stepLabel,\n stepIcon,\n canRemove,\n onJump,\n onClear,\n onRemove,\n TOOL_ICONS,\n ICON_DELETE,\n }\n },\n})\n</script>\n\n<style scoped lang=\"scss\">\n.svp-history__meta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 4px;\n}\n\n.svp-history__counter {\n font-size: 11px;\n color: var(--svp-fg-muted);\n}\n\n.svp-list__item-icon {\n flex: 0 0 16px;\n}\n\n.svp-list__item-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.svp-list__item-delete {\n flex: 0 0 auto;\n width: 20px;\n height: 20px;\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n opacity: 0.75;\n\n &:hover {\n opacity: 1;\n color: #ef4444;\n }\n}\n</style>\n","<template>\n <DragBox\n :title=\"t('panel.properties')\"\n storage-key=\"properties.v6\"\n layout-key=\"properties\"\n panel-key=\"properties\"\n style-option-key=\"options\"\n body-padding=\"0\"\n >\n <div :id=\"SETTING_CONTAINER_ID\" class=\"svp-properties-host\" />\n </DragBox>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, watch, nextTick } from 'vue-demi'\nimport DragBox from '../DragBox.vue'\nimport { useDesigner } from '../../composables/useDesigner'\nimport { useI18n } from '../../i18n'\nimport { designerStore } from '../../core/stores'\nimport { openPanelSetting } from '../../core/hiprint-paper-list'\nimport { SETTING_CONTAINER_ID } from '../../constants'\n\nexport default defineComponent({\n name: 'PropertiesPanel',\n components: { DragBox },\n setup() {\n const { t } = useI18n()\n const utils = useDesigner()\n\n watch(\n () => designerStore.panels.properties,\n async (visible) => {\n if (!visible) return\n await nextTick()\n const host = document.getElementById(SETTING_CONTAINER_ID)\n if (host?.childElementCount) return\n\n const selected = designerStore.selection.elements\n if (selected.length === 1) {\n utils.selectPrintElement(selected[0] as any)\n } else {\n openPanelSetting()\n }\n },\n )\n\n return {\n t,\n SETTING_CONTAINER_ID,\n }\n },\n})\n</script>\n\n<style scoped>\n.svp-properties-host {\n height: 100%;\n min-width: 0;\n overflow-x: hidden;\n overflow-y: auto;\n}\n</style>\n","<template>\n <div :class=\"['svp-root', `theme-${activeTheme}`]\" :data-theme=\"activeTheme\">\n <template v-if=\"resolvedShow.showHeader\">\n <slot name=\"header\">\n <Header\n :title=\"headerTitle\"\n :logo-html=\"headerLogoHtml\"\n :header-new-ele=\"headerNewEle\"\n :header-ele-list=\"resolvedHeaderEleList\"\n @edit-template=\"handleEditTemplate\"\n @edit-print-data=\"handleEditPrintData\"\n @export-file=\"handleExportFile\"\n @import-file=\"handleImportFile\"\n @save=\"handleSave\"\n @preview=\"handlePreview\"\n />\n </slot>\n </template>\n\n <slot name=\"toolbar\">\n <Toolbar v-if=\"resolvedShow.showToolbar\" />\n </slot>\n\n <div ref=\"workspaceRef\" class=\"svp-workspace\">\n <div class=\"svp-ruler-corner\" />\n <div class=\"svp-ruler-x\"><canvas ref=\"rulerXRef\" style=\"width:100%;height:100%;display:block\" /></div>\n <div class=\"svp-ruler-y\"><canvas ref=\"rulerYRef\" style=\"width:100%;height:100%;display:block\" /></div>\n\n <div class=\"svp-canvas-scroller-wrap\">\n <div ref=\"scrollerRef\" class=\"svp-canvas-scroller\">\n <div :id=\"DESIGN_CONTAINER_ID\" class=\"svp-design-host\" />\n </div>\n </div>\n\n <slot name=\"draggableEls\">\n <DraggableElsPanel :catalogue=\"catalogue\" />\n </slot>\n <slot name=\"miniMap\">\n <MiniMapPanel />\n </slot>\n <slot name=\"pageStructure\">\n <PageStructurePanel />\n </slot>\n <slot name=\"pageHistory\">\n <PageHistoryPanel />\n </slot>\n <slot name=\"properties\">\n <PropertiesPanel />\n </slot>\n\n <slot name=\"other\" />\n </div>\n\n <footer v-if=\"resolvedShow.showFooter\" class=\"svp-footer\">\n <slot name=\"footer\">{{ footerText }}</slot>\n </footer>\n\n <Preview ref=\"previewRef\" />\n <JsonEditorModal ref=\"jsonEditorRef\" />\n <PrintDataEditorModal ref=\"printDataEditorRef\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineComponent,\n ref,\n computed,\n onMounted,\n onBeforeUnmount,\n watch,\n nextTick,\n provide,\n type PropType,\n} from 'vue-demi'\nimport DesignerUtils from '../core/designer-utils'\nimport { provideDesigner } from '../composables/useDesigner'\nimport { useRuler } from '../composables/useRuler'\nimport { setLocale } from '../i18n'\nimport { designerStore } from '../core/stores'\nimport { injectThemes } from '../core/theme'\nimport {\n applyStyleOption,\n DESIGNER_UI_INJECTION_KEY,\n resolveShowOption,\n} from '../core/designer-options'\nimport { headerElementsFromCatalogue } from '../constants/header-elements'\nimport {\n DESIGN_CONTAINER_ID,\n DEFAULT_ELEMENT_CATALOGUE,\n DEFAULT_PAPER_LIST,\n} from '../constants'\nimport type {\n DesignerProps,\n DesignedEventPayload,\n Events,\n HeaderEle,\n PaperType,\n PluginOptions,\n Provider,\n ProviderMap,\n ShowOption,\n StyleOption,\n ThemeType,\n} from '../types'\n\nimport Header from './Header.vue'\nimport Toolbar from './Toolbar.vue'\nimport Preview from './Preview.vue'\nimport JsonEditorModal from './JsonEditorModal.vue'\nimport PrintDataEditorModal from './PrintDataEditorModal.vue'\nimport { openJsonEditorModal, type JsonEditorModalHost } from '../core/json-editor-modal'\nimport type { PrintDataEditorModalHost } from '../core/print-data-editor-modal'\nimport DraggableElsPanel from './panels/DraggableElsPanel.vue'\nimport MiniMapPanel from './panels/MiniMapPanel.vue'\nimport PageStructurePanel from './panels/PageStructurePanel.vue'\nimport PageHistoryPanel from './panels/PageHistoryPanel.vue'\nimport PropertiesPanel from './panels/PropertiesPanel.vue'\n\nexport default defineComponent({\n name: 'SvpDesigner',\n components: {\n Header,\n Toolbar,\n Preview,\n JsonEditorModal,\n PrintDataEditorModal,\n DraggableElsPanel,\n MiniMapPanel,\n PageStructurePanel,\n PageHistoryPanel,\n PropertiesPanel,\n },\n props: {\n template: { type: [Object, Array, String] as PropType<DesignerProps['template']>, default: () => ({ panels: [] }) },\n printData: { type: Object as PropType<DesignerProps['printData']>, default: () => ({}) },\n providers: { type: Array as PropType<Provider[]>, default: () => [] },\n providerMap: { type: [Object, Array] as PropType<ProviderMap | ProviderMap[]>, default: () => [] },\n plugins: { type: Array as PropType<PluginOptions[]>, default: () => [] },\n autoConnect: { type: Boolean, default: false },\n config: { type: Object, default: () => ({}) },\n templateKey: { type: String, default: '' },\n title: { type: String, default: '' },\n headerLogoHtml: { type: String, default: '' },\n headerTitle: { type: String, default: '' },\n headerNewEle: { type: Boolean, default: false },\n headerEleList: { type: Array as PropType<HeaderEle[]>, default: () => [] },\n events: { type: Object as PropType<Events>, default: () => ({}) },\n styleOption: { type: Object as PropType<StyleOption>, default: () => ({}) },\n showOption: { type: Object as PropType<ShowOption>, default: () => ({}) },\n catalogue: { type: Array as PropType<typeof DEFAULT_ELEMENT_CATALOGUE>, default: () => DEFAULT_ELEMENT_CATALOGUE },\n showToolbar: { type: Boolean, default: true },\n theme: { type: [String, Object, Array] as PropType<string | ThemeType | ThemeType[]>, default: 'svpLight' },\n lang: { type: String, default: 'zh-CN' },\n tags: { type: Array as PropType<string[]>, default: () => [] },\n designOptions: { type: Object, default: () => ({}) },\n paperList: { type: Array as PropType<PaperType[]>, default: () => DEFAULT_PAPER_LIST },\n },\n emits: ['onDesigned', 'update:template', 'update:printData'],\n setup(props, { emit }) {\n const utils = DesignerUtils.getInstance()\n provideDesigner(utils)\n\n const workspaceRef = ref<HTMLElement | null>(null)\n const scrollerRef = ref<HTMLElement | null>(null)\n const rulerXRef = ref<HTMLCanvasElement | null>(null)\n const rulerYRef = ref<HTMLCanvasElement | null>(null)\n const previewRef = ref<any>(null)\n const jsonEditorRef = ref<{ open?: JsonEditorModalHost['open'] } | null>(null)\n const printDataEditorRef = ref<{ open?: PrintDataEditorModalHost['open'] } | null>(null)\n\n const resolvedShow = computed(() => resolveShowOption(props.showOption, props.showToolbar))\n const footerText = computed(() => (\n resolvedShow.value.showPower === false ? '' : 'hiprint设计器'\n ))\n\n const resolvedHeaderEleList = computed(() => {\n if (props.headerEleList.length) return props.headerEleList\n if (!props.headerNewEle) return []\n return headerElementsFromCatalogue(props.catalogue)\n })\n\n provide(DESIGNER_UI_INJECTION_KEY, {\n styleOption: computed(() => props.styleOption),\n showOption: resolvedShow,\n })\n\n const jsonEditorHost: JsonEditorModalHost = {\n open: (options) => {\n const host = jsonEditorRef.value\n if (typeof host?.open === 'function') return host.open(options)\n return openJsonEditorModal(options)\n },\n }\n\n const printDataEditorHost: PrintDataEditorModalHost = {\n open: (options) => {\n const host = printDataEditorRef.value\n if (typeof host?.open !== 'function') {\n return Promise.resolve(null)\n }\n return host.open(options)\n },\n }\n\n const activeTheme = computed(() => {\n if (typeof props.theme === 'string') return props.theme\n if (Array.isArray(props.theme)) return props.theme[0]?.theme || 'svpLight'\n return (props.theme as ThemeType)?.theme || 'svpLight'\n })\n\n const { redraw: redrawRuler } = useRuler({\n canvasX: () => rulerXRef.value,\n canvasY: () => rulerYRef.value,\n scrollerEl: () => scrollerRef.value,\n workspaceEl: () => workspaceRef.value,\n })\n utils.setRuler({ redraw: redrawRuler })\n\n let skipTemplateWatch = false\n\n function templateHasPanels(json: unknown): boolean {\n if (!json || typeof json !== 'object') return false\n const panels = (json as { panels?: unknown }).panels\n if (Array.isArray(panels) && panels.length > 0) return true\n return Array.isArray(json) && json.length > 0\n }\n\n function resolveInitialTemplate() {\n if (templateHasPanels(props.template)) return props.template\n const saved = utils.loadSaved?.()\n if (saved && templateHasPanels(saved)) return saved\n return props.template\n }\n\n function bootstrap() {\n utils.options.connect = props.autoConnect\n utils.options.config = props.config\n utils.options.providerMap = props.providerMap\n utils.options.templateKey = props.templateKey\n utils.options.printData = props.printData\n utils.options.designOptions = props.designOptions\n utils.options.paperList = props.paperList\n utils.options.events = props.events\n utils.onTemplateChange = (json) => {\n skipTemplateWatch = true\n emit('update:template', json)\n queueMicrotask(() => { skipTemplateWatch = false })\n }\n utils.onPrintDataChange = (data) => emit('update:printData', data)\n utils.setPrintData(props.printData)\n utils.setPlugins(props.plugins)\n utils.initProviders(props.providers)\n applyStyleOption(props.styleOption)\n }\n\n function buildDesigner() {\n utils.newDesigner(\n {\n template: resolveInitialTemplate(),\n history: true,\n dataMode: 1,\n },\n props.designOptions || {},\n )\n const payload: DesignedEventPayload = {\n hiprint: (utils as any).printTemplate ? (window as any).hiprint || null : null,\n designerUtils: utils,\n }\n emit('onDesigned', payload)\n utils.plugins.run('onDesigned', payload).catch(() => { /* ignore */ })\n utils.setPreview(previewRef.value)\n if (props.designOptions?.adaptToSize) {\n requestAnimationFrame(() => utils.adaptToSize())\n }\n }\n\n let resizeHandler: (() => void) | null = null\n\n onMounted(async () => {\n setLocale(props.lang)\n designerStore.lang = props.lang\n designerStore.theme = activeTheme.value\n injectThemes(props.theme)\n bootstrap()\n utils.setEditor(jsonEditorHost)\n utils.setPrintDataEditor(printDataEditorHost)\n await nextTick()\n buildDesigner()\n utils.shortcuts.mount()\n await nextTick()\n try { utils.buildByHtml() } catch { /* ignore */ }\n if (props.designOptions?.adaptToSize) {\n resizeHandler = () => utils.adaptToSize()\n window.addEventListener('resize', resizeHandler)\n }\n if (props.autoConnect) {\n utils.setConnect(true)\n }\n })\n\n onBeforeUnmount(() => {\n utils.shortcuts.unmount()\n if (resizeHandler) window.removeEventListener('resize', resizeHandler)\n })\n\n watch(() => props.template, () => {\n if (skipTemplateWatch) return\n utils.applyTemplateJson(props.template)\n }, { deep: true })\n\n watch(() => props.lang, (v) => {\n setLocale(v)\n designerStore.lang = v\n })\n watch(() => props.printData, (v) => utils.setPrintData(v), { deep: true })\n watch(activeTheme, (v) => { designerStore.theme = v })\n watch(() => props.theme, (v) => injectThemes(v), { deep: true })\n watch(() => props.events, (v) => { utils.options.events = v }, { deep: true })\n watch(() => props.styleOption, (v) => applyStyleOption(v), { deep: true })\n\n function handleSave() { utils.save() }\n function handleEditTemplate() { void utils.edit() }\n function handleEditPrintData() { void utils.editData() }\n function handleExportFile() { utils.export() }\n function handleImportFile() { utils.import() }\n function handlePreview() {\n previewRef.value?.open?.()\n }\n\n return {\n DESIGN_CONTAINER_ID,\n workspaceRef,\n scrollerRef,\n rulerXRef,\n rulerYRef,\n previewRef,\n jsonEditorRef,\n printDataEditorRef,\n activeTheme,\n resolvedShow,\n resolvedHeaderEleList,\n footerText,\n handleSave,\n handleEditTemplate,\n handleEditPrintData,\n handleExportFile,\n handleImportFile,\n handlePreview,\n }\n },\n})\n</script>\n","<template>\n <div class=\"svp-ruler\">\n <div class=\"svp-ruler-corner\" />\n <div class=\"svp-ruler-x\">\n <canvas ref=\"rulerXRef\" style=\"width:100%;height:100%;display:block\" />\n </div>\n <div class=\"svp-ruler-y\">\n <canvas ref=\"rulerYRef\" style=\"width:100%;height:100%;display:block\" />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, type PropType } from 'vue-demi'\nimport { useRuler } from '../composables/useRuler'\n\nexport default defineComponent({\n name: 'SvpRuler',\n props: {\n scroller: {\n type: Function as PropType<() => HTMLElement | null>,\n required: true,\n },\n },\n setup(props) {\n const rulerXRef = ref<HTMLCanvasElement | null>(null)\n const rulerYRef = ref<HTMLCanvasElement | null>(null)\n useRuler({\n canvasX: () => rulerXRef.value,\n canvasY: () => rulerYRef.value,\n scrollerEl: () => props.scroller(),\n })\n return { rulerXRef, rulerYRef }\n },\n})\n</script>\n","/**\n * Print-to-PDF plugin. Wires `hiprintTemplate.toPdf` so the `Preview` modal\n * can offer a \"Export PDF\" button. The user must supply jspdf + html2canvas\n * in their host project (peer dependencies), or override the implementation.\n */\nimport type { PluginFactory, PluginOptions } from '../../../src/types'\n\nexport interface PdfPluginOptions {\n filename?: string | ((data: any) => string)\n /**\n * Custom converter. If omitted we try `hiprintTemplate.toPdf` then jspdf.\n */\n convert?: (template: any, data: any) => Promise<void> | void\n}\n\nexport const pluginApiPdf: PluginFactory<PdfPluginOptions> = (opts = {}) => {\n const plugin: PluginOptions = {\n name: 'plugin-api-pdf',\n description: 'Exports the current template as a PDF document.',\n config: { ...opts },\n hooks: [\n {\n hook: 'ready',\n name: 'install-toPdf',\n priority: 100,\n run: (_utils: any) => {\n // Hook reserved for future extension.\n },\n },\n {\n hook: 'beforePrint2',\n name: 'export-pdf',\n priority: 100,\n run: async (tpl: any, utils: any, kind: string) => {\n if (kind !== 'pdf') return\n const data = utils?.printData ?? {}\n if (typeof opts.convert === 'function') {\n await opts.convert(tpl, data)\n return false\n }\n if (tpl && typeof tpl.toPdf === 'function') {\n const name = typeof opts.filename === 'function'\n ? opts.filename(data)\n : opts.filename ?? 'document'\n tpl.toPdf(data, name)\n return false\n }\n console.warn('[plugin-api-pdf] hiprintTemplate.toPdf not available; provide opts.convert')\n return undefined\n },\n },\n ],\n }\n return plugin\n}\n\nexport default pluginApiPdf\n","/**\n * Print-to-image plugin. Backs the Preview modal's \"Export image\" button.\n */\nimport type { PluginFactory, PluginOptions } from '../../../src/types'\n\nexport interface ImagePluginOptions {\n filename?: string | ((data: any) => string)\n type?: 'png' | 'jpeg'\n convert?: (template: any, data: any) => Promise<void> | void\n}\n\nexport const pluginApiImage: PluginFactory<ImagePluginOptions> = (opts = {}) => {\n const plugin: PluginOptions = {\n name: 'plugin-api-image',\n description: 'Exports the current template as PNG / JPEG.',\n config: { type: 'png', ...opts },\n hooks: [\n {\n hook: 'beforePrint2',\n name: 'export-image',\n priority: 100,\n run: async (tpl: any, utils: any, kind: string) => {\n if (kind !== 'image') return\n const data = utils?.printData ?? {}\n if (typeof opts.convert === 'function') {\n await opts.convert(tpl, data)\n return false\n }\n if (tpl && typeof tpl.toImage === 'function') {\n const name = typeof opts.filename === 'function'\n ? opts.filename(data)\n : opts.filename ?? 'image'\n tpl.toImage(data, name, opts.type ?? 'png')\n return false\n }\n console.warn('[plugin-api-image] hiprintTemplate.toImage not available; provide opts.convert')\n return undefined\n },\n },\n ],\n }\n return plugin\n}\n\nexport default pluginApiImage\n","/**\n * Code editor plugin. Pops up a textarea (Monaco is opt-in via `editor`)\n * whenever a property exposes a `function` editor (e.g. `formatter`).\n *\n * Plugin authors can swap the editor by passing a custom `editor` callback\n * that receives the current source and resolves with the next source.\n */\nimport type { PluginFactory, PluginOptions } from '../../../src/types'\n\nexport interface CodeEditPluginOptions {\n editor?: (source: string, ctx: { name: string }) => Promise<string | null>\n}\n\nfunction defaultEditor(source: string, ctx: { name: string }): Promise<string | null> {\n return new Promise((resolve) => {\n if (typeof window === 'undefined') return resolve(null)\n const mask = document.createElement('div')\n mask.className = 'svp-modal-mask'\n const modal = document.createElement('div')\n modal.className = 'svp-modal'\n modal.style.width = 'min(720px, 90vw)'\n modal.innerHTML = `\n <div class=\"svp-modal__header\">编辑 ${ctx.name}</div>\n <div class=\"svp-modal__body\" style=\"padding:0\">\n <textarea style=\"width:100%;height:50vh;border:0;padding:12px;font-family:Menlo,Consolas,monospace;font-size:12px;outline:none\"></textarea>\n </div>\n <div class=\"svp-modal__footer\">\n <button class=\"svp-btn\" data-act=\"cancel\">取消</button>\n <button class=\"svp-btn is-primary\" data-act=\"ok\">确定</button>\n </div>\n `\n const ta = modal.querySelector('textarea') as HTMLTextAreaElement\n ta.value = source\n function close(value: string | null) {\n document.body.removeChild(mask)\n resolve(value)\n }\n modal.addEventListener('click', (e) => {\n const t = e.target as HTMLElement\n if (t.dataset.act === 'cancel') close(null)\n else if (t.dataset.act === 'ok') close(ta.value)\n })\n mask.addEventListener('click', (e) => { if (e.target === mask) close(null) })\n mask.appendChild(modal)\n document.body.appendChild(mask)\n ta.focus()\n })\n}\n\nexport const pluginViewCodeEdit: PluginFactory<CodeEditPluginOptions> = (opts = {}) => {\n const editor = opts.editor ?? defaultEditor\n const plugin: PluginOptions = {\n name: 'plugin-view-code-edit',\n description: 'Provides a small in-browser editor for `function` options.',\n config: { ...opts } as Record<string, unknown>,\n hooks: [\n {\n hook: 'createPrintElement',\n name: 'editor-create-print-element',\n priority: 100,\n run: async (option: any, _printElement: any, _ev: any) => {\n if (!option || typeof option !== 'object') return\n if (option.type !== 'function' && option.editor !== 'code') return\n const next = await editor(String(option.value ?? ''), { name: option.name ?? 'function' })\n if (next == null) return\n option.value = next\n option?.onChange?.(next)\n },\n },\n ],\n }\n return plugin\n}\n\nexport default pluginViewCodeEdit\n","/**\n * vue3-print-designer — public entry.\n *\n * The package ships two builds (`dist/vue2/` and `dist/vue3/`); both compile\n * from this same source file thanks to `vue-demi`.\n */\nimport './core/register-icons'\nimport './styles/app.scss'\n\n// ---------------------------------------------------------------------------\n// Components\n// ---------------------------------------------------------------------------\nexport { default as Designer } from './components/Designer.vue'\nexport { default as Header } from './components/Header.vue'\nexport { default as Toolbar } from './components/Toolbar.vue'\nexport { default as Preview } from './components/Preview.vue'\nexport { default as Ruler } from './components/Ruler.vue'\nexport { default as DragBox } from './components/DragBox.vue'\nexport { default as SvpIcon } from './components/SvpIcon.vue'\n\nexport { default as DraggableElsPanel } from './components/panels/DraggableElsPanel.vue'\nexport { default as MiniMapPanel } from './components/panels/MiniMapPanel.vue'\nexport { default as PageStructurePanel } from './components/panels/PageStructurePanel.vue'\nexport { default as PageHistoryPanel } from './components/panels/PageHistoryPanel.vue'\nexport { default as PropertiesPanel } from './components/panels/PropertiesPanel.vue'\n\n// ---------------------------------------------------------------------------\n// Core APIs\n// ---------------------------------------------------------------------------\nexport { default as DesignerUtils } from './core/designer-utils'\nexport { PluginManager } from './core/plugins'\nexport { HistoryController } from './core/history'\nexport {\n HISTORY_MOVE,\n HISTORY_ALIGN,\n HISTORY_PARAM,\n HISTORY_INITIAL,\n normalizeHistoryLabel,\n} from './core/history-labels'\nexport { ShortcutsController } from './core/shortcuts'\nexport {\n hiprint,\n initHiprint,\n buildByHtml,\n defaultElementTypeProvider,\n} from './core/hiprint-bridge'\nexport { SvpElementTypeProvider } from './core/svp-element-provider'\nexport {\n applyStyleOption,\n resolveShowOption,\n DESIGNER_UI_INJECTION_KEY,\n} from './core/designer-options'\nexport {\n extractTemplateFields,\n buildPrintDataFromForm,\n createPrintDataFormState,\n type TemplateFieldSchema,\n type BasicFieldDef,\n type TableFieldDef,\n} from './core/template-fields'\nexport { headerElementsFromCatalogue } from './constants/header-elements'\nexport {\n DEFAULT_TABLE_COLUMNS,\n DEFAULT_TABLE_ELEMENT_TYPE,\n DEFAULT_TABLE_FIELDS,\n} from './constants/default-table-element'\nexport {\n designerStore,\n setZoom,\n setPanelVisibility,\n togglePanel,\n toggleAllPanels,\n setSelection,\n} from './core/stores'\nexport { readJSON, writeJSON, removeKey } from './core/storage'\nexport { getPrintClient, PrintClient } from './core/print-client'\nexport { batchPrint } from './core/batch-print'\nexport type { BatchPrintOptions } from './core/batch-print'\nexport type { Unsubscribe } from './core/print-client'\nexport { autoConnect, disAutoConnect } from './core/hiprint-bridge'\n\n// ---------------------------------------------------------------------------\n// Composables\n// ---------------------------------------------------------------------------\nexport { useDesigner, provideDesigner, DESIGNER_INJECTION_KEY } from './composables/useDesigner'\nexport { useDesignerUi } from './composables/useDesignerUi'\nexport { useDragBox } from './composables/useDragBox'\nexport { useRuler } from './composables/useRuler'\n\n// ---------------------------------------------------------------------------\n// i18n\n// ---------------------------------------------------------------------------\nexport { useI18n, setLocale, getLocaleList } from './i18n'\nexport { default as zhCN } from './i18n/zh-CN'\nexport { default as enUS } from './i18n/en-US'\n\n// ---------------------------------------------------------------------------\n// Constants & types\n// ---------------------------------------------------------------------------\nexport * from './constants'\nexport * from './constants/icons'\nexport * from './types'\n\n// ---------------------------------------------------------------------------\n// Bundled plugin factories (also available as separate sub-packages)\n// ---------------------------------------------------------------------------\nexport { pluginApiPdf } from '../plugins/plugin-api-pdf/src'\nexport { pluginApiImage } from '../plugins/plugin-api-image/src'\nexport { pluginViewCodeEdit } from '../plugins/plugin-view-code-edit/src'\n\n/** Convenience Vue plugin: `app.use(Vue3PrintDesigner)`. */\nimport type { App as Vue3App } from 'vue-demi'\nimport { Designer, Header, Toolbar, Preview, DragBox } from './index'\n\nexport default {\n install(app: Vue3App) {\n app.component('SvpDesigner', Designer)\n app.component('SvpHeader', Header)\n app.component('SvpToolbar', Toolbar)\n app.component('SvpPreview', Preview)\n app.component('SvpDragBox', DragBox)\n },\n}\n"],"names":["defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultExtendedIconProps","mergeIconTransformations","mergeIconData","getIconsTree","data","internalGetIconData","parseIconSet","callback","matchIconName","stringToIcon","validateIconName","optionalPropertyDefaults","checkOptionalProps","quicklyValidateIconSet","dataStorage","newStorage","getStorage","addIconSet","storage","addIconToStorage","simpleNames","allowSimpleNames","getIconData","addIcon","addCollection","defaultIconSizeCustomisations","defaultIconCustomisations","unitsSplit","unitsTest","calculateSize","isUnsetKeyword","iconToSVG","regex","randomPrefix","counter","replaceIDs","browserStorageConfig","browserStorageEmptyItems","browserStorageStatus","setBrowserStorageStatus","browserCacheVersion","browserCachePrefix","browserCacheCountKey","browserCacheVersionKey","browserStorageHour","browserStorageCacheExpiration","getStoredItem","setStoredItem","removeStoredItem","setBrowserStorageItemsCount","getBrowserStorageItemsCount","_window","getBrowserStorage","iterateBrowserStorage","index","initBrowserStorage","setAPIModule","getAPIModule","createAPIConfig","configStorage","fallBackAPISources","fallBackAPI","addAPIProvider","getAPIConfig","detectFetch","fetchModule","calculateMaxLength","shouldAbort","prepare","getPath","send","fetchAPIModule","sortIcons","removeCallback","updateCallbacks","idCounter","storeCallback","listToIcons","defaultConfig","sendQuery","initRedundancy","emptyCallback$1","redundancyCache","getRedundancyCache","sendAPIQuery","updateLastModified","storeInBrowserStorage","emptyCallback","loadedNewIcons","loadNewIcons","loadIcons","mergeCustomisations","defaultExtendedIconCustomisations","node","observer","rotateFromString","separator","flipFromString","nodes","getIcon","render","alignCenter","alignCenterVertical","alignEndVertical","alignJustify","alignLeft","alignRight","alignStartVertical","arrowDown","arrowDownToLine","arrowUp","arrowUpToLine","barcode","bold","boxes","chevronDown","circle","clipboardPaste","code2","copy","copyPlus","eraser","eye","flipHorizontal","flipVertical","history","image","layoutGrid","listTree","lock","minus","panelLeft","plus","qrCode","redo2","rotateCw","save","scissors","scanEye","separatorHorizontal","separatorVertical","slidersHorizontal","square","table","trash2","typeIcon","undo2","unlock","x","zoomIn","zoomOut","move","pencilLine","alignHorizontalDistributeCenter","_a","_b","_c","_d","defaultElementTypeProvider","plugin","combo","storeSetZoom","_openBlock","_createElementBlock","_normalizeClass","_normalizeStyle","_hoisted_1","_createVNode","_hoisted_2","_hoisted_5","_hoisted_13","_createElementVNode","_renderSlot","_hoisted_3","_createCommentVNode","_hoisted_4","_toDisplayString","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_Fragment","_renderList","_createBlock","_hoisted_12","_withDirectives","_createTextVNode","_hoisted_14","_","safeStringify","_vModelText","selector","_vShow","_withModifiers"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,84]}