@revideo/2d 0.3.7-alpha.975 → 0.3.7-beta.987

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 (131) hide show
  1. package/editor/editor/tsconfig.build.tsbuildinfo +1 -1
  2. package/editor/index.css +1 -1
  3. package/editor/index.js +529 -245
  4. package/editor/index.js.map +1 -1
  5. package/lib/code/CodeCursor.d.ts +74 -74
  6. package/lib/code/CodeCursor.js +352 -286
  7. package/lib/code/CodeDiffer.d.ts +21 -16
  8. package/lib/code/CodeDiffer.js +39 -41
  9. package/lib/code/CodeFragment.d.ts +16 -8
  10. package/lib/code/CodeFragment.js +36 -36
  11. package/lib/code/CodeHighlighter.d.ts +59 -59
  12. package/lib/code/CodeHighlighter.js +1 -1
  13. package/lib/code/CodeMetrics.d.ts +12 -8
  14. package/lib/code/CodeMetrics.js +26 -24
  15. package/lib/code/CodeRange.d.ts +21 -5
  16. package/lib/code/CodeRange.js +131 -124
  17. package/lib/code/CodeScope.d.ts +18 -8
  18. package/lib/code/CodeScope.js +59 -61
  19. package/lib/code/CodeSelection.d.ts +9 -4
  20. package/lib/code/CodeSelection.js +8 -8
  21. package/lib/code/CodeSignal.d.ts +74 -47
  22. package/lib/code/CodeSignal.js +206 -189
  23. package/lib/code/CodeTokenizer.d.ts +1 -1
  24. package/lib/code/CodeTokenizer.js +41 -41
  25. package/lib/code/DefaultHighlightStyle.d.ts +2 -2
  26. package/lib/code/DefaultHighlightStyle.js +96 -96
  27. package/lib/code/LezerHighlighter.d.ts +21 -19
  28. package/lib/code/LezerHighlighter.js +101 -101
  29. package/lib/code/diff.d.ts +12 -9
  30. package/lib/code/diff.js +218 -205
  31. package/lib/code/extractRange.d.ts +7 -4
  32. package/lib/code/extractRange.js +79 -71
  33. package/lib/code/index.d.ts +1 -1
  34. package/lib/code/index.js +1 -1
  35. package/lib/components/Audio.d.ts +11 -11
  36. package/lib/components/Audio.js +120 -114
  37. package/lib/components/Bezier.d.ts +18 -18
  38. package/lib/components/Bezier.js +86 -75
  39. package/lib/components/Circle.d.ts +95 -90
  40. package/lib/components/Code.d.ts +244 -211
  41. package/lib/components/CubicBezier.d.ts +36 -36
  42. package/lib/components/Curve.d.ts +208 -198
  43. package/lib/components/Grid.d.ts +47 -42
  44. package/lib/components/Icon.d.ts +55 -50
  45. package/lib/components/Img.d.ts +86 -79
  46. package/lib/components/Knot.d.ts +97 -78
  47. package/lib/components/Latex.d.ts +12 -12
  48. package/lib/components/Layout.d.ts +455 -413
  49. package/lib/components/Line.d.ts +61 -49
  50. package/lib/components/Polygon.d.ts +60 -55
  51. package/lib/components/QuadBezier.d.ts +29 -29
  52. package/lib/components/Ray.d.ts +28 -28
  53. package/lib/components/Rect.d.ts +115 -108
  54. package/lib/components/Spline.d.ts +46 -40
  55. package/lib/components/Txt.d.ts +55 -44
  56. package/lib/components/TxtLeaf.d.ts +20 -16
  57. package/lib/components/Video.d.ts.map +1 -1
  58. package/lib/components/Video.js +3 -1
  59. package/lib/components/View2D.d.ts +22 -22
  60. package/lib/components/index.d.ts +1 -1
  61. package/lib/components/types.d.ts +22 -9
  62. package/lib/curves/ArcSegment.d.ts +36 -24
  63. package/lib/curves/CircleSegment.d.ts +26 -16
  64. package/lib/curves/CubicBezierSegment.d.ts +18 -13
  65. package/lib/curves/CurveDrawingInfo.d.ts +9 -9
  66. package/lib/curves/CurvePoint.d.ts +13 -13
  67. package/lib/curves/CurveProfile.d.ts +5 -5
  68. package/lib/curves/CurveProfile.js +1 -1
  69. package/lib/curves/KnotInfo.d.ts +8 -8
  70. package/lib/curves/LineSegment.d.ts +19 -14
  71. package/lib/curves/Polynomial.d.ts +110 -110
  72. package/lib/curves/Polynomial2D.d.ts +20 -20
  73. package/lib/curves/PolynomialSegment.d.ts +42 -37
  74. package/lib/curves/QuadBezierSegment.d.ts +12 -12
  75. package/lib/curves/Segment.d.ts +12 -7
  76. package/lib/curves/UniformPolynomialCurveSampler.d.ts +34 -34
  77. package/lib/curves/createCurveProfileLerp.d.ts +17 -6
  78. package/lib/curves/getBezierSplineProfile.d.ts +8 -4
  79. package/lib/curves/getCircleProfile.d.ts +10 -4
  80. package/lib/curves/getPathProfile.d.ts +2 -2
  81. package/lib/curves/getPointAtDistance.d.ts +7 -4
  82. package/lib/curves/getPolylineProfile.d.ts +8 -4
  83. package/lib/curves/getRectProfile.d.ts +9 -4
  84. package/lib/curves/index.d.ts +1 -1
  85. package/lib/curves/index.js +1 -1
  86. package/lib/decorators/canvasStyleSignal.d.ts +3 -3
  87. package/lib/decorators/colorSignal.d.ts +1 -1
  88. package/lib/decorators/compound.d.ts +4 -2
  89. package/lib/decorators/computed.d.ts +1 -1
  90. package/lib/decorators/defaultStyle.d.ts +5 -2
  91. package/lib/decorators/filtersSignal.d.ts +28 -8
  92. package/lib/decorators/index.d.ts +1 -1
  93. package/lib/decorators/index.js +1 -1
  94. package/lib/decorators/initializers.d.ts +5 -2
  95. package/lib/decorators/initializers.js +18 -19
  96. package/lib/decorators/nodeName.d.ts +1 -1
  97. package/lib/decorators/nodeName.js +4 -4
  98. package/lib/decorators/signal.d.ts +40 -20
  99. package/lib/decorators/spacingSignal.d.ts +1 -1
  100. package/lib/decorators/vector2Signal.d.ts +13 -7
  101. package/lib/index.d.ts +1 -1
  102. package/lib/index.js +1 -1
  103. package/lib/jsx-dev-runtime.d.ts +3 -3
  104. package/lib/jsx-dev-runtime.js +3 -3
  105. package/lib/jsx-runtime.d.ts +19 -9
  106. package/lib/jsx-runtime.js +18 -18
  107. package/lib/partials/Filter.d.ts +24 -16
  108. package/lib/partials/Gradient.d.ts +30 -24
  109. package/lib/partials/Pattern.d.ts +14 -9
  110. package/lib/partials/ShaderConfig.d.ts +81 -74
  111. package/lib/partials/index.d.ts +1 -1
  112. package/lib/partials/index.js +1 -1
  113. package/lib/partials/types.d.ts +19 -6
  114. package/lib/scenes/Scene2D.d.ts +42 -23
  115. package/lib/scenes/index.d.ts +1 -1
  116. package/lib/scenes/index.js +1 -1
  117. package/lib/scenes/makeScene2D.d.ts +7 -5
  118. package/lib/scenes/useScene2D.d.ts +2 -2
  119. package/lib/tsconfig.build.tsbuildinfo +1 -1
  120. package/lib/utils/diff.d.ts +25 -18
  121. package/lib/utils/diff.js +84 -87
  122. package/lib/utils/index.d.ts +1 -1
  123. package/lib/utils/index.js +1 -1
  124. package/lib/utils/is.d.ts +4 -2
  125. package/lib/utils/is.js +2 -2
  126. package/lib/utils/makeSignalExtensions.d.ts +11 -4
  127. package/package.json +4 -4
  128. package/src/lib/components/Audio.ts +1 -1
  129. package/src/lib/components/Media.ts +24 -0
  130. package/src/lib/components/Video.ts +1 -1
  131. package/src/lib/scenes/Scene2D.ts +2 -2
package/lib/utils/diff.js CHANGED
@@ -1,97 +1,94 @@
1
1
  function getIdMap(list) {
2
- const map = new Map();
3
- let before = undefined;
4
- for (const [index, current] of list.entries()) {
5
- const currentArray = map.get(current.id) ?? [];
6
- if (!map.has(current.id)) {
7
- map.set(current.id, currentArray);
8
- }
9
- currentArray.push({
10
- before,
11
- current,
12
- beforeIdIndex: before ? map.get(before.id).length - 1 : -1,
13
- currentIndex: index,
14
- });
15
- before = current;
2
+ const map = new Map();
3
+ let before = undefined;
4
+ for (const [index, current] of list.entries()) {
5
+ const currentArray = map.get(current.id) ?? [];
6
+ if (!map.has(current.id)) {
7
+ map.set(current.id, currentArray);
16
8
  }
17
- return map;
9
+ currentArray.push({
10
+ before,
11
+ current,
12
+ beforeIdIndex: before ? map.get(before.id).length - 1 : -1,
13
+ currentIndex: index,
14
+ });
15
+ before = current;
16
+ }
17
+ return map;
18
18
  }
19
19
  export function getTransformDiff(from, to) {
20
- const diff = {
21
- inserted: [],
22
- deleted: [],
23
- transformed: [],
24
- };
25
- const fromMap = getIdMap(from);
26
- const toMap = getIdMap(to);
27
- for (const [key, fromItem] of fromMap.entries()) {
28
- const toItem = toMap.get(key);
29
- if (toItem) {
30
- toMap.delete(key);
31
- for (let i = 0; i < Math.max(fromItem.length, toItem.length); i++) {
32
- const insert = i >= fromItem.length;
33
- const remove = i >= toItem.length;
34
- const fromNode = !insert ? fromItem[i] : fromItem[fromItem.length - 1];
35
- const toNode = !remove ? toItem[i] : toItem[toItem.length - 1];
36
- diff.transformed.push({
37
- insert,
38
- remove,
39
- from: fromNode,
40
- to: toNode,
41
- });
42
- }
43
- }
44
- else {
45
- for (const node of fromItem) {
46
- diff.deleted.push(node);
47
- }
48
- }
20
+ const diff = {
21
+ inserted: [],
22
+ deleted: [],
23
+ transformed: [],
24
+ };
25
+ const fromMap = getIdMap(from);
26
+ const toMap = getIdMap(to);
27
+ for (const [key, fromItem] of fromMap.entries()) {
28
+ const toItem = toMap.get(key);
29
+ if (toItem) {
30
+ toMap.delete(key);
31
+ for (let i = 0; i < Math.max(fromItem.length, toItem.length); i++) {
32
+ const insert = i >= fromItem.length;
33
+ const remove = i >= toItem.length;
34
+ const fromNode = !insert ? fromItem[i] : fromItem[fromItem.length - 1];
35
+ const toNode = !remove ? toItem[i] : toItem[toItem.length - 1];
36
+ diff.transformed.push({
37
+ insert,
38
+ remove,
39
+ from: fromNode,
40
+ to: toNode,
41
+ });
42
+ }
43
+ } else {
44
+ for (const node of fromItem) {
45
+ diff.deleted.push(node);
46
+ }
49
47
  }
50
- for (const toItem of toMap.values()) {
51
- for (const node of toItem) {
52
- diff.inserted.push(node);
53
- }
48
+ }
49
+ for (const toItem of toMap.values()) {
50
+ for (const node of toItem) {
51
+ diff.inserted.push(node);
54
52
  }
55
- return diff;
53
+ }
54
+ return diff;
56
55
  }
57
56
  export function applyTransformDiff(current, diff, cloner) {
58
- function insert(item) {
59
- let idIndex = -1;
60
- const index = item.before
61
- ? current.findIndex(({ id }) => {
62
- if (id === item.before?.id) {
63
- idIndex++;
64
- if (idIndex === item.beforeIdIndex)
65
- return true;
66
- }
67
- return false;
68
- })
69
- : 0;
70
- current.splice(index + 1, 0, item.current);
71
- }
72
- const result = {
73
- inserted: diff.inserted.map(item => ({
74
- item,
75
- order: item.currentIndex,
76
- })),
57
+ function insert(item) {
58
+ let idIndex = -1;
59
+ const index = item.before
60
+ ? current.findIndex(({id}) => {
61
+ if (id === item.before?.id) {
62
+ idIndex++;
63
+ if (idIndex === item.beforeIdIndex) return true;
64
+ }
65
+ return false;
66
+ })
67
+ : 0;
68
+ current.splice(index + 1, 0, item.current);
69
+ }
70
+ const result = {
71
+ inserted: diff.inserted.map(item => ({
72
+ item,
73
+ order: item.currentIndex,
74
+ })),
75
+ };
76
+ for (const item of diff.transformed) {
77
+ if (!item.insert) continue;
78
+ const from = item.from;
79
+ item.from = {
80
+ ...item.to,
81
+ current: cloner(from.current),
77
82
  };
78
- for (const item of diff.transformed) {
79
- if (!item.insert)
80
- continue;
81
- const from = item.from;
82
- item.from = {
83
- ...item.to,
84
- current: cloner(from.current),
85
- };
86
- result.inserted.push({
87
- item: item.from,
88
- order: item.to.currentIndex,
89
- });
90
- }
91
- result.inserted.sort((a, b) => a.order - b.order);
92
- for (const item of result.inserted) {
93
- insert(item.item);
94
- }
95
- return result;
83
+ result.inserted.push({
84
+ item: item.from,
85
+ order: item.to.currentIndex,
86
+ });
87
+ }
88
+ result.inserted.sort((a, b) => a.order - b.order);
89
+ for (const item of result.inserted) {
90
+ insert(item.item);
91
+ }
92
+ return result;
96
93
  }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvZGlmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQ0EsU0FBUyxRQUFRLENBQW1CLElBQVM7SUFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7SUFDdEQsSUFBSSxNQUFNLEdBQWtCLFNBQVMsQ0FBQztJQUN0QyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNoQixNQUFNO1lBQ04sT0FBTztZQUNQLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRCxZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQVMsRUFDVCxFQUFPO0lBRVAsTUFBTSxJQUFJLEdBQXFCO1FBQzdCLFFBQVEsRUFBRSxFQUFFO1FBQ1osT0FBTyxFQUFFLEVBQUU7UUFDWCxXQUFXLEVBQUUsRUFBRTtLQUNo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
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvZGlmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQ0EsU0FBUyxRQUFRLENBQW1CLElBQVM7SUFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7SUFDdEQsSUFBSSxNQUFNLEdBQWtCLFNBQVMsQ0FBQztJQUN0QyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNoQixNQUFNO1lBQ04sT0FBTztZQUNQLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRCxZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQVMsRUFDVCxFQUFPO0lBRVAsTUFBTSxJQUFJLEdBQXFCO1FBQzdCLFFBQVEsRUFBRSxFQUFFO1FBQ1osT0FBTyxFQUFFLEVBQUU7UUFDWCxXQUFXLEVBQUUsRUFBRTtLQUNo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
@@ -1,3 +1,3 @@
1
1
  export * from './CanvasUtils';
2
2
  export * from './is';
3
- //# sourceMappingURL=index.d.ts.map
3
+ //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,3 @@
1
1
  export * from './CanvasUtils';
2
2
  export * from './is';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsTUFBTSxDQUFDIn0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsTUFBTSxDQUFDIn0=
package/lib/utils/is.d.ts CHANGED
@@ -4,5 +4,7 @@
4
4
  *
5
5
  * @param klass - The class to check against.
6
6
  */
7
- export declare function is<T>(klass: new (...args: any[]) => T): (object: any) => object is T;
8
- //# sourceMappingURL=is.d.ts.map
7
+ export declare function is<T>(
8
+ klass: new (...args: any[]) => T,
9
+ ): (object: any) => object is T;
10
+ //# sourceMappingURL=is.d.ts.map
package/lib/utils/is.js CHANGED
@@ -5,6 +5,6 @@
5
5
  * @param klass - The class to check against.
6
6
  */
7
7
  export function is(klass) {
8
- return (object) => object instanceof klass;
8
+ return object => object instanceof klass;
9
9
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzL2lzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEVBQUUsQ0FDaEIsS0FBZ0M7SUFFaEMsT0FBTyxDQUFDLE1BQU0sRUFBZSxFQUFFLENBQUMsTUFBTSxZQUFZLEtBQUssQ0FBQztBQUMxRCxDQUFDIn0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzL2lzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEVBQUUsQ0FDaEIsS0FBZ0M7SUFFaEMsT0FBTyxDQUFDLE1BQU0sRUFBZSxFQUFFLENBQUMsTUFBTSxZQUFZLEtBQUssQ0FBQztBQUMxRCxDQUFDIn0=
@@ -1,4 +1,11 @@
1
- import { SignalExtensions } from '@revideo/core';
2
- import { PropertyMetadata } from '../decorators';
3
- export declare function makeSignalExtensions<TSetterValue, TValue extends TSetterValue>(meta?: Partial<PropertyMetadata<TValue>>, owner?: any, name?: string): Partial<SignalExtensions<TSetterValue, TValue>>;
4
- //# sourceMappingURL=makeSignalExtensions.d.ts.map
1
+ import {SignalExtensions} from '@revideo/core';
2
+ import {PropertyMetadata} from '../decorators';
3
+ export declare function makeSignalExtensions<
4
+ TSetterValue,
5
+ TValue extends TSetterValue,
6
+ >(
7
+ meta?: Partial<PropertyMetadata<TValue>>,
8
+ owner?: any,
9
+ name?: string,
10
+ ): Partial<SignalExtensions<TSetterValue, TValue>>;
11
+ //# sourceMappingURL=makeSignalExtensions.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revideo/2d",
3
- "version": "0.3.7-alpha.975+b1cc4ddb",
3
+ "version": "0.3.7-beta.987+48e808f",
4
4
  "description": "A 2D renderer for revideo",
5
5
  "author": "revideo",
6
6
  "homepage": "https://re.video/",
@@ -30,7 +30,7 @@
30
30
  "devDependencies": {
31
31
  "@preact/signals": "^1.2.1",
32
32
  "@revideo/internal": "^0.0.0",
33
- "@revideo/ui": "^0.3.7-alpha.975+b1cc4ddb",
33
+ "@revideo/ui": "^0.3.7-beta.987+48e808f",
34
34
  "clsx": "^2.0.0",
35
35
  "jsdom": "^22.1.0",
36
36
  "preact": "^10.19.2",
@@ -40,10 +40,10 @@
40
40
  "@codemirror/language": "^6.10.1",
41
41
  "@lezer/common": "^1.2.1",
42
42
  "@lezer/highlight": "^1.2.0",
43
- "@revideo/core": "^0.3.7-alpha.975+b1cc4ddb",
43
+ "@revideo/core": "^0.3.7-beta.987+48e808f",
44
44
  "code-fns": "^0.8.2",
45
45
  "mathjax-full": "^3.2.2",
46
46
  "parse-svg-path": "^0.1.2"
47
47
  },
48
- "gitHead": "b1cc4ddb81c3fd2fe5b878fec66f74a24c616456"
48
+ "gitHead": "48e808fd7b34bb02659214d502b2b7765076a76b"
49
49
  }
@@ -24,7 +24,7 @@ export class Audio extends Media {
24
24
 
25
25
  @computed()
26
26
  protected audio(): HTMLAudioElement {
27
- const src = viaProxy(this.src());
27
+ const src = viaProxy(this.fullSource());
28
28
  const key = `${this.key}/${src}`;
29
29
  let audio = Audio.pool[key];
30
30
  if (!audio) {
@@ -5,6 +5,7 @@ import {
5
5
  clamp,
6
6
  isReactive,
7
7
  useLogger,
8
+ useScene,
8
9
  useThread,
9
10
  } from '@revideo/core';
10
11
  import {computed, initial, nodeName, signal} from '../decorators';
@@ -54,6 +55,29 @@ export abstract class Media extends Rect {
54
55
  }
55
56
  }
56
57
 
58
+ public assetRoot?: `${string}/`;
59
+
60
+ public fullSource(): string {
61
+ if (!this.assetRoot) {
62
+ this.assetRoot = useScene().assetRoot;
63
+ }
64
+
65
+ let src = this.src();
66
+ const isUrl = src.startsWith('http://') || src.startsWith('https://');
67
+
68
+ if (isUrl) {
69
+ return src;
70
+ }
71
+
72
+ // We remove the trailing slash from the assetRoot
73
+ // and make sure there is a leading slash in the src
74
+ if (src[0] !== '/') {
75
+ src = '/' + src;
76
+ }
77
+
78
+ return this.assetRoot.slice(0, -1) + src;
79
+ }
80
+
57
81
  public isPlaying(): boolean {
58
82
  return this.playing();
59
83
  }
@@ -172,7 +172,7 @@ export class Video extends Media {
172
172
 
173
173
  @computed()
174
174
  private video(): HTMLVideoElement {
175
- const src = viaProxy(this.src());
175
+ const src = viaProxy(this.fullSource());
176
176
  const key = `${this.key}/${src}`;
177
177
  let video = Video.pool[key];
178
178
  if (!video) {
@@ -170,7 +170,7 @@ export class Scene2D extends GeneratorScene<View2D> implements Inspectable {
170
170
  ...playingVideos.map(vid => ({
171
171
  key: vid.key,
172
172
  type: 'video' as const,
173
- src: typeof vid.src === 'function' ? vid.src() : vid.src,
173
+ src: vid.fullSource(),
174
174
  playbackRate:
175
175
  typeof vid.playbackRate === 'function'
176
176
  ? vid.playbackRate()
@@ -185,7 +185,7 @@ export class Scene2D extends GeneratorScene<View2D> implements Inspectable {
185
185
  ...playingAudios.map(audio => ({
186
186
  key: audio.key,
187
187
  type: 'audio' as const,
188
- src: typeof audio.src === 'function' ? audio.src() : audio.src,
188
+ src: audio.fullSource(),
189
189
  playbackRate:
190
190
  typeof audio.playbackRate === 'function'
191
191
  ? audio.playbackRate()