@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,17 @@
|
|
|
1
|
+
export interface Rgba {
|
|
2
|
+
r: number;
|
|
3
|
+
g: number;
|
|
4
|
+
b: number;
|
|
5
|
+
a: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseHexColor(hex: string): Rgba | null;
|
|
8
|
+
export declare function toHexColor({ r, g, b, a }: Rgba): string;
|
|
9
|
+
export declare function ColorPickerPopover({ anchor, value, onChange, onClose, onScrubStart, onScrubEnd, }: {
|
|
10
|
+
anchor: HTMLElement;
|
|
11
|
+
value: string;
|
|
12
|
+
onChange: (next: string, live?: boolean) => void;
|
|
13
|
+
onClose: () => void;
|
|
14
|
+
onScrubStart?: () => void;
|
|
15
|
+
onScrubEnd?: () => void;
|
|
16
|
+
}): import("react").JSX.Element | null;
|
|
17
|
+
//# sourceMappingURL=ColorPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorPicker.d.ts","sourceRoot":"","sources":["../../src/controls/ColorPicker.tsx"],"names":[],"mappings":"AAkBA,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CActD;AAED,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,GAAG,MAAM,CAKvD;AA8GD,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,KAAK,EACL,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,UAAU,GACX,EAAE;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,sCA2WA"}
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
// ColorPicker popover (ruled by Ian 2026-06-12) — opens from any
|
|
2
|
+
// color swatch. Layout per spec: SV box → hue slider + eyedropper →
|
|
3
|
+
// alpha slider + alpha % → format dropdown + value field → two rows
|
|
4
|
+
// of swatches harvested from the document.
|
|
5
|
+
//
|
|
6
|
+
// Colors stay PROTOCOL-LITERAL hex strings: #rrggbb, or #rrggbbaa
|
|
7
|
+
// when alpha < 100% (the schema's color format). Drags ride the
|
|
8
|
+
// standard one-undo-step contract when scrub handlers are provided.
|
|
9
|
+
'use client';
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
12
|
+
import { useEditorStore } from '@clipkit/editor-core';
|
|
13
|
+
import { cn } from '../lib/utils.js';
|
|
14
|
+
export function parseHexColor(hex) {
|
|
15
|
+
const m = /^#([0-9a-fA-F]{3,8})$/.exec(hex.trim());
|
|
16
|
+
if (!m)
|
|
17
|
+
return null;
|
|
18
|
+
let h = m[1];
|
|
19
|
+
if (h.length === 3 || h.length === 4) {
|
|
20
|
+
h = [...h].map((c) => c + c).join('');
|
|
21
|
+
}
|
|
22
|
+
if (h.length !== 6 && h.length !== 8)
|
|
23
|
+
return null;
|
|
24
|
+
return {
|
|
25
|
+
r: parseInt(h.slice(0, 2), 16),
|
|
26
|
+
g: parseInt(h.slice(2, 4), 16),
|
|
27
|
+
b: parseInt(h.slice(4, 6), 16),
|
|
28
|
+
a: h.length === 8 ? parseInt(h.slice(6, 8), 16) / 255 : 1,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function toHexColor({ r, g, b, a }) {
|
|
32
|
+
const c = (n) => Math.round(Math.min(255, Math.max(0, n))).toString(16).padStart(2, '0');
|
|
33
|
+
const base = `#${c(r)}${c(g)}${c(b)}`;
|
|
34
|
+
return a >= 0.999 ? base : `${base}${c(a * 255)}`;
|
|
35
|
+
}
|
|
36
|
+
function rgbToHsv(r, g, b) {
|
|
37
|
+
const rn = r / 255;
|
|
38
|
+
const gn = g / 255;
|
|
39
|
+
const bn = b / 255;
|
|
40
|
+
const max = Math.max(rn, gn, bn);
|
|
41
|
+
const min = Math.min(rn, gn, bn);
|
|
42
|
+
const d = max - min;
|
|
43
|
+
let h = 0;
|
|
44
|
+
if (d > 0) {
|
|
45
|
+
if (max === rn)
|
|
46
|
+
h = 60 * (((gn - bn) / d) % 6);
|
|
47
|
+
else if (max === gn)
|
|
48
|
+
h = 60 * ((bn - rn) / d + 2);
|
|
49
|
+
else
|
|
50
|
+
h = 60 * ((rn - gn) / d + 4);
|
|
51
|
+
}
|
|
52
|
+
if (h < 0)
|
|
53
|
+
h += 360;
|
|
54
|
+
return { h, s: max === 0 ? 0 : d / max, v: max };
|
|
55
|
+
}
|
|
56
|
+
function hsvToRgb({ h, s, v }) {
|
|
57
|
+
const c = v * s;
|
|
58
|
+
const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
|
|
59
|
+
const m = v - c;
|
|
60
|
+
let rp = 0;
|
|
61
|
+
let gp = 0;
|
|
62
|
+
let bp = 0;
|
|
63
|
+
if (h < 60)
|
|
64
|
+
[rp, gp, bp] = [c, x, 0];
|
|
65
|
+
else if (h < 120)
|
|
66
|
+
[rp, gp, bp] = [x, c, 0];
|
|
67
|
+
else if (h < 180)
|
|
68
|
+
[rp, gp, bp] = [0, c, x];
|
|
69
|
+
else if (h < 240)
|
|
70
|
+
[rp, gp, bp] = [0, x, c];
|
|
71
|
+
else if (h < 300)
|
|
72
|
+
[rp, gp, bp] = [x, 0, c];
|
|
73
|
+
else
|
|
74
|
+
[rp, gp, bp] = [c, 0, x];
|
|
75
|
+
return { r: (rp + m) * 255, g: (gp + m) * 255, b: (bp + m) * 255 };
|
|
76
|
+
}
|
|
77
|
+
// ── Document color harvesting ───────────────────────────────────────
|
|
78
|
+
function collectDocumentColors(source) {
|
|
79
|
+
const out = [];
|
|
80
|
+
const seen = new Set();
|
|
81
|
+
const visit = (node) => {
|
|
82
|
+
if (Array.isArray(node)) {
|
|
83
|
+
node.forEach(visit);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (node && typeof node === 'object') {
|
|
87
|
+
for (const [k, v] of Object.entries(node)) {
|
|
88
|
+
if (typeof v === 'string' &&
|
|
89
|
+
/^#[0-9a-fA-F]{3,8}$/.test(v) &&
|
|
90
|
+
(k === 'color' || k.endsWith('color'))) {
|
|
91
|
+
const key = v.toLowerCase();
|
|
92
|
+
if (!seen.has(key)) {
|
|
93
|
+
seen.add(key);
|
|
94
|
+
out.push(v);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (v && typeof v === 'object') {
|
|
98
|
+
visit(v);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
visit(source);
|
|
104
|
+
return out.slice(0, 16); // two rows of eight
|
|
105
|
+
}
|
|
106
|
+
// ── Shared drag helper ──────────────────────────────────────────────
|
|
107
|
+
function useSliderDrag(onMove, onStart, onEnd) {
|
|
108
|
+
return (e) => {
|
|
109
|
+
e.preventDefault();
|
|
110
|
+
const el = e.currentTarget;
|
|
111
|
+
onStart?.();
|
|
112
|
+
const apply = (clientX, clientY) => {
|
|
113
|
+
const r = el.getBoundingClientRect();
|
|
114
|
+
onMove(Math.min(1, Math.max(0, (clientX - r.left) / r.width)), Math.min(1, Math.max(0, (clientY - r.top) / r.height)));
|
|
115
|
+
};
|
|
116
|
+
apply(e.clientX, e.clientY);
|
|
117
|
+
const move = (ev) => apply(ev.clientX, ev.clientY);
|
|
118
|
+
const up = () => {
|
|
119
|
+
window.removeEventListener('pointermove', move);
|
|
120
|
+
window.removeEventListener('pointerup', up);
|
|
121
|
+
onEnd?.();
|
|
122
|
+
};
|
|
123
|
+
window.addEventListener('pointermove', move);
|
|
124
|
+
window.addEventListener('pointerup', up);
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const CHECKER = 'repeating-conic-gradient(rgba(255,255,255,0.18) 0% 25%, transparent 0% 50%) 0 0 / 10px 10px';
|
|
128
|
+
// ── The popover ─────────────────────────────────────────────────────
|
|
129
|
+
const WIDTH = 232;
|
|
130
|
+
export function ColorPickerPopover({ anchor, value, onChange, onClose, onScrubStart, onScrubEnd, }) {
|
|
131
|
+
const source = useEditorStore((s) => s.source);
|
|
132
|
+
const ref = useRef(null);
|
|
133
|
+
// HSV is the editing model (keeps hue stable at s=0 / v=0); the hex
|
|
134
|
+
// prop re-syncs it only when it genuinely diverges (external edits).
|
|
135
|
+
const [hsv, setHsv] = useState(() => {
|
|
136
|
+
const rgb = parseHexColor(value) ?? { r: 255, g: 255, b: 255, a: 1 };
|
|
137
|
+
return rgbToHsv(rgb.r, rgb.g, rgb.b);
|
|
138
|
+
});
|
|
139
|
+
const [alpha, setAlpha] = useState(() => parseHexColor(value)?.a ?? 1);
|
|
140
|
+
const [format, setFormat] = useState('hex');
|
|
141
|
+
const [draft, setDraft] = useState(null);
|
|
142
|
+
const [alphaDraft, setAlphaDraft] = useState(null);
|
|
143
|
+
const draggingRef = useRef(false);
|
|
144
|
+
const current = useMemo(() => {
|
|
145
|
+
const rgb = hsvToRgb(hsv);
|
|
146
|
+
return toHexColor({ ...rgb, a: alpha });
|
|
147
|
+
}, [hsv, alpha]);
|
|
148
|
+
useEffect(() => {
|
|
149
|
+
if (draggingRef.current)
|
|
150
|
+
return;
|
|
151
|
+
const rgb = parseHexColor(value);
|
|
152
|
+
if (!rgb)
|
|
153
|
+
return;
|
|
154
|
+
if (toHexColor(rgb).toLowerCase() === current.toLowerCase())
|
|
155
|
+
return;
|
|
156
|
+
setHsv(rgbToHsv(rgb.r, rgb.g, rgb.b));
|
|
157
|
+
setAlpha(rgb.a);
|
|
158
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
159
|
+
}, [value]);
|
|
160
|
+
// Position: below the anchor, clamped to the viewport.
|
|
161
|
+
const [pos, setPos] = useState(null);
|
|
162
|
+
useEffect(() => {
|
|
163
|
+
const r = anchor.getBoundingClientRect();
|
|
164
|
+
const vw = window.innerWidth;
|
|
165
|
+
const vh = window.innerHeight;
|
|
166
|
+
const height = 330; // approximate; clamped below
|
|
167
|
+
const left = Math.min(Math.max(8, r.left), vw - WIDTH - 8);
|
|
168
|
+
const top = r.bottom + 6 + height > vh ? Math.max(8, r.top - height - 6) : r.bottom + 6;
|
|
169
|
+
setPos({ left, top });
|
|
170
|
+
}, [anchor]);
|
|
171
|
+
// Close on outside pointerdown / Escape.
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
const down = (e) => {
|
|
174
|
+
if (ref.current && !ref.current.contains(e.target) && e.target !== anchor && !anchor.contains(e.target)) {
|
|
175
|
+
onClose();
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const key = (e) => {
|
|
179
|
+
if (e.key === 'Escape')
|
|
180
|
+
onClose();
|
|
181
|
+
};
|
|
182
|
+
window.addEventListener('pointerdown', down, true);
|
|
183
|
+
window.addEventListener('keydown', key);
|
|
184
|
+
return () => {
|
|
185
|
+
window.removeEventListener('pointerdown', down, true);
|
|
186
|
+
window.removeEventListener('keydown', key);
|
|
187
|
+
};
|
|
188
|
+
}, [anchor, onClose]);
|
|
189
|
+
const emit = (next, nextAlpha, live) => {
|
|
190
|
+
const rgb = hsvToRgb(next);
|
|
191
|
+
onChange(toHexColor({ ...rgb, a: nextAlpha }), live);
|
|
192
|
+
};
|
|
193
|
+
const startDrag = () => {
|
|
194
|
+
draggingRef.current = true;
|
|
195
|
+
onScrubStart?.();
|
|
196
|
+
};
|
|
197
|
+
const endDrag = () => {
|
|
198
|
+
draggingRef.current = false;
|
|
199
|
+
onScrubEnd?.();
|
|
200
|
+
// Commit the final value (non-live) so the edit is one undo step.
|
|
201
|
+
emit(hsvRef.current, alphaRef.current, false);
|
|
202
|
+
};
|
|
203
|
+
// Refs mirror state for the end-of-drag commit.
|
|
204
|
+
const hsvRef = useRef(hsv);
|
|
205
|
+
hsvRef.current = hsv;
|
|
206
|
+
const alphaRef = useRef(alpha);
|
|
207
|
+
alphaRef.current = alpha;
|
|
208
|
+
const onSvDown = useSliderDrag((fx, fy) => {
|
|
209
|
+
const next = { ...hsvRef.current, s: fx, v: 1 - fy };
|
|
210
|
+
setHsv(next);
|
|
211
|
+
emit(next, alphaRef.current, true);
|
|
212
|
+
}, startDrag, endDrag);
|
|
213
|
+
const onHueDown = useSliderDrag((fx) => {
|
|
214
|
+
const next = { ...hsvRef.current, h: Math.min(359.9, fx * 360) };
|
|
215
|
+
setHsv(next);
|
|
216
|
+
emit(next, alphaRef.current, true);
|
|
217
|
+
}, startDrag, endDrag);
|
|
218
|
+
const onAlphaDown = useSliderDrag((fx) => {
|
|
219
|
+
const a = Math.round(fx * 100) / 100;
|
|
220
|
+
setAlpha(a);
|
|
221
|
+
emit(hsvRef.current, a, true);
|
|
222
|
+
}, startDrag, endDrag);
|
|
223
|
+
const commitAlphaText = (raw) => {
|
|
224
|
+
setAlphaDraft(null);
|
|
225
|
+
const n = parseInt(raw, 10);
|
|
226
|
+
if (!Number.isFinite(n))
|
|
227
|
+
return;
|
|
228
|
+
const a = Math.min(100, Math.max(0, n)) / 100;
|
|
229
|
+
setAlpha(a);
|
|
230
|
+
emit(hsvRef.current, a, false);
|
|
231
|
+
};
|
|
232
|
+
const pickEyedropper = async () => {
|
|
233
|
+
const ED = window.EyeDropper;
|
|
234
|
+
if (!ED)
|
|
235
|
+
return;
|
|
236
|
+
try {
|
|
237
|
+
const result = await new ED().open();
|
|
238
|
+
const rgb = parseHexColor(result.sRGBHex);
|
|
239
|
+
if (rgb) {
|
|
240
|
+
setHsv(rgbToHsv(rgb.r, rgb.g, rgb.b));
|
|
241
|
+
onChange(toHexColor({ ...rgb, a: alphaRef.current }), false);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
/* user cancelled */
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
const hasEyedropper = typeof window !== 'undefined' && 'EyeDropper' in window;
|
|
249
|
+
// Format display + parse.
|
|
250
|
+
const rgbNow = hsvToRgb(hsv);
|
|
251
|
+
const formatted = (() => {
|
|
252
|
+
if (format === 'hex')
|
|
253
|
+
return current;
|
|
254
|
+
const r = Math.round(rgbNow.r);
|
|
255
|
+
const g = Math.round(rgbNow.g);
|
|
256
|
+
const b = Math.round(rgbNow.b);
|
|
257
|
+
if (format === 'rgb')
|
|
258
|
+
return `${r}, ${g}, ${b}`;
|
|
259
|
+
// hsl
|
|
260
|
+
const l = hsv.v * (1 - hsv.s / 2);
|
|
261
|
+
const sl = l === 0 || l === 1 ? 0 : (hsv.v - l) / Math.min(l, 1 - l);
|
|
262
|
+
return `${Math.round(hsv.h)}, ${Math.round(sl * 100)}%, ${Math.round(l * 100)}%`;
|
|
263
|
+
})();
|
|
264
|
+
const commitText = (raw) => {
|
|
265
|
+
setDraft(null);
|
|
266
|
+
const t = raw.trim();
|
|
267
|
+
if (format === 'hex') {
|
|
268
|
+
const rgb = parseHexColor(t.startsWith('#') ? t : `#${t}`);
|
|
269
|
+
if (rgb) {
|
|
270
|
+
setHsv(rgbToHsv(rgb.r, rgb.g, rgb.b));
|
|
271
|
+
setAlpha(rgb.a);
|
|
272
|
+
onChange(toHexColor(rgb), false);
|
|
273
|
+
}
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const nums = t.match(/-?\d*\.?\d+/g)?.map(Number);
|
|
277
|
+
if (!nums || nums.length < 3 || nums.some((n) => !Number.isFinite(n)))
|
|
278
|
+
return;
|
|
279
|
+
if (format === 'rgb') {
|
|
280
|
+
const rgb = { r: nums[0], g: nums[1], b: nums[2], a: alpha };
|
|
281
|
+
setHsv(rgbToHsv(rgb.r, rgb.g, rgb.b));
|
|
282
|
+
onChange(toHexColor(rgb), false);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
// hsl → rgb
|
|
286
|
+
const h = ((nums[0] % 360) + 360) % 360;
|
|
287
|
+
const sl = Math.min(1, Math.max(0, nums[1] / 100));
|
|
288
|
+
const l = Math.min(1, Math.max(0, nums[2] / 100));
|
|
289
|
+
const v = l + sl * Math.min(l, 1 - l);
|
|
290
|
+
const s = v === 0 ? 0 : 2 * (1 - l / v);
|
|
291
|
+
const next = { h, s, v };
|
|
292
|
+
setHsv(next);
|
|
293
|
+
emit(next, alpha, false);
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
// Harvested ONCE when the popover opens (useState initializer). If
|
|
297
|
+
// we recomputed on every edit, applying a swatch would rewrite the
|
|
298
|
+
// document and re-dedupe the list in a new order — the swatches
|
|
299
|
+
// would shuffle under the cursor. A stable snapshot stays put.
|
|
300
|
+
const [docColors] = useState(() => collectDocumentColors(source));
|
|
301
|
+
if (!pos)
|
|
302
|
+
return null;
|
|
303
|
+
const hueColor = toHexColor({ ...hsvToRgb({ h: hsv.h, s: 1, v: 1 }), a: 1 });
|
|
304
|
+
const opaque = toHexColor({ ...rgbNow, a: 1 });
|
|
305
|
+
return (_jsxs("div", { ref: ref, className: "fixed z-50 rounded-lg border bg-popover shadow-2xl p-2 flex flex-col gap-2 select-none", style: {
|
|
306
|
+
left: pos.left,
|
|
307
|
+
top: pos.top,
|
|
308
|
+
width: WIDTH,
|
|
309
|
+
borderColor: 'var(--color-popover-border)',
|
|
310
|
+
}, role: "dialog", "aria-label": "Color picker", children: [_jsx("div", { className: "relative h-32 rounded-md cursor-crosshair touch-none", style: {
|
|
311
|
+
background: `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, ${hueColor})`,
|
|
312
|
+
}, onPointerDown: onSvDown, children: _jsx("div", { className: "absolute w-3 h-3 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.6)] -translate-x-1/2 -translate-y-1/2 pointer-events-none", style: {
|
|
313
|
+
left: `${hsv.s * 100}%`,
|
|
314
|
+
top: `${(1 - hsv.v) * 100}%`,
|
|
315
|
+
background: opaque,
|
|
316
|
+
} }) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "relative flex-1 h-3 rounded-full cursor-ew-resize touch-none", style: {
|
|
317
|
+
background: 'linear-gradient(90deg, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)',
|
|
318
|
+
}, onPointerDown: onHueDown, children: _jsx("div", { className: "absolute top-1/2 -translate-y-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)] pointer-events-none",
|
|
319
|
+
// Inset travel by the thumb width so the knob stays fully
|
|
320
|
+
// inside the track at both ends (no overhang past the edge).
|
|
321
|
+
style: { left: `calc(${hsv.h / 360} * (100% - 14px))`, background: hueColor } }) }), hasEyedropper && (_jsx("button", { type: "button", className: "w-7 h-7 grid place-items-center rounded-md bg-field hover:bg-field-hover text-muted-foreground hover:text-foreground transition-colors shrink-0", title: "Pick a color from the screen", "aria-label": "Eyedropper", onClick: () => void pickEyedropper(), children: _jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: "M13.7 2.3a2 2 0 0 0-2.83 0l-1.6 1.6-.59-.58L7.27 4.73l.58.59-4.6 4.6a1 1 0 0 0-.25.41l-.7 2.32a.5.5 0 0 0 .62.62l2.32-.7a1 1 0 0 0 .41-.24l4.6-4.61.59.58 1.41-1.41-.58-.59 1.6-1.6a2 2 0 0 0 0-2.82ZM8.83 6.93l-4.36 4.36-1.06.32.32-1.06 4.36-4.36.74.74Z", fill: "currentColor" }) }) }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("div", { className: "relative flex-1 h-3 cursor-ew-resize touch-none", onPointerDown: onAlphaDown, children: [_jsxs("div", { className: "absolute inset-0 rounded-full overflow-hidden", children: [_jsx("div", { className: "absolute inset-0", style: { background: CHECKER } }), _jsx("div", { className: "absolute inset-0", style: { background: `linear-gradient(90deg, transparent, ${opaque})` } })] }), _jsx("div", { className: "absolute top-1/2 -translate-y-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)] pointer-events-none", style: { left: `calc(${alpha} * (100% - 14px))`, background: current } })] }), _jsx("input", { className: "h-6 w-12 ml-1 shrink-0 bg-field hover:bg-field-hover focus:ring-1 focus:ring-ring rounded-md px-1 text-[11px] font-mono tabular-nums text-foreground/90 text-right outline-none transition-colors", value: alphaDraft ?? `${Math.round(alpha * 100)}`, "aria-label": "Opacity percent", inputMode: "numeric", onChange: (e) => {
|
|
322
|
+
if (/^\d{0,3}$/.test(e.target.value))
|
|
323
|
+
setAlphaDraft(e.target.value);
|
|
324
|
+
}, onBlur: (e) => {
|
|
325
|
+
if (alphaDraft !== null)
|
|
326
|
+
commitAlphaText(e.target.value);
|
|
327
|
+
}, onKeyDown: (e) => {
|
|
328
|
+
if (e.key === 'Enter')
|
|
329
|
+
e.target.blur();
|
|
330
|
+
if (e.key === 'Escape') {
|
|
331
|
+
setAlphaDraft(null);
|
|
332
|
+
e.target.blur();
|
|
333
|
+
}
|
|
334
|
+
e.stopPropagation();
|
|
335
|
+
}, spellCheck: false })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("select", { className: "h-6 w-14 shrink-0 bg-field hover:bg-field-hover rounded-md px-1 text-[11px] text-foreground outline-none cursor-pointer transition-colors uppercase", value: format, onChange: (e) => setFormat(e.target.value), children: [_jsx("option", { value: "hex", children: "Hex" }), _jsx("option", { value: "rgb", children: "RGB" }), _jsx("option", { value: "hsl", children: "HSL" })] }), _jsx("input", { className: "h-6 flex-1 min-w-0 bg-field hover:bg-field-hover focus:ring-1 focus:ring-ring rounded-md px-1.5 text-[11px] font-mono text-foreground/90 outline-none transition-colors", value: draft ?? formatted, onChange: (e) => setDraft(e.target.value), onBlur: (e) => draft !== null && commitText(e.target.value), onKeyDown: (e) => {
|
|
336
|
+
if (e.key === 'Enter')
|
|
337
|
+
e.target.blur();
|
|
338
|
+
if (e.key === 'Escape') {
|
|
339
|
+
setDraft(null);
|
|
340
|
+
e.target.blur();
|
|
341
|
+
}
|
|
342
|
+
e.stopPropagation(); // keep Escape-from-input from closing
|
|
343
|
+
}, spellCheck: false })] }), docColors.length > 0 && (_jsxs("div", { className: "flex flex-col gap-1 pt-0.5", children: [_jsx("span", { className: "text-[10px] text-muted-foreground/70", children: "Current colors" }), _jsx("div", { className: "grid grid-cols-8 gap-1", children: docColors.map((c) => (_jsxs("button", { type: "button", className: cn('relative h-5 rounded border overflow-hidden transition-transform hover:scale-110', c.toLowerCase() === current.toLowerCase()
|
|
344
|
+
? 'border-foreground'
|
|
345
|
+
: 'border-border/60'), title: c, "aria-label": `Use ${c}`, onClick: () => {
|
|
346
|
+
const rgb = parseHexColor(c);
|
|
347
|
+
if (!rgb)
|
|
348
|
+
return;
|
|
349
|
+
setHsv(rgbToHsv(rgb.r, rgb.g, rgb.b));
|
|
350
|
+
setAlpha(rgb.a);
|
|
351
|
+
onChange(toHexColor(rgb), false);
|
|
352
|
+
}, children: [_jsx("span", { className: "absolute inset-0", style: { background: CHECKER } }), _jsx("span", { className: "absolute inset-0", style: { background: c } })] }, c))) })] }))] }));
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=ColorPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorPicker.js","sourceRoot":"","sources":["../../src/controls/ColorPicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { FieldSpec } from '@clipkit/editor-core';
|
|
2
|
+
import { type ScrubHandlers } from './primitives.js';
|
|
3
|
+
/** Control kinds that take the full row width (label stacked above). */
|
|
4
|
+
export declare const WIDE_CONTROLS: Set<string>;
|
|
5
|
+
export interface ControlRendererProps extends ScrubHandlers {
|
|
6
|
+
spec: FieldSpec;
|
|
7
|
+
value: unknown;
|
|
8
|
+
/**
|
|
9
|
+
* live=true while scrubbing (dispatched with skipHistory after one
|
|
10
|
+
* onScrubStart snapshot); live=false is a committed single edit.
|
|
11
|
+
*/
|
|
12
|
+
onChange: (next: unknown, live: boolean) => void;
|
|
13
|
+
/** Stretch into the row's value column (the panel's fluid grid). */
|
|
14
|
+
fluid?: boolean;
|
|
15
|
+
/** The ◇ keyframe diamond — rendered INSIDE number-family wells
|
|
16
|
+
(per the reference HTML); other kinds get it appended beside. */
|
|
17
|
+
trailing?: React.ReactNode;
|
|
18
|
+
}
|
|
19
|
+
export declare function ControlRenderer({ spec, value, onChange, onScrubStart, onScrubEnd, fluid, trailing, }: ControlRendererProps): import("react").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=ControlRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ControlRenderer.d.ts","sourceRoot":"","sources":["../../src/controls/ControlRenderer.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAQL,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AA6BzB,wEAAwE;AACxE,eAAO,MAAM,aAAa,aAIxB,CAAC;AAEH,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;wEACoE;IACpE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,KAAK,EACL,QAAQ,GACT,EAAE,oBAAoB,+BA+QtB"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// ControlRenderer — FieldSpec.control → interactive knob (D2: the
|
|
2
|
+
// inspector never hand-wires a field; this single mapping is the only
|
|
3
|
+
// place control kinds meet components). Compound kinds (keyframes /
|
|
4
|
+
// list / json) render read-only chips until their bespoke widgets
|
|
5
|
+
// land (B4 / B7 / B11).
|
|
6
|
+
'use client';
|
|
7
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { ColorControl, KeyframedChip, LengthControl, NumberControl, SelectControl, TextControl, ToggleControl, } from './primitives.js';
|
|
9
|
+
import { BoxShadowControl, CaptionWordsControl, GradientControl, TextMaskControl, TextSpansControl, TextareaControl, } from './compound.js';
|
|
10
|
+
import { EffectsStackControl } from './EffectsStack.js';
|
|
11
|
+
import { GradeControl } from './GradeControl.js';
|
|
12
|
+
import { ShapePresetControl } from './ShapePresetControl.js';
|
|
13
|
+
import { CaptionLengthControl } from './CaptionLengthControl.js';
|
|
14
|
+
import { AnimationsStackControl } from './AnimationsStack.js';
|
|
15
|
+
import { CameraControl, MotionBlurControl } from './CameraControl.js';
|
|
16
|
+
import { MaterialControl, LightsControl, EnvironmentControl, BloomControl } from './LightingControls.js';
|
|
17
|
+
/** Control kinds that take the full row width (label stacked above). */
|
|
18
|
+
export const WIDE_CONTROLS = new Set([
|
|
19
|
+
'gradient', 'box-shadow', 'text-mask', 'caption-words', 'text-spans', 'textarea',
|
|
20
|
+
'effects-stack', 'animations-stack', 'camera', 'motion-blur',
|
|
21
|
+
'material', 'lights', 'environment', 'bloom', 'color-grade',
|
|
22
|
+
]);
|
|
23
|
+
export function ControlRenderer({ spec, value, onChange, onScrubStart, onScrubEnd, fluid, trailing, }) {
|
|
24
|
+
// A Keyframe[] where a scalar belongs = the field is animated;
|
|
25
|
+
// direct editing routes through the curve editor (B7).
|
|
26
|
+
if (spec.animatable && Array.isArray(value)) {
|
|
27
|
+
return beside(_jsx(KeyframedChip, {}), trailing);
|
|
28
|
+
}
|
|
29
|
+
const scrub = { onScrubStart, onScrubEnd };
|
|
30
|
+
switch (spec.control) {
|
|
31
|
+
case 'number':
|
|
32
|
+
return (_jsx(NumberControl, { value: typeof value === 'number' ? value : 0, min: spec.min, max: spec.max, step: spec.step ?? 1, fluid: fluid, trailing: trailing, stepper: fluid, onChange: onChange, ...scrub }));
|
|
33
|
+
case 'percent':
|
|
34
|
+
return (_jsx(NumberControl, { value: typeof value === 'number' ? value : 100, min: spec.min ?? 0, max: spec.max ?? 100, step: spec.step ?? 1, suffix: "%", fluid: fluid, trailing: trailing, stepper: fluid, onChange: onChange, ...scrub }));
|
|
35
|
+
case 'angle':
|
|
36
|
+
return (_jsx(NumberControl, { value: typeof value === 'number' ? value : 0, min: spec.min, max: spec.max, step: spec.step ?? 1, suffix: "\u00B0", fluid: fluid, trailing: trailing, stepper: fluid, onChange: onChange, ...scrub }));
|
|
37
|
+
case 'length':
|
|
38
|
+
return (_jsx(LengthControl, { value: typeof value === 'number' || typeof value === 'string' ? value : 0, step: spec.step ?? 1, fluid: fluid, trailing: trailing, stepper: fluid, onChange: onChange, ...scrub }));
|
|
39
|
+
case 'color':
|
|
40
|
+
return beside(_jsx(ColorControl, { value: typeof value === 'string' ? value : '#ffffff', fluid: fluid, onChange: (v, live) => onChange(v, live ?? false), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }), trailing);
|
|
41
|
+
case 'select':
|
|
42
|
+
return beside(_jsx(SelectControl, { value: typeof value === 'string' ? value : String(value ?? ''), options: spec.options ?? [], fluid: fluid, onChange: (v) => onChange(v, false) }), trailing);
|
|
43
|
+
case 'shape-preset':
|
|
44
|
+
// Self-managed: patches the selected element between primitive and path
|
|
45
|
+
// forms (rectangle/ellipse vs triangle/star/line/…). Ignores value/onChange.
|
|
46
|
+
return beside(_jsx(ShapePresetControl, { fluid: fluid }), trailing);
|
|
47
|
+
case 'caption-length':
|
|
48
|
+
// Caption windowing: Auto (word-chunks) / N letters / Off (show all).
|
|
49
|
+
return beside(_jsx(CaptionLengthControl, { value: value, onChange: (v) => onChange(v, false) }), trailing);
|
|
50
|
+
case 'color-grade':
|
|
51
|
+
// Self-managed: reads the selected element + patches its filter fields
|
|
52
|
+
// through a fly-out (the Color panel). Ignores value/onChange.
|
|
53
|
+
return _jsx(GradeControl, {});
|
|
54
|
+
case 'toggle':
|
|
55
|
+
return beside(_jsx(ToggleControl, { value: value === true, onChange: (v) => onChange(v, false) }), trailing);
|
|
56
|
+
case 'effects-stack':
|
|
57
|
+
return (_jsx(EffectsStackControl, { value: value, onChange: (v, live) => onChange(v, live), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
58
|
+
case 'animations-stack':
|
|
59
|
+
return (_jsx(AnimationsStackControl, { value: value, onChange: (v, live) => onChange(v, live), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
60
|
+
case 'speed': {
|
|
61
|
+
// playback_rate as a percent (rate 1 = 100%), with steppers.
|
|
62
|
+
const rate = typeof value === 'number' ? value : 1;
|
|
63
|
+
const min = (spec.min ?? 0.05) * 100;
|
|
64
|
+
const max = (spec.max ?? 8) * 100;
|
|
65
|
+
const clamp = (p) => Math.min(max, Math.max(min, p));
|
|
66
|
+
return (_jsx(NumberControl, { value: Math.round(rate * 100), min: min, max: max, step: 5, suffix: "%", width: fluid ? undefined : 56, fluid: fluid, trailing: trailing, stepper: true, onChange: (v, live) => onChange(clamp(v) / 100, live), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
67
|
+
}
|
|
68
|
+
case 'textarea':
|
|
69
|
+
return (_jsx(TextareaControl, { value: typeof value === 'string' ? value : '', onChange: (v, live) => onChange(v, live), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
70
|
+
case 'gradient':
|
|
71
|
+
return (_jsx(GradientControl, { value: value, onChange: (v, live) => onChange(v, live ?? false), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
72
|
+
case 'box-shadow':
|
|
73
|
+
return (_jsx(BoxShadowControl, { value: value, onChange: (v) => onChange(v, false) }));
|
|
74
|
+
case 'camera':
|
|
75
|
+
return (_jsx(CameraControl, { value: value, onChange: (v, live) => onChange(v, live), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
76
|
+
case 'motion-blur':
|
|
77
|
+
return (_jsx(MotionBlurControl, { value: value, onChange: (v, live) => onChange(v, live), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
78
|
+
case 'material':
|
|
79
|
+
return (_jsx(MaterialControl, { value: value, onChange: (v, live) => onChange(v, live), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
80
|
+
case 'lights':
|
|
81
|
+
return (_jsx(LightsControl, { value: value, onChange: (v, live) => onChange(v, live), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
82
|
+
case 'environment':
|
|
83
|
+
return (_jsx(EnvironmentControl, { value: value, onChange: (v, live) => onChange(v, live) }));
|
|
84
|
+
case 'bloom':
|
|
85
|
+
return (_jsx(BloomControl, { value: value, onChange: (v, live) => onChange(v, live), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
86
|
+
case 'text-mask':
|
|
87
|
+
return (_jsx(TextMaskControl, { value: value, onChange: (v) => onChange(v, false) }));
|
|
88
|
+
case 'caption-words':
|
|
89
|
+
return (_jsx(CaptionWordsControl, { value: value, onChange: (v) => onChange(v, false) }));
|
|
90
|
+
case 'text-spans':
|
|
91
|
+
return (_jsx(TextSpansControl, { value: value, onChange: (v, live) => onChange(v, live ?? false), onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }));
|
|
92
|
+
case 'text':
|
|
93
|
+
case 'url':
|
|
94
|
+
return beside(_jsx(TextControl, { value: typeof value === 'string' ? value : '', fluid: fluid, onChange: (v) => onChange(v, false) }), trailing);
|
|
95
|
+
default:
|
|
96
|
+
// keyframes / list / json — bespoke widgets land in B4/B7/B11.
|
|
97
|
+
return beside(_jsx("span", { className: "text-[11px] font-mono text-muted-foreground/60 tabular-nums", children: Array.isArray(value) ? `[${value.length}]` : value === undefined ? '—' : '{…}' }), trailing);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/** Kinds that can't host the ◇ inside the well get it appended. */
|
|
101
|
+
function beside(control, trailing) {
|
|
102
|
+
if (!trailing)
|
|
103
|
+
return _jsx(_Fragment, { children: control });
|
|
104
|
+
return (_jsxs("div", { className: "flex items-center gap-1 w-full min-w-0 justify-end", children: [control, trailing] }));
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=ControlRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ControlRenderer.js","sourceRoot":"","sources":["../../src/controls/ControlRenderer.tsx"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,sEAAsE;AACtE,oEAAoE;AACpE,kEAAkE;AAClE,wBAAwB;AAExB,YAAY,CAAC;;AAIb,OAAO,EACL,YAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,GAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,eAAe,CAAC;AAUvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKzG,wEAAwE;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IACnC,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU;IAChF,eAAe,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa;IAC5D,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa;CAC5D,CAAC,CAAC;AAiBH,MAAM,UAAU,eAAe,CAAC,EAC9B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,KAAK,EACL,QAAQ,GACa;IACrB,+DAA+D;IAC/D,uDAAuD;IACvD,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,KAAC,aAAa,KAAG,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;IAE3C,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC5C,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,QAAQ,KACd,KAAK,GACT,CACH,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAC9C,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,EAClB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,EACpB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,EACpB,MAAM,EAAC,GAAG,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,QAAQ,KACd,KAAK,GACT,CACH,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC5C,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,EACpB,MAAM,EAAC,QAAG,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,QAAQ,KACd,KAAK,GACT,CACH,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EACH,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAEpE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,QAAQ,KACd,KAAK,GACT,CACH,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,MAAM,CACX,KAAC,YAAY,IACX,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EACpD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,EACjD,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,EACF,QAAQ,CACT,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,MAAM,CACX,KAAC,aAAa,IACZ,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EAC9D,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAC3B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GACnC,EACF,QAAQ,CACT,CAAC;QACJ,KAAK,cAAc;YACjB,wEAAwE;YACxE,6EAA6E;YAC7E,OAAO,MAAM,CAAC,KAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,GAAI,EAAE,QAAQ,CAAC,CAAC;QAChE,KAAK,gBAAgB;YACnB,sEAAsE;YACtE,OAAO,MAAM,CACX,KAAC,oBAAoB,IAAC,KAAK,EAAE,KAAoC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GAAI,EAC1G,QAAQ,CACT,CAAC;QACJ,KAAK,aAAa;YAChB,uEAAuE;YACvE,+DAA+D;YAC/D,OAAO,KAAC,YAAY,KAAG,CAAC;QAC1B,KAAK,QAAQ;YACX,OAAO,MAAM,CACX,KAAC,aAAa,IACZ,KAAK,EAAE,KAAK,KAAK,IAAI,EACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GACnC,EACF,QAAQ,CACT,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO,CACL,KAAC,mBAAmB,IAClB,KAAK,EAAE,KAA6B,EACpC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EACxC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,KAAK,kBAAkB;YACrB,OAAO,CACL,KAAC,sBAAsB,IACrB,KAAK,EAAE,KAAgC,EACvC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EACxC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,6DAA6D;YAC7D,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC;YACrC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YAClC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACrE,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,EAC7B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,CAAC,EACP,MAAM,EAAC,GAAG,EACV,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAC7B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,QACP,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,EACrD,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,CAAC;QACD,KAAK,UAAU;YACb,OAAO,CACL,KAAC,eAAe,IACd,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAC7C,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EACxC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,KAAK,UAAU;YACb,OAAO,CACL,KAAC,eAAe,IACd,KAAK,EAAE,KAA6B,EACpC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,EACjD,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,KAAK,YAAY;YACf,OAAO,CACL,KAAC,gBAAgB,IACf,KAAK,EAAE,KAAsC,EAC7C,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GACnC,CACH,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAE,KAA2B,EAClC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EACxC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO,CACL,KAAC,iBAAiB,IAChB,KAAK,EAAE,KAA2D,EAClE,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EACxC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,KAAK,UAAU;YACb,OAAO,CACL,KAAC,eAAe,IACd,KAAK,EAAE,KAA6B,EACpC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EACxC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAE,KAA4B,EACnC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EACxC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO,CACL,KAAC,kBAAkB,IACjB,KAAK,EAAE,KAAgC,EACvC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GACxC,CACH,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,CACL,KAAC,YAAY,IACX,KAAK,EAAE,KAA0B,EACjC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EACxC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,KAAK,WAAW;YACd,OAAO,CACL,KAAC,eAAe,IACd,KAAK,EAAE,KAA6B,EACpC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GACnC,CACH,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO,CACL,KAAC,mBAAmB,IAClB,KAAK,EAAE,KAAkC,EACzC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GACnC,CACH,CAAC;QACJ,KAAK,YAAY;YACf,OAAO,CACL,KAAC,gBAAgB,IACf,KAAK,EAAE,KAA+B,EACtC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,EACjD,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,MAAM,CACX,KAAC,WAAW,IACV,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAC7C,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GACnC,EACF,QAAQ,CACT,CAAC;QACJ;YACE,+DAA+D;YAC/D,OAAO,MAAM,CACX,eAAM,SAAS,EAAC,6DAA6D,YAC1E,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAC1E,EACP,QAAQ,CACT,CAAC;IACN,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,SAAS,MAAM,CAAC,OAAwB,EAAE,QAA0B;IAClE,IAAI,CAAC,QAAQ;QAAE,OAAO,4BAAG,OAAO,GAAI,CAAC;IACrC,OAAO,CACL,eAAK,SAAS,EAAC,oDAAoD,aAChE,OAAO,EACP,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CropControl.d.ts","sourceRoot":"","sources":["../../src/controls/CropControl.tsx"],"names":[],"mappings":"AAmCA,wBAAgB,WAAW,uCAmH1B"}
|