@nodetool-ai/node-sdk 0.8.4-a24.2 → 0.8.4

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 (256) hide show
  1. package/dist/.nodetool-build-stamp +1 -1
  2. package/dist/_sandbox/README.md +176 -0
  3. package/dist/_sandbox/sandbox-aws/SKILL.md +98 -0
  4. package/dist/_sandbox/sandbox-aws/package.json +40 -0
  5. package/dist/_sandbox/sandbox-chrono/SKILL.md +39 -0
  6. package/dist/_sandbox/sandbox-chrono/package.json +40 -0
  7. package/dist/_sandbox/sandbox-color/SKILL.md +35 -0
  8. package/dist/_sandbox/sandbox-color/package.json +43 -0
  9. package/dist/_sandbox/sandbox-csv/SKILL.md +50 -0
  10. package/dist/_sandbox/sandbox-csv/package.json +39 -0
  11. package/dist/_sandbox/sandbox-dates/SKILL.md +47 -0
  12. package/dist/_sandbox/sandbox-dates/package.json +41 -0
  13. package/dist/_sandbox/sandbox-decimal/SKILL.md +36 -0
  14. package/dist/_sandbox/sandbox-decimal/package.json +43 -0
  15. package/dist/_sandbox/sandbox-diff/SKILL.md +36 -0
  16. package/dist/_sandbox/sandbox-diff/package.json +39 -0
  17. package/dist/_sandbox/sandbox-docx/SKILL.md +53 -0
  18. package/dist/_sandbox/sandbox-docx/package.json +40 -0
  19. package/dist/_sandbox/sandbox-dsl/SKILL.md +137 -0
  20. package/dist/_sandbox/sandbox-dsl/package.json +413 -0
  21. package/dist/_sandbox/sandbox-dsl/sandbox/authoring.js +382 -0
  22. package/dist/_sandbox/sandbox-dsl/sandbox/core.js +382 -0
  23. package/dist/_sandbox/sandbox-dsl/sandbox/generated/gemini.audio.js +12 -0
  24. package/dist/_sandbox/sandbox-dsl/sandbox/generated/gemini.image.js +8 -0
  25. package/dist/_sandbox/sandbox-dsl/sandbox/generated/gemini.text.js +12 -0
  26. package/dist/_sandbox/sandbox-dsl/sandbox/generated/gemini.video.js +12 -0
  27. package/dist/_sandbox/sandbox-dsl/sandbox/generated/index.js +149 -0
  28. package/dist/_sandbox/sandbox-dsl/sandbox/generated/kie.dynamic_schema.js +8 -0
  29. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.audio.js +68 -0
  30. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.browser.js +8 -0
  31. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.charts.js +8 -0
  32. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.comfy.js +16 -0
  33. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.grid.js +8 -0
  34. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.channel.js +12 -0
  35. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.color.js +32 -0
  36. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.color_grading.js +44 -0
  37. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.draw.js +36 -0
  38. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.effects.js +24 -0
  39. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.enhance.js +28 -0
  40. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.filter.js +64 -0
  41. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.js +8 -0
  42. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.keyer.js +12 -0
  43. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.mask.js +16 -0
  44. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.image.warp.js +36 -0
  45. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.pdf.js +32 -0
  46. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.sqlite.js +8 -0
  47. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.stable_diffusion_cpp.js +8 -0
  48. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.svg.js +12 -0
  49. package/dist/_sandbox/sandbox-dsl/sandbox/generated/lib.video.download.js +8 -0
  50. package/dist/_sandbox/sandbox-dsl/sandbox/generated/messaging.discord.js +8 -0
  51. package/dist/_sandbox/sandbox-dsl/sandbox/generated/messaging.telegram.js +8 -0
  52. package/dist/_sandbox/sandbox-dsl/sandbox/generated/mistral.embeddings.js +8 -0
  53. package/dist/_sandbox/sandbox-dsl/sandbox/generated/mistral.text.js +12 -0
  54. package/dist/_sandbox/sandbox-dsl/sandbox/generated/mistral.vision.js +12 -0
  55. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.agents.js +32 -0
  56. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.audio.js +104 -0
  57. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.audio.realtime.js +28 -0
  58. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.audio.synth.js +40 -0
  59. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.blender.js +28 -0
  60. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.code.js +8 -0
  61. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.compare.js +8 -0
  62. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.constant.js +132 -0
  63. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.control.js +96 -0
  64. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.creative.js +24 -0
  65. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.data.js +12 -0
  66. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.document.js +16 -0
  67. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.entity.js +16 -0
  68. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.fake.js +12 -0
  69. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.game.js +36 -0
  70. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.generators.js +24 -0
  71. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.image.js +120 -0
  72. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.input.js +140 -0
  73. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.manimgx.js +16 -0
  74. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.model3d.js +76 -0
  75. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.output.js +8 -0
  76. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.script.js +28 -0
  77. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.sketch.js +16 -0
  78. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.storyboard.js +32 -0
  79. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.text.js +56 -0
  80. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.timeline.js +24 -0
  81. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.triggers.js +24 -0
  82. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.variable.js +12 -0
  83. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.video.js +136 -0
  84. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.workflows.app_node.js +8 -0
  85. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.workflows.base_node.js +8 -0
  86. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.workflows.subgraph.js +8 -0
  87. package/dist/_sandbox/sandbox-dsl/sandbox/generated/nodetool.workflows.workflow_node.js +8 -0
  88. package/dist/_sandbox/sandbox-dsl/sandbox/generated/openai.agents.js +16 -0
  89. package/dist/_sandbox/sandbox-dsl/sandbox/generated/openai.audio.js +16 -0
  90. package/dist/_sandbox/sandbox-dsl/sandbox/generated/openai.image.js +16 -0
  91. package/dist/_sandbox/sandbox-dsl/sandbox/generated/openai.text.js +16 -0
  92. package/dist/_sandbox/sandbox-dsl/sandbox/generated/vector.js +56 -0
  93. package/dist/_sandbox/sandbox-dsl/sandbox/generated/whisper_cpp.js +8 -0
  94. package/dist/_sandbox/sandbox-dsl/sandbox/generated/xai.image.js +8 -0
  95. package/dist/_sandbox/sandbox-dsl/sandbox/generated/xai.text.js +12 -0
  96. package/dist/_sandbox/sandbox-dsl/sandbox/generated/xai.vision.js +8 -0
  97. package/dist/_sandbox/sandbox-dsl/sandbox/index.js +13 -0
  98. package/dist/_sandbox/sandbox-dsl/scripts/build.mjs +116 -0
  99. package/dist/_sandbox/sandbox-epub/SKILL.md +61 -0
  100. package/dist/_sandbox/sandbox-epub/package.json +40 -0
  101. package/dist/_sandbox/sandbox-exif/SKILL.md +30 -0
  102. package/dist/_sandbox/sandbox-exif/package.json +40 -0
  103. package/dist/_sandbox/sandbox-expr/SKILL.md +28 -0
  104. package/dist/_sandbox/sandbox-expr/package.json +40 -0
  105. package/dist/_sandbox/sandbox-fabric/SKILL.md +113 -0
  106. package/dist/_sandbox/sandbox-fabric/package.json +40 -0
  107. package/dist/_sandbox/sandbox-flow/SKILL.md +131 -0
  108. package/dist/_sandbox/sandbox-flow/package.json +411 -0
  109. package/dist/_sandbox/sandbox-flow/sandbox/generated/gemini.audio.js +12 -0
  110. package/dist/_sandbox/sandbox-flow/sandbox/generated/gemini.image.js +8 -0
  111. package/dist/_sandbox/sandbox-flow/sandbox/generated/gemini.text.js +12 -0
  112. package/dist/_sandbox/sandbox-flow/sandbox/generated/gemini.video.js +12 -0
  113. package/dist/_sandbox/sandbox-flow/sandbox/generated/kie.dynamic_schema.js +8 -0
  114. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.audio.js +68 -0
  115. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.browser.js +8 -0
  116. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.charts.js +8 -0
  117. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.comfy.js +25 -0
  118. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.grid.js +8 -0
  119. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.channel.js +12 -0
  120. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.color.js +32 -0
  121. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.color_grading.js +44 -0
  122. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.draw.js +36 -0
  123. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.effects.js +24 -0
  124. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.enhance.js +28 -0
  125. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.filter.js +64 -0
  126. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.js +8 -0
  127. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.keyer.js +12 -0
  128. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.mask.js +16 -0
  129. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.image.warp.js +36 -0
  130. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.pdf.js +32 -0
  131. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.sqlite.js +8 -0
  132. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.stable_diffusion_cpp.js +8 -0
  133. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.svg.js +12 -0
  134. package/dist/_sandbox/sandbox-flow/sandbox/generated/lib.video.download.js +8 -0
  135. package/dist/_sandbox/sandbox-flow/sandbox/generated/messaging.discord.js +11 -0
  136. package/dist/_sandbox/sandbox-flow/sandbox/generated/messaging.telegram.js +11 -0
  137. package/dist/_sandbox/sandbox-flow/sandbox/generated/mistral.embeddings.js +8 -0
  138. package/dist/_sandbox/sandbox-flow/sandbox/generated/mistral.text.js +12 -0
  139. package/dist/_sandbox/sandbox-flow/sandbox/generated/mistral.vision.js +12 -0
  140. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.agents.js +41 -0
  141. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.audio.js +110 -0
  142. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.audio.realtime.js +46 -0
  143. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.audio.synth.js +67 -0
  144. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.blender.js +28 -0
  145. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.code.js +11 -0
  146. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.compare.js +8 -0
  147. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.constant.js +132 -0
  148. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.control.js +165 -0
  149. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.creative.js +27 -0
  150. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.data.js +18 -0
  151. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.document.js +19 -0
  152. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.entity.js +19 -0
  153. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.fake.js +12 -0
  154. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.game.js +39 -0
  155. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.generators.js +30 -0
  156. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.image.js +126 -0
  157. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.input.js +143 -0
  158. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.manimgx.js +16 -0
  159. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.model3d.js +76 -0
  160. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.output.js +11 -0
  161. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.script.js +28 -0
  162. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.sketch.js +16 -0
  163. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.storyboard.js +35 -0
  164. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.text.js +68 -0
  165. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.timeline.js +24 -0
  166. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.triggers.js +33 -0
  167. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.variable.js +15 -0
  168. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.video.js +145 -0
  169. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.workflows.app_node.js +11 -0
  170. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.workflows.base_node.js +8 -0
  171. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.workflows.subgraph.js +11 -0
  172. package/dist/_sandbox/sandbox-flow/sandbox/generated/nodetool.workflows.workflow_node.js +11 -0
  173. package/dist/_sandbox/sandbox-flow/sandbox/generated/openai.agents.js +25 -0
  174. package/dist/_sandbox/sandbox-flow/sandbox/generated/openai.audio.js +16 -0
  175. package/dist/_sandbox/sandbox-flow/sandbox/generated/openai.image.js +16 -0
  176. package/dist/_sandbox/sandbox-flow/sandbox/generated/openai.text.js +16 -0
  177. package/dist/_sandbox/sandbox-flow/sandbox/generated/vector.js +56 -0
  178. package/dist/_sandbox/sandbox-flow/sandbox/generated/whisper_cpp.js +11 -0
  179. package/dist/_sandbox/sandbox-flow/sandbox/generated/xai.image.js +8 -0
  180. package/dist/_sandbox/sandbox-flow/sandbox/generated/xai.text.js +12 -0
  181. package/dist/_sandbox/sandbox-flow/sandbox/generated/xai.vision.js +8 -0
  182. package/dist/_sandbox/sandbox-flow/sandbox/guest-core.js +35 -0
  183. package/dist/_sandbox/sandbox-flow/sandbox/index.js +10 -0
  184. package/dist/_sandbox/sandbox-flow/scripts/build.mjs +120 -0
  185. package/dist/_sandbox/sandbox-game/SKILL.md +116 -0
  186. package/dist/_sandbox/sandbox-game/package.json +36 -0
  187. package/dist/_sandbox/sandbox-game/sandbox/index.js +208 -0
  188. package/dist/_sandbox/sandbox-gif/SKILL.md +36 -0
  189. package/dist/_sandbox/sandbox-gif/package.json +43 -0
  190. package/dist/_sandbox/sandbox-html/SKILL.md +107 -0
  191. package/dist/_sandbox/sandbox-html/package.json +40 -0
  192. package/dist/_sandbox/sandbox-ics/SKILL.md +41 -0
  193. package/dist/_sandbox/sandbox-ics/package.json +40 -0
  194. package/dist/_sandbox/sandbox-jmespath/SKILL.md +26 -0
  195. package/dist/_sandbox/sandbox-jmespath/package.json +43 -0
  196. package/dist/_sandbox/sandbox-mammoth/SKILL.md +46 -0
  197. package/dist/_sandbox/sandbox-mammoth/package.json +41 -0
  198. package/dist/_sandbox/sandbox-markdown/SKILL.md +123 -0
  199. package/dist/_sandbox/sandbox-markdown/package.json +41 -0
  200. package/dist/_sandbox/sandbox-notion/SKILL.md +101 -0
  201. package/dist/_sandbox/sandbox-notion/package.json +38 -0
  202. package/dist/_sandbox/sandbox-ocr/SKILL.md +47 -0
  203. package/dist/_sandbox/sandbox-ocr/package.json +40 -0
  204. package/dist/_sandbox/sandbox-pdf/SKILL.md +47 -0
  205. package/dist/_sandbox/sandbox-pdf/package.json +39 -0
  206. package/dist/_sandbox/sandbox-pdflib/SKILL.md +56 -0
  207. package/dist/_sandbox/sandbox-pdflib/package.json +38 -0
  208. package/dist/_sandbox/sandbox-pptx/SKILL.md +42 -0
  209. package/dist/_sandbox/sandbox-pptx/package.json +40 -0
  210. package/dist/_sandbox/sandbox-pptxgen/SKILL.md +49 -0
  211. package/dist/_sandbox/sandbox-pptxgen/package.json +38 -0
  212. package/dist/_sandbox/sandbox-qr/SKILL.md +43 -0
  213. package/dist/_sandbox/sandbox-qr/package.json +42 -0
  214. package/dist/_sandbox/sandbox-rrule/SKILL.md +37 -0
  215. package/dist/_sandbox/sandbox-rrule/package.json +43 -0
  216. package/dist/_sandbox/sandbox-stats/SKILL.md +42 -0
  217. package/dist/_sandbox/sandbox-stats/package.json +43 -0
  218. package/dist/_sandbox/sandbox-subtitle/SKILL.md +38 -0
  219. package/dist/_sandbox/sandbox-subtitle/package.json +41 -0
  220. package/dist/_sandbox/sandbox-supabase/SKILL.md +108 -0
  221. package/dist/_sandbox/sandbox-supabase/package.json +39 -0
  222. package/dist/_sandbox/sandbox-tfjs/SKILL.md +76 -0
  223. package/dist/_sandbox/sandbox-tfjs/package.json +42 -0
  224. package/dist/_sandbox/sandbox-timeline/SKILL.md +647 -0
  225. package/dist/_sandbox/sandbox-timeline/package.json +46 -0
  226. package/dist/_sandbox/sandbox-timeline/sandbox/charts.js +356 -0
  227. package/dist/_sandbox/sandbox-timeline/sandbox/components.js +171 -0
  228. package/dist/_sandbox/sandbox-timeline/sandbox/index.d.ts +700 -0
  229. package/dist/_sandbox/sandbox-timeline/sandbox/index.js +1658 -0
  230. package/dist/_sandbox/sandbox-tokens/SKILL.md +46 -0
  231. package/dist/_sandbox/sandbox-tokens/package.json +40 -0
  232. package/dist/_sandbox/sandbox-twilio/SKILL.md +93 -0
  233. package/dist/_sandbox/sandbox-twilio/package.json +39 -0
  234. package/dist/_sandbox/sandbox-xlsx/SKILL.md +74 -0
  235. package/dist/_sandbox/sandbox-xlsx/package.json +40 -0
  236. package/dist/_sandbox/sandbox-xml/SKILL.md +36 -0
  237. package/dist/_sandbox/sandbox-xml/package.json +40 -0
  238. package/dist/_sandbox/sandbox-yaml/SKILL.md +48 -0
  239. package/dist/_sandbox/sandbox-yaml/package.json +41 -0
  240. package/dist/_sandbox/sandbox-zip/SKILL.md +54 -0
  241. package/dist/_sandbox/sandbox-zip/package.json +40 -0
  242. package/dist/code-node-validation.d.ts +2 -0
  243. package/dist/code-node-validation.d.ts.map +1 -1
  244. package/dist/code-node-validation.js +1 -1
  245. package/dist/code-node-validation.js.map +1 -1
  246. package/dist/pack-loader.d.ts +1 -0
  247. package/dist/pack-loader.d.ts.map +1 -1
  248. package/dist/pack-loader.js +1 -0
  249. package/dist/pack-loader.js.map +1 -1
  250. package/dist/sandbox-catalog-host.js +1 -1
  251. package/dist/sandbox-catalog-host.js.map +1 -1
  252. package/dist/sandbox-pack-discovery.d.ts +3 -0
  253. package/dist/sandbox-pack-discovery.d.ts.map +1 -1
  254. package/dist/sandbox-pack-discovery.js +7 -3
  255. package/dist/sandbox-pack-discovery.js.map +1 -1
  256. package/package.json +5 -5
@@ -0,0 +1,700 @@
1
+ /**
2
+ * Types for `@nodetool-ai/sandbox-timeline`. Covers the pack's top-level
3
+ * exports and the authoring objects `video()`/`scene()`/`use()` hand back —
4
+ * precise enough to catch `caret: true` (an object, not a boolean) or a
5
+ * `stack`/`row` `align` typo at type-check time, via `nodetool jsscript
6
+ * validate` or any TS host that resolves this specifier.
7
+ *
8
+ * This is a first pass, kept in sync with `index.js`'s own exports by
9
+ * `tests/pack-dts-exports.test.ts` (a plain export-name comparison, not a
10
+ * structural one) — a signature can still drift from its real implementation
11
+ * between passes. `s.barChart`/`lineChart`/`areaChart`/`donut`/`statCounter`
12
+ * (`charts.js`) are typed loosely (`(...args: unknown[]) => Clip`) pending a
13
+ * pass that gives them the same precision as the rest of `SceneApi`.
14
+ */
15
+
16
+ /** A hex colour string, `#rgb`/`#rgba`/`#rrggbb`/`#rrggbbaa`. */
17
+ export type HexColor = string;
18
+
19
+ /** `"in"|"out"|"inOut"|"outExpo"|"inExpo"|"linear"`, or a raw curve string (`"spring(170,16,1)"`, `"cubic-bezier(...)"`). */
20
+ export type EaseName =
21
+ | "in" | "out" | "inOut" | "outExpo" | "inExpo" | "linear"
22
+ | (string & {});
23
+
24
+ export type StaggerUnit = "word" | "character" | "line";
25
+
26
+ export interface Gradient {
27
+ type: "linear" | "radial";
28
+ angle?: number;
29
+ stops: Array<{ offset: number; color: string }>;
30
+ }
31
+
32
+ export type Fill = HexColor | Gradient;
33
+
34
+ /** `[["M", x, y], ["L", x, y], …]`, in px from the frame centre. `H`/`V` take one coordinate; `A` is `[rx, ry, xRotDeg, largeArc, sweep, x, y]`. */
35
+ export type PathPoints = ReadonlyArray<readonly [command: string, ...args: number[]]>;
36
+
37
+ /** A two-value `[from, to]`/`[from, to, easing]` pair, or a waypoint list `[[t, value], [t, value, easing]?, …]`. */
38
+ export type AnimSpec =
39
+ | readonly [from: number, to: number, easing?: EaseName]
40
+ | ReadonlyArray<readonly [t: number, value: number, easing?: EaseName]>;
41
+
42
+ /** `{direction, softness}` — required whenever a curve drives `wipeProgress`. Sets `animation.custom.mask`; unrelated to `ClipFieldOptions.mask`, the static crop mask. */
43
+ export interface WipeMask {
44
+ direction: string;
45
+ softness: number;
46
+ }
47
+
48
+ export interface EnterOptions {
49
+ from: Record<string, number>;
50
+ at?: number;
51
+ dur?: number;
52
+ ease?: EaseName;
53
+ by?: StaggerUnit;
54
+ staggerMs?: number;
55
+ mask?: WipeMask;
56
+ }
57
+
58
+ export interface ExitOptions {
59
+ to: Record<string, number>;
60
+ at?: number;
61
+ dur?: number;
62
+ ease?: EaseName;
63
+ }
64
+
65
+ export interface AnimateOptions {
66
+ at?: number;
67
+ dur?: number;
68
+ ease?: EaseName;
69
+ role?: "in" | "out" | "loop" | "emphasis" | string;
70
+ by?: StaggerUnit;
71
+ staggerMs?: number;
72
+ mask?: WipeMask;
73
+ }
74
+
75
+ export interface LoopOptions {
76
+ ease?: EaseName;
77
+ }
78
+
79
+ export interface CountOptions {
80
+ from: number;
81
+ to: number;
82
+ at?: number;
83
+ dur?: number;
84
+ prefix?: string;
85
+ suffix?: string;
86
+ decimals?: number;
87
+ padTo?: number;
88
+ groupSeparator?: string;
89
+ ease?: EaseName;
90
+ }
91
+
92
+ export interface ScrambleOptions {
93
+ at?: number;
94
+ dur?: number;
95
+ charset?: string;
96
+ seed?: number;
97
+ ease?: EaseName;
98
+ }
99
+
100
+ export interface DrawOptions {
101
+ at?: number;
102
+ dur?: number;
103
+ ease?: EaseName;
104
+ mask?: WipeMask;
105
+ }
106
+
107
+ /** Every key besides these five is a preset param — see `PresetParamSpec[]` per preset in `packages/timeline/src/animation/presets.ts`. */
108
+ export interface PresetOptions {
109
+ at?: number;
110
+ dur?: number;
111
+ ease?: EaseName;
112
+ role?: string;
113
+ by?: StaggerUnit;
114
+ staggerMs?: number;
115
+ [param: string]: unknown;
116
+ }
117
+
118
+ export type PresetName =
119
+ | "fade" | "slide" | "pop" | "spin" | "wipe" | "blur" | "colorFade"
120
+ | "pulse" | "flash" | "shake" | "bounce" | "squash" | "kenBurns" | "float"
121
+ | "breathe" | "rotate" | "hueShift" | "orbit" | "followPath" | "typewriter";
122
+
123
+ /** A typewriter caret — an object, never a bare boolean. */
124
+ export interface TypewriterCaret {
125
+ color?: HexColor;
126
+ widthPx?: number;
127
+ blinkPeriodMs?: number;
128
+ }
129
+
130
+ export interface TypewriterOptions {
131
+ at?: number;
132
+ dur?: number;
133
+ caret?: TypewriterCaret;
134
+ }
135
+
136
+ export interface ExprSample {
137
+ p: number;
138
+ frame: number;
139
+ fps: number;
140
+ }
141
+
142
+ export interface ExprOptions {
143
+ at?: number;
144
+ dur?: number;
145
+ role?: string;
146
+ }
147
+
148
+ export interface MorphOptions {
149
+ at?: number;
150
+ dur?: number;
151
+ ease?: EaseName;
152
+ }
153
+
154
+ export type ReactMode = "envelope" | "beats";
155
+ export type ReactProperty = "scale" | "opacity" | "offsetX" | "offsetY";
156
+
157
+ export interface ReactOptions {
158
+ prop?: ReactProperty;
159
+ property?: ReactProperty;
160
+ mode?: ReactMode;
161
+ range?: readonly [quiet: number, loud: number];
162
+ gain?: number;
163
+ smooth?: number;
164
+ attack?: number;
165
+ release?: number;
166
+ offset?: number;
167
+ tolerance?: number;
168
+ maxPoints?: number;
169
+ frameMs?: number;
170
+ maxSeconds?: number;
171
+ replace?: boolean;
172
+ /** Not supported — `bake_audio_animation` measures the full mix or its onsets, never one band. Passing this throws. */
173
+ band?: never;
174
+ }
175
+
176
+ /** A transform override; `x`/`y`/`s` are shorthand for `position`/`scale`, `tx` carries any other transform field. */
177
+ export interface TransformOverride {
178
+ position?: { x: number; y: number };
179
+ scale?: { x: number; y: number };
180
+ rotation?: number;
181
+ anchor?: { x: number; y: number };
182
+ depthPx?: number;
183
+ [field: string]: unknown;
184
+ }
185
+
186
+ /**
187
+ * Fields every element option object accepts as-is, passed straight onto the
188
+ * clip's own document fields (see the pack's SKILL.md `Elements` table).
189
+ */
190
+ export interface ClipFieldOptions {
191
+ id?: string;
192
+ name?: string;
193
+ at?: number;
194
+ dur?: number;
195
+ x?: number;
196
+ y?: number;
197
+ s?: number;
198
+ /** Degrees — a shortcut for `transform.rotation`, converted to radians. Sibling to `x`/`y`/`s`, same relationship as those have to `transform.position`/`transform.scale`. */
199
+ rotation?: number;
200
+ /** A shortcut for `transform.anchor`, `{x, y}` fractions of the clip's own box. */
201
+ anchor?: { x: number; y: number };
202
+ tx?: Record<string, unknown>;
203
+ transform?: TransformOverride;
204
+ parent?: string;
205
+ /** An entry's `id`/`enabled: true` are filled in when left out. */
206
+ effects?: unknown[];
207
+ opacity?: number;
208
+ blendMode?: string;
209
+ /** The static crop mask — unrelated to `EnterOptions`/`AnimateOptions`/`DrawOptions`'s `mask` (`WipeMask`), which drives a `wipeProgress` animation instead. */
210
+ mask?: unknown;
211
+ matte?: unknown;
212
+ crop?: unknown;
213
+ motionBlur?: unknown;
214
+ steppedTime?: unknown;
215
+ repeater?: unknown;
216
+ inPointMs?: number;
217
+ outPointMs?: number;
218
+ speedBaked?: boolean;
219
+ fadeInShape?: unknown;
220
+ fadeOutShape?: unknown;
221
+ /** Sugar for a flex-item background plate: taken out of flow, sized to its flex parent's computed box. */
222
+ absolute?: boolean;
223
+ inset?: number | { top?: number; right?: number; bottom?: number; left?: number };
224
+ flexItem?: FlexItemOptions;
225
+ layout?: unknown;
226
+ }
227
+
228
+ /** A clip descriptor with the motion primitives attached — what every scene element call returns. */
229
+ export interface Clip extends Record<string, unknown> {
230
+ id: string;
231
+ name: string;
232
+ startMs: number;
233
+ durationMs: number;
234
+ mediaType: string;
235
+ parentId: string;
236
+ enter(o: EnterOptions): Clip;
237
+ exit(o: ExitOptions): Clip;
238
+ animate(props: Record<string, AnimSpec>, o?: AnimateOptions): Clip;
239
+ loop(props: Record<string, AnimSpec>, periodSec: number, o?: LoopOptions): Clip;
240
+ count(o: CountOptions): Clip;
241
+ scramble(o?: ScrambleOptions): Clip;
242
+ /** `by`/`staggerMs` mean the same as on `enter()`/`animate()` — required for a `glyph.*` target, which the document validator refuses with no stagger unit. */
243
+ tween(target: string, keyframes: ReadonlyArray<readonly [t: number, value: unknown, easing?: EaseName]>, o?: { at?: number; dur?: number; by?: StaggerUnit; staggerMs?: number }): Clip;
244
+ draw(o?: DrawOptions): Clip;
245
+ preset(name: PresetName | (string & {}), o?: PresetOptions): Clip;
246
+ /** Replaces the clip's animations — a typewriter is the whole entrance. */
247
+ typewriter(o?: TypewriterOptions): Clip;
248
+ /** A hand-written motion function baked to keyframes at authoring time — nothing runs at render time. */
249
+ expr(fn: (t: number, sample: ExprSample) => Record<string, unknown> | undefined, o?: ExprOptions): Clip;
250
+ /** The clip must be created with `s.path(points, o)` — only straight (M/L/Z) paths morph. */
251
+ morph(toPoints: PathPoints, o?: MorphOptions): Clip;
252
+ react(audioClip: Clip, o: ReactOptions): Clip;
253
+ }
254
+
255
+ export interface TextStyleOverride {
256
+ lineHeight?: number;
257
+ verticalAlign?: "top" | "center" | "bottom";
258
+ stroke?: string;
259
+ shadow?: unknown;
260
+ background?: string;
261
+ fill?: Fill;
262
+ [field: string]: unknown;
263
+ }
264
+
265
+ export interface TextOptions extends Omit<ClipFieldOptions, "anchor"> {
266
+ size?: number;
267
+ weight?: number;
268
+ color?: HexColor;
269
+ /** A `fonts` key (from `video({fonts})`) or a literal family string. */
270
+ font?: string;
271
+ /** Em, a fraction of `size`: `-0.04` tight, `0.2` wide caps. */
272
+ tracking?: number;
273
+ italic?: boolean;
274
+ /** Horizontal alignment — `text()` destructures this itself, so `ClipFieldOptions.anchor`'s `{x, y}` transform shortcut never reaches it. */
275
+ anchor?: "left" | "right" | "center";
276
+ /** Max width as a frame fraction. Ignored once this text is a child of a `stack`/`row` — a flex container measures and sizes it itself. */
277
+ mw?: number;
278
+ /** Text-on-path: the same point commands `s.path()` takes. */
279
+ path?: PathPoints;
280
+ /** A colour or a gradient fill, same as `style.fill` — the one most callers reach for. `style.fill` wins when both are set. */
281
+ fill?: Fill;
282
+ style?: TextStyleOverride;
283
+ }
284
+
285
+ export interface ShapeOptions extends ClipFieldOptions {
286
+ kind?: "rect" | "ellipse";
287
+ /** Corner radius, px. */
288
+ r?: number;
289
+ stroke?: string;
290
+ /** Stroke width, px. */
291
+ sw?: number;
292
+ shape?: Record<string, unknown>;
293
+ }
294
+
295
+ export interface PathOptions extends ClipFieldOptions {
296
+ fill?: Fill;
297
+ stroke?: string;
298
+ sw?: number;
299
+ }
300
+
301
+ /** A time-remap keyframe: `t` 0..1 across the clip, `sourceAt` seconds into the *source* media. */
302
+ export interface TimeRemapKeyframe {
303
+ t: number;
304
+ sourceAt: number;
305
+ ease?: EaseName;
306
+ }
307
+
308
+ export interface MediaOptions extends ClipFieldOptions {
309
+ /** Seconds into the source. */
310
+ in?: number;
311
+ /** dB. */
312
+ volume?: number;
313
+ fadeIn?: number;
314
+ fadeOut?: number;
315
+ /** Playback rate. */
316
+ speed?: number;
317
+ mute?: boolean;
318
+ remap?: readonly TimeRemapKeyframe[];
319
+ }
320
+
321
+ /** `s.adjust(effects, o)`'s options; each `effects` entry's `id`/`enabled: true` are filled in when left out, same as `ClipFieldOptions.effects`. */
322
+ export interface AdjustOptions extends ClipFieldOptions {}
323
+
324
+ /** `position: "absolute"` takes a flex-item child out of flow, sized by `inset`; everything else places it inside the flex algebra. */
325
+ export interface FlexItemOptions {
326
+ position?: "absolute" | "relative";
327
+ inset?: number | { top?: number; right?: number; bottom?: number; left?: number };
328
+ grow?: number;
329
+ shrink?: number;
330
+ basis?: number | `${number}%`;
331
+ alignSelf?: AlignOption;
332
+ width?: number | `${number}%`;
333
+ height?: number | `${number}%`;
334
+ margin?: number | { top?: number; right?: number; bottom?: number; left?: number };
335
+ }
336
+
337
+ export type AnchorName =
338
+ | "top-left" | "top" | "top-right"
339
+ | "left" | "center" | "right"
340
+ | "bottom-left" | "bottom" | "bottom-right";
341
+
342
+ export type Anchor = AnchorName | { x: number; y: number };
343
+ export type AlignOption = "start" | "center" | "end" | "stretch" | "baseline";
344
+ export type JustifyOption = "start" | "center" | "end" | "between" | "around" | "evenly";
345
+
346
+ /** A real flex container (Yoga): `children` become its real children (`parentId`), laid out by the document's own flex resolver. */
347
+ export interface ContainerOptions {
348
+ name?: string;
349
+ parent?: string;
350
+ /** The container's placement in the frame; `anchor` names the point of its *computed* box that lands here. Default the frame centre. */
351
+ at?: { x: number; y: number };
352
+ anchor?: Anchor;
353
+ /** Cross axis (`alignItems`). Default `"start"`. */
354
+ align?: AlignOption;
355
+ /** Main axis (`justifyContent`). */
356
+ justify?: JustifyOption;
357
+ gap?: number;
358
+ padding?: number | { top?: number; right?: number; bottom?: number; left?: number };
359
+ width?: number | `${number}%`;
360
+ height?: number | `${number}%`;
361
+ /** `true` sets `"wrap"`; a string passes straight to `flexWrap`. Confirmed with r1-api: `"wrap" | "wrap-reverse"` is the supported contract. */
362
+ wrap?: boolean | "wrap" | "wrap-reverse";
363
+ /** How this container itself behaves as a child of an enclosing flex container — passed straight through to `flexItem`. A per-child flexItem is set on that child's own creation call (`o.flexItem`), not here. */
364
+ item?: FlexItemOptions;
365
+ /** The clip's own time window, seconds (named `start` here — `at` above is the frame position). */
366
+ start?: number;
367
+ dur?: number;
368
+ }
369
+
370
+ export interface BackdropOptions {
371
+ colors?: readonly [HexColor, HexColor];
372
+ opacity?: number;
373
+ seed?: number;
374
+ }
375
+
376
+ export interface GlowOptions {
377
+ size?: number;
378
+ alpha?: number;
379
+ color?: HexColor;
380
+ [field: string]: unknown;
381
+ }
382
+
383
+ export interface FlashOptions {
384
+ at?: number;
385
+ dur?: number;
386
+ peak?: number;
387
+ color?: HexColor;
388
+ }
389
+
390
+ export interface KickerOptions {
391
+ x?: number;
392
+ y?: number;
393
+ at?: number;
394
+ dur?: number;
395
+ size?: number;
396
+ weight?: number;
397
+ color?: HexColor;
398
+ font?: string;
399
+ parent?: string;
400
+ [field: string]: unknown;
401
+ }
402
+
403
+ export interface PillOptions {
404
+ size?: number;
405
+ weight?: number;
406
+ color?: HexColor;
407
+ fillColor?: HexColor;
408
+ stroke?: string;
409
+ dot?: Fill;
410
+ shadow?: boolean;
411
+ padX?: number;
412
+ padY?: number;
413
+ name?: string;
414
+ x?: number;
415
+ y?: number;
416
+ anchor?: Anchor;
417
+ at?: number;
418
+ dur?: number;
419
+ font?: string;
420
+ parent?: string;
421
+ }
422
+
423
+ export interface StreaksOptions {
424
+ count?: number;
425
+ colors?: readonly HexColor[];
426
+ name?: string;
427
+ rotationDeg?: number;
428
+ opacity?: number;
429
+ }
430
+
431
+ export interface FinishOptions {
432
+ vignette?: number;
433
+ softness?: number;
434
+ grain?: number;
435
+ seed?: number;
436
+ saturation?: number;
437
+ contrast?: number;
438
+ [field: string]: unknown;
439
+ }
440
+
441
+ /**
442
+ * A `component()` descriptor. `props` maps a name to `{type, default,
443
+ * description?}`; `duration` (seconds) is the piece's own natural length.
444
+ */
445
+ export interface ComponentPropSpec<T extends string | number | boolean = string | number | boolean> {
446
+ type: "string" | "number" | "color" | "boolean";
447
+ default: T;
448
+ description?: string;
449
+ }
450
+
451
+ export interface ComponentSpec {
452
+ props?: Record<string, ComponentPropSpec>;
453
+ duration?: number;
454
+ }
455
+
456
+ export interface CompositionParam {
457
+ type: "string" | "number" | "color" | "boolean";
458
+ default: string | number | boolean;
459
+ path: string;
460
+ description?: string;
461
+ }
462
+
463
+ export interface SaveAsCompositionOptions {
464
+ width: number;
465
+ height: number;
466
+ fps: number;
467
+ palette?: Palette;
468
+ fonts?: Record<string, string>;
469
+ name?: string;
470
+ description?: string;
471
+ }
472
+
473
+ export interface SaveAsCompositionResult {
474
+ composition_id: string;
475
+ source_timeline_id: string;
476
+ /** Props left out of the saved composition — reached no single field, or reached more than one. */
477
+ skippedParams: string[];
478
+ [field: string]: unknown;
479
+ }
480
+
481
+ /** Minimal shape of the `nodetool.timelines` belt object `video()`/`component()` need — see the pack's SKILL.md `Saving` section for the full surface. */
482
+ export interface TimelinesBelt {
483
+ validate(target: unknown, opts?: Record<string, unknown>): Promise<{ ok: boolean; errors?: unknown[]; warnings?: unknown[] }>;
484
+ create(name: string, opts?: Record<string, unknown>): Promise<{ timeline_id: string }>;
485
+ setDocument(id: string, document: unknown): Promise<{ written: boolean; validation?: unknown; error?: unknown }>;
486
+ edit(id: string, ops: unknown[]): Promise<{ failed: boolean; ops: Array<{ ok: boolean }> }>;
487
+ compositions: {
488
+ save(
489
+ timelineId: string,
490
+ groupTarget: string,
491
+ name: string,
492
+ params: Record<string, CompositionParam>,
493
+ opts?: { description?: string }
494
+ ): Promise<{ composition_id: string }>;
495
+ };
496
+ [member: string]: unknown;
497
+ }
498
+
499
+ export interface Component<Props extends Record<string, unknown> = Record<string, unknown>> {
500
+ readonly __component: true;
501
+ readonly name: string;
502
+ readonly props: Record<string, ComponentPropSpec>;
503
+ readonly duration?: number;
504
+ readonly build: (s: SceneApi, props: Props) => void;
505
+ saveAsComposition(timelines: TimelinesBelt, o: SaveAsCompositionOptions): Promise<SaveAsCompositionResult>;
506
+ }
507
+
508
+ export interface UseOptions {
509
+ at?: number;
510
+ dur?: number;
511
+ name?: string;
512
+ parent?: string;
513
+ x?: number;
514
+ y?: number;
515
+ }
516
+
517
+ /** Everything a scene builder function (`v.scene`'s `fn`, `s.seq`'s `fn`) receives. */
518
+ export interface SceneApi {
519
+ text(str: string, o?: TextOptions): Clip;
520
+ rect(w: number, h: number, fill: Fill, o?: ShapeOptions): Clip;
521
+ ellipse(d: number, fill: Fill, o?: ShapeOptions): Clip;
522
+ path(points: PathPoints, o?: PathOptions): Clip;
523
+ image(assetId: string, o?: ClipFieldOptions): Clip;
524
+ video(assetId: string, o?: MediaOptions): Clip;
525
+ audio(assetId: string, o?: MediaOptions): Clip;
526
+ group(o?: ClipFieldOptions): Clip;
527
+ adjust(effects: unknown[], o?: AdjustOptions): Clip;
528
+ fill(color: HexColor, o?: ClipFieldOptions): Clip;
529
+ stack(children: readonly Clip[], o?: ContainerOptions): Clip;
530
+ row(children: readonly Clip[], o?: ContainerOptions): Clip;
531
+ center(child: Clip, o?: { at?: { x: number; y: number } | "center" }): Clip;
532
+ seq<T>(atSec: number, durSec: number, fn: (q: SceneApi) => T): T;
533
+ stagger<T extends Clip>(items: readonly T[], offsetSec: number, fn: (item: T, index: number) => void): void;
534
+ backdrop(o?: BackdropOptions): Clip;
535
+ glow(o?: GlowOptions): Clip;
536
+ flash(o?: FlashOptions): Clip;
537
+ kicker(str: string, o?: KickerOptions): Clip;
538
+ pill(label: string, o?: PillOptions): Clip;
539
+ streaks(o?: StreaksOptions): Clip;
540
+ finish(o?: FinishOptions): Clip;
541
+ noise(seed?: number): (x: number) => number;
542
+ /**
543
+ * Instantiate a `component()` descriptor: folds its build's clips into one
544
+ * group. `propsIn` is checked and defaulted against `Comp.props`, throwing
545
+ * and naming the offending prop.
546
+ */
547
+ use<Props extends Record<string, unknown>>(Comp: Component<Props>, propsIn?: Partial<Props>, o?: UseOptions): Clip;
548
+ /** Loose pending precise typing (see `charts.js`). */
549
+ barChart(data: unknown, o?: Record<string, unknown>): Clip;
550
+ lineChart(series: unknown, o?: Record<string, unknown>): Clip;
551
+ areaChart(series: unknown, o?: Record<string, unknown>): Clip;
552
+ donut(data: unknown, o?: Record<string, unknown>): Clip;
553
+ statCounter(value: unknown, o?: Record<string, unknown>): Clip;
554
+ }
555
+
556
+ export interface Palette {
557
+ ink?: HexColor;
558
+ ink2?: HexColor;
559
+ text?: HexColor;
560
+ dim?: HexColor;
561
+ accent?: HexColor;
562
+ }
563
+
564
+ export interface VideoOptions {
565
+ width: number;
566
+ height: number;
567
+ fps: number;
568
+ palette?: Palette;
569
+ fonts?: Record<string, string>;
570
+ }
571
+
572
+ export type TransitionType =
573
+ | "wipe" | "whip" | "iris" | "gradientWipe" | "crossfade" | "push"
574
+ | "slide" | "zoom" | "zoomBlur" | "glitch" | "dipToColor" | "lightLeak";
575
+
576
+ export interface TransitionItem {
577
+ readonly __transition: true;
578
+ }
579
+
580
+ export interface Scene {
581
+ readonly name: string;
582
+ readonly id: string;
583
+ readonly durationMs: number;
584
+ }
585
+
586
+ export type MidiInstrumentPreset = "bl1-acid" | "dr1-tr-void" | (string & {});
587
+
588
+ export interface MidiOptions {
589
+ at?: number;
590
+ dur?: number;
591
+ instrument?: MidiInstrumentPreset | Record<string, unknown>;
592
+ name?: string;
593
+ }
594
+
595
+ export interface AudioOptions {
596
+ at?: number;
597
+ dur?: number;
598
+ trackId?: string;
599
+ trackName?: string;
600
+ volume?: number;
601
+ fadeIn?: number;
602
+ fadeOut?: number;
603
+ mute?: boolean;
604
+ [field: string]: unknown;
605
+ }
606
+
607
+ export interface AdjustTopLevelOptions {
608
+ at?: number;
609
+ dur?: number;
610
+ id?: string;
611
+ name?: string;
612
+ trackId?: string;
613
+ animations?: unknown[];
614
+ }
615
+
616
+ export interface BeatsOptions {
617
+ bpm: number;
618
+ offset?: number;
619
+ count?: number;
620
+ snap?: readonly string[];
621
+ timeSignature?: { beatsPerBar: number; beatUnit: number };
622
+ }
623
+
624
+ export interface SaveOptions {
625
+ name: string;
626
+ showcase?: boolean;
627
+ ops?: unknown[];
628
+ }
629
+
630
+ /**
631
+ * What `v.save` resolves with. A validation error throws instead, so `errors`
632
+ * is always empty here; `warnings` carries the final validation's warnings.
633
+ */
634
+ export interface SaveResult {
635
+ timeline_id: string;
636
+ fps: number;
637
+ width: number;
638
+ height: number;
639
+ durationMs: number;
640
+ errors: unknown[];
641
+ warnings: unknown[];
642
+ /**
643
+ * Set when the script was captured for code embedding: whether the program
644
+ * was embedded on the timeline, and why not when it was not.
645
+ */
646
+ code?: { embedded: boolean; warnings: string[] };
647
+ }
648
+
649
+ /** `v.midi`'s `[beat, pitch, lenBeats?, velocity?]` tuples — musical time, not seconds. */
650
+ export type MidiNoteTuple = readonly [beat: number, pitch: number, lenBeats?: number, velocity?: number];
651
+
652
+ /** The `v` object `video({...})` returns. */
653
+ export interface VideoBuilder {
654
+ readonly width: number;
655
+ readonly height: number;
656
+ readonly fps: number;
657
+ /** Set once `series()` has run. */
658
+ durationMs: number;
659
+
660
+ scene(name: string, durationSec: number, fn: (s: SceneApi) => void, extra?: Record<string, unknown>): Scene;
661
+ transition(type: TransitionType, durationSec: number, opts?: Record<string, unknown>): TransitionItem;
662
+ series(items: ReadonlyArray<Scene | TransitionItem>): VideoBuilder;
663
+ adjust(effects: unknown[], o?: AdjustTopLevelOptions): Clip;
664
+ audio(assetId: string, o?: AudioOptions): Clip;
665
+ music(assetId: string, o?: AudioOptions): Clip;
666
+ midi(trackId: string, notes: readonly MidiNoteTuple[], o?: MidiOptions): Clip;
667
+ beats(o: BeatsOptions): unknown[];
668
+ document(fields: { camera2d?: unknown; trackFolders?: unknown; tempo?: unknown }): VideoBuilder;
669
+ /**
670
+ * Create (or write to `timeline_id`), apply `ops`, validate, and resolve
671
+ * with the saved timeline. Throws, naming the timeline id once one exists,
672
+ * on any validation error or failed write.
673
+ */
674
+ save(timelines: TimelinesBelt, o: SaveOptions): Promise<SaveResult>;
675
+ }
676
+
677
+ export function video(o: VideoOptions): VideoBuilder;
678
+
679
+ /**
680
+ * `component(name, {props, duration}, (s, props) => {...})` — a reusable
681
+ * scene piece, used with `s.use(Comp, {...props}, {at, dur})`.
682
+ */
683
+ export function component<Props extends Record<string, unknown> = Record<string, unknown>>(
684
+ name: string,
685
+ spec: ComponentSpec,
686
+ build: (s: SceneApi, props: Props) => void
687
+ ): Component<Props>;
688
+
689
+ export function noise(seed?: number): (x: number) => number;
690
+ export function rad(degrees: number): number;
691
+ export function hash(n: number): number;
692
+ export function ease(name: EaseName): string;
693
+ /**
694
+ * The bare asset id a media clip stores: strips `asset://` and a file
695
+ * extension, leaves `package://` and `http(s)://` locators unchanged.
696
+ * `s.image`, `s.video`, `s.audio` and `v.audio` apply it themselves.
697
+ */
698
+ export function clipAssetId(ref: string): string;
699
+
700
+ export const MIDI_PPQ: number;