@nice2dev/ui-graphics 1.0.4 → 1.0.5
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/dist/cjs/animation/AnimationEditor.js +1 -1
- package/dist/cjs/animation/Audience.js +1 -1
- package/dist/cjs/core/LocalUI.js +1 -1
- package/dist/cjs/core/yjsCollaboration.js +2 -2
- package/dist/cjs/core/yjsCollaboration.js.map +1 -1
- package/dist/cjs/game/GameAsset2dEditor.js +1 -1
- package/dist/cjs/node_modules/lib0/array.js +103 -0
- package/dist/cjs/node_modules/lib0/array.js.map +1 -0
- package/dist/cjs/node_modules/lib0/binary.js +42 -0
- package/dist/cjs/node_modules/lib0/binary.js.map +1 -0
- package/dist/cjs/node_modules/lib0/broadcastchannel.js +121 -0
- package/dist/cjs/node_modules/lib0/broadcastchannel.js.map +1 -0
- package/dist/cjs/node_modules/lib0/buffer.js +103 -0
- package/dist/cjs/node_modules/lib0/buffer.js.map +1 -0
- package/dist/cjs/node_modules/lib0/conditions.js +18 -0
- package/dist/cjs/node_modules/lib0/conditions.js.map +1 -0
- package/dist/cjs/node_modules/lib0/decoding.js +460 -0
- package/dist/cjs/node_modules/lib0/decoding.js.map +1 -0
- package/dist/cjs/node_modules/lib0/dom.js +55 -0
- package/dist/cjs/node_modules/lib0/dom.js.map +1 -0
- package/dist/cjs/node_modules/lib0/encoding.js +688 -0
- package/dist/cjs/node_modules/lib0/encoding.js.map +1 -0
- package/dist/cjs/node_modules/lib0/environment.js +129 -0
- package/dist/cjs/node_modules/lib0/environment.js.map +1 -0
- package/dist/cjs/node_modules/lib0/error.js +37 -0
- package/dist/cjs/node_modules/lib0/error.js.map +1 -0
- package/dist/cjs/node_modules/lib0/function.js +135 -0
- package/dist/cjs/node_modules/lib0/function.js.map +1 -0
- package/dist/cjs/node_modules/lib0/iterator.js +52 -0
- package/dist/cjs/node_modules/lib0/iterator.js.map +1 -0
- package/dist/cjs/node_modules/lib0/logging.common.js +63 -0
- package/dist/cjs/node_modules/lib0/logging.common.js.map +1 -0
- package/dist/cjs/node_modules/lib0/logging.js +128 -0
- package/dist/cjs/node_modules/lib0/logging.js.map +1 -0
- package/dist/cjs/node_modules/lib0/map.js +108 -0
- package/dist/cjs/node_modules/lib0/map.js.map +1 -0
- package/dist/cjs/node_modules/lib0/math.js +44 -0
- package/dist/cjs/node_modules/lib0/math.js.map +1 -0
- package/dist/cjs/node_modules/lib0/number.js +21 -0
- package/dist/cjs/node_modules/lib0/number.js.map +1 -0
- package/dist/cjs/node_modules/lib0/object.js +132 -0
- package/dist/cjs/node_modules/lib0/object.js.map +1 -0
- package/dist/cjs/node_modules/lib0/observable.js +168 -0
- package/dist/cjs/node_modules/lib0/observable.js.map +1 -0
- package/dist/cjs/node_modules/lib0/pair.js +33 -0
- package/dist/cjs/node_modules/lib0/pair.js.map +1 -0
- package/dist/cjs/node_modules/lib0/prng.js +95 -0
- package/dist/cjs/node_modules/lib0/prng.js.map +1 -0
- package/dist/cjs/node_modules/lib0/promise.js +33 -0
- package/dist/cjs/node_modules/lib0/promise.js.map +1 -0
- package/dist/cjs/node_modules/lib0/random.js +28 -0
- package/dist/cjs/node_modules/lib0/random.js.map +1 -0
- package/dist/cjs/node_modules/lib0/schema.js +1168 -0
- package/dist/cjs/node_modules/lib0/schema.js.map +1 -0
- package/dist/cjs/node_modules/lib0/set.js +12 -0
- package/dist/cjs/node_modules/lib0/set.js.map +1 -0
- package/dist/cjs/node_modules/lib0/storage.js +79 -0
- package/dist/cjs/node_modules/lib0/storage.js.map +1 -0
- package/dist/cjs/node_modules/lib0/string.js +94 -0
- package/dist/cjs/node_modules/lib0/string.js.map +1 -0
- package/dist/cjs/node_modules/lib0/symbol.js +15 -0
- package/dist/cjs/node_modules/lib0/symbol.js.map +1 -0
- package/dist/cjs/node_modules/lib0/time.js +18 -0
- package/dist/cjs/node_modules/lib0/time.js.map +1 -0
- package/dist/cjs/node_modules/lib0/trait/equality.js +32 -0
- package/dist/cjs/node_modules/lib0/trait/equality.js.map +1 -0
- package/dist/cjs/node_modules/lib0/url.js +20 -0
- package/dist/cjs/node_modules/lib0/url.js.map +1 -0
- package/dist/cjs/node_modules/lib0/webcrypto.js +8 -0
- package/dist/cjs/node_modules/lib0/webcrypto.js.map +1 -0
- package/dist/cjs/node_modules/y-protocols/auth.js +27 -0
- package/dist/cjs/node_modules/y-protocols/auth.js.map +1 -0
- package/dist/cjs/node_modules/y-protocols/awareness.js +277 -0
- package/dist/cjs/node_modules/y-protocols/awareness.js.map +1 -0
- package/dist/cjs/node_modules/y-protocols/sync.js +149 -0
- package/dist/cjs/node_modules/y-protocols/sync.js.map +1 -0
- package/dist/cjs/node_modules/y-websocket/src/y-websocket.js +521 -0
- package/dist/cjs/node_modules/y-websocket/src/y-websocket.js.map +1 -0
- package/dist/cjs/node_modules/yjs/dist/yjs.js +10399 -0
- package/dist/cjs/node_modules/yjs/dist/yjs.js.map +1 -0
- package/dist/cjs/packages/ui/dist/index.js +65997 -0
- package/dist/cjs/packages/ui/dist/index.js.map +1 -0
- package/dist/cjs/pixel/PixelEditor.js +1 -1
- package/dist/cjs/pixel/PixelEditorMenuBar.js +1 -1
- package/dist/cjs/pixel/PixelEditorRightPanel.js +1 -1
- package/dist/cjs/pixel/PixelEditorTimeline.js +1 -1
- package/dist/cjs/pixel/PixelEditorToolbar.js +1 -1
- package/dist/cjs/pixel/SpriteGeneratorPanel.js +1 -1
- package/dist/cjs/vector/VectorEditor.js +1 -1
- package/dist/cjs/vector/VectorEditorMenuBar.js +1 -1
- package/dist/cjs/vector/VectorEditorRightPanel.js +1 -1
- package/dist/esm/animation/AnimationEditor.js +5 -5
- package/dist/esm/animation/Audience.js +2 -2
- package/dist/esm/core/LocalUI.js +4 -4
- package/dist/esm/core/yjsCollaboration.js +2 -2
- package/dist/esm/core/yjsCollaboration.js.map +1 -1
- package/dist/esm/game/GameAsset2dEditor.js +19 -19
- package/dist/esm/node_modules/lib0/array.js +95 -0
- package/dist/esm/node_modules/lib0/array.js.map +1 -0
- package/dist/esm/node_modules/lib0/binary.js +30 -0
- package/dist/esm/node_modules/lib0/binary.js.map +1 -0
- package/dist/esm/node_modules/lib0/broadcastchannel.js +117 -0
- package/dist/esm/node_modules/lib0/broadcastchannel.js.map +1 -0
- package/dist/esm/node_modules/lib0/buffer.js +96 -0
- package/dist/esm/node_modules/lib0/buffer.js.map +1 -0
- package/dist/esm/node_modules/lib0/conditions.js +16 -0
- package/dist/esm/node_modules/lib0/conditions.js.map +1 -0
- package/dist/esm/node_modules/lib0/decoding.js +439 -0
- package/dist/esm/node_modules/lib0/decoding.js.map +1 -0
- package/dist/esm/node_modules/lib0/dom.js +48 -0
- package/dist/esm/node_modules/lib0/dom.js.map +1 -0
- package/dist/esm/node_modules/lib0/encoding.js +663 -0
- package/dist/esm/node_modules/lib0/encoding.js.map +1 -0
- package/dist/esm/node_modules/lib0/environment.js +121 -0
- package/dist/esm/node_modules/lib0/environment.js.map +1 -0
- package/dist/esm/node_modules/lib0/error.js +33 -0
- package/dist/esm/node_modules/lib0/error.js.map +1 -0
- package/dist/esm/node_modules/lib0/function.js +130 -0
- package/dist/esm/node_modules/lib0/function.js.map +1 -0
- package/dist/esm/node_modules/lib0/iterator.js +48 -0
- package/dist/esm/node_modules/lib0/iterator.js.map +1 -0
- package/dist/esm/node_modules/lib0/logging.common.js +52 -0
- package/dist/esm/node_modules/lib0/logging.common.js.map +1 -0
- package/dist/esm/node_modules/lib0/logging.js +115 -0
- package/dist/esm/node_modules/lib0/logging.js.map +1 -0
- package/dist/esm/node_modules/lib0/map.js +102 -0
- package/dist/esm/node_modules/lib0/map.js.map +1 -0
- package/dist/esm/node_modules/lib0/math.js +37 -0
- package/dist/esm/node_modules/lib0/math.js.map +1 -0
- package/dist/esm/node_modules/lib0/number.js +17 -0
- package/dist/esm/node_modules/lib0/number.js.map +1 -0
- package/dist/esm/node_modules/lib0/object.js +119 -0
- package/dist/esm/node_modules/lib0/object.js.map +1 -0
- package/dist/esm/node_modules/lib0/observable.js +165 -0
- package/dist/esm/node_modules/lib0/observable.js.map +1 -0
- package/dist/esm/node_modules/lib0/pair.js +30 -0
- package/dist/esm/node_modules/lib0/pair.js.map +1 -0
- package/dist/esm/node_modules/lib0/prng.js +87 -0
- package/dist/esm/node_modules/lib0/prng.js.map +1 -0
- package/dist/esm/node_modules/lib0/promise.js +31 -0
- package/dist/esm/node_modules/lib0/promise.js.map +1 -0
- package/dist/esm/node_modules/lib0/random.js +25 -0
- package/dist/esm/node_modules/lib0/random.js.map +1 -0
- package/dist/esm/node_modules/lib0/schema.js +1113 -0
- package/dist/esm/node_modules/lib0/schema.js.map +1 -0
- package/dist/esm/node_modules/lib0/set.js +10 -0
- package/dist/esm/node_modules/lib0/set.js.map +1 -0
- package/dist/esm/node_modules/lib0/storage.js +75 -0
- package/dist/esm/node_modules/lib0/storage.js.map +1 -0
- package/dist/esm/node_modules/lib0/string.js +85 -0
- package/dist/esm/node_modules/lib0/string.js.map +1 -0
- package/dist/esm/node_modules/lib0/symbol.js +13 -0
- package/dist/esm/node_modules/lib0/symbol.js.map +1 -0
- package/dist/esm/node_modules/lib0/time.js +16 -0
- package/dist/esm/node_modules/lib0/time.js.map +1 -0
- package/dist/esm/node_modules/lib0/trait/equality.js +29 -0
- package/dist/esm/node_modules/lib0/trait/equality.js.map +1 -0
- package/dist/esm/node_modules/lib0/url.js +18 -0
- package/dist/esm/node_modules/lib0/url.js.map +1 -0
- package/dist/esm/node_modules/lib0/webcrypto.js +6 -0
- package/dist/esm/node_modules/lib0/webcrypto.js.map +1 -0
- package/dist/esm/node_modules/y-protocols/auth.js +24 -0
- package/dist/esm/node_modules/y-protocols/auth.js.map +1 -0
- package/dist/esm/node_modules/y-protocols/awareness.js +271 -0
- package/dist/esm/node_modules/y-protocols/awareness.js.map +1 -0
- package/dist/esm/node_modules/y-protocols/sync.js +138 -0
- package/dist/esm/node_modules/y-protocols/sync.js.map +1 -0
- package/dist/esm/node_modules/y-websocket/src/y-websocket.js +515 -0
- package/dist/esm/node_modules/y-websocket/src/y-websocket.js.map +1 -0
- package/dist/esm/node_modules/yjs/dist/yjs.js +10295 -0
- package/dist/esm/node_modules/yjs/dist/yjs.js.map +1 -0
- package/dist/esm/packages/ui/dist/index.js +65571 -0
- package/dist/esm/packages/ui/dist/index.js.map +1 -0
- package/dist/esm/pixel/PixelEditor.js +3 -3
- package/dist/esm/pixel/PixelEditorMenuBar.js +2 -2
- package/dist/esm/pixel/PixelEditorRightPanel.js +3 -3
- package/dist/esm/pixel/PixelEditorTimeline.js +2 -2
- package/dist/esm/pixel/PixelEditorToolbar.js +2 -2
- package/dist/esm/pixel/SpriteGeneratorPanel.js +8 -8
- package/dist/esm/vector/VectorEditor.js +3 -3
- package/dist/esm/vector/VectorEditorMenuBar.js +3 -3
- package/dist/esm/vector/VectorEditorRightPanel.js +13 -13
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var PixelEditor_module = require('./PixelEditor.module.css.js');
|
|
6
|
-
var index = require('../ui/dist/index.js');
|
|
6
|
+
var index = require('../packages/ui/dist/index.js');
|
|
7
7
|
var usePixelEditor = require('./usePixelEditor.js');
|
|
8
8
|
var PixelEditorMenuBar = require('./PixelEditorMenuBar.js');
|
|
9
9
|
var PixelEditorToolbar = require('./PixelEditorToolbar.js');
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var PixelEditor_module = require('./PixelEditor.module.css.js');
|
|
6
|
-
var index = require('../ui/dist/index.js');
|
|
6
|
+
var index = require('../packages/ui/dist/index.js');
|
|
7
7
|
|
|
8
8
|
const PixelEditorMenuBar = React.memo(({ api, hasOnSaveToLibrary, onOpenGenerator }) => (jsxRuntime.jsxs("div", { className: PixelEditor_module.menuBar, children: [jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => api.setDlgNew(true), children: "New" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => { var _a; return (_a = api.fInp.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "Open" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.exportAse, children: "Save .ase" }), jsxRuntime.jsx("div", { className: PixelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.exportPNG, children: "PNG" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.exportJPG, children: "JPG" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.exportWebP, children: "WebP" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.exportBMP, children: "BMP" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.exportSVG, children: "SVG" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.exportSheet, children: "Sheet" }), hasOnSaveToLibrary && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: PixelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.saveToLibrary, children: "\uD83D\uDCE6 Save to Library" })] })), jsxRuntime.jsx("div", { className: PixelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.undo, children: "Undo" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.redo, children: "Redo" }), jsxRuntime.jsx("div", { className: PixelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => api.flipCv("h"), children: "Flip H" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => api.flipCv("v"), children: "Flip V" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.rotateCv, children: "Rot 90\u00B0" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.clearCv, children: "Clear" }), jsxRuntime.jsx("div", { className: PixelEditor_module.menuSep }), jsxRuntime.jsxs(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => api.setGrid((g) => !g), children: ["Grid: ", api.grid ? "ON" : "OFF"] }), jsxRuntime.jsx("div", { className: PixelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.doCopy, disabled: !api.sel, children: "Copy" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.doCut, disabled: !api.sel, children: "Cut" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.doPaste, disabled: !api.clipboard.current, children: "Paste" }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: api.doSelectAll, children: "Sel All" }), jsxRuntime.jsx("div", { className: PixelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: onOpenGenerator, children: "\uD83C\uDFA8 Generator" })] })));
|
|
9
9
|
PixelEditorMenuBar.displayName = "PixelEditorMenuBar";
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var PixelEditor_module = require('./PixelEditor.module.css.js');
|
|
6
|
-
var index = require('../ui/dist/index.js');
|
|
6
|
+
var index = require('../packages/ui/dist/index.js');
|
|
7
7
|
var pixelEditorTypes = require('./pixelEditorTypes.js');
|
|
8
8
|
var HSVPicker = require('./HSVPicker.js');
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var PixelEditor_module = require('./PixelEditor.module.css.js');
|
|
6
|
-
var index = require('../ui/dist/index.js');
|
|
6
|
+
var index = require('../packages/ui/dist/index.js');
|
|
7
7
|
|
|
8
8
|
const PixelEditorTimeline = React.memo(({ api }) => (jsxRuntime.jsxs("div", { className: PixelEditor_module.bottomPanel, children: [jsxRuntime.jsxs("div", { className: PixelEditor_module.timelineControls, children: [jsxRuntime.jsx(index.NiceButton, { variant: "ghost", size: "sm", onClick: api.addFrame, children: "+ Frame" }), jsxRuntime.jsx(index.NiceButton, { variant: "ghost", size: "sm", onClick: api.dupFrame, "aria-label": "Duplicate frame", children: "Dup" }), jsxRuntime.jsx(index.NiceButton, { variant: "ghost", size: "sm", onClick: api.rmFrame, "aria-label": "Remove frame", children: "\u2212 Frame" }), jsxRuntime.jsx("div", { className: PixelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { variant: "ghost", size: "sm", onClick: () => api.setPlaying((p) => !p), children: api.playing ? "⏸" : "▶" }), jsxRuntime.jsx("label", { children: "FPS:" }), jsxRuntime.jsx(index.NiceNumberInput, { min: 1, max: 60, value: api.fps, onChange: (val) => api.setFps(val !== null && val !== void 0 ? val : 8), "aria-label": "Frames per second" }), jsxRuntime.jsx("div", { className: PixelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceCheckbox, { checked: api.onion, onChange: (checked) => api.setOnion(checked), label: "Onion" }), jsxRuntime.jsx("div", { style: { flex: 1 } }), jsxRuntime.jsxs("span", { children: [api.fc, " frame", api.fc !== 1 ? "s" : ""] })] }), jsxRuntime.jsx("div", { className: PixelEditor_module.timelineFrames, children: Array.from({ length: api.fc }, (_, fi) => (jsxRuntime.jsxs("div", { className: `${PixelEditor_module.frameThumb} ${fi === api.afi ? PixelEditor_module.frameThumbActive : ""}`, onClick: () => api.setAfi(fi), children: [api.thumbs[fi] && (jsxRuntime.jsx("img", { src: api.thumbs[fi], alt: `Frame ${fi + 1}`, style: { width: 36, height: 36, imageRendering: "pixelated", objectFit: "contain" } })), jsxRuntime.jsx("span", { className: PixelEditor_module.frameNum, children: fi + 1 })] }, fi))) })] })));
|
|
9
9
|
PixelEditorTimeline.displayName = "PixelEditorTimeline";
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var PixelEditor_module = require('./PixelEditor.module.css.js');
|
|
6
|
-
var index = require('../ui/dist/index.js');
|
|
6
|
+
var index = require('../packages/ui/dist/index.js');
|
|
7
7
|
var pixelEditorTypes = require('./pixelEditorTypes.js');
|
|
8
8
|
|
|
9
9
|
const PixelEditorToolbar = React.memo(({ api }) => (jsxRuntime.jsxs("div", { className: PixelEditor_module.toolbar, children: [pixelEditorTypes.TOOLS.map((t) => (jsxRuntime.jsx(index.NiceButton, { className: `${PixelEditor_module.toolBtn} ${api.tool === t.id ? PixelEditor_module.toolBtnActive : ""}`, variant: api.tool === t.id ? 'primary' : 'ghost', size: "sm", onClick: () => api.setTool(t.id), title: `${t.label} (${t.key})`, children: t.icon }, t.id))), jsxRuntime.jsx("div", { className: PixelEditor_module.toolSep }), jsxRuntime.jsx(index.NiceButton, { className: `${PixelEditor_module.toolBtn} ${api.shapeFilled ? PixelEditor_module.toolBtnActive : ""}`, variant: api.shapeFilled ? 'primary' : 'ghost', size: "sm", onClick: () => api.setShapeFilled((f) => !f), title: `${api.shapeFilled ? "Filled" : "Outline"} (F)`, children: api.shapeFilled ? "■" : "□" }), jsxRuntime.jsx("div", { className: PixelEditor_module.toolGroup, children: pixelEditorTypes.SYMMETRY_MODES.map((m) => (jsxRuntime.jsx(index.NiceButton, { className: `${PixelEditor_module.miniBtn} ${api.symmetry === m.id ? PixelEditor_module.miniBtnActive : ""}`, variant: api.symmetry === m.id ? 'primary' : 'ghost', size: "sm", onClick: () => api.setSymmetry(m.id), title: `Symmetry: ${m.label}`, children: m.label.slice(0, 2) }, m.id))) }), jsxRuntime.jsxs("div", { className: PixelEditor_module.colorSwatches, children: [jsxRuntime.jsx("label", { style: { position: "relative", width: 28, height: 28, cursor: "pointer" }, title: "Primary Colour (click for HSV)", children: jsxRuntime.jsx(index.NiceColorPicker, { value: api.col1, onChange: (c) => api.setCol1(c) }) }), jsxRuntime.jsx("label", { style: { position: "relative", width: 22, height: 22, cursor: "pointer" }, title: "Secondary Colour", children: jsxRuntime.jsx(index.NiceColorPicker, { value: api.col2, onChange: (c) => api.setCol2(c) }) }), jsxRuntime.jsx(index.NiceButton, { className: PixelEditor_module.toolBtn, variant: "ghost", size: "sm", onClick: () => {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var PixelEditor_module = require('./PixelEditor.module.css.js');
|
|
6
|
-
var index = require('../ui/dist/index.js');
|
|
6
|
+
var index = require('../packages/ui/dist/index.js');
|
|
7
7
|
var spriteGeneratorCore = require('./spriteGeneratorCore.js');
|
|
8
8
|
var characterGeneratorPresets = require('./characterGeneratorPresets.js');
|
|
9
9
|
var buildingGeneratorPresets = require('./buildingGeneratorPresets.js');
|
|
@@ -1,7 +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
|
+
var index = require('../packages/ui/dist/index.js');
|
|
5
5
|
var VectorEditor_module = require('./VectorEditor.module.css.js');
|
|
6
6
|
var vectorEditorTypes = require('./vectorEditorTypes.js');
|
|
7
7
|
var VectorEditorShapeRenderer = require('./VectorEditorShapeRenderer.js');
|
|
@@ -2,7 +2,7 @@
|
|
|
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
|
+
var index = require('../packages/ui/dist/index.js');
|
|
6
6
|
var VectorEditor_module = require('./VectorEditor.module.css.js');
|
|
7
7
|
|
|
8
8
|
const VectorEditorMenuBar = ({ api, hasOnSaveToLibrary }) => {
|
|
@@ -2,7 +2,7 @@
|
|
|
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
|
+
var index = require('../packages/ui/dist/index.js');
|
|
6
6
|
var VectorEditor_module = require('./VectorEditor.module.css.js');
|
|
7
7
|
var vectorEditorTypes = require('./vectorEditorTypes.js');
|
|
8
8
|
var vectorGradients = require('./vectorGradients.js');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
|
-
import { NiceTextInput as
|
|
3
|
+
import { NiceTextInput as Tt, NiceSlider as so, NiceButton as We, NiceTextArea as Os, NiceSelect as fn, NiceColorPicker as Rn } from '../packages/ui/dist/index.js';
|
|
4
4
|
import { useNiceTranslation } from '../core/i18n.js';
|
|
5
5
|
import NiceAnimatedPerson from './AnimatedPerson.js';
|
|
6
6
|
import { DEFAULT_CHARACTER, VARIANTS } from './characterTypes.js';
|
|
@@ -20,18 +20,18 @@ function ColorInputs({ value, onChange, }) {
|
|
|
20
20
|
const base = clampPalette(value);
|
|
21
21
|
const count = Math.min(3, Math.max(1, (_a = value === null || value === void 0 ? void 0 : value.length) !== null && _a !== void 0 ? _a : 1));
|
|
22
22
|
const view = base.slice(0, count);
|
|
23
|
-
return (jsxs("div", { className: "ntd-ae-color-inputs", children: [jsx("div", { className: "ntd-ae-colors", children: view.map((col, i) => (jsxs("label", { className: "ntd-ae-color-label", children: ["C", i + 1, jsx(
|
|
23
|
+
return (jsxs("div", { className: "ntd-ae-color-inputs", children: [jsx("div", { className: "ntd-ae-colors", children: view.map((col, i) => (jsxs("label", { className: "ntd-ae-color-label", children: ["C", i + 1, jsx(Rn, { value: col, onChange: (color) => {
|
|
24
24
|
const next = [...view];
|
|
25
25
|
next[i] = color;
|
|
26
26
|
onChange(next);
|
|
27
|
-
} })] }, i))) }), jsxs("div", { className: "ntd-ae-color-btns", children: [jsx(
|
|
27
|
+
} })] }, i))) }), jsxs("div", { className: "ntd-ae-color-btns", children: [jsx(We, { variant: "ghost", size: "sm", disabled: count <= 1, onClick: () => onChange(view.slice(0, Math.max(1, count - 1))), children: "-" }), jsx(We, { variant: "ghost", size: "sm", disabled: count >= 3, onClick: () => onChange([...view, view[view.length - 1] || "var(--anim-default-black, #000000)"]), children: "+" })] })] }));
|
|
28
28
|
}
|
|
29
29
|
function Row({ title, children }) {
|
|
30
30
|
return (jsxs("div", { className: "ntd-ae-row", children: [jsx("div", { className: "ntd-ae-row-title", children: title }), jsx("div", { className: "ntd-ae-row-content", children: children })] }));
|
|
31
31
|
}
|
|
32
32
|
function FeatureEditor({ title, feature, variants, onChange, }) {
|
|
33
33
|
const options = variants.map((v) => ({ value: v, label: v }));
|
|
34
|
-
return (jsxs(Row, { title: title, children: [jsx(
|
|
34
|
+
return (jsxs(Row, { title: title, children: [jsx(fn, { className: "ntd-ae-select", value: feature.variant, onChange: (val) => onChange({ ...feature, variant: val }), options: options }), jsx(ColorInputs, { value: feature.colors, onChange: (colors) => onChange({ ...feature, colors }) })] }));
|
|
35
35
|
}
|
|
36
36
|
/* ---------- component ---------- */
|
|
37
37
|
function NiceAnimationEditor({ initialConfig, onChange, storageKey = STORAGE_KEY, onNotify, showJsonPanel = true, showPreview = true, className, style, }) {
|
|
@@ -99,7 +99,7 @@ function NiceAnimationEditor({ initialConfig, onChange, storageKey = STORAGE_KEY
|
|
|
99
99
|
const updateFeature = (key, val) => {
|
|
100
100
|
setCfg((prev) => ({ ...prev, [key]: val }));
|
|
101
101
|
};
|
|
102
|
-
return (jsxs("div", { className: `ntd-animation-editor ${className !== null && className !== void 0 ? className : ""}`, style: style, children: [jsxs("div", { className: "ntd-ae-controls", children: [jsx(Row, { title: t("characterEditor.name", "Name"), children: jsx(
|
|
102
|
+
return (jsxs("div", { className: `ntd-animation-editor ${className !== null && className !== void 0 ? className : ""}`, style: style, children: [jsxs("div", { className: "ntd-ae-controls", children: [jsx(Row, { title: t("characterEditor.name", "Name"), children: jsx(Tt, { className: "ntd-ae-input", value: cfg.name || "", onChange: (val) => setCfg({ ...cfg, name: val }), placeholder: t("characterEditor.namePlaceholder", "Character name") }) }), jsxs(Row, { title: t("characters.size", "Size"), children: [jsx(so, { min: 140, max: 300, value: (_a = cfg.size) !== null && _a !== void 0 ? _a : 180, onChange: (val) => setCfg({ ...cfg, size: val }) }), jsxs("span", { className: "ntd-ae-size-value", children: [(_b = cfg.size) !== null && _b !== void 0 ? _b : 180, "px"] })] }), jsx(FeatureEditor, { title: t("characters.faceShape", "Face"), feature: cfg.face, variants: VARIANTS.face, onChange: (v) => updateFeature("face", v) }), jsx(FeatureEditor, { title: t("characters.hairstyle", "Hair"), feature: cfg.hair, variants: VARIANTS.hair, onChange: (v) => updateFeature("hair", v) }), jsx(FeatureEditor, { title: t("characters.eyes", "Eyes"), feature: cfg.eyes, variants: VARIANTS.eyes, onChange: (v) => updateFeature("eyes", v) }), jsx(FeatureEditor, { title: t("characters.nose", "Nose"), feature: cfg.nose, variants: VARIANTS.nose, onChange: (v) => updateFeature("nose", v) }), jsx(FeatureEditor, { title: t("characters.mouth", "Mouth"), feature: cfg.mouth, variants: VARIANTS.mouth, onChange: (v) => updateFeature("mouth", v) }), jsx(FeatureEditor, { title: t("characters.clothing", "Outfit"), feature: cfg.outfit, variants: VARIANTS.outfit, onChange: (v) => updateFeature("outfit", v) }), jsx(FeatureEditor, { title: t("characters.headwear", "Headwear"), feature: cfg.headwear, variants: VARIANTS.headwear, onChange: (v) => updateFeature("headwear", v) }), jsx(FeatureEditor, { title: t("characters.prop", "Prop"), feature: cfg.prop, variants: VARIANTS.prop, onChange: (v) => updateFeature("prop", v) }), jsxs("div", { className: "ntd-ae-action-row", children: [jsxs(We, { className: "ntd-ae-btn", variant: "ghost", onClick: randomizeColors, children: ["\uD83C\uDFB2 ", t("characterEditor.randomizeColors", "Randomize colors")] }), jsxs(We, { className: "ntd-ae-btn", variant: "ghost", onClick: downloadJson, children: ["\u2B07 ", t("characters.downloadJson", "Download JSON")] })] }), showJsonPanel && (jsxs("div", { className: "ntd-ae-json-panel", children: [jsx("div", { className: "ntd-ae-json-label", children: t("characterEditor.jsonSection", "JSON") }), jsx(Os, { className: "ntd-ae-textarea", value: json, onChange: (val) => setJson(val) }), jsxs("div", { className: "ntd-ae-json-actions", children: [jsx(We, { className: "ntd-ae-btn", variant: "primary", onClick: applyJson, children: t("characterEditor.applyJson", "Apply JSON") }), jsx(We, { className: "ntd-ae-btn", variant: "ghost", onClick: () => navigator.clipboard.writeText(JSON.stringify(cfg, null, 2)), children: t("characterEditor.copyToClipboard", "Copy") })] })] }))] }), showPreview && (jsxs("div", { className: "ntd-ae-preview", children: [jsx("div", { className: "ntd-ae-preview-label", children: t("characterEditor.preview", "Preview") }), jsx(NiceAnimatedPerson, { character: cfg, score: 10, startPose: "idle" })] }))] }));
|
|
103
103
|
}
|
|
104
104
|
/** @deprecated Use NiceAnimationEditor */
|
|
105
105
|
const AnimationEditor = NiceAnimationEditor;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { NiceButton as
|
|
3
|
+
import { NiceButton as We } from '../packages/ui/dist/index.js';
|
|
4
4
|
import NiceAnimatedPerson from './AnimatedPerson.js';
|
|
5
5
|
import { DEFAULT_CHARACTER } from './characterTypes.js';
|
|
6
6
|
import { runRounds, seq } from './choreoDSL.js';
|
|
@@ -51,7 +51,7 @@ const NiceAudience = ({ count = 36, columns = 12 }) => {
|
|
|
51
51
|
display: "grid",
|
|
52
52
|
gap: 8,
|
|
53
53
|
gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,
|
|
54
|
-
}, children: people.map((c, i) => (jsx(NiceAnimatedPerson, { character: c, score: 10, startPose: "idle", onReady: (fx) => (refs.current[i] = fx) }, i))) }), jsxs("div", { style: { display: "flex", gap: 8 }, children: [jsx(
|
|
54
|
+
}, children: people.map((c, i) => (jsx(NiceAnimatedPerson, { character: c, score: 10, startPose: "idle", onReady: (fx) => (refs.current[i] = fx) }, i))) }), jsxs("div", { style: { display: "flex", gap: 8 }, children: [jsx(We, { variant: "ghost", size: "sm", onClick: wave, children: "Wave" }), jsx(We, { variant: "ghost", size: "sm", onClick: cheer, children: "Cheer" })] })] }));
|
|
55
55
|
};
|
|
56
56
|
|
|
57
57
|
export { NiceAudience as default };
|
package/dist/esm/core/LocalUI.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useCallback } from 'react';
|
|
3
|
-
import { NiceButton as
|
|
3
|
+
import { NiceButton as We, NiceSlider as so, NiceTextArea as Os } from '../packages/ui/dist/index.js';
|
|
4
4
|
|
|
5
5
|
const variantMap = {
|
|
6
6
|
"dark": "secondary",
|
|
@@ -15,7 +15,7 @@ const sizeMap = {
|
|
|
15
15
|
"md": "md",
|
|
16
16
|
};
|
|
17
17
|
const Button = ({ variant = "dark", size = "md", className = "", children, disabled, onClick, title, style, }) => {
|
|
18
|
-
return (jsx(
|
|
18
|
+
return (jsx(We, { variant: variantMap[variant], size: sizeMap[size], className: className, disabled: disabled, onClick: onClick, "aria-label": title, style: style, children: children }));
|
|
19
19
|
};
|
|
20
20
|
const RangeInput = ({ accentColor, style, className = "", value, min = 0, max = 100, step = 1, onChange, onMouseUp, }) => {
|
|
21
21
|
const handleChange = useCallback((val) => {
|
|
@@ -31,7 +31,7 @@ const RangeInput = ({ accentColor, style, className = "", value, min = 0, max =
|
|
|
31
31
|
onMouseUp({});
|
|
32
32
|
}
|
|
33
33
|
}, [onChange, onMouseUp]);
|
|
34
|
-
return (jsx(
|
|
34
|
+
return (jsx(so, { value: typeof value === "number" ? value : Number(value) || 0, min: Number(min), max: Number(max), step: Number(step), className: className, style: { ...style, "--nice-accent": accentColor }, onChange: handleChange, showValue: false }));
|
|
35
35
|
};
|
|
36
36
|
const TextArea = ({ className = "", value, onChange, rows, placeholder, disabled, style, }) => {
|
|
37
37
|
const handleChange = useCallback((newValue) => {
|
|
@@ -43,7 +43,7 @@ const TextArea = ({ className = "", value, onChange, rows, placeholder, disabled
|
|
|
43
43
|
onChange(syntheticEvent);
|
|
44
44
|
}
|
|
45
45
|
}, [onChange]);
|
|
46
|
-
return (jsx(
|
|
46
|
+
return (jsx(Os, { className: className, value: typeof value === "string" ? value : String(value !== null && value !== void 0 ? value : ""), onChange: handleChange, rows: rows, placeholder: placeholder, disabled: disabled, style: style }));
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
export { Button, RangeInput, TextArea };
|
|
@@ -108,7 +108,7 @@ function useYjsCollaboration(config) {
|
|
|
108
108
|
var _a, _b, _c, _d;
|
|
109
109
|
try {
|
|
110
110
|
// Dynamic import — allows the package to be optional
|
|
111
|
-
const Y = await import('yjs');
|
|
111
|
+
const Y = await import('../node_modules/yjs/dist/yjs.js');
|
|
112
112
|
const doc = new Y.Doc();
|
|
113
113
|
docRef.current = doc;
|
|
114
114
|
const objectsMap = doc.getMap('objects');
|
|
@@ -174,7 +174,7 @@ function useYjsCollaboration(config) {
|
|
|
174
174
|
// Connect provider
|
|
175
175
|
if (config.provider.type === 'websocket' && config.provider.serverUrl) {
|
|
176
176
|
try {
|
|
177
|
-
const wsModule = await import('y-websocket');
|
|
177
|
+
const wsModule = await import('../node_modules/y-websocket/src/y-websocket.js');
|
|
178
178
|
const provider = new wsModule.WebsocketProvider(config.provider.serverUrl, config.provider.roomId, doc);
|
|
179
179
|
providerRef.current = provider;
|
|
180
180
|
(_b = (_a = provider).on) === null || _b === void 0 ? void 0 : _b.call(_a, 'status', (e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yjsCollaboration.js","sources":["../../../src/core/yjsCollaboration.ts"],"sourcesContent":[null],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"yjsCollaboration.js","sources":["../../../src/core/yjsCollaboration.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;AAaG;AAsJH;AAEA;;;AAGG;AACG,SAAU,iBAAiB,CAC/B,UAAgB,EAChB,QAAgB,EAChB,OAAkC,EAClC,GAAS,EAAA;AAET,IAAA,GAAG,CAAC,QAAQ,CAAC,MAAK;QAChB,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAwC;QAChF,IAAI,QAAQ,EAAE;YACZ,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE;AAC3C,YAAA,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;QACnC;AACF,IAAA,CAAC,CAAC;AACJ;AAEA;;AAEG;SACa,SAAS,CACvB,UAAgB,EAChB,MAAwB,EACxB,GAAS,EAAA;AAET,IAAA,GAAG,CAAC,QAAQ,CAAC,MAAK;AAChB,QAAA,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;AAC1C,IAAA,CAAC,CAAC;AACJ;AAEA;;AAEG;SACa,YAAY,CAC1B,UAAgB,EAChB,QAAgB,EAChB,GAAS,EAAA;AAET,IAAA,GAAG,CAAC,QAAQ,CAAC,MAAK;AAChB,QAAA,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7B,IAAA,CAAC,CAAC;AACJ;AAcA;;AAEG;SACa,WAAW,CACzB,UAAgB,EAChB,OAAkE,EAClE,GAAS,EAAA;AAET,IAAA,GAAG,CAAC,QAAQ,CAAC,MAAK;QAChB,KAAK,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE;YACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAwC;YAC1E,IAAI,QAAQ,EAAE;AACZ,gBAAA,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;YACjD;QACF;AACF,IAAA,CAAC,CAAC;AACJ;AAEA;AAEA;;AAEG;SACa,YAAY,CAC1B,SAAoB,EACpB,CAAS,EACT,CAAS,EAAA;IAET,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAChD,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACtD;AAEA;;AAEG;AACG,SAAU,eAAe,CAC7B,SAAoB,EACpB,WAAqB,EAAA;AAErB,IAAA,SAAS,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC;AACxD;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAChC,SAAoB,EACpB,aAAqB,EAAA;IAErB,MAAM,SAAS,GAAmB,EAAE;IACpC,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAI;QAChD,IAAI,QAAQ,KAAK,aAAa,IAAI,KAAK,CAAC,MAAM,EAAE;AAC9C,YAAA,SAAS,CAAC,IAAI,CAAC,KAAgC,CAAC;QAClD;AACF,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,SAAS;AAClB;AAiBA;;;;;AAKG;AACG,SAAU,mBAAmB,CACjC,MAA8B,EAAA;IAE9B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAqB,EAAE,CAAC;IAC9D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC;IAC5D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC/C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAE7C,IAAA,MAAM,MAAM,GAAG,MAAM,CAAc,IAAI,CAAC;AACxC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC;AACnD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAqB,IAAI,CAAC;AAChD,IAAA,MAAM,aAAa,GAAG,MAAM,CAAc,IAAI,CAAC;AAC/C,IAAA,MAAM,WAAW,GAAG,MAAM,CAAiC,IAAI,CAAC;;IAGhE,SAAS,CAAC,MAAK;QACb,IAAI,SAAS,GAAG,KAAK;AAErB,QAAA,eAAe,IAAI,GAAA;;AACjB,YAAA,IAAI;;AAEF,gBAAA,MAAM,CAAC,GAAG,MAAM,OAAO,iCAAK,CAAC;AAC7B,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,EAAqB;AAC1C,gBAAA,MAAM,CAAC,OAAO,GAAG,GAAG;gBAEpB,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AACxC,gBAAA,aAAa,CAAC,OAAO,GAAG,UAAU;;;AAIlC,gBAAA,MAAM,aAAa,GAAc;AAC/B,oBAAA,WAAW,EAAE;wBACX,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,KAAK,EAAE,MAAM,CAAC,SAAS;AACvB,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,SAAS,EAAE,EAAE;AACb,wBAAA,UAAU,EAAE,QAAQ;AACpB,wBAAA,QAAQ,EAAE,KAAK;AACf,wBAAA,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,qBAAA;oBACD,OAAO,EAAE,IAAI,GAAG,EAAE;oBAClB,UAAU,EAAE,IAAI,GAAG,EAA6C;oBAEhE,aAAa,CAAC,KAAK,EAAA,EAAK,IAAY,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC;oBAC3D,kBAAkB,CAAC,KAAK,EAAE,KAAK,IAAI,IAAK,IAAY,CAAC,WAAW;wBAAG,IAAY,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC7G,oBAAA,aAAa,KAAK,OAAQ,IAAY,CAAC,WAAW,CAAC,CAAC,CAAC;AACrD,oBAAA,SAAS,KAAK,OAAQ,IAAY,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC7C,EAAE,CAAC,KAAK,EAAE,OAAO,EAAA;wBACf,IAAI,CAAE,IAAY,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;4BAAG,IAAY,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;AACvF,wBAAA,IAAY,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,OAAO,CAAC;oBACnD,CAAC;oBACD,GAAG,CAAC,KAAK,EAAE,OAAO,YAAI,CAAA,EAAA,GAAC,IAAY,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC7E,OAAO,GAAA,EAAM,IAAY,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBACnC;AACd,gBAAA,YAAY,CAAC,OAAO,GAAG,aAAa;;AAGpC,gBAAA,IAAI;oBACF,MAAM,OAAO,GAAG,IAAK,CAAS,CAAC,WAAW,CAAC,UAAU,CAA2B;AAChF,oBAAA,OAAO,CAAC,OAAO,GAAG,OAAO;AACzB,oBAAA,OAAO,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAK;wBAClC,IAAI,CAAC,SAAS,EAAE;AACd,4BAAA,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAC7B,4BAAA,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;wBAC/B;AACF,oBAAA,CAAC,CAAC;gBACJ;AAAE,gBAAA,OAAA,EAAA,EAAM;;gBAER;;AAGA,gBAAA,UAAU,CAAC,OAAO,CAAC,MAAK;oBACtB,IAAI,CAAC,SAAS,EAAE;wBACd,MAAM,IAAI,GAAuB,EAAE;wBACnC,UAAU,CAAC,OAAO,EAAE;AACpB,wBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE;wBAChC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;4BACrC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,IAAI,IAAK,GAAc,EAAE;AAC7D,gCAAA,IAAI,CAAC,IAAI,CAAC,GAAuB,CAAC;4BACpC;wBACF;AACA,wBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;wBACxC,UAAU,CAAC,IAAI,CAAC;oBAClB;AACF,gBAAA,CAAC,CAAC;;AAGF,gBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE;AACrE,oBAAA,IAAI;AACF,wBAAA,MAAM,QAAQ,GAAG,MAAM,OAAO,gDAAa,CAAC;wBAC5C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,iBAAiB,CAC7C,MAAM,CAAC,QAAQ,CAAC,SAAS,EACzB,MAAM,CAAC,QAAQ,CAAC,MAAM,EACtB,GAAU,CACX;AACD,wBAAA,WAAW,CAAC,OAAO,GAAG,QAAQ;wBAC9B,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,QAAgB,EAAC,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,QAAQ,EAAE,CAAC,CAAqB,KAAI;AACzD,4BAAA,IAAI,CAAC,SAAS;AAAE,gCAAA,cAAc,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;AAC1D,wBAAA,CAAC,CAAC;wBACF,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,QAAgB,EAAC,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,MAAM,EAAE,CAAC,MAAe,KAAI;AACjD,4BAAA,IAAI,CAAC,SAAS;gCAAE,WAAW,CAAC,MAAM,CAAC;AACrC,wBAAA,CAAC,CAAC;oBACJ;AAAE,oBAAA,OAAA,EAAA,EAAM;;wBAEN,cAAc,CAAC,KAAK,CAAC;wBACrB,WAAW,CAAC,IAAI,CAAC;oBACnB;gBACF;qBAAO;oBACL,cAAc,CAAC,KAAK,CAAC;oBACrB,WAAW,CAAC,IAAI,CAAC;gBACnB;YACF;AAAE,YAAA,OAAA,EAAA,EAAM;;gBAEN,cAAc,CAAC,KAAK,CAAC;gBACrB,WAAW,CAAC,IAAI,CAAC;YACnB;QACF;AAEA,QAAA,IAAI,EAAE;AAEN,QAAA,OAAO,MAAK;;YACV,SAAS,GAAG,IAAI;AAChB,YAAA,CAAA,EAAA,GAAA,WAAW,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,EAAE;AAC9B,YAAA,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,EAAE;AAC/B,YAAA,CAAA,EAAA,GAAA,OAAO,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,EAAE;AAC1B,YAAA,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,EAAE;AAC3B,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;AACvE,QAAA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AAEtD,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,GAAqB,KAAI;QACxD,IAAI,aAAa,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE;YAC3C,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;QACvD;aAAO;;AAEL,YAAA,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1E;IACF,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,OAAkC,KAAI;QACpF,IAAI,aAAa,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE;AAC3C,YAAA,iBAAiB,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;QACvE;aAAO;AACL,YAAA,UAAU,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/E;IACF,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,EAAU,KAAI;QAChD,IAAI,aAAa,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE;YAC3C,YAAY,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;QACzD;aAAO;YACL,UAAU,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD;IACF,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,OAAkE,KAAI;QACvG,IAAI,aAAa,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE;YAC3C,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;QAC7D;aAAO;AACL,YAAA,UAAU,CAAC,CAAC,IAAI,KAAI;gBAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/C,KAAK,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE;oBACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5B,oBAAA,IAAI,QAAQ;AAAE,wBAAA,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;gBACxD;gBACA,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC9D,YAAA,CAAC,CAAC;QACJ;IACF,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAS,EAAE,CAAS,KAAI;QAC1D,IAAI,YAAY,CAAC,OAAO;YAAE,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,GAAa,KAAI;QACtD,IAAI,YAAY,CAAC,OAAO;AAAE,YAAA,eAAe,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC;IACtE,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,MAAM,GAAG,WAAW,CAAC,MAAK,EAAA,IAAA,EAAA,CAAA,CAAG,MAAA,OAAO,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAClE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAK,EAAA,IAAA,EAAA,CAAA,CAAG,MAAA,OAAO,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAElE,OAAO;AACL,QAAA,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE;AACrE,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,WAAW,EAAE,aAAa;AAC1B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,eAAe,EAAE,iBAAiB;AAClC,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,IAAI,EAAE,MAAM;QACZ,WAAW;KACZ;AACH;;;;"}
|
|
@@ -2,14 +2,14 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useRef, useState, useMemo, useEffect, useCallback } from 'react';
|
|
3
3
|
import styles from './GameAsset2dEditor.module.css.js';
|
|
4
4
|
import { useGameAssetEditor } from './useGameAssetEditor.js';
|
|
5
|
-
import { NiceButton as
|
|
5
|
+
import { NiceButton as We, NiceTextInput as Tt, NiceSelect as fn, NiceNumberInput as ir } from '../packages/ui/dist/index.js';
|
|
6
6
|
|
|
7
7
|
/* ────────────────────────────────────────────────────────────────
|
|
8
8
|
MENU BAR
|
|
9
9
|
──────────────────────────────────────────────────────────────── */
|
|
10
10
|
const MenuBar = ({ api }) => {
|
|
11
11
|
const fileInputRef = useRef(null);
|
|
12
|
-
return (jsxs("div", { className: styles.menuBar, children: [jsx("h3", { children: "\uD83C\uDFAE Game Asset Editor" }), jsxs("div", { className: styles.menuGroup, children: [jsx(
|
|
12
|
+
return (jsxs("div", { className: styles.menuBar, children: [jsx("h3", { children: "\uD83C\uDFAE Game Asset Editor" }), jsxs("div", { className: styles.menuGroup, children: [jsx(We, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => api.newProject('New Project'), children: "\uD83D\uDCC4 New" }), jsx(We, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "\uD83D\uDCC2 Open" }), jsx(We, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: api.saveProject, children: "\uD83D\uDCBE Save" })] }), jsx("div", { className: styles.spacer }), jsxs("div", { className: styles.menuGroup, children: [jsx(We, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: api.undo, disabled: !api.canUndo, children: "\u21A9 Undo" }), jsx(We, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: api.redo, disabled: !api.canRedo, children: "\u21AA Redo" })] }), jsx("input", { ref: fileInputRef, type: "file", accept: ".json", style: { display: 'none' }, onChange: e => {
|
|
13
13
|
var _a;
|
|
14
14
|
const file = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0];
|
|
15
15
|
if (file)
|
|
@@ -27,7 +27,7 @@ const ModeTabs = ({ api }) => {
|
|
|
27
27
|
{ id: 'animation', label: 'Animation', icon: '🎬' },
|
|
28
28
|
{ id: 'effects', label: 'Effects', icon: '✨' },
|
|
29
29
|
];
|
|
30
|
-
return (jsx("div", { className: styles.modeTabs, children: modes.map(mode => (jsxs(
|
|
30
|
+
return (jsx("div", { className: styles.modeTabs, children: modes.map(mode => (jsxs(We, { className: `${styles.modeTab} ${api.editorState.mode === mode.id ? styles.active : ''}`, variant: api.editorState.mode === mode.id ? 'primary' : 'ghost', onClick: () => api.setMode(mode.id), children: [mode.icon, " ", mode.label] }, mode.id))) }));
|
|
31
31
|
};
|
|
32
32
|
/* ────────────────────────────────────────────────────────────────
|
|
33
33
|
TILE MAP TOOLBAR
|
|
@@ -42,7 +42,7 @@ const TileMapToolbar = ({ api }) => {
|
|
|
42
42
|
{ id: 'line', icon: '╱', label: 'Line' },
|
|
43
43
|
{ id: 'eyedropper', icon: '💧', label: 'Eyedropper' },
|
|
44
44
|
];
|
|
45
|
-
return (jsxs("div", { className: styles.toolbar, children: [jsx("div", { className: styles.toolGroup, children: tools.map(tool => (jsx(
|
|
45
|
+
return (jsxs("div", { className: styles.toolbar, children: [jsx("div", { className: styles.toolGroup, children: tools.map(tool => (jsx(We, { className: `${styles.toolBtn} ${api.editorState.tileMapTool === tool.id ? styles.active : ''}`, variant: api.editorState.tileMapTool === tool.id ? 'primary' : 'ghost', size: "sm", onClick: () => api.setTileMapTool(tool.id), title: tool.label, children: tool.icon }, tool.id))) }), jsx("div", { className: styles.spacer }), jsx(We, { className: `${styles.toolBtn} ${api.editorState.showGrid ? styles.active : ''}`, variant: api.editorState.showGrid ? 'primary' : 'ghost', size: "sm", onClick: api.toggleGrid, title: "Toggle Grid", children: "\u229E" }), jsx(We, { className: `${styles.toolBtn} ${api.editorState.showCollision ? styles.active : ''}`, variant: api.editorState.showCollision ? 'primary' : 'ghost', size: "sm", onClick: api.toggleCollision, title: "Show Collision", children: "\u25C7" }), jsx(We, { className: `${styles.toolBtn} ${api.editorState.snapToGrid ? styles.active : ''}`, variant: api.editorState.snapToGrid ? 'primary' : 'ghost', size: "sm", onClick: api.toggleSnap, title: "Snap to Grid", children: "\u22A1" })] }));
|
|
46
46
|
};
|
|
47
47
|
/* ────────────────────────────────────────────────────────────────
|
|
48
48
|
SPRITE SHEET TOOLBAR
|
|
@@ -50,14 +50,14 @@ const TileMapToolbar = ({ api }) => {
|
|
|
50
50
|
const SpriteSheetToolbar = ({ api }) => {
|
|
51
51
|
const [sliceWidth, setSliceWidth] = useState(16);
|
|
52
52
|
const [sliceHeight, setSliceHeight] = useState(16);
|
|
53
|
-
return (jsxs("div", { className: styles.toolbar, children: [jsxs("div", { className: styles.toolGroup, children: [jsx(
|
|
53
|
+
return (jsxs("div", { className: styles.toolbar, children: [jsxs("div", { className: styles.toolGroup, children: [jsx(We, { className: `${styles.toolBtn} ${api.editorState.spriteSheetTool === 'select' ? styles.active : ''}`, variant: api.editorState.spriteSheetTool === 'select' ? 'primary' : 'ghost', size: "sm", onClick: () => api.setSpriteSheetTool('select'), title: "Select", children: "\u2B1A" }), jsx(We, { className: `${styles.toolBtn} ${api.editorState.spriteSheetTool === 'slice' ? styles.active : ''}`, variant: api.editorState.spriteSheetTool === 'slice' ? 'primary' : 'ghost', size: "sm", onClick: () => api.setSpriteSheetTool('slice'), title: "Manual Slice", children: "\u2702" })] }), jsx("div", { className: styles.spacer }), jsxs("label", { style: { fontSize: 11, color: '#8892a8' }, children: ["Frame size:", jsx(ir, { value: sliceWidth, onChange: val => setSliceWidth(val !== null && val !== void 0 ? val : 16), style: { width: 40, margin: '0 4px' }, className: styles.panelInput }), "\u00D7", jsx(ir, { value: sliceHeight, onChange: val => setSliceHeight(val !== null && val !== void 0 ? val : 16), style: { width: 40, marginLeft: 4 }, className: styles.panelInput })] }), jsx(We, { className: styles.btnSecondary, variant: "ghost", onClick: () => api.autoSlice(sliceWidth, sliceHeight), style: { marginLeft: 8 }, children: "Auto Slice" }), jsx(We, { className: styles.btnSecondary, variant: "ghost", onClick: api.detectSprites, style: { marginLeft: 4 }, children: "Detect Sprites" })] }));
|
|
54
54
|
};
|
|
55
55
|
/* ────────────────────────────────────────────────────────────────
|
|
56
56
|
TILE PALETTE (LEFT PANEL)
|
|
57
57
|
──────────────────────────────────────────────────────────────── */
|
|
58
58
|
const TilePalette = ({ api }) => {
|
|
59
59
|
const fileInputRef = useRef(null);
|
|
60
|
-
return (jsxs("div", { className: styles.leftPanel, children: [jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "Tiles" }), jsx(
|
|
60
|
+
return (jsxs("div", { className: styles.leftPanel, children: [jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "Tiles" }), jsx(We, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "+ Add" })] }), jsx("div", { className: styles.panelContent, children: api.project.tileSets.length === 0 ? (jsxs("div", { className: styles.emptyState, children: [jsx("div", { className: styles.emptyStateText, children: "No tiles yet" }), jsx(We, { className: styles.btnSecondary, variant: "ghost", onClick: () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "Import Tiles" })] })) : (jsx("div", { className: styles.tilePalette, children: api.project.tileSets.map(tile => (jsx("div", { className: `${styles.tileItem} ${api.editorState.selectedTileId === tile.id ? styles.selected : ''}`, onClick: () => api.selectTile(tile.id), title: tile.name, children: jsx("img", { src: tile.thumbnail, alt: tile.name }) }, tile.id))) })) }), jsx("input", { ref: fileInputRef, type: "file", accept: "image/*", style: { display: 'none' }, onChange: e => {
|
|
61
61
|
var _a;
|
|
62
62
|
const file = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0];
|
|
63
63
|
if (file)
|
|
@@ -70,10 +70,10 @@ const TilePalette = ({ api }) => {
|
|
|
70
70
|
──────────────────────────────────────────────────────────────── */
|
|
71
71
|
const LayersPanel = ({ api }) => {
|
|
72
72
|
const activeMap = api.project.tileMaps.find(m => m.id === api.editorState.activeTileMapId);
|
|
73
|
-
return (jsxs("div", { className: styles.rightPanel, children: [jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "Layers" }), jsx(
|
|
73
|
+
return (jsxs("div", { className: styles.rightPanel, children: [jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "Layers" }), jsx(We, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: api.addLayer, disabled: !activeMap, children: "+ Add" })] }), jsx("div", { className: styles.panelContent, children: activeMap ? (jsx("div", { className: styles.layersList, children: [...activeMap.layers].reverse().map(layer => (jsxs("div", { className: `${styles.layerItem} ${api.editorState.activeLayerId === layer.id ? styles.selected : ''}`, onClick: () => api.selectLayer(layer.id), children: [jsx(We, { className: `${styles.layerVisibility} ${!layer.visible ? styles.hidden : ''}`, variant: "ghost", size: "sm", onClick: e => {
|
|
74
74
|
e.stopPropagation();
|
|
75
75
|
api.toggleLayerVisibility(layer.id);
|
|
76
|
-
}, children: layer.visible ? '👁' : '○' }), jsx("span", { className: styles.layerName, children: layer.name }), jsxs("span", { className: styles.layerOpacity, children: [Math.round(layer.opacity * 100), "%"] })] }, layer.id))) })) : (jsx("div", { className: styles.emptyState, children: jsx("div", { className: styles.emptyStateText, children: "No tile map selected" }) })) }), jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "Maps" }), jsx(
|
|
76
|
+
}, children: layer.visible ? '👁' : '○' }), jsx("span", { className: styles.layerName, children: layer.name }), jsxs("span", { className: styles.layerOpacity, children: [Math.round(layer.opacity * 100), "%"] })] }, layer.id))) })) : (jsx("div", { className: styles.emptyState, children: jsx("div", { className: styles.emptyStateText, children: "No tile map selected" }) })) }), jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "Maps" }), jsx(We, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => api.createTileMap('New Map', 32, 32), children: "+ New" })] }), jsx("div", { className: styles.panelContent, children: api.project.tileMaps.map(map => (jsxs("div", { className: `${styles.layerItem} ${api.editorState.activeTileMapId === map.id ? styles.selected : ''}`, onClick: () => api.selectTileMap(map.id), children: [jsx("span", { className: styles.layerName, children: map.name }), jsxs("span", { className: styles.layerOpacity, children: [map.width, "\u00D7", map.height] })] }, map.id))) })] }));
|
|
77
77
|
};
|
|
78
78
|
/* ────────────────────────────────────────────────────────────────
|
|
79
79
|
TILE MAP CANVAS
|
|
@@ -161,7 +161,7 @@ const TileMapCanvas = ({ api }) => {
|
|
|
161
161
|
if (isDragging && (api.editorState.tileMapTool === 'brush' || api.editorState.tileMapTool === 'eraser')) {
|
|
162
162
|
handleCanvasClick(e);
|
|
163
163
|
}
|
|
164
|
-
} })) : (jsxs("div", { className: styles.emptyState, children: [jsx("div", { className: styles.emptyStateText, children: "Create or select a tile map to start editing" }), jsx(
|
|
164
|
+
} })) : (jsxs("div", { className: styles.emptyState, children: [jsx("div", { className: styles.emptyStateText, children: "Create or select a tile map to start editing" }), jsx(We, { className: styles.btnPrimary, variant: "primary", onClick: () => api.createTileMap('New Map', 32, 32), children: "Create Tile Map" })] })) }));
|
|
165
165
|
};
|
|
166
166
|
/* ────────────────────────────────────────────────────────────────
|
|
167
167
|
SPRITE SHEET CANVAS
|
|
@@ -229,7 +229,7 @@ const SpriteSheetCanvas = ({ api }) => {
|
|
|
229
229
|
}, [activeSheet, api]);
|
|
230
230
|
return (jsx("div", { className: styles.viewport, children: activeSheet ? (jsx("canvas", { ref: canvasRef, className: styles.viewportCanvas, style: {
|
|
231
231
|
transform: `translate(-50%, -50%) scale(${api.editorState.zoom})`,
|
|
232
|
-
}, onClick: handleFrameClick })) : (jsxs("div", { className: styles.emptyState, children: [jsx("div", { className: styles.emptyStateText, children: "Import a sprite sheet to start" }), jsx(
|
|
232
|
+
}, onClick: handleFrameClick })) : (jsxs("div", { className: styles.emptyState, children: [jsx("div", { className: styles.emptyStateText, children: "Import a sprite sheet to start" }), jsx(We, { className: styles.btnPrimary, variant: "primary", onClick: () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "Import Sprite Sheet" }), jsx("input", { ref: fileInputRef, type: "file", accept: "image/*", style: { display: 'none' }, onChange: e => {
|
|
233
233
|
var _a;
|
|
234
234
|
const file = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0];
|
|
235
235
|
if (file)
|
|
@@ -242,7 +242,7 @@ const SpriteSheetCanvas = ({ api }) => {
|
|
|
242
242
|
──────────────────────────────────────────────────────────────── */
|
|
243
243
|
const SpriteSheetsList = ({ api }) => {
|
|
244
244
|
const fileInputRef = useRef(null);
|
|
245
|
-
return (jsxs("div", { className: styles.leftPanel, children: [jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "Sprite Sheets" }), jsx(
|
|
245
|
+
return (jsxs("div", { className: styles.leftPanel, children: [jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "Sprite Sheets" }), jsx(We, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "+ Import" })] }), jsx("div", { className: styles.panelContent, children: api.project.spriteSheets.length === 0 ? (jsx("div", { className: styles.emptyState, children: jsx("div", { className: styles.emptyStateText, children: "No sprite sheets" }) })) : (jsx("div", { className: styles.layersList, children: api.project.spriteSheets.map(sheet => (jsxs("div", { className: `${styles.layerItem} ${api.editorState.activeSpriteSheetId === sheet.id ? styles.selected : ''}`, onClick: () => api.selectSpriteSheet(sheet.id), children: [jsx("span", { className: styles.layerName, children: sheet.name }), jsxs("span", { className: styles.layerOpacity, children: [sheet.frames.length, " frames"] })] }, sheet.id))) })) }), jsx("input", { ref: fileInputRef, type: "file", accept: "image/*", style: { display: 'none' }, onChange: e => {
|
|
246
246
|
var _a;
|
|
247
247
|
const file = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0];
|
|
248
248
|
if (file)
|
|
@@ -263,7 +263,7 @@ const FramesPanel = ({ api }) => {
|
|
|
263
263
|
setAnimName('');
|
|
264
264
|
}
|
|
265
265
|
}, [animName, api]);
|
|
266
|
-
return (jsxs("div", { className: styles.rightPanel, children: [jsx("div", { className: styles.panelHeader, children: jsxs("span", { children: ["Frames (", (_a = activeSheet === null || activeSheet === void 0 ? void 0 : activeSheet.frames.length) !== null && _a !== void 0 ? _a : 0, ")"] }) }), jsx("div", { className: styles.panelContent, style: { maxHeight: 200 }, children: activeSheet === null || activeSheet === void 0 ? void 0 : activeSheet.frames.map(frame => (jsxs("div", { className: `${styles.layerItem} ${api.editorState.selectedFrameIds.includes(frame.id) ? styles.selected : ''}`, onClick: () => api.selectFrames([frame.id]), children: [jsx("span", { className: styles.layerName, children: frame.name }), jsxs("span", { className: styles.layerOpacity, children: [frame.width, "\u00D7", frame.height] })] }, frame.id))) }), jsx("div", { className: styles.panelHeader, children: jsx("span", { children: "Animations" }) }), jsxs("div", { className: styles.panelContent, children: [api.editorState.selectedFrameIds.length > 0 && (jsxs("div", { className: styles.panelSection, children: [jsx(
|
|
266
|
+
return (jsxs("div", { className: styles.rightPanel, children: [jsx("div", { className: styles.panelHeader, children: jsxs("span", { children: ["Frames (", (_a = activeSheet === null || activeSheet === void 0 ? void 0 : activeSheet.frames.length) !== null && _a !== void 0 ? _a : 0, ")"] }) }), jsx("div", { className: styles.panelContent, style: { maxHeight: 200 }, children: activeSheet === null || activeSheet === void 0 ? void 0 : activeSheet.frames.map(frame => (jsxs("div", { className: `${styles.layerItem} ${api.editorState.selectedFrameIds.includes(frame.id) ? styles.selected : ''}`, onClick: () => api.selectFrames([frame.id]), children: [jsx("span", { className: styles.layerName, children: frame.name }), jsxs("span", { className: styles.layerOpacity, children: [frame.width, "\u00D7", frame.height] })] }, frame.id))) }), jsx("div", { className: styles.panelHeader, children: jsx("span", { children: "Animations" }) }), jsxs("div", { className: styles.panelContent, children: [api.editorState.selectedFrameIds.length > 0 && (jsxs("div", { className: styles.panelSection, children: [jsx(Tt, { className: styles.panelInput, placeholder: "Animation name...", value: animName, onChange: val => setAnimName(val) }), jsxs(We, { className: styles.btnPrimary, variant: "primary", onClick: createAnimationFromSelection, style: { marginTop: 8, width: '100%' }, disabled: !animName, children: ["Create from ", api.editorState.selectedFrameIds.length, " frames"] })] })), activeSheet === null || activeSheet === void 0 ? void 0 : activeSheet.animations.map(anim => (jsxs("div", { className: styles.layerItem, children: [jsx("span", { className: styles.layerName, children: anim.name }), jsxs("span", { className: styles.layerOpacity, children: [anim.frameIds.length, "f"] }), jsx(We, { className: styles.effectRemove, variant: "ghost", size: "sm", onClick: () => api.removeAnimation(anim.id), children: "\u00D7" })] }, anim.id)))] })] }));
|
|
267
267
|
};
|
|
268
268
|
/* ────────────────────────────────────────────────────────────────
|
|
269
269
|
ANIMATION STATE MACHINE
|
|
@@ -282,7 +282,7 @@ const AnimationStateMachineView = ({ api }) => {
|
|
|
282
282
|
}
|
|
283
283
|
return result;
|
|
284
284
|
}, [api.project.spriteSheets]);
|
|
285
|
-
return (jsxs("div", { style: { display: 'flex', flex: 1, overflow: 'hidden' }, children: [jsxs("div", { className: styles.leftPanel, children: [jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "State Machines" }), jsx("button", { className: styles.menuBtn, onClick: () => api.createStateMachine('New State Machine'), children: "+ New" })] }), jsx("div", { className: styles.panelContent, style: { maxHeight: 150 }, children: api.project.stateMachines.map(sm => (jsxs("div", { className: `${styles.layerItem} ${api.editorState.activeStateMachineId === sm.id ? styles.selected : ''}`, onClick: () => api.selectStateMachine(sm.id), children: [jsx("span", { className: styles.layerName, children: sm.name }), jsxs("span", { className: styles.layerOpacity, children: [sm.states.length, " states"] })] }, sm.id))) }), activeSM && (jsxs(Fragment, { children: [jsx("div", { className: styles.panelHeader, children: jsx("span", { children: "States" }) }), jsxs("div", { className: styles.panelContent, children: [jsxs("div", { className: styles.panelSection, children: [jsx(
|
|
285
|
+
return (jsxs("div", { style: { display: 'flex', flex: 1, overflow: 'hidden' }, children: [jsxs("div", { className: styles.leftPanel, children: [jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "State Machines" }), jsx("button", { className: styles.menuBtn, onClick: () => api.createStateMachine('New State Machine'), children: "+ New" })] }), jsx("div", { className: styles.panelContent, style: { maxHeight: 150 }, children: api.project.stateMachines.map(sm => (jsxs("div", { className: `${styles.layerItem} ${api.editorState.activeStateMachineId === sm.id ? styles.selected : ''}`, onClick: () => api.selectStateMachine(sm.id), children: [jsx("span", { className: styles.layerName, children: sm.name }), jsxs("span", { className: styles.layerOpacity, children: [sm.states.length, " states"] })] }, sm.id))) }), activeSM && (jsxs(Fragment, { children: [jsx("div", { className: styles.panelHeader, children: jsx("span", { children: "States" }) }), jsxs("div", { className: styles.panelContent, children: [jsxs("div", { className: styles.panelSection, children: [jsx(Tt, { className: styles.panelInput, placeholder: "State name...", value: newStateName, onChange: val => setNewStateName(val) }), allAnimations.length > 0 && newStateName && (jsx(fn, { className: styles.panelInput, style: { marginTop: 4 }, onChange: val => {
|
|
286
286
|
if (val) {
|
|
287
287
|
api.addState(newStateName, val);
|
|
288
288
|
setNewStateName('');
|
|
@@ -293,7 +293,7 @@ const AnimationStateMachineView = ({ api }) => {
|
|
|
293
293
|
value: anim.id,
|
|
294
294
|
label: `${anim.sheetName}: ${anim.name}`
|
|
295
295
|
}))
|
|
296
|
-
] }))] }), activeSM.states.map(state => (jsxs("div", { className: `${styles.layerItem} ${api.editorState.selectedStateId === state.id ? styles.selected : ''} ${activeSM.entryStateId === state.id ? styles.entry : ''}`, onClick: () => api.selectState(state.id), children: [jsxs("span", { className: styles.layerName, children: [activeSM.entryStateId === state.id && '▶ ', state.name] }), jsx(
|
|
296
|
+
] }))] }), activeSM.states.map(state => (jsxs("div", { className: `${styles.layerItem} ${api.editorState.selectedStateId === state.id ? styles.selected : ''} ${activeSM.entryStateId === state.id ? styles.entry : ''}`, onClick: () => api.selectState(state.id), children: [jsxs("span", { className: styles.layerName, children: [activeSM.entryStateId === state.id && '▶ ', state.name] }), jsx(We, { className: styles.effectRemove, variant: "ghost", size: "sm", onClick: e => {
|
|
297
297
|
e.stopPropagation();
|
|
298
298
|
api.removeState(state.id);
|
|
299
299
|
}, children: "\u00D7" })] }, state.id)))] })] }))] }), jsx("div", { className: styles.stateGraph, children: activeSM ? (jsxs("svg", { width: "100%", height: "100%", children: [jsx("defs", { children: jsx("marker", { id: "arrowhead", markerWidth: "10", markerHeight: "7", refX: "9", refY: "3.5", orient: "auto", children: jsx("polygon", { points: "0 0, 10 3.5, 0 7", fill: "#4a5a7e" }) }) }), activeSM.transitions.map(trans => {
|
|
@@ -305,12 +305,12 @@ const AnimationStateMachineView = ({ api }) => {
|
|
|
305
305
|
}), activeSM.states.map(state => {
|
|
306
306
|
var _a, _b;
|
|
307
307
|
return (jsx("foreignObject", { x: state.position.x, y: state.position.y, width: 120, height: 50, children: jsxs("div", { className: `${styles.stateNode} ${api.editorState.selectedStateId === state.id ? styles.selected : ''} ${activeSM.entryStateId === state.id ? styles.entry : ''}`, onClick: () => api.selectState(state.id), children: [jsx("div", { className: styles.stateNodeName, children: state.name }), jsx("div", { className: styles.stateNodeAnim, children: (_b = (_a = allAnimations.find(a => a.id === state.animationId)) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : 'No animation' })] }) }, state.id));
|
|
308
|
-
})] })) : (jsx("div", { className: styles.emptyState, children: jsx("div", { className: styles.emptyStateText, children: "Create a state machine to design animation flows" }) })) }), jsxs("div", { className: styles.rightPanel, children: [jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "Parameters" }), jsx(
|
|
308
|
+
})] })) : (jsx("div", { className: styles.emptyState, children: jsx("div", { className: styles.emptyStateText, children: "Create a state machine to design animation flows" }) })) }), jsxs("div", { className: styles.rightPanel, children: [jsxs("div", { className: styles.panelHeader, children: [jsx("span", { children: "Parameters" }), jsx(We, { className: styles.menuBtn, variant: "ghost", size: "sm", onClick: () => api.addParameter('new_param', 'trigger'), disabled: !activeSM, children: "+ Add" })] }), jsx("div", { className: styles.panelContent, children: activeSM === null || activeSM === void 0 ? void 0 : activeSM.parameters.map(param => (jsxs("div", { className: styles.layerItem, children: [jsx("span", { className: styles.layerOpacity, children: param.type }), jsx("span", { className: styles.layerName, children: param.name }), jsx(We, { className: styles.effectRemove, variant: "ghost", size: "sm", onClick: () => api.removeParameter(param.id), children: "\u00D7" })] }, param.id))) }), jsx("div", { className: styles.panelHeader, children: jsx("span", { children: "Transitions" }) }), jsxs("div", { className: styles.panelContent, children: [activeSM === null || activeSM === void 0 ? void 0 : activeSM.transitions.map(trans => {
|
|
309
309
|
var _a, _b;
|
|
310
310
|
const from = activeSM.states.find(s => s.id === trans.fromStateId);
|
|
311
311
|
const to = activeSM.states.find(s => s.id === trans.toStateId);
|
|
312
|
-
return (jsxs("div", { className: styles.layerItem, children: [jsxs("span", { className: styles.layerName, children: [(_a = from === null || from === void 0 ? void 0 : from.name) !== null && _a !== void 0 ? _a : '?', " \u2192 ", (_b = to === null || to === void 0 ? void 0 : to.name) !== null && _b !== void 0 ? _b : '?'] }), jsx(
|
|
313
|
-
}), api.editorState.selectedStateId && (jsxs("div", { className: styles.panelSection, style: { marginTop: 12 }, children: [jsx("label", { className: styles.panelLabel, children: "Add transition to:" }), jsx(
|
|
312
|
+
return (jsxs("div", { className: styles.layerItem, children: [jsxs("span", { className: styles.layerName, children: [(_a = from === null || from === void 0 ? void 0 : from.name) !== null && _a !== void 0 ? _a : '?', " \u2192 ", (_b = to === null || to === void 0 ? void 0 : to.name) !== null && _b !== void 0 ? _b : '?'] }), jsx(We, { className: styles.effectRemove, variant: "ghost", size: "sm", onClick: () => api.removeTransition(trans.id), children: "\u00D7" })] }, trans.id));
|
|
313
|
+
}), api.editorState.selectedStateId && (jsxs("div", { className: styles.panelSection, style: { marginTop: 12 }, children: [jsx("label", { className: styles.panelLabel, children: "Add transition to:" }), jsx(fn, { className: styles.panelInput, onChange: val => {
|
|
314
314
|
if (val && api.editorState.selectedStateId) {
|
|
315
315
|
api.addTransition(api.editorState.selectedStateId, val);
|
|
316
316
|
}
|
|
@@ -339,7 +339,7 @@ const EffectsView = ({ api }) => {
|
|
|
339
339
|
{ type: 'shadow', label: 'Shadow' },
|
|
340
340
|
{ type: 'palette-swap', label: 'Palette Swap' },
|
|
341
341
|
];
|
|
342
|
-
return (jsxs("div", { style: { display: 'flex', flex: 1, overflow: 'hidden' }, children: [jsxs("div", { className: styles.leftPanel, children: [jsx("div", { className: styles.panelHeader, children: jsx("span", { children: "Add Effect" }) }), jsx("div", { className: styles.panelContent, children: effectTypes.map(({ type, label }) => (jsx(
|
|
342
|
+
return (jsxs("div", { style: { display: 'flex', flex: 1, overflow: 'hidden' }, children: [jsxs("div", { className: styles.leftPanel, children: [jsx("div", { className: styles.panelHeader, children: jsx("span", { children: "Add Effect" }) }), jsx("div", { className: styles.panelContent, children: effectTypes.map(({ type, label }) => (jsx(We, { className: styles.layerItem, variant: "ghost", onClick: () => api.addEffect(type), style: { cursor: 'pointer', border: 'none', textAlign: 'left' }, children: jsx("span", { className: styles.layerName, children: label }) }, type))) }), jsx("div", { className: styles.panelHeader, children: jsx("span", { children: "Presets" }) }), jsxs("div", { className: styles.panelContent, children: [jsxs("div", { className: styles.panelSection, children: [jsx(Tt, { className: styles.panelInput, placeholder: "Preset name...", value: presetName, onChange: val => setPresetName(val) }), jsx(We, { className: styles.btnSecondary, variant: "ghost", style: { marginTop: 4, width: '100%' }, onClick: () => {
|
|
343
343
|
if (presetName) {
|
|
344
344
|
api.saveEffectPreset(presetName);
|
|
345
345
|
setPresetName('');
|
|
@@ -352,7 +352,7 @@ const EffectsView = ({ api }) => {
|
|
|
352
352
|
const StatusBar = ({ api }) => {
|
|
353
353
|
const activeMap = api.project.tileMaps.find(m => m.id === api.editorState.activeTileMapId);
|
|
354
354
|
const activeSheet = api.project.spriteSheets.find(s => s.id === api.editorState.activeSpriteSheetId);
|
|
355
|
-
return (jsxs("div", { className: styles.statusBar, children: [jsxs("span", { className: styles.statusItem, children: ["Mode: ", api.editorState.mode] }), api.editorState.mode === 'tilemap' && activeMap && (jsxs(Fragment, { children: [jsxs("span", { className: styles.statusItem, children: ["Map: ", activeMap.name, " (", activeMap.width, "\u00D7", activeMap.height, ")"] }), jsxs("span", { className: styles.statusItem, children: ["Tile: ", activeMap.tileWidth, "\u00D7", activeMap.tileHeight, "px"] })] })), api.editorState.mode === 'spritesheet' && activeSheet && (jsxs(Fragment, { children: [jsxs("span", { className: styles.statusItem, children: ["Sheet: ", activeSheet.name] }), jsxs("span", { className: styles.statusItem, children: ["Selected: ", api.editorState.selectedFrameIds.length, " frames"] })] })), jsxs("div", { className: styles.zoomControl, children: [jsx(
|
|
355
|
+
return (jsxs("div", { className: styles.statusBar, children: [jsxs("span", { className: styles.statusItem, children: ["Mode: ", api.editorState.mode] }), api.editorState.mode === 'tilemap' && activeMap && (jsxs(Fragment, { children: [jsxs("span", { className: styles.statusItem, children: ["Map: ", activeMap.name, " (", activeMap.width, "\u00D7", activeMap.height, ")"] }), jsxs("span", { className: styles.statusItem, children: ["Tile: ", activeMap.tileWidth, "\u00D7", activeMap.tileHeight, "px"] })] })), api.editorState.mode === 'spritesheet' && activeSheet && (jsxs(Fragment, { children: [jsxs("span", { className: styles.statusItem, children: ["Sheet: ", activeSheet.name] }), jsxs("span", { className: styles.statusItem, children: ["Selected: ", api.editorState.selectedFrameIds.length, " frames"] })] })), jsxs("div", { className: styles.zoomControl, children: [jsx(We, { className: styles.zoomBtn, variant: "ghost", size: "sm", onClick: () => api.setZoom(api.editorState.zoom - 0.25), children: "\u2212" }), jsxs("span", { children: [Math.round(api.editorState.zoom * 100), "%"] }), jsx(We, { className: styles.zoomBtn, variant: "ghost", size: "sm", onClick: () => api.setZoom(api.editorState.zoom + 0.25), children: "+" }), jsx(We, { className: styles.zoomBtn, variant: "ghost", size: "sm", onClick: () => api.setZoom(1), children: "\u2299" })] })] }));
|
|
356
356
|
};
|
|
357
357
|
/* ────────────────────────────────────────────────────────────────
|
|
358
358
|
MAIN COMPONENT
|