@twick/2d 0.14.19 → 0.14.21

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 (376) hide show
  1. package/editor/editor/NodeInspectorConfig.d.ts +3 -0
  2. package/editor/editor/NodeInspectorConfig.d.ts.map +1 -0
  3. package/editor/editor/PreviewOverlayConfig.d.ts +3 -0
  4. package/editor/editor/PreviewOverlayConfig.d.ts.map +1 -0
  5. package/editor/editor/Provider.d.ts +17 -0
  6. package/editor/editor/Provider.d.ts.map +1 -0
  7. package/editor/editor/SceneGraphTabConfig.d.ts +3 -0
  8. package/editor/editor/SceneGraphTabConfig.d.ts.map +1 -0
  9. package/editor/editor/icons/CircleIcon.d.ts +2 -0
  10. package/editor/editor/icons/CircleIcon.d.ts.map +1 -0
  11. package/editor/editor/icons/CodeBlockIcon.d.ts +2 -0
  12. package/editor/editor/icons/CodeBlockIcon.d.ts.map +1 -0
  13. package/editor/editor/icons/CurveIcon.d.ts +2 -0
  14. package/editor/editor/icons/CurveIcon.d.ts.map +1 -0
  15. package/editor/editor/icons/GridIcon.d.ts +2 -0
  16. package/editor/editor/icons/GridIcon.d.ts.map +1 -0
  17. package/editor/editor/icons/IconMap.d.ts +3 -0
  18. package/editor/editor/icons/IconMap.d.ts.map +1 -0
  19. package/editor/editor/icons/ImgIcon.d.ts +2 -0
  20. package/editor/editor/icons/ImgIcon.d.ts.map +1 -0
  21. package/editor/editor/icons/LayoutIcon.d.ts +2 -0
  22. package/editor/editor/icons/LayoutIcon.d.ts.map +1 -0
  23. package/editor/editor/icons/LineIcon.d.ts +2 -0
  24. package/editor/editor/icons/LineIcon.d.ts.map +1 -0
  25. package/editor/editor/icons/NodeIcon.d.ts +2 -0
  26. package/editor/editor/icons/NodeIcon.d.ts.map +1 -0
  27. package/editor/editor/icons/RayIcon.d.ts +2 -0
  28. package/editor/editor/icons/RayIcon.d.ts.map +1 -0
  29. package/editor/editor/icons/RectIcon.d.ts +2 -0
  30. package/editor/editor/icons/RectIcon.d.ts.map +1 -0
  31. package/editor/editor/icons/ShapeIcon.d.ts +2 -0
  32. package/editor/editor/icons/ShapeIcon.d.ts.map +1 -0
  33. package/editor/editor/icons/TxtIcon.d.ts +2 -0
  34. package/editor/editor/icons/TxtIcon.d.ts.map +1 -0
  35. package/editor/editor/icons/VideoIcon.d.ts +2 -0
  36. package/editor/editor/icons/VideoIcon.d.ts.map +1 -0
  37. package/editor/editor/icons/View2DIcon.d.ts +2 -0
  38. package/editor/editor/icons/View2DIcon.d.ts.map +1 -0
  39. package/editor/editor/index.d.ts +4 -0
  40. package/editor/editor/index.d.ts.map +1 -0
  41. package/editor/editor/tree/DetachedRoot.d.ts +2 -0
  42. package/editor/editor/tree/DetachedRoot.d.ts.map +1 -0
  43. package/editor/editor/tree/NodeElement.d.ts +8 -0
  44. package/editor/editor/tree/NodeElement.d.ts.map +1 -0
  45. package/editor/editor/tree/TreeElement.d.ts +15 -0
  46. package/editor/editor/tree/TreeElement.d.ts.map +1 -0
  47. package/editor/editor/tree/TreeRoot.d.ts +3 -0
  48. package/editor/editor/tree/TreeRoot.d.ts.map +1 -0
  49. package/editor/editor/tree/ViewRoot.d.ts +2 -0
  50. package/editor/editor/tree/ViewRoot.d.ts.map +1 -0
  51. package/editor/editor/tree/index.d.ts +4 -0
  52. package/editor/editor/tree/index.d.ts.map +1 -0
  53. package/editor/editor/tsconfig.build.tsbuildinfo +1 -0
  54. package/editor/index.css +33 -0
  55. package/editor/index.js +341 -0
  56. package/editor/index.js.map +1 -0
  57. package/lib/code/CodeCursor.d.ts +83 -0
  58. package/lib/code/CodeCursor.d.ts.map +1 -0
  59. package/lib/code/CodeCursor.js +306 -0
  60. package/lib/code/CodeDiffer.d.ts +28 -0
  61. package/lib/code/CodeDiffer.d.ts.map +1 -0
  62. package/lib/code/CodeDiffer.js +51 -0
  63. package/lib/code/CodeFragment.d.ts +42 -0
  64. package/lib/code/CodeFragment.d.ts.map +1 -0
  65. package/lib/code/CodeFragment.js +72 -0
  66. package/lib/code/CodeHighlighter.d.ts +71 -0
  67. package/lib/code/CodeHighlighter.d.ts.map +1 -0
  68. package/lib/code/CodeHighlighter.js +2 -0
  69. package/lib/code/CodeMetrics.d.ts +11 -0
  70. package/lib/code/CodeMetrics.d.ts.map +1 -0
  71. package/lib/code/CodeMetrics.js +29 -0
  72. package/lib/code/CodeRange.d.ts +41 -0
  73. package/lib/code/CodeRange.d.ts.map +1 -0
  74. package/lib/code/CodeRange.js +179 -0
  75. package/lib/code/CodeScope.d.ts +16 -0
  76. package/lib/code/CodeScope.d.ts.map +1 -0
  77. package/lib/code/CodeScope.js +72 -0
  78. package/lib/code/CodeSelection.d.ts +6 -0
  79. package/lib/code/CodeSelection.d.ts.map +1 -0
  80. package/lib/code/CodeSelection.js +13 -0
  81. package/lib/code/CodeSignal.d.ts +60 -0
  82. package/lib/code/CodeSignal.d.ts.map +1 -0
  83. package/lib/code/CodeSignal.js +194 -0
  84. package/lib/code/CodeTokenizer.d.ts +8 -0
  85. package/lib/code/CodeTokenizer.d.ts.map +1 -0
  86. package/lib/code/CodeTokenizer.js +50 -0
  87. package/lib/code/DefaultHighlightStyle.d.ts +3 -0
  88. package/lib/code/DefaultHighlightStyle.d.ts.map +1 -0
  89. package/lib/code/DefaultHighlightStyle.js +98 -0
  90. package/lib/code/LezerHighlighter.d.ts +22 -0
  91. package/lib/code/LezerHighlighter.d.ts.map +1 -0
  92. package/lib/code/LezerHighlighter.js +89 -0
  93. package/lib/code/diff.d.ts +31 -0
  94. package/lib/code/diff.d.ts.map +1 -0
  95. package/lib/code/diff.js +236 -0
  96. package/lib/code/extractRange.d.ts +17 -0
  97. package/lib/code/extractRange.d.ts.map +1 -0
  98. package/lib/code/extractRange.js +102 -0
  99. package/lib/code/index.d.ts +14 -0
  100. package/lib/code/index.d.ts.map +1 -0
  101. package/lib/code/index.js +14 -0
  102. package/lib/components/Audio.d.ts +14 -0
  103. package/lib/components/Audio.d.ts.map +1 -0
  104. package/lib/components/Audio.js +148 -0
  105. package/lib/components/Bezier.d.ts +23 -0
  106. package/lib/components/Bezier.d.ts.map +1 -0
  107. package/lib/components/Bezier.js +81 -0
  108. package/lib/components/Circle.d.ts +193 -0
  109. package/lib/components/Circle.d.ts.map +1 -0
  110. package/lib/components/Circle.js +178 -0
  111. package/lib/components/Code.d.ts +231 -0
  112. package/lib/components/Code.d.ts.map +1 -0
  113. package/lib/components/Code.js +325 -0
  114. package/lib/components/CodeBlock.d.ts +133 -0
  115. package/lib/components/CodeBlock.d.ts.map +1 -0
  116. package/lib/components/CodeBlock.js +461 -0
  117. package/lib/components/CubicBezier.d.ts +70 -0
  118. package/lib/components/CubicBezier.d.ts.map +1 -0
  119. package/lib/components/CubicBezier.js +81 -0
  120. package/lib/components/Curve.d.ts +204 -0
  121. package/lib/components/Curve.d.ts.map +1 -0
  122. package/lib/components/Curve.js +284 -0
  123. package/lib/components/Grid.d.ts +76 -0
  124. package/lib/components/Grid.d.ts.map +1 -0
  125. package/lib/components/Grid.js +91 -0
  126. package/lib/components/Icon.d.ts +59 -0
  127. package/lib/components/Icon.d.ts.map +1 -0
  128. package/lib/components/Icon.js +58 -0
  129. package/lib/components/Img.d.ts +118 -0
  130. package/lib/components/Img.d.ts.map +1 -0
  131. package/lib/components/Img.js +245 -0
  132. package/lib/components/Knot.d.ts +90 -0
  133. package/lib/components/Knot.d.ts.map +1 -0
  134. package/lib/components/Knot.js +68 -0
  135. package/lib/components/Latex.d.ts +39 -0
  136. package/lib/components/Latex.d.ts.map +1 -0
  137. package/lib/components/Latex.js +101 -0
  138. package/lib/components/Layout.d.ts +419 -0
  139. package/lib/components/Layout.d.ts.map +1 -0
  140. package/lib/components/Layout.js +706 -0
  141. package/lib/components/Line.d.ts +160 -0
  142. package/lib/components/Line.d.ts.map +1 -0
  143. package/lib/components/Line.js +346 -0
  144. package/lib/components/Media.d.ts +70 -0
  145. package/lib/components/Media.d.ts.map +1 -0
  146. package/lib/components/Media.js +493 -0
  147. package/lib/components/Node.d.ts +836 -0
  148. package/lib/components/Node.d.ts.map +1 -0
  149. package/lib/components/Node.js +1317 -0
  150. package/lib/components/Path.d.ts +20 -0
  151. package/lib/components/Path.d.ts.map +1 -0
  152. package/lib/components/Path.js +97 -0
  153. package/lib/components/Polygon.d.ts +113 -0
  154. package/lib/components/Polygon.d.ts.map +1 -0
  155. package/lib/components/Polygon.js +123 -0
  156. package/lib/components/QuadBezier.d.ts +62 -0
  157. package/lib/components/QuadBezier.d.ts.map +1 -0
  158. package/lib/components/QuadBezier.js +76 -0
  159. package/lib/components/Ray.d.ts +62 -0
  160. package/lib/components/Ray.d.ts.map +1 -0
  161. package/lib/components/Ray.js +96 -0
  162. package/lib/components/Rect.d.ts +114 -0
  163. package/lib/components/Rect.d.ts.map +1 -0
  164. package/lib/components/Rect.js +76 -0
  165. package/lib/components/Rive.d.ts +22 -0
  166. package/lib/components/Rive.d.ts.map +1 -0
  167. package/lib/components/Rive.js +117 -0
  168. package/lib/components/SVG.d.ts +178 -0
  169. package/lib/components/SVG.d.ts.map +1 -0
  170. package/lib/components/SVG.js +577 -0
  171. package/lib/components/Shape.d.ts +40 -0
  172. package/lib/components/Shape.d.ts.map +1 -0
  173. package/lib/components/Shape.js +134 -0
  174. package/lib/components/Spline.d.ts +89 -0
  175. package/lib/components/Spline.d.ts.map +1 -0
  176. package/lib/components/Spline.js +256 -0
  177. package/lib/components/Txt.d.ts +53 -0
  178. package/lib/components/Txt.d.ts.map +1 -0
  179. package/lib/components/Txt.js +173 -0
  180. package/lib/components/TxtLeaf.d.ts +21 -0
  181. package/lib/components/TxtLeaf.d.ts.map +1 -0
  182. package/lib/components/TxtLeaf.js +181 -0
  183. package/lib/components/Video.d.ts +69 -0
  184. package/lib/components/Video.d.ts.map +1 -0
  185. package/lib/components/Video.js +342 -0
  186. package/lib/components/View2D.d.ts +28 -0
  187. package/lib/components/View2D.d.ts.map +1 -0
  188. package/lib/components/View2D.js +93 -0
  189. package/lib/components/index.d.ts +29 -0
  190. package/lib/components/index.d.ts.map +1 -0
  191. package/lib/components/index.js +29 -0
  192. package/lib/components/types.d.ts +17 -0
  193. package/lib/components/types.d.ts.map +1 -0
  194. package/lib/components/types.js +2 -0
  195. package/lib/curves/ArcSegment.d.ts +26 -0
  196. package/lib/curves/ArcSegment.d.ts.map +1 -0
  197. package/lib/curves/ArcSegment.js +97 -0
  198. package/lib/curves/CircleSegment.d.ts +18 -0
  199. package/lib/curves/CircleSegment.d.ts.map +1 -0
  200. package/lib/curves/CircleSegment.js +52 -0
  201. package/lib/curves/CubicBezierSegment.d.ts +18 -0
  202. package/lib/curves/CubicBezierSegment.d.ts.map +1 -0
  203. package/lib/curves/CubicBezierSegment.js +55 -0
  204. package/lib/curves/CurveDrawingInfo.d.ts +11 -0
  205. package/lib/curves/CurveDrawingInfo.d.ts.map +1 -0
  206. package/lib/curves/CurveDrawingInfo.js +2 -0
  207. package/lib/curves/CurvePoint.d.ts +15 -0
  208. package/lib/curves/CurvePoint.d.ts.map +1 -0
  209. package/lib/curves/CurvePoint.js +2 -0
  210. package/lib/curves/CurveProfile.d.ts +7 -0
  211. package/lib/curves/CurveProfile.d.ts.map +1 -0
  212. package/lib/curves/CurveProfile.js +2 -0
  213. package/lib/curves/KnotInfo.d.ts +12 -0
  214. package/lib/curves/KnotInfo.d.ts.map +1 -0
  215. package/lib/curves/KnotInfo.js +2 -0
  216. package/lib/curves/LineSegment.d.ts +16 -0
  217. package/lib/curves/LineSegment.d.ts.map +1 -0
  218. package/lib/curves/LineSegment.js +45 -0
  219. package/lib/curves/Polynomial.d.ts +118 -0
  220. package/lib/curves/Polynomial.d.ts.map +1 -0
  221. package/lib/curves/Polynomial.js +259 -0
  222. package/lib/curves/Polynomial2D.d.ts +22 -0
  223. package/lib/curves/Polynomial2D.d.ts.map +1 -0
  224. package/lib/curves/Polynomial2D.js +45 -0
  225. package/lib/curves/PolynomialSegment.d.ts +39 -0
  226. package/lib/curves/PolynomialSegment.d.ts.map +1 -0
  227. package/lib/curves/PolynomialSegment.js +86 -0
  228. package/lib/curves/QuadBezierSegment.d.ts +17 -0
  229. package/lib/curves/QuadBezierSegment.d.ts.map +1 -0
  230. package/lib/curves/QuadBezierSegment.js +49 -0
  231. package/lib/curves/Segment.d.ts +9 -0
  232. package/lib/curves/Segment.d.ts.map +1 -0
  233. package/lib/curves/Segment.js +3 -0
  234. package/lib/curves/UniformPolynomialCurveSampler.d.ts +43 -0
  235. package/lib/curves/UniformPolynomialCurveSampler.d.ts.map +1 -0
  236. package/lib/curves/UniformPolynomialCurveSampler.js +73 -0
  237. package/lib/curves/createCurveProfileLerp.d.ts +32 -0
  238. package/lib/curves/createCurveProfileLerp.d.ts.map +1 -0
  239. package/lib/curves/createCurveProfileLerp.js +351 -0
  240. package/lib/curves/getBezierSplineProfile.d.ts +12 -0
  241. package/lib/curves/getBezierSplineProfile.d.ts.map +1 -0
  242. package/lib/curves/getBezierSplineProfile.js +137 -0
  243. package/lib/curves/getCircleProfile.d.ts +4 -0
  244. package/lib/curves/getCircleProfile.d.ts.map +1 -0
  245. package/lib/curves/getCircleProfile.js +44 -0
  246. package/lib/curves/getPathProfile.d.ts +3 -0
  247. package/lib/curves/getPathProfile.d.ts.map +1 -0
  248. package/lib/curves/getPathProfile.js +128 -0
  249. package/lib/curves/getPointAtDistance.d.ts +4 -0
  250. package/lib/curves/getPointAtDistance.d.ts.map +1 -0
  251. package/lib/curves/getPointAtDistance.js +15 -0
  252. package/lib/curves/getPolylineProfile.d.ts +4 -0
  253. package/lib/curves/getPolylineProfile.d.ts.map +1 -0
  254. package/lib/curves/getPolylineProfile.js +58 -0
  255. package/lib/curves/getRectProfile.d.ts +4 -0
  256. package/lib/curves/getRectProfile.d.ts.map +1 -0
  257. package/lib/curves/getRectProfile.js +57 -0
  258. package/lib/curves/index.d.ts +17 -0
  259. package/lib/curves/index.d.ts.map +1 -0
  260. package/lib/curves/index.js +17 -0
  261. package/lib/decorators/canvasStyleSignal.d.ts +5 -0
  262. package/lib/decorators/canvasStyleSignal.d.ts.map +1 -0
  263. package/lib/decorators/canvasStyleSignal.js +12 -0
  264. package/lib/decorators/colorSignal.d.ts +2 -0
  265. package/lib/decorators/colorSignal.d.ts.map +1 -0
  266. package/lib/decorators/colorSignal.js +9 -0
  267. package/lib/decorators/compound.d.ts +26 -0
  268. package/lib/decorators/compound.d.ts.map +1 -0
  269. package/lib/decorators/compound.js +49 -0
  270. package/lib/decorators/computed.d.ts +9 -0
  271. package/lib/decorators/computed.d.ts.map +1 -0
  272. package/lib/decorators/computed.js +18 -0
  273. package/lib/decorators/defaultStyle.d.ts +2 -0
  274. package/lib/decorators/defaultStyle.d.ts.map +1 -0
  275. package/lib/decorators/defaultStyle.js +14 -0
  276. package/lib/decorators/filtersSignal.d.ts +13 -0
  277. package/lib/decorators/filtersSignal.d.ts.map +1 -0
  278. package/lib/decorators/filtersSignal.js +73 -0
  279. package/lib/decorators/index.d.ts +11 -0
  280. package/lib/decorators/index.d.ts.map +1 -0
  281. package/lib/decorators/index.js +11 -0
  282. package/lib/decorators/initializers.d.ts +4 -0
  283. package/lib/decorators/initializers.d.ts.map +1 -0
  284. package/lib/decorators/initializers.js +27 -0
  285. package/lib/decorators/nodeName.d.ts +9 -0
  286. package/lib/decorators/nodeName.d.ts.map +1 -0
  287. package/lib/decorators/nodeName.js +13 -0
  288. package/lib/decorators/signal.d.ts +183 -0
  289. package/lib/decorators/signal.d.ts.map +1 -0
  290. package/lib/decorators/signal.js +285 -0
  291. package/lib/decorators/spacingSignal.d.ts +2 -0
  292. package/lib/decorators/spacingSignal.d.ts.map +1 -0
  293. package/lib/decorators/spacingSignal.js +15 -0
  294. package/lib/decorators/vector2Signal.d.ts +9 -0
  295. package/lib/decorators/vector2Signal.d.ts.map +1 -0
  296. package/lib/decorators/vector2Signal.js +15 -0
  297. package/lib/index.d.ts +9 -0
  298. package/lib/index.d.ts.map +1 -0
  299. package/lib/index.js +9 -0
  300. package/lib/jsx-dev-runtime.d.ts +3 -0
  301. package/lib/jsx-dev-runtime.d.ts.map +1 -0
  302. package/lib/jsx-dev-runtime.js +3 -0
  303. package/lib/jsx-runtime.d.ts +12 -0
  304. package/lib/jsx-runtime.d.ts.map +1 -0
  305. package/lib/jsx-runtime.js +23 -0
  306. package/lib/partials/Filter.d.ts +82 -0
  307. package/lib/partials/Filter.d.ts.map +1 -0
  308. package/lib/partials/Filter.js +135 -0
  309. package/lib/partials/Gradient.d.ts +31 -0
  310. package/lib/partials/Gradient.d.ts.map +1 -0
  311. package/lib/partials/Gradient.js +63 -0
  312. package/lib/partials/Pattern.d.ts +13 -0
  313. package/lib/partials/Pattern.d.ts.map +1 -0
  314. package/lib/partials/Pattern.js +27 -0
  315. package/lib/partials/ShaderConfig.d.ts +81 -0
  316. package/lib/partials/ShaderConfig.d.ts.map +1 -0
  317. package/lib/partials/ShaderConfig.js +25 -0
  318. package/lib/partials/index.d.ts +5 -0
  319. package/lib/partials/index.d.ts.map +1 -0
  320. package/lib/partials/index.js +5 -0
  321. package/lib/partials/types.d.ts +35 -0
  322. package/lib/partials/types.d.ts.map +1 -0
  323. package/lib/partials/types.js +2 -0
  324. package/lib/scenes/Scene2D.d.ts +29 -0
  325. package/lib/scenes/Scene2D.d.ts.map +1 -0
  326. package/lib/scenes/Scene2D.js +180 -0
  327. package/lib/scenes/index.d.ts +4 -0
  328. package/lib/scenes/index.d.ts.map +1 -0
  329. package/lib/scenes/index.js +4 -0
  330. package/lib/scenes/makeScene2D.d.ts +5 -0
  331. package/lib/scenes/makeScene2D.d.ts.map +1 -0
  332. package/lib/scenes/makeScene2D.js +11 -0
  333. package/lib/scenes/useScene2D.d.ts +3 -0
  334. package/lib/scenes/useScene2D.d.ts.map +1 -0
  335. package/lib/scenes/useScene2D.js +5 -0
  336. package/lib/tsconfig.build.tsbuildinfo +1 -0
  337. package/lib/utils/CanvasUtils.d.ts +23 -0
  338. package/lib/utils/CanvasUtils.d.ts.map +1 -0
  339. package/lib/utils/CanvasUtils.js +138 -0
  340. package/lib/utils/diff.d.ts +31 -0
  341. package/lib/utils/diff.d.ts.map +1 -0
  342. package/lib/utils/diff.js +97 -0
  343. package/lib/utils/index.d.ts +3 -0
  344. package/lib/utils/index.d.ts.map +1 -0
  345. package/lib/utils/index.js +3 -0
  346. package/lib/utils/is.d.ts +8 -0
  347. package/lib/utils/is.d.ts.map +1 -0
  348. package/lib/utils/is.js +10 -0
  349. package/lib/utils/makeSignalExtensions.d.ts +4 -0
  350. package/lib/utils/makeSignalExtensions.d.ts.map +1 -0
  351. package/lib/utils/makeSignalExtensions.js +20 -0
  352. package/lib/utils/video/ffmpeg-client.d.ts +5 -0
  353. package/lib/utils/video/ffmpeg-client.d.ts.map +1 -0
  354. package/lib/utils/video/ffmpeg-client.js +32 -0
  355. package/lib/utils/video/mp4-parser-manager.d.ts +3 -0
  356. package/lib/utils/video/mp4-parser-manager.d.ts.map +1 -0
  357. package/lib/utils/video/mp4-parser-manager.js +55 -0
  358. package/lib/utils/video/parser/index.d.ts +2 -0
  359. package/lib/utils/video/parser/index.d.ts.map +1 -0
  360. package/lib/utils/video/parser/index.js +2 -0
  361. package/lib/utils/video/parser/parser.d.ts +21 -0
  362. package/lib/utils/video/parser/parser.d.ts.map +1 -0
  363. package/lib/utils/video/parser/parser.js +168 -0
  364. package/lib/utils/video/parser/sampler.d.ts +16 -0
  365. package/lib/utils/video/parser/sampler.d.ts.map +1 -0
  366. package/lib/utils/video/parser/sampler.js +56 -0
  367. package/lib/utils/video/parser/segment.d.ts +48 -0
  368. package/lib/utils/video/parser/segment.d.ts.map +1 -0
  369. package/lib/utils/video/parser/segment.js +239 -0
  370. package/lib/utils/video/parser/sink.d.ts +9 -0
  371. package/lib/utils/video/parser/sink.d.ts.map +1 -0
  372. package/lib/utils/video/parser/sink.js +22 -0
  373. package/lib/utils/video/parser/utils.d.ts +10 -0
  374. package/lib/utils/video/parser/utils.d.ts.map +1 -0
  375. package/lib/utils/video/parser/utils.js +22 -0
  376. package/package.json +4 -4
@@ -0,0 +1,493 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var Media_1;
8
+ import { DependencyContext, PlaybackState, clamp, isReactive, useLogger, useThread, } from '@twick/core';
9
+ import { computed, initial, nodeName, signal } from '../decorators';
10
+ import { Rect } from './Rect';
11
+ const reactivePlaybackRate = `
12
+ The \`playbackRate\` of a \`Video\` cannot be reactive.
13
+
14
+ Make sure to use a concrete value and not a function:
15
+
16
+ \`\`\`ts wrong
17
+ video.playbackRate(() => 7);
18
+ \`\`\`
19
+
20
+ \`\`\`ts correct
21
+ video.playbackRate(7);
22
+ \`\`\`
23
+
24
+ If you're using a signal, extract its value before passing it to the property:
25
+
26
+ \`\`\`ts wrong
27
+ video.playbackRate(mySignal);
28
+ \`\`\`
29
+
30
+ \`\`\`ts correct
31
+ video.playbackRate(mySignal());
32
+ \`\`\`
33
+ `;
34
+ let Media = Media_1 = class Media extends Rect {
35
+ constructor(props) {
36
+ super(props);
37
+ this.lastTime = -1;
38
+ this.isSchedulingPlay = false;
39
+ if (!this.awaitCanPlay()) {
40
+ this.scheduleSeek(this.time());
41
+ }
42
+ if (props.play) {
43
+ this.play();
44
+ }
45
+ this.volume = props.volume ?? 1;
46
+ // Only set volume immediately if media is ready
47
+ if (!this.awaitCanPlay()) {
48
+ this.setVolume(this.volume);
49
+ }
50
+ }
51
+ isPlaying() {
52
+ return this.playing();
53
+ }
54
+ getCurrentTime() {
55
+ return this.clampTime(this.time());
56
+ }
57
+ getDuration() {
58
+ try {
59
+ const mElement = this.mediaElement();
60
+ const isVideo = (mElement instanceof HTMLVideoElement);
61
+ const isAudio = (mElement instanceof HTMLAudioElement);
62
+ return (this.isIOS() && (isVideo || isAudio)) ? 2 /** dummy duration for iOS */ : mElement.duration;
63
+ }
64
+ catch (error) {
65
+ // If media element is not ready yet, return a default duration
66
+ return 0;
67
+ }
68
+ }
69
+ getVolume() {
70
+ return this.volume;
71
+ }
72
+ getUrl() {
73
+ try {
74
+ return this.mediaElement().src;
75
+ }
76
+ catch (error) {
77
+ // If media element is not ready yet, return the src signal value
78
+ return this.src();
79
+ }
80
+ }
81
+ dispose() {
82
+ // Set playing state to false without trying to access media element
83
+ this.playing(false);
84
+ this.time.save();
85
+ this.remove();
86
+ super.dispose();
87
+ }
88
+ completion() {
89
+ return this.clampTime(this.time()) / this.getDuration();
90
+ }
91
+ setCurrentTime(value) {
92
+ try {
93
+ const media = this.mediaElement();
94
+ if (media.readyState < 2)
95
+ return;
96
+ media.currentTime = value;
97
+ this.lastTime = value;
98
+ if (media.seeking) {
99
+ DependencyContext.collectPromise(new Promise(resolve => {
100
+ const listener = () => {
101
+ resolve();
102
+ media.removeEventListener('seeked', listener);
103
+ };
104
+ media.addEventListener('seeked', listener);
105
+ }));
106
+ }
107
+ }
108
+ catch (error) {
109
+ // If media element is not ready yet, just update the lastTime
110
+ this.lastTime = value;
111
+ }
112
+ }
113
+ setVolume(volume) {
114
+ if (volume < 0) {
115
+ console.warn(`volumes cannot be negative - the value will be clamped to 0.`);
116
+ }
117
+ // Store the volume value
118
+ this.volume = volume;
119
+ try {
120
+ const media = this.mediaElement();
121
+ media.volume = Math.min(Math.max(volume, 0), 1);
122
+ if (volume > 1) {
123
+ if (this.allowVolumeAmplificationInPreview()) {
124
+ this.amplify(media, volume);
125
+ return;
126
+ }
127
+ console.warn(`you have set the volume of node ${this.key} to ${volume} - your video will be exported with the correct volume, but the browser does not support volumes higher than 1 by default. To enable volume amplification in the preview, set the "allowVolumeAmplificationInPreview" of your <Video/> or <Audio/> tag to true. Note that amplification for previews will not work if you use autoplay within the player due to browser autoplay policies: https://developer.chrome.com/blog/autoplay/#webaudio.`);
128
+ }
129
+ }
130
+ catch (error) {
131
+ // If media element is not ready yet, just store the volume
132
+ // It will be applied when the media becomes available via collectAsyncResources
133
+ }
134
+ }
135
+ amplify(node, volume) {
136
+ const key = `${this.src()}/${this.key}`;
137
+ if (Media_1.amplificationPool[key]) {
138
+ Media_1.amplificationPool[key].gainNode.gain.value = volume;
139
+ return;
140
+ }
141
+ const audioContext = new AudioContext();
142
+ const sourceNode = audioContext.createMediaElementSource(node);
143
+ const gainNode = audioContext.createGain();
144
+ gainNode.gain.value = volume;
145
+ sourceNode.connect(gainNode);
146
+ gainNode.connect(audioContext.destination);
147
+ Media_1.amplificationPool[key] = { audioContext, sourceNode, gainNode };
148
+ if (typeof window === 'undefined' || audioContext.state !== 'suspended') {
149
+ return;
150
+ }
151
+ // Start audio context after user interation, neccessary due to browser autoplay policies
152
+ const handleInteraction = () => {
153
+ Media_1.amplificationPool[key].audioContext.resume();
154
+ window.removeEventListener('click', handleInteraction);
155
+ };
156
+ window.addEventListener('click', handleInteraction);
157
+ }
158
+ setPlaybackRate(playbackRate) {
159
+ let value;
160
+ if (isReactive(playbackRate)) {
161
+ value = playbackRate();
162
+ useLogger().warn({
163
+ message: 'Invalid value set as the playback rate',
164
+ remarks: reactivePlaybackRate,
165
+ inspect: this.key,
166
+ stack: new Error().stack,
167
+ });
168
+ }
169
+ else {
170
+ value = playbackRate;
171
+ }
172
+ this.playbackRate.context.setter(value);
173
+ if (this.playing()) {
174
+ if (value === 0) {
175
+ this.pause();
176
+ }
177
+ else {
178
+ const time = useThread().time;
179
+ const start = time();
180
+ const offset = this.time();
181
+ this.time(() => this.clampTime(offset + (time() - start) * value));
182
+ }
183
+ }
184
+ }
185
+ scheduleSeek(time) {
186
+ // Defer the media element access to avoid immediate async property access
187
+ setTimeout(() => {
188
+ try {
189
+ const media = this.mediaElement();
190
+ // Use the existing waitForCanPlay method which handles readiness properly
191
+ this.waitForCanPlay(media, () => {
192
+ // Wait until the media is ready to seek again as
193
+ // setting the time before the video doesn't work reliably.
194
+ media.currentTime = time;
195
+ });
196
+ }
197
+ catch (error) {
198
+ // If media element is not ready yet, retry after a longer delay
199
+ setTimeout(() => this.scheduleSeek(time), 50);
200
+ }
201
+ }, 0);
202
+ }
203
+ /**
204
+ * Waits for the canplay event to be fired before calling onCanPlay.
205
+ *
206
+ * If the media is already ready to play, onCanPlay is called immediately.
207
+ * @param onCanPlay - The function to call when the media is ready to play.
208
+ * @returns
209
+ */
210
+ waitForCanPlay(media, onCanPlay) {
211
+ // Be more strict - require readyState >= 3 (HAVE_FUTURE_DATA) for better reliability
212
+ if (media.readyState >= 3) {
213
+ onCanPlay();
214
+ return;
215
+ }
216
+ const onCanPlayWrapper = () => {
217
+ onCanPlay();
218
+ media.removeEventListener('canplay', onCanPlayWrapper);
219
+ media.removeEventListener('canplaythrough', onCanPlayWrapper);
220
+ };
221
+ const onError = () => {
222
+ const reason = this.getErrorReason(media.error?.code);
223
+ const srcValue = this.src();
224
+ console.log(`ERROR: Error loading video: src="${srcValue}", ${reason}`);
225
+ console.log(`Media element src: "${media.src}"`);
226
+ media.removeEventListener('error', onError);
227
+ media.removeEventListener('canplay', onCanPlayWrapper);
228
+ media.removeEventListener('canplaythrough', onCanPlayWrapper);
229
+ };
230
+ // Listen for both canplay and canplaythrough events
231
+ media.addEventListener('canplay', onCanPlayWrapper);
232
+ media.addEventListener('canplaythrough', onCanPlayWrapper);
233
+ media.addEventListener('error', onError);
234
+ }
235
+ /**
236
+ * Returns true if we should wait for the media to be ready to play.
237
+ */
238
+ waitForCanPlayNecessary(media) {
239
+ if (media.readyState >= 2) {
240
+ return false;
241
+ }
242
+ return (this.awaitCanPlay() ||
243
+ this.view().playbackState() === PlaybackState.Rendering);
244
+ }
245
+ play() {
246
+ console.log('=== Media.play() called ===');
247
+ // Set the playing state first
248
+ this.playing(true);
249
+ // Schedule the actual play operation for when media is ready
250
+ this.schedulePlay();
251
+ }
252
+ schedulePlay() {
253
+ // Prevent recursive calls
254
+ if (this.isSchedulingPlay) {
255
+ return;
256
+ }
257
+ this.isSchedulingPlay = true;
258
+ // Check if thread context is available before accessing it
259
+ let timeFunction = null;
260
+ try {
261
+ const time = useThread().time;
262
+ timeFunction = time;
263
+ }
264
+ catch (error) {
265
+ // Reset flag and use simple play without thread time
266
+ this.isSchedulingPlay = false;
267
+ this.simplePlay();
268
+ return;
269
+ }
270
+ // We need to wait for the media to be ready before we can play it
271
+ // Use a setTimeout to defer the operation and avoid immediate async property access
272
+ setTimeout(() => {
273
+ // Check if we're still supposed to be playing (avoid race conditions)
274
+ const isPlaying = this.playing();
275
+ if (!isPlaying) {
276
+ this.isSchedulingPlay = false;
277
+ return;
278
+ }
279
+ // Add another timeout to further defer media element access
280
+ setTimeout(() => {
281
+ try {
282
+ const media = this.mediaElement();
283
+ // Always use waitForCanPlay to ensure media is ready
284
+ this.waitForCanPlay(media, () => {
285
+ // Double-check we're still playing before calling actuallyPlay
286
+ if (this.playing() && timeFunction) {
287
+ this.actuallyPlay(media, timeFunction);
288
+ }
289
+ // Reset the flag when done
290
+ this.isSchedulingPlay = false;
291
+ });
292
+ }
293
+ catch (error) {
294
+ // Reset flag before retry
295
+ this.isSchedulingPlay = false;
296
+ // If media is not ready yet, retry after a longer delay
297
+ setTimeout(() => this.schedulePlay(), 100);
298
+ }
299
+ }, 10);
300
+ }, 0);
301
+ }
302
+ simplePlay() {
303
+ setTimeout(() => {
304
+ try {
305
+ const media = this.mediaElement();
306
+ // Guard against undefined src
307
+ if (!media.src || media.src.includes('undefined')) {
308
+ return;
309
+ }
310
+ if (media.paused && this.playing()) {
311
+ media.playbackRate = this.playbackRate();
312
+ const playPromise = media.play();
313
+ if (playPromise !== undefined) {
314
+ playPromise.then(() => {
315
+ console.log('Simple play started successfully');
316
+ }).catch(error => {
317
+ if (error.name !== 'AbortError') {
318
+ console.warn('Error in simple play:', error);
319
+ }
320
+ this.playing(false);
321
+ });
322
+ }
323
+ }
324
+ }
325
+ catch (error) {
326
+ // Stop retries for errors
327
+ return;
328
+ }
329
+ }, 10);
330
+ }
331
+ actuallyPlay(media, timeFunction) {
332
+ console.log('=== actuallyPlay called ===');
333
+ console.log('Media element:', media);
334
+ console.log('Media src:', media.src);
335
+ console.log('Media paused:', media.paused);
336
+ console.log('Media readyState:', media.readyState);
337
+ // Make sure we're still supposed to be playing
338
+ if (!this.playing()) {
339
+ console.log('Playing state is false, aborting actuallyPlay');
340
+ return;
341
+ }
342
+ // Set playback rate on media element
343
+ media.playbackRate = this.playbackRate();
344
+ // Ensure the media is ready to play
345
+ if (media.paused) {
346
+ console.log('Media is paused, calling play()');
347
+ // Start playing the media element
348
+ const playPromise = media.play();
349
+ if (playPromise !== undefined) {
350
+ playPromise.then(() => {
351
+ console.log('Media play() promise resolved - should be playing now');
352
+ console.log('Post-play media paused:', media.paused);
353
+ console.log('Post-play media currentTime:', media.currentTime);
354
+ }).catch(error => {
355
+ // Don't warn about AbortError - it's normal when play() is interrupted by pause()
356
+ if (error.name !== 'AbortError') {
357
+ console.warn('Error playing media:', error);
358
+ }
359
+ this.playing(false);
360
+ });
361
+ }
362
+ }
363
+ else {
364
+ console.log('Media is already playing');
365
+ }
366
+ // Set up time synchronization
367
+ const start = timeFunction();
368
+ const offset = media.currentTime;
369
+ // Update time signal
370
+ this.time(() => {
371
+ const newTime = this.clampTime(offset + (timeFunction() - start) * this.playbackRate());
372
+ return newTime;
373
+ });
374
+ }
375
+ pause() {
376
+ // Set the playing state first
377
+ this.playing(false);
378
+ this.time.save();
379
+ // Try to pause the media element if it's available
380
+ // Use setTimeout to defer access and avoid async property issues
381
+ setTimeout(() => {
382
+ try {
383
+ const media = this.mediaElement();
384
+ media.pause();
385
+ }
386
+ catch (error) {
387
+ // If media element is not ready yet, just update the state
388
+ // The media won't be playing anyway if it's not ready
389
+ }
390
+ }, 0);
391
+ }
392
+ clampTime(time) {
393
+ const duration = this.getDuration();
394
+ if (this.loop()) {
395
+ time %= duration;
396
+ }
397
+ return clamp(0, duration, time);
398
+ }
399
+ collectAsyncResources() {
400
+ super.collectAsyncResources();
401
+ this.seekedMedia();
402
+ // Ensure volume is set when media becomes available
403
+ this.setVolume(this.volume);
404
+ }
405
+ autoPlayBasedOnTwick() {
406
+ // Auto-start/stop playback based on Twick's playback state
407
+ const playbackState = this.view().playbackState();
408
+ // console.log('autoPlayBasedOnTwick called:', {
409
+ // playbackState,
410
+ // currentlyPlaying: this.playing(),
411
+ // shouldAutoPlay: (playbackState === PlaybackState.Playing || playbackState === PlaybackState.Presenting) && !this.playing(),
412
+ // shouldAutoPause: playbackState === PlaybackState.Paused && this.playing()
413
+ // });
414
+ if ((playbackState === PlaybackState.Playing || playbackState === PlaybackState.Presenting) && !this.playing()) {
415
+ console.log('Auto-starting media playback via play() method');
416
+ this.play(); // Call the full play() method instead of just setting playing(true)
417
+ }
418
+ else if (playbackState === PlaybackState.Paused && this.playing()) {
419
+ console.log('Auto-pausing media playback via pause() method');
420
+ this.pause(); // Call the full pause() method
421
+ }
422
+ }
423
+ getErrorReason(errCode) {
424
+ let reason;
425
+ switch (errCode) {
426
+ case 1:
427
+ reason = 'MEDIA_ERR_ABORTED';
428
+ break;
429
+ case 2:
430
+ reason = 'MEDIA_ERR_NETWORK. This might be a 404 error.';
431
+ break;
432
+ case 3:
433
+ reason =
434
+ 'MEDIA_ERR_DECODE. This might be an issue with your video file.';
435
+ break;
436
+ case 4:
437
+ reason =
438
+ 'MEDIA_ERR_SRC_NOT_SUPPORTED. If you are sure that the path to the video is correct, this might be a CORS error.';
439
+ break;
440
+ default:
441
+ reason = 'UNKNOWN';
442
+ }
443
+ return reason;
444
+ }
445
+ // Helper method to check if running on iOS
446
+ isIOS() {
447
+ if (typeof navigator === 'undefined')
448
+ return false;
449
+ const isIos = /iPad|iPhone|iPod/.test(navigator.userAgent) ||
450
+ (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
451
+ return isIos;
452
+ }
453
+ };
454
+ Media.amplificationPool = {};
455
+ __decorate([
456
+ initial(''),
457
+ signal()
458
+ ], Media.prototype, "src", void 0);
459
+ __decorate([
460
+ initial(false),
461
+ signal()
462
+ ], Media.prototype, "loop", void 0);
463
+ __decorate([
464
+ initial(1),
465
+ signal()
466
+ ], Media.prototype, "playbackRate", void 0);
467
+ __decorate([
468
+ initial(0),
469
+ signal()
470
+ ], Media.prototype, "time", void 0);
471
+ __decorate([
472
+ initial(false),
473
+ signal()
474
+ ], Media.prototype, "playing", void 0);
475
+ __decorate([
476
+ initial(true),
477
+ signal()
478
+ ], Media.prototype, "awaitCanPlay", void 0);
479
+ __decorate([
480
+ initial(false),
481
+ signal()
482
+ ], Media.prototype, "allowVolumeAmplificationInPreview", void 0);
483
+ __decorate([
484
+ computed()
485
+ ], Media.prototype, "completion", null);
486
+ __decorate([
487
+ computed()
488
+ ], Media.prototype, "amplify", null);
489
+ Media = Media_1 = __decorate([
490
+ nodeName('Media')
491
+ ], Media);
492
+ export { Media };
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVkaWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvTWVkaWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsYUFBYSxFQUNiLEtBQUssRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFhNUIsTUFBTSxvQkFBb0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXNCNUIsQ0FBQztBQUdLLElBQWUsS0FBSyxhQUFwQixNQUFlLEtBQU0sU0FBUSxJQUFJO0lBNkN0QyxZQUFtQixLQUFpQjtRQUNsQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFKTCxhQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBSy9CLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2hDLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsQ0FBQztJ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