@nice2dev/ui-graphics 1.0.0 → 1.0.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.
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,423 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import React, { useState, useCallback } from 'react';
3
+
4
+ /* ── Default config ── */
5
+ const DEFAULT_CONFIG = {
6
+ framework: 'react',
7
+ componentName: 'MyIcon',
8
+ extractColors: true,
9
+ useClassNames: false,
10
+ typescript: true,
11
+ optimize: true,
12
+ sizeProps: true,
13
+ useCurrentColor: false,
14
+ memo: true,
15
+ defaultExport: true,
16
+ ariaLabel: true,
17
+ };
18
+ /* ── SVG Parser (simple regex-based for browser) ── */
19
+ const METADATA_TAGS = new Set(['metadata', 'title', 'desc', 'defs', 'comment']);
20
+ const REMOVABLE_ATTRS = new Set([
21
+ 'xmlns:xlink', 'xml:space', 'xmlns:svg', 'version',
22
+ 'xmlns:dc', 'xmlns:cc', 'xmlns:rdf', 'xmlns:sodipodi', 'xmlns:inkscape',
23
+ 'sodipodi:docname', 'inkscape:version', 'data-name',
24
+ ]);
25
+ function parseSvgString(svg) {
26
+ // Use DOMParser for safe parsing
27
+ if (typeof DOMParser === 'undefined')
28
+ return null;
29
+ const parser = new DOMParser();
30
+ const doc = parser.parseFromString(svg, 'image/svg+xml');
31
+ const error = doc.querySelector('parsererror');
32
+ if (error)
33
+ return null;
34
+ function elementToNode(el) {
35
+ const attrs = {};
36
+ for (const attr of Array.from(el.attributes)) {
37
+ attrs[attr.name] = attr.value;
38
+ }
39
+ const children = [];
40
+ for (const child of Array.from(el.children)) {
41
+ children.push(elementToNode(child));
42
+ }
43
+ const text = el.childNodes.length === 1 && el.childNodes[0].nodeType === 3
44
+ ? el.childNodes[0].textContent || undefined
45
+ : undefined;
46
+ return { tag: el.tagName.toLowerCase(), attrs, children, text };
47
+ }
48
+ const svgEl = doc.querySelector('svg');
49
+ if (!svgEl)
50
+ return null;
51
+ return elementToNode(svgEl);
52
+ }
53
+ function optimizeSvgNode(node) {
54
+ // Remove metadata tags
55
+ const filteredChildren = node.children
56
+ .filter((c) => !METADATA_TAGS.has(c.tag))
57
+ .map(optimizeSvgNode);
58
+ // Remove removable attrs
59
+ const cleanAttrs = {};
60
+ for (const [key, val] of Object.entries(node.attrs)) {
61
+ if (!REMOVABLE_ATTRS.has(key) && !key.startsWith('inkscape:') && !key.startsWith('sodipodi:')) {
62
+ cleanAttrs[key] = val;
63
+ }
64
+ }
65
+ return { tag: node.tag, attrs: cleanAttrs, children: filteredChildren, text: node.text };
66
+ }
67
+ function extractColorsFromNode(node, colors) {
68
+ for (const val of Object.values(node.attrs)) {
69
+ if (/^#[0-9a-fA-F]{3,8}$/.test(val))
70
+ colors.add(val.toLowerCase());
71
+ if (/^rgb\(/.test(val))
72
+ colors.add(val);
73
+ }
74
+ for (const style of (node.attrs.style || '').split(';')) {
75
+ const match = style.match(/(fill|stroke|color)\s*:\s*(#[0-9a-fA-F]{3,8}|rgb\([^)]+\))/i);
76
+ if (match)
77
+ colors.add(match[2].toLowerCase());
78
+ }
79
+ for (const child of node.children)
80
+ extractColorsFromNode(child, colors);
81
+ }
82
+ function replaceColorsInNode(node, replacement) {
83
+ const newAttrs = {};
84
+ for (const [key, val] of Object.entries(node.attrs)) {
85
+ if (/^#[0-9a-fA-F]{3,8}$/.test(val) && (key === 'fill' || key === 'stroke')) {
86
+ newAttrs[key] = replacement;
87
+ }
88
+ else {
89
+ newAttrs[key] = val;
90
+ }
91
+ }
92
+ return {
93
+ tag: node.tag,
94
+ attrs: newAttrs,
95
+ children: node.children.map((c) => replaceColorsInNode(c, replacement)),
96
+ text: node.text,
97
+ };
98
+ }
99
+ /* ── SVG attribute → JSX attribute mapping ── */
100
+ const SVG_TO_JSX = {
101
+ 'class': 'className',
102
+ 'clip-path': 'clipPath',
103
+ 'clip-rule': 'clipRule',
104
+ 'fill-opacity': 'fillOpacity',
105
+ 'fill-rule': 'fillRule',
106
+ 'font-family': 'fontFamily',
107
+ 'font-size': 'fontSize',
108
+ 'font-weight': 'fontWeight',
109
+ 'letter-spacing': 'letterSpacing',
110
+ 'marker-end': 'markerEnd',
111
+ 'marker-mid': 'markerMid',
112
+ 'marker-start': 'markerStart',
113
+ 'stop-color': 'stopColor',
114
+ 'stop-opacity': 'stopOpacity',
115
+ 'stroke-dasharray': 'strokeDasharray',
116
+ 'stroke-dashoffset': 'strokeDashoffset',
117
+ 'stroke-linecap': 'strokeLinecap',
118
+ 'stroke-linejoin': 'strokeLinejoin',
119
+ 'stroke-miterlimit': 'strokeMiterlimit',
120
+ 'stroke-opacity': 'strokeOpacity',
121
+ 'stroke-width': 'strokeWidth',
122
+ 'text-anchor': 'textAnchor',
123
+ 'text-decoration': 'textDecoration',
124
+ 'transform-origin': 'transformOrigin',
125
+ 'xlink:href': 'xlinkHref',
126
+ 'xml:lang': 'xmlLang',
127
+ 'xml:space': 'xmlSpace',
128
+ 'xmlns:xlink': '',
129
+ 'xmlns': '',
130
+ };
131
+ function attrToJsx(name) {
132
+ if (name in SVG_TO_JSX)
133
+ return SVG_TO_JSX[name];
134
+ // camelCase any remaining kebab-case
135
+ return name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
136
+ }
137
+ /* ── Code Generators ── */
138
+ function nodeToJsx(node, indent = 2) {
139
+ const pad = ' '.repeat(indent);
140
+ const attrs = Object.entries(node.attrs)
141
+ .map(([k, v]) => {
142
+ const jsxKey = attrToJsx(k);
143
+ if (!jsxKey)
144
+ return '';
145
+ return `${jsxKey}="${v}"`;
146
+ })
147
+ .filter(Boolean)
148
+ .join(' ');
149
+ if (node.children.length === 0 && !node.text) {
150
+ return `${pad}<${node.tag}${attrs ? ' ' + attrs : ''} />`;
151
+ }
152
+ const inner = node.text
153
+ ? node.text
154
+ : '\n' + node.children.map((c) => nodeToJsx(c, indent + 2)).join('\n') + '\n' + pad;
155
+ return `${pad}<${node.tag}${attrs ? ' ' + attrs : ''}>${inner}</${node.tag}>`;
156
+ }
157
+ function nodeToHtml(node, indent = 2) {
158
+ const pad = ' '.repeat(indent);
159
+ const attrs = Object.entries(node.attrs)
160
+ .map(([k, v]) => `${k}="${v}"`)
161
+ .filter(Boolean)
162
+ .join(' ');
163
+ if (node.children.length === 0 && !node.text) {
164
+ return `${pad}<${node.tag}${attrs ? ' ' + attrs : ''} />`;
165
+ }
166
+ const inner = node.text
167
+ ? node.text
168
+ : '\n' + node.children.map((c) => nodeToHtml(c, indent + 2)).join('\n') + '\n' + pad;
169
+ return `${pad}<${node.tag}${attrs ? ' ' + attrs : ''}>${inner}</${node.tag}>`;
170
+ }
171
+ function generateReact(node, config) {
172
+ const { componentName, typescript, sizeProps, memo, defaultExport, ariaLabel } = config;
173
+ // Build props interface
174
+ const propsLines = [];
175
+ if (sizeProps) {
176
+ propsLines.push(' width?: number | string;');
177
+ propsLines.push(' height?: number | string;');
178
+ }
179
+ if (ariaLabel)
180
+ propsLines.push(" 'aria-label'?: string;");
181
+ propsLines.push(' className?: string;');
182
+ propsLines.push(' style?: React.CSSProperties;');
183
+ // Modify SVG node for props
184
+ const svgNode = { ...node, attrs: { ...node.attrs } };
185
+ if (sizeProps) {
186
+ svgNode.attrs.width = '{width}';
187
+ svgNode.attrs.height = '{height}';
188
+ }
189
+ const jsxBody = nodeToJsx({ ...svgNode, tag: 'svg' }, 4);
190
+ const lines = [];
191
+ lines.push("import React from 'react';");
192
+ lines.push('');
193
+ if (typescript) {
194
+ lines.push(`interface ${componentName}Props {`);
195
+ lines.push(...propsLines);
196
+ lines.push('}');
197
+ lines.push('');
198
+ }
199
+ const propsType = typescript ? `${componentName}Props` : 'any';
200
+ const propsDestructure = [
201
+ sizeProps ? `width = ${JSON.stringify(node.attrs.width || '24')}` : '',
202
+ sizeProps ? `height = ${JSON.stringify(node.attrs.height || '24')}` : '',
203
+ ariaLabel ? "'aria-label': ariaLabel" : '',
204
+ 'className',
205
+ 'style',
206
+ ].filter(Boolean).join(', ');
207
+ if (memo) {
208
+ lines.push(`const ${componentName} = React.memo<${propsType}>(({ ${propsDestructure} }) => (`);
209
+ }
210
+ else {
211
+ lines.push(`const ${componentName}: React.FC<${propsType}> = ({ ${propsDestructure} }) => (`);
212
+ }
213
+ lines.push(jsxBody);
214
+ if (memo) {
215
+ lines.push('));');
216
+ }
217
+ else {
218
+ lines.push(');');
219
+ }
220
+ lines.push('');
221
+ lines.push(`${componentName}.displayName = '${componentName}';`);
222
+ lines.push('');
223
+ if (defaultExport) {
224
+ lines.push(`export default ${componentName};`);
225
+ }
226
+ else {
227
+ lines.push(`export { ${componentName} };`);
228
+ }
229
+ return lines.join('\n');
230
+ }
231
+ function generateVue(node, config) {
232
+ const { componentName, sizeProps, typescript } = config;
233
+ const svgHtml = nodeToHtml(node, 2);
234
+ const lines = [];
235
+ lines.push('<template>');
236
+ lines.push(svgHtml);
237
+ lines.push('</template>');
238
+ lines.push('');
239
+ lines.push(`<script${typescript ? ' lang="ts"' : ''} setup>`);
240
+ if (sizeProps) {
241
+ if (typescript) {
242
+ lines.push('interface Props {');
243
+ lines.push(" width?: string | number;");
244
+ lines.push(" height?: string | number;");
245
+ lines.push('}');
246
+ lines.push('');
247
+ lines.push("const props = withDefaults(defineProps<Props>(), {");
248
+ lines.push(` width: '${node.attrs.width || '24'}',`);
249
+ lines.push(` height: '${node.attrs.height || '24'}',`);
250
+ lines.push('});');
251
+ }
252
+ else {
253
+ lines.push('const props = defineProps({');
254
+ lines.push(" width: { type: [String, Number], default: '24' },");
255
+ lines.push(" height: { type: [String, Number], default: '24' },");
256
+ lines.push('});');
257
+ }
258
+ }
259
+ lines.push('</script>');
260
+ lines.push('');
261
+ lines.push(`<!-- ${componentName}.vue -->`);
262
+ return lines.join('\n');
263
+ }
264
+ function generateWebComponent(node, config) {
265
+ const { componentName, sizeProps } = config;
266
+ const tagName = componentName.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');
267
+ const svgHtml = nodeToHtml(node, 6);
268
+ const lines = [];
269
+ lines.push(`class ${componentName} extends HTMLElement {`);
270
+ lines.push(' constructor() {');
271
+ lines.push(' super();');
272
+ lines.push(" this.attachShadow({ mode: 'open' });");
273
+ lines.push(' }');
274
+ lines.push('');
275
+ lines.push(' connectedCallback() {');
276
+ lines.push(' this.render();');
277
+ lines.push(' }');
278
+ lines.push('');
279
+ if (sizeProps) {
280
+ lines.push(" static get observedAttributes() { return ['width', 'height']; }");
281
+ lines.push('');
282
+ lines.push(' attributeChangedCallback() { this.render(); }');
283
+ lines.push('');
284
+ }
285
+ lines.push(' render() {');
286
+ if (sizeProps) {
287
+ lines.push(` const width = this.getAttribute('width') || '${node.attrs.width || '24'}';`);
288
+ lines.push(` const height = this.getAttribute('height') || '${node.attrs.height || '24'}';`);
289
+ }
290
+ lines.push(' if (this.shadowRoot) {');
291
+ lines.push(' this.shadowRoot.innerHTML = `');
292
+ lines.push(svgHtml);
293
+ lines.push(' `;');
294
+ lines.push(' }');
295
+ lines.push(' }');
296
+ lines.push('}');
297
+ lines.push('');
298
+ lines.push(`customElements.define('${tagName}', ${componentName});`);
299
+ lines.push('');
300
+ lines.push(`export { ${componentName} };`);
301
+ return lines.join('\n');
302
+ }
303
+ function generateTypeScript(node, config) {
304
+ const { componentName, sizeProps } = config;
305
+ const svgHtml = nodeToHtml(node, 2);
306
+ const lines = [];
307
+ lines.push(`export interface ${componentName}Options {`);
308
+ if (sizeProps) {
309
+ lines.push(' width?: string | number;');
310
+ lines.push(' height?: string | number;');
311
+ }
312
+ lines.push(' className?: string;');
313
+ lines.push('}');
314
+ lines.push('');
315
+ lines.push(`export function render${componentName}(container: HTMLElement, options: ${componentName}Options = {}): void {`);
316
+ if (sizeProps) {
317
+ lines.push(` const width = options.width ?? '${node.attrs.width || '24'}';`);
318
+ lines.push(` const height = options.height ?? '${node.attrs.height || '24'}';`);
319
+ }
320
+ lines.push(' container.innerHTML = `');
321
+ lines.push(svgHtml);
322
+ lines.push(' `;');
323
+ lines.push('}');
324
+ lines.push('');
325
+ lines.push(`export const ${componentName}SVG = \``);
326
+ lines.push(svgHtml);
327
+ lines.push('`;');
328
+ return lines.join('\n');
329
+ }
330
+ /* ── Main conversion function ── */
331
+ function convertSvgToCode(svgString, config) {
332
+ let node = parseSvgString(svgString);
333
+ if (!node)
334
+ return null;
335
+ if (config.optimize) {
336
+ node = optimizeSvgNode(node);
337
+ }
338
+ // Extract colors
339
+ const colors = new Set();
340
+ extractColorsFromNode(node, colors);
341
+ if (config.useCurrentColor) {
342
+ node = replaceColorsInNode(node, 'currentColor');
343
+ }
344
+ let code;
345
+ let ext;
346
+ switch (config.framework) {
347
+ case 'react':
348
+ code = generateReact(node, config);
349
+ ext = config.typescript ? 'tsx' : 'jsx';
350
+ break;
351
+ case 'vue':
352
+ code = generateVue(node, config);
353
+ ext = 'vue';
354
+ break;
355
+ case 'web-component':
356
+ code = generateWebComponent(node, config);
357
+ ext = config.typescript ? 'ts' : 'js';
358
+ break;
359
+ case 'typescript':
360
+ code = generateTypeScript(node, config);
361
+ ext = 'ts';
362
+ break;
363
+ default:
364
+ return null;
365
+ }
366
+ return {
367
+ code,
368
+ framework: config.framework,
369
+ componentName: config.componentName,
370
+ fileName: `${config.componentName}.${ext}`,
371
+ extractedColors: [...colors],
372
+ };
373
+ }
374
+ /* ── Hook ── */
375
+ function useSvgToCode() {
376
+ const [svgInput, setSvgInput] = useState('');
377
+ const [config, setConfig] = useState({ ...DEFAULT_CONFIG });
378
+ const [result, setResult] = useState(null);
379
+ const convert = useCallback(() => {
380
+ if (!svgInput.trim()) {
381
+ setResult(null);
382
+ return;
383
+ }
384
+ const r = convertSvgToCode(svgInput, config);
385
+ setResult(r);
386
+ }, [svgInput, config]);
387
+ const updateConfig = useCallback((partial) => {
388
+ setConfig((prev) => ({ ...prev, ...partial }));
389
+ }, []);
390
+ return { svgInput, setSvgInput, config, updateConfig, convert, result };
391
+ }
392
+ /* ── Component ── */
393
+ const NiceSvgToCode = ({ initialSvg = '', onConvert, className = '', }) => {
394
+ const { svgInput, setSvgInput, config, updateConfig, convert, result } = useSvgToCode();
395
+ // Initialize with provided SVG
396
+ React.useEffect(() => {
397
+ if (initialSvg)
398
+ setSvgInput(initialSvg);
399
+ }, [initialSvg, setSvgInput]);
400
+ const handleConvert = () => {
401
+ convert();
402
+ if (result && onConvert)
403
+ onConvert(result);
404
+ };
405
+ const handleCopy = () => {
406
+ if (result)
407
+ navigator.clipboard.writeText(result.code);
408
+ };
409
+ return (jsxs("div", { className: `nice-svg-to-code ${className}`, style: { display: 'grid', gap: 8, fontSize: 13 }, children: [jsx("strong", { children: "\uD83D\uDD04 SVG \u2192 Code" }), 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,
410
+ border: '1px solid var(--border, #e2e8f0)' } }), jsxs("div", { style: { display: 'grid', gap: 4 }, children: [jsxs("label", { children: ["Framework:", jsxs("select", { value: config.framework, onChange: (e) => updateConfig({ framework: e.target.value }), style: { width: '100%' }, children: [jsx("option", { value: "react", children: "React (JSX/TSX)" }), jsx("option", { value: "vue", children: "Vue (SFC)" }), jsx("option", { value: "web-component", children: "Web Component" }), jsx("option", { value: "typescript", children: "TypeScript (utility)" })] })] }), jsxs("label", { children: ["Component name:", 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' } })] }), jsxs("div", { style: { display: 'flex', gap: 8, flexWrap: 'wrap', fontSize: 11 }, children: [jsxs("label", { children: [jsx("input", { type: "checkbox", checked: config.typescript, onChange: (e) => updateConfig({ typescript: e.target.checked }) }), " TypeScript"] }), jsxs("label", { children: [jsx("input", { type: "checkbox", checked: config.optimize, onChange: (e) => updateConfig({ optimize: e.target.checked }) }), " Optimize"] }), jsxs("label", { children: [jsx("input", { type: "checkbox", checked: config.sizeProps, onChange: (e) => updateConfig({ sizeProps: e.target.checked }) }), " Size props"] }), jsxs("label", { children: [jsx("input", { type: "checkbox", checked: config.useCurrentColor, onChange: (e) => updateConfig({ useCurrentColor: e.target.checked }) }), " currentColor"] }), jsxs("label", { children: [jsx("input", { type: "checkbox", checked: config.memo, onChange: (e) => updateConfig({ memo: e.target.checked }) }), " memo"] })] })] }), jsxs("button", { type: "button", onClick: handleConvert, disabled: !svgInput.trim(), style: {
411
+ background: 'var(--accent, #6366f1)', color: '#fff', border: 'none',
412
+ borderRadius: 4, padding: '8px 12px', cursor: 'pointer',
413
+ }, children: ["\uD83D\uDD04 Convert to ", config.framework.charAt(0).toUpperCase() + config.framework.slice(1)] }), result && (jsxs("div", { children: [jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 4 }, children: [jsx("span", { style: { fontSize: 11, color: 'var(--muted, #64748b)' }, children: result.fileName }), jsx("button", { type: "button", onClick: handleCopy, style: { fontSize: 10, padding: '2px 8px', cursor: 'pointer', borderRadius: 3,
414
+ border: '1px solid var(--border, #e2e8f0)', background: 'transparent' }, children: "\uD83D\uDCCB Copy" })] }), jsx("pre", { style: {
415
+ background: 'var(--code-bg, #1e293b)', color: 'var(--code-fg, #e2e8f0)',
416
+ padding: 8, borderRadius: 4, fontSize: 11, overflow: 'auto', maxHeight: 300,
417
+ whiteSpace: 'pre-wrap',
418
+ }, children: result.code }), result.extractedColors.length > 0 && (jsxs("div", { style: { fontSize: 11, marginTop: 4 }, children: ["Kolory: ", result.extractedColors.map((c) => (jsx("span", { style: { display: 'inline-block', width: 12, height: 12, background: c,
419
+ border: '1px solid #ccc', borderRadius: 2, marginRight: 4, verticalAlign: 'middle' } }, c)))] }))] }))] }));
420
+ };
421
+
422
+ export { NiceSvgToCode, convertSvgToCode, useSvgToCode };
423
+ //# sourceMappingURL=NiceSvgToCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NiceSvgToCode.js","sources":["../../../src/vector/NiceSvgToCode.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { NiceButton as Ee, NiceModal as ko, NiceTextArea as bo } from '../ui/dist/index.js';
2
3
  import styles from './VectorEditor.module.css.js';
3
4
  import { TOOLS } from './vectorEditorTypes.js';
4
5
  import { ShapeRenderer } from './VectorEditorShapeRenderer.js';
@@ -7,7 +8,7 @@ import VectorEditorMenuBar from './VectorEditorMenuBar.js';
7
8
  import VectorEditorRightPanel from './VectorEditorRightPanel.js';
8
9
  import VectorEditorStatusBar from './VectorEditorStatusBar.js';
9
10
 
10
- const VectorEditor = ({ width: artW = 512, height: artH = 512, className, onSaveToLibrary, }) => {
11
+ const NiceVectorEditor = ({ width: artW = 512, height: artH = 512, className, onSaveToLibrary, }) => {
11
12
  const api = useVectorEditor({ artW, artH, onSaveToLibrary });
12
13
  const { shapes, selId, tool, zoom, px, py, dlgSvg, svgText, gridSize, boxRef, fInp, onDown, onMove, onUp, onWheel, onDblClick, openFile, switchTool, importSVGString, setDlgSvg, setSvgText, } = api;
13
14
  return (jsxs("div", { className: `${styles.root} ${className || ""}`, children: [jsx("input", { ref: fInp, type: "file", accept: ".svg", style: { display: "none" }, onChange: (e) => {
@@ -16,14 +17,16 @@ const VectorEditor = ({ width: artW = 512, height: artH = 512, className, onSave
16
17
  if (f)
17
18
  openFile(f);
18
19
  e.target.value = "";
19
- } }), jsx(VectorEditorMenuBar, { api: api, hasOnSaveToLibrary: !!onSaveToLibrary }), jsxs("div", { className: styles.mainArea, children: [jsx("div", { className: styles.toolbar, children: TOOLS.map((t) => (jsx("button", { className: `${styles.toolBtn} ${tool === t.id ? styles.toolBtnActive : ""}`, onClick: () => switchTool(t.id), title: `${t.label} (${t.key})`, children: t.icon }, t.id))) }), jsx("div", { ref: boxRef, className: styles.canvasContainer, children: jsxs("svg", { viewBox: `0 0 ${artW} ${artH}`, onMouseDown: onDown, onMouseMove: onMove, onMouseUp: onUp, onMouseLeave: () => {
20
+ } }), jsx(VectorEditorMenuBar, { api: api, hasOnSaveToLibrary: !!onSaveToLibrary }), jsxs("div", { className: styles.mainArea, children: [jsx("div", { className: styles.toolbar, children: TOOLS.map((t) => (jsx(Ee, { className: `${styles.toolBtn} ${tool === t.id ? styles.toolBtnActive : ""}`, onClick: () => switchTool(t.id), "aria-label": `${t.label} (${t.key})`, variant: tool === t.id ? "primary" : "ghost", size: "sm", children: t.icon }, t.id))) }), jsx("div", { ref: boxRef, className: styles.canvasContainer, children: jsxs("svg", { viewBox: `0 0 ${artW} ${artH}`, onMouseDown: onDown, onMouseMove: onMove, onMouseUp: onUp, onMouseLeave: () => {
20
21
  /* handled internally via refs */
21
22
  }, onDoubleClick: onDblClick, onWheel: onWheel, onContextMenu: (e) => e.preventDefault(), style: {
22
23
  transform: `translate(${px}px, ${py}px) scale(${zoom})`,
23
24
  transformOrigin: "center center",
24
25
  cursor: tool === "pointer" ? "default" : "crosshair",
25
- }, children: [jsx("rect", { x: 0, y: 0, width: artW, height: artH, fill: "#222" }), zoom >= 2 && (jsxs("g", { opacity: 0.08, children: [Array.from({ length: Math.floor(artW / gridSize) + 1 }, (_, i) => (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) => (jsx("line", { x1: 0, y1: i * gridSize, x2: artW, y2: i * gridSize, stroke: "#fff", strokeWidth: 1 / zoom }, `gy${i}`)))] })), shapes.map((s) => (jsx(ShapeRenderer, { shape: s, selected: s.id === selId, zoom: zoom }, s.id)))] }) }), jsx(VectorEditorRightPanel, { api: api })] }), jsx(VectorEditorStatusBar, { api: api, artW: artW, artH: artH }), dlgSvg && (jsx("div", { className: styles.dialogOverlay, onClick: () => setDlgSvg(false), children: jsxs("div", { className: styles.dialog, onClick: (e) => e.stopPropagation(), children: [jsx("h3", { children: "Paste SVG" }), jsx("label", { children: "Paste SVG source code below:" }), jsx("textarea", { value: svgText, onChange: (e) => setSvgText(e.target.value), placeholder: '<svg xmlns="http://www.w3.org/2000/svg" ...>' }), jsxs("div", { className: styles.dialogActions, children: [jsx("button", { className: styles.btnSecondary, onClick: () => setDlgSvg(false), children: "Cancel" }), jsx("button", { className: styles.btnPrimary, onClick: () => importSVGString(svgText), children: "Import" })] })] }) }))] }));
26
+ }, children: [jsx("rect", { x: 0, y: 0, width: artW, height: artH, fill: "#222" }), zoom >= 2 && (jsxs("g", { opacity: 0.08, children: [Array.from({ length: Math.floor(artW / gridSize) + 1 }, (_, i) => (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) => (jsx("line", { x1: 0, y1: i * gridSize, x2: artW, y2: i * gridSize, stroke: "#fff", strokeWidth: 1 / zoom }, `gy${i}`)))] })), shapes.map((s) => (jsx(ShapeRenderer, { shape: s, selected: s.id === selId, zoom: zoom }, s.id)))] }) }), jsx(VectorEditorRightPanel, { api: api })] }), jsx(VectorEditorStatusBar, { api: api, artW: artW, artH: artH }), jsxs(ko, { open: dlgSvg, onClose: () => setDlgSvg(false), title: "Paste SVG", children: [jsx("label", { children: "Paste SVG source code below:" }), jsx(bo, { value: svgText, onChange: (val) => setSvgText(val), placeholder: '<svg xmlns="http://www.w3.org/2000/svg" ...>' }), jsxs("div", { className: styles.dialogActions, children: [jsx(Ee, { variant: "ghost", onClick: () => setDlgSvg(false), children: "Cancel" }), jsx(Ee, { variant: "primary", onClick: () => importSVGString(svgText), children: "Import" })] })] })] }));
26
27
  };
28
+ /** @deprecated Use NiceVectorEditor */
29
+ const VectorEditor = NiceVectorEditor;
27
30
 
28
- export { VectorEditor };
31
+ export { NiceVectorEditor, VectorEditor };
29
32
  //# sourceMappingURL=VectorEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VectorEditor.js","sources":["../../../src/vector/VectorEditor.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"VectorEditor.js","sources":["../../../src/vector/VectorEditor.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx","NiceButton","NiceModal","NiceTextArea"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- 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"};
1
+ 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"};
2
2
 
3
3
  export { styles as default };
4
4
  //# sourceMappingURL=VectorEditor.module.css.js.map
@@ -1,12 +1,16 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import React from 'react';
3
+ import { NiceButton as Ee, NiceSelect as tn, NiceCheckbox as qi } from '../ui/dist/index.js';
3
4
  import styles from './VectorEditor.module.css.js';
4
5
 
5
6
  const VectorEditorMenuBar$1 = ({ api, hasOnSaveToLibrary }) => {
6
7
  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;
7
8
  // Check if we can perform boolean ops (need 2 shapes selected)
8
9
  const canBool = selId && boolSecondShape && selId !== boolSecondShape;
9
- return (jsxs("div", { className: styles.menuBar, children: [jsx("button", { className: styles.menuBtn, onClick: newCanvas, children: "New" }), jsx("button", { className: styles.menuBtn, onClick: () => { var _a; return (_a = fInp.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "Open SVG" }), jsx("button", { className: styles.menuBtn, onClick: () => setDlgSvg(true), children: "Paste SVG" }), jsx("div", { className: styles.menuSep }), jsx("button", { className: styles.menuBtn, onClick: exportSVG, children: "SVG" }), jsx("button", { className: styles.menuBtn, onClick: exportPNG, children: "PNG" }), jsx("button", { className: styles.menuBtn, onClick: exportJPG, children: "JPG" }), jsx("button", { className: styles.menuBtn, onClick: exportWebP, children: "WebP" }), jsx("button", { className: styles.menuBtn, onClick: exportBMP, children: "BMP" }), jsx("div", { className: styles.menuSep }), jsx("button", { className: styles.menuBtn, onClick: undo, children: "Undo" }), jsx("button", { className: styles.menuBtn, onClick: redo, children: "Redo" }), jsx("div", { className: styles.menuSep }), jsx("button", { className: styles.menuBtn, onClick: duplicateShape, disabled: !selId, title: "Ctrl+D", children: "Dup" }), jsx("button", { className: styles.menuBtn, onClick: copyShape, disabled: !selId, title: "Ctrl+C", children: "Copy" }), jsx("button", { className: styles.menuBtn, onClick: pasteShape, disabled: !hasClipboard, title: "Ctrl+V", children: "Paste" }), jsx("div", { className: styles.menuSep }), jsx("button", { className: styles.menuBtn, onClick: deleteShape, disabled: !selId, children: "Delete" }), jsx("button", { className: styles.menuBtn, onClick: bringToFront, disabled: !selId, children: "\u2191 Front" }), jsx("button", { className: styles.menuBtn, onClick: sendToBack, disabled: !selId, children: "\u2193 Back" }), jsx("div", { className: styles.menuSep }), jsx("button", { className: styles.menuBtn, onClick: flipH, disabled: !selId, title: "Flip H", children: "\u21D4" }), jsx("button", { className: styles.menuBtn, onClick: flipV, disabled: !selId, title: "Flip V", children: "\u21D5" }), jsx("div", { className: styles.menuSep }), jsx("button", { className: styles.menuBtn, onClick: () => alignShapes("left"), disabled: !selId, title: "Align Left", children: "\u25E7" }), jsx("button", { className: styles.menuBtn, onClick: () => alignShapes("center"), disabled: !selId, title: "Align Center", children: "\u25EB" }), jsx("button", { className: styles.menuBtn, onClick: () => alignShapes("right"), disabled: !selId, title: "Align Right", children: "\u25E8" }), jsx("div", { className: styles.menuSep }), shapes.length >= 2 && (jsxs(Fragment, { children: [jsxs("select", { className: styles.menuBtn, value: boolSecondShape || "", onChange: (e) => setBoolSecondShape(e.target.value || null), title: "Pick 2nd shape for boolean", style: { minWidth: 80 }, children: [jsx("option", { value: "", children: "2nd Shape" }), shapes.filter(s => s.id !== selId).map((s, i) => (jsxs("option", { value: s.id, children: ["Shape ", i + 1] }, s.id)))] }), jsx("button", { className: styles.menuBtn, onClick: unionShapes, disabled: !canBool, title: "Union", children: "\u222A" }), jsx("button", { className: styles.menuBtn, onClick: subtractShapes, disabled: !canBool, title: "Subtract", children: "\u2212" }), jsx("button", { className: styles.menuBtn, onClick: intersectShapes, disabled: !canBool, title: "Intersect", children: "\u2229" }), jsx("button", { className: styles.menuBtn, onClick: excludeShapes, disabled: !canBool, title: "Exclude", children: "\u2295" }), jsx("button", { className: styles.menuBtn, onClick: outlineStroke, disabled: !selId, title: "Outline Stroke", children: "\u25AD" }), jsx("div", { className: styles.menuSep })] })), jsxs("label", { className: styles.menuLabel, title: "Snap to Grid", children: [jsx("input", { type: "checkbox", checked: snapGrid, onChange: () => setSnapGrid((v) => !v), style: { marginRight: 3 } }), "Snap"] }), hasOnSaveToLibrary && (jsxs(Fragment, { children: [jsx("div", { className: styles.menuSep }), jsx("button", { className: styles.menuBtn, onClick: saveToLibrary, children: "\uD83D\uDCE6 Save to Library" })] }))] }));
10
+ return (jsxs("div", { className: styles.menuBar, children: [jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: newCanvas, children: "New" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => { var _a; return (_a = fInp.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "Open SVG" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => setDlgSvg(true), children: "Paste SVG" }), jsx("div", { className: styles.menuSep }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: exportSVG, children: "SVG" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: exportPNG, children: "PNG" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: exportJPG, children: "JPG" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: exportWebP, children: "WebP" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: exportBMP, children: "BMP" }), jsx("div", { className: styles.menuSep }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: undo, children: "Undo" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: redo, children: "Redo" }), jsx("div", { className: styles.menuSep }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: duplicateShape, disabled: !selId, "aria-label": "Ctrl+D", children: "Dup" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: copyShape, disabled: !selId, "aria-label": "Ctrl+C", children: "Copy" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: pasteShape, disabled: !hasClipboard, "aria-label": "Ctrl+V", children: "Paste" }), jsx("div", { className: styles.menuSep }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: deleteShape, disabled: !selId, children: "Delete" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: bringToFront, disabled: !selId, children: "\u2191 Front" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: sendToBack, disabled: !selId, children: "\u2193 Back" }), jsx("div", { className: styles.menuSep }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: flipH, disabled: !selId, "aria-label": "Flip H", children: "\u21D4" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: flipV, disabled: !selId, "aria-label": "Flip V", children: "\u21D5" }), jsx("div", { className: styles.menuSep }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => alignShapes("left"), disabled: !selId, "aria-label": "Align Left", children: "\u25E7" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => alignShapes("center"), disabled: !selId, "aria-label": "Align Center", children: "\u25EB" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => alignShapes("right"), disabled: !selId, "aria-label": "Align Right", children: "\u25E8" }), jsx("div", { className: styles.menuSep }), shapes.length >= 2 && (jsxs(Fragment, { children: [jsx(tn, { className: styles.menuBtn, value: boolSecondShape || "", onChange: (val) => setBoolSecondShape(val || null), options: [
11
+ { value: "", label: "2nd Shape" },
12
+ ...shapes.filter(s => s.id !== selId).map((s, i) => ({ value: s.id, label: `Shape ${i + 1}` })),
13
+ ], style: { minWidth: 80 } }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: unionShapes, disabled: !canBool, "aria-label": "Union", children: "\u222A" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: subtractShapes, disabled: !canBool, "aria-label": "Subtract", children: "\u2212" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: intersectShapes, disabled: !canBool, "aria-label": "Intersect", children: "\u2229" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: excludeShapes, disabled: !canBool, "aria-label": "Exclude", children: "\u2295" }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: outlineStroke, disabled: !selId, "aria-label": "Outline Stroke", children: "\u25AD" }), jsx("div", { className: styles.menuSep })] })), jsxs("label", { className: styles.menuLabel, children: [jsx(qi, { checked: snapGrid, onChange: () => setSnapGrid((v) => !v) }), "Snap"] }), hasOnSaveToLibrary && (jsxs(Fragment, { children: [jsx("div", { className: styles.menuSep }), jsx(Ee, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: saveToLibrary, children: "\uD83D\uDCE6 Save to Library" })] }))] }));
10
14
  };
11
15
  var VectorEditorMenuBar = React.memo(VectorEditorMenuBar$1);
12
16