@clipkit/editor 1.0.0
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/LICENSE +201 -0
- package/README.md +51 -0
- package/dist/Editor.d.ts +3 -0
- package/dist/Editor.d.ts.map +1 -0
- package/dist/Editor.js +73 -0
- package/dist/Editor.js.map +1 -0
- package/dist/ExportDialog.d.ts +12 -0
- package/dist/ExportDialog.d.ts.map +1 -0
- package/dist/ExportDialog.js +30 -0
- package/dist/ExportDialog.js.map +1 -0
- package/dist/MotionPathOverlay.d.ts +5 -0
- package/dist/MotionPathOverlay.d.ts.map +1 -0
- package/dist/MotionPathOverlay.js +156 -0
- package/dist/MotionPathOverlay.js.map +1 -0
- package/dist/PerfHud.d.ts +2 -0
- package/dist/PerfHud.d.ts.map +1 -0
- package/dist/PerfHud.js +85 -0
- package/dist/PerfHud.js.map +1 -0
- package/dist/Stage.d.ts +2 -0
- package/dist/Stage.d.ts.map +1 -0
- package/dist/Stage.js +406 -0
- package/dist/Stage.js.map +1 -0
- package/dist/StageOverlay.d.ts +7 -0
- package/dist/StageOverlay.d.ts.map +1 -0
- package/dist/StageOverlay.js +508 -0
- package/dist/StageOverlay.js.map +1 -0
- package/dist/commands.d.ts +18 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +103 -0
- package/dist/commands.js.map +1 -0
- package/dist/configuration.d.ts +9 -0
- package/dist/configuration.d.ts.map +1 -0
- package/dist/configuration.js +21 -0
- package/dist/configuration.js.map +1 -0
- package/dist/controls/AnimationsStack.d.ts +8 -0
- package/dist/controls/AnimationsStack.d.ts.map +1 -0
- package/dist/controls/AnimationsStack.js +188 -0
- package/dist/controls/AnimationsStack.js.map +1 -0
- package/dist/controls/CameraControl.d.ts +19 -0
- package/dist/controls/CameraControl.d.ts.map +1 -0
- package/dist/controls/CameraControl.js +47 -0
- package/dist/controls/CameraControl.js.map +1 -0
- package/dist/controls/CaptionLengthControl.d.ts +5 -0
- package/dist/controls/CaptionLengthControl.d.ts.map +1 -0
- package/dist/controls/CaptionLengthControl.js +11 -0
- package/dist/controls/CaptionLengthControl.js.map +1 -0
- package/dist/controls/CaptionTranscribe.d.ts +2 -0
- package/dist/controls/CaptionTranscribe.d.ts.map +1 -0
- package/dist/controls/CaptionTranscribe.js +95 -0
- package/dist/controls/CaptionTranscribe.js.map +1 -0
- package/dist/controls/ColorPicker.d.ts +17 -0
- package/dist/controls/ColorPicker.d.ts.map +1 -0
- package/dist/controls/ColorPicker.js +354 -0
- package/dist/controls/ColorPicker.js.map +1 -0
- package/dist/controls/ControlRenderer.d.ts +20 -0
- package/dist/controls/ControlRenderer.d.ts.map +1 -0
- package/dist/controls/ControlRenderer.js +106 -0
- package/dist/controls/ControlRenderer.js.map +1 -0
- package/dist/controls/CropControl.d.ts +2 -0
- package/dist/controls/CropControl.d.ts.map +1 -0
- package/dist/controls/CropControl.js +177 -0
- package/dist/controls/CropControl.js.map +1 -0
- package/dist/controls/EffectsStack.d.ts +8 -0
- package/dist/controls/EffectsStack.d.ts.map +1 -0
- package/dist/controls/EffectsStack.js +89 -0
- package/dist/controls/EffectsStack.js.map +1 -0
- package/dist/controls/GradeControl.d.ts +2 -0
- package/dist/controls/GradeControl.d.ts.map +1 -0
- package/dist/controls/GradeControl.js +120 -0
- package/dist/controls/GradeControl.js.map +1 -0
- package/dist/controls/KeyframeDiamond.d.ts +11 -0
- package/dist/controls/KeyframeDiamond.d.ts.map +1 -0
- package/dist/controls/KeyframeDiamond.js +87 -0
- package/dist/controls/KeyframeDiamond.js.map +1 -0
- package/dist/controls/LightingControls.d.ts +24 -0
- package/dist/controls/LightingControls.d.ts.map +1 -0
- package/dist/controls/LightingControls.js +108 -0
- package/dist/controls/LightingControls.js.map +1 -0
- package/dist/controls/ShapePresetControl.d.ts +4 -0
- package/dist/controls/ShapePresetControl.d.ts.map +1 -0
- package/dist/controls/ShapePresetControl.js +30 -0
- package/dist/controls/ShapePresetControl.js.map +1 -0
- package/dist/controls/ValueField.d.ts +10 -0
- package/dist/controls/ValueField.d.ts.map +1 -0
- package/dist/controls/ValueField.js +158 -0
- package/dist/controls/ValueField.js.map +1 -0
- package/dist/controls/VolumeControl.d.ts +10 -0
- package/dist/controls/VolumeControl.d.ts.map +1 -0
- package/dist/controls/VolumeControl.js +75 -0
- package/dist/controls/VolumeControl.js.map +1 -0
- package/dist/controls/compound.d.ts +46 -0
- package/dist/controls/compound.d.ts.map +1 -0
- package/dist/controls/compound.js +160 -0
- package/dist/controls/compound.js.map +1 -0
- package/dist/controls/layout.d.ts +38 -0
- package/dist/controls/layout.d.ts.map +1 -0
- package/dist/controls/layout.js +162 -0
- package/dist/controls/layout.js.map +1 -0
- package/dist/controls/primitives.d.ts +83 -0
- package/dist/controls/primitives.d.ts.map +1 -0
- package/dist/controls/primitives.js +194 -0
- package/dist/controls/primitives.js.map +1 -0
- package/dist/controls/transcribe.worker.d.ts +2 -0
- package/dist/controls/transcribe.worker.d.ts.map +1 -0
- package/dist/controls/transcribe.worker.js +22 -0
- package/dist/controls/transcribe.worker.js.map +1 -0
- package/dist/frame/AddElementBar.d.ts +2 -0
- package/dist/frame/AddElementBar.d.ts.map +1 -0
- package/dist/frame/AddElementBar.js +103 -0
- package/dist/frame/AddElementBar.js.map +1 -0
- package/dist/frame/Breadcrumbs.d.ts +2 -0
- package/dist/frame/Breadcrumbs.d.ts.map +1 -0
- package/dist/frame/Breadcrumbs.js +32 -0
- package/dist/frame/Breadcrumbs.js.map +1 -0
- package/dist/frame/GroupFlash.d.ts +2 -0
- package/dist/frame/GroupFlash.d.ts.map +1 -0
- package/dist/frame/GroupFlash.js +65 -0
- package/dist/frame/GroupFlash.js.map +1 -0
- package/dist/frame/Resizable.d.ts +12 -0
- package/dist/frame/Resizable.d.ts.map +1 -0
- package/dist/frame/Resizable.js +37 -0
- package/dist/frame/Resizable.js.map +1 -0
- package/dist/frame/Section.d.ts +23 -0
- package/dist/frame/Section.d.ts.map +1 -0
- package/dist/frame/Section.js +23 -0
- package/dist/frame/Section.js.map +1 -0
- package/dist/frame/ZoomControl.d.ts +9 -0
- package/dist/frame/ZoomControl.d.ts.map +1 -0
- package/dist/frame/ZoomControl.js +15 -0
- package/dist/frame/ZoomControl.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/camera-gizmo.d.ts +15 -0
- package/dist/lib/camera-gizmo.d.ts.map +1 -0
- package/dist/lib/camera-gizmo.js +57 -0
- package/dist/lib/camera-gizmo.js.map +1 -0
- package/dist/lib/camera-tool.d.ts +43 -0
- package/dist/lib/camera-tool.d.ts.map +1 -0
- package/dist/lib/camera-tool.js +80 -0
- package/dist/lib/camera-tool.js.map +1 -0
- package/dist/lib/caption-segments.d.ts +17 -0
- package/dist/lib/caption-segments.d.ts.map +1 -0
- package/dist/lib/caption-segments.js +50 -0
- package/dist/lib/caption-segments.js.map +1 -0
- package/dist/lib/group.d.ts +12 -0
- package/dist/lib/group.d.ts.map +1 -0
- package/dist/lib/group.js +61 -0
- package/dist/lib/group.js.map +1 -0
- package/dist/lib/keyframes.d.ts +29 -0
- package/dist/lib/keyframes.d.ts.map +1 -0
- package/dist/lib/keyframes.js +92 -0
- package/dist/lib/keyframes.js.map +1 -0
- package/dist/lib/sfx-preview.d.ts +18 -0
- package/dist/lib/sfx-preview.d.ts.map +1 -0
- package/dist/lib/sfx-preview.js +74 -0
- package/dist/lib/sfx-preview.js.map +1 -0
- package/dist/lib/shape-presets.d.ts +35 -0
- package/dist/lib/shape-presets.d.ts.map +1 -0
- package/dist/lib/shape-presets.js +81 -0
- package/dist/lib/shape-presets.js.map +1 -0
- package/dist/lib/ungroup.d.ts +12 -0
- package/dist/lib/ungroup.d.ts.map +1 -0
- package/dist/lib/ungroup.js +40 -0
- package/dist/lib/ungroup.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +9 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/panels/AssetsPanel.d.ts +2 -0
- package/dist/panels/AssetsPanel.d.ts.map +1 -0
- package/dist/panels/AssetsPanel.js +108 -0
- package/dist/panels/AssetsPanel.js.map +1 -0
- package/dist/panels/InspectorPanel.d.ts +2 -0
- package/dist/panels/InspectorPanel.d.ts.map +1 -0
- package/dist/panels/InspectorPanel.js +286 -0
- package/dist/panels/InspectorPanel.js.map +1 -0
- package/dist/panels/InterpolationPanel.d.ts +2 -0
- package/dist/panels/InterpolationPanel.d.ts.map +1 -0
- package/dist/panels/InterpolationPanel.js +226 -0
- package/dist/panels/InterpolationPanel.js.map +1 -0
- package/dist/panels/LayersTree.d.ts +4 -0
- package/dist/panels/LayersTree.d.ts.map +1 -0
- package/dist/panels/LayersTree.js +137 -0
- package/dist/panels/LayersTree.js.map +1 -0
- package/dist/panels/LeftRail.d.ts +6 -0
- package/dist/panels/LeftRail.d.ts.map +1 -0
- package/dist/panels/LeftRail.js +35 -0
- package/dist/panels/LeftRail.js.map +1 -0
- package/dist/panels/SourcePanel.d.ts +2 -0
- package/dist/panels/SourcePanel.d.ts.map +1 -0
- package/dist/panels/SourcePanel.js +470 -0
- package/dist/panels/SourcePanel.js.map +1 -0
- package/dist/panels/TimelinePanel.d.ts +11 -0
- package/dist/panels/TimelinePanel.d.ts.map +1 -0
- package/dist/panels/TimelinePanel.js +98 -0
- package/dist/panels/TimelinePanel.js.map +1 -0
- package/dist/panels/assets/SfxBrowser.d.ts +2 -0
- package/dist/panels/assets/SfxBrowser.d.ts.map +1 -0
- package/dist/panels/assets/SfxBrowser.js +49 -0
- package/dist/panels/assets/SfxBrowser.js.map +1 -0
- package/dist/panels/assets/use-assets.d.ts +11 -0
- package/dist/panels/assets/use-assets.d.ts.map +1 -0
- package/dist/panels/assets/use-assets.js +84 -0
- package/dist/panels/assets/use-assets.js.map +1 -0
- package/dist/panels/assets/use-sfx.d.ts +6 -0
- package/dist/panels/assets/use-sfx.d.ts.map +1 -0
- package/dist/panels/assets/use-sfx.js +47 -0
- package/dist/panels/assets/use-sfx.js.map +1 -0
- package/dist/panels/timeline/CanvasTimeline.d.ts +7 -0
- package/dist/panels/timeline/CanvasTimeline.d.ts.map +1 -0
- package/dist/panels/timeline/CanvasTimeline.js +1536 -0
- package/dist/panels/timeline/CanvasTimeline.js.map +1 -0
- package/dist/panels/timeline/Clip.d.ts +37 -0
- package/dist/panels/timeline/Clip.d.ts.map +1 -0
- package/dist/panels/timeline/Clip.js +176 -0
- package/dist/panels/timeline/Clip.js.map +1 -0
- package/dist/panels/timeline/CurveEditor.d.ts +2 -0
- package/dist/panels/timeline/CurveEditor.d.ts.map +1 -0
- package/dist/panels/timeline/CurveEditor.js +233 -0
- package/dist/panels/timeline/CurveEditor.js.map +1 -0
- package/dist/panels/timeline/MixerRail.d.ts +7 -0
- package/dist/panels/timeline/MixerRail.d.ts.map +1 -0
- package/dist/panels/timeline/MixerRail.js +295 -0
- package/dist/panels/timeline/MixerRail.js.map +1 -0
- package/dist/panels/timeline/Waveform.d.ts +11 -0
- package/dist/panels/timeline/Waveform.d.ts.map +1 -0
- package/dist/panels/timeline/Waveform.js +63 -0
- package/dist/panels/timeline/Waveform.js.map +1 -0
- package/dist/panels/timeline/clip-style.d.ts +10 -0
- package/dist/panels/timeline/clip-style.d.ts.map +1 -0
- package/dist/panels/timeline/clip-style.js +20 -0
- package/dist/panels/timeline/clip-style.js.map +1 -0
- package/dist/panels/timeline/filmstrip.d.ts +7 -0
- package/dist/panels/timeline/filmstrip.d.ts.map +1 -0
- package/dist/panels/timeline/filmstrip.js +135 -0
- package/dist/panels/timeline/filmstrip.js.map +1 -0
- package/dist/panels/timeline/timeline-layout.d.ts +65 -0
- package/dist/panels/timeline/timeline-layout.d.ts.map +1 -0
- package/dist/panels/timeline/timeline-layout.js +118 -0
- package/dist/panels/timeline/timeline-layout.js.map +1 -0
- package/dist/types.d.ts +68 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
- package/src/styles.css +185 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// Layers tree (EDITORS B8) — the document's element structure as a
|
|
2
|
+
// flat-style tree: nesting via group expansion, rename (double-click),
|
|
3
|
+
// visibility (the protocol's `visible` field — a DOCUMENT knob),
|
|
4
|
+
// paint-order reorder (▲▼ swap `layer` values — the protocol's actual
|
|
5
|
+
// ordering mechanism; same-layer pairs swap array positions), and
|
|
6
|
+
// group / ungroup. Grouping wraps the selection in a COORDINATE-
|
|
7
|
+
// IDENTITY group (x 0, y 0, anchors 0, time 0) so children render
|
|
8
|
+
// byte-identically; ungroup is enabled ONLY when that exact inverse
|
|
9
|
+
// holds — the tree never silently moves pixels.
|
|
10
|
+
'use client';
|
|
11
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { useMemo, useState } from 'react';
|
|
13
|
+
import { elementLayer, useEditor, useEditorStore, } from '@clipkit/editor-core';
|
|
14
|
+
import { Type, Square, Image as ImageIcon, Film, Music, Folder, Captions, Sparkles, PenTool, Eye, EyeOff, ChevronUp, ChevronDown, Ungroup, Group, } from 'lucide-react';
|
|
15
|
+
import { cn } from '../lib/utils.js';
|
|
16
|
+
const TYPE_ICON = {
|
|
17
|
+
text: Type, shape: Square, image: ImageIcon, video: Film, audio: Music,
|
|
18
|
+
group: Folder, caption: Captions, particles: Sparkles, svg: PenTool,
|
|
19
|
+
};
|
|
20
|
+
export function LayersTree() {
|
|
21
|
+
const actions = useEditor();
|
|
22
|
+
const source = useEditorStore((s) => s.source);
|
|
23
|
+
const selection = useEditorStore((s) => s.selection);
|
|
24
|
+
const [expanded, setExpanded] = useState(new Set());
|
|
25
|
+
const [renaming, setRenaming] = useState(null);
|
|
26
|
+
// Topmost first: layer ascending (layer 1 = front/on top), array order as tiebreak.
|
|
27
|
+
const top = useMemo(() => [...source.elements].sort((a, b) => elementLayer(a) - elementLayer(b) ||
|
|
28
|
+
source.elements.indexOf(a) - source.elements.indexOf(b)), [source]);
|
|
29
|
+
const writeElements = (next) => actions.patchSource({ elements: next });
|
|
30
|
+
// ── Reorder: swap the paint-order carriers of two elements ────────
|
|
31
|
+
const swapPaint = (a, b) => {
|
|
32
|
+
// Layers are unique per container, so a and b always differ — swap their
|
|
33
|
+
// layer values. (No array-position fallback: there are no layer ties.)
|
|
34
|
+
const la = elementLayer(a);
|
|
35
|
+
const lb = elementLayer(b);
|
|
36
|
+
const next = source.elements.map((el) => el === a ? { ...el, layer: lb } : el === b ? { ...el, layer: la } : el);
|
|
37
|
+
writeElements(next);
|
|
38
|
+
};
|
|
39
|
+
// ── Group / ungroup ────────────────────────────────────────────────
|
|
40
|
+
const selectedTop = top.filter((el) => el.id && selection.includes(el.id));
|
|
41
|
+
const canGroup = selectedTop.length >= 2;
|
|
42
|
+
const groupSelection = () => {
|
|
43
|
+
if (!canGroup)
|
|
44
|
+
return;
|
|
45
|
+
const ids = new Set(selectedTop.map((el) => el.id));
|
|
46
|
+
const children = source.elements.filter((el) => el.id && ids.has(el.id));
|
|
47
|
+
const rest = source.elements.filter((el) => !el.id || !ids.has(el.id));
|
|
48
|
+
const group = {
|
|
49
|
+
type: 'group',
|
|
50
|
+
id: `group-${Date.now().toString(36)}`,
|
|
51
|
+
// Coordinate identity: local space == composition space, child
|
|
52
|
+
// times stay absolute. Children render byte-identically.
|
|
53
|
+
x: 0, y: 0, x_anchor: 0, y_anchor: 0, time: 0,
|
|
54
|
+
layer: Math.max(...children.map((el) => elementLayer(el))),
|
|
55
|
+
elements: children,
|
|
56
|
+
};
|
|
57
|
+
writeElements([...rest, group]);
|
|
58
|
+
actions.selectOne(group.id);
|
|
59
|
+
};
|
|
60
|
+
/** Exact-inverse check: ungrouping must not move pixels. */
|
|
61
|
+
const isIdentityGroup = (g) => {
|
|
62
|
+
if (g.type !== 'group')
|
|
63
|
+
return false;
|
|
64
|
+
const zeroish = (v) => v === undefined || v === 0;
|
|
65
|
+
return (zeroish(g.x) && zeroish(g.y) &&
|
|
66
|
+
zeroish(g.x_anchor) && zeroish(g.y_anchor) &&
|
|
67
|
+
zeroish(g.time) &&
|
|
68
|
+
g.rotation === undefined && g.scale === undefined &&
|
|
69
|
+
g.opacity === undefined && g.clip !== true &&
|
|
70
|
+
g.mask === undefined &&
|
|
71
|
+
g.time_remap === undefined);
|
|
72
|
+
};
|
|
73
|
+
const ungroup = (g) => {
|
|
74
|
+
const next = [];
|
|
75
|
+
for (const el of source.elements) {
|
|
76
|
+
if (el === g)
|
|
77
|
+
next.push(...g.elements);
|
|
78
|
+
else
|
|
79
|
+
next.push(el);
|
|
80
|
+
}
|
|
81
|
+
writeElements(next);
|
|
82
|
+
actions.setSelection(g.elements.map((el) => el.id).filter((id) => !!id));
|
|
83
|
+
};
|
|
84
|
+
// ── Rows ───────────────────────────────────────────────────────────
|
|
85
|
+
const renderRow = (el, depth, siblings, index) => {
|
|
86
|
+
const id = el.id ?? `__anon_${depth}_${index}`;
|
|
87
|
+
const sel = el.id ? selection.includes(el.id) : false;
|
|
88
|
+
const isGroup = el.type === 'group';
|
|
89
|
+
const open = isGroup && expanded.has(id);
|
|
90
|
+
const hidden = el.visible === false;
|
|
91
|
+
const children = isGroup ? el.elements : [];
|
|
92
|
+
const TypeIcon = TYPE_ICON[el.type] ?? Square;
|
|
93
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: cn('group/row flex items-center gap-1 h-7 pr-1 border-b border-border/30 cursor-default', sel ? 'bg-primary/12' : 'hover:bg-card', hidden && 'opacity-50'), style: { paddingLeft: 6 + depth * 12 }, onClick: () => el.id && actions.selectOne(el.id), onDoubleClick: () => el.id && setRenaming(el.id), children: [isGroup ? (_jsx("button", { type: "button", className: "w-3 shrink-0 text-muted-foreground hover:text-foreground", onClick: (e) => {
|
|
94
|
+
e.stopPropagation();
|
|
95
|
+
setExpanded((prev) => {
|
|
96
|
+
const next = new Set(prev);
|
|
97
|
+
if (next.has(id))
|
|
98
|
+
next.delete(id);
|
|
99
|
+
else
|
|
100
|
+
next.add(id);
|
|
101
|
+
return next;
|
|
102
|
+
});
|
|
103
|
+
}, "aria-expanded": open, children: _jsx("svg", { width: "6", height: "6", viewBox: "0 0 8 8", "aria-hidden": "true", className: cn('transition-transform', open && 'rotate-90'), children: _jsx("path", { d: "M2 1 L6 4 L2 7 Z", fill: "currentColor" }) }) })) : (_jsx("span", { className: "w-3 shrink-0" })), _jsx("span", { className: "w-4 shrink-0 grid place-items-center text-muted-foreground", children: _jsx(TypeIcon, { size: 12 }) }), renaming === el.id ? (_jsx("input", { autoFocus: true, className: "flex-1 min-w-0 h-5 bg-transparent border border-primary/50 rounded px-1 text-[11px] outline-none", defaultValue: el.name ?? '', onClick: (e) => e.stopPropagation(), onBlur: (e) => {
|
|
104
|
+
if (el.id) {
|
|
105
|
+
actions.updateElement(el.id, {
|
|
106
|
+
name: e.target.value || undefined,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
setRenaming(null);
|
|
110
|
+
}, onKeyDown: (e) => {
|
|
111
|
+
if (e.key === 'Enter')
|
|
112
|
+
e.target.blur();
|
|
113
|
+
if (e.key === 'Escape')
|
|
114
|
+
setRenaming(null);
|
|
115
|
+
} })) : (_jsx("span", { className: "flex-1 min-w-0 truncate text-[11px] text-foreground/90", children: el.name ?? el.id ?? el.type })), _jsxs("span", { className: "hidden group-hover/row:flex items-center gap-0.5", children: [depth === 0 && (_jsxs(_Fragment, { children: [_jsx(RowBtn, { label: "Raise (swap paint order)", disabled: index === 0, onClick: () => swapPaint(el, siblings[index - 1]), children: _jsx(ChevronUp, { size: 12 }) }), _jsx(RowBtn, { label: "Lower (swap paint order)", disabled: index === siblings.length - 1, onClick: () => swapPaint(el, siblings[index + 1]), children: _jsx(ChevronDown, { size: 12 }) })] })), isGroup && (_jsx(RowBtn, { label: isIdentityGroup(el)
|
|
116
|
+
? 'Ungroup'
|
|
117
|
+
: 'Ungroup disabled — this group transforms its children (ungrouping would move pixels)', disabled: !isIdentityGroup(el), onClick: () => ungroup(el), children: _jsx(Ungroup, { size: 12 }) }))] }), _jsx("button", { type: "button", className: cn('w-5 shrink-0 grid place-items-center', hidden
|
|
118
|
+
? 'text-foreground'
|
|
119
|
+
: 'text-muted-foreground hover:text-foreground'), title: hidden ? 'Show (writes visible)' : 'Hide (writes visible: false)', onClick: (e) => {
|
|
120
|
+
e.stopPropagation();
|
|
121
|
+
if (el.id) {
|
|
122
|
+
actions.updateElement(el.id, {
|
|
123
|
+
visible: hidden ? undefined : false,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}, children: hidden ? _jsx(EyeOff, { size: 14 }) : _jsx(Eye, { size: 14 }) })] }), open &&
|
|
127
|
+
children.map((child, ci) => renderRow(child, depth + 1, children, ci))] }, id));
|
|
128
|
+
};
|
|
129
|
+
return (_jsxs("div", { className: "flex flex-col h-full overflow-y-auto", children: [_jsxs("div", { className: "flex items-center justify-between h-7 px-2 border-b border-border shrink-0", children: [_jsxs("span", { className: "text-[10px] text-muted-foreground", children: [source.elements.length, " elements"] }), _jsxs("button", { type: "button", className: "h-5 px-1.5 rounded inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground hover:bg-card transition disabled:opacity-30", disabled: !canGroup, title: "Group selection (coordinate-identity wrapper)", onClick: groupSelection, children: [_jsx(Group, { size: 11 }), " Group"] })] }), top.map((el, i) => renderRow(el, 0, top, i))] }));
|
|
130
|
+
}
|
|
131
|
+
function RowBtn({ label, disabled, onClick, children, }) {
|
|
132
|
+
return (_jsx("button", { type: "button", className: "w-4 h-4 grid place-items-center text-[8px] text-muted-foreground/60 hover:text-foreground disabled:opacity-20", title: label, disabled: disabled, onClick: (e) => {
|
|
133
|
+
e.stopPropagation();
|
|
134
|
+
onClick();
|
|
135
|
+
}, children: children }));
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=LayersTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayersTree.js","sourceRoot":"","sources":["../../src/panels/LayersTree.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type LeftRailTabId = 'assets' | 'layers' | 'source';
|
|
2
|
+
export declare function LeftRail({ onActiveTabChange, }: {
|
|
3
|
+
/** Fires on tab switches — the shell auto-widens for Source. */
|
|
4
|
+
onActiveTabChange?: (tab: LeftRailTabId) => void;
|
|
5
|
+
}): import("react").JSX.Element | null;
|
|
6
|
+
//# sourceMappingURL=LeftRail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeftRail.d.ts","sourceRoot":"","sources":["../../src/panels/LeftRail.tsx"],"names":[],"mappings":"AAcA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAG3D,wBAAgB,QAAQ,CAAC,EACvB,iBAAiB,GAClB,EAAE;IACD,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CAClD,sCAkDA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Left panel — tabbed Assets / Layers / Source per the design refs
|
|
2
|
+
// (Source ruled in by Ian 2026-06-11: the B10 JSON pane lives here as
|
|
3
|
+
// a third tab rather than a separate dock). B1 shipped the frame; the
|
|
4
|
+
// bin (B9) is still pending, the tree (B8) and JSON pane (B10) are in.
|
|
5
|
+
'use client';
|
|
6
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { useState } from 'react';
|
|
8
|
+
import { useConfiguration } from '../configuration.js';
|
|
9
|
+
import { cn } from '../lib/utils.js';
|
|
10
|
+
import { AssetsPanel } from './AssetsPanel.js';
|
|
11
|
+
import { LayersTree } from './LayersTree.js';
|
|
12
|
+
import { SourcePanel } from './SourcePanel.js';
|
|
13
|
+
export function LeftRail({ onActiveTabChange, }) {
|
|
14
|
+
const { configuration } = useConfiguration();
|
|
15
|
+
const tabs = [];
|
|
16
|
+
if (configuration.views.assets)
|
|
17
|
+
tabs.push({ id: 'assets', label: 'Assets' });
|
|
18
|
+
if (configuration.views.layers)
|
|
19
|
+
tabs.push({ id: 'layers', label: 'Layers' });
|
|
20
|
+
if (configuration.views.json)
|
|
21
|
+
tabs.push({ id: 'source', label: 'Source' });
|
|
22
|
+
const [active, setActive] = useState(tabs[0]?.id ?? 'assets');
|
|
23
|
+
if (tabs.length === 0)
|
|
24
|
+
return null;
|
|
25
|
+
const current = tabs.some((t) => t.id === active) ? active : tabs[0].id;
|
|
26
|
+
return (_jsxs("div", { className: "flex flex-col h-full bg-background", children: [_jsx("div", { className: "flex items-center gap-3 h-9 px-3 border-b border-border shrink-0", children: tabs.map((t) => (_jsx("button", { type: "button", onClick: () => {
|
|
27
|
+
setActive(t.id);
|
|
28
|
+
onActiveTabChange?.(t.id);
|
|
29
|
+
}, className: cn('text-[11px] font-medium transition-colors', current === t.id
|
|
30
|
+
? 'text-foreground'
|
|
31
|
+
: 'text-muted-foreground hover:text-foreground'), children: t.label }, t.id))) }), _jsx("div", { className: cn('flex-1 min-h-0',
|
|
32
|
+
// CodeMirror owns its own scroller; the other tabs scroll here.
|
|
33
|
+
current === 'source' ? 'overflow-hidden' : 'overflow-y-auto'), children: current === 'source' ? (_jsx(SourcePanel, {})) : current === 'layers' ? (_jsx(LayersTree, {})) : (_jsx(AssetsPanel, {})) })] }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=LeftRail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeftRail.js","sourceRoot":"","sources":["../../src/panels/LeftRail.tsx"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AAEvE,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,MAAM,UAAU,QAAQ,CAAC,EACvB,iBAAiB,GAIlB;IACC,MAAM,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAwC,EAAE,CAAC;IACrD,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7E,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7E,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,QAAQ,CAAC,CAAC;IACrE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;IAEzE,OAAO,CACL,eAAK,SAAS,EAAC,oCAAoC,aACjD,cAAK,SAAS,EAAC,kEAAkE,YAC9E,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACf,iBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;wBACZ,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAChB,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5B,CAAC,EACD,SAAS,EAAE,EAAE,CACX,2CAA2C,EAC3C,OAAO,KAAK,CAAC,CAAC,EAAE;wBACd,CAAC,CAAC,iBAAiB;wBACnB,CAAC,CAAC,6CAA6C,CAClD,YAEA,CAAC,CAAC,KAAK,IAbH,CAAC,CAAC,EAAE,CAcF,CACV,CAAC,GACE,EACN,cACE,SAAS,EAAE,EAAE,CACX,gBAAgB;gBAChB,gEAAgE;gBAChE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAC7D,YAEA,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CACtB,KAAC,WAAW,KAAG,CAChB,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CACzB,KAAC,UAAU,KAAG,CACf,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,KAAG,CAChB,GACG,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SourcePanel.d.ts","sourceRoot":"","sources":["../../src/panels/SourcePanel.tsx"],"names":[],"mappings":"AAgSA,wBAAgB,WAAW,gCAyP1B"}
|