@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,186 @@
1
+ import { ALIGN_AUTO, ALIGN_CENTER, ALIGN_FLEX_END, ALIGN_FLEX_START, ALIGN_STRETCH, EDGE_BOTTOM, EDGE_LEFT, EDGE_RIGHT, EDGE_TOP, FLEX_DIRECTION_COLUMN, FLEX_DIRECTION_COLUMN_REVERSE, FLEX_DIRECTION_ROW, FLEX_DIRECTION_ROW_REVERSE, Node as FlexilyNode, GUTTER_ALL, JUSTIFY_CENTER, JUSTIFY_FLEX_END, JUSTIFY_FLEX_START, JUSTIFY_SPACE_AROUND, JUSTIFY_SPACE_BETWEEN, JUSTIFY_SPACE_EVENLY, } from "flexily/classic";
2
+ export function normalizeEdges(v) {
3
+ if (v === undefined)
4
+ return null;
5
+ if (typeof v === "number")
6
+ return [v, v, v, v];
7
+ if (Array.isArray(v)) {
8
+ if (v.length === 2)
9
+ return [v[0], v[1], v[0], v[1]];
10
+ if (v.length === 4)
11
+ return [v[0], v[1], v[2], v[3]];
12
+ }
13
+ else {
14
+ return [v.top ?? 0, v.right ?? 0, v.bottom ?? 0, v.left ?? 0];
15
+ }
16
+ return null;
17
+ }
18
+ export function parseSize(v) {
19
+ if (v === undefined)
20
+ return null;
21
+ if (typeof v === "number")
22
+ return { kind: "px", value: v };
23
+ const m = /^(-?\d+(?:\.\d+)?)%$/.exec(v);
24
+ if (m)
25
+ return { kind: "pct", value: Number.parseFloat(m[1] ?? "0") };
26
+ return null;
27
+ }
28
+ function flexDirection(v) {
29
+ switch (v) {
30
+ case "row":
31
+ return FLEX_DIRECTION_ROW;
32
+ case "column":
33
+ return FLEX_DIRECTION_COLUMN;
34
+ case "row-reverse":
35
+ return FLEX_DIRECTION_ROW_REVERSE;
36
+ case "column-reverse":
37
+ return FLEX_DIRECTION_COLUMN_REVERSE;
38
+ }
39
+ }
40
+ function justifyContent(v) {
41
+ switch (v) {
42
+ case "flex-start":
43
+ return JUSTIFY_FLEX_START;
44
+ case "center":
45
+ return JUSTIFY_CENTER;
46
+ case "flex-end":
47
+ return JUSTIFY_FLEX_END;
48
+ case "space-between":
49
+ return JUSTIFY_SPACE_BETWEEN;
50
+ case "space-around":
51
+ return JUSTIFY_SPACE_AROUND;
52
+ case "space-evenly":
53
+ return JUSTIFY_SPACE_EVENLY;
54
+ }
55
+ }
56
+ function alignItems(v) {
57
+ switch (v) {
58
+ case "flex-start":
59
+ return ALIGN_FLEX_START;
60
+ case "center":
61
+ return ALIGN_CENTER;
62
+ case "flex-end":
63
+ return ALIGN_FLEX_END;
64
+ case "stretch":
65
+ return ALIGN_STRETCH;
66
+ }
67
+ }
68
+ function alignSelfValue(v) {
69
+ return v === "auto" ? ALIGN_AUTO : alignItems(v);
70
+ }
71
+ const EDGE_BY_INDEX = [EDGE_TOP, EDGE_RIGHT, EDGE_BOTTOM, EDGE_LEFT];
72
+ export function applyEdges(node, edges, setter) {
73
+ if (!edges)
74
+ return;
75
+ for (let i = 0; i < 4; i++) {
76
+ const e = EDGE_BY_INDEX[i];
77
+ const val = edges[i];
78
+ if (e !== undefined && val !== undefined)
79
+ node[setter](e, val);
80
+ }
81
+ }
82
+ export function applySize(node, w, h) {
83
+ const pw = parseSize(w);
84
+ const ph = parseSize(h);
85
+ if (pw) {
86
+ if (pw.kind === "px")
87
+ node.setWidth(pw.value);
88
+ else
89
+ node.setWidthPercent(pw.value);
90
+ }
91
+ if (ph) {
92
+ if (ph.kind === "px")
93
+ node.setHeight(ph.value);
94
+ else
95
+ node.setHeightPercent(ph.value);
96
+ }
97
+ }
98
+ export function applyContainerProps(node, props) {
99
+ node.setFlexDirection(flexDirection(props.flexDirection ?? "row"));
100
+ if (props.justifyContent)
101
+ node.setJustifyContent(justifyContent(props.justifyContent));
102
+ if (props.alignItems)
103
+ node.setAlignItems(alignItems(props.alignItems));
104
+ if (props.gap !== undefined)
105
+ node.setGap(GUTTER_ALL, props.gap);
106
+ applyEdges(node, normalizeEdges(props.padding), "setPadding");
107
+ }
108
+ export function applyChildProps(node, props) {
109
+ if (props.flexGrow !== undefined)
110
+ node.setFlexGrow(props.flexGrow);
111
+ if (props.flexShrink !== undefined)
112
+ node.setFlexShrink(props.flexShrink);
113
+ if (props.flexBasis !== undefined)
114
+ node.setFlexBasis(props.flexBasis);
115
+ if (props.alignSelf !== undefined)
116
+ node.setAlignSelf(alignSelfValue(props.alignSelf));
117
+ applyEdges(node, normalizeEdges(props.margin), "setMargin");
118
+ }
119
+ export function setTextMeasure(node, text, parentIsColumn) {
120
+ if (text.attrs.wrap === undefined)
121
+ text.wrap("word");
122
+ node.setMeasureFunc((arg0, _wMode, arg2) => {
123
+ // flexily quirk: from the flex-basis path, args are (mainAxis, mainMode, crossAxis, crossMode).
124
+ // For a column parent, the cross-axis (width we want to wrap to) is the THIRD arg.
125
+ const widthCandidates = parentIsColumn ? [arg2, arg0] : [arg0, arg2];
126
+ let avail = 0;
127
+ for (const c of widthCandidates) {
128
+ if (Number.isFinite(c) && c > 0) {
129
+ avail = c;
130
+ break;
131
+ }
132
+ }
133
+ const w = avail > 0 ? avail : 1e9;
134
+ const prevWidth = text.attrs.width;
135
+ text.width(w);
136
+ const ti = text;
137
+ ti._setTextData();
138
+ const lines = ti.textArr.length || 1;
139
+ const fontSize = text.fontSize();
140
+ const lineHeight = text.lineHeight();
141
+ const padding = text.padding() ?? 0;
142
+ const longest = ti.textArr.reduce((m, l) => Math.max(m, l.width), 0);
143
+ // Konva's per-line width (a sum of word widths) can fall a subpixel short of
144
+ // the width actually needed to render that line without wrapping. Writing the
145
+ // measured width back verbatim would then force a spurious extra wrap (e.g. a
146
+ // short label spilling its last word onto a second line), so round up.
147
+ const measuredW = Math.ceil(longest) + padding * 2 + 1;
148
+ const measuredH = lines * fontSize * lineHeight + padding * 2;
149
+ text.setAttr("width", prevWidth);
150
+ return { width: Math.min(measuredW, w), height: measuredH };
151
+ });
152
+ }
153
+ export function setTextWrapperMeasure(node, wrapper, parentIsColumn) {
154
+ node.setMeasureFunc((arg0, _wMode, arg2) => {
155
+ // Same flexily arg quirk as setTextMeasure: for a column parent the wrap
156
+ // width is the cross-axis (third) arg.
157
+ const widthCandidates = parentIsColumn ? [arg2, arg0] : [arg0, arg2];
158
+ let avail = 0;
159
+ for (const c of widthCandidates) {
160
+ if (Number.isFinite(c) && c > 0) {
161
+ avail = c;
162
+ break;
163
+ }
164
+ }
165
+ const { width, height } = wrapper._measureForFlex(avail > 0 ? avail : 1e9);
166
+ return { width: avail > 0 ? Math.min(width, avail) : width, height };
167
+ });
168
+ }
169
+ export function setImageMeasure(node, image) {
170
+ const src = image.image();
171
+ let w = 0;
172
+ let h = 0;
173
+ if (src && "naturalWidth" in src) {
174
+ w = src.naturalWidth;
175
+ h = src.naturalHeight;
176
+ }
177
+ else if (src) {
178
+ w = src.width;
179
+ h = src.height;
180
+ }
181
+ if (w > 0 && h > 0) {
182
+ node.setMeasureFunc(() => ({ width: w, height: h }));
183
+ }
184
+ }
185
+ export { FlexilyNode };
186
+ //# sourceMappingURL=flex-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flex-engine.js","sourceRoot":"","sources":["../src/flex-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import type Konva from "konva";
2
+ export type FlexDirection = "row" | "column" | "row-reverse" | "column-reverse";
3
+ export type Justify = "flex-start" | "center" | "flex-end" | "space-between" | "space-around" | "space-evenly";
4
+ export type Align = "flex-start" | "center" | "flex-end" | "stretch";
5
+ export type AlignSelf = "auto" | Align;
6
+ export type EdgeValue = number | [number, number] | [number, number, number, number] | {
7
+ top?: number;
8
+ right?: number;
9
+ bottom?: number;
10
+ left?: number;
11
+ };
12
+ export type EdgeColor = string | [string, string] | [string, string, string, string] | {
13
+ top?: string;
14
+ right?: string;
15
+ bottom?: string;
16
+ left?: string;
17
+ };
18
+ export type SizeValue = number | `${number}%`;
19
+ export type FlexProps = {
20
+ flexDirection?: FlexDirection;
21
+ justifyContent?: Justify;
22
+ alignItems?: Align;
23
+ gap?: number;
24
+ padding?: EdgeValue;
25
+ };
26
+ export type FlexChildProps = {
27
+ flexGrow?: number;
28
+ flexShrink?: number;
29
+ flexBasis?: number;
30
+ alignSelf?: AlignSelf;
31
+ margin?: EdgeValue;
32
+ };
33
+ export type GradientStop = [number, string];
34
+ export type GradientBackground = {
35
+ gradient: {
36
+ type: "linear" | "radial";
37
+ stops: GradientStop[];
38
+ angle?: number;
39
+ };
40
+ };
41
+ export type BackgroundValue = string | GradientBackground;
42
+ export type ShadowProps = {
43
+ color?: string;
44
+ blur?: number;
45
+ offsetX?: number;
46
+ offsetY?: number;
47
+ opacity?: number;
48
+ };
49
+ export type FlexConfig = Omit<Konva.GroupConfig, "width" | "height"> & FlexProps & FlexChildProps & {
50
+ width?: SizeValue;
51
+ height?: SizeValue;
52
+ };
53
+ export type BlockConfig = Omit<Konva.GroupConfig, "width" | "height"> & FlexProps & FlexChildProps & {
54
+ width?: SizeValue;
55
+ height?: SizeValue;
56
+ borderSize?: EdgeValue;
57
+ borderColor?: EdgeColor;
58
+ borderStyle?: "solid" | "dashed";
59
+ shadow?: ShadowProps;
60
+ background?: BackgroundValue;
61
+ cornerRadius?: number | number[];
62
+ };
63
+ export type TextAlign = "left" | "center" | "right" | "justify";
64
+ /** Auto-size the font so the text fits its box (`fitText`). */
65
+ export type FitConfig = {
66
+ /** Smallest font size to try (px). */
67
+ min: number;
68
+ /** Largest font size to try (px). */
69
+ max: number;
70
+ /** Binary-search precision in px. Default 0.5. */
71
+ step?: number;
72
+ };
73
+ /** Built-in typewriter reveal effect. */
74
+ export type TypewriterConfig = {
75
+ /** Reveal granularity. Default "letter". */
76
+ mode?: "letter" | "word";
77
+ /** Units (letters or words) revealed per frame when `durationInFrames` is unset. Default 1. */
78
+ step?: number;
79
+ /** Spread the full reveal evenly across this many frames (overrides `step`). */
80
+ durationInFrames?: number;
81
+ /**
82
+ * Delay before the reveal begins, in local frames. Lets one Sequence drive
83
+ * many staggered typewriters (e.g. chat messages typed one after another).
84
+ * Default 0.
85
+ */
86
+ startFrame?: number;
87
+ /** Blinking caret at the reveal head. Off by default. */
88
+ cursor?: boolean | {
89
+ color?: string;
90
+ /** Caret width in px. Default 2. */
91
+ width?: number;
92
+ /** Blink on/off. Default true. */
93
+ blink?: boolean;
94
+ /** Frames per blink half-cycle. Default 16. */
95
+ blinkPeriodInFrames?: number;
96
+ /** Hide the caret once the whole text is revealed. Default false. */
97
+ hideWhenDone?: boolean;
98
+ };
99
+ /** Fade each freshly revealed unit in. Off by default. */
100
+ fade?: boolean | {
101
+ /** Per-unit fade length in frames. Default 4. */
102
+ durationInFrames?: number;
103
+ easing?: (t: number) => number;
104
+ };
105
+ /** Reserve the full text height up front so the box never reflows as it types. Default true. */
106
+ reserveHeight?: boolean;
107
+ };
108
+ /** A highlighter mark drawn behind a character range. */
109
+ export type HighlightConfig = {
110
+ /** Start char index (inclusive), measured on the full text, emoji-safe. */
111
+ start: number;
112
+ /** End char index (exclusive). */
113
+ end: number;
114
+ /** Marker fill drawn behind the run. */
115
+ background: string;
116
+ /** Optional text color override inside the run. */
117
+ color?: string;
118
+ /** Extra width before the run start only — never added at a wrapped line break. */
119
+ paddingStart?: number;
120
+ /** Extra width after the run end only — never added at a wrapped line break. */
121
+ paddingEnd?: number;
122
+ /** Mark height in px, capped at the line height. Default: full line height. */
123
+ height?: number | "line";
124
+ /** Corner radius at the true run start only — never rounded at a wrapped line break. */
125
+ cornerRadiusStart?: number;
126
+ /** Corner radius at the true run end only — never rounded at a wrapped line break. */
127
+ cornerRadiusEnd?: number;
128
+ /** 0..1 sweep reveal of the mark (animate this per frame). Default 1 (fully shown). */
129
+ progress?: number;
130
+ };
131
+ export type TextConfig = Omit<Konva.GroupConfig, "width" | "height" | "text"> & FlexChildProps & {
132
+ /** Text content. */
133
+ text: string;
134
+ width?: SizeValue;
135
+ height?: SizeValue;
136
+ maxWidth?: number;
137
+ maxHeight?: number;
138
+ fontSize?: number;
139
+ fontFamily?: string;
140
+ fontStyle?: string;
141
+ fill?: string;
142
+ align?: TextAlign;
143
+ lineHeight?: number;
144
+ letterSpacing?: number;
145
+ padding?: number;
146
+ wrap?: "word" | "char" | "none";
147
+ ellipsis?: boolean;
148
+ fitText?: FitConfig;
149
+ maxLines?: number;
150
+ /** How to cut overflow before the ellipsis. Default "word". */
151
+ trimBy?: "word" | "letter";
152
+ typewriter?: TypewriterConfig;
153
+ highlights?: HighlightConfig[];
154
+ };
155
+ export type ObjectFit = "cover" | "contain" | "fill" | "none";
156
+ export type ObjectPosition = "center" | "top" | "bottom" | "left" | "right" | "top left" | "top right" | "bottom left" | "bottom right";
157
+ export type ImageConfig = Omit<Konva.GroupConfig, "width" | "height"> & FlexChildProps & {
158
+ width?: SizeValue;
159
+ height?: SizeValue;
160
+ src: HTMLImageElement | string;
161
+ objectFit?: ObjectFit;
162
+ objectPosition?: ObjectPosition;
163
+ cornerRadius?: number | number[];
164
+ };
165
+ //# sourceMappingURL=flex-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flex-types.d.ts","sourceRoot":"","sources":["../src/flex-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=flex-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flex-types.js","sourceRoot":"","sources":["../src/flex-types.ts"],"names":[],"mappings":""}
package/dist/flex.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ import Konva from "konva";
2
+ import { FlexilyNode } from "./flex-engine.js";
3
+ import type { FlexConfig } from "./flex-types.js";
4
+ export declare class Flex extends Konva.Group {
5
+ constructor(config: FlexConfig);
6
+ computeLayout(): void;
7
+ }
8
+ /**
9
+ * Lay out a Konva.Group as a Flexily root: build the layout tree from the
10
+ * group's attrs + children, compute, and write positions/sizes back.
11
+ *
12
+ * When `alwaysSetSize` is true the group's own width/height are always pulled
13
+ * from the computed content size — needed for a hug-content root that draws a
14
+ * background (Block) so the background isn't 0×0. Flex passes false, preserving
15
+ * its behavior of only writing self-size when an explicit px size is given.
16
+ */
17
+ export declare function layoutRoot(group: Konva.Group, alwaysSetSize: boolean): void;
18
+ type Pair = {
19
+ konva: Konva.Node;
20
+ flex: ReturnType<typeof FlexilyNode.create>;
21
+ isContainer: boolean;
22
+ };
23
+ export declare function buildChildren(children: readonly Konva.Node[], parentFlex: ReturnType<typeof FlexilyNode.create>, pairs: Pair[], parentDirection?: string): void;
24
+ export declare function writeBack(pairs: Pair[]): void;
25
+ export {};
26
+ //# sourceMappingURL=flex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flex.d.ts","sourceRoot":"","sources":["../src/flex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,WAAW,EAQZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAkB,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AA2BxF,qBAAa,IAAK,SAAQ,KAAK,CAAC,KAAK;gBACvB,MAAM,EAAE,UAAU;IAkB9B,aAAa,IAAI,IAAI;CAGtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI,CAkB3E;AAED,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAWF,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,SAAS,KAAK,CAAC,IAAI,EAAE,EAC/B,UAAU,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,EACjD,KAAK,EAAE,IAAI,EAAE,EACb,eAAe,SAAQ,GACtB,IAAI,CAqDN;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAuB7C"}
package/dist/flex.js ADDED
@@ -0,0 +1,179 @@
1
+ import { DIRECTION_LTR } from "flexily/classic";
2
+ import Konva from "konva";
3
+ import { Block } from "./block.js";
4
+ import { FlexilyNode, applyChildProps, applyContainerProps, applySize, parseSize, setImageMeasure, setTextMeasure, setTextWrapperMeasure, } from "./flex-engine.js";
5
+ import { Image as KMImage } from "./image.js";
6
+ import { Text as KMText } from "./text.js";
7
+ const FLEX_KEYS = [
8
+ "flexDirection",
9
+ "justifyContent",
10
+ "alignItems",
11
+ "gap",
12
+ "padding",
13
+ "flexGrow",
14
+ "flexShrink",
15
+ "flexBasis",
16
+ "alignSelf",
17
+ "margin",
18
+ ];
19
+ function pickKonvaConfig(config) {
20
+ const out = { ...config };
21
+ for (const k of FLEX_KEYS)
22
+ delete out[k];
23
+ const w = parseSize(config.width);
24
+ const h = parseSize(config.height);
25
+ out.width = w?.kind === "px" ? w.value : undefined;
26
+ out.height = h?.kind === "px" ? h.value : undefined;
27
+ return out;
28
+ }
29
+ export class Flex extends Konva.Group {
30
+ constructor(config) {
31
+ super(pickKonvaConfig(config));
32
+ this.setAttrs({
33
+ flexDirection: config.flexDirection,
34
+ justifyContent: config.justifyContent,
35
+ alignItems: config.alignItems,
36
+ gap: config.gap,
37
+ padding: config.padding,
38
+ flexGrow: config.flexGrow,
39
+ flexShrink: config.flexShrink,
40
+ flexBasis: config.flexBasis,
41
+ alignSelf: config.alignSelf,
42
+ margin: config.margin,
43
+ flexWidth: config.width,
44
+ flexHeight: config.height,
45
+ });
46
+ }
47
+ computeLayout() {
48
+ layoutRoot(this, false);
49
+ }
50
+ }
51
+ /**
52
+ * Lay out a Konva.Group as a Flexily root: build the layout tree from the
53
+ * group's attrs + children, compute, and write positions/sizes back.
54
+ *
55
+ * When `alwaysSetSize` is true the group's own width/height are always pulled
56
+ * from the computed content size — needed for a hug-content root that draws a
57
+ * background (Block) so the background isn't 0×0. Flex passes false, preserving
58
+ * its behavior of only writing self-size when an explicit px size is given.
59
+ */
60
+ export function layoutRoot(group, alwaysSetSize) {
61
+ const w = readPixelSize(group.attrs.flexWidth);
62
+ const h = readPixelSize(group.attrs.flexHeight);
63
+ const root = FlexilyNode.create();
64
+ applyContainerProps(root, group.attrs);
65
+ if (w > 0)
66
+ root.setWidth(w);
67
+ if (h > 0)
68
+ root.setHeight(h);
69
+ const pairs = [];
70
+ buildChildren(group.getChildren(), root, pairs, group.attrs.flexDirection ?? "row");
71
+ root.calculateLayout(w > 0 ? w : undefined, h > 0 ? h : undefined, DIRECTION_LTR);
72
+ if (alwaysSetSize || w > 0)
73
+ group.width(root.getComputedWidth());
74
+ if (alwaysSetSize || h > 0)
75
+ group.height(root.getComputedHeight());
76
+ writeBack(pairs);
77
+ root.freeRecursive();
78
+ }
79
+ function readPixelSize(sizeAttr) {
80
+ const parsed = parseSize(sizeAttr);
81
+ if (parsed?.kind === "px")
82
+ return parsed.value;
83
+ // No explicit px size → hug content. Return 0 (not the node's current Konva
84
+ // size): falling back to the last-computed size would pin a hug-content root
85
+ // to its first-tick height and stop it re-growing as children change size.
86
+ return 0;
87
+ }
88
+ export function buildChildren(children, parentFlex, pairs, parentDirection = "row") {
89
+ // Skip the Block background rect and any hidden child (display:none semantics —
90
+ // an invisible node takes no layout space, so staggered/toggled children don't
91
+ // leave gaps).
92
+ const laidOut = children.filter((c) => !c.attrs.__blockBg && c.visible() !== false);
93
+ const parentIsColumn = parentDirection.startsWith("column");
94
+ laidOut.forEach((child, i) => {
95
+ const node = FlexilyNode.create();
96
+ applyChildProps(node, child.attrs);
97
+ if (child instanceof Flex || child instanceof Block) {
98
+ const props = child.attrs;
99
+ applyContainerProps(node, props);
100
+ applySize(node, child.attrs.flexWidth, child.attrs.flexHeight);
101
+ buildChildren(child.getChildren(), node, pairs, props.flexDirection ?? "row");
102
+ pairs.push({ konva: child, flex: node, isContainer: true });
103
+ }
104
+ else if (child instanceof KMImage) {
105
+ applySize(node, child.attrs.flexWidth, child.attrs.flexHeight);
106
+ pairs.push({ konva: child, flex: node, isContainer: true });
107
+ }
108
+ else if (child instanceof KMText) {
109
+ // Wrapper text: intrinsic size comes from measuring (fit/clamp aware).
110
+ if (child.attrs.flexWidth === undefined &&
111
+ child.attrs.maxWidth === undefined &&
112
+ parentIsColumn) {
113
+ node.setWidthPercent(100);
114
+ }
115
+ else {
116
+ applySize(node, child.attrs.flexWidth, undefined);
117
+ }
118
+ setTextWrapperMeasure(node, child, parentIsColumn);
119
+ pairs.push({ konva: child, flex: node, isContainer: true });
120
+ }
121
+ else if (child instanceof Konva.Text) {
122
+ if (child.attrs.flexWidth === undefined && parentIsColumn)
123
+ node.setWidthPercent(100);
124
+ else
125
+ applySize(node, child.attrs.flexWidth, undefined);
126
+ setTextMeasure(node, child, parentIsColumn);
127
+ pairs.push({ konva: child, flex: node, isContainer: false });
128
+ }
129
+ else if (child instanceof Konva.Image) {
130
+ applySize(node, child.attrs.flexWidth, child.attrs.flexHeight);
131
+ if (child.attrs.flexWidth === undefined && child.attrs.flexHeight === undefined) {
132
+ setImageMeasure(node, child);
133
+ }
134
+ pairs.push({ konva: child, flex: node, isContainer: false });
135
+ }
136
+ else {
137
+ const w = child.attrs.width;
138
+ const h = child.attrs.height;
139
+ if (typeof w === "number" && w > 0)
140
+ node.setWidth(w);
141
+ if (typeof h === "number" && h > 0)
142
+ node.setHeight(h);
143
+ pairs.push({ konva: child, flex: node, isContainer: false });
144
+ }
145
+ parentFlex.insertChild(node, i);
146
+ });
147
+ }
148
+ export function writeBack(pairs) {
149
+ for (const { konva, flex, isContainer } of pairs) {
150
+ konva.x(flex.getComputedLeft());
151
+ konva.y(flex.getComputedTop());
152
+ const w = flex.getComputedWidth();
153
+ const h = flex.getComputedHeight();
154
+ if (isContainer) {
155
+ konva.width(w);
156
+ konva.height(h);
157
+ if (konva instanceof Block)
158
+ konva._layoutBackground();
159
+ else if (konva instanceof KMImage)
160
+ konva._layoutImage();
161
+ else if (konva instanceof KMText)
162
+ konva._layoutText();
163
+ }
164
+ else if (konva instanceof Konva.Text) {
165
+ if (konva.attrs.wrap === undefined)
166
+ konva.wrap("word");
167
+ konva.width(w);
168
+ }
169
+ else if (!(konva instanceof Konva.Image)) {
170
+ konva.width(w);
171
+ konva.height(h);
172
+ }
173
+ else {
174
+ konva.width(w);
175
+ konva.height(h);
176
+ }
177
+ }
178
+ }
179
+ //# sourceMappingURL=flex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flex.js","sourceRoot":"","sources":["../src/flex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import Konva from "konva";
2
+ import type { ImageConfig } from "./flex-types.js";
3
+ export declare class Image extends Konva.Group {
4
+ private readonly _img;
5
+ private _source;
6
+ constructor(config: ImageConfig);
7
+ /** @internal */
8
+ _layoutImage(): void;
9
+ }
10
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,WAAW,EAAwC,MAAM,iBAAiB,CAAC;AAkCzF,qBAAa,KAAM,SAAQ,KAAK,CAAC,KAAK;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,OAAO,CAAiC;gBAEpC,MAAM,EAAE,WAAW;IAyC/B,gBAAgB;IAChB,YAAY,IAAI,IAAI;CA0CrB"}