@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 @@
1
+ {"version":3,"file":"keyframes.js","sourceRoot":"","sources":["../../src/lib/keyframes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type Sfx } from '@clipkit/sfx';
2
+ /** Stop whatever preview is currently playing (no-op if nothing is). */
3
+ export declare function stopSfx(): void;
4
+ /**
5
+ * Play a rendered Sfx once through the shared AudioContext. Cuts off any
6
+ * preview already playing (clicking around the catalog never stacks sounds).
7
+ * Returns the duration in seconds, or 0 if audio isn't available.
8
+ */
9
+ export declare function playSfx(sfx: Sfx): number;
10
+ /** Length of a rendered Sfx in seconds. */
11
+ export declare function sfxDuration(sfx: Sfx): number;
12
+ /**
13
+ * Encode a rendered Sfx to a WAV blob and return an object-URL usable as an
14
+ * `audio` element's `source`. Caller owns the URL — revoke it when the element
15
+ * that references it is removed (or on unmount) to avoid leaking blobs.
16
+ */
17
+ export declare function sfxToObjectUrl(sfx: Sfx): string;
18
+ //# sourceMappingURL=sfx-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sfx-preview.d.ts","sourceRoot":"","sources":["../../src/lib/sfx-preview.ts"],"names":[],"mappings":"AASA,OAAO,EAAa,KAAK,GAAG,EAAE,MAAM,cAAc,CAAC;AAenD,wEAAwE;AACxE,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAmBxC;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAK/C"}
@@ -0,0 +1,74 @@
1
+ // Browser-side SFX preview + drop helpers. The catalog's renderSfx() gives us
2
+ // raw stereo PCM (a finished Sfx); here we either (a) play it through WebAudio
3
+ // for an instant preview, or (b) encode it to a WAV object-URL so it can be
4
+ // dropped on the timeline as a runtime-native `audio` element.
5
+ //
6
+ // Client-only: AudioContext / Blob / URL exist in the browser. The single
7
+ // shared AudioContext is created lazily on the first user gesture (a click),
8
+ // which is what browsers require for audio to start.
9
+ import { encodeWav } from '@clipkit/sfx';
10
+ let ctx = null;
11
+ let current = null;
12
+ function audioContext() {
13
+ if (typeof window === 'undefined')
14
+ return null;
15
+ if (!ctx) {
16
+ const Ctor = window.AudioContext ?? window.webkitAudioContext;
17
+ if (!Ctor)
18
+ return null;
19
+ ctx = new Ctor();
20
+ }
21
+ return ctx;
22
+ }
23
+ /** Stop whatever preview is currently playing (no-op if nothing is). */
24
+ export function stopSfx() {
25
+ if (current) {
26
+ try {
27
+ current.stop();
28
+ }
29
+ catch { /* already stopped */ }
30
+ current = null;
31
+ }
32
+ }
33
+ /**
34
+ * Play a rendered Sfx once through the shared AudioContext. Cuts off any
35
+ * preview already playing (clicking around the catalog never stacks sounds).
36
+ * Returns the duration in seconds, or 0 if audio isn't available.
37
+ */
38
+ export function playSfx(sfx) {
39
+ const ac = audioContext();
40
+ if (!ac)
41
+ return 0;
42
+ if (ac.state === 'suspended')
43
+ void ac.resume();
44
+ stopSfx();
45
+ const n = Math.min(sfx.left.length, sfx.right.length);
46
+ const buf = ac.createBuffer(2, n, sfx.sampleRate);
47
+ // getChannelData().set() sidesteps copyToChannel's strict typed-array generic.
48
+ buf.getChannelData(0).set(sfx.left.subarray(0, n));
49
+ buf.getChannelData(1).set(sfx.right.subarray(0, n));
50
+ const src = ac.createBufferSource();
51
+ src.buffer = buf;
52
+ src.connect(ac.destination);
53
+ src.onended = () => { if (current === src)
54
+ current = null; };
55
+ src.start();
56
+ current = src;
57
+ return n / sfx.sampleRate;
58
+ }
59
+ /** Length of a rendered Sfx in seconds. */
60
+ export function sfxDuration(sfx) {
61
+ return Math.min(sfx.left.length, sfx.right.length) / sfx.sampleRate;
62
+ }
63
+ /**
64
+ * Encode a rendered Sfx to a WAV blob and return an object-URL usable as an
65
+ * `audio` element's `source`. Caller owns the URL — revoke it when the element
66
+ * that references it is removed (or on unmount) to avoid leaking blobs.
67
+ */
68
+ export function sfxToObjectUrl(sfx) {
69
+ const wav = encodeWav(sfx);
70
+ // Copy into a fresh ArrayBuffer so the Blob owns contiguous bytes.
71
+ const blob = new Blob([wav.slice().buffer], { type: 'audio/wav' });
72
+ return URL.createObjectURL(blob);
73
+ }
74
+ //# sourceMappingURL=sfx-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sfx-preview.js","sourceRoot":"","sources":["../../src/lib/sfx-preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { ShapeElement } from '@clipkit/protocol';
2
+ export type ShapePreset = {
3
+ id: string;
4
+ label: string;
5
+ } & ({
6
+ form: 'rect';
7
+ radius: number;
8
+ } | {
9
+ form: 'ellipse';
10
+ } | {
11
+ form: 'fill';
12
+ d: string;
13
+ vb: [number, number, number, number];
14
+ } | {
15
+ form: 'stroke';
16
+ d: string;
17
+ vb: [number, number, number, number];
18
+ });
19
+ export declare const SHAPE_PRESETS: ShapePreset[];
20
+ /** The shape-specific fields for a preset — primitive (`shape`) or path form. */
21
+ export declare function presetFields(p: ShapePreset, color: string): Partial<ShapeElement>;
22
+ /** Detect a shape element's current preset id (by `shape` or matching path `d`). */
23
+ export declare function detectPreset(el: {
24
+ shape?: string;
25
+ border_radius?: unknown;
26
+ paths?: Array<{
27
+ d?: unknown;
28
+ }>;
29
+ } | undefined): string;
30
+ /** A clean designed icon for the preset (24 grid, stroked). */
31
+ export declare function PresetIcon({ p, className }: {
32
+ p: ShapePreset;
33
+ className?: string;
34
+ }): import("react").JSX.Element;
35
+ //# sourceMappingURL=shape-presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shape-presets.d.ts","sourceRoot":"","sources":["../../src/lib/shape-presets.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA+BtD,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,CACtD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CACtE,CAAC;AAGF,eAAO,MAAM,aAAa,EAAE,WAAW,EAWtC,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAKjF;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,SAAS,GAAG,MAAM,CAMhI;AAiBD,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,CAAC,EAAE,WAAW,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAMlF"}
@@ -0,0 +1,81 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from './utils.js';
3
+ const r0 = (n) => Math.round(n);
4
+ function geom(pts) {
5
+ const xs = pts.map((p) => p[0]);
6
+ const ys = pts.map((p) => p[1]);
7
+ const minX = Math.min(...xs), maxX = Math.max(...xs), minY = Math.min(...ys), maxY = Math.max(...ys);
8
+ const d = `M ${pts.map((p) => `${r0(p[0])} ${r0(p[1])}`).join(' L ')} Z`;
9
+ return { d, vb: [r0(minX), r0(minY), r0(maxX - minX), r0(maxY - minY)] };
10
+ }
11
+ function polyPts(n, rotDeg = -90, r = 50) {
12
+ const out = [];
13
+ for (let i = 0; i < n; i++) {
14
+ const a = ((rotDeg + (i * 360) / n) * Math.PI) / 180;
15
+ out.push([50 + r * Math.cos(a), 50 + r * Math.sin(a)]);
16
+ }
17
+ return out;
18
+ }
19
+ function starPts(points = 5, rotDeg = -90, ro = 50, ri = 23) {
20
+ const out = [];
21
+ for (let i = 0; i < points * 2; i++) {
22
+ const r = i % 2 ? ri : ro;
23
+ const a = ((rotDeg + (i * 180) / points) * Math.PI) / 180;
24
+ out.push([50 + r * Math.cos(a), 50 + r * Math.sin(a)]);
25
+ }
26
+ return out;
27
+ }
28
+ const ARROW = [[10, 38], [58, 38], [58, 20], [92, 50], [58, 80], [58, 62], [10, 62]];
29
+ const fill = (pts) => geom(pts);
30
+ export const SHAPE_PRESETS = [
31
+ { id: 'rectangle', label: 'Rectangle', form: 'rect', radius: 0 },
32
+ { id: 'rounded', label: 'Rounded', form: 'rect', radius: 32 },
33
+ { id: 'ellipse', label: 'Ellipse', form: 'ellipse' },
34
+ { id: 'triangle', label: 'Triangle', form: 'fill', ...fill(polyPts(3)) },
35
+ { id: 'diamond', label: 'Diamond', form: 'fill', ...fill(polyPts(4)) },
36
+ { id: 'pentagon', label: 'Pentagon', form: 'fill', ...fill(polyPts(5)) },
37
+ { id: 'hexagon', label: 'Hexagon', form: 'fill', ...fill(polyPts(6, 0)) },
38
+ { id: 'star', label: 'Star', form: 'fill', ...fill(starPts(5)) },
39
+ { id: 'arrow', label: 'Arrow', form: 'fill', ...fill(ARROW) },
40
+ { id: 'line', label: 'Line', form: 'stroke', d: 'M 0 50 L 100 50', vb: [0, 46.5, 100, 7] },
41
+ ];
42
+ /** The shape-specific fields for a preset — primitive (`shape`) or path form. */
43
+ export function presetFields(p, color) {
44
+ if (p.form === 'rect')
45
+ return { shape: 'rectangle', border_radius: p.radius, fill_color: color, paths: undefined, view_box: undefined };
46
+ if (p.form === 'ellipse')
47
+ return { shape: 'ellipse', fill_color: color, paths: undefined, view_box: undefined };
48
+ if (p.form === 'stroke')
49
+ return { paths: [{ d: p.d, stroke: color, stroke_width: 7, stroke_linecap: 'round' }], view_box: p.vb, shape: undefined, border_radius: undefined };
50
+ return { paths: [{ d: p.d, fill: color }], view_box: p.vb, shape: undefined, border_radius: undefined };
51
+ }
52
+ /** Detect a shape element's current preset id (by `shape` or matching path `d`). */
53
+ export function detectPreset(el) {
54
+ if (!el)
55
+ return 'rectangle';
56
+ const d = el.paths?.[0]?.d;
57
+ if (typeof d === 'string')
58
+ return SHAPE_PRESETS.find((p) => 'd' in p && p.d === d)?.id ?? 'rectangle';
59
+ if (el.shape === 'ellipse')
60
+ return 'ellipse';
61
+ return typeof el.border_radius === 'number' && el.border_radius > 0 ? 'rounded' : 'rectangle';
62
+ }
63
+ // Hand-tuned icons on a 24 grid — crisp at small sizes (unlike the raw element
64
+ // geometry, which is built for a 100-unit viewBox).
65
+ const ICONS = {
66
+ rectangle: _jsx("rect", { x: "4", y: "4", width: "16", height: "16", rx: "2.5" }),
67
+ rounded: _jsx("rect", { x: "4", y: "4", width: "16", height: "16", rx: "6" }),
68
+ ellipse: _jsx("ellipse", { cx: "12", cy: "12", rx: "9", ry: "6.5" }),
69
+ triangle: _jsx("path", { d: "M12 4 L20 19 L4 19 Z" }),
70
+ diamond: _jsx("path", { d: "M12 3 L21 12 L12 21 L3 12 Z" }),
71
+ pentagon: _jsx("path", { d: "M12 3 L20.6 9.2 L17.3 20 L6.7 20 L3.4 9.2 Z" }),
72
+ hexagon: _jsx("path", { d: "M8 3.8 L16 3.8 L21 12 L16 20.2 L8 20.2 L3 12 Z" }),
73
+ star: _jsx("path", { d: "M12 2.5 L14.5 9 L21.5 9.2 L16 13.5 L17.8 20.3 L12 16.3 L6.2 20.3 L8 13.5 L2.5 9.2 L9.5 9 Z" }),
74
+ arrow: _jsx("path", { d: "M3.5 12 H16 M11 6.5 L17 12 L11 17.5" }),
75
+ line: _jsx("path", { d: "M4 18 L20 6" }),
76
+ };
77
+ /** A clean designed icon for the preset (24 grid, stroked). */
78
+ export function PresetIcon({ p, className }) {
79
+ return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.6, strokeLinejoin: "round", strokeLinecap: "round", className: cn('shrink-0', className ?? 'size-4'), children: ICONS[p.id] ?? ICONS.rectangle }));
80
+ }
81
+ //# sourceMappingURL=shape-presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shape-presets.js","sourceRoot":"","sources":["../../src/lib/shape-presets.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Element } from '@clipkit/protocol';
2
+ export interface UngroupResult {
3
+ elements: Element[];
4
+ liftedIds: string[];
5
+ }
6
+ /**
7
+ * Replace the top-level group `groupId` with its children, in place. Returns the
8
+ * new top-level elements array + the lifted children's ids (for re-selection),
9
+ * or null if `groupId` is not a top-level group.
10
+ */
11
+ export declare function ungroupInElements(elements: readonly Element[], groupId: string): UngroupResult | null;
12
+ //# sourceMappingURL=ungroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ungroup.d.ts","sourceRoot":"","sources":["../../src/lib/ungroup.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,mBAAmB,CAAC;AAK/D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAuBrG"}
@@ -0,0 +1,40 @@
1
+ // Ungroup — lift a top-level group's children back to the top level.
2
+ //
3
+ // Bakes the group's time offset onto each child (so timing is preserved), plus
4
+ // a simple static translate when the group has no scale/rotation (the common
5
+ // "organizational" group ungroups cleanly). Groups with scale/rotation/keyframed
6
+ // transforms lift without spatial baking — a best-effort that may shift the
7
+ // children; full matrix baking is out of scope for v1.
8
+ const numberOr = (v, d) => (typeof v === 'number' && Number.isFinite(v) ? v : d);
9
+ const round3 = (n) => Math.round(n * 1000) / 1000;
10
+ /**
11
+ * Replace the top-level group `groupId` with its children, in place. Returns the
12
+ * new top-level elements array + the lifted children's ids (for re-selection),
13
+ * or null if `groupId` is not a top-level group.
14
+ */
15
+ export function ungroupInElements(elements, groupId) {
16
+ const idx = elements.findIndex((e) => e.id === groupId && e.type === 'group');
17
+ if (idx < 0)
18
+ return null;
19
+ const group = elements[idx];
20
+ const g = group;
21
+ const groupTime = numberOr(group.time, 0);
22
+ const warped = g.rotation !== undefined || g.scale !== undefined || g.x_scale !== undefined || g.y_scale !== undefined;
23
+ const gx = !warped && typeof g.x === 'number' ? g.x : 0;
24
+ const gy = !warped && typeof g.y === 'number' ? g.y : 0;
25
+ const liftedIds = [];
26
+ const lifted = group.elements.map((child, i) => {
27
+ const out = { ...child };
28
+ out.time = round3(groupTime + numberOr(child.time, 0));
29
+ if (gx && typeof out.x === 'number')
30
+ out.x = out.x + gx;
31
+ if (gy && typeof out.y === 'number')
32
+ out.y = out.y + gy;
33
+ if (!out.id)
34
+ out.id = `${group.id ?? 'group'}-${i}`;
35
+ liftedIds.push(out.id);
36
+ return out;
37
+ });
38
+ return { elements: [...elements.slice(0, idx), ...lifted, ...elements.slice(idx + 1)], liftedIds };
39
+ }
40
+ //# sourceMappingURL=ungroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ungroup.js","sourceRoot":"","sources":["../../src/lib/ungroup.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,iFAAiF;AACjF,4EAA4E;AAC5E,uDAAuD;AAIvD,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAOlE;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAA4B,EAAE,OAAe;IAC7E,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAC9E,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAiB,CAAC;IAE5C,MAAM,CAAC,GAAG,KAA+H,CAAC;IAC1I,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;IACvH,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAc,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACxD,MAAM,GAAG,GAAG,EAAE,GAAG,KAAK,EAAyE,CAAC;QAChG,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAE,KAA4B,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAI,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ;YAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACxD,IAAI,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ;YAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACxD,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACpD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,GAAc,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;AACrG,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAElD"}
@@ -0,0 +1,9 @@
1
+ // Standard shadcn `cn` helper — merges Tailwind classes intelligently.
2
+ // `clsx` handles falsy values + arrays + objects; `twMerge` resolves
3
+ // conflicts (e.g. `px-2` then `px-4` keeps the second one).
4
+ import { clsx } from 'clsx';
5
+ import { twMerge } from 'tailwind-merge';
6
+ export function cn(...inputs) {
7
+ return twMerge(clsx(inputs));
8
+ }
9
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,qEAAqE;AACrE,4DAA4D;AAE5D,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function AssetsPanel(): import("react").JSX.Element;
2
+ //# sourceMappingURL=AssetsPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetsPanel.d.ts","sourceRoot":"","sources":["../../src/panels/AssetsPanel.tsx"],"names":[],"mappings":"AAuBA,wBAAgB,WAAW,gCAyC1B"}
@@ -0,0 +1,108 @@
1
+ // Assets tab — the "stuff you can put on the timeline" hub. Organized into
2
+ // sections (Your media / Sound effects / Music…), each a compact inline preview
3
+ // with a "See all" that expands to a full browser. This matches how common
4
+ // editors present a media area: a project bin alongside libraries you
5
+ // pull from. Your media is backed by the injected AssetStore; Sound effects is
6
+ // the @clipkit/sfx catalog (drops runtime-native `audio` elements).
7
+ 'use client';
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ import { useRef, useState } from 'react';
10
+ import { Play, Upload, X, Film, Music, Image as ImageIcon } from 'lucide-react';
11
+ import { listSfx } from '@clipkit/sfx';
12
+ import { cn } from '../lib/utils.js';
13
+ import { SfxBrowser } from './assets/SfxBrowser.js';
14
+ import { useSfxActions } from './assets/use-sfx.js';
15
+ import { useAssets } from './assets/use-assets.js';
16
+ // A spread of categories for the inline strip (the full list lives behind "See all").
17
+ const FEATURED = ['whoosh', 'impact', 'riser', 'pop', 'ding-correct', 'shimmer'];
18
+ // Media tiles shown inline before "See all" takes over (3 rows of 3).
19
+ const MEDIA_CAP = 9;
20
+ export function AssetsPanel() {
21
+ const [view, setView] = useState('home');
22
+ if (view === 'media') {
23
+ return _jsx(MediaBrowser, { onBack: () => setView('home') });
24
+ }
25
+ if (view === 'sfx') {
26
+ return (_jsxs("div", { className: "flex flex-col h-full", children: [_jsxs("div", { className: "flex items-center gap-1.5 h-7 px-2 border-b border-border shrink-0", children: [_jsx("button", { type: "button", onClick: () => setView('home'), className: "text-[11px] text-muted-foreground hover:text-foreground transition-colors", children: "\u2039 Assets" }), _jsx("span", { className: "text-[11px] text-foreground/90", children: "Sound effects" })] }), _jsx("div", { className: "flex-1 min-h-0", children: _jsx(SfxBrowser, {}) })] }));
27
+ }
28
+ return (_jsxs("div", { className: "flex flex-col h-full overflow-y-auto", children: [_jsx(MediaSection, { onSeeAll: () => setView('media') }), _jsx(Section, { title: "Sound effects", action: { label: 'See all', onClick: () => setView('sfx') }, children: _jsx(SfxStrip, {}) })] }));
29
+ }
30
+ // ── Media bin ─────────────────────────────────────────────────────────────────
31
+ /** Drag-and-drop import handlers + the dragging highlight flag. */
32
+ function useDropImport(importFiles) {
33
+ const [dragOver, setDragOver] = useState(false);
34
+ const handlers = {
35
+ onDragOver: (e) => {
36
+ e.preventDefault();
37
+ setDragOver(true);
38
+ },
39
+ onDragLeave: () => setDragOver(false),
40
+ onDrop: (e) => {
41
+ e.preventDefault();
42
+ setDragOver(false);
43
+ if (e.dataTransfer.files.length)
44
+ importFiles(e.dataTransfer.files);
45
+ },
46
+ };
47
+ return { dragOver, handlers };
48
+ }
49
+ function FilePicker({ inputRef, onFiles, }) {
50
+ return (_jsx("input", { ref: inputRef, type: "file", multiple: true, accept: "image/*,video/*,audio/*", className: "hidden", onChange: (e) => {
51
+ if (e.target.files)
52
+ onFiles(e.target.files);
53
+ e.target.value = '';
54
+ } }));
55
+ }
56
+ function UploadButton({ onClick, label }) {
57
+ return (_jsxs("button", { type: "button", onClick: onClick, title: "Import media", className: "flex items-center gap-1 h-5 px-1.5 rounded text-[10px] text-muted-foreground hover:text-foreground hover:bg-card transition-colors", children: [_jsx(Upload, { size: 11 }), label && 'Upload'] }));
58
+ }
59
+ function Dropzone({ dragOver, busy, onClick, }) {
60
+ return (_jsxs("button", { type: "button", onClick: onClick, className: cn('w-full grid place-items-center gap-1 h-20 rounded border border-dashed transition-colors', dragOver ? 'border-primary/60 bg-primary/5' : 'border-popover-border hover:border-primary/40'), children: [_jsx(Upload, { size: 14, className: "text-muted-foreground" }), _jsx("span", { className: "text-[10px] text-muted-foreground/70", children: busy ? 'Importing…' : 'Drop or click — image · video · audio' })] }));
61
+ }
62
+ /** The inline "Your media" section — preview tiles capped at MEDIA_CAP. */
63
+ function MediaSection({ onSeeAll }) {
64
+ const { assets, busy, error, importFiles, remove, addToTimeline } = useAssets();
65
+ const inputRef = useRef(null);
66
+ const { dragOver, handlers } = useDropImport(importFiles);
67
+ const pick = () => inputRef.current?.click();
68
+ const shown = assets.slice(0, MEDIA_CAP);
69
+ const overflow = assets.length - shown.length;
70
+ return (_jsxs("div", { className: "px-2 py-2.5 border-b border-border/40", ...handlers, children: [_jsxs("div", { className: "flex items-center justify-between mb-2", children: [_jsx("span", { className: "text-[10px] font-medium uppercase tracking-wide text-muted-foreground", children: "Your media" }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(UploadButton, { onClick: pick }), assets.length > MEDIA_CAP && (_jsx("button", { type: "button", onClick: onSeeAll, className: "text-[10px] text-primary/80 hover:text-primary transition-colors", children: "See all \u203A" }))] })] }), _jsx(FilePicker, { inputRef: inputRef, onFiles: importFiles }), assets.length === 0 ? (_jsx(Dropzone, { dragOver: dragOver, busy: busy, onClick: pick })) : (_jsx("div", { className: "grid grid-cols-3 gap-1.5", children: shown.map((a) => (_jsx(AssetTile, { asset: a, onAdd: () => addToTimeline(a), onRemove: () => void remove(a.id) }, a.id))) })), overflow > 0 && (_jsxs("button", { type: "button", onClick: onSeeAll, className: "mt-1.5 text-[9px] text-muted-foreground/60 hover:text-foreground transition-colors", children: ["+", overflow, " more"] })), busy && assets.length > 0 && (_jsx("div", { className: "mt-1.5 text-[9px] text-muted-foreground/60", children: "Importing\u2026" })), error && _jsx("div", { className: "mt-1.5 text-[9px] text-red-400/80", children: error })] }));
71
+ }
72
+ /** The full "See all" media view — every asset, searchable/filterable, scrollable. */
73
+ function MediaBrowser({ onBack }) {
74
+ const { assets, busy, error, importFiles, remove, addToTimeline } = useAssets();
75
+ const inputRef = useRef(null);
76
+ const { dragOver, handlers } = useDropImport(importFiles);
77
+ const pick = () => inputRef.current?.click();
78
+ const [query, setQuery] = useState('');
79
+ const [kind, setKind] = useState(null);
80
+ const kinds = [...new Set(assets.map((a) => a.kind))];
81
+ const q = query.trim().toLowerCase();
82
+ const results = assets.filter((a) => (!kind || a.kind === kind) && (!q || a.name.toLowerCase().includes(q)));
83
+ return (_jsxs("div", { className: "flex flex-col h-full", ...handlers, children: [_jsxs("div", { className: "flex items-center gap-1.5 h-7 px-2 border-b border-border shrink-0", children: [_jsx("button", { type: "button", onClick: onBack, className: "text-[11px] text-muted-foreground hover:text-foreground transition-colors", children: "\u2039 Assets" }), _jsx("span", { className: "text-[11px] text-foreground/90", children: "Your media" }), _jsx("span", { className: "flex-1" }), _jsx(UploadButton, { onClick: pick, label: true })] }), _jsxs("div", { className: "px-2 py-2 border-b border-border shrink-0", children: [_jsx("input", { value: query, onChange: (e) => setQuery(e.target.value), placeholder: "Search media\u2026", className: "w-full h-7 bg-card border border-border rounded px-2 text-[11px] text-foreground placeholder:text-muted-foreground/60 outline-none focus:border-primary/50" }), _jsxs("div", { className: "flex flex-wrap gap-1 mt-2", children: [_jsx(FilterChip, { active: kind === null, onClick: () => setKind(null), children: "All" }), kinds.map((k) => (_jsx(FilterChip, { active: kind === k, onClick: () => setKind(k), children: k }, k)))] })] }), _jsx(FilePicker, { inputRef: inputRef, onFiles: importFiles }), _jsxs("div", { className: "flex-1 min-h-0 overflow-y-auto p-2", children: [assets.length === 0 ? (_jsx(Dropzone, { dragOver: dragOver, busy: busy, onClick: pick })) : results.length === 0 ? (_jsx("div", { className: "grid place-items-center h-20", children: _jsx("span", { className: "text-[11px] text-muted-foreground/60", children: "No matches" }) })) : (_jsx("div", { className: "grid grid-cols-3 gap-1.5", children: results.map((a) => (_jsx(AssetTile, { asset: a, onAdd: () => addToTimeline(a), onRemove: () => void remove(a.id) }, a.id))) })), error && _jsx("div", { className: "mt-1.5 text-[9px] text-red-400/80", children: error })] }), _jsxs("div", { className: "flex items-center justify-between h-6 px-2 border-t border-border text-[9px] text-muted-foreground/60 shrink-0", children: [_jsxs("span", { children: [results.length, " item", results.length === 1 ? '' : 's', results.length !== assets.length && ` of ${assets.length}`] }), _jsx("span", { children: busy ? 'importing…' : 'click to add · × to remove' })] })] }));
84
+ }
85
+ function FilterChip({ active, onClick, children, }) {
86
+ return (_jsx("button", { type: "button", onClick: onClick, className: cn('h-5 px-1.5 rounded text-[9px] capitalize transition-colors', active
87
+ ? 'bg-primary/20 text-foreground'
88
+ : 'text-muted-foreground hover:text-foreground hover:bg-card'), children: children }));
89
+ }
90
+ const KIND_ICON = { image: ImageIcon, video: Film, audio: Music };
91
+ function AssetTile({ asset, onAdd, onRemove }) {
92
+ const Icon = KIND_ICON[asset.kind];
93
+ return (_jsxs("div", { className: "group/tile relative aspect-square rounded border border-border bg-card overflow-hidden cursor-default", title: `${asset.name} — click to add at playhead`, onClick: onAdd, children: [asset.kind === 'image' ? (_jsx("img", { src: asset.url, alt: asset.name, className: "w-full h-full object-cover" })) : asset.kind === 'video' ? (_jsx("video", { src: asset.url, className: "w-full h-full object-cover", muted: true, preload: "metadata" })) : (_jsx("div", { className: "w-full h-full grid place-items-center", children: _jsx(Icon, { size: 16, className: "text-muted-foreground" }) })), _jsxs("div", { className: "absolute inset-x-0 bottom-0 px-1 py-0.5 bg-background/70 flex items-center gap-1", children: [_jsx(Icon, { size: 8, className: "shrink-0 text-muted-foreground" }), _jsx("span", { className: "truncate text-[8px] text-foreground/80", children: asset.name })] }), _jsx("button", { type: "button", title: "Remove from media", className: "absolute top-0.5 right-0.5 w-4 h-4 grid place-items-center rounded bg-background/70 text-muted-foreground/70 opacity-0 group-hover/tile:opacity-100 hover:text-foreground transition", onClick: (e) => { e.stopPropagation(); onRemove(); }, children: _jsx(X, { size: 10 }) })] }));
94
+ }
95
+ function SfxStrip() {
96
+ const { preview, addToTimeline } = useSfxActions();
97
+ const [playing, setPlaying] = useState(null);
98
+ const byName = new Map(listSfx().map((e) => [e.name, e]));
99
+ const items = FEATURED.map((n) => byName.get(n)).filter((e) => !!e);
100
+ return (_jsx("div", { className: "flex flex-wrap gap-1.5", children: items.map((e) => (_jsxs("button", { type: "button", title: `Preview ${e.label} · double-click to add`, onClick: () => {
101
+ setPlaying(e.name);
102
+ preview(e);
103
+ }, onDoubleClick: () => addToTimeline(e), className: cn('group/chip flex items-center gap-1 h-6 pl-1.5 pr-2 rounded border border-border bg-card text-[10px] text-foreground/80 hover:border-primary/50 transition-colors', playing === e.name && 'border-primary/60 text-foreground'), children: [_jsx(Play, { size: 9, fill: "currentColor", className: "text-muted-foreground group-hover/chip:text-foreground" }), e.label] }, e.name))) }));
104
+ }
105
+ function Section({ title, action, children, }) {
106
+ return (_jsxs("div", { className: "px-2 py-2.5 border-b border-border/40", children: [_jsxs("div", { className: "flex items-center justify-between mb-2", children: [_jsx("span", { className: "text-[10px] font-medium uppercase tracking-wide text-muted-foreground", children: title }), action && (_jsxs("button", { type: "button", onClick: action.onClick, className: "text-[10px] text-primary/80 hover:text-primary transition-colors", children: [action.label, " \u203A"] }))] }), children] }));
107
+ }
108
+ //# sourceMappingURL=AssetsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetsPanel.js","sourceRoot":"","sources":["../../src/panels/AssetsPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function InspectorPanel(): import("react").JSX.Element | null;
2
+ //# sourceMappingURL=InspectorPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectorPanel.d.ts","sourceRoot":"","sources":["../../src/panels/InspectorPanel.tsx"],"names":[],"mappings":"AA2GA,wBAAgB,cAAc,uCAiW7B"}