@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,160 @@
|
|
|
1
|
+
// Compound widgets — bespoke editors for the protocol's structured
|
|
2
|
+
// fields (D2: they register as custom control kinds; the renderer
|
|
3
|
+
// stays one mapping). All of them edit the WHOLE value and commit
|
|
4
|
+
// through onChange(next) — undo treats each edit as one step.
|
|
5
|
+
'use client';
|
|
6
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { useEffect, useRef, useState } from 'react';
|
|
8
|
+
import { cn } from '../lib/utils.js';
|
|
9
|
+
import { CaptionTranscribe } from './CaptionTranscribe.js';
|
|
10
|
+
import { ColorControl, NumberControl, SelectControl, TextControl, } from './primitives.js';
|
|
11
|
+
const ADD_BTN = 'h-5 px-1.5 rounded text-[10px] text-muted-foreground hover:text-foreground hover:bg-card transition';
|
|
12
|
+
const REMOVE_BTN = 'w-4 h-4 grid place-items-center rounded text-muted-foreground/60 hover:text-foreground text-[10px]';
|
|
13
|
+
/** Sub-rows on the panel's grid system: 32px pitch, 8px gaps. */
|
|
14
|
+
function SubRow({ children }) {
|
|
15
|
+
return _jsx("div", { className: "flex items-center gap-2 h-8", children: children });
|
|
16
|
+
}
|
|
17
|
+
function SubLabel({ children }) {
|
|
18
|
+
return (_jsx("span", { className: "text-[10px] text-muted-foreground w-16 shrink-0 truncate", children: children }));
|
|
19
|
+
}
|
|
20
|
+
// ── Gradient (shape.gradient) ───────────────────────────────────────
|
|
21
|
+
const DEFAULT_GRADIENT = {
|
|
22
|
+
type: 'linear',
|
|
23
|
+
angle: 180,
|
|
24
|
+
stops: [
|
|
25
|
+
{ offset: 0, color: '#FFFFFF' },
|
|
26
|
+
{ offset: 1, color: '#000000' },
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
export function GradientControl({ value, onChange, onScrubStart, onScrubEnd, }) {
|
|
30
|
+
const rampRef = useRef(null);
|
|
31
|
+
if (!value) {
|
|
32
|
+
return (_jsx("button", { type: "button", className: ADD_BTN, onClick: () => onChange(DEFAULT_GRADIENT), children: "+ Add" }));
|
|
33
|
+
}
|
|
34
|
+
const stops = value.stops ?? [];
|
|
35
|
+
const patch = (p) => onChange({ ...value, ...p });
|
|
36
|
+
const setStop = (i, p) => {
|
|
37
|
+
const next = stops.map((s, j) => (j === i ? { ...s, ...p } : s));
|
|
38
|
+
patch({ stops: next });
|
|
39
|
+
};
|
|
40
|
+
// The swatch is a fixed horizontal ramp (just shows the colors); the
|
|
41
|
+
// protocol's `angle` now uses the CSS convention directly (0° = to top,
|
|
42
|
+
// clockwise; default 180 = to bottom).
|
|
43
|
+
const sorted = [...stops].sort((a, b) => a.offset - b.offset);
|
|
44
|
+
const rampStops = sorted
|
|
45
|
+
.map((s) => `${s.color} ${s.offset * 100}%`)
|
|
46
|
+
.join(', ');
|
|
47
|
+
// Drag a stop handle along the ramp — writes the stop's literal
|
|
48
|
+
// `offset`, live on the one-undo-step contract.
|
|
49
|
+
const dragStop = (e, i) => {
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
e.stopPropagation();
|
|
52
|
+
onScrubStart?.();
|
|
53
|
+
const ramp = rampRef.current;
|
|
54
|
+
const move = (ev) => {
|
|
55
|
+
if (!ramp)
|
|
56
|
+
return;
|
|
57
|
+
const r = ramp.getBoundingClientRect();
|
|
58
|
+
const off = Math.round(Math.min(1, Math.max(0, (ev.clientX - r.left) / r.width)) * 100) / 100;
|
|
59
|
+
onChange({
|
|
60
|
+
...value,
|
|
61
|
+
stops: stops.map((s, j) => j === i ? { ...s, offset: off } : s),
|
|
62
|
+
}, true);
|
|
63
|
+
};
|
|
64
|
+
const up = () => {
|
|
65
|
+
window.removeEventListener('pointermove', move);
|
|
66
|
+
window.removeEventListener('pointerup', up);
|
|
67
|
+
onScrubEnd?.();
|
|
68
|
+
};
|
|
69
|
+
window.addEventListener('pointermove', move);
|
|
70
|
+
window.addEventListener('pointerup', up);
|
|
71
|
+
};
|
|
72
|
+
return (
|
|
73
|
+
// Boxed like the effects/animations rows (ruled by Ian 2026-06-12).
|
|
74
|
+
_jsxs("div", { className: "flex flex-col w-full border border-border/60 rounded px-2 py-1.5", children: [_jsxs("div", { ref: rampRef, className: "relative h-6 mb-1", children: [_jsx("div", { className: "absolute inset-0 rounded-md", style: {
|
|
75
|
+
background: value.type === 'linear'
|
|
76
|
+
? `linear-gradient(90deg, ${rampStops})`
|
|
77
|
+
: `radial-gradient(circle, ${rampStops})`,
|
|
78
|
+
} }), stops.map((stop, i) => (_jsx("button", { type: "button",
|
|
79
|
+
// The classic gradient-editor knob: white ring + dark
|
|
80
|
+
// outer hairline — visible over ANY stop color, and
|
|
81
|
+
// clearly a control (a subtle ring read as a paint
|
|
82
|
+
// artifact on dark ends).
|
|
83
|
+
className: "absolute top-1/2 -translate-y-1/2 -translate-x-1/2 w-3.5 h-3.5 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.6)] cursor-ew-resize hover:scale-125 transition-transform", style: { left: `${stop.offset * 100}%`, background: stop.color }, title: `Stop ${i + 1} · ${Math.round(stop.offset * 100)}% (drag)`, "aria-label": `Drag stop ${i + 1}`, onPointerDown: (e) => dragStop(e, i) }, i)))] }), _jsxs(SubRow, { children: [_jsx(SubLabel, { children: "Type" }), _jsxs("div", { className: "flex-1 min-w-0 grid grid-cols-2 gap-2", children: [_jsx(SelectControl, { value: value.type, options: ['linear', 'radial'], fluid: true, onChange: (t) => onChange(t === 'linear'
|
|
84
|
+
? { type: 'linear', angle: 180, stops: value.stops }
|
|
85
|
+
: { type: 'radial', cx: 0.5, cy: 0.5, radius: 0.5, stops: value.stops }) }), value.type === 'linear' ? (_jsx(NumberControl, { value: value.angle ?? 180, suffix: "\u00B0", fluid: true, onChange: (v) => patch({ angle: v }) })) : (_jsx(NumberControl, { value: value.radius ?? 0.5, min: 0, max: 1, step: 0.05, fluid: true, onChange: (v) => patch({ radius: v }) }))] })] }), stops.map((stop, i) => (_jsxs(SubRow, { children: [_jsxs(SubLabel, { children: ["Stop ", i + 1] }), _jsxs("div", { className: "flex-1 min-w-0 grid grid-cols-[0.75fr_1.25fr] gap-2 items-center", children: [_jsx(NumberControl, { value: stop.offset, min: 0, max: 1, step: 0.01, fluid: true, onChange: (v) => setStop(i, { offset: v }) }), _jsxs("div", { className: "flex items-center gap-1 min-w-0", children: [_jsx(ColorControl, { value: stop.color, fluid: true, onChange: (c) => setStop(i, { color: c }) }), stops.length > 2 && (_jsx("button", { type: "button", className: REMOVE_BTN, "aria-label": "Remove stop", onClick: () => patch({ stops: stops.filter((_, j) => j !== i) }), children: "\u00D7" }))] })] })] }, i))), _jsxs("div", { className: "flex items-center justify-between", children: [stops.length < 4 ? (_jsx("button", { type: "button", className: ADD_BTN, onClick: () => patch({
|
|
86
|
+
stops: [...stops, { offset: 1, color: '#888888' }],
|
|
87
|
+
}), children: "+ Stop" })) : (_jsx("span", {})), _jsx("button", { type: "button", className: ADD_BTN, onClick: () => onChange(undefined), children: "Remove" })] })] }));
|
|
88
|
+
}
|
|
89
|
+
// ── Box shadow (shape.shadow) ───────────────────────────────────────
|
|
90
|
+
export function BoxShadowControl({ value, onChange, }) {
|
|
91
|
+
if (!value) {
|
|
92
|
+
return (_jsx("button", { type: "button", className: ADD_BTN, onClick: () => onChange({ color: '#00000099', offset_y: 12, blur: 24 }), children: "+ Add" }));
|
|
93
|
+
}
|
|
94
|
+
return (
|
|
95
|
+
// Boxed + on the grid system, matching the gradient subview.
|
|
96
|
+
_jsxs("div", { className: "flex flex-col w-full border border-border/60 rounded px-2 py-1.5", children: [_jsxs(SubRow, { children: [_jsx(SubLabel, { children: "Color" }), _jsx("div", { className: "flex-1 min-w-0", children: _jsx(ColorControl, { value: value.color, fluid: true, onChange: (c) => onChange({ ...value, color: c }) }) })] }), _jsxs(SubRow, { children: [_jsx(SubLabel, { children: "Offset" }), _jsxs("div", { className: "flex-1 min-w-0 grid grid-cols-2 gap-2", children: [_jsx(NumberControl, { value: value.offset_x ?? 0, prefix: "X", suffix: "px", fluid: true, onChange: (v) => onChange({ ...value, offset_x: v }) }), _jsx(NumberControl, { value: value.offset_y ?? 0, prefix: "Y", suffix: "px", fluid: true, onChange: (v) => onChange({ ...value, offset_y: v }) })] })] }), _jsxs(SubRow, { children: [_jsx(SubLabel, { children: "Blur" }), _jsxs("div", { className: "flex-1 min-w-0 grid grid-cols-2 gap-2 items-center", children: [_jsx(NumberControl, { value: value.blur ?? 0, min: 0, suffix: "px", fluid: true, onChange: (v) => onChange({ ...value, blur: v }) }), _jsx("button", { type: "button", className: cn(ADD_BTN, 'justify-self-end'), onClick: () => onChange(undefined), children: "Remove" })] })] })] }));
|
|
97
|
+
}
|
|
98
|
+
// ── Text / caption background (composite: color + radius + padding) ──
|
|
99
|
+
export function TextBackgroundControl({ color, radius, padding, commit, }) {
|
|
100
|
+
if (typeof color !== 'string') {
|
|
101
|
+
return (_jsx("button", { type: "button", className: ADD_BTN, onClick: () => commit({ background_color: '#000000', background_border_radius: 8, background_padding: [16, 8] }, false), children: "+ Add" }));
|
|
102
|
+
}
|
|
103
|
+
const padX = Array.isArray(padding) ? padding[0] : typeof padding === 'number' ? padding : 0;
|
|
104
|
+
const padY = Array.isArray(padding) ? padding[1] : typeof padding === 'number' ? padding : 0;
|
|
105
|
+
// Collapse to a single number when X === Y, else store [x, y].
|
|
106
|
+
const setPad = (nx, ny, live) => commit({ background_padding: nx === ny ? nx : [nx, ny] }, live);
|
|
107
|
+
return (_jsxs("div", { className: "flex flex-col w-full border border-border/60 rounded px-2 py-1.5", children: [_jsxs(SubRow, { children: [_jsx(SubLabel, { children: "Color" }), _jsx("div", { className: "flex-1 min-w-0", children: _jsx(ColorControl, { value: color, fluid: true, onChange: (c, live) => commit({ background_color: c }, live ?? false) }) })] }), _jsxs(SubRow, { children: [_jsx(SubLabel, { children: "Radius" }), _jsx("div", { className: "flex-1 min-w-0", children: _jsx(NumberControl, { value: radius ?? 0, min: 0, suffix: "px", fluid: true, onChange: (v, live) => commit({ background_border_radius: v }, !!live) }) })] }), _jsxs(SubRow, { children: [_jsx(SubLabel, { children: "Padding" }), _jsxs("div", { className: "flex-1 min-w-0 grid grid-cols-2 gap-2", children: [_jsx(NumberControl, { value: padX, prefix: "X", min: 0, suffix: "px", fluid: true, onChange: (v, live) => setPad(v, padY, !!live) }), _jsx(NumberControl, { value: padY, prefix: "Y", min: 0, suffix: "px", fluid: true, onChange: (v, live) => setPad(padX, v, !!live) })] })] }), _jsxs(SubRow, { children: [_jsx(SubLabel, { children: " " }), _jsx("button", { type: "button", className: cn(ADD_BTN, 'justify-self-end'), onClick: () => commit({ background_color: undefined, background_border_radius: undefined, background_padding: undefined }, false), children: "Remove" })] })] }));
|
|
108
|
+
}
|
|
109
|
+
// ── Text reveal mask (text.mask) ────────────────────────────────────
|
|
110
|
+
export function TextMaskControl({ value, onChange, }) {
|
|
111
|
+
if (!value) {
|
|
112
|
+
return (_jsx("button", { type: "button", className: ADD_BTN, onClick: () => onChange({ type: 'linear-wipe', angle: -45, progress: 0, softness: 0.3 }), children: "+ Add" }));
|
|
113
|
+
}
|
|
114
|
+
const progress = typeof value.progress === 'number' ? value.progress : 0;
|
|
115
|
+
return (_jsxs("div", { className: "flex flex-col gap-0.5 w-full", children: [_jsxs(SubRow, { children: [_jsx(SubLabel, { children: "Angle" }), _jsx(NumberControl, { value: value.angle ?? -45, suffix: "\u00B0", onChange: (v) => onChange({ ...value, angle: v }), width: 56 })] }), _jsxs(SubRow, { children: [_jsx(SubLabel, { children: "Progress" }), Array.isArray(value.progress) ? (_jsx("span", { className: "text-[10px] italic text-muted-foreground/70", children: "keyframed" })) : (_jsx(NumberControl, { value: progress, min: 0, max: 1, step: 0.01, onChange: (v) => onChange({ ...value, progress: v }), width: 56 }))] }), _jsxs(SubRow, { children: [_jsx(SubLabel, { children: "Softness" }), _jsx(NumberControl, { value: value.softness ?? 0.3, min: 0, max: 1, step: 0.01, onChange: (v) => onChange({ ...value, softness: v }), width: 56 }), _jsx("button", { type: "button", className: cn(ADD_BTN, 'ml-auto'), onClick: () => onChange(undefined), children: "Remove" })] })] }));
|
|
116
|
+
}
|
|
117
|
+
// ── Caption word table (caption.words) ──────────────────────────────
|
|
118
|
+
export function CaptionWordsControl({ value, onChange, }) {
|
|
119
|
+
const words = value ?? [];
|
|
120
|
+
const setWord = (i, p) => onChange(words.map((w, j) => (j === i ? { ...w, ...p } : w)));
|
|
121
|
+
return (_jsxs("div", { className: "flex flex-col gap-0.5 w-full max-h-72 overflow-y-auto", children: [_jsx(CaptionTranscribe, {}), words.map((w, i) => (_jsxs(SubRow, { children: [_jsx(TextControl, { value: w.text, onChange: (t) => setWord(i, { text: t }), width: 76 }), _jsx(NumberControl, { value: w.start, min: 0, step: 0.01, onChange: (v) => setWord(i, { start: v }), width: 48 }), _jsx(NumberControl, { value: w.end, min: 0, step: 0.01, onChange: (v) => setWord(i, { end: v }), width: 48 }), words.length > 1 && (_jsx("button", { type: "button", className: REMOVE_BTN, "aria-label": "Remove word", onClick: () => onChange(words.filter((_, j) => j !== i)), children: "\u00D7" }))] }, i))), _jsx("button", { type: "button", className: cn(ADD_BTN, 'self-start'), onClick: () => {
|
|
122
|
+
const last = words[words.length - 1];
|
|
123
|
+
const t = last ? last.end : 0;
|
|
124
|
+
onChange([...words, { text: 'word', start: t, end: t + 0.4 }]);
|
|
125
|
+
}, children: "+ Word" })] }));
|
|
126
|
+
}
|
|
127
|
+
// ── Text spans (text.spans) ─────────────────────────────────────────
|
|
128
|
+
export function TextSpansControl({ value, onChange, onScrubStart, onScrubEnd, }) {
|
|
129
|
+
const spans = value ?? [];
|
|
130
|
+
if (spans.length === 0) {
|
|
131
|
+
return (_jsx("button", { type: "button", className: ADD_BTN, onClick: () => onChange([{ text: 'Styled ' }, { text: 'text', fill_color: '#FFB800' }]), children: "+ Add" }));
|
|
132
|
+
}
|
|
133
|
+
const setSpan = (i, p, live = false) => onChange(spans.map((s, j) => (j === i ? { ...s, ...p } : s)), live);
|
|
134
|
+
return (_jsxs("div", { className: "flex flex-col gap-0.5 w-full max-h-56 overflow-y-auto", children: [spans.map((s, i) => (_jsxs(SubRow, { children: [_jsx(TextControl, { value: s.text, live: true, onScrubStart: onScrubStart, onScrubEnd: onScrubEnd, onChange: (t, live) => setSpan(i, { text: t }, live), width: 96 }), _jsx(ColorControl, { value: s.fill_color ?? '#ffffff', onChange: (c) => setSpan(i, { fill_color: c }) }), _jsx("button", { type: "button", className: REMOVE_BTN, "aria-label": "Remove span", onClick: () => {
|
|
135
|
+
const next = spans.filter((_, j) => j !== i);
|
|
136
|
+
onChange(next.length > 0 ? next : undefined);
|
|
137
|
+
}, children: "\u00D7" })] }, i))), _jsx("button", { type: "button", className: cn(ADD_BTN, 'self-start'), onClick: () => onChange([...spans, { text: 'span' }]), children: "+ Span" })] }));
|
|
138
|
+
}
|
|
139
|
+
// ── Multiline text (text.text) ──────────────────────────────────────
|
|
140
|
+
export function TextareaControl({ value, onChange, onScrubStart, onScrubEnd, }) {
|
|
141
|
+
const [draft, setDraft] = useState(value);
|
|
142
|
+
const editing = useRef(false);
|
|
143
|
+
// Adopt external updates only when we're not the one editing, so live
|
|
144
|
+
// self-writes don't fight the cursor.
|
|
145
|
+
useEffect(() => {
|
|
146
|
+
if (!editing.current)
|
|
147
|
+
setDraft(value);
|
|
148
|
+
}, [value]);
|
|
149
|
+
return (_jsx("textarea", { className: "w-full min-h-14 bg-transparent border border-border/60 hover:border-border focus:border-primary/50 rounded px-1.5 py-1 text-[11px] text-foreground/90 outline-none resize-y", value: draft, onFocus: () => {
|
|
150
|
+
editing.current = true;
|
|
151
|
+
onScrubStart?.();
|
|
152
|
+
}, onChange: (e) => {
|
|
153
|
+
setDraft(e.target.value);
|
|
154
|
+
onChange(e.target.value, true); // live preview per keystroke
|
|
155
|
+
}, onBlur: () => {
|
|
156
|
+
editing.current = false;
|
|
157
|
+
onScrubEnd?.();
|
|
158
|
+
}, spellCheck: false }));
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=compound.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compound.js","sourceRoot":"","sources":["../../src/controls/compound.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Source } from '@clipkit/protocol';
|
|
2
|
+
import { Stepper, type ScrubHandlers } from './primitives.js';
|
|
3
|
+
type Patch = Record<string, unknown>;
|
|
4
|
+
type Commit = (patch: Patch, live: boolean) => void;
|
|
5
|
+
export { Stepper };
|
|
6
|
+
export declare function TimeRangeRows({ time, resolvedDuration, commit, ...scrub }: {
|
|
7
|
+
/** The element's authored `time` (undefined = 0). */
|
|
8
|
+
time: number | undefined;
|
|
9
|
+
/** elementDuration(el, sourceDuration) — authored or resolved. */
|
|
10
|
+
resolvedDuration: number;
|
|
11
|
+
commit: Commit;
|
|
12
|
+
} & ScrubHandlers): import("react").JSX.Element;
|
|
13
|
+
export declare function SizeControl({ width, height, commit, ...scrub }: {
|
|
14
|
+
width: unknown;
|
|
15
|
+
height: unknown;
|
|
16
|
+
commit: Commit;
|
|
17
|
+
} & ScrubHandlers): import("react").JSX.Element;
|
|
18
|
+
export declare function RotateControl({ rotation, xScale, yScale, commit, ...scrub }: {
|
|
19
|
+
rotation: unknown;
|
|
20
|
+
xScale: unknown;
|
|
21
|
+
yScale: unknown;
|
|
22
|
+
commit: Commit;
|
|
23
|
+
} & ScrubHandlers): import("react").JSX.Element;
|
|
24
|
+
export declare function AnchorControl({ xAnchor, yAnchor, commit, ...scrub }: {
|
|
25
|
+
xAnchor: unknown;
|
|
26
|
+
yAnchor: unknown;
|
|
27
|
+
commit: Commit;
|
|
28
|
+
} & ScrubHandlers): import("react").JSX.Element;
|
|
29
|
+
export declare function AlignmentRow({ source, selection, commitMany, }: {
|
|
30
|
+
source: Source;
|
|
31
|
+
selection: readonly string[];
|
|
32
|
+
/** Batched element patches — ONE history entry. */
|
|
33
|
+
commitMany: (updates: Array<{
|
|
34
|
+
id: string;
|
|
35
|
+
patch: Patch;
|
|
36
|
+
}>) => void;
|
|
37
|
+
}): import("react").JSX.Element | null;
|
|
38
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/controls/layout.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAW,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAGL,OAAO,EACP,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrC,KAAK,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAIpD,OAAO,EAAE,OAAO,EAAE,CAAC;AAInB,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,gBAAgB,EAChB,MAAM,EACN,GAAG,KAAK,EACT,EAAE;IACD,qDAAqD;IACrD,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,+BAoDhB;AAID,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,MAAM,EACN,GAAG,KAAK,EACT,EAAE;IACD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,+BAmBhB;AAID,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,MAAM,EACN,MAAM,EACN,MAAM,EACN,GAAG,KAAK,EACT,EAAE;IACD,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,+BAwDhB;AASD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,OAAO,EACP,MAAM,EACN,GAAG,KAAK,EACT,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,+BAmDhB;AAmFD,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,SAAS,EACT,UAAU,GACX,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,mDAAmD;IACnD,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;CACpE,sCA0GA"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// Figma-layout pass (ruled by Ian 2026-06-11) — the Time / Transform
|
|
2
|
+
// composite renderers and the alignment action row. All of it is
|
|
3
|
+
// LAYER 2 (overrides/composites over derived fields): every widget
|
|
4
|
+
// here writes plain literal protocol fields; nothing introduces new
|
|
5
|
+
// semantics. The alignment row is the one non-field piece — stateless
|
|
6
|
+
// actions that compute one-shot x/y writes from elementSourceBox.
|
|
7
|
+
'use client';
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
9
|
+
import { elementSourceBox } from '@clipkit/editor-core';
|
|
10
|
+
import { cn } from '../lib/utils.js';
|
|
11
|
+
import { NumberControl, LengthControl, Stepper, } from './primitives.js';
|
|
12
|
+
// Stepper moved into primitives.tsx (NumberControl embeds it now);
|
|
13
|
+
// re-exported here for existing imports.
|
|
14
|
+
export { Stepper };
|
|
15
|
+
// ── Time block: Length (+steppers) and In & Out ─────────────────────
|
|
16
|
+
export function TimeRangeRows({ time, resolvedDuration, commit, ...scrub }) {
|
|
17
|
+
const tIn = time ?? 0;
|
|
18
|
+
const tOut = tIn + resolvedDuration;
|
|
19
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center gap-2 h-8", children: [_jsx("span", { className: "w-16 shrink-0 text-[11px] text-muted-foreground truncate", children: "Length" }), _jsxs("div", { className: "flex-1 grid grid-cols-2 gap-2 min-w-0", children: [_jsx(NumberControl, { value: round3(resolvedDuration), min: 0.1, step: 0.1, suffix: "s", fluid: true, onChange: (v, live) => commit({ duration: round3(Math.max(0.1, v)) }, live), ...scrub }), _jsx(Stepper, { fluid: true, onStep: (dir) => commit({ duration: round3(Math.max(0.1, resolvedDuration + dir * 0.5)) }, false) })] })] }), _jsxs("div", { className: "flex items-center gap-2 h-8", children: [_jsx("span", { className: "w-16 shrink-0 text-[11px] text-muted-foreground truncate", children: "In & Out" }), _jsxs("div", { className: "flex-1 grid grid-cols-2 gap-2 min-w-0", children: [_jsx(NumberControl, { value: round3(tIn), min: 0, step: 0.05, suffix: "s", fluid: true, onChange: (v, live) => commit({ time: round3(Math.max(0, v)) }, live), ...scrub }), _jsx(NumberControl, { value: round3(tOut), min: tIn + 0.1, step: 0.05, suffix: "s", fluid: true, onChange: (v, live) => commit({ duration: round3(Math.max(0.1, v - tIn)) }, live), ...scrub })] })] })] }));
|
|
20
|
+
}
|
|
21
|
+
// ── Size: W/H wells (lock icon removed per Ian 2026-06-11) ─────────
|
|
22
|
+
export function SizeControl({ width, height, commit, ...scrub }) {
|
|
23
|
+
return (_jsxs("div", { className: "flex-1 grid grid-cols-2 gap-2 min-w-0", children: [_jsx(LengthControl, { value: numOrStr(width), prefix: "W", fluid: true, onChange: (v, live) => commit({ width: v }, live), ...scrub }), _jsx(LengthControl, { value: numOrStr(height), prefix: "H", fluid: true, onChange: (v, live) => commit({ height: v }, live), ...scrub })] }));
|
|
24
|
+
}
|
|
25
|
+
// ── Rotate: angle + rotate-90 / flip-H / flip-V quick actions ───────
|
|
26
|
+
export function RotateControl({ rotation, xScale, yScale, commit, ...scrub }) {
|
|
27
|
+
const rot = typeof rotation === 'number' ? rotation : 0;
|
|
28
|
+
// Joined segmented group (the reference HTML's gap-px look).
|
|
29
|
+
const act = (cls, label, onClick, icon) => (_jsx("button", { type: "button", className: cn('flex-1 h-6 grid place-items-center bg-field text-muted-foreground hover:text-foreground hover:bg-field-hover transition-colors', cls), onClick: onClick, title: label, "aria-label": label, children: icon }));
|
|
30
|
+
return (_jsxs("div", { className: "flex-1 grid grid-cols-2 gap-2 min-w-0 items-center", children: [_jsx(NumberControl, { value: rot, step: 1, suffix: "\u00B0", prefix: _jsx("svg", { width: "9", height: "9", viewBox: "0 0 10 10", "aria-hidden": "true", children: _jsx("path", { d: "M1.5 8.5 L8.5 1.5 M1.5 8.5 H8.5 M5.5 8.5 A4 4 0 0 0 4.3 5.7", fill: "none", stroke: "currentColor", strokeWidth: "1", strokeLinecap: "round" }) }), fluid: true, onChange: (v, live) => commit({ rotation: v }, live), ...scrub }), _jsxs("div", { className: "flex h-6 gap-px rounded-md overflow-hidden min-w-0", children: [act('', 'Rotate 90° clockwise', () => commit({ rotation: rot + 90 }, false), (_jsx("svg", { width: "11", height: "11", viewBox: "0 0 12 12", "aria-hidden": "true", children: _jsx("path", { d: "M9.5 4.5 a4 4 0 1 0 0.5 3 M9.5 1.5 V4.5 H6.5", fill: "none", stroke: "currentColor", strokeWidth: "1.2", strokeLinecap: "round", strokeLinejoin: "round" }) }))), act('', 'Flip horizontal', () => commit({ x_scale: -(typeof xScale === 'number' ? xScale : 1) }, false), (_jsx("svg", { width: "11", height: "11", viewBox: "0 0 12 12", "aria-hidden": "true", children: _jsx("path", { d: "M6 1 V11 M4.5 3.5 L1.5 6 L4.5 8.5 Z M7.5 3.5 L10.5 6 L7.5 8.5 Z", fill: "none", stroke: "currentColor", strokeWidth: "1.1", strokeLinejoin: "round" }) }))), act('', 'Flip vertical', () => commit({ y_scale: -(typeof yScale === 'number' ? yScale : 1) }, false), (_jsx("svg", { width: "11", height: "11", viewBox: "0 0 12 12", "aria-hidden": "true", children: _jsx("path", { d: "M1 6 H11 M3.5 4.5 L6 1.5 L8.5 4.5 Z M3.5 7.5 L6 10.5 L8.5 7.5 Z", fill: "none", stroke: "currentColor", strokeWidth: "1.1", strokeLinejoin: "round" }) })))] })] }));
|
|
31
|
+
}
|
|
32
|
+
// ── Anchor: numeric X/Y % wells + the anchor pad (ruled by Ian) ─────
|
|
33
|
+
// The pad has edge ticks (left/right/top/bottom) and a center plus:
|
|
34
|
+
// a tick writes ONE axis to 0 or 1, the plus writes both to 0.5. The
|
|
35
|
+
// wells edit the same two fields as exact percentages. Writes keep
|
|
36
|
+
// the authored format (number stays a fraction; string/unauthored
|
|
37
|
+
// writes "%" strings — the protocol accepts both).
|
|
38
|
+
export function AnchorControl({ xAnchor, yAnchor, commit, ...scrub }) {
|
|
39
|
+
const x = parseAnchorNum(xAnchor);
|
|
40
|
+
const y = parseAnchorNum(yAnchor);
|
|
41
|
+
const fmt = (raw, frac) => typeof raw === 'number' ? round3(frac) : `${round3(frac * 100)}%`;
|
|
42
|
+
return (_jsxs("div", { className: "flex items-start gap-2 py-1", children: [_jsx("span", { className: "w-16 shrink-0 text-[11px] text-muted-foreground pt-1.5 truncate", children: "Anchor" }), _jsxs("div", { className: "flex-1 grid grid-cols-2 gap-2 min-w-0 items-start", children: [_jsxs("div", { className: "flex flex-col gap-2 min-w-0", children: [_jsx(NumberControl, { value: round1(x * 100), min: 0, max: 100, step: 1, suffix: "%", prefix: "X", fluid: true, onChange: (v, live) => commit({ x_anchor: fmt(xAnchor, v / 100) }, live), ...scrub }), _jsx(NumberControl, { value: round1(y * 100), min: 0, max: 100, step: 1, suffix: "%", prefix: "Y", fluid: true, onChange: (v, live) => commit({ y_anchor: fmt(yAnchor, v / 100) }, live), ...scrub })] }), _jsx(AnchorPad, { x: x, y: y, onPick: (nx, ny) => commit({ x_anchor: fmt(xAnchor, nx), y_anchor: fmt(yAnchor, ny) }, false) })] })] }));
|
|
43
|
+
}
|
|
44
|
+
const near = (a, b) => Math.abs(a - b) < 0.005;
|
|
45
|
+
/** 3×3 anchor dot grid (re-ruled back by Ian 2026-06-11): one dot per
|
|
46
|
+
* preset (0 / 50 / 100 on each axis); the active combination shows in
|
|
47
|
+
* the playhead blue. */
|
|
48
|
+
function AnchorPad({ x, y, onPick, }) {
|
|
49
|
+
const stops = [0, 0.5, 1];
|
|
50
|
+
return (_jsx("div", { className: "w-full h-[72px] bg-field rounded-md min-w-0 grid grid-cols-3 grid-rows-3 overflow-hidden", children: stops.flatMap((ay) => stops.map((ax) => {
|
|
51
|
+
const active = near(x, ax) && near(y, ay);
|
|
52
|
+
return (_jsx("button", { type: "button", className: "w-full h-full grid place-items-center group", onClick: () => onPick(ax, ay), title: `Anchor ${ax * 100}% / ${ay * 100}%`, "aria-label": `Anchor ${ax * 100}% ${ay * 100}%`, "aria-pressed": active, children: _jsx("span", { className: cn('rounded-full transition-all', active
|
|
53
|
+
? 'w-2 h-2'
|
|
54
|
+
: 'w-1 h-1 bg-muted-foreground/50 group-hover:bg-muted-foreground group-hover:scale-150'), style: active ? { background: 'var(--color-playhead)' } : undefined }) }, `${ax}-${ay}`));
|
|
55
|
+
})) }));
|
|
56
|
+
}
|
|
57
|
+
function round1(n) {
|
|
58
|
+
return Math.round(n * 10) / 10;
|
|
59
|
+
}
|
|
60
|
+
function findWithParent(elements, id, parent = null) {
|
|
61
|
+
for (const el of elements) {
|
|
62
|
+
if (el.id === id)
|
|
63
|
+
return { el, parent };
|
|
64
|
+
if (el.type === 'group') {
|
|
65
|
+
const nested = findWithParent(el.elements, id, el);
|
|
66
|
+
if (nested)
|
|
67
|
+
return nested;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
export function AlignmentRow({ source, selection, commitMany, }) {
|
|
73
|
+
const items = selection
|
|
74
|
+
.map((id) => findWithParent(source.elements, id))
|
|
75
|
+
.filter((r) => r !== null)
|
|
76
|
+
.map((r) => ({ ...r, box: elementSourceBox(r.el, source) }))
|
|
77
|
+
.filter((r) => r.box !== null);
|
|
78
|
+
if (items.length === 0)
|
|
79
|
+
return null;
|
|
80
|
+
const frameFor = (parent) => {
|
|
81
|
+
if (items.length > 1) {
|
|
82
|
+
// Selection bounds.
|
|
83
|
+
const xs = items.map((i) => i.box.x);
|
|
84
|
+
const ys = items.map((i) => i.box.y);
|
|
85
|
+
const x2 = items.map((i) => i.box.x + i.box.w);
|
|
86
|
+
const y2 = items.map((i) => i.box.y + i.box.h);
|
|
87
|
+
return {
|
|
88
|
+
x: Math.min(...xs),
|
|
89
|
+
y: Math.min(...ys),
|
|
90
|
+
w: Math.max(...x2) - Math.min(...xs),
|
|
91
|
+
h: Math.max(...y2) - Math.min(...ys),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Single: the parent group's box when nested (its local space),
|
|
95
|
+
// else the composition.
|
|
96
|
+
if (parent) {
|
|
97
|
+
const pb = elementSourceBox(parent, source);
|
|
98
|
+
if (pb)
|
|
99
|
+
return { x: 0, y: 0, w: pb.w, h: pb.h };
|
|
100
|
+
}
|
|
101
|
+
return { x: 0, y: 0, w: source.width ?? 1920, h: source.height ?? 1080 };
|
|
102
|
+
};
|
|
103
|
+
const align = (axis, mode) => {
|
|
104
|
+
const updates = items.map(({ el, parent, box }) => {
|
|
105
|
+
const f = frameFor(parent);
|
|
106
|
+
const size = axis === 'x' ? box.w : box.h;
|
|
107
|
+
const fPos = axis === 'x' ? f.x : f.y;
|
|
108
|
+
const fSize = axis === 'x' ? f.w : f.h;
|
|
109
|
+
const target = mode === 'start' ? fPos : mode === 'center' ? fPos + (fSize - size) / 2 : fPos + fSize - size;
|
|
110
|
+
// box.x = x − w·ax ⇒ x = targetBox + w·ax (anchors preserved).
|
|
111
|
+
const anchor = axis === 'x'
|
|
112
|
+
? parseAnchorNum(el.x_anchor)
|
|
113
|
+
: parseAnchorNum(el.y_anchor);
|
|
114
|
+
return { id: el.id, patch: { [axis]: round3(target + size * anchor) } };
|
|
115
|
+
});
|
|
116
|
+
commitMany(updates.filter((u) => u.id));
|
|
117
|
+
};
|
|
118
|
+
const distribute = (axis) => {
|
|
119
|
+
if (items.length < 3)
|
|
120
|
+
return;
|
|
121
|
+
const sorted = [...items].sort((a, b) => axis === 'x' ? a.box.x - b.box.x : a.box.y - b.box.y);
|
|
122
|
+
const first = sorted[0].box;
|
|
123
|
+
const last = sorted[sorted.length - 1].box;
|
|
124
|
+
const span = (axis === 'x' ? last.x + last.w - first.x : last.y + last.h - first.y);
|
|
125
|
+
const total = sorted.reduce((s, i) => s + (axis === 'x' ? i.box.w : i.box.h), 0);
|
|
126
|
+
const gap = (span - total) / (sorted.length - 1);
|
|
127
|
+
let cursor = axis === 'x' ? first.x : first.y;
|
|
128
|
+
const updates = sorted.map(({ el, box }) => {
|
|
129
|
+
const size = axis === 'x' ? box.w : box.h;
|
|
130
|
+
const anchor = axis === 'x'
|
|
131
|
+
? parseAnchorNum(el.x_anchor)
|
|
132
|
+
: parseAnchorNum(el.y_anchor);
|
|
133
|
+
const patch = { [axis]: round3(cursor + size * anchor) };
|
|
134
|
+
cursor += size + gap;
|
|
135
|
+
return { id: el.id, patch };
|
|
136
|
+
});
|
|
137
|
+
commitMany(updates.filter((u) => u.id));
|
|
138
|
+
};
|
|
139
|
+
const canDistribute = items.length >= 3;
|
|
140
|
+
const btn = (label, onClick, icon, disabled = false) => (_jsx("button", { type: "button", className: "w-6 h-6 grid place-items-center rounded text-muted-foreground hover:text-foreground hover:bg-secondary transition-colors disabled:opacity-25 disabled:hover:bg-transparent", onClick: onClick, title: label, "aria-label": label, disabled: disabled, children: icon }));
|
|
141
|
+
// Compact Figma-style glyphs: a reference line + a bar.
|
|
142
|
+
const g = (d) => (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", "aria-hidden": "true", children: _jsx("path", { d: d, stroke: "currentColor", strokeWidth: "1.2", strokeLinecap: "round", fill: "none" }) }));
|
|
143
|
+
return (_jsxs("div", { className: "flex items-center justify-between px-2 h-8 border-b border-border shrink-0", children: [btn('Align left', () => align('x', 'start'), g('M2 1.5 V10.5 M4.5 4 H9 M4.5 8 H7')), btn('Align horizontal center', () => align('x', 'center'), g('M6 1.5 V10.5 M3 4 H9 M4 8 H8')), btn('Align right', () => align('x', 'end'), g('M10 1.5 V10.5 M3 4 H7.5 M5 8 H7.5')), btn('Align top', () => align('y', 'start'), g('M1.5 2 H10.5 M4 4.5 V9 M8 4.5 V7')), btn('Align vertical center', () => align('y', 'center'), g('M1.5 6 H10.5 M4 3 V9 M8 4 V8')), btn('Align bottom', () => align('y', 'end'), g('M1.5 10 H10.5 M4 3 V7.5 M8 5 V7.5')), btn('Distribute horizontally', () => distribute('x'), g('M1.5 1.5 V10.5 M10.5 1.5 V10.5 M6 4 V8'), !canDistribute), btn('Distribute vertically', () => distribute('y'), g('M1.5 1.5 H10.5 M1.5 10.5 H10.5 M4 6 H8'), !canDistribute)] }));
|
|
144
|
+
}
|
|
145
|
+
// ── Shared bits ─────────────────────────────────────────────────────
|
|
146
|
+
function parseAnchorNum(v) {
|
|
147
|
+
if (typeof v === 'number')
|
|
148
|
+
return v;
|
|
149
|
+
if (typeof v === 'string') {
|
|
150
|
+
const n = parseFloat(v);
|
|
151
|
+
if (Number.isFinite(n))
|
|
152
|
+
return v.includes('%') ? n / 100 : n;
|
|
153
|
+
}
|
|
154
|
+
return 0.5;
|
|
155
|
+
}
|
|
156
|
+
function numOrStr(v) {
|
|
157
|
+
return typeof v === 'number' || typeof v === 'string' ? v : 0;
|
|
158
|
+
}
|
|
159
|
+
function round3(n) {
|
|
160
|
+
return Math.round(n * 1000) / 1000;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/controls/layout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export interface ScrubHandlers {
|
|
2
|
+
onScrubStart?: () => void;
|
|
3
|
+
onScrubEnd?: () => void;
|
|
4
|
+
}
|
|
5
|
+
interface NumberControlProps extends ScrubHandlers {
|
|
6
|
+
value: number;
|
|
7
|
+
onChange: (next: number, live: boolean) => void;
|
|
8
|
+
min?: number;
|
|
9
|
+
max?: number;
|
|
10
|
+
step?: number;
|
|
11
|
+
/** Display suffix ('°', '%', 's', …) — visual only. */
|
|
12
|
+
suffix?: string;
|
|
13
|
+
/** Muted glyph inside the well, before the number ('X', 'W', icon).
|
|
14
|
+
Also a scrub handle (cursor-ew-resize), per the reference HTML. */
|
|
15
|
+
prefix?: React.ReactNode;
|
|
16
|
+
/** Rendered inside the well's right edge (the ◇ keyframe diamond). */
|
|
17
|
+
trailing?: React.ReactNode;
|
|
18
|
+
/** Append a joined −/+ stepper beside the well. */
|
|
19
|
+
stepper?: boolean;
|
|
20
|
+
/** Stretch to fill the row's value column (the panel's fluid grid)
|
|
21
|
+
instead of the fixed 72px default. */
|
|
22
|
+
fluid?: boolean;
|
|
23
|
+
width?: number;
|
|
24
|
+
}
|
|
25
|
+
/** Joined −/+ pair, same 24px well treatment as the inputs. */
|
|
26
|
+
export declare function Stepper({ onStep, fluid, }: {
|
|
27
|
+
onStep: (dir: -1 | 1) => void;
|
|
28
|
+
/** Fill the grid cell as a joined pair instead of fixed buttons. */
|
|
29
|
+
fluid?: boolean;
|
|
30
|
+
}): import("react").JSX.Element;
|
|
31
|
+
/** Drag-scrub number field: horizontal pointer drag scrubs (step per
|
|
32
|
+
* 2px, ×10 with shift), click-through to type (numeric chars only),
|
|
33
|
+
* ↑/↓ arrow steps, optional unit label + built-in stepper. */
|
|
34
|
+
export declare function NumberControl({ value, onChange, min, max, step, suffix, prefix, trailing, stepper, fluid, width, onScrubStart, onScrubEnd, }: NumberControlProps): import("react").JSX.Element;
|
|
35
|
+
/** Length values: number (px) or string with a unit ("50%", "10vw").
|
|
36
|
+
* The numeric part scrubs/edits; an existing unit suffix is kept. */
|
|
37
|
+
export declare function LengthControl({ value, onChange, step, prefix, trailing, stepper, fluid, onScrubStart, onScrubEnd, }: ScrubHandlers & {
|
|
38
|
+
value: number | string;
|
|
39
|
+
onChange: (next: number | string, live: boolean) => void;
|
|
40
|
+
step?: number;
|
|
41
|
+
prefix?: React.ReactNode;
|
|
42
|
+
trailing?: React.ReactNode;
|
|
43
|
+
stepper?: boolean;
|
|
44
|
+
fluid?: boolean;
|
|
45
|
+
}): import("react").JSX.Element;
|
|
46
|
+
export declare function TextControl({ value, onChange, width, fluid, live, onScrubStart, onScrubEnd, }: {
|
|
47
|
+
value: string;
|
|
48
|
+
/** `live` flag is true on per-keystroke updates (callers may skip history). */
|
|
49
|
+
onChange: (next: string, live?: boolean) => void;
|
|
50
|
+
width?: number;
|
|
51
|
+
fluid?: boolean;
|
|
52
|
+
/** Commit per keystroke (skip-history while typing, flush on blur). */
|
|
53
|
+
live?: boolean;
|
|
54
|
+
onScrubStart?: () => void;
|
|
55
|
+
onScrubEnd?: () => void;
|
|
56
|
+
}): import("react").JSX.Element;
|
|
57
|
+
export declare function SelectControl({ value, options, onChange, fluid, }: {
|
|
58
|
+
value: string;
|
|
59
|
+
options: readonly string[];
|
|
60
|
+
onChange: (next: string) => void;
|
|
61
|
+
fluid?: boolean;
|
|
62
|
+
}): import("react").JSX.Element;
|
|
63
|
+
export declare function ToggleControl({ value, onChange, }: {
|
|
64
|
+
value: boolean;
|
|
65
|
+
onChange: (next: boolean) => void;
|
|
66
|
+
}): import("react").JSX.Element;
|
|
67
|
+
export declare function ColorControl({ value, onChange, fluid, onScrubStart, onScrubEnd, }: {
|
|
68
|
+
value: string;
|
|
69
|
+
onChange: (next: string, live?: boolean) => void;
|
|
70
|
+
fluid?: boolean;
|
|
71
|
+
onScrubStart?: () => void;
|
|
72
|
+
onScrubEnd?: () => void;
|
|
73
|
+
}): import("react").JSX.Element;
|
|
74
|
+
/** 9-dot anchor grid — the composite claiming x_anchor / y_anchor. */
|
|
75
|
+
export declare function AnchorGridControl({ x, y, onChange, }: {
|
|
76
|
+
x: number;
|
|
77
|
+
y: number;
|
|
78
|
+
onChange: (x: number, y: number) => void;
|
|
79
|
+
}): import("react").JSX.Element;
|
|
80
|
+
/** Hydration-safe wrapper for values currently driven by keyframes. */
|
|
81
|
+
export declare function KeyframedChip(): import("react").JSX.Element;
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/controls/primitives.tsx"],"names":[],"mappings":"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"}
|