@smoove/core 0.1.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 (307) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/dist/animation/color.d.ts +9 -0
  4. package/dist/animation/color.d.ts.map +1 -0
  5. package/dist/animation/color.js +224 -0
  6. package/dist/animation/color.js.map +1 -0
  7. package/dist/animation/easing.d.ts +22 -0
  8. package/dist/animation/easing.d.ts.map +1 -0
  9. package/dist/animation/easing.js +59 -0
  10. package/dist/animation/easing.js.map +1 -0
  11. package/dist/animation/interpolate-colors.d.ts +7 -0
  12. package/dist/animation/interpolate-colors.d.ts.map +1 -0
  13. package/dist/animation/interpolate-colors.js +19 -0
  14. package/dist/animation/interpolate-colors.js.map +1 -0
  15. package/dist/animation/interpolate.d.ts +12 -0
  16. package/dist/animation/interpolate.d.ts.map +1 -0
  17. package/dist/animation/interpolate.js +65 -0
  18. package/dist/animation/interpolate.js.map +1 -0
  19. package/dist/audio/asset.d.ts +21 -0
  20. package/dist/audio/asset.d.ts.map +1 -0
  21. package/dist/audio/asset.js +2 -0
  22. package/dist/audio/asset.js.map +1 -0
  23. package/dist/audio/audio-driver.d.ts +34 -0
  24. package/dist/audio/audio-driver.d.ts.map +1 -0
  25. package/dist/audio/audio-driver.js +2 -0
  26. package/dist/audio/audio-driver.js.map +1 -0
  27. package/dist/audio/audio-for-preview.d.ts +12 -0
  28. package/dist/audio/audio-for-preview.d.ts.map +1 -0
  29. package/dist/audio/audio-for-preview.js +70 -0
  30. package/dist/audio/audio-for-preview.js.map +1 -0
  31. package/dist/audio/audio-for-rendering.d.ts +16 -0
  32. package/dist/audio/audio-for-rendering.d.ts.map +1 -0
  33. package/dist/audio/audio-for-rendering.js +32 -0
  34. package/dist/audio/audio-for-rendering.js.map +1 -0
  35. package/dist/audio/audio-source-browser.d.ts +30 -0
  36. package/dist/audio/audio-source-browser.d.ts.map +1 -0
  37. package/dist/audio/audio-source-browser.js +139 -0
  38. package/dist/audio/audio-source-browser.js.map +1 -0
  39. package/dist/audio/audio-source.d.ts +38 -0
  40. package/dist/audio/audio-source.d.ts.map +1 -0
  41. package/dist/audio/audio-source.js +2 -0
  42. package/dist/audio/audio-source.js.map +1 -0
  43. package/dist/audio/index.d.ts +45 -0
  44. package/dist/audio/index.d.ts.map +1 -0
  45. package/dist/audio/index.js +143 -0
  46. package/dist/audio/index.js.map +1 -0
  47. package/dist/audio/mixer.d.ts +43 -0
  48. package/dist/audio/mixer.d.ts.map +1 -0
  49. package/dist/audio/mixer.js +51 -0
  50. package/dist/audio/mixer.js.map +1 -0
  51. package/dist/audio/types.d.ts +31 -0
  52. package/dist/audio/types.d.ts.map +1 -0
  53. package/dist/audio/types.js +2 -0
  54. package/dist/audio/types.js.map +1 -0
  55. package/dist/block.d.ts +16 -0
  56. package/dist/block.d.ts.map +1 -0
  57. package/dist/block.js +173 -0
  58. package/dist/block.js.map +1 -0
  59. package/dist/composition.d.ts.map +1 -0
  60. package/dist/composition.js.map +1 -0
  61. package/dist/easing.d.ts +22 -0
  62. package/dist/easing.d.ts.map +1 -0
  63. package/dist/easing.js +59 -0
  64. package/dist/easing.js.map +1 -0
  65. package/dist/emitter.d.ts +7 -0
  66. package/dist/emitter.d.ts.map +1 -0
  67. package/dist/emitter.js +29 -0
  68. package/dist/emitter.js.map +1 -0
  69. package/dist/engine/composition.d.ts +182 -0
  70. package/dist/engine/composition.d.ts.map +1 -0
  71. package/dist/engine/composition.js +527 -0
  72. package/dist/engine/composition.js.map +1 -0
  73. package/dist/engine/emitter.d.ts +7 -0
  74. package/dist/engine/emitter.d.ts.map +1 -0
  75. package/dist/engine/emitter.js +29 -0
  76. package/dist/engine/emitter.js.map +1 -0
  77. package/dist/engine/environment.d.ts +30 -0
  78. package/dist/engine/environment.d.ts.map +1 -0
  79. package/dist/engine/environment.js +27 -0
  80. package/dist/engine/environment.js.map +1 -0
  81. package/dist/engine/offsets.d.ts +39 -0
  82. package/dist/engine/offsets.d.ts.map +1 -0
  83. package/dist/engine/offsets.js +54 -0
  84. package/dist/engine/offsets.js.map +1 -0
  85. package/dist/engine/runtime-defaults.d.ts +50 -0
  86. package/dist/engine/runtime-defaults.d.ts.map +1 -0
  87. package/dist/engine/runtime-defaults.js +77 -0
  88. package/dist/engine/runtime-defaults.js.map +1 -0
  89. package/dist/engine/sequence.d.ts +44 -0
  90. package/dist/engine/sequence.d.ts.map +1 -0
  91. package/dist/engine/sequence.js +101 -0
  92. package/dist/engine/sequence.js.map +1 -0
  93. package/dist/engine/series.d.ts +40 -0
  94. package/dist/engine/series.d.ts.map +1 -0
  95. package/dist/engine/series.js +58 -0
  96. package/dist/engine/series.js.map +1 -0
  97. package/dist/engine/signal.d.ts +10 -0
  98. package/dist/engine/signal.d.ts.map +1 -0
  99. package/dist/engine/signal.js +39 -0
  100. package/dist/engine/signal.js.map +1 -0
  101. package/dist/environment.d.ts.map +1 -0
  102. package/dist/environment.js.map +1 -0
  103. package/dist/flex-engine.d.ts +31 -0
  104. package/dist/flex-engine.d.ts.map +1 -0
  105. package/dist/flex-engine.js +186 -0
  106. package/dist/flex-engine.js.map +1 -0
  107. package/dist/flex-types.d.ts +165 -0
  108. package/dist/flex-types.d.ts.map +1 -0
  109. package/dist/flex-types.js +2 -0
  110. package/dist/flex-types.js.map +1 -0
  111. package/dist/flex.d.ts +26 -0
  112. package/dist/flex.d.ts.map +1 -0
  113. package/dist/flex.js +179 -0
  114. package/dist/flex.js.map +1 -0
  115. package/dist/image.d.ts +10 -0
  116. package/dist/image.d.ts.map +1 -0
  117. package/dist/image.js +156 -0
  118. package/dist/image.js.map +1 -0
  119. package/dist/index.d.ts +34 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +28 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/interpolate-colors.d.ts +7 -0
  124. package/dist/interpolate-colors.d.ts.map +1 -0
  125. package/dist/interpolate-colors.js +240 -0
  126. package/dist/interpolate-colors.js.map +1 -0
  127. package/dist/interpolate.d.ts +12 -0
  128. package/dist/interpolate.d.ts.map +1 -0
  129. package/dist/interpolate.js +65 -0
  130. package/dist/interpolate.js.map +1 -0
  131. package/dist/layout/block.d.ts +54 -0
  132. package/dist/layout/block.d.ts.map +1 -0
  133. package/dist/layout/block.js +186 -0
  134. package/dist/layout/block.js.map +1 -0
  135. package/dist/layout/contract.d.ts +41 -0
  136. package/dist/layout/contract.d.ts.map +1 -0
  137. package/dist/layout/contract.js +8 -0
  138. package/dist/layout/contract.js.map +1 -0
  139. package/dist/layout/flex/engine.d.ts +31 -0
  140. package/dist/layout/flex/engine.d.ts.map +1 -0
  141. package/dist/layout/flex/engine.js +186 -0
  142. package/dist/layout/flex/engine.js.map +1 -0
  143. package/dist/layout/flex/flex.d.ts +31 -0
  144. package/dist/layout/flex/flex.d.ts.map +1 -0
  145. package/dist/layout/flex/flex.js +175 -0
  146. package/dist/layout/flex/flex.js.map +1 -0
  147. package/dist/layout/flex/mixin.d.ts +52 -0
  148. package/dist/layout/flex/mixin.d.ts.map +1 -0
  149. package/dist/layout/flex/mixin.js +114 -0
  150. package/dist/layout/flex/mixin.js.map +1 -0
  151. package/dist/layout/flex/types.d.ts +31 -0
  152. package/dist/layout/flex/types.d.ts.map +1 -0
  153. package/dist/layout/flex/types.js +2 -0
  154. package/dist/layout/flex/types.js.map +1 -0
  155. package/dist/layout/image.d.ts +46 -0
  156. package/dist/layout/image.d.ts.map +1 -0
  157. package/dist/layout/image.js +198 -0
  158. package/dist/layout/image.js.map +1 -0
  159. package/dist/layout/shapes.d.ts +72 -0
  160. package/dist/layout/shapes.d.ts.map +1 -0
  161. package/dist/layout/shapes.js +29 -0
  162. package/dist/layout/shapes.js.map +1 -0
  163. package/dist/layout/text/font.d.ts +92 -0
  164. package/dist/layout/text/font.d.ts.map +1 -0
  165. package/dist/layout/text/font.js +166 -0
  166. package/dist/layout/text/font.js.map +1 -0
  167. package/dist/layout/text/geometry.d.ts +31 -0
  168. package/dist/layout/text/geometry.d.ts.map +1 -0
  169. package/dist/layout/text/geometry.js +81 -0
  170. package/dist/layout/text/geometry.js.map +1 -0
  171. package/dist/layout/text/text.d.ts +98 -0
  172. package/dist/layout/text/text.d.ts.map +1 -0
  173. package/dist/layout/text/text.js +676 -0
  174. package/dist/layout/text/text.js.map +1 -0
  175. package/dist/layout/text/types.d.ts +103 -0
  176. package/dist/layout/text/types.d.ts.map +1 -0
  177. package/dist/layout/text/types.js +2 -0
  178. package/dist/layout/text/types.js.map +1 -0
  179. package/dist/media/audio/asset.d.ts +21 -0
  180. package/dist/media/audio/asset.d.ts.map +1 -0
  181. package/dist/media/audio/asset.js +2 -0
  182. package/dist/media/audio/asset.js.map +1 -0
  183. package/dist/media/audio/audio-driver.d.ts +34 -0
  184. package/dist/media/audio/audio-driver.d.ts.map +1 -0
  185. package/dist/media/audio/audio-driver.js +2 -0
  186. package/dist/media/audio/audio-driver.js.map +1 -0
  187. package/dist/media/audio/audio-for-preview.d.ts +47 -0
  188. package/dist/media/audio/audio-for-preview.d.ts.map +1 -0
  189. package/dist/media/audio/audio-for-preview.js +232 -0
  190. package/dist/media/audio/audio-for-preview.js.map +1 -0
  191. package/dist/media/audio/audio-for-rendering.d.ts +16 -0
  192. package/dist/media/audio/audio-for-rendering.d.ts.map +1 -0
  193. package/dist/media/audio/audio-for-rendering.js +32 -0
  194. package/dist/media/audio/audio-for-rendering.js.map +1 -0
  195. package/dist/media/audio/audio-source-browser.d.ts +30 -0
  196. package/dist/media/audio/audio-source-browser.d.ts.map +1 -0
  197. package/dist/media/audio/audio-source-browser.js +139 -0
  198. package/dist/media/audio/audio-source-browser.js.map +1 -0
  199. package/dist/media/audio/audio-source-mediabunny.d.ts +45 -0
  200. package/dist/media/audio/audio-source-mediabunny.d.ts.map +1 -0
  201. package/dist/media/audio/audio-source-mediabunny.js +79 -0
  202. package/dist/media/audio/audio-source-mediabunny.js.map +1 -0
  203. package/dist/media/audio/audio-source.d.ts +38 -0
  204. package/dist/media/audio/audio-source.d.ts.map +1 -0
  205. package/dist/media/audio/audio-source.js +2 -0
  206. package/dist/media/audio/audio-source.js.map +1 -0
  207. package/dist/media/audio/index.d.ts +57 -0
  208. package/dist/media/audio/index.d.ts.map +1 -0
  209. package/dist/media/audio/index.js +170 -0
  210. package/dist/media/audio/index.js.map +1 -0
  211. package/dist/media/audio/mixer.d.ts +43 -0
  212. package/dist/media/audio/mixer.d.ts.map +1 -0
  213. package/dist/media/audio/mixer.js +51 -0
  214. package/dist/media/audio/mixer.js.map +1 -0
  215. package/dist/media/audio/shared-audio-context.d.ts +30 -0
  216. package/dist/media/audio/shared-audio-context.d.ts.map +1 -0
  217. package/dist/media/audio/shared-audio-context.js +68 -0
  218. package/dist/media/audio/shared-audio-context.js.map +1 -0
  219. package/dist/media/audio/types.d.ts +31 -0
  220. package/dist/media/audio/types.d.ts.map +1 -0
  221. package/dist/media/audio/types.js +2 -0
  222. package/dist/media/audio/types.js.map +1 -0
  223. package/dist/media/media-marker.d.ts +26 -0
  224. package/dist/media/media-marker.d.ts.map +1 -0
  225. package/dist/media/media-marker.js +26 -0
  226. package/dist/media/media-marker.js.map +1 -0
  227. package/dist/media/media-time.d.ts +17 -0
  228. package/dist/media/media-time.d.ts.map +1 -0
  229. package/dist/media/media-time.js +17 -0
  230. package/dist/media/media-time.js.map +1 -0
  231. package/dist/media/video/driver.d.ts +31 -0
  232. package/dist/media/video/driver.d.ts.map +1 -0
  233. package/dist/media/video/driver.js +3 -0
  234. package/dist/media/video/driver.js.map +1 -0
  235. package/dist/media/video/index.d.ts +66 -0
  236. package/dist/media/video/index.d.ts.map +1 -0
  237. package/dist/media/video/index.js +372 -0
  238. package/dist/media/video/index.js.map +1 -0
  239. package/dist/media/video/types.d.ts +36 -0
  240. package/dist/media/video/types.d.ts.map +1 -0
  241. package/dist/media/video/types.js +2 -0
  242. package/dist/media/video/types.js.map +1 -0
  243. package/dist/media/video/video-for-preview.d.ts +17 -0
  244. package/dist/media/video/video-for-preview.d.ts.map +1 -0
  245. package/dist/media/video/video-for-preview.js +30 -0
  246. package/dist/media/video/video-for-preview.js.map +1 -0
  247. package/dist/media/video/video-for-rendering.d.ts +17 -0
  248. package/dist/media/video/video-for-rendering.d.ts.map +1 -0
  249. package/dist/media/video/video-for-rendering.js +59 -0
  250. package/dist/media/video/video-for-rendering.js.map +1 -0
  251. package/dist/media/video/video-source-browser.d.ts +37 -0
  252. package/dist/media/video/video-source-browser.d.ts.map +1 -0
  253. package/dist/media/video/video-source-browser.js +171 -0
  254. package/dist/media/video/video-source-browser.js.map +1 -0
  255. package/dist/media/video/video-source-mediabunny.d.ts +69 -0
  256. package/dist/media/video/video-source-mediabunny.d.ts.map +1 -0
  257. package/dist/media/video/video-source-mediabunny.js +236 -0
  258. package/dist/media/video/video-source-mediabunny.js.map +1 -0
  259. package/dist/media/video/video-source.d.ts +48 -0
  260. package/dist/media/video/video-source.d.ts.map +1 -0
  261. package/dist/media/video/video-source.js +2 -0
  262. package/dist/media/video/video-source.js.map +1 -0
  263. package/dist/media-marker.d.ts +19 -0
  264. package/dist/media-marker.d.ts.map +1 -0
  265. package/dist/media-marker.js +19 -0
  266. package/dist/media-marker.js.map +1 -0
  267. package/dist/media-time.d.ts +17 -0
  268. package/dist/media-time.d.ts.map +1 -0
  269. package/dist/media-time.js +17 -0
  270. package/dist/media-time.js.map +1 -0
  271. package/dist/signal.d.ts +10 -0
  272. package/dist/signal.d.ts.map +1 -0
  273. package/dist/signal.js +39 -0
  274. package/dist/signal.js.map +1 -0
  275. package/dist/text.d.ts +91 -0
  276. package/dist/text.d.ts.map +1 -0
  277. package/dist/text.js +704 -0
  278. package/dist/text.js.map +1 -0
  279. package/dist/video/driver.d.ts +31 -0
  280. package/dist/video/driver.d.ts.map +1 -0
  281. package/dist/video/driver.js +3 -0
  282. package/dist/video/driver.js.map +1 -0
  283. package/dist/video/index.d.ts +45 -0
  284. package/dist/video/index.d.ts.map +1 -0
  285. package/dist/video/index.js +276 -0
  286. package/dist/video/index.js.map +1 -0
  287. package/dist/video/types.d.ts +35 -0
  288. package/dist/video/types.d.ts.map +1 -0
  289. package/dist/video/types.js +2 -0
  290. package/dist/video/types.js.map +1 -0
  291. package/dist/video/video-for-preview.d.ts +12 -0
  292. package/dist/video/video-for-preview.d.ts.map +1 -0
  293. package/dist/video/video-for-preview.js +73 -0
  294. package/dist/video/video-for-preview.js.map +1 -0
  295. package/dist/video/video-for-rendering.d.ts +16 -0
  296. package/dist/video/video-for-rendering.d.ts.map +1 -0
  297. package/dist/video/video-for-rendering.js +45 -0
  298. package/dist/video/video-for-rendering.js.map +1 -0
  299. package/dist/video/video-source-browser.d.ts +37 -0
  300. package/dist/video/video-source-browser.d.ts.map +1 -0
  301. package/dist/video/video-source-browser.js +171 -0
  302. package/dist/video/video-source-browser.js.map +1 -0
  303. package/dist/video/video-source.d.ts +48 -0
  304. package/dist/video/video-source.d.ts.map +1 -0
  305. package/dist/video/video-source.js +2 -0
  306. package/dist/video/video-source.js.map +1 -0
  307. package/package.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/layout/image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,qBAAqB,GAGtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA+BxD,MAAM,QAAQ,GAAG;IACf,KAAK;IACL,WAAW;IACX,gBAAgB;IAChB,UAAU;IACV,YAAY;IACZ,WAAW;IACX,WAAW;IACX,QAAQ;IACR,QAAQ;CACA,CAAC;AAEX,SAAS,eAAe,CAAC,MAAmB;IAC1C,MAAM,GAAG,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAA8B,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,MAA+B,CAAC,CAAC;IAC5D,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC;IAC7B,OAAO,GAAwB,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,KAAM,SAAQ,KAAK,CAAC,KAAK;IAC3B,OAAO,GAAG,MAAe,CAAC;IAClB,IAAI,CAAc;IAC3B,OAAO,GAAuB,IAAI,CAAC;IAC3C,iFAAiF;IACzE,YAAY,GAAyB,IAAI,CAAC;IAClD,gEAAgE;IACxD,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,MAAmB;QAC7B,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/B,6EAA6E;QAC7E,6EAA6E;QAC7E,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE9B,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACpE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErB,IAAI,CAAC,QAAQ,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,OAAO;YACtC,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,QAAQ;YACjD,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,SAAS,EAAE,MAAM,CAAC,KAAK;YACvB,UAAU,EAAE,MAAM,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAE/D,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnC,uEAAuE;YACvE,0EAA0E;YAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,qBAAqB,EAAE,CAAC;YACxD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;iBACnC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC;YAC/B,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBACtB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,WAAmB;QACzB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW;YAAE,OAAO;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,kEAAkE;IAClE,aAAa,KAAU,CAAC;IAExB,yGAAyG;IACzG,UAAU,CAAC,IAAiB;QAC1B,SAAS,CACP,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,SAAkC,EAC7C,IAAI,CAAC,KAAK,CAAC,UAAmC,CAC/C,CAAC;IACJ,CAAC;IAED,yFAAyF;IACzF,QAAQ,CAAC,GAAc;QACrB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,gBAAgB;IAChB,YAAY;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,CAAc,CAAC;QAC3D,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,QAAQ,CAAmB,CAAC;QACtE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,KAAK,CAAC,IAAI,GAAG,CAAC,aAAa,KAAK,CAAC;YAAE,OAAO;QACtE,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC;QAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC;QAE7B,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACvC,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;YACtB,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;YACtB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;CACF;AAED,SAAS,cAAc,CACrB,GAAmB,EACnB,KAAa,EACb,KAAa;IAEb,IAAI,EAAE,GAAG,GAAG,CAAC;IACb,IAAI,EAAE,GAAG,GAAG,CAAC;IACb,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,EAAE,GAAG,CAAC,CAAC;SAC5B,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,EAAE,GAAG,CAAC,CAAC;SAC3B,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,EAAE,GAAG,GAAG,CAAC;QACT,EAAE,GAAG,GAAG,CAAC;IACX,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAoB;IAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CACpB,GAA6C,EAC7C,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAW;IAEX,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3B,GAAG,CAAC,SAAS,EAAE,CAAC;IAChB,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,GAAG,CAAC,SAAS,EAAE,CAAC;AAClB,CAAC"}
@@ -0,0 +1,72 @@
1
+ import Konva from "konva";
2
+ import type { FlexChildProps, SizeValue } from "./flex/types.js";
3
+ /**
4
+ * smoove wrappers for Konva's drawing primitives. Each one keeps Konva's
5
+ * own name and config, and layers on flex participation (`flexGrow`,
6
+ * `flexShrink`, `flexBasis`, `alignSelf`, `margin`) plus `px`/`%` `width`/
7
+ * `height` size values — so any shape can sit inside a {@link Flex}/{@link Block}
8
+ * and be laid out automatically.
9
+ *
10
+ * Positioning is origin-corrected (a `Circle` lands its bounding box at the
11
+ * flex slot, not its center). Radius/points-based shapes report their intrinsic
12
+ * size and are not stretched by `flexGrow`; give those an explicit size for
13
+ * predictable results. Animation stays centralized in `Sequence.register`.
14
+ */
15
+ type WithFlex<C> = Omit<C, "width" | "height"> & FlexChildProps & {
16
+ width?: SizeValue;
17
+ height?: SizeValue;
18
+ };
19
+ export type RectConfig = WithFlex<Konva.RectConfig>;
20
+ declare const Rect_base: new (config: RectConfig) => import("konva/lib/shapes/Rect").Rect & import("./contract.js").KMLayoutNode;
21
+ export declare class Rect extends Rect_base {
22
+ }
23
+ export type CircleConfig = WithFlex<Konva.CircleConfig>;
24
+ declare const Circle_base: new (config: CircleConfig) => import("konva/lib/shapes/Circle").Circle & import("./contract.js").KMLayoutNode;
25
+ export declare class Circle extends Circle_base {
26
+ }
27
+ export type EllipseConfig = WithFlex<Konva.EllipseConfig>;
28
+ declare const Ellipse_base: new (config: EllipseConfig) => import("konva/lib/shapes/Ellipse").Ellipse & import("./contract.js").KMLayoutNode;
29
+ export declare class Ellipse extends Ellipse_base {
30
+ }
31
+ export type LineConfig = WithFlex<Konva.LineConfig>;
32
+ declare const Line_base: new (config: LineConfig) => import("konva/lib/shapes/Line").Line<import("konva/lib/shapes/Line").LineConfig> & import("./contract.js").KMLayoutNode;
33
+ export declare class Line extends Line_base {
34
+ }
35
+ export type ArrowConfig = WithFlex<Konva.ArrowConfig>;
36
+ declare const Arrow_base: new (config: ArrowConfig) => import("konva/lib/shapes/Arrow").Arrow & import("./contract.js").KMLayoutNode;
37
+ export declare class Arrow extends Arrow_base {
38
+ }
39
+ export type StarConfig = WithFlex<Konva.StarConfig>;
40
+ declare const Star_base: new (config: StarConfig) => import("konva/lib/shapes/Star").Star & import("./contract.js").KMLayoutNode;
41
+ export declare class Star extends Star_base {
42
+ }
43
+ export type RingConfig = WithFlex<Konva.RingConfig>;
44
+ declare const Ring_base: new (config: RingConfig) => import("konva/lib/shapes/Ring").Ring & import("./contract.js").KMLayoutNode;
45
+ export declare class Ring extends Ring_base {
46
+ }
47
+ export type ArcConfig = WithFlex<Konva.ArcConfig>;
48
+ declare const Arc_base: new (config: ArcConfig) => import("konva/lib/shapes/Arc").Arc & import("./contract.js").KMLayoutNode;
49
+ export declare class Arc extends Arc_base {
50
+ }
51
+ export type WedgeConfig = WithFlex<Konva.WedgeConfig>;
52
+ declare const Wedge_base: new (config: WedgeConfig) => import("konva/lib/shapes/Wedge").Wedge & import("./contract.js").KMLayoutNode;
53
+ export declare class Wedge extends Wedge_base {
54
+ }
55
+ export type RegularPolygonConfig = WithFlex<Konva.RegularPolygonConfig>;
56
+ declare const RegularPolygon_base: new (config: RegularPolygonConfig) => import("konva/lib/shapes/RegularPolygon").RegularPolygon & import("./contract.js").KMLayoutNode;
57
+ export declare class RegularPolygon extends RegularPolygon_base {
58
+ }
59
+ export type PathConfig = WithFlex<Konva.PathConfig>;
60
+ declare const Path_base: new (config: PathConfig) => import("konva/lib/shapes/Path").Path & import("./contract.js").KMLayoutNode;
61
+ export declare class Path extends Path_base {
62
+ }
63
+ export type TextPathConfig = WithFlex<Konva.TextPathConfig>;
64
+ declare const TextPath_base: new (config: TextPathConfig) => import("konva/lib/shapes/TextPath").TextPath & import("./contract.js").KMLayoutNode;
65
+ export declare class TextPath extends TextPath_base {
66
+ }
67
+ export type SpriteConfig = WithFlex<Konva.SpriteConfig>;
68
+ declare const Sprite_base: new (config: SpriteConfig) => import("konva/lib/shapes/Sprite").Sprite & import("./contract.js").KMLayoutNode;
69
+ export declare class Sprite extends Sprite_base {
70
+ }
71
+ export {};
72
+ //# sourceMappingURL=shapes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../../src/layout/shapes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjE;;;;;;;;;;;GAWG;AAEH,KAAK,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC,GAC5C,cAAc,GAAG;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAEJ,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;;AACxD,qBAAa,MAAO,SAAQ,WAAmD;CAAG;AAElF,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;;AAC1D,qBAAa,OAAQ,SAAQ,YAAsD;CAAG;AAEtF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;;AACtD,qBAAa,KAAM,SAAQ,UAAgD;CAAG;AAE9E,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;;AAClD,qBAAa,GAAI,SAAQ,QAA0C;CAAG;AAEtE,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;;AACtD,qBAAa,KAAM,SAAQ,UAAgD;CAAG;AAE9E,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;;AACxE,qBAAa,cAAe,SAAQ,mBAEnC;CAAG;AAEJ,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;;AAC5D,qBAAa,QAAS,SAAQ,aAAyD;CAAG;AAE1F,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;;AACxD,qBAAa,MAAO,SAAQ,WAAmD;CAAG"}
@@ -0,0 +1,29 @@
1
+ import Konva from "konva";
2
+ import { FlexShape } from "./flex/mixin.js";
3
+ export class Rect extends FlexShape(Konva.Rect) {
4
+ }
5
+ export class Circle extends FlexShape(Konva.Circle) {
6
+ }
7
+ export class Ellipse extends FlexShape(Konva.Ellipse) {
8
+ }
9
+ export class Line extends FlexShape(Konva.Line) {
10
+ }
11
+ export class Arrow extends FlexShape(Konva.Arrow) {
12
+ }
13
+ export class Star extends FlexShape(Konva.Star) {
14
+ }
15
+ export class Ring extends FlexShape(Konva.Ring) {
16
+ }
17
+ export class Arc extends FlexShape(Konva.Arc) {
18
+ }
19
+ export class Wedge extends FlexShape(Konva.Wedge) {
20
+ }
21
+ export class RegularPolygon extends FlexShape(Konva.RegularPolygon) {
22
+ }
23
+ export class Path extends FlexShape(Konva.Path) {
24
+ }
25
+ export class TextPath extends FlexShape(Konva.TextPath) {
26
+ }
27
+ export class Sprite extends FlexShape(Konva.Sprite) {
28
+ }
29
+ //# sourceMappingURL=shapes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapes.js","sourceRoot":"","sources":["../../src/layout/shapes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAuB5C,MAAM,OAAO,IAAK,SAAQ,SAAS,CAAyB,KAAK,CAAC,IAAI,CAAC;CAAG;AAG1E,MAAM,OAAO,MAAO,SAAQ,SAAS,CAA6B,KAAK,CAAC,MAAM,CAAC;CAAG;AAGlF,MAAM,OAAO,OAAQ,SAAQ,SAAS,CAA+B,KAAK,CAAC,OAAO,CAAC;CAAG;AAGtF,MAAM,OAAO,IAAK,SAAQ,SAAS,CAAyB,KAAK,CAAC,IAAI,CAAC;CAAG;AAG1E,MAAM,OAAO,KAAM,SAAQ,SAAS,CAA2B,KAAK,CAAC,KAAK,CAAC;CAAG;AAG9E,MAAM,OAAO,IAAK,SAAQ,SAAS,CAAyB,KAAK,CAAC,IAAI,CAAC;CAAG;AAG1E,MAAM,OAAO,IAAK,SAAQ,SAAS,CAAyB,KAAK,CAAC,IAAI,CAAC;CAAG;AAG1E,MAAM,OAAO,GAAI,SAAQ,SAAS,CAAuB,KAAK,CAAC,GAAG,CAAC;CAAG;AAGtE,MAAM,OAAO,KAAM,SAAQ,SAAS,CAA2B,KAAK,CAAC,KAAK,CAAC;CAAG;AAG9E,MAAM,OAAO,cAAe,SAAQ,SAAS,CAC3C,KAAK,CAAC,cAAc,CACrB;CAAG;AAGJ,MAAM,OAAO,IAAK,SAAQ,SAAS,CAAyB,KAAK,CAAC,IAAI,CAAC;CAAG;AAG1E,MAAM,OAAO,QAAS,SAAQ,SAAS,CAAiC,KAAK,CAAC,QAAQ,CAAC;CAAG;AAG1F,MAAM,OAAO,MAAO,SAAQ,SAAS,CAA6B,KAAK,CAAC,MAAM,CAAC;CAAG"}
@@ -0,0 +1,92 @@
1
+ import Konva from "konva";
2
+ import { type Composition } from "../../engine/composition.js";
3
+ import { type FontFaceDescriptor } from "../../engine/runtime-defaults.js";
4
+ /** CSS font-style keyword. */
5
+ export type FontStyleName = "normal" | "italic" | "oblique";
6
+ /** One declared face of a {@link Font} family. */
7
+ export type FontFace = {
8
+ /**
9
+ * Face weight: a number (`400`), a numeric string (`"400"`), or a keyword
10
+ * (`"normal"` → 400, `"bold"` → 700). A variable-font range string like
11
+ * `"100 900"` is passed through as-is. Default `400`.
12
+ */
13
+ weight?: number | string;
14
+ /** Face style. Default `"normal"`. */
15
+ style?: FontStyleName;
16
+ /** Font file source — a URL (e.g. a Vite `?url` import) or, server-side, a path/URL. */
17
+ src: string;
18
+ };
19
+ export type FontConfig = {
20
+ /** Family name. **Process-global** in the text backend — distinct fonts need distinct names. */
21
+ family: string;
22
+ faces: FontFace[];
23
+ };
24
+ /** A resolved, normalized face — weight/style are canonical strings. */
25
+ type ResolvedFace = FontFaceDescriptor & {
26
+ style: FontStyleName;
27
+ };
28
+ /**
29
+ * What {@link Text} consumes via `{ font }` — a concrete `family`/`weight`/`style`
30
+ * plus readiness so `Text` can re-layout once the glyphs are loaded. Produced by
31
+ * {@link Font.face}.
32
+ */
33
+ export type FontFaceRef = {
34
+ family: string;
35
+ weight: string;
36
+ style: FontStyleName;
37
+ /** Resolves when the backing font has finished loading. */
38
+ whenReady(): Promise<void>;
39
+ /** True once loaded. */
40
+ readonly isLoaded: boolean;
41
+ };
42
+ /**
43
+ * A declarative font: a family name plus its faces. Lives in the `Sequence`
44
+ * tree as an invisible {@link Konva.Group} (so `seq.add(font)` works) and is
45
+ * discovered by `Composition.add` via {@link FONT_MARK}, which kicks the load and
46
+ * buffers on it before playback. Loading is environment-aware (the browser
47
+ * `FontFace` API in preview; skia-canvas `FontLibrary` when a server renderer
48
+ * has installed its loader) and deduped per face.
49
+ *
50
+ * Pass a `Font` (or `font.face(selector)`) to a {@link Text}'s `font` option.
51
+ */
52
+ export declare class Font extends Konva.Group {
53
+ readonly family: string;
54
+ readonly faces: ResolvedFace[];
55
+ private _loadPromise;
56
+ private _loaded;
57
+ private _registered;
58
+ constructor(config: FontConfig);
59
+ /** True once every face has finished loading. */
60
+ get isLoaded(): boolean;
61
+ /**
62
+ * Load every face (environment-aware, deduped, idempotent). Returns the shared
63
+ * load promise; resolves even if a face fails (the error is logged) so a single
64
+ * bad face can't wedge playback.
65
+ */
66
+ load(): Promise<void>;
67
+ /** Resolves when the font has loaded — alias of {@link load} for {@link FontFaceRef}. */
68
+ whenReady(): Promise<void>;
69
+ /**
70
+ * Select a face to hand to a `Text`. Selector grammar: `"<weight>"` or
71
+ * `"<weight>-<style>"` (e.g. `"700"`, `"400-italic"`).
72
+ *
73
+ * - no selector → preferred face (`400`/`normal`, else the first declared face)
74
+ * - `"400"` → first `400`/`normal`, else first `400` of any style (throws if no `400`)
75
+ * - `"400-italic"` → exactly `400`/`italic` (**throws** if absent)
76
+ */
77
+ face(selector?: string): FontFaceRef;
78
+ private _select;
79
+ private _faceList;
80
+ /**
81
+ * @internal — `Composition.add` walks {@link FONT_MARK} and calls this once:
82
+ * kicks the load and either buffers on it (preview, via `registerAsset`) or
83
+ * gates `renderFrame` on it (offline, via `delayRender`). Idempotent.
84
+ */
85
+ _kmRegister(comp: Composition): void;
86
+ /** @internal — lazy fallback: register on first active tick if the eager add walk missed us. */
87
+ _kmTick(_localFrame: number): void;
88
+ /** @internal */
89
+ _kmDeactivate(): void;
90
+ }
91
+ export {};
92
+ //# sourceMappingURL=font.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../../../src/layout/text/font.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,KAAK,kBAAkB,EAAgB,MAAM,kCAAkC,CAAC;AAGzF,8BAA8B;AAC9B,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5D,kDAAkD;AAClD,MAAM,MAAM,QAAQ,GAAG;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,sCAAsC;IACtC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,wFAAwF;IACxF,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,gGAAgG;IAChG,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB,CAAC;AAEF,wEAAwE;AACxE,KAAK,YAAY,GAAG,kBAAkB,GAAG;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AAElE;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,2DAA2D;IAC3D,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,wBAAwB;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B,CAAC;AAgBF;;;;;;;;;GASG;AACH,qBAAa,IAAK,SAAQ,KAAK,CAAC,KAAK;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC/B,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,UAAU;IA8B9B,iDAAiD;IACjD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB,yFAAyF;IACzF,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B;;;;;;;OAOG;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW;IAcpC,OAAO,CAAC,OAAO;IA0Bf,OAAO,CAAC,SAAS;IAIjB;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAYpC,gGAAgG;IAChG,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQlC,gBAAgB;IAChB,aAAa,IAAI,IAAI;CACtB"}
@@ -0,0 +1,166 @@
1
+ import Konva from "konva";
2
+ import { getComposition } from "../../engine/composition.js";
3
+ import { loadFontFace } from "../../engine/runtime-defaults.js";
4
+ import { FONT_MARK, TICK_MARK } from "../../media/media-marker.js";
5
+ function normalizeWeight(weight) {
6
+ if (weight === undefined)
7
+ return "400";
8
+ const w = String(weight).trim().toLowerCase();
9
+ if (w === "normal")
10
+ return "400";
11
+ if (w === "bold")
12
+ return "700";
13
+ return w;
14
+ }
15
+ function normalizeStyle(style) {
16
+ const s = (style ?? "normal").trim().toLowerCase();
17
+ if (s === "italic" || s === "oblique")
18
+ return s;
19
+ return "normal";
20
+ }
21
+ /**
22
+ * A declarative font: a family name plus its faces. Lives in the `Sequence`
23
+ * tree as an invisible {@link Konva.Group} (so `seq.add(font)` works) and is
24
+ * discovered by `Composition.add` via {@link FONT_MARK}, which kicks the load and
25
+ * buffers on it before playback. Loading is environment-aware (the browser
26
+ * `FontFace` API in preview; skia-canvas `FontLibrary` when a server renderer
27
+ * has installed its loader) and deduped per face.
28
+ *
29
+ * Pass a `Font` (or `font.face(selector)`) to a {@link Text}'s `font` option.
30
+ */
31
+ export class Font extends Konva.Group {
32
+ family;
33
+ faces;
34
+ _loadPromise = null;
35
+ _loaded = false;
36
+ _registered = false;
37
+ constructor(config) {
38
+ super({ listening: false, visible: false });
39
+ if (!config.family)
40
+ throw new Error("Font: family is required");
41
+ if (!config.faces || config.faces.length === 0) {
42
+ throw new Error(`Font "${config.family}": at least one face is required`);
43
+ }
44
+ this.setAttr(FONT_MARK, true);
45
+ // Discovered by `Sequence` too, so a font added after `comp.add(seq)` still
46
+ // registers on its first active tick (lazy fallback for the eager add walk).
47
+ this.setAttr(TICK_MARK, true);
48
+ this.family = config.family;
49
+ this.faces = config.faces.map((f) => ({
50
+ weight: normalizeWeight(f.weight),
51
+ style: normalizeStyle(f.style),
52
+ src: f.src,
53
+ }));
54
+ const seen = new Set();
55
+ for (const f of this.faces) {
56
+ const slot = `${f.weight}-${f.style}`;
57
+ if (seen.has(slot)) {
58
+ console.warn(`[smoove] Font "${this.family}": duplicate ${slot} face — only the first is used.`);
59
+ }
60
+ seen.add(slot);
61
+ }
62
+ }
63
+ /** True once every face has finished loading. */
64
+ get isLoaded() {
65
+ return this._loaded;
66
+ }
67
+ /**
68
+ * Load every face (environment-aware, deduped, idempotent). Returns the shared
69
+ * load promise; resolves even if a face fails (the error is logged) so a single
70
+ * bad face can't wedge playback.
71
+ */
72
+ load() {
73
+ if (this._loadPromise)
74
+ return this._loadPromise;
75
+ this._loadPromise = Promise.all(this.faces.map((f) => loadFontFace(this.family, f)))
76
+ .then(() => {
77
+ this._loaded = true;
78
+ })
79
+ .catch((err) => {
80
+ console.error(`[smoove] Font "${this.family}" load failed:`, err);
81
+ });
82
+ return this._loadPromise;
83
+ }
84
+ /** Resolves when the font has loaded — alias of {@link load} for {@link FontFaceRef}. */
85
+ whenReady() {
86
+ return this.load();
87
+ }
88
+ /**
89
+ * Select a face to hand to a `Text`. Selector grammar: `"<weight>"` or
90
+ * `"<weight>-<style>"` (e.g. `"700"`, `"400-italic"`).
91
+ *
92
+ * - no selector → preferred face (`400`/`normal`, else the first declared face)
93
+ * - `"400"` → first `400`/`normal`, else first `400` of any style (throws if no `400`)
94
+ * - `"400-italic"` → exactly `400`/`italic` (**throws** if absent)
95
+ */
96
+ face(selector) {
97
+ const resolved = this._select(selector);
98
+ const self = this;
99
+ return {
100
+ family: this.family,
101
+ weight: resolved.weight,
102
+ style: resolved.style,
103
+ whenReady: () => self.load(),
104
+ get isLoaded() {
105
+ return self._loaded;
106
+ },
107
+ };
108
+ }
109
+ _select(selector) {
110
+ const first = this.faces[0]; // non-empty (validated in ctor)
111
+ if (!selector) {
112
+ return this.faces.find((f) => f.weight === "400" && f.style === "normal") ?? first;
113
+ }
114
+ const [weightRaw, styleRaw] = selector.split("-");
115
+ const weight = normalizeWeight(weightRaw);
116
+ if (styleRaw) {
117
+ const style = normalizeStyle(styleRaw);
118
+ const match = this.faces.find((f) => f.weight === weight && f.style === style);
119
+ if (!match) {
120
+ throw new Error(`Font "${this.family}": no ${weight}-${style} face; have ${this._faceList()}`);
121
+ }
122
+ return match;
123
+ }
124
+ const match = this.faces.find((f) => f.weight === weight && f.style === "normal") ??
125
+ this.faces.find((f) => f.weight === weight);
126
+ if (!match) {
127
+ throw new Error(`Font "${this.family}": no ${weight} face; have ${this._faceList()}`);
128
+ }
129
+ return match;
130
+ }
131
+ _faceList() {
132
+ return this.faces.map((f) => `${f.weight}-${f.style}`).join(", ");
133
+ }
134
+ /**
135
+ * @internal — `Composition.add` walks {@link FONT_MARK} and calls this once:
136
+ * kicks the load and either buffers on it (preview, via `registerAsset`) or
137
+ * gates `renderFrame` on it (offline, via `delayRender`). Idempotent.
138
+ */
139
+ _kmRegister(comp) {
140
+ if (this._registered)
141
+ return;
142
+ this._registered = true;
143
+ const p = this.load();
144
+ if (comp.environment.isRendering) {
145
+ const handle = comp.delayRender(`load font ${this.family}`);
146
+ p.finally(() => comp.continueRender(handle));
147
+ }
148
+ else {
149
+ comp.registerAsset(p, `font ${this.family}`);
150
+ }
151
+ }
152
+ /** @internal — lazy fallback: register on first active tick if the eager add walk missed us. */
153
+ _kmTick(_localFrame) {
154
+ if (this._registered)
155
+ return;
156
+ const stage = this.getStage();
157
+ if (!stage)
158
+ return;
159
+ const comp = getComposition(stage);
160
+ if (comp)
161
+ this._kmRegister(comp);
162
+ }
163
+ /** @internal */
164
+ _kmDeactivate() { }
165
+ }
166
+ //# sourceMappingURL=font.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font.js","sourceRoot":"","sources":["../../../src/layout/text/font.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type Konva from "konva";
2
+ import type { TextAlign, TextConfig } from "./types.js";
3
+ export declare function pickKonvaConfig(config: TextConfig): Konva.GroupConfig;
4
+ /** Per-line slice of the displayed text, with char offsets and rendered width. */
5
+ export type LineRange = {
6
+ start: number;
7
+ end: number;
8
+ width: number;
9
+ };
10
+ /** Cached layout used by highlight/cursor/fade positioning. */
11
+ export type Geometry = {
12
+ chars: string[];
13
+ ranges: LineRange[];
14
+ lineH: number;
15
+ pad: number;
16
+ textAreaW: number;
17
+ align: TextAlign;
18
+ };
19
+ export declare function clamp(v: number, lo: number, hi: number): number;
20
+ /** Pull back index `k` to the end of the previous word (last whitespace). */
21
+ export declare function snapToWord(chars: string[], k: number): number;
22
+ /**
23
+ * Word boundaries over `chars`: `wordEnds[j]` is the char index just past word
24
+ * j (== start of word j+1, trailing whitespace included), and `charWord[k]` is
25
+ * the word index char k belongs to.
26
+ */
27
+ export declare function buildWordIndex(chars: string[]): {
28
+ wordEnds: number[];
29
+ charWord: number[];
30
+ };
31
+ //# sourceMappingURL=geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../../src/layout/text/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA8BxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC,WAAW,CAQrE;AAED,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,+DAA+D;AAC/D,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAsB1F"}
@@ -0,0 +1,81 @@
1
+ import { parseSize } from "../flex/engine.js";
2
+ /** Keys consumed by the wrapper; everything else is forwarded to the Group. */
3
+ const TEXT_KEYS = [
4
+ "text",
5
+ "maxWidth",
6
+ "maxHeight",
7
+ "fontSize",
8
+ "fontFamily",
9
+ "fontStyle",
10
+ "font",
11
+ "fill",
12
+ "align",
13
+ "lineHeight",
14
+ "letterSpacing",
15
+ "padding",
16
+ "wrap",
17
+ "ellipsis",
18
+ "fitText",
19
+ "maxLines",
20
+ "trimBy",
21
+ "typewriter",
22
+ "highlights",
23
+ "flexGrow",
24
+ "flexShrink",
25
+ "flexBasis",
26
+ "alignSelf",
27
+ "margin",
28
+ ];
29
+ export function pickKonvaConfig(config) {
30
+ const out = { ...config };
31
+ for (const k of TEXT_KEYS)
32
+ delete out[k];
33
+ const w = parseSize(config.width);
34
+ const h = parseSize(config.height);
35
+ out.width = w?.kind === "px" ? w.value : undefined;
36
+ out.height = h?.kind === "px" ? h.value : undefined;
37
+ return out;
38
+ }
39
+ export function clamp(v, lo, hi) {
40
+ return v < lo ? lo : v > hi ? hi : v;
41
+ }
42
+ /** Pull back index `k` to the end of the previous word (last whitespace). */
43
+ export function snapToWord(chars, k) {
44
+ for (let i = k - 1; i > 0; i--) {
45
+ if (chars[i] === " " || chars[i] === "\n")
46
+ return i;
47
+ }
48
+ return k;
49
+ }
50
+ /**
51
+ * Word boundaries over `chars`: `wordEnds[j]` is the char index just past word
52
+ * j (== start of word j+1, trailing whitespace included), and `charWord[k]` is
53
+ * the word index char k belongs to.
54
+ */
55
+ export function buildWordIndex(chars) {
56
+ const wordEnds = [];
57
+ const charWord = new Array(chars.length).fill(0);
58
+ let word = 0;
59
+ let inWord = false;
60
+ for (let i = 0; i < chars.length; i++) {
61
+ const c = chars[i];
62
+ const space = c === " " || c === "\n" || c === "\t";
63
+ charWord[i] = word;
64
+ if (!space) {
65
+ inWord = true;
66
+ }
67
+ else if (inWord && space) {
68
+ // End the word at the first trailing space; absorb the run into it.
69
+ wordEnds.push(i + 1);
70
+ word++;
71
+ inWord = false;
72
+ }
73
+ else {
74
+ // Leading/extra whitespace stays with the upcoming word.
75
+ }
76
+ }
77
+ if (inWord)
78
+ wordEnds.push(chars.length);
79
+ return { wordEnds, charWord };
80
+ }
81
+ //# sourceMappingURL=geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../../src/layout/text/geometry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import Konva from "konva";
2
+ import type { KMLayoutNode, LayoutBox, MeasureContext } from "../contract.js";
3
+ import { type FlexilyNode } from "../flex/engine.js";
4
+ import type { TextConfig } from "./types.js";
5
+ /**
6
+ * Timeline-aware text node. Wraps a {@link Konva.Text} and layers on CSS-like
7
+ * fitting (maxWidth/maxHeight/fitText/maxLines, ellipsis + word/letter trim), a
8
+ * built-in typewriter reveal, and per-range highlighter marks. Like the other
9
+ * layout primitives it `extends Konva.Group`, exposing intrinsic text size to
10
+ * the flex engine via {@link _measureForFlex}.
11
+ */
12
+ export declare class Text extends Konva.Group implements KMLayoutNode {
13
+ readonly _kmRole: "leaf";
14
+ private readonly _text;
15
+ /** Clipping wrapper around `_text` — reveals a char range without re-wrapping. */
16
+ private readonly _textClip;
17
+ private readonly _hl;
18
+ private readonly _hlText;
19
+ private readonly _fade;
20
+ private _cursor;
21
+ private _fullText;
22
+ private _fullChars;
23
+ /** char index marking the end of each word (== start of the next), for word-mode reveal. */
24
+ private _wordEnds;
25
+ /** word index each char belongs to, for word-mode timing. */
26
+ private _charWord;
27
+ private _resolvedFontSize;
28
+ private _localFrame;
29
+ private _geo;
30
+ private _inLayout;
31
+ constructor(config: TextConfig);
32
+ /** Replace the text content. Re-runs fit + clamp + layout. */
33
+ setText(text: string): this;
34
+ /** @internal — {@link KMLayoutNode}: wrap-aware sizing + intrinsic measure. */
35
+ _kmMeasure(node: FlexilyNode, ctx: MeasureContext): void;
36
+ /** @internal — {@link KMLayoutNode}: write the computed box back + re-layout glyphs. */
37
+ _kmPlace(box: LayoutBox): void;
38
+ /**
39
+ * @internal Intrinsic size for the flex engine. Lays out the FULL text at the
40
+ * given available width (honoring fitText / maxWidth / maxHeight / maxLines).
41
+ * Height is the full text height when reserving, else the height of just the
42
+ * lines revealed so far — so a `reserveHeight: false` typewriter grows the box
43
+ * one line at a time and pushes siblings down.
44
+ */
45
+ _measureForFlex(avail: number): {
46
+ width: number;
47
+ height: number;
48
+ };
49
+ /** @internal Re-layout glyphs, highlights, cursor and fade for the current frame. */
50
+ _layoutText(): void;
51
+ private _relayout;
52
+ /** Number of wrapped lines that contain at least one revealed char. */
53
+ private _visibleLines;
54
+ /** Set the reveal clip on `_textClip` (covers char range [0, end), null = all). */
55
+ private _setReveal;
56
+ /** @internal Called by Sequence each frame. */
57
+ _kmTick(localFrame: number): void;
58
+ /** @internal Called by Sequence when the sequence leaves range. */
59
+ _kmDeactivate(): void;
60
+ /** How many chars are revealed at `frame` (full length when no typewriter). */
61
+ private _revealCount;
62
+ /** Frame at which the unit owning char `k` first appears (for fade ramps). */
63
+ private _unitRevealFrame;
64
+ private _boxWidth;
65
+ private _boxHeight;
66
+ /** Binary-search the largest font size in [min,max] for which the FULL text fits. */
67
+ private _applyFit;
68
+ /** Trim the visible text + add an ellipsis to satisfy wrap:none / maxLines / maxHeight. */
69
+ private _clamp;
70
+ /** Largest n in [0,max] satisfying the monotone predicate. */
71
+ private _largest;
72
+ private _charWidth;
73
+ /** Run Konva's wrapping for the current text at `boxW`, returning line metrics. */
74
+ private _measure;
75
+ /** Map Konva's wrapped lines back to char offsets in the displayed text. */
76
+ private _buildGeometry;
77
+ /** Left offset of a line within the text area, per alignment (matches Konva). */
78
+ private _alignOffset;
79
+ /** Per-line rectangles covering the global char range [lo,hi). */
80
+ private _segmentRects;
81
+ private _layoutHighlights;
82
+ private _fillColor;
83
+ /**
84
+ * A clipped, non-interactive copy of `_text` (different fill/opacity). Shapes
85
+ * can't clip, so the clone lives inside a clipping Group.
86
+ */
87
+ private _clippedClone;
88
+ /**
89
+ * Reveal `[0, reveal)` by clipping `_text` (no re-wrapping). With fade on, the
90
+ * solid clip stops at `commit` and the `[commit, reveal)` window is drawn as
91
+ * per-char overlays ramping their opacity.
92
+ */
93
+ private _layoutReveal;
94
+ private _layoutCursor;
95
+ /** Pixel position of the caret sitting just after char `idx`. */
96
+ private _caretPos;
97
+ }
98
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/layout/text/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAa,KAAK,WAAW,EAAoC,MAAM,mBAAmB,CAAC;AAWlG,OAAO,KAAK,EAIV,UAAU,EAEX,MAAM,YAAY,CAAC;AAwBpB;;;;;;GAMG;AACH,qBAAa,IAAK,SAAQ,KAAK,CAAC,KAAM,YAAW,YAAY;IAC3D,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAW;IAC7B,4FAA4F;IAC5F,OAAO,CAAC,SAAS,CAAW;IAC5B,6DAA6D;IAC7D,OAAO,CAAC,SAAS,CAAW;IAE5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,UAAU;IA8E9B,8DAA8D;IAC9D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY3B,+EAA+E;IAC/E,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAaxD,wFAAwF;IACxF,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAQ9B;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAuBjE,qFAAqF;IACrF,WAAW,IAAI,IAAI;IAUnB,OAAO,CAAC,SAAS;IAoCjB,uEAAuE;IACvE,OAAO,CAAC,aAAa;IAUrB,mFAAmF;IACnF,OAAO,CAAC,UAAU;IAgBlB,+CAA+C;IAC/C,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKjC,mEAAmE;IACnE,aAAa,IAAI,IAAI;IAMrB,+EAA+E;IAC/E,OAAO,CAAC,YAAY;IAsBpB,8EAA8E;IAC9E,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,UAAU;IAQlB,qFAAqF;IACrF,OAAO,CAAC,SAAS;IA+CjB,2FAA2F;IAC3F,OAAO,CAAC,MAAM;IAgDd,8DAA8D;IAC9D,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,UAAU;IAYlB,mFAAmF;IACnF,OAAO,CAAC,QAAQ;IAahB,4EAA4E;IAC5E,OAAO,CAAC,cAAc;IA+BtB,iFAAiF;IACjF,OAAO,CAAC,YAAY;IAMpB,kEAAkE;IAClE,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,iBAAiB;IAwDzB,OAAO,CAAC,UAAU;IAKlB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA6BrB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,aAAa;IAsCrB,iEAAiE;IACjE,OAAO,CAAC,SAAS;CAkBlB"}