@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
package/editor/index.js CHANGED
@@ -1,341 +1,555 @@
1
- import './index.css';
2
- import { useApplication, useCurrentScene, Pane, Separator, Group, Label, Button, findAndOpenFirstUserFile, UnknownField, AutoField, useViewportContext, useViewportMatrix, OverlayWrapper, MouseButton, Toggle, Collapse, usePanels, useReducedMotion, emphasize, Tab, AccountTree, makeEditorPlugin } from '@twick/ui';
3
- import { jsx, jsxs, Fragment } from 'preact/jsx-runtime';
4
- import { signal, computed, useSignalEffect, useComputed, useSignal } from '@preact/signals';
5
- import { SceneRenderEvent, Vector2, transformVectorAsPoint } from '@twick/core';
6
- import { createContext } from 'preact';
7
- import { useMemo, useContext, useRef, useEffect } from 'preact/hooks';
8
- import { NODE_NAME } from '@twick/2d';
1
+ // src/editor/index.ts
2
+ import { makeEditorPlugin } from "@twick/ui";
9
3
 
10
- const PluginContext = createContext(null);
11
- const NodeInspectorKey = '@twick/2d/node-inspector';
4
+ // src/editor/NodeInspectorConfig.tsx
5
+ import { useComputed } from "@preact/signals";
6
+ import {
7
+ AutoField,
8
+ Button,
9
+ Group,
10
+ Label,
11
+ Pane,
12
+ Separator,
13
+ UnknownField,
14
+ findAndOpenFirstUserFile,
15
+ useApplication as useApplication2
16
+ } from "@twick/ui";
17
+
18
+ // src/editor/Provider.tsx
19
+ import { computed, signal, useSignalEffect } from "@preact/signals";
20
+ import { SceneRenderEvent } from "@twick/core";
21
+ import { useApplication, useCurrentScene } from "@twick/ui";
22
+ import { createContext } from "preact";
23
+ import { useContext, useMemo } from "preact/hooks";
24
+ import { jsx } from "preact/jsx-runtime";
25
+ var PluginContext = createContext(null);
26
+ var NodeInspectorKey = "@twick/2d/node-inspector";
12
27
  function usePluginState() {
13
- return useContext(PluginContext);
28
+ return useContext(PluginContext);
14
29
  }
15
30
  function Provider({ children }) {
16
- const { inspection } = useApplication();
17
- const currentScene = useCurrentScene();
18
- const state = useMemo(() => {
19
- const scene = signal(currentScene);
20
- const selectedKey = signal(null);
21
- const afterRender = signal(0);
22
- const hoveredKey = signal(null);
23
- const openNodes = new Map();
24
- const selectedChain = computed(() => {
25
- const chain = new Set();
26
- const key = selectedKey.value;
27
- const selectedNode = scene.value?.getNode(key);
28
- if (selectedNode) {
29
- let node = selectedNode.parent() ?? null;
30
- while (node) {
31
- chain.add(node.key);
32
- node = node.parent();
33
- }
34
- }
35
- return chain;
36
- });
37
- return {
38
- selectedKey,
39
- hoveredKey,
40
- afterRender,
41
- openNodes,
42
- selectedChain,
43
- scene,
44
- };
45
- }, []);
46
- state.scene.value = currentScene;
47
- useSignalEffect(() => state.scene.value?.onRenderLifecycle.subscribe(([event]) => {
48
- if (event === SceneRenderEvent.AfterRender) {
49
- state.afterRender.value++;
50
- }
51
- }));
52
- useSignalEffect(() => {
53
- const { key, payload } = inspection.value;
54
- if (key === NodeInspectorKey) {
55
- state.selectedKey.value = payload;
56
- }
57
- });
58
- useSignalEffect(() => {
59
- const nodeKey = state.selectedKey.value;
60
- const { key, payload } = inspection.peek();
61
- if (key === NodeInspectorKey && !nodeKey) {
62
- inspection.value = { key: '', payload: null };
63
- }
64
- else if (payload !== nodeKey) {
65
- inspection.value = { key: NodeInspectorKey, payload: nodeKey };
31
+ const { inspection } = useApplication();
32
+ const currentScene = useCurrentScene();
33
+ const state = useMemo(() => {
34
+ const scene = signal(currentScene);
35
+ const selectedKey = signal(null);
36
+ const afterRender = signal(0);
37
+ const hoveredKey = signal(null);
38
+ const openNodes = /* @__PURE__ */ new Map();
39
+ const selectedChain = computed(() => {
40
+ const chain = /* @__PURE__ */ new Set();
41
+ const key = selectedKey.value;
42
+ const selectedNode = scene.value?.getNode(key);
43
+ if (selectedNode) {
44
+ let node = selectedNode.parent() ?? null;
45
+ while (node) {
46
+ chain.add(node.key);
47
+ node = node.parent();
66
48
  }
49
+ }
50
+ return chain;
67
51
  });
68
- return (jsx(PluginContext.Provider, { value: state, children: children }));
52
+ return {
53
+ selectedKey,
54
+ hoveredKey,
55
+ afterRender,
56
+ openNodes,
57
+ selectedChain,
58
+ scene
59
+ };
60
+ }, []);
61
+ state.scene.value = currentScene;
62
+ useSignalEffect(
63
+ () => state.scene.value?.onRenderLifecycle.subscribe(([event]) => {
64
+ if (event === SceneRenderEvent.AfterRender) {
65
+ state.afterRender.value++;
66
+ }
67
+ })
68
+ );
69
+ useSignalEffect(() => {
70
+ const { key, payload } = inspection.value;
71
+ if (key === NodeInspectorKey) {
72
+ state.selectedKey.value = payload;
73
+ }
74
+ });
75
+ useSignalEffect(() => {
76
+ const nodeKey = state.selectedKey.value;
77
+ const { key, payload } = inspection.peek();
78
+ if (key === NodeInspectorKey && !nodeKey) {
79
+ inspection.value = { key: "", payload: null };
80
+ } else if (payload !== nodeKey) {
81
+ inspection.value = { key: NodeInspectorKey, payload: nodeKey };
82
+ }
83
+ });
84
+ return /* @__PURE__ */ jsx(PluginContext.Provider, { value: state, children });
69
85
  }
70
86
 
71
- function Component$1() {
72
- const { inspection } = useApplication();
73
- const { scene, afterRender } = usePluginState();
74
- const node = useComputed(() => {
75
- afterRender.value;
76
- const { payload } = inspection.value;
77
- return scene.value?.getNode(payload);
78
- });
79
- const attributes = useComputed(() => {
80
- afterRender.value;
81
- const currentNode = node.value;
82
- const attributes = [];
83
- if (currentNode) {
84
- for (const { key, meta, signal } of currentNode) {
85
- if (!meta.inspectable)
86
- continue;
87
- attributes.push([key, signal()]);
88
- }
89
- }
90
- return attributes;
91
- });
92
- const stack = node.value?.creationStack;
93
- return (jsxs(Pane, { title: "Node Inspector", id: "node-inspector-pane", children: [jsx(Separator, { size: 1 }), stack && (jsxs(Group, { children: [jsx(Label, {}), jsx(Button, { onClick: () => findAndOpenFirstUserFile(stack), main: true, children: "GO TO SOURCE" })] })), jsxs(Group, { children: [jsx(Label, { children: "key" }), jsx(UnknownField, { value: inspection.value.payload })] }), !node.value && (jsxs(Group, { children: [jsx(Label, {}), "Couldn't find the node. It may have been deleted or doesn't exist yet."] })), attributes.value.map(([key, value]) => (jsxs(Group, { children: [jsx(Label, { children: key }), jsx(AutoField, { value: value })] }, key)))] }));
87
+ // src/editor/NodeInspectorConfig.tsx
88
+ import { jsx as jsx2, jsxs } from "preact/jsx-runtime";
89
+ function Component() {
90
+ const { inspection } = useApplication2();
91
+ const { scene, afterRender } = usePluginState();
92
+ const node = useComputed(() => {
93
+ afterRender.value;
94
+ const { payload } = inspection.value;
95
+ return scene.value?.getNode(payload);
96
+ });
97
+ const attributes = useComputed(() => {
98
+ afterRender.value;
99
+ const currentNode = node.value;
100
+ const attributes2 = [];
101
+ if (currentNode) {
102
+ for (const { key, meta, signal: signal2 } of currentNode) {
103
+ if (!meta.inspectable) continue;
104
+ attributes2.push([key, signal2()]);
105
+ }
106
+ }
107
+ return attributes2;
108
+ });
109
+ const stack = node.value?.creationStack;
110
+ return /* @__PURE__ */ jsxs(Pane, { title: "Node Inspector", id: "node-inspector-pane", children: [
111
+ /* @__PURE__ */ jsx2(Separator, { size: 1 }),
112
+ stack && /* @__PURE__ */ jsxs(Group, { children: [
113
+ /* @__PURE__ */ jsx2(Label, {}),
114
+ /* @__PURE__ */ jsx2(Button, { onClick: () => findAndOpenFirstUserFile(stack), main: true, children: "GO TO SOURCE" })
115
+ ] }),
116
+ /* @__PURE__ */ jsxs(Group, { children: [
117
+ /* @__PURE__ */ jsx2(Label, { children: "key" }),
118
+ /* @__PURE__ */ jsx2(UnknownField, { value: inspection.value.payload })
119
+ ] }),
120
+ !node.value && /* @__PURE__ */ jsxs(Group, { children: [
121
+ /* @__PURE__ */ jsx2(Label, {}),
122
+ "Couldn't find the node. It may have been deleted or doesn't exist yet."
123
+ ] }),
124
+ attributes.value.map(([key, value]) => /* @__PURE__ */ jsxs(Group, { children: [
125
+ /* @__PURE__ */ jsx2(Label, { children: key }),
126
+ /* @__PURE__ */ jsx2(AutoField, { value })
127
+ ] }, key))
128
+ ] });
94
129
  }
95
- const NodeInspectorConfig = {
96
- key: NodeInspectorKey,
97
- component: Component$1,
130
+ var NodeInspectorConfig = {
131
+ key: NodeInspectorKey,
132
+ component: Component
98
133
  };
99
134
 
100
- function Component({ children }) {
101
- const state = useViewportContext();
102
- const { scene, selectedKey } = usePluginState();
103
- const matrix = useViewportMatrix();
104
- return (jsx(OverlayWrapper, { onPointerDown: event => {
105
- if (event.button !== MouseButton.Left || event.shiftKey)
106
- return;
107
- if (!scene.value)
108
- return;
109
- event.stopPropagation();
110
- const diff = new Vector2(event.x - state.rect.x, event.y - state.rect.y);
111
- const position = transformVectorAsPoint(diff, matrix.inverse());
112
- selectedKey.value = scene.value.inspectPosition(position.x, position.y);
113
- }, children: children }));
135
+ // src/editor/PreviewOverlayConfig.tsx
136
+ import { transformVectorAsPoint, Vector2 } from "@twick/core";
137
+ import {
138
+ MouseButton,
139
+ OverlayWrapper,
140
+ useViewportContext,
141
+ useViewportMatrix
142
+ } from "@twick/ui";
143
+ import { jsx as jsx3 } from "preact/jsx-runtime";
144
+ function Component2({ children }) {
145
+ const state = useViewportContext();
146
+ const { scene, selectedKey } = usePluginState();
147
+ const matrix = useViewportMatrix();
148
+ return /* @__PURE__ */ jsx3(
149
+ OverlayWrapper,
150
+ {
151
+ onPointerDown: (event) => {
152
+ if (event.button !== MouseButton.Left || event.shiftKey) return;
153
+ if (!scene.value) return;
154
+ event.stopPropagation();
155
+ const diff = new Vector2(
156
+ event.x - state.rect.x,
157
+ event.y - state.rect.y
158
+ );
159
+ const position = transformVectorAsPoint(diff, matrix.inverse());
160
+ selectedKey.value = scene.value.inspectPosition(
161
+ position.x,
162
+ position.y
163
+ );
164
+ },
165
+ children
166
+ }
167
+ );
114
168
  }
115
169
  function drawHook() {
116
- const { selectedKey, hoveredKey, afterRender, scene } = usePluginState();
117
- selectedKey.value;
118
- hoveredKey.value;
119
- afterRender.value;
120
- return (ctx, matrix) => {
121
- const currentScene = scene.peek();
122
- if (!currentScene)
123
- return;
124
- let node = currentScene.getNode(selectedKey.value);
125
- if (node) {
126
- currentScene.drawOverlay(node.key, matrix, ctx);
127
- }
128
- node = currentScene.getNode(hoveredKey.value);
129
- if (node && hoveredKey.value !== selectedKey.value) {
130
- ctx.globalAlpha = 0.5;
131
- currentScene.drawOverlay(hoveredKey.value, matrix, ctx);
132
- }
133
- };
170
+ const { selectedKey, hoveredKey, afterRender, scene } = usePluginState();
171
+ selectedKey.value;
172
+ hoveredKey.value;
173
+ afterRender.value;
174
+ return (ctx, matrix) => {
175
+ const currentScene = scene.peek();
176
+ if (!currentScene) return;
177
+ let node = currentScene.getNode(selectedKey.value);
178
+ if (node) {
179
+ currentScene.drawOverlay(node.key, matrix, ctx);
180
+ }
181
+ node = currentScene.getNode(hoveredKey.value);
182
+ if (node && hoveredKey.value !== selectedKey.value) {
183
+ ctx.globalAlpha = 0.5;
184
+ currentScene.drawOverlay(hoveredKey.value, matrix, ctx);
185
+ }
186
+ };
134
187
  }
135
- const PreviewOverlayConfig = {
136
- drawHook,
137
- component: Component,
188
+ var PreviewOverlayConfig = {
189
+ drawHook,
190
+ component: Component2
138
191
  };
139
192
 
193
+ // src/editor/SceneGraphTabConfig.tsx
194
+ import {
195
+ AccountTree,
196
+ emphasize,
197
+ Pane as Pane2,
198
+ Tab,
199
+ useApplication as useApplication3,
200
+ usePanels,
201
+ useReducedMotion
202
+ } from "@twick/ui";
203
+ import { useSignalEffect as useSignalEffect4 } from "@preact/signals";
204
+ import { useEffect, useRef as useRef2 } from "preact/hooks";
205
+
206
+ // src/editor/tree/DetachedRoot.tsx
207
+ import { useSignal as useSignal2 } from "@preact/signals";
208
+
209
+ // src/editor/tree/NodeElement.tsx
210
+ import { useComputed as useComputed2, useSignal, useSignalEffect as useSignalEffect2 } from "@preact/signals";
211
+ import { NODE_NAME } from "@twick/2d";
212
+ import { useRef } from "preact/hooks";
213
+
214
+ // src/editor/icons/CircleIcon.tsx
215
+ import { jsx as jsx4 } from "preact/jsx-runtime";
140
216
  function CircleIcon() {
141
- return (jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: jsx("path", { d: "M10,5C12.76,5 15,7.24 15,10C15,12.76 12.76,15 10,15C7.24,15 5,12.76 5,10C5,7.24 7.24,5 10,5ZM10,7C8.344,7 7,8.344 7,10C7,11.656 8.344,13 10,13C11.656,13 13,11.656 13,10C13,8.344 11.656,7 10,7Z" }) }));
217
+ return /* @__PURE__ */ jsx4("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx4("path", { d: "M10,5C12.76,5 15,7.24 15,10C15,12.76 12.76,15 10,15C7.24,15 5,12.76 5,10C5,7.24 7.24,5 10,5ZM10,7C8.344,7 7,8.344 7,10C7,11.656 8.344,13 10,13C11.656,13 13,11.656 13,10C13,8.344 11.656,7 10,7Z" }) });
142
218
  }
143
219
 
220
+ // src/editor/icons/CodeBlockIcon.tsx
221
+ import { jsx as jsx5, jsxs as jsxs2 } from "preact/jsx-runtime";
144
222
  function CodeBlockIcon() {
145
- return (jsxs("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: [jsx("path", { d: "M5,9L5,6.999C5,6.469 5.211,5.96 5.585,5.586C5.96,5.211 6.469,5 6.999,5L9,5L9,7L6.999,7L7,9L7,11L7,13L8.985,13L9,15L7,15C5.895,15 5,14.105 5,13L5,11L4,11L4,9L5,9Z" }), jsx("path", { d: "M15,11L15,13.001C15,13.531 14.789,14.04 14.415,14.414C14.04,14.789 13.531,15 13.001,15L11,15L11,13L13,13L13,11L13,9L13,7L11.015,7L11,5L13,5C14.105,5 15,5.895 15,7L15,9L16,9L16,11L15,11Z" })] }));
223
+ return /* @__PURE__ */ jsxs2("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: [
224
+ /* @__PURE__ */ jsx5("path", { d: "M5,9L5,6.999C5,6.469 5.211,5.96 5.585,5.586C5.96,5.211 6.469,5 6.999,5L9,5L9,7L6.999,7L7,9L7,11L7,13L8.985,13L9,15L7,15C5.895,15 5,14.105 5,13L5,11L4,11L4,9L5,9Z" }),
225
+ /* @__PURE__ */ jsx5("path", { d: "M15,11L15,13.001C15,13.531 14.789,14.04 14.415,14.414C14.04,14.789 13.531,15 13.001,15L11,15L11,13L13,13L13,11L13,9L13,7L11.015,7L11,5L13,5C14.105,5 15,5.895 15,7L15,9L16,9L16,11L15,11Z" })
226
+ ] });
146
227
  }
147
228
 
229
+ // src/editor/icons/CurveIcon.tsx
230
+ import { jsx as jsx6 } from "preact/jsx-runtime";
148
231
  function CurveIcon() {
149
- return (jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: jsx("path", { d: "M12.19,6.47L13.595,5.047C15.519,6.947 15.187,8.932 14.229,9.951C13.675,10.541 12.879,10.861 12.016,10.767C11.261,10.685 10.426,10.278 9.708,9.348C9.292,8.809 8.878,8.441 8.471,8.249C8.217,8.13 7.979,8.084 7.77,8.154C7.565,8.222 7.409,8.394 7.287,8.621C7.097,8.975 7.001,9.444 7,10.003C6.996,11.584 7.848,12.746 8.91,12.946C9.535,13.064 10.185,12.783 10.687,12.082L12.313,13.247C11,15.079 9.118,15.344 7.581,14.591C6.161,13.896 4.994,12.246 5,9.997C5.005,7.945 5.963,6.649 7.136,6.257C8.281,5.874 9.866,6.278 11.292,8.126C11.81,8.799 12.421,8.954 12.772,8.581C13.196,8.13 13.042,7.312 12.19,6.47Z" }) }));
232
+ return /* @__PURE__ */ jsx6("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx6("path", { d: "M12.19,6.47L13.595,5.047C15.519,6.947 15.187,8.932 14.229,9.951C13.675,10.541 12.879,10.861 12.016,10.767C11.261,10.685 10.426,10.278 9.708,9.348C9.292,8.809 8.878,8.441 8.471,8.249C8.217,8.13 7.979,8.084 7.77,8.154C7.565,8.222 7.409,8.394 7.287,8.621C7.097,8.975 7.001,9.444 7,10.003C6.996,11.584 7.848,12.746 8.91,12.946C9.535,13.064 10.185,12.783 10.687,12.082L12.313,13.247C11,15.079 9.118,15.344 7.581,14.591C6.161,13.896 4.994,12.246 5,9.997C5.005,7.945 5.963,6.649 7.136,6.257C8.281,5.874 9.866,6.278 11.292,8.126C11.81,8.799 12.421,8.954 12.772,8.581C13.196,8.13 13.042,7.312 12.19,6.47Z" }) });
150
233
  }
151
234
 
235
+ // src/editor/icons/GridIcon.tsx
236
+ import { jsx as jsx7 } from "preact/jsx-runtime";
152
237
  function GridIcon() {
153
- return (jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: jsx("path", { d: "M6,8L4,8L4,6L6,6L6,4L8,4L8,6L12,6L12,4L14,4L14,6L16,6L16,8L14,8L14,12L16,12L16,14L14,14L14,16L12,16L12,14L8,14L8,16L6,16L6,14L4,14L4,12L6,12L6,8ZM8,12L12,12L12,8L8,8L8,12Z" }) }));
238
+ return /* @__PURE__ */ jsx7("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx7("path", { d: "M6,8L4,8L4,6L6,6L6,4L8,4L8,6L12,6L12,4L14,4L14,6L16,6L16,8L14,8L14,12L16,12L16,14L14,14L14,16L12,16L12,14L8,14L8,16L6,16L6,14L4,14L4,12L6,12L6,8ZM8,12L12,12L12,8L8,8L8,12Z" }) });
154
239
  }
155
240
 
241
+ // src/editor/icons/ImgIcon.tsx
242
+ import { jsx as jsx8, jsxs as jsxs3 } from "preact/jsx-runtime";
156
243
  function ImgIcon() {
157
- return (jsxs("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: [jsx("path", { d: "M5,15L15,15L15,10L13,8L8,13L5,10L5,15Z" }), jsx("circle", { cx: "8", cy: "7", r: "2" })] }));
244
+ return /* @__PURE__ */ jsxs3("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: [
245
+ /* @__PURE__ */ jsx8("path", { d: "M5,15L15,15L15,10L13,8L8,13L5,10L5,15Z" }),
246
+ /* @__PURE__ */ jsx8("circle", { cx: "8", cy: "7", r: "2" })
247
+ ] });
158
248
  }
159
249
 
250
+ // src/editor/icons/LayoutIcon.tsx
251
+ import { jsx as jsx9, jsxs as jsxs4 } from "preact/jsx-runtime";
160
252
  function LayoutIcon() {
161
- return (jsxs("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: [jsx("path", { d: "M14,5C14.552,5 15,5.448 15,6C15,7.916 15,12.084 15,14C15,14.552 14.552,15 14,15C12.815,15 11,15 11,15L11,5L14,5Z" }), jsx("path", { d: "M9,5L9,9L5,9L5,6C5,5.448 5.448,5 6,5L9,5Z" }), jsx("path", { d: "M9,11L9,15L6,15C5.448,15 5,14.552 5,14L5,11L9,11Z" })] }));
253
+ return /* @__PURE__ */ jsxs4("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: [
254
+ /* @__PURE__ */ jsx9("path", { d: "M14,5C14.552,5 15,5.448 15,6C15,7.916 15,12.084 15,14C15,14.552 14.552,15 14,15C12.815,15 11,15 11,15L11,5L14,5Z" }),
255
+ /* @__PURE__ */ jsx9("path", { d: "M9,5L9,9L5,9L5,6C5,5.448 5.448,5 6,5L9,5Z" }),
256
+ /* @__PURE__ */ jsx9("path", { d: "M9,11L9,15L6,15C5.448,15 5,14.552 5,14L5,11L9,11Z" })
257
+ ] });
162
258
  }
163
259
 
260
+ // src/editor/icons/LineIcon.tsx
261
+ import { jsx as jsx10 } from "preact/jsx-runtime";
164
262
  function LineIcon() {
165
- return (jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: jsx("path", { d: "M9.906,4.589L11.411,5.906L8.529,9.2L13.859,8.439C14.273,8.379 14.68,8.584 14.879,8.952C15.078,9.319 15.028,9.772 14.753,10.087L10.094,15.411L8.589,14.094L11.471,10.8L6.141,11.561C5.727,11.621 5.32,11.416 5.121,11.048C4.922,10.681 4.972,10.228 5.247,9.913L9.906,4.589Z" }) }));
263
+ return /* @__PURE__ */ jsx10("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx10("path", { d: "M9.906,4.589L11.411,5.906L8.529,9.2L13.859,8.439C14.273,8.379 14.68,8.584 14.879,8.952C15.078,9.319 15.028,9.772 14.753,10.087L10.094,15.411L8.589,14.094L11.471,10.8L6.141,11.561C5.727,11.621 5.32,11.416 5.121,11.048C4.922,10.681 4.972,10.228 5.247,9.913L9.906,4.589Z" }) });
166
264
  }
167
265
 
266
+ // src/editor/icons/NodeIcon.tsx
267
+ import { jsx as jsx11 } from "preact/jsx-runtime";
168
268
  function NodeIcon() {
169
- return (jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: jsx("path", { d: "M7,9L5,9L5,7L7,7L7,5L9,5L9,7L12,7L12,5L15,8L12,11L12,9L9,9L9,12L11,12L8,15L5,12L7,12L7,9Z" }) }));
269
+ return /* @__PURE__ */ jsx11("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx11("path", { d: "M7,9L5,9L5,7L7,7L7,5L9,5L9,7L12,7L12,5L15,8L12,11L12,9L9,9L9,12L11,12L8,15L5,12L7,12L7,9Z" }) });
170
270
  }
171
271
 
272
+ // src/editor/icons/RayIcon.tsx
273
+ import { jsx as jsx12 } from "preact/jsx-runtime";
172
274
  function RayIcon() {
173
- return (jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: jsx("path", { d: "M12,9.414L6.707,14.707L5.293,13.293L10.586,8L8,8L8,6L13,6C13.552,6 14,6.448 14,7L14,12L12,12L12,9.414Z" }) }));
275
+ return /* @__PURE__ */ jsx12("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx12("path", { d: "M12,9.414L6.707,14.707L5.293,13.293L10.586,8L8,8L8,6L13,6C13.552,6 14,6.448 14,7L14,12L12,12L12,9.414Z" }) });
174
276
  }
175
277
 
278
+ // src/editor/icons/RectIcon.tsx
279
+ import { jsx as jsx13 } from "preact/jsx-runtime";
176
280
  function RectIcon() {
177
- return (jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: jsx("path", { d: "M15,6L15,14C15,14.552 14.552,15 14,15L6,15C5.448,15 5,14.552 5,14L5,6C5,5.448 5.448,5 6,5L14,5C14.552,5 15,5.448 15,6ZM13,7L7,7L7,13L13,13L13,7Z" }) }));
281
+ return /* @__PURE__ */ jsx13("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx13("path", { d: "M15,6L15,14C15,14.552 14.552,15 14,15L6,15C5.448,15 5,14.552 5,14L5,6C5,5.448 5.448,5 6,5L14,5C14.552,5 15,5.448 15,6ZM13,7L7,7L7,13L13,13L13,7Z" }) });
178
282
  }
179
283
 
284
+ // src/editor/icons/ShapeIcon.tsx
285
+ import { jsx as jsx14 } from "preact/jsx-runtime";
180
286
  function ShapeIcon() {
181
- return (jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: jsx("path", { d: "M11.746,10.93C12.637,12.664 11.973,14.504 10.611,15.244C9.692,15.743 8.385,15.804 6.94,14.829C5.555,13.893 4.689,12.16 4.544,10.388C4.395,8.572 5,6.752 6.399,5.701C8.069,4.445 10.793,4.271 12.765,4.921C14.324,5.436 15.374,6.473 15.495,7.691C15.651,9.262 14.613,10.061 13.26,10.5C12.847,10.634 12.41,10.735 12.02,10.841C11.936,10.864 11.838,10.897 11.746,10.93ZM7.601,7.299C6.737,7.949 6.445,9.103 6.537,10.224C6.633,11.389 7.149,12.556 8.06,13.171C8.696,13.601 9.251,13.706 9.656,13.486C10.207,13.187 10.315,12.395 9.886,11.701C9.48,11.044 9.513,10.523 9.68,10.122C9.835,9.75 10.164,9.417 10.678,9.187C11.243,8.935 12.157,8.8 12.908,8.503C13.216,8.381 13.542,8.264 13.505,7.888C13.485,7.691 13.359,7.53 13.197,7.384C12.928,7.143 12.558,6.959 12.138,6.821C10.736,6.358 8.789,6.406 7.601,7.299Z" }) }));
287
+ return /* @__PURE__ */ jsx14("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx14("path", { d: "M11.746,10.93C12.637,12.664 11.973,14.504 10.611,15.244C9.692,15.743 8.385,15.804 6.94,14.829C5.555,13.893 4.689,12.16 4.544,10.388C4.395,8.572 5,6.752 6.399,5.701C8.069,4.445 10.793,4.271 12.765,4.921C14.324,5.436 15.374,6.473 15.495,7.691C15.651,9.262 14.613,10.061 13.26,10.5C12.847,10.634 12.41,10.735 12.02,10.841C11.936,10.864 11.838,10.897 11.746,10.93ZM7.601,7.299C6.737,7.949 6.445,9.103 6.537,10.224C6.633,11.389 7.149,12.556 8.06,13.171C8.696,13.601 9.251,13.706 9.656,13.486C10.207,13.187 10.315,12.395 9.886,11.701C9.48,11.044 9.513,10.523 9.68,10.122C9.835,9.75 10.164,9.417 10.678,9.187C11.243,8.935 12.157,8.8 12.908,8.503C13.216,8.381 13.542,8.264 13.505,7.888C13.485,7.691 13.359,7.53 13.197,7.384C12.928,7.143 12.558,6.959 12.138,6.821C10.736,6.358 8.789,6.406 7.601,7.299Z" }) });
182
288
  }
183
289
 
290
+ // src/editor/icons/TxtIcon.tsx
291
+ import { jsx as jsx15, jsxs as jsxs5 } from "preact/jsx-runtime";
184
292
  function TxtIcon() {
185
- return (jsxs("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: [jsx("path", { d: "M9,13L9,6L11,6L11,13L12,13L12,15L8,15L8,13L9,13Z" }), jsx("path", { d: "M7,8L5,8L5,6C5,5.448 5.448,5 6,5L14,5C14.552,5 15,5.448 15,6L15,8L13,8L13,7L7,7L7,8Z" })] }));
293
+ return /* @__PURE__ */ jsxs5("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: [
294
+ /* @__PURE__ */ jsx15("path", { d: "M9,13L9,6L11,6L11,13L12,13L12,15L8,15L8,13L9,13Z" }),
295
+ /* @__PURE__ */ jsx15("path", { d: "M7,8L5,8L5,6C5,5.448 5.448,5 6,5L14,5C14.552,5 15,5.448 15,6L15,8L13,8L13,7L7,7L7,8Z" })
296
+ ] });
186
297
  }
187
298
 
299
+ // src/editor/icons/VideoIcon.tsx
300
+ import { jsx as jsx16 } from "preact/jsx-runtime";
188
301
  function VideoIcon() {
189
- return (jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: jsx("path", { d: "M14,10.866L7.25,14.763C6.941,14.942 6.559,14.942 6.25,14.763C5.941,14.585 5.75,14.254 5.75,13.897L5.75,6.103C5.75,5.746 5.941,5.415 6.25,5.237C6.559,5.058 6.941,5.058 7.25,5.237L14,9.134C14.309,9.313 14.5,9.643 14.5,10C14.5,10.357 14.309,10.687 14,10.866ZM11.5,10L7.75,7.835L7.75,12.165L11.5,10Z" }) }));
302
+ return /* @__PURE__ */ jsx16("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx16("path", { d: "M14,10.866L7.25,14.763C6.941,14.942 6.559,14.942 6.25,14.763C5.941,14.585 5.75,14.254 5.75,13.897L5.75,6.103C5.75,5.746 5.941,5.415 6.25,5.237C6.559,5.058 6.941,5.058 7.25,5.237L14,9.134C14.309,9.313 14.5,9.643 14.5,10C14.5,10.357 14.309,10.687 14,10.866ZM11.5,10L7.75,7.835L7.75,12.165L11.5,10Z" }) });
190
303
  }
191
304
 
305
+ // src/editor/icons/View2DIcon.tsx
306
+ import { jsx as jsx17, jsxs as jsxs6 } from "preact/jsx-runtime";
192
307
  function View2DIcon() {
193
- return (jsxs("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: [jsx("path", { d: "M9,5L9,7L7,7L7,9L5,9L5,6C5,5.448 5.448,5 6,5L9,5Z" }), jsx("path", { d: "M5,11L7,11L7,13L9,13L9,15L6,15C5.448,15 5,14.552 5,14L5,11Z" }), jsx("path", { d: "M11,15L11,13L13,13L13,11L15,11L15,14C15,14.552 14.552,15 14,15L11,15Z" }), jsx("path", { d: "M15,9L13,9L13,7L11,7L11,5L14,5C14.552,5 15,5.448 15,6L15,9Z" })] }));
308
+ return /* @__PURE__ */ jsxs6("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: [
309
+ /* @__PURE__ */ jsx17("path", { d: "M9,5L9,7L7,7L7,9L5,9L5,6C5,5.448 5.448,5 6,5L9,5Z" }),
310
+ /* @__PURE__ */ jsx17("path", { d: "M5,11L7,11L7,13L9,13L9,15L6,15C5.448,15 5,14.552 5,14L5,11Z" }),
311
+ /* @__PURE__ */ jsx17("path", { d: "M11,15L11,13L13,13L13,11L15,11L15,14C15,14.552 14.552,15 14,15L11,15Z" }),
312
+ /* @__PURE__ */ jsx17("path", { d: "M15,9L13,9L13,7L11,7L11,5L14,5C14.552,5 15,5.448 15,6L15,9Z" })
313
+ ] });
194
314
  }
195
315
 
196
- /* eslint-disable @typescript-eslint/naming-convention */
197
- const IconMap = {
198
- Circle: CircleIcon,
199
- CodeBlock: CodeBlockIcon,
200
- Curve: CurveIcon,
201
- Grid: GridIcon,
202
- Img: ImgIcon,
203
- Layout: LayoutIcon,
204
- Line: LineIcon,
205
- Node: NodeIcon,
206
- Ray: RayIcon,
207
- Rect: RectIcon,
208
- Shape: ShapeIcon,
209
- Txt: TxtIcon,
210
- TxtLeaf: TxtIcon,
211
- Video: VideoIcon,
212
- View2D: View2DIcon,
316
+ // src/editor/icons/IconMap.ts
317
+ var IconMap = {
318
+ Circle: CircleIcon,
319
+ CodeBlock: CodeBlockIcon,
320
+ Curve: CurveIcon,
321
+ Grid: GridIcon,
322
+ Img: ImgIcon,
323
+ Layout: LayoutIcon,
324
+ Line: LineIcon,
325
+ Node: NodeIcon,
326
+ Ray: RayIcon,
327
+ Rect: RectIcon,
328
+ Shape: ShapeIcon,
329
+ Txt: TxtIcon,
330
+ TxtLeaf: TxtIcon,
331
+ Video: VideoIcon,
332
+ View2D: View2DIcon
213
333
  };
214
334
 
215
- function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
335
+ // src/editor/tree/TreeElement.tsx
336
+ import { Collapse, Toggle } from "@twick/ui";
337
+ import { clsx } from "clsx";
216
338
 
217
- var styles = {"root":"index-module_root__omEd0","label":"index-module_label__9BJvW","active":"index-module_active__KevXv","parent":"index-module_parent__5nc9I"};
339
+ // src/editor/tree/index.module.scss
340
+ var index_module_default = {};
218
341
 
219
- const DEPTH_VAR = '--depth';
220
- function TreeElement({ label, children, selected, depth = 0, open, icon, forwardRef, ...props }) {
221
- const hasChildren = !!children;
222
- return (jsxs(Fragment, { children: [jsxs("div", { ref: forwardRef, className: clsx(styles.label, selected && styles.active, hasChildren && styles.parent), onDblClick: () => {
223
- if (hasChildren) {
224
- open.value = !open.value;
225
- }
226
- }, ...props, style: { [DEPTH_VAR]: `${depth}` }, children: [hasChildren && (jsx(Toggle, { animated: false, open: open.value, onToggle: value => {
227
- open.value = value;
228
- }, onDblClick: e => {
229
- e.stopPropagation();
230
- } })), icon, label] }), hasChildren && (jsx(Collapse, { open: open.value, animated: false, children: children }))] }));
342
+ // src/editor/tree/TreeElement.tsx
343
+ import { Fragment, jsx as jsx18, jsxs as jsxs7 } from "preact/jsx-runtime";
344
+ var DEPTH_VAR = "--depth";
345
+ function TreeElement({
346
+ label,
347
+ children,
348
+ selected,
349
+ depth = 0,
350
+ open,
351
+ icon,
352
+ forwardRef,
353
+ ...props
354
+ }) {
355
+ const hasChildren = !!children;
356
+ return /* @__PURE__ */ jsxs7(Fragment, { children: [
357
+ /* @__PURE__ */ jsxs7(
358
+ "div",
359
+ {
360
+ ref: forwardRef,
361
+ className: clsx(
362
+ index_module_default.label,
363
+ selected && index_module_default.active,
364
+ hasChildren && index_module_default.parent
365
+ ),
366
+ onDblClick: () => {
367
+ if (hasChildren) {
368
+ open.value = !open.value;
369
+ }
370
+ },
371
+ ...props,
372
+ style: { [DEPTH_VAR]: `${depth}` },
373
+ children: [
374
+ hasChildren && /* @__PURE__ */ jsx18(
375
+ Toggle,
376
+ {
377
+ animated: false,
378
+ open: open.value,
379
+ onToggle: (value) => {
380
+ open.value = value;
381
+ },
382
+ onDblClick: (e) => {
383
+ e.stopPropagation();
384
+ }
385
+ }
386
+ ),
387
+ icon,
388
+ label
389
+ ]
390
+ }
391
+ ),
392
+ hasChildren && /* @__PURE__ */ jsx18(Collapse, { open: open.value, animated: false, children })
393
+ ] });
231
394
  }
232
395
 
396
+ // src/editor/tree/NodeElement.tsx
397
+ import { jsx as jsx19 } from "preact/jsx-runtime";
233
398
  function NodeElement({ node, depth = 0 }) {
234
- const { selectedKey, hoveredKey, openNodes, selectedChain, afterRender } = usePluginState();
235
- const ref = useRef(null);
236
- const open = useSignal(selectedChain.peek().has(node.key) || (openNodes.get(node.key) ?? false));
237
- const nodeSignal = useSignal(node);
238
- nodeSignal.value = node;
239
- const children = useComputed(() => {
240
- afterRender.value;
241
- return nodeSignal.value.peekChildren();
242
- });
243
- useSignalEffect(() => {
244
- open.value = openNodes.get(nodeSignal.value.key) ?? false;
245
- });
246
- useSignalEffect(() => {
247
- const chain = selectedChain.value;
248
- if (chain.has(nodeSignal.value.key)) {
249
- open.value = true;
250
- }
251
- });
252
- useSignalEffect(() => {
253
- openNodes.set(nodeSignal.value.key, open.value);
254
- });
255
- useSignalEffect(() => {
256
- const key = selectedKey.value;
257
- if (node.key === key) {
258
- ref.current?.scrollIntoView({ block: 'nearest', behavior: 'instant' });
259
- }
260
- });
261
- const Icon = IconMap[node[NODE_NAME]] ?? IconMap.Node;
262
- return (jsx(TreeElement, { forwardRef: ref, open: open, depth: depth, icon: jsx(Icon, {}), label: node.key, selected: selectedKey.value === node.key, onClick: event => {
263
- selectedKey.value = node.key;
264
- event.stopPropagation();
265
- }, onPointerEnter: () => (hoveredKey.value = node.key), onPointerLeave: () => (hoveredKey.value = null), children: children.value.length > 0 &&
266
- children.value.map(child => (jsx(NodeElement, { node: child, depth: depth + 1 }))) }));
399
+ const { selectedKey, hoveredKey, openNodes, selectedChain, afterRender } = usePluginState();
400
+ const ref = useRef(null);
401
+ const open = useSignal(
402
+ selectedChain.peek().has(node.key) || (openNodes.get(node.key) ?? false)
403
+ );
404
+ const nodeSignal = useSignal(node);
405
+ nodeSignal.value = node;
406
+ const children = useComputed2(() => {
407
+ afterRender.value;
408
+ return nodeSignal.value.peekChildren();
409
+ });
410
+ useSignalEffect2(() => {
411
+ open.value = openNodes.get(nodeSignal.value.key) ?? false;
412
+ });
413
+ useSignalEffect2(() => {
414
+ const chain = selectedChain.value;
415
+ if (chain.has(nodeSignal.value.key)) {
416
+ open.value = true;
417
+ }
418
+ });
419
+ useSignalEffect2(() => {
420
+ openNodes.set(nodeSignal.value.key, open.value);
421
+ });
422
+ useSignalEffect2(() => {
423
+ const key = selectedKey.value;
424
+ if (node.key === key) {
425
+ ref.current?.scrollIntoView({ block: "nearest", behavior: "instant" });
426
+ }
427
+ });
428
+ const Icon = IconMap[node[NODE_NAME]] ?? IconMap.Node;
429
+ return /* @__PURE__ */ jsx19(
430
+ TreeElement,
431
+ {
432
+ forwardRef: ref,
433
+ open,
434
+ depth,
435
+ icon: /* @__PURE__ */ jsx19(Icon, {}),
436
+ label: node.key,
437
+ selected: selectedKey.value === node.key,
438
+ onClick: (event) => {
439
+ selectedKey.value = node.key;
440
+ event.stopPropagation();
441
+ },
442
+ onPointerEnter: () => hoveredKey.value = node.key,
443
+ onPointerLeave: () => hoveredKey.value = null,
444
+ children: children.value.length > 0 && children.value.map((child) => /* @__PURE__ */ jsx19(NodeElement, { node: child, depth: depth + 1 }))
445
+ }
446
+ );
267
447
  }
268
448
 
269
- function TreeRoot({ className, ...props }) {
270
- return jsx("div", { className: clsx(styles.root, className), ...props });
449
+ // src/editor/tree/TreeRoot.tsx
450
+ import { clsx as clsx2 } from "clsx";
451
+ import { jsx as jsx20 } from "preact/jsx-runtime";
452
+ function TreeRoot({
453
+ className,
454
+ ...props
455
+ }) {
456
+ return /* @__PURE__ */ jsx20("div", { className: clsx2(index_module_default.root, className), ...props });
271
457
  }
272
458
 
459
+ // src/editor/tree/DetachedRoot.tsx
460
+ import { jsx as jsx21 } from "preact/jsx-runtime";
273
461
  function DetachedRoot() {
274
- const { afterRender, scene } = usePluginState();
275
- const open = useSignal(false);
276
- const currentScene = scene.value;
277
- const children = currentScene ? [...currentScene.getDetachedNodes()] : [];
278
- afterRender.value;
279
- return children.length > 0 ? (jsx(TreeRoot, { children: jsx(TreeElement, { open: open, label: "Detached nodes", children: children.map(child => (jsx(NodeElement, { node: child, depth: 1 }))) }) })) : null;
462
+ const { afterRender, scene } = usePluginState();
463
+ const open = useSignal2(false);
464
+ const currentScene = scene.value;
465
+ const children = currentScene ? [...currentScene.getDetachedNodes()] : [];
466
+ afterRender.value;
467
+ return children.length > 0 ? /* @__PURE__ */ jsx21(TreeRoot, { children: /* @__PURE__ */ jsx21(TreeElement, { open, label: "Detached nodes", children: children.map((child) => /* @__PURE__ */ jsx21(NodeElement, { node: child, depth: 1 })) }) }) : null;
280
468
  }
281
469
 
470
+ // src/editor/tree/ViewRoot.tsx
471
+ import { useSignal as useSignal3, useSignalEffect as useSignalEffect3 } from "@preact/signals";
472
+ import { jsx as jsx22 } from "preact/jsx-runtime";
282
473
  function ViewRoot() {
283
- const { scene } = usePluginState();
284
- const view = useSignal(scene.value?.getView());
285
- useSignalEffect(() => {
286
- view.value = scene.value?.getView();
287
- return scene.value?.onReset.subscribe(() => {
288
- view.value = scene.value?.getView();
289
- });
474
+ const { scene } = usePluginState();
475
+ const view = useSignal3(scene.value?.getView());
476
+ useSignalEffect3(() => {
477
+ view.value = scene.value?.getView();
478
+ return scene.value?.onReset.subscribe(() => {
479
+ view.value = scene.value?.getView();
290
480
  });
291
- return view.value ? (jsx(TreeRoot, { children: jsx(NodeElement, { node: view.value }) })) : null;
481
+ });
482
+ return view.value ? /* @__PURE__ */ jsx22(TreeRoot, { children: /* @__PURE__ */ jsx22(NodeElement, { node: view.value }) }) : null;
292
483
  }
293
484
 
485
+ // src/editor/SceneGraphTabConfig.tsx
486
+ import { jsx as jsx23, jsxs as jsxs8 } from "preact/jsx-runtime";
294
487
  function TabComponent({ tab }) {
295
- const { sidebar } = usePanels();
296
- const inspectorTab = useRef(null);
297
- const reducedMotion = useReducedMotion();
298
- const { selectedKey } = usePluginState();
299
- const { logger } = useApplication();
300
- useEffect(() => logger.onInspected.subscribe(key => {
301
- sidebar.set(tab);
302
- selectedKey.value = key;
303
- }), [tab]);
304
- useSignalEffect(() => {
305
- if (selectedKey.value &&
306
- sidebar.current.peek() !== tab &&
307
- !reducedMotion &&
308
- inspectorTab.current &&
309
- inspectorTab.current.getAnimations().length < 2) {
310
- inspectorTab.current.animate(emphasize(), { duration: 400 });
311
- inspectorTab.current.animate([{ color: 'white' }, { color: '' }], {
312
- duration: 800,
313
- });
314
- }
315
- });
316
- return (jsx(Tab, { forwardRef: inspectorTab, title: "Scene Graph", id: "scene-graph-tab", tab: tab, children: jsx(AccountTree, {}) }));
488
+ const { sidebar } = usePanels();
489
+ const inspectorTab = useRef2(null);
490
+ const reducedMotion = useReducedMotion();
491
+ const { selectedKey } = usePluginState();
492
+ const { logger } = useApplication3();
493
+ useEffect(
494
+ () => logger.onInspected.subscribe((key) => {
495
+ sidebar.set(tab);
496
+ selectedKey.value = key;
497
+ }),
498
+ [tab]
499
+ );
500
+ useSignalEffect4(() => {
501
+ if (selectedKey.value && sidebar.current.peek() !== tab && !reducedMotion && inspectorTab.current && inspectorTab.current.getAnimations().length < 2) {
502
+ inspectorTab.current.animate(emphasize(), { duration: 400 });
503
+ inspectorTab.current.animate([{ color: "white" }, { color: "" }], {
504
+ duration: 800
505
+ });
506
+ }
507
+ });
508
+ return /* @__PURE__ */ jsx23(
509
+ Tab,
510
+ {
511
+ forwardRef: inspectorTab,
512
+ title: "Scene Graph",
513
+ id: "scene-graph-tab",
514
+ tab,
515
+ children: /* @__PURE__ */ jsx23(AccountTree, {})
516
+ }
517
+ );
317
518
  }
318
519
  function PaneComponent() {
319
- const { selectedKey } = usePluginState();
320
- return (jsxs(Pane, { title: "Scene Graph", id: "scene-graph-pane", onClick: () => {
321
- selectedKey.value = null;
322
- }, children: [jsx(ViewRoot, {}), jsx(DetachedRoot, {})] }));
520
+ const { selectedKey } = usePluginState();
521
+ return /* @__PURE__ */ jsxs8(
522
+ Pane2,
523
+ {
524
+ title: "Scene Graph",
525
+ id: "scene-graph-pane",
526
+ onClick: () => {
527
+ selectedKey.value = null;
528
+ },
529
+ children: [
530
+ /* @__PURE__ */ jsx23(ViewRoot, {}),
531
+ /* @__PURE__ */ jsx23(DetachedRoot, {})
532
+ ]
533
+ }
534
+ );
323
535
  }
324
- const SceneGraphTabConfig = {
325
- name: 'scene-graph',
326
- tabComponent: TabComponent,
327
- paneComponent: PaneComponent,
536
+ var SceneGraphTabConfig = {
537
+ name: "scene-graph",
538
+ tabComponent: TabComponent,
539
+ paneComponent: PaneComponent
328
540
  };
329
541
 
330
- var index = makeEditorPlugin(() => {
331
- return {
332
- name: '@twick/2d',
333
- provider: Provider,
334
- previewOverlay: PreviewOverlayConfig,
335
- tabs: [SceneGraphTabConfig],
336
- inspectors: [NodeInspectorConfig],
337
- };
542
+ // src/editor/index.ts
543
+ var index_default = makeEditorPlugin(() => {
544
+ return {
545
+ name: "@twick/2d",
546
+ provider: Provider,
547
+ previewOverlay: PreviewOverlayConfig,
548
+ tabs: [SceneGraphTabConfig],
549
+ inspectors: [NodeInspectorConfig]
550
+ };
338
551
  });
339
-
340
- export { index as default };
341
- //# sourceMappingURL=index.js.map
552
+ export {
553
+ index_default as default
554
+ };
555
+ //# sourceMappingURL=index.js.map