@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.
Files changed (248) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +51 -0
  3. package/dist/Editor.d.ts +3 -0
  4. package/dist/Editor.d.ts.map +1 -0
  5. package/dist/Editor.js +73 -0
  6. package/dist/Editor.js.map +1 -0
  7. package/dist/ExportDialog.d.ts +12 -0
  8. package/dist/ExportDialog.d.ts.map +1 -0
  9. package/dist/ExportDialog.js +30 -0
  10. package/dist/ExportDialog.js.map +1 -0
  11. package/dist/MotionPathOverlay.d.ts +5 -0
  12. package/dist/MotionPathOverlay.d.ts.map +1 -0
  13. package/dist/MotionPathOverlay.js +156 -0
  14. package/dist/MotionPathOverlay.js.map +1 -0
  15. package/dist/PerfHud.d.ts +2 -0
  16. package/dist/PerfHud.d.ts.map +1 -0
  17. package/dist/PerfHud.js +85 -0
  18. package/dist/PerfHud.js.map +1 -0
  19. package/dist/Stage.d.ts +2 -0
  20. package/dist/Stage.d.ts.map +1 -0
  21. package/dist/Stage.js +406 -0
  22. package/dist/Stage.js.map +1 -0
  23. package/dist/StageOverlay.d.ts +7 -0
  24. package/dist/StageOverlay.d.ts.map +1 -0
  25. package/dist/StageOverlay.js +508 -0
  26. package/dist/StageOverlay.js.map +1 -0
  27. package/dist/commands.d.ts +18 -0
  28. package/dist/commands.d.ts.map +1 -0
  29. package/dist/commands.js +103 -0
  30. package/dist/commands.js.map +1 -0
  31. package/dist/configuration.d.ts +9 -0
  32. package/dist/configuration.d.ts.map +1 -0
  33. package/dist/configuration.js +21 -0
  34. package/dist/configuration.js.map +1 -0
  35. package/dist/controls/AnimationsStack.d.ts +8 -0
  36. package/dist/controls/AnimationsStack.d.ts.map +1 -0
  37. package/dist/controls/AnimationsStack.js +188 -0
  38. package/dist/controls/AnimationsStack.js.map +1 -0
  39. package/dist/controls/CameraControl.d.ts +19 -0
  40. package/dist/controls/CameraControl.d.ts.map +1 -0
  41. package/dist/controls/CameraControl.js +47 -0
  42. package/dist/controls/CameraControl.js.map +1 -0
  43. package/dist/controls/CaptionLengthControl.d.ts +5 -0
  44. package/dist/controls/CaptionLengthControl.d.ts.map +1 -0
  45. package/dist/controls/CaptionLengthControl.js +11 -0
  46. package/dist/controls/CaptionLengthControl.js.map +1 -0
  47. package/dist/controls/CaptionTranscribe.d.ts +2 -0
  48. package/dist/controls/CaptionTranscribe.d.ts.map +1 -0
  49. package/dist/controls/CaptionTranscribe.js +95 -0
  50. package/dist/controls/CaptionTranscribe.js.map +1 -0
  51. package/dist/controls/ColorPicker.d.ts +17 -0
  52. package/dist/controls/ColorPicker.d.ts.map +1 -0
  53. package/dist/controls/ColorPicker.js +354 -0
  54. package/dist/controls/ColorPicker.js.map +1 -0
  55. package/dist/controls/ControlRenderer.d.ts +20 -0
  56. package/dist/controls/ControlRenderer.d.ts.map +1 -0
  57. package/dist/controls/ControlRenderer.js +106 -0
  58. package/dist/controls/ControlRenderer.js.map +1 -0
  59. package/dist/controls/CropControl.d.ts +2 -0
  60. package/dist/controls/CropControl.d.ts.map +1 -0
  61. package/dist/controls/CropControl.js +177 -0
  62. package/dist/controls/CropControl.js.map +1 -0
  63. package/dist/controls/EffectsStack.d.ts +8 -0
  64. package/dist/controls/EffectsStack.d.ts.map +1 -0
  65. package/dist/controls/EffectsStack.js +89 -0
  66. package/dist/controls/EffectsStack.js.map +1 -0
  67. package/dist/controls/GradeControl.d.ts +2 -0
  68. package/dist/controls/GradeControl.d.ts.map +1 -0
  69. package/dist/controls/GradeControl.js +120 -0
  70. package/dist/controls/GradeControl.js.map +1 -0
  71. package/dist/controls/KeyframeDiamond.d.ts +11 -0
  72. package/dist/controls/KeyframeDiamond.d.ts.map +1 -0
  73. package/dist/controls/KeyframeDiamond.js +87 -0
  74. package/dist/controls/KeyframeDiamond.js.map +1 -0
  75. package/dist/controls/LightingControls.d.ts +24 -0
  76. package/dist/controls/LightingControls.d.ts.map +1 -0
  77. package/dist/controls/LightingControls.js +108 -0
  78. package/dist/controls/LightingControls.js.map +1 -0
  79. package/dist/controls/ShapePresetControl.d.ts +4 -0
  80. package/dist/controls/ShapePresetControl.d.ts.map +1 -0
  81. package/dist/controls/ShapePresetControl.js +30 -0
  82. package/dist/controls/ShapePresetControl.js.map +1 -0
  83. package/dist/controls/ValueField.d.ts +10 -0
  84. package/dist/controls/ValueField.d.ts.map +1 -0
  85. package/dist/controls/ValueField.js +158 -0
  86. package/dist/controls/ValueField.js.map +1 -0
  87. package/dist/controls/VolumeControl.d.ts +10 -0
  88. package/dist/controls/VolumeControl.d.ts.map +1 -0
  89. package/dist/controls/VolumeControl.js +75 -0
  90. package/dist/controls/VolumeControl.js.map +1 -0
  91. package/dist/controls/compound.d.ts +46 -0
  92. package/dist/controls/compound.d.ts.map +1 -0
  93. package/dist/controls/compound.js +160 -0
  94. package/dist/controls/compound.js.map +1 -0
  95. package/dist/controls/layout.d.ts +38 -0
  96. package/dist/controls/layout.d.ts.map +1 -0
  97. package/dist/controls/layout.js +162 -0
  98. package/dist/controls/layout.js.map +1 -0
  99. package/dist/controls/primitives.d.ts +83 -0
  100. package/dist/controls/primitives.d.ts.map +1 -0
  101. package/dist/controls/primitives.js +194 -0
  102. package/dist/controls/primitives.js.map +1 -0
  103. package/dist/controls/transcribe.worker.d.ts +2 -0
  104. package/dist/controls/transcribe.worker.d.ts.map +1 -0
  105. package/dist/controls/transcribe.worker.js +22 -0
  106. package/dist/controls/transcribe.worker.js.map +1 -0
  107. package/dist/frame/AddElementBar.d.ts +2 -0
  108. package/dist/frame/AddElementBar.d.ts.map +1 -0
  109. package/dist/frame/AddElementBar.js +103 -0
  110. package/dist/frame/AddElementBar.js.map +1 -0
  111. package/dist/frame/Breadcrumbs.d.ts +2 -0
  112. package/dist/frame/Breadcrumbs.d.ts.map +1 -0
  113. package/dist/frame/Breadcrumbs.js +32 -0
  114. package/dist/frame/Breadcrumbs.js.map +1 -0
  115. package/dist/frame/GroupFlash.d.ts +2 -0
  116. package/dist/frame/GroupFlash.d.ts.map +1 -0
  117. package/dist/frame/GroupFlash.js +65 -0
  118. package/dist/frame/GroupFlash.js.map +1 -0
  119. package/dist/frame/Resizable.d.ts +12 -0
  120. package/dist/frame/Resizable.d.ts.map +1 -0
  121. package/dist/frame/Resizable.js +37 -0
  122. package/dist/frame/Resizable.js.map +1 -0
  123. package/dist/frame/Section.d.ts +23 -0
  124. package/dist/frame/Section.d.ts.map +1 -0
  125. package/dist/frame/Section.js +23 -0
  126. package/dist/frame/Section.js.map +1 -0
  127. package/dist/frame/ZoomControl.d.ts +9 -0
  128. package/dist/frame/ZoomControl.d.ts.map +1 -0
  129. package/dist/frame/ZoomControl.js +15 -0
  130. package/dist/frame/ZoomControl.js.map +1 -0
  131. package/dist/index.d.ts +9 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +13 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/lib/camera-gizmo.d.ts +15 -0
  136. package/dist/lib/camera-gizmo.d.ts.map +1 -0
  137. package/dist/lib/camera-gizmo.js +57 -0
  138. package/dist/lib/camera-gizmo.js.map +1 -0
  139. package/dist/lib/camera-tool.d.ts +43 -0
  140. package/dist/lib/camera-tool.d.ts.map +1 -0
  141. package/dist/lib/camera-tool.js +80 -0
  142. package/dist/lib/camera-tool.js.map +1 -0
  143. package/dist/lib/caption-segments.d.ts +17 -0
  144. package/dist/lib/caption-segments.d.ts.map +1 -0
  145. package/dist/lib/caption-segments.js +50 -0
  146. package/dist/lib/caption-segments.js.map +1 -0
  147. package/dist/lib/group.d.ts +12 -0
  148. package/dist/lib/group.d.ts.map +1 -0
  149. package/dist/lib/group.js +61 -0
  150. package/dist/lib/group.js.map +1 -0
  151. package/dist/lib/keyframes.d.ts +29 -0
  152. package/dist/lib/keyframes.d.ts.map +1 -0
  153. package/dist/lib/keyframes.js +92 -0
  154. package/dist/lib/keyframes.js.map +1 -0
  155. package/dist/lib/sfx-preview.d.ts +18 -0
  156. package/dist/lib/sfx-preview.d.ts.map +1 -0
  157. package/dist/lib/sfx-preview.js +74 -0
  158. package/dist/lib/sfx-preview.js.map +1 -0
  159. package/dist/lib/shape-presets.d.ts +35 -0
  160. package/dist/lib/shape-presets.d.ts.map +1 -0
  161. package/dist/lib/shape-presets.js +81 -0
  162. package/dist/lib/shape-presets.js.map +1 -0
  163. package/dist/lib/ungroup.d.ts +12 -0
  164. package/dist/lib/ungroup.d.ts.map +1 -0
  165. package/dist/lib/ungroup.js +40 -0
  166. package/dist/lib/ungroup.js.map +1 -0
  167. package/dist/lib/utils.d.ts +3 -0
  168. package/dist/lib/utils.d.ts.map +1 -0
  169. package/dist/lib/utils.js +9 -0
  170. package/dist/lib/utils.js.map +1 -0
  171. package/dist/panels/AssetsPanel.d.ts +2 -0
  172. package/dist/panels/AssetsPanel.d.ts.map +1 -0
  173. package/dist/panels/AssetsPanel.js +108 -0
  174. package/dist/panels/AssetsPanel.js.map +1 -0
  175. package/dist/panels/InspectorPanel.d.ts +2 -0
  176. package/dist/panels/InspectorPanel.d.ts.map +1 -0
  177. package/dist/panels/InspectorPanel.js +286 -0
  178. package/dist/panels/InspectorPanel.js.map +1 -0
  179. package/dist/panels/InterpolationPanel.d.ts +2 -0
  180. package/dist/panels/InterpolationPanel.d.ts.map +1 -0
  181. package/dist/panels/InterpolationPanel.js +226 -0
  182. package/dist/panels/InterpolationPanel.js.map +1 -0
  183. package/dist/panels/LayersTree.d.ts +4 -0
  184. package/dist/panels/LayersTree.d.ts.map +1 -0
  185. package/dist/panels/LayersTree.js +137 -0
  186. package/dist/panels/LayersTree.js.map +1 -0
  187. package/dist/panels/LeftRail.d.ts +6 -0
  188. package/dist/panels/LeftRail.d.ts.map +1 -0
  189. package/dist/panels/LeftRail.js +35 -0
  190. package/dist/panels/LeftRail.js.map +1 -0
  191. package/dist/panels/SourcePanel.d.ts +2 -0
  192. package/dist/panels/SourcePanel.d.ts.map +1 -0
  193. package/dist/panels/SourcePanel.js +470 -0
  194. package/dist/panels/SourcePanel.js.map +1 -0
  195. package/dist/panels/TimelinePanel.d.ts +11 -0
  196. package/dist/panels/TimelinePanel.d.ts.map +1 -0
  197. package/dist/panels/TimelinePanel.js +98 -0
  198. package/dist/panels/TimelinePanel.js.map +1 -0
  199. package/dist/panels/assets/SfxBrowser.d.ts +2 -0
  200. package/dist/panels/assets/SfxBrowser.d.ts.map +1 -0
  201. package/dist/panels/assets/SfxBrowser.js +49 -0
  202. package/dist/panels/assets/SfxBrowser.js.map +1 -0
  203. package/dist/panels/assets/use-assets.d.ts +11 -0
  204. package/dist/panels/assets/use-assets.d.ts.map +1 -0
  205. package/dist/panels/assets/use-assets.js +84 -0
  206. package/dist/panels/assets/use-assets.js.map +1 -0
  207. package/dist/panels/assets/use-sfx.d.ts +6 -0
  208. package/dist/panels/assets/use-sfx.d.ts.map +1 -0
  209. package/dist/panels/assets/use-sfx.js +47 -0
  210. package/dist/panels/assets/use-sfx.js.map +1 -0
  211. package/dist/panels/timeline/CanvasTimeline.d.ts +7 -0
  212. package/dist/panels/timeline/CanvasTimeline.d.ts.map +1 -0
  213. package/dist/panels/timeline/CanvasTimeline.js +1536 -0
  214. package/dist/panels/timeline/CanvasTimeline.js.map +1 -0
  215. package/dist/panels/timeline/Clip.d.ts +37 -0
  216. package/dist/panels/timeline/Clip.d.ts.map +1 -0
  217. package/dist/panels/timeline/Clip.js +176 -0
  218. package/dist/panels/timeline/Clip.js.map +1 -0
  219. package/dist/panels/timeline/CurveEditor.d.ts +2 -0
  220. package/dist/panels/timeline/CurveEditor.d.ts.map +1 -0
  221. package/dist/panels/timeline/CurveEditor.js +233 -0
  222. package/dist/panels/timeline/CurveEditor.js.map +1 -0
  223. package/dist/panels/timeline/MixerRail.d.ts +7 -0
  224. package/dist/panels/timeline/MixerRail.d.ts.map +1 -0
  225. package/dist/panels/timeline/MixerRail.js +295 -0
  226. package/dist/panels/timeline/MixerRail.js.map +1 -0
  227. package/dist/panels/timeline/Waveform.d.ts +11 -0
  228. package/dist/panels/timeline/Waveform.d.ts.map +1 -0
  229. package/dist/panels/timeline/Waveform.js +63 -0
  230. package/dist/panels/timeline/Waveform.js.map +1 -0
  231. package/dist/panels/timeline/clip-style.d.ts +10 -0
  232. package/dist/panels/timeline/clip-style.d.ts.map +1 -0
  233. package/dist/panels/timeline/clip-style.js +20 -0
  234. package/dist/panels/timeline/clip-style.js.map +1 -0
  235. package/dist/panels/timeline/filmstrip.d.ts +7 -0
  236. package/dist/panels/timeline/filmstrip.d.ts.map +1 -0
  237. package/dist/panels/timeline/filmstrip.js +135 -0
  238. package/dist/panels/timeline/filmstrip.js.map +1 -0
  239. package/dist/panels/timeline/timeline-layout.d.ts +65 -0
  240. package/dist/panels/timeline/timeline-layout.d.ts.map +1 -0
  241. package/dist/panels/timeline/timeline-layout.js +118 -0
  242. package/dist/panels/timeline/timeline-layout.js.map +1 -0
  243. package/dist/types.d.ts +68 -0
  244. package/dist/types.d.ts.map +1 -0
  245. package/dist/types.js +3 -0
  246. package/dist/types.js.map +1 -0
  247. package/package.json +56 -0
  248. 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":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function CropControl(): import("react").JSX.Element | null;
2
+ //# sourceMappingURL=CropControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CropControl.d.ts","sourceRoot":"","sources":["../../src/controls/CropControl.tsx"],"names":[],"mappings":"AAmCA,wBAAgB,WAAW,uCAmH1B"}