@twick/2d 0.14.21 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) hide show
  1. package/dist/index.cjs +10806 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +4657 -0
  4. package/dist/index.d.ts +4657 -0
  5. package/dist/index.js +10768 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/jsx-runtime.d.mts +1 -0
  8. package/dist/jsx-runtime.d.ts +1 -0
  9. package/editor/index.css +24 -22
  10. package/editor/index.css.map +1 -0
  11. package/editor/index.d.ts +5 -0
  12. package/editor/index.js +472 -258
  13. package/editor/index.js.map +1 -1
  14. package/package.json +54 -27
  15. package/tsconfig.project.json +3 -2
  16. package/lib/code/CodeCursor.d.ts +0 -83
  17. package/lib/code/CodeCursor.d.ts.map +0 -1
  18. package/lib/code/CodeCursor.js +0 -306
  19. package/lib/code/CodeDiffer.d.ts +0 -28
  20. package/lib/code/CodeDiffer.d.ts.map +0 -1
  21. package/lib/code/CodeDiffer.js +0 -51
  22. package/lib/code/CodeFragment.d.ts +0 -42
  23. package/lib/code/CodeFragment.d.ts.map +0 -1
  24. package/lib/code/CodeFragment.js +0 -72
  25. package/lib/code/CodeHighlighter.d.ts +0 -71
  26. package/lib/code/CodeHighlighter.d.ts.map +0 -1
  27. package/lib/code/CodeHighlighter.js +0 -2
  28. package/lib/code/CodeMetrics.d.ts +0 -11
  29. package/lib/code/CodeMetrics.d.ts.map +0 -1
  30. package/lib/code/CodeMetrics.js +0 -29
  31. package/lib/code/CodeRange.d.ts +0 -41
  32. package/lib/code/CodeRange.d.ts.map +0 -1
  33. package/lib/code/CodeRange.js +0 -179
  34. package/lib/code/CodeScope.d.ts +0 -16
  35. package/lib/code/CodeScope.d.ts.map +0 -1
  36. package/lib/code/CodeScope.js +0 -72
  37. package/lib/code/CodeSelection.d.ts +0 -6
  38. package/lib/code/CodeSelection.d.ts.map +0 -1
  39. package/lib/code/CodeSelection.js +0 -13
  40. package/lib/code/CodeSignal.d.ts +0 -60
  41. package/lib/code/CodeSignal.d.ts.map +0 -1
  42. package/lib/code/CodeSignal.js +0 -194
  43. package/lib/code/CodeTokenizer.d.ts +0 -8
  44. package/lib/code/CodeTokenizer.d.ts.map +0 -1
  45. package/lib/code/CodeTokenizer.js +0 -50
  46. package/lib/code/DefaultHighlightStyle.d.ts +0 -3
  47. package/lib/code/DefaultHighlightStyle.d.ts.map +0 -1
  48. package/lib/code/DefaultHighlightStyle.js +0 -98
  49. package/lib/code/LezerHighlighter.d.ts +0 -22
  50. package/lib/code/LezerHighlighter.d.ts.map +0 -1
  51. package/lib/code/LezerHighlighter.js +0 -89
  52. package/lib/code/diff.d.ts +0 -31
  53. package/lib/code/diff.d.ts.map +0 -1
  54. package/lib/code/diff.js +0 -236
  55. package/lib/code/extractRange.d.ts +0 -17
  56. package/lib/code/extractRange.d.ts.map +0 -1
  57. package/lib/code/extractRange.js +0 -102
  58. package/lib/code/index.d.ts +0 -14
  59. package/lib/code/index.d.ts.map +0 -1
  60. package/lib/code/index.js +0 -14
  61. package/lib/components/Audio.d.ts +0 -14
  62. package/lib/components/Audio.d.ts.map +0 -1
  63. package/lib/components/Audio.js +0 -148
  64. package/lib/components/Bezier.d.ts +0 -23
  65. package/lib/components/Bezier.d.ts.map +0 -1
  66. package/lib/components/Bezier.js +0 -81
  67. package/lib/components/Circle.d.ts +0 -193
  68. package/lib/components/Circle.d.ts.map +0 -1
  69. package/lib/components/Circle.js +0 -178
  70. package/lib/components/Code.d.ts +0 -231
  71. package/lib/components/Code.d.ts.map +0 -1
  72. package/lib/components/Code.js +0 -325
  73. package/lib/components/CodeBlock.d.ts +0 -133
  74. package/lib/components/CodeBlock.d.ts.map +0 -1
  75. package/lib/components/CodeBlock.js +0 -461
  76. package/lib/components/CubicBezier.d.ts +0 -70
  77. package/lib/components/CubicBezier.d.ts.map +0 -1
  78. package/lib/components/CubicBezier.js +0 -81
  79. package/lib/components/Curve.d.ts +0 -204
  80. package/lib/components/Curve.d.ts.map +0 -1
  81. package/lib/components/Curve.js +0 -284
  82. package/lib/components/Grid.d.ts +0 -76
  83. package/lib/components/Grid.d.ts.map +0 -1
  84. package/lib/components/Grid.js +0 -91
  85. package/lib/components/Icon.d.ts +0 -59
  86. package/lib/components/Icon.d.ts.map +0 -1
  87. package/lib/components/Icon.js +0 -58
  88. package/lib/components/Img.d.ts +0 -118
  89. package/lib/components/Img.d.ts.map +0 -1
  90. package/lib/components/Img.js +0 -245
  91. package/lib/components/Knot.d.ts +0 -90
  92. package/lib/components/Knot.d.ts.map +0 -1
  93. package/lib/components/Knot.js +0 -68
  94. package/lib/components/Latex.d.ts +0 -39
  95. package/lib/components/Latex.d.ts.map +0 -1
  96. package/lib/components/Latex.js +0 -101
  97. package/lib/components/Layout.d.ts +0 -419
  98. package/lib/components/Layout.d.ts.map +0 -1
  99. package/lib/components/Layout.js +0 -706
  100. package/lib/components/Line.d.ts +0 -160
  101. package/lib/components/Line.d.ts.map +0 -1
  102. package/lib/components/Line.js +0 -346
  103. package/lib/components/Media.d.ts +0 -70
  104. package/lib/components/Media.d.ts.map +0 -1
  105. package/lib/components/Media.js +0 -493
  106. package/lib/components/Node.d.ts +0 -836
  107. package/lib/components/Node.d.ts.map +0 -1
  108. package/lib/components/Node.js +0 -1317
  109. package/lib/components/Path.d.ts +0 -20
  110. package/lib/components/Path.d.ts.map +0 -1
  111. package/lib/components/Path.js +0 -97
  112. package/lib/components/Polygon.d.ts +0 -113
  113. package/lib/components/Polygon.d.ts.map +0 -1
  114. package/lib/components/Polygon.js +0 -123
  115. package/lib/components/QuadBezier.d.ts +0 -62
  116. package/lib/components/QuadBezier.d.ts.map +0 -1
  117. package/lib/components/QuadBezier.js +0 -76
  118. package/lib/components/Ray.d.ts +0 -62
  119. package/lib/components/Ray.d.ts.map +0 -1
  120. package/lib/components/Ray.js +0 -96
  121. package/lib/components/Rect.d.ts +0 -114
  122. package/lib/components/Rect.d.ts.map +0 -1
  123. package/lib/components/Rect.js +0 -76
  124. package/lib/components/Rive.d.ts +0 -22
  125. package/lib/components/Rive.d.ts.map +0 -1
  126. package/lib/components/Rive.js +0 -117
  127. package/lib/components/SVG.d.ts +0 -178
  128. package/lib/components/SVG.d.ts.map +0 -1
  129. package/lib/components/SVG.js +0 -577
  130. package/lib/components/Shape.d.ts +0 -40
  131. package/lib/components/Shape.d.ts.map +0 -1
  132. package/lib/components/Shape.js +0 -134
  133. package/lib/components/Spline.d.ts +0 -89
  134. package/lib/components/Spline.d.ts.map +0 -1
  135. package/lib/components/Spline.js +0 -256
  136. package/lib/components/Txt.d.ts +0 -53
  137. package/lib/components/Txt.d.ts.map +0 -1
  138. package/lib/components/Txt.js +0 -173
  139. package/lib/components/TxtLeaf.d.ts +0 -21
  140. package/lib/components/TxtLeaf.d.ts.map +0 -1
  141. package/lib/components/TxtLeaf.js +0 -181
  142. package/lib/components/Video.d.ts +0 -69
  143. package/lib/components/Video.d.ts.map +0 -1
  144. package/lib/components/Video.js +0 -342
  145. package/lib/components/View2D.d.ts +0 -28
  146. package/lib/components/View2D.d.ts.map +0 -1
  147. package/lib/components/View2D.js +0 -93
  148. package/lib/components/index.d.ts +0 -29
  149. package/lib/components/index.d.ts.map +0 -1
  150. package/lib/components/index.js +0 -29
  151. package/lib/components/types.d.ts +0 -17
  152. package/lib/components/types.d.ts.map +0 -1
  153. package/lib/components/types.js +0 -2
  154. package/lib/curves/ArcSegment.d.ts +0 -26
  155. package/lib/curves/ArcSegment.d.ts.map +0 -1
  156. package/lib/curves/ArcSegment.js +0 -97
  157. package/lib/curves/CircleSegment.d.ts +0 -18
  158. package/lib/curves/CircleSegment.d.ts.map +0 -1
  159. package/lib/curves/CircleSegment.js +0 -52
  160. package/lib/curves/CubicBezierSegment.d.ts +0 -18
  161. package/lib/curves/CubicBezierSegment.d.ts.map +0 -1
  162. package/lib/curves/CubicBezierSegment.js +0 -55
  163. package/lib/curves/CurveDrawingInfo.d.ts +0 -11
  164. package/lib/curves/CurveDrawingInfo.d.ts.map +0 -1
  165. package/lib/curves/CurveDrawingInfo.js +0 -2
  166. package/lib/curves/CurvePoint.d.ts +0 -15
  167. package/lib/curves/CurvePoint.d.ts.map +0 -1
  168. package/lib/curves/CurvePoint.js +0 -2
  169. package/lib/curves/CurveProfile.d.ts +0 -7
  170. package/lib/curves/CurveProfile.d.ts.map +0 -1
  171. package/lib/curves/CurveProfile.js +0 -2
  172. package/lib/curves/KnotInfo.d.ts +0 -12
  173. package/lib/curves/KnotInfo.d.ts.map +0 -1
  174. package/lib/curves/KnotInfo.js +0 -2
  175. package/lib/curves/LineSegment.d.ts +0 -16
  176. package/lib/curves/LineSegment.d.ts.map +0 -1
  177. package/lib/curves/LineSegment.js +0 -45
  178. package/lib/curves/Polynomial.d.ts +0 -118
  179. package/lib/curves/Polynomial.d.ts.map +0 -1
  180. package/lib/curves/Polynomial.js +0 -259
  181. package/lib/curves/Polynomial2D.d.ts +0 -22
  182. package/lib/curves/Polynomial2D.d.ts.map +0 -1
  183. package/lib/curves/Polynomial2D.js +0 -45
  184. package/lib/curves/PolynomialSegment.d.ts +0 -39
  185. package/lib/curves/PolynomialSegment.d.ts.map +0 -1
  186. package/lib/curves/PolynomialSegment.js +0 -86
  187. package/lib/curves/QuadBezierSegment.d.ts +0 -17
  188. package/lib/curves/QuadBezierSegment.d.ts.map +0 -1
  189. package/lib/curves/QuadBezierSegment.js +0 -49
  190. package/lib/curves/Segment.d.ts +0 -9
  191. package/lib/curves/Segment.d.ts.map +0 -1
  192. package/lib/curves/Segment.js +0 -3
  193. package/lib/curves/UniformPolynomialCurveSampler.d.ts +0 -43
  194. package/lib/curves/UniformPolynomialCurveSampler.d.ts.map +0 -1
  195. package/lib/curves/UniformPolynomialCurveSampler.js +0 -73
  196. package/lib/curves/createCurveProfileLerp.d.ts +0 -32
  197. package/lib/curves/createCurveProfileLerp.d.ts.map +0 -1
  198. package/lib/curves/createCurveProfileLerp.js +0 -351
  199. package/lib/curves/getBezierSplineProfile.d.ts +0 -12
  200. package/lib/curves/getBezierSplineProfile.d.ts.map +0 -1
  201. package/lib/curves/getBezierSplineProfile.js +0 -137
  202. package/lib/curves/getCircleProfile.d.ts +0 -4
  203. package/lib/curves/getCircleProfile.d.ts.map +0 -1
  204. package/lib/curves/getCircleProfile.js +0 -44
  205. package/lib/curves/getPathProfile.d.ts +0 -3
  206. package/lib/curves/getPathProfile.d.ts.map +0 -1
  207. package/lib/curves/getPathProfile.js +0 -128
  208. package/lib/curves/getPointAtDistance.d.ts +0 -4
  209. package/lib/curves/getPointAtDistance.d.ts.map +0 -1
  210. package/lib/curves/getPointAtDistance.js +0 -15
  211. package/lib/curves/getPolylineProfile.d.ts +0 -4
  212. package/lib/curves/getPolylineProfile.d.ts.map +0 -1
  213. package/lib/curves/getPolylineProfile.js +0 -58
  214. package/lib/curves/getRectProfile.d.ts +0 -4
  215. package/lib/curves/getRectProfile.d.ts.map +0 -1
  216. package/lib/curves/getRectProfile.js +0 -57
  217. package/lib/curves/index.d.ts +0 -17
  218. package/lib/curves/index.d.ts.map +0 -1
  219. package/lib/curves/index.js +0 -17
  220. package/lib/decorators/canvasStyleSignal.d.ts +0 -5
  221. package/lib/decorators/canvasStyleSignal.d.ts.map +0 -1
  222. package/lib/decorators/canvasStyleSignal.js +0 -12
  223. package/lib/decorators/colorSignal.d.ts +0 -2
  224. package/lib/decorators/colorSignal.d.ts.map +0 -1
  225. package/lib/decorators/colorSignal.js +0 -9
  226. package/lib/decorators/compound.d.ts +0 -26
  227. package/lib/decorators/compound.d.ts.map +0 -1
  228. package/lib/decorators/compound.js +0 -49
  229. package/lib/decorators/computed.d.ts +0 -9
  230. package/lib/decorators/computed.d.ts.map +0 -1
  231. package/lib/decorators/computed.js +0 -18
  232. package/lib/decorators/defaultStyle.d.ts +0 -2
  233. package/lib/decorators/defaultStyle.d.ts.map +0 -1
  234. package/lib/decorators/defaultStyle.js +0 -14
  235. package/lib/decorators/filtersSignal.d.ts +0 -13
  236. package/lib/decorators/filtersSignal.d.ts.map +0 -1
  237. package/lib/decorators/filtersSignal.js +0 -73
  238. package/lib/decorators/index.d.ts +0 -11
  239. package/lib/decorators/index.d.ts.map +0 -1
  240. package/lib/decorators/index.js +0 -11
  241. package/lib/decorators/initializers.d.ts +0 -4
  242. package/lib/decorators/initializers.d.ts.map +0 -1
  243. package/lib/decorators/initializers.js +0 -27
  244. package/lib/decorators/nodeName.d.ts +0 -9
  245. package/lib/decorators/nodeName.d.ts.map +0 -1
  246. package/lib/decorators/nodeName.js +0 -13
  247. package/lib/decorators/signal.d.ts +0 -183
  248. package/lib/decorators/signal.d.ts.map +0 -1
  249. package/lib/decorators/signal.js +0 -285
  250. package/lib/decorators/spacingSignal.d.ts +0 -2
  251. package/lib/decorators/spacingSignal.d.ts.map +0 -1
  252. package/lib/decorators/spacingSignal.js +0 -15
  253. package/lib/decorators/vector2Signal.d.ts +0 -9
  254. package/lib/decorators/vector2Signal.d.ts.map +0 -1
  255. package/lib/decorators/vector2Signal.js +0 -15
  256. package/lib/index.d.ts +0 -9
  257. package/lib/index.d.ts.map +0 -1
  258. package/lib/index.js +0 -9
  259. package/lib/jsx-dev-runtime.d.ts +0 -3
  260. package/lib/jsx-dev-runtime.d.ts.map +0 -1
  261. package/lib/jsx-dev-runtime.js +0 -3
  262. package/lib/jsx-runtime.d.ts +0 -12
  263. package/lib/jsx-runtime.d.ts.map +0 -1
  264. package/lib/jsx-runtime.js +0 -23
  265. package/lib/partials/Filter.d.ts +0 -82
  266. package/lib/partials/Filter.d.ts.map +0 -1
  267. package/lib/partials/Filter.js +0 -135
  268. package/lib/partials/Gradient.d.ts +0 -31
  269. package/lib/partials/Gradient.d.ts.map +0 -1
  270. package/lib/partials/Gradient.js +0 -63
  271. package/lib/partials/Pattern.d.ts +0 -13
  272. package/lib/partials/Pattern.d.ts.map +0 -1
  273. package/lib/partials/Pattern.js +0 -27
  274. package/lib/partials/ShaderConfig.d.ts +0 -81
  275. package/lib/partials/ShaderConfig.d.ts.map +0 -1
  276. package/lib/partials/ShaderConfig.js +0 -25
  277. package/lib/partials/index.d.ts +0 -5
  278. package/lib/partials/index.d.ts.map +0 -1
  279. package/lib/partials/index.js +0 -5
  280. package/lib/partials/types.d.ts +0 -35
  281. package/lib/partials/types.d.ts.map +0 -1
  282. package/lib/partials/types.js +0 -2
  283. package/lib/scenes/Scene2D.d.ts +0 -29
  284. package/lib/scenes/Scene2D.d.ts.map +0 -1
  285. package/lib/scenes/Scene2D.js +0 -180
  286. package/lib/scenes/index.d.ts +0 -4
  287. package/lib/scenes/index.d.ts.map +0 -1
  288. package/lib/scenes/index.js +0 -4
  289. package/lib/scenes/makeScene2D.d.ts +0 -5
  290. package/lib/scenes/makeScene2D.d.ts.map +0 -1
  291. package/lib/scenes/makeScene2D.js +0 -11
  292. package/lib/scenes/useScene2D.d.ts +0 -3
  293. package/lib/scenes/useScene2D.d.ts.map +0 -1
  294. package/lib/scenes/useScene2D.js +0 -5
  295. package/lib/tsconfig.build.tsbuildinfo +0 -1
  296. package/lib/utils/CanvasUtils.d.ts +0 -23
  297. package/lib/utils/CanvasUtils.d.ts.map +0 -1
  298. package/lib/utils/CanvasUtils.js +0 -138
  299. package/lib/utils/diff.d.ts +0 -31
  300. package/lib/utils/diff.d.ts.map +0 -1
  301. package/lib/utils/diff.js +0 -97
  302. package/lib/utils/index.d.ts +0 -3
  303. package/lib/utils/index.d.ts.map +0 -1
  304. package/lib/utils/index.js +0 -3
  305. package/lib/utils/is.d.ts +0 -8
  306. package/lib/utils/is.d.ts.map +0 -1
  307. package/lib/utils/is.js +0 -10
  308. package/lib/utils/makeSignalExtensions.d.ts +0 -4
  309. package/lib/utils/makeSignalExtensions.d.ts.map +0 -1
  310. package/lib/utils/makeSignalExtensions.js +0 -20
  311. package/lib/utils/video/ffmpeg-client.d.ts +0 -5
  312. package/lib/utils/video/ffmpeg-client.d.ts.map +0 -1
  313. package/lib/utils/video/ffmpeg-client.js +0 -32
  314. package/lib/utils/video/mp4-parser-manager.d.ts +0 -3
  315. package/lib/utils/video/mp4-parser-manager.d.ts.map +0 -1
  316. package/lib/utils/video/mp4-parser-manager.js +0 -55
  317. package/lib/utils/video/parser/index.d.ts +0 -2
  318. package/lib/utils/video/parser/index.d.ts.map +0 -1
  319. package/lib/utils/video/parser/index.js +0 -2
  320. package/lib/utils/video/parser/parser.d.ts +0 -21
  321. package/lib/utils/video/parser/parser.d.ts.map +0 -1
  322. package/lib/utils/video/parser/parser.js +0 -168
  323. package/lib/utils/video/parser/sampler.d.ts +0 -16
  324. package/lib/utils/video/parser/sampler.d.ts.map +0 -1
  325. package/lib/utils/video/parser/sampler.js +0 -56
  326. package/lib/utils/video/parser/segment.d.ts +0 -48
  327. package/lib/utils/video/parser/segment.d.ts.map +0 -1
  328. package/lib/utils/video/parser/segment.js +0 -239
  329. package/lib/utils/video/parser/sink.d.ts +0 -9
  330. package/lib/utils/video/parser/sink.d.ts.map +0 -1
  331. package/lib/utils/video/parser/sink.js +0 -22
  332. package/lib/utils/video/parser/utils.d.ts +0 -10
  333. package/lib/utils/video/parser/utils.d.ts.map +0 -1
  334. package/lib/utils/video/parser/utils.js +0 -22
  335. package/src/editor/NodeInspectorConfig.tsx +0 -76
  336. package/src/editor/PreviewOverlayConfig.tsx +0 -67
  337. package/src/editor/Provider.tsx +0 -93
  338. package/src/editor/SceneGraphTabConfig.tsx +0 -81
  339. package/src/editor/icons/CircleIcon.tsx +0 -7
  340. package/src/editor/icons/CodeBlockIcon.tsx +0 -8
  341. package/src/editor/icons/CurveIcon.tsx +0 -7
  342. package/src/editor/icons/GridIcon.tsx +0 -7
  343. package/src/editor/icons/IconMap.ts +0 -35
  344. package/src/editor/icons/ImgIcon.tsx +0 -8
  345. package/src/editor/icons/LayoutIcon.tsx +0 -9
  346. package/src/editor/icons/LineIcon.tsx +0 -7
  347. package/src/editor/icons/NodeIcon.tsx +0 -7
  348. package/src/editor/icons/RayIcon.tsx +0 -7
  349. package/src/editor/icons/RectIcon.tsx +0 -7
  350. package/src/editor/icons/ShapeIcon.tsx +0 -7
  351. package/src/editor/icons/TxtIcon.tsx +0 -8
  352. package/src/editor/icons/VideoIcon.tsx +0 -7
  353. package/src/editor/icons/View2DIcon.tsx +0 -10
  354. package/src/editor/index.css +0 -0
  355. package/src/editor/index.ts +0 -17
  356. package/src/editor/tree/DetachedRoot.tsx +0 -23
  357. package/src/editor/tree/NodeElement.tsx +0 -74
  358. package/src/editor/tree/TreeElement.tsx +0 -72
  359. package/src/editor/tree/TreeRoot.tsx +0 -10
  360. package/src/editor/tree/ViewRoot.tsx +0 -20
  361. package/src/editor/tree/index.module.scss +0 -38
  362. package/src/editor/tree/index.ts +0 -3
  363. package/src/editor/tsconfig.build.json +0 -5
  364. package/src/editor/tsconfig.json +0 -12
  365. package/src/editor/tsdoc.json +0 -4
  366. package/src/editor/vite-env.d.ts +0 -1
  367. package/src/lib/code/CodeCursor.ts +0 -445
  368. package/src/lib/code/CodeDiffer.ts +0 -78
  369. package/src/lib/code/CodeFragment.ts +0 -97
  370. package/src/lib/code/CodeHighlighter.ts +0 -75
  371. package/src/lib/code/CodeMetrics.ts +0 -47
  372. package/src/lib/code/CodeRange.test.ts +0 -74
  373. package/src/lib/code/CodeRange.ts +0 -216
  374. package/src/lib/code/CodeScope.ts +0 -101
  375. package/src/lib/code/CodeSelection.ts +0 -24
  376. package/src/lib/code/CodeSignal.ts +0 -327
  377. package/src/lib/code/CodeTokenizer.ts +0 -54
  378. package/src/lib/code/DefaultHighlightStyle.ts +0 -98
  379. package/src/lib/code/LezerHighlighter.ts +0 -113
  380. package/src/lib/code/diff.test.ts +0 -311
  381. package/src/lib/code/diff.ts +0 -319
  382. package/src/lib/code/extractRange.ts +0 -126
  383. package/src/lib/code/index.ts +0 -13
  384. package/src/lib/components/Audio.ts +0 -168
  385. package/src/lib/components/Bezier.ts +0 -105
  386. package/src/lib/components/Circle.ts +0 -266
  387. package/src/lib/components/Code.ts +0 -526
  388. package/src/lib/components/CodeBlock.ts +0 -576
  389. package/src/lib/components/CubicBezier.ts +0 -112
  390. package/src/lib/components/Curve.ts +0 -455
  391. package/src/lib/components/Grid.ts +0 -135
  392. package/src/lib/components/Icon.ts +0 -96
  393. package/src/lib/components/Img.ts +0 -319
  394. package/src/lib/components/Knot.ts +0 -157
  395. package/src/lib/components/Latex.ts +0 -122
  396. package/src/lib/components/Layout.ts +0 -1092
  397. package/src/lib/components/Line.ts +0 -429
  398. package/src/lib/components/Media.ts +0 -576
  399. package/src/lib/components/Node.ts +0 -1940
  400. package/src/lib/components/Path.ts +0 -137
  401. package/src/lib/components/Polygon.ts +0 -171
  402. package/src/lib/components/QuadBezier.ts +0 -100
  403. package/src/lib/components/Ray.ts +0 -125
  404. package/src/lib/components/Rect.ts +0 -187
  405. package/src/lib/components/Rive.ts +0 -156
  406. package/src/lib/components/SVG.ts +0 -797
  407. package/src/lib/components/Shape.ts +0 -143
  408. package/src/lib/components/Spline.ts +0 -344
  409. package/src/lib/components/Txt.test.tsx +0 -81
  410. package/src/lib/components/Txt.ts +0 -203
  411. package/src/lib/components/TxtLeaf.ts +0 -205
  412. package/src/lib/components/Video.ts +0 -461
  413. package/src/lib/components/View2D.ts +0 -98
  414. package/src/lib/components/__tests__/children.test.tsx +0 -142
  415. package/src/lib/components/__tests__/clone.test.tsx +0 -126
  416. package/src/lib/components/__tests__/generatorTest.ts +0 -28
  417. package/src/lib/components/__tests__/mockScene2D.ts +0 -45
  418. package/src/lib/components/__tests__/query.test.tsx +0 -122
  419. package/src/lib/components/__tests__/state.test.tsx +0 -60
  420. package/src/lib/components/index.ts +0 -28
  421. package/src/lib/components/types.ts +0 -35
  422. package/src/lib/curves/ArcSegment.ts +0 -159
  423. package/src/lib/curves/CircleSegment.ts +0 -77
  424. package/src/lib/curves/CubicBezierSegment.ts +0 -78
  425. package/src/lib/curves/CurveDrawingInfo.ts +0 -11
  426. package/src/lib/curves/CurvePoint.ts +0 -15
  427. package/src/lib/curves/CurveProfile.ts +0 -7
  428. package/src/lib/curves/KnotInfo.ts +0 -10
  429. package/src/lib/curves/LineSegment.ts +0 -62
  430. package/src/lib/curves/Polynomial.ts +0 -355
  431. package/src/lib/curves/Polynomial2D.ts +0 -62
  432. package/src/lib/curves/PolynomialSegment.ts +0 -124
  433. package/src/lib/curves/QuadBezierSegment.ts +0 -64
  434. package/src/lib/curves/Segment.ts +0 -17
  435. package/src/lib/curves/UniformPolynomialCurveSampler.ts +0 -94
  436. package/src/lib/curves/createCurveProfileLerp.ts +0 -471
  437. package/src/lib/curves/getBezierSplineProfile.ts +0 -223
  438. package/src/lib/curves/getCircleProfile.ts +0 -86
  439. package/src/lib/curves/getPathProfile.ts +0 -178
  440. package/src/lib/curves/getPointAtDistance.ts +0 -21
  441. package/src/lib/curves/getPolylineProfile.test.ts +0 -21
  442. package/src/lib/curves/getPolylineProfile.ts +0 -89
  443. package/src/lib/curves/getRectProfile.ts +0 -139
  444. package/src/lib/curves/index.ts +0 -16
  445. package/src/lib/decorators/canvasStyleSignal.ts +0 -16
  446. package/src/lib/decorators/colorSignal.ts +0 -9
  447. package/src/lib/decorators/compound.ts +0 -72
  448. package/src/lib/decorators/computed.ts +0 -18
  449. package/src/lib/decorators/defaultStyle.ts +0 -18
  450. package/src/lib/decorators/filtersSignal.ts +0 -136
  451. package/src/lib/decorators/index.ts +0 -10
  452. package/src/lib/decorators/initializers.ts +0 -32
  453. package/src/lib/decorators/nodeName.ts +0 -13
  454. package/src/lib/decorators/signal.test.ts +0 -90
  455. package/src/lib/decorators/signal.ts +0 -345
  456. package/src/lib/decorators/spacingSignal.ts +0 -15
  457. package/src/lib/decorators/vector2Signal.ts +0 -30
  458. package/src/lib/globals.d.ts +0 -2
  459. package/src/lib/index.ts +0 -8
  460. package/src/lib/jsx-dev-runtime.ts +0 -2
  461. package/src/lib/jsx-runtime.ts +0 -46
  462. package/src/lib/parse-svg-path.d.ts +0 -14
  463. package/src/lib/partials/Filter.ts +0 -180
  464. package/src/lib/partials/Gradient.ts +0 -102
  465. package/src/lib/partials/Pattern.ts +0 -34
  466. package/src/lib/partials/ShaderConfig.ts +0 -117
  467. package/src/lib/partials/index.ts +0 -4
  468. package/src/lib/partials/types.ts +0 -58
  469. package/src/lib/scenes/Scene2D.ts +0 -242
  470. package/src/lib/scenes/index.ts +0 -3
  471. package/src/lib/scenes/makeScene2D.ts +0 -16
  472. package/src/lib/scenes/useScene2D.ts +0 -6
  473. package/src/lib/tsconfig.build.json +0 -5
  474. package/src/lib/tsconfig.json +0 -10
  475. package/src/lib/tsdoc.json +0 -4
  476. package/src/lib/utils/CanvasUtils.ts +0 -306
  477. package/src/lib/utils/diff.test.ts +0 -453
  478. package/src/lib/utils/diff.ts +0 -148
  479. package/src/lib/utils/index.ts +0 -2
  480. package/src/lib/utils/is.ts +0 -11
  481. package/src/lib/utils/makeSignalExtensions.ts +0 -30
  482. package/src/lib/utils/video/declarations.d.ts +0 -1
  483. package/src/lib/utils/video/ffmpeg-client.ts +0 -50
  484. package/src/lib/utils/video/mp4-parser-manager.ts +0 -72
  485. package/src/lib/utils/video/parser/index.ts +0 -1
  486. package/src/lib/utils/video/parser/parser.ts +0 -257
  487. package/src/lib/utils/video/parser/sampler.ts +0 -72
  488. package/src/lib/utils/video/parser/segment.ts +0 -302
  489. package/src/lib/utils/video/parser/sink.ts +0 -29
  490. package/src/lib/utils/video/parser/utils.ts +0 -31
  491. package/src/tsconfig.base.json +0 -19
  492. package/src/tsconfig.build.json +0 -8
  493. package/src/tsconfig.json +0 -5
@@ -1,493 +0,0 @@
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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