@nice2dev/ui-graphics 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/CHANGELOG.md +147 -1
  2. package/dist/cjs/animation/AnimatedPerson.js +2 -2
  3. package/dist/cjs/animation/AnimatedPerson.js.map +1 -1
  4. package/dist/cjs/animation/AnimationEditor.js +11 -6
  5. package/dist/cjs/animation/AnimationEditor.js.map +1 -1
  6. package/dist/cjs/animation/Audience.js +4 -3
  7. package/dist/cjs/animation/Audience.js.map +1 -1
  8. package/dist/cjs/animation/BodyRenderer.js +5 -2
  9. package/dist/cjs/animation/BodyRenderer.js.map +1 -1
  10. package/dist/cjs/animation/rig/RigPlayer.js +2 -2
  11. package/dist/cjs/animation/rig/RigPlayer.js.map +1 -1
  12. package/dist/cjs/animation/rig/RiggedBody.js +2 -2
  13. package/dist/cjs/animation/rig/RiggedBody.js.map +1 -1
  14. package/dist/cjs/animation/shapes/heads.js +4 -1
  15. package/dist/cjs/animation/shapes/heads.js.map +1 -1
  16. package/dist/cjs/core/LocalUI.js +1 -1
  17. package/dist/cjs/core/NiceBrushEngine.js +446 -0
  18. package/dist/cjs/core/NiceBrushEngine.js.map +1 -0
  19. package/dist/cjs/core/yjsCollaboration.js +292 -0
  20. package/dist/cjs/core/yjsCollaboration.js.map +1 -0
  21. package/dist/cjs/font/NiceFontEditor.js +89 -85
  22. package/dist/cjs/font/NiceFontEditor.js.map +1 -1
  23. package/dist/cjs/font/fontFormatUtils.js +468 -0
  24. package/dist/cjs/font/fontFormatUtils.js.map +1 -0
  25. package/dist/cjs/game/GameAsset2dEditor.js +38 -24
  26. package/dist/cjs/game/GameAsset2dEditor.js.map +1 -1
  27. package/dist/cjs/icon/NiceIconEditor.js +218 -133
  28. package/dist/cjs/icon/NiceIconEditor.js.map +1 -1
  29. package/dist/cjs/index.js +83 -1
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/nice2dev-ui-graphics.css +1 -1
  32. package/dist/cjs/photo/NiceAITools.js +446 -0
  33. package/dist/cjs/photo/NiceAITools.js.map +1 -0
  34. package/dist/cjs/photo/PhotoEditor.js +2 -2
  35. package/dist/cjs/photo/PhotoEditor.js.map +1 -1
  36. package/dist/cjs/pixel/PixelEditor.js +16 -5
  37. package/dist/cjs/pixel/PixelEditor.js.map +1 -1
  38. package/dist/cjs/pixel/PixelEditor.module.css.js +1 -1
  39. package/dist/cjs/pixel/PixelEditorMenuBar.js +2 -1
  40. package/dist/cjs/pixel/PixelEditorMenuBar.js.map +1 -1
  41. package/dist/cjs/pixel/PixelEditorRightPanel.js +3 -2
  42. package/dist/cjs/pixel/PixelEditorRightPanel.js.map +1 -1
  43. package/dist/cjs/pixel/PixelEditorTimeline.js +2 -1
  44. package/dist/cjs/pixel/PixelEditorTimeline.js.map +1 -1
  45. package/dist/cjs/pixel/PixelEditorToolbar.js +2 -1
  46. package/dist/cjs/pixel/PixelEditorToolbar.js.map +1 -1
  47. package/dist/cjs/pixel/SpriteGeneratorPanel.js +224 -0
  48. package/dist/cjs/pixel/SpriteGeneratorPanel.js.map +1 -0
  49. package/dist/cjs/pixel/animalGeneratorPresets.js +654 -0
  50. package/dist/cjs/pixel/animalGeneratorPresets.js.map +1 -0
  51. package/dist/cjs/pixel/buildingGeneratorPresets.js +573 -0
  52. package/dist/cjs/pixel/buildingGeneratorPresets.js.map +1 -0
  53. package/dist/cjs/pixel/characterGeneratorPresets.js +563 -0
  54. package/dist/cjs/pixel/characterGeneratorPresets.js.map +1 -0
  55. package/dist/cjs/pixel/spriteGeneratorCore.js +297 -0
  56. package/dist/cjs/pixel/spriteGeneratorCore.js.map +1 -0
  57. package/dist/cjs/pixel/usePixelEditor.js +16 -0
  58. package/dist/cjs/pixel/usePixelEditor.js.map +1 -1
  59. package/dist/cjs/texture/Nice3DTexturePainter.js +123 -79
  60. package/dist/cjs/texture/Nice3DTexturePainter.js.map +1 -1
  61. package/dist/cjs/ui/NiceUIDesigner.js +175 -62
  62. package/dist/cjs/ui/NiceUIDesigner.js.map +1 -1
  63. package/dist/cjs/ui/dist/index.js +50089 -0
  64. package/dist/cjs/ui/dist/index.js.map +1 -0
  65. package/dist/cjs/vector/NiceSvgToCode.js +427 -0
  66. package/dist/cjs/vector/NiceSvgToCode.js.map +1 -0
  67. package/dist/cjs/vector/VectorEditor.js +7 -3
  68. package/dist/cjs/vector/VectorEditor.js.map +1 -1
  69. package/dist/cjs/vector/VectorEditor.module.css.js +1 -1
  70. package/dist/cjs/vector/VectorEditorMenuBar.js +5 -1
  71. package/dist/cjs/vector/VectorEditorMenuBar.js.map +1 -1
  72. package/dist/cjs/vector/VectorEditorRightPanel.js +23 -19
  73. package/dist/cjs/vector/VectorEditorRightPanel.js.map +1 -1
  74. package/dist/esm/animation/AnimatedPerson.js +2 -2
  75. package/dist/esm/animation/AnimatedPerson.js.map +1 -1
  76. package/dist/esm/animation/AnimationEditor.js +12 -8
  77. package/dist/esm/animation/AnimationEditor.js.map +1 -1
  78. package/dist/esm/animation/Audience.js +5 -4
  79. package/dist/esm/animation/Audience.js.map +1 -1
  80. package/dist/esm/animation/BodyRenderer.js +4 -2
  81. package/dist/esm/animation/BodyRenderer.js.map +1 -1
  82. package/dist/esm/animation/rig/RigPlayer.js +4 -4
  83. package/dist/esm/animation/rig/RigPlayer.js.map +1 -1
  84. package/dist/esm/animation/rig/RiggedBody.js +2 -2
  85. package/dist/esm/animation/rig/RiggedBody.js.map +1 -1
  86. package/dist/esm/animation/shapes/heads.js +4 -2
  87. package/dist/esm/animation/shapes/heads.js.map +1 -1
  88. package/dist/esm/core/LocalUI.js +4 -4
  89. package/dist/esm/core/NiceBrushEngine.js +442 -0
  90. package/dist/esm/core/NiceBrushEngine.js.map +1 -0
  91. package/dist/esm/core/yjsCollaboration.js +283 -0
  92. package/dist/esm/core/yjsCollaboration.js.map +1 -0
  93. package/dist/esm/font/NiceFontEditor.js +89 -85
  94. package/dist/esm/font/NiceFontEditor.js.map +1 -1
  95. package/dist/esm/font/fontFormatUtils.js +461 -0
  96. package/dist/esm/font/fontFormatUtils.js.map +1 -0
  97. package/dist/esm/game/GameAsset2dEditor.js +38 -25
  98. package/dist/esm/game/GameAsset2dEditor.js.map +1 -1
  99. package/dist/esm/icon/NiceIconEditor.js +218 -133
  100. package/dist/esm/icon/NiceIconEditor.js.map +1 -1
  101. package/dist/esm/index.js +21 -11
  102. package/dist/esm/index.js.map +1 -1
  103. package/dist/esm/nice2dev-ui-graphics.css +1 -1
  104. package/dist/esm/photo/NiceAITools.js +439 -0
  105. package/dist/esm/photo/NiceAITools.js.map +1 -0
  106. package/dist/esm/photo/PhotoEditor.js +2 -2
  107. package/dist/esm/photo/PhotoEditor.js.map +1 -1
  108. package/dist/esm/pixel/PixelEditor.js +16 -6
  109. package/dist/esm/pixel/PixelEditor.js.map +1 -1
  110. package/dist/esm/pixel/PixelEditor.module.css.js +1 -1
  111. package/dist/esm/pixel/PixelEditorMenuBar.js +2 -1
  112. package/dist/esm/pixel/PixelEditorMenuBar.js.map +1 -1
  113. package/dist/esm/pixel/PixelEditorRightPanel.js +3 -2
  114. package/dist/esm/pixel/PixelEditorRightPanel.js.map +1 -1
  115. package/dist/esm/pixel/PixelEditorTimeline.js +2 -1
  116. package/dist/esm/pixel/PixelEditorTimeline.js.map +1 -1
  117. package/dist/esm/pixel/PixelEditorToolbar.js +2 -1
  118. package/dist/esm/pixel/PixelEditorToolbar.js.map +1 -1
  119. package/dist/esm/pixel/SpriteGeneratorPanel.js +222 -0
  120. package/dist/esm/pixel/SpriteGeneratorPanel.js.map +1 -0
  121. package/dist/esm/pixel/animalGeneratorPresets.js +647 -0
  122. package/dist/esm/pixel/animalGeneratorPresets.js.map +1 -0
  123. package/dist/esm/pixel/buildingGeneratorPresets.js +566 -0
  124. package/dist/esm/pixel/buildingGeneratorPresets.js.map +1 -0
  125. package/dist/esm/pixel/characterGeneratorPresets.js +556 -0
  126. package/dist/esm/pixel/characterGeneratorPresets.js.map +1 -0
  127. package/dist/esm/pixel/spriteGeneratorCore.js +279 -0
  128. package/dist/esm/pixel/spriteGeneratorCore.js.map +1 -0
  129. package/dist/esm/pixel/usePixelEditor.js +16 -0
  130. package/dist/esm/pixel/usePixelEditor.js.map +1 -1
  131. package/dist/esm/texture/Nice3DTexturePainter.js +123 -79
  132. package/dist/esm/texture/Nice3DTexturePainter.js.map +1 -1
  133. package/dist/esm/ui/NiceUIDesigner.js +175 -62
  134. package/dist/esm/ui/NiceUIDesigner.js.map +1 -1
  135. package/dist/esm/ui/dist/index.js +49686 -0
  136. package/dist/esm/ui/dist/index.js.map +1 -0
  137. package/dist/esm/vector/NiceSvgToCode.js +423 -0
  138. package/dist/esm/vector/NiceSvgToCode.js.map +1 -0
  139. package/dist/esm/vector/VectorEditor.js +7 -4
  140. package/dist/esm/vector/VectorEditor.js.map +1 -1
  141. package/dist/esm/vector/VectorEditor.module.css.js +1 -1
  142. package/dist/esm/vector/VectorEditorMenuBar.js +5 -1
  143. package/dist/esm/vector/VectorEditorMenuBar.js.map +1 -1
  144. package/dist/esm/vector/VectorEditorRightPanel.js +23 -19
  145. package/dist/esm/vector/VectorEditorRightPanel.js.map +1 -1
  146. package/package.json +3 -4
@@ -0,0 +1,427 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+
6
+ /* ── Default config ── */
7
+ const DEFAULT_CONFIG = {
8
+ framework: 'react',
9
+ componentName: 'MyIcon',
10
+ extractColors: true,
11
+ useClassNames: false,
12
+ typescript: true,
13
+ optimize: true,
14
+ sizeProps: true,
15
+ useCurrentColor: false,
16
+ memo: true,
17
+ defaultExport: true,
18
+ ariaLabel: true,
19
+ };
20
+ /* ── SVG Parser (simple regex-based for browser) ── */
21
+ const METADATA_TAGS = new Set(['metadata', 'title', 'desc', 'defs', 'comment']);
22
+ const REMOVABLE_ATTRS = new Set([
23
+ 'xmlns:xlink', 'xml:space', 'xmlns:svg', 'version',
24
+ 'xmlns:dc', 'xmlns:cc', 'xmlns:rdf', 'xmlns:sodipodi', 'xmlns:inkscape',
25
+ 'sodipodi:docname', 'inkscape:version', 'data-name',
26
+ ]);
27
+ function parseSvgString(svg) {
28
+ // Use DOMParser for safe parsing
29
+ if (typeof DOMParser === 'undefined')
30
+ return null;
31
+ const parser = new DOMParser();
32
+ const doc = parser.parseFromString(svg, 'image/svg+xml');
33
+ const error = doc.querySelector('parsererror');
34
+ if (error)
35
+ return null;
36
+ function elementToNode(el) {
37
+ const attrs = {};
38
+ for (const attr of Array.from(el.attributes)) {
39
+ attrs[attr.name] = attr.value;
40
+ }
41
+ const children = [];
42
+ for (const child of Array.from(el.children)) {
43
+ children.push(elementToNode(child));
44
+ }
45
+ const text = el.childNodes.length === 1 && el.childNodes[0].nodeType === 3
46
+ ? el.childNodes[0].textContent || undefined
47
+ : undefined;
48
+ return { tag: el.tagName.toLowerCase(), attrs, children, text };
49
+ }
50
+ const svgEl = doc.querySelector('svg');
51
+ if (!svgEl)
52
+ return null;
53
+ return elementToNode(svgEl);
54
+ }
55
+ function optimizeSvgNode(node) {
56
+ // Remove metadata tags
57
+ const filteredChildren = node.children
58
+ .filter((c) => !METADATA_TAGS.has(c.tag))
59
+ .map(optimizeSvgNode);
60
+ // Remove removable attrs
61
+ const cleanAttrs = {};
62
+ for (const [key, val] of Object.entries(node.attrs)) {
63
+ if (!REMOVABLE_ATTRS.has(key) && !key.startsWith('inkscape:') && !key.startsWith('sodipodi:')) {
64
+ cleanAttrs[key] = val;
65
+ }
66
+ }
67
+ return { tag: node.tag, attrs: cleanAttrs, children: filteredChildren, text: node.text };
68
+ }
69
+ function extractColorsFromNode(node, colors) {
70
+ for (const val of Object.values(node.attrs)) {
71
+ if (/^#[0-9a-fA-F]{3,8}$/.test(val))
72
+ colors.add(val.toLowerCase());
73
+ if (/^rgb\(/.test(val))
74
+ colors.add(val);
75
+ }
76
+ for (const style of (node.attrs.style || '').split(';')) {
77
+ const match = style.match(/(fill|stroke|color)\s*:\s*(#[0-9a-fA-F]{3,8}|rgb\([^)]+\))/i);
78
+ if (match)
79
+ colors.add(match[2].toLowerCase());
80
+ }
81
+ for (const child of node.children)
82
+ extractColorsFromNode(child, colors);
83
+ }
84
+ function replaceColorsInNode(node, replacement) {
85
+ const newAttrs = {};
86
+ for (const [key, val] of Object.entries(node.attrs)) {
87
+ if (/^#[0-9a-fA-F]{3,8}$/.test(val) && (key === 'fill' || key === 'stroke')) {
88
+ newAttrs[key] = replacement;
89
+ }
90
+ else {
91
+ newAttrs[key] = val;
92
+ }
93
+ }
94
+ return {
95
+ tag: node.tag,
96
+ attrs: newAttrs,
97
+ children: node.children.map((c) => replaceColorsInNode(c, replacement)),
98
+ text: node.text,
99
+ };
100
+ }
101
+ /* ── SVG attribute → JSX attribute mapping ── */
102
+ const SVG_TO_JSX = {
103
+ 'class': 'className',
104
+ 'clip-path': 'clipPath',
105
+ 'clip-rule': 'clipRule',
106
+ 'fill-opacity': 'fillOpacity',
107
+ 'fill-rule': 'fillRule',
108
+ 'font-family': 'fontFamily',
109
+ 'font-size': 'fontSize',
110
+ 'font-weight': 'fontWeight',
111
+ 'letter-spacing': 'letterSpacing',
112
+ 'marker-end': 'markerEnd',
113
+ 'marker-mid': 'markerMid',
114
+ 'marker-start': 'markerStart',
115
+ 'stop-color': 'stopColor',
116
+ 'stop-opacity': 'stopOpacity',
117
+ 'stroke-dasharray': 'strokeDasharray',
118
+ 'stroke-dashoffset': 'strokeDashoffset',
119
+ 'stroke-linecap': 'strokeLinecap',
120
+ 'stroke-linejoin': 'strokeLinejoin',
121
+ 'stroke-miterlimit': 'strokeMiterlimit',
122
+ 'stroke-opacity': 'strokeOpacity',
123
+ 'stroke-width': 'strokeWidth',
124
+ 'text-anchor': 'textAnchor',
125
+ 'text-decoration': 'textDecoration',
126
+ 'transform-origin': 'transformOrigin',
127
+ 'xlink:href': 'xlinkHref',
128
+ 'xml:lang': 'xmlLang',
129
+ 'xml:space': 'xmlSpace',
130
+ 'xmlns:xlink': '',
131
+ 'xmlns': '',
132
+ };
133
+ function attrToJsx(name) {
134
+ if (name in SVG_TO_JSX)
135
+ return SVG_TO_JSX[name];
136
+ // camelCase any remaining kebab-case
137
+ return name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
138
+ }
139
+ /* ── Code Generators ── */
140
+ function nodeToJsx(node, indent = 2) {
141
+ const pad = ' '.repeat(indent);
142
+ const attrs = Object.entries(node.attrs)
143
+ .map(([k, v]) => {
144
+ const jsxKey = attrToJsx(k);
145
+ if (!jsxKey)
146
+ return '';
147
+ return `${jsxKey}="${v}"`;
148
+ })
149
+ .filter(Boolean)
150
+ .join(' ');
151
+ if (node.children.length === 0 && !node.text) {
152
+ return `${pad}<${node.tag}${attrs ? ' ' + attrs : ''} />`;
153
+ }
154
+ const inner = node.text
155
+ ? node.text
156
+ : '\n' + node.children.map((c) => nodeToJsx(c, indent + 2)).join('\n') + '\n' + pad;
157
+ return `${pad}<${node.tag}${attrs ? ' ' + attrs : ''}>${inner}</${node.tag}>`;
158
+ }
159
+ function nodeToHtml(node, indent = 2) {
160
+ const pad = ' '.repeat(indent);
161
+ const attrs = Object.entries(node.attrs)
162
+ .map(([k, v]) => `${k}="${v}"`)
163
+ .filter(Boolean)
164
+ .join(' ');
165
+ if (node.children.length === 0 && !node.text) {
166
+ return `${pad}<${node.tag}${attrs ? ' ' + attrs : ''} />`;
167
+ }
168
+ const inner = node.text
169
+ ? node.text
170
+ : '\n' + node.children.map((c) => nodeToHtml(c, indent + 2)).join('\n') + '\n' + pad;
171
+ return `${pad}<${node.tag}${attrs ? ' ' + attrs : ''}>${inner}</${node.tag}>`;
172
+ }
173
+ function generateReact(node, config) {
174
+ const { componentName, typescript, sizeProps, memo, defaultExport, ariaLabel } = config;
175
+ // Build props interface
176
+ const propsLines = [];
177
+ if (sizeProps) {
178
+ propsLines.push(' width?: number | string;');
179
+ propsLines.push(' height?: number | string;');
180
+ }
181
+ if (ariaLabel)
182
+ propsLines.push(" 'aria-label'?: string;");
183
+ propsLines.push(' className?: string;');
184
+ propsLines.push(' style?: React.CSSProperties;');
185
+ // Modify SVG node for props
186
+ const svgNode = { ...node, attrs: { ...node.attrs } };
187
+ if (sizeProps) {
188
+ svgNode.attrs.width = '{width}';
189
+ svgNode.attrs.height = '{height}';
190
+ }
191
+ const jsxBody = nodeToJsx({ ...svgNode, tag: 'svg' }, 4);
192
+ const lines = [];
193
+ lines.push("import React from 'react';");
194
+ lines.push('');
195
+ if (typescript) {
196
+ lines.push(`interface ${componentName}Props {`);
197
+ lines.push(...propsLines);
198
+ lines.push('}');
199
+ lines.push('');
200
+ }
201
+ const propsType = typescript ? `${componentName}Props` : 'any';
202
+ const propsDestructure = [
203
+ sizeProps ? `width = ${JSON.stringify(node.attrs.width || '24')}` : '',
204
+ sizeProps ? `height = ${JSON.stringify(node.attrs.height || '24')}` : '',
205
+ ariaLabel ? "'aria-label': ariaLabel" : '',
206
+ 'className',
207
+ 'style',
208
+ ].filter(Boolean).join(', ');
209
+ if (memo) {
210
+ lines.push(`const ${componentName} = React.memo<${propsType}>(({ ${propsDestructure} }) => (`);
211
+ }
212
+ else {
213
+ lines.push(`const ${componentName}: React.FC<${propsType}> = ({ ${propsDestructure} }) => (`);
214
+ }
215
+ lines.push(jsxBody);
216
+ if (memo) {
217
+ lines.push('));');
218
+ }
219
+ else {
220
+ lines.push(');');
221
+ }
222
+ lines.push('');
223
+ lines.push(`${componentName}.displayName = '${componentName}';`);
224
+ lines.push('');
225
+ if (defaultExport) {
226
+ lines.push(`export default ${componentName};`);
227
+ }
228
+ else {
229
+ lines.push(`export { ${componentName} };`);
230
+ }
231
+ return lines.join('\n');
232
+ }
233
+ function generateVue(node, config) {
234
+ const { componentName, sizeProps, typescript } = config;
235
+ const svgHtml = nodeToHtml(node, 2);
236
+ const lines = [];
237
+ lines.push('<template>');
238
+ lines.push(svgHtml);
239
+ lines.push('</template>');
240
+ lines.push('');
241
+ lines.push(`<script${typescript ? ' lang="ts"' : ''} setup>`);
242
+ if (sizeProps) {
243
+ if (typescript) {
244
+ lines.push('interface Props {');
245
+ lines.push(" width?: string | number;");
246
+ lines.push(" height?: string | number;");
247
+ lines.push('}');
248
+ lines.push('');
249
+ lines.push("const props = withDefaults(defineProps<Props>(), {");
250
+ lines.push(` width: '${node.attrs.width || '24'}',`);
251
+ lines.push(` height: '${node.attrs.height || '24'}',`);
252
+ lines.push('});');
253
+ }
254
+ else {
255
+ lines.push('const props = defineProps({');
256
+ lines.push(" width: { type: [String, Number], default: '24' },");
257
+ lines.push(" height: { type: [String, Number], default: '24' },");
258
+ lines.push('});');
259
+ }
260
+ }
261
+ lines.push('</script>');
262
+ lines.push('');
263
+ lines.push(`<!-- ${componentName}.vue -->`);
264
+ return lines.join('\n');
265
+ }
266
+ function generateWebComponent(node, config) {
267
+ const { componentName, sizeProps } = config;
268
+ const tagName = componentName.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');
269
+ const svgHtml = nodeToHtml(node, 6);
270
+ const lines = [];
271
+ lines.push(`class ${componentName} extends HTMLElement {`);
272
+ lines.push(' constructor() {');
273
+ lines.push(' super();');
274
+ lines.push(" this.attachShadow({ mode: 'open' });");
275
+ lines.push(' }');
276
+ lines.push('');
277
+ lines.push(' connectedCallback() {');
278
+ lines.push(' this.render();');
279
+ lines.push(' }');
280
+ lines.push('');
281
+ if (sizeProps) {
282
+ lines.push(" static get observedAttributes() { return ['width', 'height']; }");
283
+ lines.push('');
284
+ lines.push(' attributeChangedCallback() { this.render(); }');
285
+ lines.push('');
286
+ }
287
+ lines.push(' render() {');
288
+ if (sizeProps) {
289
+ lines.push(` const width = this.getAttribute('width') || '${node.attrs.width || '24'}';`);
290
+ lines.push(` const height = this.getAttribute('height') || '${node.attrs.height || '24'}';`);
291
+ }
292
+ lines.push(' if (this.shadowRoot) {');
293
+ lines.push(' this.shadowRoot.innerHTML = `');
294
+ lines.push(svgHtml);
295
+ lines.push(' `;');
296
+ lines.push(' }');
297
+ lines.push(' }');
298
+ lines.push('}');
299
+ lines.push('');
300
+ lines.push(`customElements.define('${tagName}', ${componentName});`);
301
+ lines.push('');
302
+ lines.push(`export { ${componentName} };`);
303
+ return lines.join('\n');
304
+ }
305
+ function generateTypeScript(node, config) {
306
+ const { componentName, sizeProps } = config;
307
+ const svgHtml = nodeToHtml(node, 2);
308
+ const lines = [];
309
+ lines.push(`export interface ${componentName}Options {`);
310
+ if (sizeProps) {
311
+ lines.push(' width?: string | number;');
312
+ lines.push(' height?: string | number;');
313
+ }
314
+ lines.push(' className?: string;');
315
+ lines.push('}');
316
+ lines.push('');
317
+ lines.push(`export function render${componentName}(container: HTMLElement, options: ${componentName}Options = {}): void {`);
318
+ if (sizeProps) {
319
+ lines.push(` const width = options.width ?? '${node.attrs.width || '24'}';`);
320
+ lines.push(` const height = options.height ?? '${node.attrs.height || '24'}';`);
321
+ }
322
+ lines.push(' container.innerHTML = `');
323
+ lines.push(svgHtml);
324
+ lines.push(' `;');
325
+ lines.push('}');
326
+ lines.push('');
327
+ lines.push(`export const ${componentName}SVG = \``);
328
+ lines.push(svgHtml);
329
+ lines.push('`;');
330
+ return lines.join('\n');
331
+ }
332
+ /* ── Main conversion function ── */
333
+ function convertSvgToCode(svgString, config) {
334
+ let node = parseSvgString(svgString);
335
+ if (!node)
336
+ return null;
337
+ if (config.optimize) {
338
+ node = optimizeSvgNode(node);
339
+ }
340
+ // Extract colors
341
+ const colors = new Set();
342
+ extractColorsFromNode(node, colors);
343
+ if (config.useCurrentColor) {
344
+ node = replaceColorsInNode(node, 'currentColor');
345
+ }
346
+ let code;
347
+ let ext;
348
+ switch (config.framework) {
349
+ case 'react':
350
+ code = generateReact(node, config);
351
+ ext = config.typescript ? 'tsx' : 'jsx';
352
+ break;
353
+ case 'vue':
354
+ code = generateVue(node, config);
355
+ ext = 'vue';
356
+ break;
357
+ case 'web-component':
358
+ code = generateWebComponent(node, config);
359
+ ext = config.typescript ? 'ts' : 'js';
360
+ break;
361
+ case 'typescript':
362
+ code = generateTypeScript(node, config);
363
+ ext = 'ts';
364
+ break;
365
+ default:
366
+ return null;
367
+ }
368
+ return {
369
+ code,
370
+ framework: config.framework,
371
+ componentName: config.componentName,
372
+ fileName: `${config.componentName}.${ext}`,
373
+ extractedColors: [...colors],
374
+ };
375
+ }
376
+ /* ── Hook ── */
377
+ function useSvgToCode() {
378
+ const [svgInput, setSvgInput] = React.useState('');
379
+ const [config, setConfig] = React.useState({ ...DEFAULT_CONFIG });
380
+ const [result, setResult] = React.useState(null);
381
+ const convert = React.useCallback(() => {
382
+ if (!svgInput.trim()) {
383
+ setResult(null);
384
+ return;
385
+ }
386
+ const r = convertSvgToCode(svgInput, config);
387
+ setResult(r);
388
+ }, [svgInput, config]);
389
+ const updateConfig = React.useCallback((partial) => {
390
+ setConfig((prev) => ({ ...prev, ...partial }));
391
+ }, []);
392
+ return { svgInput, setSvgInput, config, updateConfig, convert, result };
393
+ }
394
+ /* ── Component ── */
395
+ const NiceSvgToCode = ({ initialSvg = '', onConvert, className = '', }) => {
396
+ const { svgInput, setSvgInput, config, updateConfig, convert, result } = useSvgToCode();
397
+ // Initialize with provided SVG
398
+ React.useEffect(() => {
399
+ if (initialSvg)
400
+ setSvgInput(initialSvg);
401
+ }, [initialSvg, setSvgInput]);
402
+ const handleConvert = () => {
403
+ convert();
404
+ if (result && onConvert)
405
+ onConvert(result);
406
+ };
407
+ const handleCopy = () => {
408
+ if (result)
409
+ navigator.clipboard.writeText(result.code);
410
+ };
411
+ return (jsxRuntime.jsxs("div", { className: `nice-svg-to-code ${className}`, style: { display: 'grid', gap: 8, fontSize: 13 }, children: [jsxRuntime.jsx("strong", { children: "\uD83D\uDD04 SVG \u2192 Code" }), jsxRuntime.jsx("textarea", { value: svgInput, onChange: (e) => setSvgInput(e.target.value), placeholder: "Paste SVG markup here\u2026", rows: 6, style: { width: '100%', fontFamily: 'monospace', fontSize: 11, padding: 6, borderRadius: 4,
412
+ border: '1px solid var(--border, #e2e8f0)' } }), jsxRuntime.jsxs("div", { style: { display: 'grid', gap: 4 }, children: [jsxRuntime.jsxs("label", { children: ["Framework:", jsxRuntime.jsxs("select", { value: config.framework, onChange: (e) => updateConfig({ framework: e.target.value }), style: { width: '100%' }, children: [jsxRuntime.jsx("option", { value: "react", children: "React (JSX/TSX)" }), jsxRuntime.jsx("option", { value: "vue", children: "Vue (SFC)" }), jsxRuntime.jsx("option", { value: "web-component", children: "Web Component" }), jsxRuntime.jsx("option", { value: "typescript", children: "TypeScript (utility)" })] })] }), jsxRuntime.jsxs("label", { children: ["Component name:", jsxRuntime.jsx("input", { type: "text", value: config.componentName, onChange: (e) => updateConfig({ componentName: e.target.value.replace(/[^a-zA-Z0-9]/g, '') }), style: { width: '100%', padding: '3px 6px' } })] }), jsxRuntime.jsxs("div", { style: { display: 'flex', gap: 8, flexWrap: 'wrap', fontSize: 11 }, children: [jsxRuntime.jsxs("label", { children: [jsxRuntime.jsx("input", { type: "checkbox", checked: config.typescript, onChange: (e) => updateConfig({ typescript: e.target.checked }) }), " TypeScript"] }), jsxRuntime.jsxs("label", { children: [jsxRuntime.jsx("input", { type: "checkbox", checked: config.optimize, onChange: (e) => updateConfig({ optimize: e.target.checked }) }), " Optimize"] }), jsxRuntime.jsxs("label", { children: [jsxRuntime.jsx("input", { type: "checkbox", checked: config.sizeProps, onChange: (e) => updateConfig({ sizeProps: e.target.checked }) }), " Size props"] }), jsxRuntime.jsxs("label", { children: [jsxRuntime.jsx("input", { type: "checkbox", checked: config.useCurrentColor, onChange: (e) => updateConfig({ useCurrentColor: e.target.checked }) }), " currentColor"] }), jsxRuntime.jsxs("label", { children: [jsxRuntime.jsx("input", { type: "checkbox", checked: config.memo, onChange: (e) => updateConfig({ memo: e.target.checked }) }), " memo"] })] })] }), jsxRuntime.jsxs("button", { type: "button", onClick: handleConvert, disabled: !svgInput.trim(), style: {
413
+ background: 'var(--accent, #6366f1)', color: '#fff', border: 'none',
414
+ borderRadius: 4, padding: '8px 12px', cursor: 'pointer',
415
+ }, children: ["\uD83D\uDD04 Convert to ", config.framework.charAt(0).toUpperCase() + config.framework.slice(1)] }), result && (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 4 }, children: [jsxRuntime.jsx("span", { style: { fontSize: 11, color: 'var(--muted, #64748b)' }, children: result.fileName }), jsxRuntime.jsx("button", { type: "button", onClick: handleCopy, style: { fontSize: 10, padding: '2px 8px', cursor: 'pointer', borderRadius: 3,
416
+ border: '1px solid var(--border, #e2e8f0)', background: 'transparent' }, children: "\uD83D\uDCCB Copy" })] }), jsxRuntime.jsx("pre", { style: {
417
+ background: 'var(--code-bg, #1e293b)', color: 'var(--code-fg, #e2e8f0)',
418
+ padding: 8, borderRadius: 4, fontSize: 11, overflow: 'auto', maxHeight: 300,
419
+ whiteSpace: 'pre-wrap',
420
+ }, children: result.code }), result.extractedColors.length > 0 && (jsxRuntime.jsxs("div", { style: { fontSize: 11, marginTop: 4 }, children: ["Kolory: ", result.extractedColors.map((c) => (jsxRuntime.jsx("span", { style: { display: 'inline-block', width: 12, height: 12, background: c,
421
+ border: '1px solid #ccc', borderRadius: 2, marginRight: 4, verticalAlign: 'middle' } }, c)))] }))] }))] }));
422
+ };
423
+
424
+ exports.NiceSvgToCode = NiceSvgToCode;
425
+ exports.convertSvgToCode = convertSvgToCode;
426
+ exports.useSvgToCode = useSvgToCode;
427
+ //# sourceMappingURL=NiceSvgToCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NiceSvgToCode.js","sources":["../../../src/vector/NiceSvgToCode.tsx"],"sourcesContent":[null],"names":["useState","useCallback","_jsxs","_jsx"],"mappings":";;;;;AAkEA;AAEA,MAAM,cAAc,GAAoB;AACtC,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,aAAa,EAAE,QAAQ;AACvB,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,SAAS,EAAE,IAAI;CAChB;AAED;AAEA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAC/E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;AAC9B,IAAA,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS;AAClD,IAAA,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB;IACvE,kBAAkB,EAAE,kBAAkB,EAAE,WAAW;AACpD,CAAA,CAAC;AAEF,SAAS,cAAc,CAAC,GAAW,EAAA;;IAEjC,IAAI,OAAO,SAAS,KAAK,WAAW;AAAE,QAAA,OAAO,IAAI;AAEjD,IAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC;IACxD,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC;AAC9C,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,IAAI;IAEtB,SAAS,aAAa,CAAC,EAAW,EAAA;QAChC,MAAM,KAAK,GAA2B,EAAE;AACxC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;YAC5C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;QAC/B;QACA,MAAM,QAAQ,GAAc,EAAE;AAC9B,QAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;YAC3C,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrC;AACA,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK;cACrE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI;cAChC,SAAS;AAEb,QAAA,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;IACjE;IAEA,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;AACtC,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AACvB,IAAA,OAAO,aAAa,CAAC,KAAK,CAAC;AAC7B;AAEA,SAAS,eAAe,CAAC,IAAa,EAAA;;AAEpC,IAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,SAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;SACvC,GAAG,CAAC,eAAe,CAAC;;IAGvB,MAAM,UAAU,GAA2B,EAAE;AAC7C,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACnD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AAC7F,YAAA,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG;QACvB;IACF;IAEA,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAC1F;AAEA,SAAS,qBAAqB,CAAC,IAAa,EAAE,MAAmB,EAAA;AAC/D,IAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC3C,QAAA,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AAClE,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;IACzC;AACA,IAAA,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,6DAA6D,CAAC;AACxF,QAAA,IAAI,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/C;AACA,IAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;AAAE,QAAA,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC;AACzE;AAEA,SAAS,mBAAmB,CAAC,IAAa,EAAE,WAAmB,EAAA;IAC7D,MAAM,QAAQ,GAA2B,EAAE;AAC3C,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACnD,QAAA,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,CAAC,EAAE;AAC3E,YAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW;QAC7B;aAAO;AACL,YAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG;QACrB;IACF;IACA,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACvE,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB;AACH;AAEA;AAEA,MAAM,UAAU,GAA2B;AACzC,IAAA,OAAO,EAAE,WAAW;AACpB,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,cAAc,EAAE,aAAa;AAC7B,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,aAAa,EAAE,YAAY;AAC3B,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,aAAa,EAAE,YAAY;AAC3B,IAAA,gBAAgB,EAAE,eAAe;AACjC,IAAA,YAAY,EAAE,WAAW;AACzB,IAAA,YAAY,EAAE,WAAW;AACzB,IAAA,cAAc,EAAE,aAAa;AAC7B,IAAA,YAAY,EAAE,WAAW;AACzB,IAAA,cAAc,EAAE,aAAa;AAC7B,IAAA,kBAAkB,EAAE,iBAAiB;AACrC,IAAA,mBAAmB,EAAE,kBAAkB;AACvC,IAAA,gBAAgB,EAAE,eAAe;AACjC,IAAA,iBAAiB,EAAE,gBAAgB;AACnC,IAAA,mBAAmB,EAAE,kBAAkB;AACvC,IAAA,gBAAgB,EAAE,eAAe;AACjC,IAAA,cAAc,EAAE,aAAa;AAC7B,IAAA,aAAa,EAAE,YAAY;AAC3B,IAAA,iBAAiB,EAAE,gBAAgB;AACnC,IAAA,kBAAkB,EAAE,iBAAiB;AACrC,IAAA,YAAY,EAAE,WAAW;AACzB,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,OAAO,EAAE,EAAE;CACZ;AAED,SAAS,SAAS,CAAC,IAAY,EAAA;IAC7B,IAAI,IAAI,IAAI,UAAU;AAAE,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC;;AAE/C,IAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7D;AAEA;AAEA,SAAS,SAAS,CAAC,IAAa,EAAE,SAAiB,CAAC,EAAA;IAClD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK;SACpC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AACd,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AACtB,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,CAAC,GAAG;AAC3B,IAAA,CAAC;SACA,MAAM,CAAC,OAAO;SACd,IAAI,CAAC,GAAG,CAAC;AAEZ,IAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAC5C,QAAA,OAAO,GAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,EAAE,KAAK;IAC3D;AAEA,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC;UACf,IAAI,CAAC;AACP,UAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG;IAErF,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAA,EAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,IAAI,CAAC,GAAG,CAAA,CAAA,CAAG;AAC/E;AAEA,SAAS,UAAU,CAAC,IAAa,EAAE,SAAiB,CAAC,EAAA;IACnD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK;AACpC,SAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,CAAC,GAAG;SAC7B,MAAM,CAAC,OAAO;SACd,IAAI,CAAC,GAAG,CAAC;AAEZ,IAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAC5C,QAAA,OAAO,GAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,EAAE,KAAK;IAC3D;AAEA,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC;UACf,IAAI,CAAC;AACP,UAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG;IAEtF,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAA,EAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,IAAI,CAAC,GAAG,CAAA,CAAA,CAAG;AAC/E;AAEA,SAAS,aAAa,CAAC,IAAa,EAAE,MAAuB,EAAA;AAC3D,IAAA,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM;;IAGvF,MAAM,UAAU,GAAa,EAAE;IAC/B,IAAI,SAAS,EAAE;AACb,QAAA,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC;AAC7C,QAAA,UAAU,CAAC,IAAI,CAAC,6BAA6B,CAAC;IAChD;AACA,IAAA,IAAI,SAAS;AAAE,QAAA,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC;AAC1D,IAAA,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACxC,IAAA,UAAU,CAAC,IAAI,CAAC,gCAAgC,CAAC;;AAGjD,IAAA,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE;IACrD,IAAI,SAAS,EAAE;AACb,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS;AAC/B,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU;IACnC;AAEA,IAAA,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAExD,MAAM,KAAK,GAAa,EAAE;AAC1B,IAAA,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;AACxC,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAEd,IAAI,UAAU,EAAE;AACd,QAAA,KAAK,CAAC,IAAI,CAAC,aAAa,aAAa,CAAA,OAAA,CAAS,CAAC;AAC/C,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;AACzB,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACf,QAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAChB;AAEA,IAAA,MAAM,SAAS,GAAG,UAAU,GAAG,CAAA,EAAG,aAAa,CAAA,KAAA,CAAO,GAAG,KAAK;AAC9D,IAAA,MAAM,gBAAgB,GAAG;QACvB,SAAS,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE;QACtE,SAAS,GAAG,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE;AACxE,QAAA,SAAS,GAAG,yBAAyB,GAAG,EAAE;QAC1C,WAAW;QACX,OAAO;KACR,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAE5B,IAAI,IAAI,EAAE;QACR,KAAK,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,aAAa,CAAA,cAAA,EAAiB,SAAS,CAAA,KAAA,EAAQ,gBAAgB,CAAA,QAAA,CAAU,CAAC;IAChG;SAAO;QACL,KAAK,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,aAAa,CAAA,WAAA,EAAc,SAAS,CAAA,OAAA,EAAU,gBAAgB,CAAA,QAAA,CAAU,CAAC;IAC/F;AAEA,IAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAEnB,IAAI,IAAI,EAAE;AACR,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACnB;SAAO;AACL,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAClB;AAEA,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACd,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,aAAa,CAAA,gBAAA,EAAmB,aAAa,CAAA,EAAA,CAAI,CAAC;AAChE,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAEd,IAAI,aAAa,EAAE;AACjB,QAAA,KAAK,CAAC,IAAI,CAAC,kBAAkB,aAAa,CAAA,CAAA,CAAG,CAAC;IAChD;SAAO;AACL,QAAA,KAAK,CAAC,IAAI,CAAC,YAAY,aAAa,CAAA,GAAA,CAAK,CAAC;IAC5C;AAEA,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB;AAEA,SAAS,WAAW,CAAC,IAAa,EAAE,MAAuB,EAAA;IACzD,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM;IAEvD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnC,MAAM,KAAK,GAAa,EAAE;AAC1B,IAAA,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;AACxB,IAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACnB,IAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AACzB,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACd,IAAA,KAAK,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,UAAU,GAAG,YAAY,GAAG,EAAE,CAAA,OAAA,CAAS,CAAC;IAE7D,IAAI,SAAS,EAAE;QACb,IAAI,UAAU,EAAE;AACd,YAAA,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;AACxC,YAAA,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACf,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACd,YAAA,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC;AAChE,YAAA,KAAK,CAAC,IAAI,CAAC,CAAA,UAAA,EAAa,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAA,EAAA,CAAI,CAAC;AACrD,YAAA,KAAK,CAAC,IAAI,CAAC,CAAA,WAAA,EAAc,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAA,EAAA,CAAI,CAAC;AACvD,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QACnB;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC;AACjE,YAAA,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC;AAClE,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QACnB;IACF;AAEA,IAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACvB,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACd,IAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,aAAa,CAAA,QAAA,CAAU,CAAC;AAE3C,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB;AAEA,SAAS,oBAAoB,CAAC,IAAa,EAAE,MAAuB,EAAA;AAClE,IAAA,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM;IAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACxF,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnC,MAAM,KAAK,GAAa,EAAE;AAC1B,IAAA,KAAK,CAAC,IAAI,CAAC,SAAS,aAAa,CAAA,sBAAA,CAAwB,CAAC;AAC1D,IAAA,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAC/B,IAAA,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;AAC1B,IAAA,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC;AACtD,IAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACd,IAAA,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC;AACrC,IAAA,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAChC,IAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAEd,IAAI,SAAS,EAAE;AACb,QAAA,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC;AAC/E,QAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACd,QAAA,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC;AAC7D,QAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAChB;AAEA,IAAA,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;IAC1B,IAAI,SAAS,EAAE;AACb,QAAA,KAAK,CAAC,IAAI,CAAC,CAAA,iDAAA,EAAoD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAA,EAAA,CAAI,CAAC;AAC5F,QAAA,KAAK,CAAC,IAAI,CAAC,CAAA,mDAAA,EAAsD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAA,EAAA,CAAI,CAAC;IACjG;AACA,IAAA,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;AACxC,IAAA,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC;AACjD,IAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACnB,IAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AACtB,IAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACnB,IAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,IAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACf,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACd,KAAK,CAAC,IAAI,CAAC,CAAA,uBAAA,EAA0B,OAAO,CAAA,GAAA,EAAM,aAAa,CAAA,EAAA,CAAI,CAAC;AACpE,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACd,IAAA,KAAK,CAAC,IAAI,CAAC,YAAY,aAAa,CAAA,GAAA,CAAK,CAAC;AAE1C,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB;AAEA,SAAS,kBAAkB,CAAC,IAAa,EAAE,MAAuB,EAAA;AAChE,IAAA,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM;IAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnC,MAAM,KAAK,GAAa,EAAE;AAC1B,IAAA,KAAK,CAAC,IAAI,CAAC,oBAAoB,aAAa,CAAA,SAAA,CAAW,CAAC;IACxD,IAAI,SAAS,EAAE;AACb,QAAA,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;AACxC,QAAA,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC;IAC3C;AACA,IAAA,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACnC,IAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACf,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACd,KAAK,CAAC,IAAI,CAAC,CAAA,sBAAA,EAAyB,aAAa,CAAA,kCAAA,EAAqC,aAAa,CAAA,qBAAA,CAAuB,CAAC;IAC3H,IAAI,SAAS,EAAE;AACb,QAAA,KAAK,CAAC,IAAI,CAAC,CAAA,kCAAA,EAAqC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAA,EAAA,CAAI,CAAC;AAC7E,QAAA,KAAK,CAAC,IAAI,CAAC,CAAA,oCAAA,EAAuC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAA,EAAA,CAAI,CAAC;IAClF;AACA,IAAA,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACvC,IAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACnB,IAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AAClB,IAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACf,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACd,IAAA,KAAK,CAAC,IAAI,CAAC,gBAAgB,aAAa,CAAA,QAAA,CAAU,CAAC;AACnD,IAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACnB,IAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAEhB,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB;AAEA;AAEM,SAAU,gBAAgB,CAAC,SAAiB,EAAE,MAAuB,EAAA;AACzE,IAAA,IAAI,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC;AACpC,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;AAEtB,IAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,QAAA,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;IAC9B;;AAGA,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU;AAChC,IAAA,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC;AAEnC,IAAA,IAAI,MAAM,CAAC,eAAe,EAAE;AAC1B,QAAA,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAE,cAAc,CAAC;IAClD;AAEA,IAAA,IAAI,IAAY;AAChB,IAAA,IAAI,GAAW;AAEf,IAAA,QAAQ,MAAM,CAAC,SAAS;AACtB,QAAA,KAAK,OAAO;AACV,YAAA,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAClC,YAAA,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,KAAK,GAAG,KAAK;YACvC;AACF,QAAA,KAAK,KAAK;AACR,YAAA,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;YAChC,GAAG,GAAG,KAAK;YACX;AACF,QAAA,KAAK,eAAe;AAClB,YAAA,IAAI,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC;AACzC,YAAA,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI;YACrC;AACF,QAAA,KAAK,YAAY;AACf,YAAA,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC;YACvC,GAAG,GAAG,IAAI;YACV;AACF,QAAA;AACE,YAAA,OAAO,IAAI;;IAGf,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;AACnC,QAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,CAAC,aAAa,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;AAC1C,QAAA,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC;KAC7B;AACH;AAEA;SAEgB,YAAY,GAAA;IAC1B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,cAAQ,CAAC,EAAE,CAAC;AAC5C,IAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGA,cAAQ,CAAkB,EAAE,GAAG,cAAc,EAAE,CAAC;IAC5E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGA,cAAQ,CAA0B,IAAI,CAAC;AAEnE,IAAA,MAAM,OAAO,GAAGC,iBAAW,CAAC,MAAK;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;YAAE,SAAS,CAAC,IAAI,CAAC;YAAE;QAAQ;QACjD,MAAM,CAAC,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC5C,SAAS,CAAC,CAAC,CAAC;AACd,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEtB,IAAA,MAAM,YAAY,GAAGA,iBAAW,CAAC,CAAC,OAAiC,KAAI;AACrE,QAAA,SAAS,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE;AACzE;AAEA;AAEO,MAAM,aAAa,GAAiC,CAAC,EAC1D,UAAU,GAAG,EAAE,EACf,SAAS,EACT,SAAS,GAAG,EAAE,GACf,KAAI;AACH,IAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE;;AAGvF,IAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACnB,QAAA,IAAI,UAAU;YAAE,WAAW,CAAC,UAAU,CAAC;AACzC,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAE7B,MAAM,aAAa,GAAG,MAAK;AACzB,QAAA,OAAO,EAAE;QACT,IAAI,MAAM,IAAI,SAAS;YAAE,SAAS,CAAC,MAAM,CAAC;AAC5C,IAAA,CAAC;IAED,MAAM,UAAU,GAAG,MAAK;AACtB,QAAA,IAAI,MAAM;YAAE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACxD,IAAA,CAAC;AAED,IAAA,QACEC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAA,QAAA,EAAA,CAC/FC,cAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,CAA8B,EAG9BA,cAAA,CAAA,UAAA,EAAA,EACE,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,WAAW,EAAC,6BAAwB,EACpC,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;AACxF,oBAAA,MAAM,EAAE,kCAAkC,EAAE,EAAA,CAC9C,EAGFD,yBAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAA,QAAA,EAAA,CACrCA,eAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAA,CAAA,YAAA,EACEA,eAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAE,MAAM,CAAC,SAAS,EAC7B,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,KAAsB,EAAE,CAAC,EAC7E,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CACxBC,2BAAQ,KAAK,EAAC,OAAO,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAyB,EAC9CA,2BAAQ,KAAK,EAAC,KAAK,EAAA,QAAA,EAAA,WAAA,EAAA,CAAmB,EACtCA,cAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAC,eAAe,EAAA,QAAA,EAAA,eAAA,EAAA,CAAuB,EACpDA,cAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAC,YAAY,qCAA8B,CAAA,EAAA,CACjD,CAAA,EAAA,CACH,EAERD,eAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,EACEC,cAAA,CAAA,OAAA,EAAA,EAAO,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,MAAM,CAAC,aAAa,EAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,EAC7F,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAI,CAAA,EAAA,CAC5C,EAERD,yBAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAA,QAAA,EAAA,CACrEA,eAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAA,CAAOC,0BAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EACtD,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAA,CAAI,EAAA,aAAA,CAAA,EAAA,CAAmB,EACxFD,eAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAA,CAAOC,cAAA,CAAA,OAAA,EAAA,EAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EACpD,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAA,CAAI,iBAAiB,EACpFD,eAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAA,CAAOC,0BAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,MAAM,CAAC,SAAS,EACrD,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAI,EAAA,aAAA,CAAA,EAAA,CAAmB,EACvFD,sCAAOC,cAAA,CAAA,OAAA,EAAA,EAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,MAAM,CAAC,eAAe,EAC3D,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAA,CAAI,qBAAqB,EAC/FD,eAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAA,CAAOC,cAAA,CAAA,OAAA,EAAA,EAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAChD,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAI,EAAA,OAAA,CAAA,EAAA,CAAa,CAAA,EAAA,CACxE,CAAA,EAAA,CACF,EAGND,4BAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,aAAa,EAC1C,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAC1B,KAAK,EAAE;oBACL,UAAU,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;oBACnE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS;AACxD,iBAAA,EAAA,QAAA,EAAA,CAAA,0BAAA,EACc,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,EAAA,CAC5E,EAGR,MAAM,KACLA,eAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEA,eAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAAE,EAAA,QAAA,EAAA,CACrGC,cAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAA,QAAA,EAAG,MAAM,CAAC,QAAQ,GAAQ,EACvFA,cAAA,CAAA,QAAA,EAAA,EAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,UAAU,EACvC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAC3E,oCAAA,MAAM,EAAE,kCAAkC,EAAE,UAAU,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,mBAAA,EAAA,CAElE,CAAA,EAAA,CACL,EACNA,cAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;AACV,4BAAA,UAAU,EAAE,yBAAyB,EAAE,KAAK,EAAE,yBAAyB;AACvE,4BAAA,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;AAC3E,4BAAA,UAAU,EAAE,UAAU;yBACvB,EAAA,QAAA,EACE,MAAM,CAAC,IAAI,EAAA,CACR,EACL,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,KAChCD,eAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAA,QAAA,EAAA,CAAA,UAAA,EAC/B,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,MACpCC,cAAA,CAAA,MAAA,EAAA,EAAc,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;oCAClF,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA,EAD3E,CAAC,CAC8E,CAC3F,CAAC,CAAA,EAAA,CACE,CACP,CAAA,EAAA,CACG,CACP,CAAA,EAAA,CACG;AAEV;;;;;;"}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
+ var index = require('../ui/dist/index.js');
4
5
  var VectorEditor_module = require('./VectorEditor.module.css.js');
5
6
  var vectorEditorTypes = require('./vectorEditorTypes.js');
6
7
  var VectorEditorShapeRenderer = require('./VectorEditorShapeRenderer.js');
@@ -9,7 +10,7 @@ var VectorEditorMenuBar = require('./VectorEditorMenuBar.js');
9
10
  var VectorEditorRightPanel = require('./VectorEditorRightPanel.js');
10
11
  var VectorEditorStatusBar = require('./VectorEditorStatusBar.js');
11
12
 
12
- const VectorEditor = ({ width: artW = 512, height: artH = 512, className, onSaveToLibrary, }) => {
13
+ const NiceVectorEditor = ({ width: artW = 512, height: artH = 512, className, onSaveToLibrary, }) => {
13
14
  const api = useVectorEditor.useVectorEditor({ artW, artH, onSaveToLibrary });
14
15
  const { shapes, selId, tool, zoom, px, py, dlgSvg, svgText, gridSize, boxRef, fInp, onDown, onMove, onUp, onWheel, onDblClick, openFile, switchTool, importSVGString, setDlgSvg, setSvgText, } = api;
15
16
  return (jsxRuntime.jsxs("div", { className: `${VectorEditor_module.root} ${className || ""}`, children: [jsxRuntime.jsx("input", { ref: fInp, type: "file", accept: ".svg", style: { display: "none" }, onChange: (e) => {
@@ -18,14 +19,17 @@ const VectorEditor = ({ width: artW = 512, height: artH = 512, className, onSave
18
19
  if (f)
19
20
  openFile(f);
20
21
  e.target.value = "";
21
- } }), jsxRuntime.jsx(VectorEditorMenuBar, { api: api, hasOnSaveToLibrary: !!onSaveToLibrary }), jsxRuntime.jsxs("div", { className: VectorEditor_module.mainArea, children: [jsxRuntime.jsx("div", { className: VectorEditor_module.toolbar, children: vectorEditorTypes.TOOLS.map((t) => (jsxRuntime.jsx("button", { className: `${VectorEditor_module.toolBtn} ${tool === t.id ? VectorEditor_module.toolBtnActive : ""}`, onClick: () => switchTool(t.id), title: `${t.label} (${t.key})`, children: t.icon }, t.id))) }), jsxRuntime.jsx("div", { ref: boxRef, className: VectorEditor_module.canvasContainer, children: jsxRuntime.jsxs("svg", { viewBox: `0 0 ${artW} ${artH}`, onMouseDown: onDown, onMouseMove: onMove, onMouseUp: onUp, onMouseLeave: () => {
22
+ } }), jsxRuntime.jsx(VectorEditorMenuBar, { api: api, hasOnSaveToLibrary: !!onSaveToLibrary }), jsxRuntime.jsxs("div", { className: VectorEditor_module.mainArea, children: [jsxRuntime.jsx("div", { className: VectorEditor_module.toolbar, children: vectorEditorTypes.TOOLS.map((t) => (jsxRuntime.jsx(index.NiceButton, { className: `${VectorEditor_module.toolBtn} ${tool === t.id ? VectorEditor_module.toolBtnActive : ""}`, onClick: () => switchTool(t.id), "aria-label": `${t.label} (${t.key})`, variant: tool === t.id ? "primary" : "ghost", size: "sm", children: t.icon }, t.id))) }), jsxRuntime.jsx("div", { ref: boxRef, className: VectorEditor_module.canvasContainer, children: jsxRuntime.jsxs("svg", { viewBox: `0 0 ${artW} ${artH}`, onMouseDown: onDown, onMouseMove: onMove, onMouseUp: onUp, onMouseLeave: () => {
22
23
  /* handled internally via refs */
23
24
  }, onDoubleClick: onDblClick, onWheel: onWheel, onContextMenu: (e) => e.preventDefault(), style: {
24
25
  transform: `translate(${px}px, ${py}px) scale(${zoom})`,
25
26
  transformOrigin: "center center",
26
27
  cursor: tool === "pointer" ? "default" : "crosshair",
27
- }, children: [jsxRuntime.jsx("rect", { x: 0, y: 0, width: artW, height: artH, fill: "#222" }), zoom >= 2 && (jsxRuntime.jsxs("g", { opacity: 0.08, children: [Array.from({ length: Math.floor(artW / gridSize) + 1 }, (_, i) => (jsxRuntime.jsx("line", { x1: i * gridSize, y1: 0, x2: i * gridSize, y2: artH, stroke: "#fff", strokeWidth: 1 / zoom }, `gx${i}`))), Array.from({ length: Math.floor(artH / gridSize) + 1 }, (_, i) => (jsxRuntime.jsx("line", { x1: 0, y1: i * gridSize, x2: artW, y2: i * gridSize, stroke: "#fff", strokeWidth: 1 / zoom }, `gy${i}`)))] })), shapes.map((s) => (jsxRuntime.jsx(VectorEditorShapeRenderer.ShapeRenderer, { shape: s, selected: s.id === selId, zoom: zoom }, s.id)))] }) }), jsxRuntime.jsx(VectorEditorRightPanel, { api: api })] }), jsxRuntime.jsx(VectorEditorStatusBar, { api: api, artW: artW, artH: artH }), dlgSvg && (jsxRuntime.jsx("div", { className: VectorEditor_module.dialogOverlay, onClick: () => setDlgSvg(false), children: jsxRuntime.jsxs("div", { className: VectorEditor_module.dialog, onClick: (e) => e.stopPropagation(), children: [jsxRuntime.jsx("h3", { children: "Paste SVG" }), jsxRuntime.jsx("label", { children: "Paste SVG source code below:" }), jsxRuntime.jsx("textarea", { value: svgText, onChange: (e) => setSvgText(e.target.value), placeholder: '<svg xmlns="http://www.w3.org/2000/svg" ...>' }), jsxRuntime.jsxs("div", { className: VectorEditor_module.dialogActions, children: [jsxRuntime.jsx("button", { className: VectorEditor_module.btnSecondary, onClick: () => setDlgSvg(false), children: "Cancel" }), jsxRuntime.jsx("button", { className: VectorEditor_module.btnPrimary, onClick: () => importSVGString(svgText), children: "Import" })] })] }) }))] }));
28
+ }, children: [jsxRuntime.jsx("rect", { x: 0, y: 0, width: artW, height: artH, fill: "#222" }), zoom >= 2 && (jsxRuntime.jsxs("g", { opacity: 0.08, children: [Array.from({ length: Math.floor(artW / gridSize) + 1 }, (_, i) => (jsxRuntime.jsx("line", { x1: i * gridSize, y1: 0, x2: i * gridSize, y2: artH, stroke: "#fff", strokeWidth: 1 / zoom }, `gx${i}`))), Array.from({ length: Math.floor(artH / gridSize) + 1 }, (_, i) => (jsxRuntime.jsx("line", { x1: 0, y1: i * gridSize, x2: artW, y2: i * gridSize, stroke: "#fff", strokeWidth: 1 / zoom }, `gy${i}`)))] })), shapes.map((s) => (jsxRuntime.jsx(VectorEditorShapeRenderer.ShapeRenderer, { shape: s, selected: s.id === selId, zoom: zoom }, s.id)))] }) }), jsxRuntime.jsx(VectorEditorRightPanel, { api: api })] }), jsxRuntime.jsx(VectorEditorStatusBar, { api: api, artW: artW, artH: artH }), jsxRuntime.jsxs(index.NiceModal, { open: dlgSvg, onClose: () => setDlgSvg(false), title: "Paste SVG", children: [jsxRuntime.jsx("label", { children: "Paste SVG source code below:" }), jsxRuntime.jsx(index.NiceTextArea, { value: svgText, onChange: (val) => setSvgText(val), placeholder: '<svg xmlns="http://www.w3.org/2000/svg" ...>' }), jsxRuntime.jsxs("div", { className: VectorEditor_module.dialogActions, children: [jsxRuntime.jsx(index.NiceButton, { variant: "ghost", onClick: () => setDlgSvg(false), children: "Cancel" }), jsxRuntime.jsx(index.NiceButton, { variant: "primary", onClick: () => importSVGString(svgText), children: "Import" })] })] })] }));
28
29
  };
30
+ /** @deprecated Use NiceVectorEditor */
31
+ const VectorEditor = NiceVectorEditor;
29
32
 
33
+ exports.NiceVectorEditor = NiceVectorEditor;
30
34
  exports.VectorEditor = VectorEditor;
31
35
  //# sourceMappingURL=VectorEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VectorEditor.js","sources":["../../../src/vector/VectorEditor.tsx"],"sourcesContent":[null],"names":["useVectorEditor","_jsxs","styles","_jsx","TOOLS","ShapeRenderer"],"mappings":"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"}
1
+ {"version":3,"file":"VectorEditor.js","sources":["../../../src/vector/VectorEditor.tsx"],"sourcesContent":[null],"names":["useVectorEditor","_jsxs","styles","_jsx","TOOLS","NiceButton","ShapeRenderer","NiceModal","NiceTextArea"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var styles = {"root":"VectorEditor-module_root__rtRWo","menuBar":"VectorEditor-module_menuBar__o25XM","menuBtn":"VectorEditor-module_menuBtn__aP4vp","menuSep":"VectorEditor-module_menuSep__3-kTv","menuLabel":"VectorEditor-module_menuLabel__Bsm0e","toolbar":"VectorEditor-module_toolbar__fakYL","toolBtn":"VectorEditor-module_toolBtn__Zh7D3","toolBtnActive":"VectorEditor-module_toolBtnActive__0xZlr","mainArea":"VectorEditor-module_mainArea__3o89F","canvasContainer":"VectorEditor-module_canvasContainer__hOUAx","rightPanel":"VectorEditor-module_rightPanel__3hzcS","panelSection":"VectorEditor-module_panelSection__uteDQ","panelTitle":"VectorEditor-module_panelTitle__WBUxr","shapeItem":"VectorEditor-module_shapeItem__bu2E2","shapeItemActive":"VectorEditor-module_shapeItemActive__E2lK7","shapeIcon":"VectorEditor-module_shapeIcon__M4j6X","shapeName":"VectorEditor-module_shapeName__2QctO","propRow":"VectorEditor-module_propRow__Alc4S","propLabel":"VectorEditor-module_propLabel__J0lxK","propInput":"VectorEditor-module_propInput__3my2d","propColorSwatch":"VectorEditor-module_propColorSwatch__JL97Z","statusBar":"VectorEditor-module_statusBar__jMwan","dialogOverlay":"VectorEditor-module_dialogOverlay__NLiCg","dialog":"VectorEditor-module_dialog__NDNK2","dialogActions":"VectorEditor-module_dialogActions__0Sy4X","btnPrimary":"VectorEditor-module_btnPrimary__f9AaS","btnSecondary":"VectorEditor-module_btnSecondary__wDps2"};
3
+ var styles = {"root":"VectorEditor-module_root__rtRWo","menuBar":"VectorEditor-module_menuBar__o25XM","menuBtn":"VectorEditor-module_menuBtn__aP4vp","menuSep":"VectorEditor-module_menuSep__3-kTv","menuLabel":"VectorEditor-module_menuLabel__Bsm0e","toolbar":"VectorEditor-module_toolbar__fakYL","toolBtn":"VectorEditor-module_toolBtn__Zh7D3","toolBtnActive":"VectorEditor-module_toolBtnActive__0xZlr","mainArea":"VectorEditor-module_mainArea__3o89F","canvasContainer":"VectorEditor-module_canvasContainer__hOUAx","rightPanel":"VectorEditor-module_rightPanel__3hzcS","panelSection":"VectorEditor-module_panelSection__uteDQ","panelTitle":"VectorEditor-module_panelTitle__WBUxr","shapeItem":"VectorEditor-module_shapeItem__bu2E2","shapeItemActive":"VectorEditor-module_shapeItemActive__E2lK7","shapeIcon":"VectorEditor-module_shapeIcon__M4j6X","shapeName":"VectorEditor-module_shapeName__2QctO","propRow":"VectorEditor-module_propRow__Alc4S","propLabel":"VectorEditor-module_propLabel__J0lxK","propInput":"VectorEditor-module_propInput__3my2d","propColorSwatch":"VectorEditor-module_propColorSwatch__JL97Z","statusBar":"VectorEditor-module_statusBar__jMwan","dialogActions":"VectorEditor-module_dialogActions__0Sy4X"};
4
4
 
5
5
  module.exports = styles;
6
6
  //# sourceMappingURL=VectorEditor.module.css.js.map
@@ -2,13 +2,17 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
+ var index = require('../ui/dist/index.js');
5
6
  var VectorEditor_module = require('./VectorEditor.module.css.js');
6
7
 
7
8
  const VectorEditorMenuBar = ({ api, hasOnSaveToLibrary }) => {
8
9
  const { selId, hasClipboard, snapGrid, fInp, shapes, boolSecondShape, newCanvas, setDlgSvg, setBoolSecondShape, exportSVG, exportPNG, exportJPG, exportWebP, exportBMP, undo, redo, duplicateShape, copyShape, pasteShape, deleteShape, bringToFront, sendToBack, flipH, flipV, alignShapes, setSnapGrid, saveToLibrary, unionShapes, subtractShapes, intersectShapes, excludeShapes, outlineStroke, } = api;
9
10
  // Check if we can perform boolean ops (need 2 shapes selected)
10
11
  const canBool = selId && boolSecondShape && selId !== boolSecondShape;
11
- return (jsxRuntime.jsxs("div", { className: VectorEditor_module.menuBar, children: [jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: newCanvas, children: "New" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: () => { var _a; return (_a = fInp.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "Open SVG" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: () => setDlgSvg(true), children: "Paste SVG" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: exportSVG, children: "SVG" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: exportPNG, children: "PNG" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: exportJPG, children: "JPG" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: exportWebP, children: "WebP" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: exportBMP, children: "BMP" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: undo, children: "Undo" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: redo, children: "Redo" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: duplicateShape, disabled: !selId, title: "Ctrl+D", children: "Dup" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: copyShape, disabled: !selId, title: "Ctrl+C", children: "Copy" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: pasteShape, disabled: !hasClipboard, title: "Ctrl+V", children: "Paste" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: deleteShape, disabled: !selId, children: "Delete" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: bringToFront, disabled: !selId, children: "\u2191 Front" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: sendToBack, disabled: !selId, children: "\u2193 Back" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: flipH, disabled: !selId, title: "Flip H", children: "\u21D4" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: flipV, disabled: !selId, title: "Flip V", children: "\u21D5" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: () => alignShapes("left"), disabled: !selId, title: "Align Left", children: "\u25E7" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: () => alignShapes("center"), disabled: !selId, title: "Align Center", children: "\u25EB" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: () => alignShapes("right"), disabled: !selId, title: "Align Right", children: "\u25E8" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), shapes.length >= 2 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("select", { className: VectorEditor_module.menuBtn, value: boolSecondShape || "", onChange: (e) => setBoolSecondShape(e.target.value || null), title: "Pick 2nd shape for boolean", style: { minWidth: 80 }, children: [jsxRuntime.jsx("option", { value: "", children: "2nd Shape" }), shapes.filter(s => s.id !== selId).map((s, i) => (jsxRuntime.jsxs("option", { value: s.id, children: ["Shape ", i + 1] }, s.id)))] }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: unionShapes, disabled: !canBool, title: "Union", children: "\u222A" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: subtractShapes, disabled: !canBool, title: "Subtract", children: "\u2212" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: intersectShapes, disabled: !canBool, title: "Intersect", children: "\u2229" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: excludeShapes, disabled: !canBool, title: "Exclude", children: "\u2295" }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: outlineStroke, disabled: !selId, title: "Outline Stroke", children: "\u25AD" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep })] })), jsxRuntime.jsxs("label", { className: VectorEditor_module.menuLabel, title: "Snap to Grid", children: [jsxRuntime.jsx("input", { type: "checkbox", checked: snapGrid, onChange: () => setSnapGrid((v) => !v), style: { marginRight: 3 } }), "Snap"] }), hasOnSaveToLibrary && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx("button", { className: VectorEditor_module.menuBtn, onClick: saveToLibrary, children: "\uD83D\uDCE6 Save to Library" })] }))] }));
12
+ return (jsxRuntime.jsxs("div", { className: VectorEditor_module.menuBar, children: [jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: newCanvas, children: "New" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => { var _a; return (_a = fInp.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "Open SVG" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => setDlgSvg(true), children: "Paste SVG" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: exportSVG, children: "SVG" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: exportPNG, children: "PNG" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: exportJPG, children: "JPG" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: exportWebP, children: "WebP" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: exportBMP, children: "BMP" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: undo, children: "Undo" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: redo, children: "Redo" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: duplicateShape, disabled: !selId, "aria-label": "Ctrl+D", children: "Dup" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: copyShape, disabled: !selId, "aria-label": "Ctrl+C", children: "Copy" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: pasteShape, disabled: !hasClipboard, "aria-label": "Ctrl+V", children: "Paste" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: deleteShape, disabled: !selId, children: "Delete" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: bringToFront, disabled: !selId, children: "\u2191 Front" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: sendToBack, disabled: !selId, children: "\u2193 Back" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: flipH, disabled: !selId, "aria-label": "Flip H", children: "\u21D4" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: flipV, disabled: !selId, "aria-label": "Flip V", children: "\u21D5" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => alignShapes("left"), disabled: !selId, "aria-label": "Align Left", children: "\u25E7" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => alignShapes("center"), disabled: !selId, "aria-label": "Align Center", children: "\u25EB" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => alignShapes("right"), disabled: !selId, "aria-label": "Align Right", children: "\u25E8" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), shapes.length >= 2 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(index.NiceSelect, { className: VectorEditor_module.menuBtn, value: boolSecondShape || "", onChange: (val) => setBoolSecondShape(val || null), options: [
13
+ { value: "", label: "2nd Shape" },
14
+ ...shapes.filter(s => s.id !== selId).map((s, i) => ({ value: s.id, label: `Shape ${i + 1}` })),
15
+ ], style: { minWidth: 80 } }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: unionShapes, disabled: !canBool, "aria-label": "Union", children: "\u222A" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: subtractShapes, disabled: !canBool, "aria-label": "Subtract", children: "\u2212" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: intersectShapes, disabled: !canBool, "aria-label": "Intersect", children: "\u2229" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: excludeShapes, disabled: !canBool, "aria-label": "Exclude", children: "\u2295" }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: outlineStroke, disabled: !selId, "aria-label": "Outline Stroke", children: "\u25AD" }), jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep })] })), jsxRuntime.jsxs("label", { className: VectorEditor_module.menuLabel, children: [jsxRuntime.jsx(index.NiceCheckbox, { checked: snapGrid, onChange: () => setSnapGrid((v) => !v) }), "Snap"] }), hasOnSaveToLibrary && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: VectorEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: VectorEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: saveToLibrary, children: "\uD83D\uDCE6 Save to Library" })] }))] }));
12
16
  };
13
17
  var VectorEditorMenuBar$1 = React.memo(VectorEditorMenuBar);
14
18