@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.
- package/CHANGELOG.md +147 -1
- package/dist/cjs/animation/AnimatedPerson.js +2 -2
- package/dist/cjs/animation/AnimatedPerson.js.map +1 -1
- package/dist/cjs/animation/AnimationEditor.js +11 -6
- package/dist/cjs/animation/AnimationEditor.js.map +1 -1
- package/dist/cjs/animation/Audience.js +4 -3
- package/dist/cjs/animation/Audience.js.map +1 -1
- package/dist/cjs/animation/BodyRenderer.js +5 -2
- package/dist/cjs/animation/BodyRenderer.js.map +1 -1
- package/dist/cjs/animation/rig/RigPlayer.js +2 -2
- package/dist/cjs/animation/rig/RigPlayer.js.map +1 -1
- package/dist/cjs/animation/rig/RiggedBody.js +2 -2
- package/dist/cjs/animation/rig/RiggedBody.js.map +1 -1
- package/dist/cjs/animation/shapes/heads.js +4 -1
- package/dist/cjs/animation/shapes/heads.js.map +1 -1
- package/dist/cjs/core/LocalUI.js +1 -1
- package/dist/cjs/core/NiceBrushEngine.js +446 -0
- package/dist/cjs/core/NiceBrushEngine.js.map +1 -0
- package/dist/cjs/core/yjsCollaboration.js +292 -0
- package/dist/cjs/core/yjsCollaboration.js.map +1 -0
- package/dist/cjs/font/NiceFontEditor.js +89 -85
- package/dist/cjs/font/NiceFontEditor.js.map +1 -1
- package/dist/cjs/font/fontFormatUtils.js +468 -0
- package/dist/cjs/font/fontFormatUtils.js.map +1 -0
- package/dist/cjs/game/GameAsset2dEditor.js +38 -24
- package/dist/cjs/game/GameAsset2dEditor.js.map +1 -1
- package/dist/cjs/icon/NiceIconEditor.js +218 -133
- package/dist/cjs/icon/NiceIconEditor.js.map +1 -1
- package/dist/cjs/index.js +83 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/nice2dev-ui-graphics.css +1 -1
- package/dist/cjs/photo/NiceAITools.js +446 -0
- package/dist/cjs/photo/NiceAITools.js.map +1 -0
- package/dist/cjs/photo/PhotoEditor.js +2 -2
- package/dist/cjs/photo/PhotoEditor.js.map +1 -1
- package/dist/cjs/pixel/PixelEditor.js +16 -5
- package/dist/cjs/pixel/PixelEditor.js.map +1 -1
- package/dist/cjs/pixel/PixelEditor.module.css.js +1 -1
- package/dist/cjs/pixel/PixelEditorMenuBar.js +2 -1
- package/dist/cjs/pixel/PixelEditorMenuBar.js.map +1 -1
- package/dist/cjs/pixel/PixelEditorRightPanel.js +3 -2
- package/dist/cjs/pixel/PixelEditorRightPanel.js.map +1 -1
- package/dist/cjs/pixel/PixelEditorTimeline.js +2 -1
- package/dist/cjs/pixel/PixelEditorTimeline.js.map +1 -1
- package/dist/cjs/pixel/PixelEditorToolbar.js +2 -1
- package/dist/cjs/pixel/PixelEditorToolbar.js.map +1 -1
- package/dist/cjs/pixel/SpriteGeneratorPanel.js +224 -0
- package/dist/cjs/pixel/SpriteGeneratorPanel.js.map +1 -0
- package/dist/cjs/pixel/animalGeneratorPresets.js +654 -0
- package/dist/cjs/pixel/animalGeneratorPresets.js.map +1 -0
- package/dist/cjs/pixel/buildingGeneratorPresets.js +573 -0
- package/dist/cjs/pixel/buildingGeneratorPresets.js.map +1 -0
- package/dist/cjs/pixel/characterGeneratorPresets.js +563 -0
- package/dist/cjs/pixel/characterGeneratorPresets.js.map +1 -0
- package/dist/cjs/pixel/spriteGeneratorCore.js +297 -0
- package/dist/cjs/pixel/spriteGeneratorCore.js.map +1 -0
- package/dist/cjs/pixel/usePixelEditor.js +16 -0
- package/dist/cjs/pixel/usePixelEditor.js.map +1 -1
- package/dist/cjs/texture/Nice3DTexturePainter.js +123 -79
- package/dist/cjs/texture/Nice3DTexturePainter.js.map +1 -1
- package/dist/cjs/ui/NiceUIDesigner.js +175 -62
- package/dist/cjs/ui/NiceUIDesigner.js.map +1 -1
- package/dist/cjs/ui/dist/index.js +50089 -0
- package/dist/cjs/ui/dist/index.js.map +1 -0
- package/dist/cjs/vector/NiceSvgToCode.js +427 -0
- package/dist/cjs/vector/NiceSvgToCode.js.map +1 -0
- package/dist/cjs/vector/VectorEditor.js +7 -3
- package/dist/cjs/vector/VectorEditor.js.map +1 -1
- package/dist/cjs/vector/VectorEditor.module.css.js +1 -1
- package/dist/cjs/vector/VectorEditorMenuBar.js +5 -1
- package/dist/cjs/vector/VectorEditorMenuBar.js.map +1 -1
- package/dist/cjs/vector/VectorEditorRightPanel.js +23 -19
- package/dist/cjs/vector/VectorEditorRightPanel.js.map +1 -1
- package/dist/esm/animation/AnimatedPerson.js +2 -2
- package/dist/esm/animation/AnimatedPerson.js.map +1 -1
- package/dist/esm/animation/AnimationEditor.js +12 -8
- package/dist/esm/animation/AnimationEditor.js.map +1 -1
- package/dist/esm/animation/Audience.js +5 -4
- package/dist/esm/animation/Audience.js.map +1 -1
- package/dist/esm/animation/BodyRenderer.js +4 -2
- package/dist/esm/animation/BodyRenderer.js.map +1 -1
- package/dist/esm/animation/rig/RigPlayer.js +4 -4
- package/dist/esm/animation/rig/RigPlayer.js.map +1 -1
- package/dist/esm/animation/rig/RiggedBody.js +2 -2
- package/dist/esm/animation/rig/RiggedBody.js.map +1 -1
- package/dist/esm/animation/shapes/heads.js +4 -2
- package/dist/esm/animation/shapes/heads.js.map +1 -1
- package/dist/esm/core/LocalUI.js +4 -4
- package/dist/esm/core/NiceBrushEngine.js +442 -0
- package/dist/esm/core/NiceBrushEngine.js.map +1 -0
- package/dist/esm/core/yjsCollaboration.js +283 -0
- package/dist/esm/core/yjsCollaboration.js.map +1 -0
- package/dist/esm/font/NiceFontEditor.js +89 -85
- package/dist/esm/font/NiceFontEditor.js.map +1 -1
- package/dist/esm/font/fontFormatUtils.js +461 -0
- package/dist/esm/font/fontFormatUtils.js.map +1 -0
- package/dist/esm/game/GameAsset2dEditor.js +38 -25
- package/dist/esm/game/GameAsset2dEditor.js.map +1 -1
- package/dist/esm/icon/NiceIconEditor.js +218 -133
- package/dist/esm/icon/NiceIconEditor.js.map +1 -1
- package/dist/esm/index.js +21 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/nice2dev-ui-graphics.css +1 -1
- package/dist/esm/photo/NiceAITools.js +439 -0
- package/dist/esm/photo/NiceAITools.js.map +1 -0
- package/dist/esm/photo/PhotoEditor.js +2 -2
- package/dist/esm/photo/PhotoEditor.js.map +1 -1
- package/dist/esm/pixel/PixelEditor.js +16 -6
- package/dist/esm/pixel/PixelEditor.js.map +1 -1
- package/dist/esm/pixel/PixelEditor.module.css.js +1 -1
- package/dist/esm/pixel/PixelEditorMenuBar.js +2 -1
- package/dist/esm/pixel/PixelEditorMenuBar.js.map +1 -1
- package/dist/esm/pixel/PixelEditorRightPanel.js +3 -2
- package/dist/esm/pixel/PixelEditorRightPanel.js.map +1 -1
- package/dist/esm/pixel/PixelEditorTimeline.js +2 -1
- package/dist/esm/pixel/PixelEditorTimeline.js.map +1 -1
- package/dist/esm/pixel/PixelEditorToolbar.js +2 -1
- package/dist/esm/pixel/PixelEditorToolbar.js.map +1 -1
- package/dist/esm/pixel/SpriteGeneratorPanel.js +222 -0
- package/dist/esm/pixel/SpriteGeneratorPanel.js.map +1 -0
- package/dist/esm/pixel/animalGeneratorPresets.js +647 -0
- package/dist/esm/pixel/animalGeneratorPresets.js.map +1 -0
- package/dist/esm/pixel/buildingGeneratorPresets.js +566 -0
- package/dist/esm/pixel/buildingGeneratorPresets.js.map +1 -0
- package/dist/esm/pixel/characterGeneratorPresets.js +556 -0
- package/dist/esm/pixel/characterGeneratorPresets.js.map +1 -0
- package/dist/esm/pixel/spriteGeneratorCore.js +279 -0
- package/dist/esm/pixel/spriteGeneratorCore.js.map +1 -0
- package/dist/esm/pixel/usePixelEditor.js +16 -0
- package/dist/esm/pixel/usePixelEditor.js.map +1 -1
- package/dist/esm/texture/Nice3DTexturePainter.js +123 -79
- package/dist/esm/texture/Nice3DTexturePainter.js.map +1 -1
- package/dist/esm/ui/NiceUIDesigner.js +175 -62
- package/dist/esm/ui/NiceUIDesigner.js.map +1 -1
- package/dist/esm/ui/dist/index.js +49686 -0
- package/dist/esm/ui/dist/index.js.map +1 -0
- package/dist/esm/vector/NiceSvgToCode.js +423 -0
- package/dist/esm/vector/NiceSvgToCode.js.map +1 -0
- package/dist/esm/vector/VectorEditor.js +7 -4
- package/dist/esm/vector/VectorEditor.js.map +1 -1
- package/dist/esm/vector/VectorEditor.module.css.js +1 -1
- package/dist/esm/vector/VectorEditorMenuBar.js +5 -1
- package/dist/esm/vector/VectorEditorMenuBar.js.map +1 -1
- package/dist/esm/vector/VectorEditorRightPanel.js +23 -19
- package/dist/esm/vector/VectorEditorRightPanel.js.map +1 -1
- 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":"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"}
|
|
@@ -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
|
|
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(
|
|
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 }),
|
|
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":"
|
|
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","
|
|
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(
|
|
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
|
|