@number10/jsx-core 5.0.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 (340) hide show
  1. package/LICENSE +667 -0
  2. package/README.md +38 -0
  3. package/dist/animation/animated-signal.cjs +19 -0
  4. package/dist/animation/animated-signal.cjs.map +1 -0
  5. package/dist/animation/animated-signal.d.ts +35 -0
  6. package/dist/animation/animated-signal.d.ts.map +1 -0
  7. package/dist/animation/animated-signal.js +19 -0
  8. package/dist/animation/animated-signal.js.map +1 -0
  9. package/dist/animation/create-spring.cjs +80 -0
  10. package/dist/animation/create-spring.cjs.map +1 -0
  11. package/dist/animation/create-spring.d.ts +56 -0
  12. package/dist/animation/create-spring.d.ts.map +1 -0
  13. package/dist/animation/create-spring.js +80 -0
  14. package/dist/animation/create-spring.js.map +1 -0
  15. package/dist/animation/easing.cjs +76 -0
  16. package/dist/animation/easing.cjs.map +1 -0
  17. package/dist/animation/easing.d.ts +45 -0
  18. package/dist/animation/easing.d.ts.map +1 -0
  19. package/dist/animation/easing.js +76 -0
  20. package/dist/animation/easing.js.map +1 -0
  21. package/dist/animation/effect-definitions.cjs +441 -0
  22. package/dist/animation/effect-definitions.cjs.map +1 -0
  23. package/dist/animation/effect-definitions.d.ts +60 -0
  24. package/dist/animation/effect-definitions.d.ts.map +1 -0
  25. package/dist/animation/effect-definitions.js +441 -0
  26. package/dist/animation/effect-definitions.js.map +1 -0
  27. package/dist/animation/effect-engine.cjs +189 -0
  28. package/dist/animation/effect-engine.cjs.map +1 -0
  29. package/dist/animation/effect-engine.d.ts +70 -0
  30. package/dist/animation/effect-engine.d.ts.map +1 -0
  31. package/dist/animation/effect-engine.js +189 -0
  32. package/dist/animation/effect-engine.js.map +1 -0
  33. package/dist/animation/index.d.ts +24 -0
  34. package/dist/animation/index.d.ts.map +1 -0
  35. package/dist/animation/spring-physics.cjs +94 -0
  36. package/dist/animation/spring-physics.cjs.map +1 -0
  37. package/dist/animation/spring-physics.d.ts +145 -0
  38. package/dist/animation/spring-physics.d.ts.map +1 -0
  39. package/dist/animation/spring-physics.js +94 -0
  40. package/dist/animation/spring-physics.js.map +1 -0
  41. package/dist/animation/tween.cjs +67 -0
  42. package/dist/animation/tween.cjs.map +1 -0
  43. package/dist/animation/tween.d.ts +60 -0
  44. package/dist/animation/tween.d.ts.map +1 -0
  45. package/dist/animation/tween.js +67 -0
  46. package/dist/animation/tween.js.map +1 -0
  47. package/dist/animation/types.d.ts +31 -0
  48. package/dist/animation/types.d.ts.map +1 -0
  49. package/dist/animation/useSpring.cjs +152 -0
  50. package/dist/animation/useSpring.cjs.map +1 -0
  51. package/dist/animation/useSpring.d.ts +55 -0
  52. package/dist/animation/useSpring.d.ts.map +1 -0
  53. package/dist/animation/useSpring.js +149 -0
  54. package/dist/animation/useSpring.js.map +1 -0
  55. package/dist/animation/useTween.cjs +208 -0
  56. package/dist/animation/useTween.cjs.map +1 -0
  57. package/dist/animation/useTween.d.ts +116 -0
  58. package/dist/animation/useTween.d.ts.map +1 -0
  59. package/dist/animation/useTween.js +208 -0
  60. package/dist/animation/useTween.js.map +1 -0
  61. package/dist/border-geometry.cjs +447 -0
  62. package/dist/border-geometry.cjs.map +1 -0
  63. package/dist/border-geometry.d.ts +114 -0
  64. package/dist/border-geometry.d.ts.map +1 -0
  65. package/dist/border-geometry.js +447 -0
  66. package/dist/border-geometry.js.map +1 -0
  67. package/dist/colors/color-presets.cjs +236 -0
  68. package/dist/colors/color-presets.cjs.map +1 -0
  69. package/dist/colors/color-presets.d.ts +89 -0
  70. package/dist/colors/color-presets.d.ts.map +1 -0
  71. package/dist/colors/color-presets.js +236 -0
  72. package/dist/colors/color-presets.js.map +1 -0
  73. package/dist/colors/color-theme-helpers.cjs +32 -0
  74. package/dist/colors/color-theme-helpers.cjs.map +1 -0
  75. package/dist/colors/color-theme-helpers.d.ts +65 -0
  76. package/dist/colors/color-theme-helpers.d.ts.map +1 -0
  77. package/dist/colors/color-theme-helpers.js +32 -0
  78. package/dist/colors/color-theme-helpers.js.map +1 -0
  79. package/dist/colors/color-types.cjs +38 -0
  80. package/dist/colors/color-types.cjs.map +1 -0
  81. package/dist/colors/color-types.d.ts +112 -0
  82. package/dist/colors/color-types.d.ts.map +1 -0
  83. package/dist/colors/color-types.js +38 -0
  84. package/dist/colors/color-types.js.map +1 -0
  85. package/dist/colors/color-utils.cjs +197 -0
  86. package/dist/colors/color-utils.cjs.map +1 -0
  87. package/dist/colors/color-utils.d.ts +216 -0
  88. package/dist/colors/color-utils.d.ts.map +1 -0
  89. package/dist/colors/color-utils.js +197 -0
  90. package/dist/colors/color-utils.js.map +1 -0
  91. package/dist/colors/contrast-contracts.cjs +265 -0
  92. package/dist/colors/contrast-contracts.cjs.map +1 -0
  93. package/dist/colors/contrast-contracts.d.ts +289 -0
  94. package/dist/colors/contrast-contracts.d.ts.map +1 -0
  95. package/dist/colors/contrast-contracts.js +265 -0
  96. package/dist/colors/contrast-contracts.js.map +1 -0
  97. package/dist/colors/index.cjs +55 -0
  98. package/dist/colors/index.cjs.map +1 -0
  99. package/dist/colors/index.d.ts +16 -0
  100. package/dist/colors/index.d.ts.map +1 -0
  101. package/dist/colors/index.js +55 -0
  102. package/dist/colors/index.js.map +1 -0
  103. package/dist/core-props.cjs +66 -0
  104. package/dist/core-props.cjs.map +1 -0
  105. package/dist/core-props.d.ts +395 -0
  106. package/dist/core-props.d.ts.map +1 -0
  107. package/dist/core-props.js +66 -0
  108. package/dist/core-props.js.map +1 -0
  109. package/dist/design-tokens/design-token-presets.cjs +91 -0
  110. package/dist/design-tokens/design-token-presets.cjs.map +1 -0
  111. package/dist/design-tokens/design-token-presets.d.ts +34 -0
  112. package/dist/design-tokens/design-token-presets.d.ts.map +1 -0
  113. package/dist/design-tokens/design-token-presets.js +91 -0
  114. package/dist/design-tokens/design-token-presets.js.map +1 -0
  115. package/dist/design-tokens/design-token-types.d.ts +97 -0
  116. package/dist/design-tokens/design-token-types.d.ts.map +1 -0
  117. package/dist/design-tokens/index.cjs +10 -0
  118. package/dist/design-tokens/index.cjs.map +1 -0
  119. package/dist/design-tokens/index.d.ts +9 -0
  120. package/dist/design-tokens/index.d.ts.map +1 -0
  121. package/dist/design-tokens/index.js +10 -0
  122. package/dist/design-tokens/index.js.map +1 -0
  123. package/dist/dev-config.cjs +296 -0
  124. package/dist/dev-config.cjs.map +1 -0
  125. package/dist/dev-config.d.ts +238 -0
  126. package/dist/dev-config.d.ts.map +1 -0
  127. package/dist/dev-config.js +296 -0
  128. package/dist/dev-config.js.map +1 -0
  129. package/dist/effects.cjs +69 -0
  130. package/dist/effects.cjs.map +1 -0
  131. package/dist/effects.d.ts +152 -0
  132. package/dist/effects.d.ts.map +1 -0
  133. package/dist/effects.js +69 -0
  134. package/dist/effects.js.map +1 -0
  135. package/dist/global-registry.cjs +25 -0
  136. package/dist/global-registry.cjs.map +1 -0
  137. package/dist/global-registry.d.ts +19 -0
  138. package/dist/global-registry.d.ts.map +1 -0
  139. package/dist/global-registry.js +25 -0
  140. package/dist/global-registry.js.map +1 -0
  141. package/dist/hooks.cjs +378 -0
  142. package/dist/hooks.cjs.map +1 -0
  143. package/dist/hooks.d.ts +322 -0
  144. package/dist/hooks.d.ts.map +1 -0
  145. package/dist/hooks.js +378 -0
  146. package/dist/hooks.js.map +1 -0
  147. package/dist/host-adapter.d.ts +414 -0
  148. package/dist/host-adapter.d.ts.map +1 -0
  149. package/dist/index.cjs +229 -0
  150. package/dist/index.cjs.map +1 -0
  151. package/dist/index.d.ts +32 -0
  152. package/dist/index.d.ts.map +1 -0
  153. package/dist/index.js +226 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/jsx-dev-runtime.cjs +10 -0
  156. package/dist/jsx-dev-runtime.cjs.map +1 -0
  157. package/dist/jsx-dev-runtime.d.ts +5 -0
  158. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  159. package/dist/jsx-dev-runtime.js +11 -0
  160. package/dist/jsx-dev-runtime.js.map +1 -0
  161. package/dist/jsx-runtime.cjs +44 -0
  162. package/dist/jsx-runtime.cjs.map +1 -0
  163. package/dist/jsx-runtime.d.ts +24 -0
  164. package/dist/jsx-runtime.d.ts.map +1 -0
  165. package/dist/jsx-runtime.js +44 -0
  166. package/dist/jsx-runtime.js.map +1 -0
  167. package/dist/jsx-types.d.ts +25 -0
  168. package/dist/jsx-types.d.ts.map +1 -0
  169. package/dist/layout/appliers/container-applier.cjs +20 -0
  170. package/dist/layout/appliers/container-applier.cjs.map +1 -0
  171. package/dist/layout/appliers/container-applier.d.ts +9 -0
  172. package/dist/layout/appliers/container-applier.d.ts.map +1 -0
  173. package/dist/layout/appliers/container-applier.js +20 -0
  174. package/dist/layout/appliers/container-applier.js.map +1 -0
  175. package/dist/layout/appliers/position-applier.cjs +31 -0
  176. package/dist/layout/appliers/position-applier.cjs.map +1 -0
  177. package/dist/layout/appliers/position-applier.d.ts +8 -0
  178. package/dist/layout/appliers/position-applier.d.ts.map +1 -0
  179. package/dist/layout/appliers/position-applier.js +31 -0
  180. package/dist/layout/appliers/position-applier.js.map +1 -0
  181. package/dist/layout/layout-engine-test-utils.d.ts +26 -0
  182. package/dist/layout/layout-engine-test-utils.d.ts.map +1 -0
  183. package/dist/layout/layout-engine.cjs +628 -0
  184. package/dist/layout/layout-engine.cjs.map +1 -0
  185. package/dist/layout/layout-engine.d.ts +140 -0
  186. package/dist/layout/layout-engine.d.ts.map +1 -0
  187. package/dist/layout/layout-engine.js +628 -0
  188. package/dist/layout/layout-engine.js.map +1 -0
  189. package/dist/layout/strategies/base-strategy.cjs +31 -0
  190. package/dist/layout/strategies/base-strategy.cjs.map +1 -0
  191. package/dist/layout/strategies/base-strategy.d.ts +59 -0
  192. package/dist/layout/strategies/base-strategy.d.ts.map +1 -0
  193. package/dist/layout/strategies/base-strategy.js +31 -0
  194. package/dist/layout/strategies/base-strategy.js.map +1 -0
  195. package/dist/layout/strategies/column-layout.cjs +145 -0
  196. package/dist/layout/strategies/column-layout.cjs.map +1 -0
  197. package/dist/layout/strategies/column-layout.d.ts +38 -0
  198. package/dist/layout/strategies/column-layout.d.ts.map +1 -0
  199. package/dist/layout/strategies/column-layout.js +145 -0
  200. package/dist/layout/strategies/column-layout.js.map +1 -0
  201. package/dist/layout/strategies/row-layout.cjs +145 -0
  202. package/dist/layout/strategies/row-layout.cjs.map +1 -0
  203. package/dist/layout/strategies/row-layout.d.ts +38 -0
  204. package/dist/layout/strategies/row-layout.d.ts.map +1 -0
  205. package/dist/layout/strategies/row-layout.js +145 -0
  206. package/dist/layout/strategies/row-layout.js.map +1 -0
  207. package/dist/layout/strategies/stack-layout.cjs +94 -0
  208. package/dist/layout/strategies/stack-layout.cjs.map +1 -0
  209. package/dist/layout/strategies/stack-layout.d.ts +30 -0
  210. package/dist/layout/strategies/stack-layout.d.ts.map +1 -0
  211. package/dist/layout/strategies/stack-layout.js +94 -0
  212. package/dist/layout/strategies/stack-layout.js.map +1 -0
  213. package/dist/layout/types.d.ts +134 -0
  214. package/dist/layout/types.d.ts.map +1 -0
  215. package/dist/layout/utils/child-utils.cjs +129 -0
  216. package/dist/layout/utils/child-utils.cjs.map +1 -0
  217. package/dist/layout/utils/child-utils.d.ts +54 -0
  218. package/dist/layout/utils/child-utils.d.ts.map +1 -0
  219. package/dist/layout/utils/child-utils.js +129 -0
  220. package/dist/layout/utils/child-utils.js.map +1 -0
  221. package/dist/layout/utils/dimension-calculator.cjs +109 -0
  222. package/dist/layout/utils/dimension-calculator.cjs.map +1 -0
  223. package/dist/layout/utils/dimension-calculator.d.ts +59 -0
  224. package/dist/layout/utils/dimension-calculator.d.ts.map +1 -0
  225. package/dist/layout/utils/dimension-calculator.js +109 -0
  226. package/dist/layout/utils/dimension-calculator.js.map +1 -0
  227. package/dist/layout/utils/flex-distributor.cjs +173 -0
  228. package/dist/layout/utils/flex-distributor.cjs.map +1 -0
  229. package/dist/layout/utils/flex-distributor.d.ts +18 -0
  230. package/dist/layout/utils/flex-distributor.d.ts.map +1 -0
  231. package/dist/layout/utils/flex-distributor.js +173 -0
  232. package/dist/layout/utils/flex-distributor.js.map +1 -0
  233. package/dist/layout/utils/size-resolver.cjs +280 -0
  234. package/dist/layout/utils/size-resolver.cjs.map +1 -0
  235. package/dist/layout/utils/size-resolver.d.ts +84 -0
  236. package/dist/layout/utils/size-resolver.d.ts.map +1 -0
  237. package/dist/layout/utils/size-resolver.js +280 -0
  238. package/dist/layout/utils/size-resolver.js.map +1 -0
  239. package/dist/layout/utils/spacing-calculator.cjs +50 -0
  240. package/dist/layout/utils/spacing-calculator.cjs.map +1 -0
  241. package/dist/layout/utils/spacing-calculator.d.ts +27 -0
  242. package/dist/layout/utils/spacing-calculator.d.ts.map +1 -0
  243. package/dist/layout/utils/spacing-calculator.js +50 -0
  244. package/dist/layout/utils/spacing-calculator.js.map +1 -0
  245. package/dist/memo.cjs +18 -0
  246. package/dist/memo.cjs.map +1 -0
  247. package/dist/memo.d.ts +29 -0
  248. package/dist/memo.d.ts.map +1 -0
  249. package/dist/memo.js +18 -0
  250. package/dist/memo.js.map +1 -0
  251. package/dist/nineslice-contract.cjs +60 -0
  252. package/dist/nineslice-contract.cjs.map +1 -0
  253. package/dist/nineslice-contract.d.ts +107 -0
  254. package/dist/nineslice-contract.d.ts.map +1 -0
  255. package/dist/nineslice-contract.js +60 -0
  256. package/dist/nineslice-contract.js.map +1 -0
  257. package/dist/placeholder.cjs +12 -0
  258. package/dist/placeholder.cjs.map +1 -0
  259. package/dist/placeholder.d.ts +44 -0
  260. package/dist/placeholder.d.ts.map +1 -0
  261. package/dist/placeholder.js +12 -0
  262. package/dist/placeholder.js.map +1 -0
  263. package/dist/portal.cjs +89 -0
  264. package/dist/portal.cjs.map +1 -0
  265. package/dist/portal.d.ts +62 -0
  266. package/dist/portal.d.ts.map +1 -0
  267. package/dist/portal.js +89 -0
  268. package/dist/portal.js.map +1 -0
  269. package/dist/primitive-contracts.cjs +12 -0
  270. package/dist/primitive-contracts.cjs.map +1 -0
  271. package/dist/primitive-contracts.d.ts +186 -0
  272. package/dist/primitive-contracts.d.ts.map +1 -0
  273. package/dist/primitive-contracts.js +12 -0
  274. package/dist/primitive-contracts.js.map +1 -0
  275. package/dist/theme.cjs +332 -0
  276. package/dist/theme.cjs.map +1 -0
  277. package/dist/theme.d.ts +204 -0
  278. package/dist/theme.d.ts.map +1 -0
  279. package/dist/theme.js +332 -0
  280. package/dist/theme.js.map +1 -0
  281. package/dist/types.d.ts +86 -0
  282. package/dist/types.d.ts.map +1 -0
  283. package/dist/vdom/create-runtime.cjs +79 -0
  284. package/dist/vdom/create-runtime.cjs.map +1 -0
  285. package/dist/vdom/create-runtime.d.ts +7 -0
  286. package/dist/vdom/create-runtime.d.ts.map +1 -0
  287. package/dist/vdom/create-runtime.js +79 -0
  288. package/dist/vdom/create-runtime.js.map +1 -0
  289. package/dist/vdom/index.cjs +8 -0
  290. package/dist/vdom/index.cjs.map +1 -0
  291. package/dist/vdom/index.d.ts +4 -0
  292. package/dist/vdom/index.d.ts.map +1 -0
  293. package/dist/vdom/index.js +8 -0
  294. package/dist/vdom/index.js.map +1 -0
  295. package/dist/vdom/mount.cjs +161 -0
  296. package/dist/vdom/mount.cjs.map +1 -0
  297. package/dist/vdom/mount.d.ts +6 -0
  298. package/dist/vdom/mount.d.ts.map +1 -0
  299. package/dist/vdom/mount.js +161 -0
  300. package/dist/vdom/mount.js.map +1 -0
  301. package/dist/vdom/patch.cjs +163 -0
  302. package/dist/vdom/patch.cjs.map +1 -0
  303. package/dist/vdom/patch.d.ts +3 -0
  304. package/dist/vdom/patch.d.ts.map +1 -0
  305. package/dist/vdom/patch.js +163 -0
  306. package/dist/vdom/patch.js.map +1 -0
  307. package/dist/vdom/registry.cjs +85 -0
  308. package/dist/vdom/registry.cjs.map +1 -0
  309. package/dist/vdom/registry.d.ts +28 -0
  310. package/dist/vdom/registry.d.ts.map +1 -0
  311. package/dist/vdom/registry.js +85 -0
  312. package/dist/vdom/registry.js.map +1 -0
  313. package/dist/vdom/runtime-helpers.cjs +23 -0
  314. package/dist/vdom/runtime-helpers.cjs.map +1 -0
  315. package/dist/vdom/runtime-helpers.d.ts +8 -0
  316. package/dist/vdom/runtime-helpers.d.ts.map +1 -0
  317. package/dist/vdom/runtime-helpers.js +23 -0
  318. package/dist/vdom/runtime-helpers.js.map +1 -0
  319. package/dist/vdom/surface.cjs +107 -0
  320. package/dist/vdom/surface.cjs.map +1 -0
  321. package/dist/vdom/surface.d.ts +9 -0
  322. package/dist/vdom/surface.d.ts.map +1 -0
  323. package/dist/vdom/surface.js +107 -0
  324. package/dist/vdom/surface.js.map +1 -0
  325. package/dist/vdom/types.d.ts +104 -0
  326. package/dist/vdom/types.d.ts.map +1 -0
  327. package/dist/vdom/utils.cjs +146 -0
  328. package/dist/vdom/utils.cjs.map +1 -0
  329. package/dist/vdom/utils.d.ts +24 -0
  330. package/dist/vdom/utils.d.ts.map +1 -0
  331. package/dist/vdom/utils.js +146 -0
  332. package/dist/vdom/utils.js.map +1 -0
  333. package/dist/vdom.d.ts +4 -0
  334. package/dist/vdom.d.ts.map +1 -0
  335. package/dist/vector-draw-context.d.ts +63 -0
  336. package/dist/vector-draw-context.d.ts.map +1 -0
  337. package/package.json +161 -0
  338. package/vdom/index.cjs +1 -0
  339. package/vdom/index.d.ts +1 -0
  340. package/vdom/index.js +1 -0
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("../jsx-runtime.cjs");
4
+ const theme = require("../theme.cjs");
5
+ const LAYOUT_PROPS = [
6
+ "width",
7
+ "height",
8
+ "minWidth",
9
+ "maxWidth",
10
+ "minHeight",
11
+ "maxHeight",
12
+ "flex",
13
+ "margin",
14
+ "padding",
15
+ "gap",
16
+ "direction",
17
+ "justifyContent",
18
+ "alignItems",
19
+ "overflow",
20
+ "visible"
21
+ ];
22
+ function normalizeVNodeLike(rendered) {
23
+ if (!rendered) return null;
24
+ if (Array.isArray(rendered)) {
25
+ const flat = rendered.flat(Infinity);
26
+ return { type: jsxRuntime.Fragment, props: {}, children: flat };
27
+ }
28
+ return rendered;
29
+ }
30
+ function createElement(type, props, ...children) {
31
+ const flat = [].concat(...children).filter((c) => c != null);
32
+ return { type, props: props ?? {}, children: flat };
33
+ }
34
+ function flattenChildren(children) {
35
+ if (!children) return [];
36
+ return children.flat(Infinity);
37
+ }
38
+ function shouldSkipChild(child) {
39
+ if (child == null || child === false) return true;
40
+ if (typeof child === "string") {
41
+ return child.trim() === "";
42
+ }
43
+ return false;
44
+ }
45
+ function attachRef(ref, value) {
46
+ if (!ref) return;
47
+ if (typeof ref === "function") {
48
+ ref(value);
49
+ } else {
50
+ ref.current = value;
51
+ }
52
+ }
53
+ function applyThemeToChild(child, parentTheme, nestedTheme) {
54
+ if (Object.keys(nestedTheme).length > 0) {
55
+ const mergedTheme = child.__theme ? theme.mergeThemes(nestedTheme, child.__theme) : nestedTheme;
56
+ return setVNodePropSafe(child, "__theme", mergedTheme);
57
+ }
58
+ if (!child.__theme && parentTheme) {
59
+ return setVNodePropSafe(child, "__theme", parentTheme);
60
+ }
61
+ return child;
62
+ }
63
+ function readVNodeLayoutSize(vnode) {
64
+ if (!vnode) return null;
65
+ const node = vnode.__node;
66
+ if (typeof node?.__getLayoutSize === "function") {
67
+ const size = node.__getLayoutSize();
68
+ return {
69
+ width: Number.isFinite(size.width) ? size.width : 0,
70
+ height: Number.isFinite(size.height) ? size.height : 0
71
+ };
72
+ }
73
+ const ctx = vnode.__ctx;
74
+ return ctx?.vnode ? readVNodeLayoutSize(ctx.vnode) : null;
75
+ }
76
+ function hasLayoutPropsChanged(oldV, newV) {
77
+ const oldProps = oldV.props ?? {};
78
+ const newProps = newV.props ?? {};
79
+ for (const prop of LAYOUT_PROPS) {
80
+ const oldVal = oldProps[prop];
81
+ const newVal = newProps[prop];
82
+ if (!deepEqual(oldVal, newVal)) {
83
+ return true;
84
+ }
85
+ }
86
+ return false;
87
+ }
88
+ function withChildrenProps(vnode) {
89
+ return vnode.children?.length ? { ...vnode.props ?? {}, children: vnode.children } : vnode.props;
90
+ }
91
+ function setVNodePropSafe(vnode, key, value) {
92
+ if (Object.isExtensible(vnode)) {
93
+ vnode[key] = value;
94
+ return vnode;
95
+ }
96
+ return { ...vnode, [key]: value };
97
+ }
98
+ function isLayoutContainer(value) {
99
+ return !!value && typeof value === "object" && Array.isArray(value.list);
100
+ }
101
+ function getLayoutParent(container) {
102
+ if (container.__layoutParent) return container.__layoutParent;
103
+ if (container.parent) return container.parent;
104
+ const parentContainer = container.parentContainer;
105
+ return parentContainer;
106
+ }
107
+ function isObjectKey(value) {
108
+ return typeof value === "object" && value !== null;
109
+ }
110
+ function deepEqual(a, b) {
111
+ if (Object.is(a, b)) return true;
112
+ if (a == null || b == null) return false;
113
+ if (typeof a !== "object" || typeof b !== "object") return false;
114
+ if (Array.isArray(a) || Array.isArray(b)) {
115
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
116
+ for (let i = 0; i < a.length; i++) {
117
+ if (!deepEqual(a[i], b[i])) return false;
118
+ }
119
+ return true;
120
+ }
121
+ const keysA = Object.keys(a);
122
+ const keysB = Object.keys(b);
123
+ if (keysA.length !== keysB.length) return false;
124
+ for (const key of keysA) {
125
+ if (!Object.prototype.hasOwnProperty.call(b, key)) return false;
126
+ if (!deepEqual(a[key], b[key])) {
127
+ return false;
128
+ }
129
+ }
130
+ return true;
131
+ }
132
+ exports.applyThemeToChild = applyThemeToChild;
133
+ exports.attachRef = attachRef;
134
+ exports.createElement = createElement;
135
+ exports.deepEqual = deepEqual;
136
+ exports.flattenChildren = flattenChildren;
137
+ exports.getLayoutParent = getLayoutParent;
138
+ exports.hasLayoutPropsChanged = hasLayoutPropsChanged;
139
+ exports.isLayoutContainer = isLayoutContainer;
140
+ exports.isObjectKey = isObjectKey;
141
+ exports.normalizeVNodeLike = normalizeVNodeLike;
142
+ exports.readVNodeLayoutSize = readVNodeLayoutSize;
143
+ exports.setVNodePropSafe = setVNodePropSafe;
144
+ exports.shouldSkipChild = shouldSkipChild;
145
+ exports.withChildrenProps = withChildrenProps;
146
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sources":["../../src/vdom/utils.ts"],"sourcesContent":["import type { HostParent } from '../host-adapter'\nimport { Fragment } from '../jsx-runtime'\nimport type { LayoutContainer } from '../layout/types'\nimport { mergeThemes, type PartialTheme } from '../theme'\nimport type { VNode, VNodeLike } from '../types'\nimport type { VDOMHookContext } from './types'\n\nconst LAYOUT_PROPS = [\n 'width',\n 'height',\n 'minWidth',\n 'maxWidth',\n 'minHeight',\n 'maxHeight',\n 'flex',\n 'margin',\n 'padding',\n 'gap',\n 'direction',\n 'justifyContent',\n 'alignItems',\n 'overflow',\n 'visible',\n] as const\n\nexport function normalizeVNodeLike(rendered: VNodeLike): VNode | null {\n if (!rendered) return null\n if (Array.isArray(rendered)) {\n const flat = (rendered as unknown[]).flat(Infinity) as (VNode | null | undefined | false)[]\n return { type: Fragment, props: {}, children: flat }\n }\n return rendered as VNode\n}\n\nexport function createElement(\n type: string | ((props: Record<string, unknown>) => VNode),\n props: Record<string, unknown> | null,\n ...children: VNode[]\n): VNode {\n const flat = ([] as unknown[]).concat(...children).filter((c) => c != null)\n return { type, props: props ?? {}, children: flat as VNode[] }\n}\n\nexport function flattenChildren(\n children: (VNode | null | false | undefined)[] | undefined\n): (VNode | null | false | undefined)[] {\n if (!children) return []\n return children.flat(Infinity) as (VNode | null | false | undefined)[]\n}\n\nexport function shouldSkipChild(child: unknown): boolean {\n if (child == null || child === false) return true\n if (typeof child === 'string') {\n return child.trim() === ''\n }\n return false\n}\n\nexport function attachRef<T>(\n ref: { current: T | null } | ((value: T | null) => void) | undefined,\n value: T | null\n): void {\n if (!ref) return\n if (typeof ref === 'function') {\n ref(value)\n } else {\n ref.current = value\n }\n}\n\nexport function applyThemeToChild(\n child: VNode,\n parentTheme: PartialTheme | undefined,\n nestedTheme: PartialTheme\n): VNode {\n if (Object.keys(nestedTheme).length > 0) {\n const mergedTheme = child.__theme\n ? mergeThemes(nestedTheme, child.__theme as PartialTheme)\n : nestedTheme\n return setVNodePropSafe(child, '__theme', mergedTheme)\n }\n if (!child.__theme && parentTheme) {\n return setVNodePropSafe(child, '__theme', parentTheme)\n }\n return child\n}\n\nexport function readVNodeLayoutSize(\n vnode: VNode | null | undefined\n): { width: number; height: number } | null {\n if (!vnode) return null\n\n const node = vnode.__node as\n | {\n __getLayoutSize?: () => { width: number; height: number }\n }\n | undefined\n if (typeof node?.__getLayoutSize === 'function') {\n const size = node.__getLayoutSize()\n return {\n width: Number.isFinite(size.width) ? size.width : 0,\n height: Number.isFinite(size.height) ? size.height : 0,\n }\n }\n\n const ctx = vnode.__ctx as VDOMHookContext | undefined\n return ctx?.vnode ? readVNodeLayoutSize(ctx.vnode) : null\n}\n\nexport function hasLayoutPropsChanged(oldV: VNode, newV: VNode): boolean {\n const oldProps = oldV.props ?? {}\n const newProps = newV.props ?? {}\n\n for (const prop of LAYOUT_PROPS) {\n const oldVal = oldProps[prop]\n const newVal = newProps[prop]\n if (!deepEqual(oldVal, newVal)) {\n return true\n }\n }\n\n return false\n}\n\nexport function withChildrenProps(vnode: VNode): Record<string, unknown> | undefined {\n return vnode.children?.length ? { ...(vnode.props ?? {}), children: vnode.children } : vnode.props\n}\n\nexport function setVNodePropSafe<T extends VNode, K extends keyof VNode>(\n vnode: T,\n key: K,\n value: VNode[K]\n): T {\n if (Object.isExtensible(vnode)) {\n ;(vnode as VNode)[key] = value\n return vnode\n }\n return { ...vnode, [key]: value } as T\n}\n\nexport function isLayoutContainer(value: unknown): value is LayoutContainer {\n return !!value && typeof value === 'object' && Array.isArray((value as LayoutContainer).list)\n}\n\nexport function getLayoutParent(container: LayoutContainer): HostParent | undefined {\n if (container.__layoutParent) return container.__layoutParent as HostParent\n if (container.parent) return container.parent\n const parentContainer = (container as Record<string, unknown>).parentContainer\n return parentContainer as HostParent | undefined\n}\n\nexport function isObjectKey(value: unknown): value is object {\n return typeof value === 'object' && value !== null\n}\n\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true\n if (a == null || b == null) return false\n if (typeof a !== 'object' || typeof b !== 'object') return false\n\n if (Array.isArray(a) || Array.isArray(b)) {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false\n }\n return true\n }\n\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if (!deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])) {\n return false\n }\n }\n\n return true\n}\n"],"names":["Fragment","mergeThemes"],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { HostParent } from '../host-adapter';
2
+ import { LayoutContainer } from '../layout/types';
3
+ import { PartialTheme } from '../theme';
4
+ import { VNode, VNodeLike } from '../types';
5
+ export declare function normalizeVNodeLike(rendered: VNodeLike): VNode | null;
6
+ export declare function createElement(type: string | ((props: Record<string, unknown>) => VNode), props: Record<string, unknown> | null, ...children: VNode[]): VNode;
7
+ export declare function flattenChildren(children: (VNode | null | false | undefined)[] | undefined): (VNode | null | false | undefined)[];
8
+ export declare function shouldSkipChild(child: unknown): boolean;
9
+ export declare function attachRef<T>(ref: {
10
+ current: T | null;
11
+ } | ((value: T | null) => void) | undefined, value: T | null): void;
12
+ export declare function applyThemeToChild(child: VNode, parentTheme: PartialTheme | undefined, nestedTheme: PartialTheme): VNode;
13
+ export declare function readVNodeLayoutSize(vnode: VNode | null | undefined): {
14
+ width: number;
15
+ height: number;
16
+ } | null;
17
+ export declare function hasLayoutPropsChanged(oldV: VNode, newV: VNode): boolean;
18
+ export declare function withChildrenProps(vnode: VNode): Record<string, unknown> | undefined;
19
+ export declare function setVNodePropSafe<T extends VNode, K extends keyof VNode>(vnode: T, key: K, value: VNode[K]): T;
20
+ export declare function isLayoutContainer(value: unknown): value is LayoutContainer;
21
+ export declare function getLayoutParent(container: LayoutContainer): HostParent | undefined;
22
+ export declare function isObjectKey(value: unknown): value is object;
23
+ export declare function deepEqual(a: unknown, b: unknown): boolean;
24
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/vdom/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,UAAU,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAqBhD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI,CAOpE;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC,EAC1D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACrC,GAAG,QAAQ,EAAE,KAAK,EAAE,GACnB,KAAK,CAGP;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS,GACzD,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC,EAAE,CAGtC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvD;AAED,wBAAgB,SAAS,CAAC,CAAC,EACzB,GAAG,EAAE;IAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,EACpE,KAAK,EAAE,CAAC,GAAG,IAAI,GACd,IAAI,CAON;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,YAAY,GAAG,SAAS,EACrC,WAAW,EAAE,YAAY,GACxB,KAAK,CAWP;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAC9B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkB1C;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAavE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAEnF;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,MAAM,KAAK,EACrE,KAAK,EAAE,CAAC,EACR,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GACd,CAAC,CAMH;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,eAAe,GAAG,UAAU,GAAG,SAAS,CAKlF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE3D;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAyBzD"}
@@ -0,0 +1,146 @@
1
+ import { Fragment } from "../jsx-runtime.js";
2
+ import { mergeThemes } from "../theme.js";
3
+ const LAYOUT_PROPS = [
4
+ "width",
5
+ "height",
6
+ "minWidth",
7
+ "maxWidth",
8
+ "minHeight",
9
+ "maxHeight",
10
+ "flex",
11
+ "margin",
12
+ "padding",
13
+ "gap",
14
+ "direction",
15
+ "justifyContent",
16
+ "alignItems",
17
+ "overflow",
18
+ "visible"
19
+ ];
20
+ function normalizeVNodeLike(rendered) {
21
+ if (!rendered) return null;
22
+ if (Array.isArray(rendered)) {
23
+ const flat = rendered.flat(Infinity);
24
+ return { type: Fragment, props: {}, children: flat };
25
+ }
26
+ return rendered;
27
+ }
28
+ function createElement(type, props, ...children) {
29
+ const flat = [].concat(...children).filter((c) => c != null);
30
+ return { type, props: props ?? {}, children: flat };
31
+ }
32
+ function flattenChildren(children) {
33
+ if (!children) return [];
34
+ return children.flat(Infinity);
35
+ }
36
+ function shouldSkipChild(child) {
37
+ if (child == null || child === false) return true;
38
+ if (typeof child === "string") {
39
+ return child.trim() === "";
40
+ }
41
+ return false;
42
+ }
43
+ function attachRef(ref, value) {
44
+ if (!ref) return;
45
+ if (typeof ref === "function") {
46
+ ref(value);
47
+ } else {
48
+ ref.current = value;
49
+ }
50
+ }
51
+ function applyThemeToChild(child, parentTheme, nestedTheme) {
52
+ if (Object.keys(nestedTheme).length > 0) {
53
+ const mergedTheme = child.__theme ? mergeThemes(nestedTheme, child.__theme) : nestedTheme;
54
+ return setVNodePropSafe(child, "__theme", mergedTheme);
55
+ }
56
+ if (!child.__theme && parentTheme) {
57
+ return setVNodePropSafe(child, "__theme", parentTheme);
58
+ }
59
+ return child;
60
+ }
61
+ function readVNodeLayoutSize(vnode) {
62
+ if (!vnode) return null;
63
+ const node = vnode.__node;
64
+ if (typeof node?.__getLayoutSize === "function") {
65
+ const size = node.__getLayoutSize();
66
+ return {
67
+ width: Number.isFinite(size.width) ? size.width : 0,
68
+ height: Number.isFinite(size.height) ? size.height : 0
69
+ };
70
+ }
71
+ const ctx = vnode.__ctx;
72
+ return ctx?.vnode ? readVNodeLayoutSize(ctx.vnode) : null;
73
+ }
74
+ function hasLayoutPropsChanged(oldV, newV) {
75
+ const oldProps = oldV.props ?? {};
76
+ const newProps = newV.props ?? {};
77
+ for (const prop of LAYOUT_PROPS) {
78
+ const oldVal = oldProps[prop];
79
+ const newVal = newProps[prop];
80
+ if (!deepEqual(oldVal, newVal)) {
81
+ return true;
82
+ }
83
+ }
84
+ return false;
85
+ }
86
+ function withChildrenProps(vnode) {
87
+ return vnode.children?.length ? { ...vnode.props ?? {}, children: vnode.children } : vnode.props;
88
+ }
89
+ function setVNodePropSafe(vnode, key, value) {
90
+ if (Object.isExtensible(vnode)) {
91
+ vnode[key] = value;
92
+ return vnode;
93
+ }
94
+ return { ...vnode, [key]: value };
95
+ }
96
+ function isLayoutContainer(value) {
97
+ return !!value && typeof value === "object" && Array.isArray(value.list);
98
+ }
99
+ function getLayoutParent(container) {
100
+ if (container.__layoutParent) return container.__layoutParent;
101
+ if (container.parent) return container.parent;
102
+ const parentContainer = container.parentContainer;
103
+ return parentContainer;
104
+ }
105
+ function isObjectKey(value) {
106
+ return typeof value === "object" && value !== null;
107
+ }
108
+ function deepEqual(a, b) {
109
+ if (Object.is(a, b)) return true;
110
+ if (a == null || b == null) return false;
111
+ if (typeof a !== "object" || typeof b !== "object") return false;
112
+ if (Array.isArray(a) || Array.isArray(b)) {
113
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
114
+ for (let i = 0; i < a.length; i++) {
115
+ if (!deepEqual(a[i], b[i])) return false;
116
+ }
117
+ return true;
118
+ }
119
+ const keysA = Object.keys(a);
120
+ const keysB = Object.keys(b);
121
+ if (keysA.length !== keysB.length) return false;
122
+ for (const key of keysA) {
123
+ if (!Object.prototype.hasOwnProperty.call(b, key)) return false;
124
+ if (!deepEqual(a[key], b[key])) {
125
+ return false;
126
+ }
127
+ }
128
+ return true;
129
+ }
130
+ export {
131
+ applyThemeToChild,
132
+ attachRef,
133
+ createElement,
134
+ deepEqual,
135
+ flattenChildren,
136
+ getLayoutParent,
137
+ hasLayoutPropsChanged,
138
+ isLayoutContainer,
139
+ isObjectKey,
140
+ normalizeVNodeLike,
141
+ readVNodeLayoutSize,
142
+ setVNodePropSafe,
143
+ shouldSkipChild,
144
+ withChildrenProps
145
+ };
146
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../src/vdom/utils.ts"],"sourcesContent":["import type { HostParent } from '../host-adapter'\nimport { Fragment } from '../jsx-runtime'\nimport type { LayoutContainer } from '../layout/types'\nimport { mergeThemes, type PartialTheme } from '../theme'\nimport type { VNode, VNodeLike } from '../types'\nimport type { VDOMHookContext } from './types'\n\nconst LAYOUT_PROPS = [\n 'width',\n 'height',\n 'minWidth',\n 'maxWidth',\n 'minHeight',\n 'maxHeight',\n 'flex',\n 'margin',\n 'padding',\n 'gap',\n 'direction',\n 'justifyContent',\n 'alignItems',\n 'overflow',\n 'visible',\n] as const\n\nexport function normalizeVNodeLike(rendered: VNodeLike): VNode | null {\n if (!rendered) return null\n if (Array.isArray(rendered)) {\n const flat = (rendered as unknown[]).flat(Infinity) as (VNode | null | undefined | false)[]\n return { type: Fragment, props: {}, children: flat }\n }\n return rendered as VNode\n}\n\nexport function createElement(\n type: string | ((props: Record<string, unknown>) => VNode),\n props: Record<string, unknown> | null,\n ...children: VNode[]\n): VNode {\n const flat = ([] as unknown[]).concat(...children).filter((c) => c != null)\n return { type, props: props ?? {}, children: flat as VNode[] }\n}\n\nexport function flattenChildren(\n children: (VNode | null | false | undefined)[] | undefined\n): (VNode | null | false | undefined)[] {\n if (!children) return []\n return children.flat(Infinity) as (VNode | null | false | undefined)[]\n}\n\nexport function shouldSkipChild(child: unknown): boolean {\n if (child == null || child === false) return true\n if (typeof child === 'string') {\n return child.trim() === ''\n }\n return false\n}\n\nexport function attachRef<T>(\n ref: { current: T | null } | ((value: T | null) => void) | undefined,\n value: T | null\n): void {\n if (!ref) return\n if (typeof ref === 'function') {\n ref(value)\n } else {\n ref.current = value\n }\n}\n\nexport function applyThemeToChild(\n child: VNode,\n parentTheme: PartialTheme | undefined,\n nestedTheme: PartialTheme\n): VNode {\n if (Object.keys(nestedTheme).length > 0) {\n const mergedTheme = child.__theme\n ? mergeThemes(nestedTheme, child.__theme as PartialTheme)\n : nestedTheme\n return setVNodePropSafe(child, '__theme', mergedTheme)\n }\n if (!child.__theme && parentTheme) {\n return setVNodePropSafe(child, '__theme', parentTheme)\n }\n return child\n}\n\nexport function readVNodeLayoutSize(\n vnode: VNode | null | undefined\n): { width: number; height: number } | null {\n if (!vnode) return null\n\n const node = vnode.__node as\n | {\n __getLayoutSize?: () => { width: number; height: number }\n }\n | undefined\n if (typeof node?.__getLayoutSize === 'function') {\n const size = node.__getLayoutSize()\n return {\n width: Number.isFinite(size.width) ? size.width : 0,\n height: Number.isFinite(size.height) ? size.height : 0,\n }\n }\n\n const ctx = vnode.__ctx as VDOMHookContext | undefined\n return ctx?.vnode ? readVNodeLayoutSize(ctx.vnode) : null\n}\n\nexport function hasLayoutPropsChanged(oldV: VNode, newV: VNode): boolean {\n const oldProps = oldV.props ?? {}\n const newProps = newV.props ?? {}\n\n for (const prop of LAYOUT_PROPS) {\n const oldVal = oldProps[prop]\n const newVal = newProps[prop]\n if (!deepEqual(oldVal, newVal)) {\n return true\n }\n }\n\n return false\n}\n\nexport function withChildrenProps(vnode: VNode): Record<string, unknown> | undefined {\n return vnode.children?.length ? { ...(vnode.props ?? {}), children: vnode.children } : vnode.props\n}\n\nexport function setVNodePropSafe<T extends VNode, K extends keyof VNode>(\n vnode: T,\n key: K,\n value: VNode[K]\n): T {\n if (Object.isExtensible(vnode)) {\n ;(vnode as VNode)[key] = value\n return vnode\n }\n return { ...vnode, [key]: value } as T\n}\n\nexport function isLayoutContainer(value: unknown): value is LayoutContainer {\n return !!value && typeof value === 'object' && Array.isArray((value as LayoutContainer).list)\n}\n\nexport function getLayoutParent(container: LayoutContainer): HostParent | undefined {\n if (container.__layoutParent) return container.__layoutParent as HostParent\n if (container.parent) return container.parent\n const parentContainer = (container as Record<string, unknown>).parentContainer\n return parentContainer as HostParent | undefined\n}\n\nexport function isObjectKey(value: unknown): value is object {\n return typeof value === 'object' && value !== null\n}\n\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true\n if (a == null || b == null) return false\n if (typeof a !== 'object' || typeof b !== 'object') return false\n\n if (Array.isArray(a) || Array.isArray(b)) {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false\n }\n return true\n }\n\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if (!deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])) {\n return false\n }\n }\n\n return true\n}\n"],"names":[],"mappings":"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"}
package/dist/vdom.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export { createVDOMRuntime } from './vdom/create-runtime';
2
+ export { createElement, normalizeVNodeLike } from './vdom/utils';
3
+ export type { MountComponentProps, MountHandle, MountProps, MountRegistryEntry, ResolveNodePropsResult, VDOMRuntime, VDOMRuntimeBridge, } from './vdom/types';
4
+ //# sourceMappingURL=vdom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vdom.d.ts","sourceRoot":"","sources":["../src/vdom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAChE,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,iBAAiB,GAClB,MAAM,cAAc,CAAA"}
@@ -0,0 +1,63 @@
1
+ import { LayoutProps, TransformProps } from './core-props';
2
+ import { PropsDefaultExtension } from './types';
3
+ /**
4
+ * Renderer-neutral imperative 2D vector drawing contract.
5
+ *
6
+ * The API intentionally mirrors the small subset of operations used by
7
+ * portable components. Renderer adapters translate these calls to their
8
+ * native drawing objects.
9
+ *
10
+ * ## Styled variants (recommended for new code)
11
+ *
12
+ * `fillCircleStyled`, `strokeLine`, and `fillArc` carry their own colour
13
+ * and alpha — no prior {@link fillStyle} / {@link lineStyle} call is
14
+ * needed. Prefer these over the two-step stateful pattern.
15
+ */
16
+ export interface VectorDrawContext {
17
+ clear(): this;
18
+ fillStyle(color: number, alpha?: number): this;
19
+ lineStyle(width: number, color: number, alpha?: number): this;
20
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): this;
21
+ fillCircle(x: number, y: number, radius: number): this;
22
+ strokeCircle(x: number, y: number, radius: number): this;
23
+ /** Fill a circle with explicit colour (self-contained, no prior fillStyle). */
24
+ fillCircleStyled(x: number, y: number, radius: number, color: number, alpha: number): this;
25
+ fillRect(x: number, y: number, width: number, height: number): this;
26
+ strokeRect(x: number, y: number, width: number, height: number): this;
27
+ fillRoundedRect(x: number, y: number, width: number, height: number, radius: number): this;
28
+ strokeRoundedRect(x: number, y: number, width: number, height: number, radius: number): this;
29
+ beginPath(): this;
30
+ moveTo(x: number, y: number): this;
31
+ lineTo(x: number, y: number): this;
32
+ closePath(): this;
33
+ fillPath(): this;
34
+ strokePath(): this;
35
+ lineBetween(x1: number, y1: number, x2: number, y2: number): this;
36
+ /** Draw a line segment with explicit stroke (self-contained, no prior lineStyle). */
37
+ strokeLine(x1: number, y1: number, x2: number, y2: number, width: number, color: number, alpha: number): this;
38
+ /** Fill a circular-arc sector with explicit colour (self-contained). */
39
+ fillArc(cx: number, cy: number, r: number, startAngle: number, endAngle: number, color: number, alpha: number): this;
40
+ }
41
+ /**
42
+ * Portable props for renderer-neutral vector drawing content.
43
+ */
44
+ export interface VectorDrawContentPrimitiveProps extends TransformProps, LayoutProps {
45
+ /**
46
+ * Drawing callback. Receives only the renderer-neutral draw context.
47
+ */
48
+ onDraw?: (context: VectorDrawContext, props: VectorDrawContentPrimitiveProps) => void;
49
+ /**
50
+ * Clears before redraw when true or omitted.
51
+ */
52
+ autoClear?: boolean;
53
+ /**
54
+ * Redraw dependencies. Renderers shallow-compare these values.
55
+ */
56
+ dependencies?: unknown[];
57
+ }
58
+ /**
59
+ * Complete VectorDrawContent props including JSX extensions.
60
+ */
61
+ export interface VectorDrawContentPrimitivePropsComplete<TNode = unknown> extends VectorDrawContentPrimitiveProps, PropsDefaultExtension<TNode> {
62
+ }
63
+ //# sourceMappingURL=vector-draw-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-draw-context.d.ts","sourceRoot":"","sources":["../src/vector-draw-context.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,161 @@
1
+ {
2
+ "name": "@number10/jsx-core",
3
+ "version": "5.0.0",
4
+ "type": "module",
5
+ "description": "Renderer-neutral UI framework core — JSX, VDOM, hooks, theme, layout",
6
+ "author": "Michael Rieck (Michael--) <mr@number10.de>",
7
+ "license": "GPL-3.0-only",
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "source": "./src/index.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js",
16
+ "require": "./dist/index.cjs"
17
+ },
18
+ "./jsx-runtime": {
19
+ "types": "./dist/jsx-runtime.d.ts",
20
+ "source": "./src/jsx-runtime.ts",
21
+ "import": "./dist/jsx-runtime.js",
22
+ "require": "./dist/jsx-runtime.cjs"
23
+ },
24
+ "./jsx-dev-runtime": {
25
+ "types": "./dist/jsx-dev-runtime.d.ts",
26
+ "source": "./src/jsx-dev-runtime.ts",
27
+ "import": "./dist/jsx-dev-runtime.js",
28
+ "require": "./dist/jsx-dev-runtime.cjs"
29
+ },
30
+ "./core-props": {
31
+ "types": "./dist/core-props.d.ts",
32
+ "import": "./dist/core-props.js",
33
+ "require": "./dist/core-props.cjs"
34
+ },
35
+ "./primitive-contracts": {
36
+ "types": "./dist/primitive-contracts.d.ts",
37
+ "import": "./dist/primitive-contracts.js",
38
+ "require": "./dist/primitive-contracts.cjs"
39
+ },
40
+ "./hooks": {
41
+ "types": "./dist/hooks.d.ts",
42
+ "import": "./dist/hooks.js",
43
+ "require": "./dist/hooks.cjs"
44
+ },
45
+ "./theme": {
46
+ "types": "./dist/theme.d.ts",
47
+ "import": "./dist/theme.js",
48
+ "require": "./dist/theme.cjs"
49
+ },
50
+ "./dev-config": {
51
+ "types": "./dist/dev-config.d.ts",
52
+ "import": "./dist/dev-config.js",
53
+ "require": "./dist/dev-config.cjs"
54
+ },
55
+ "./memo": {
56
+ "types": "./dist/memo.d.ts",
57
+ "import": "./dist/memo.js",
58
+ "require": "./dist/memo.cjs"
59
+ },
60
+ "./colors": {
61
+ "types": "./dist/colors/index.d.ts",
62
+ "import": "./dist/colors/index.js",
63
+ "require": "./dist/colors/index.cjs"
64
+ },
65
+ "./colors/*": {
66
+ "types": "./dist/colors/*.d.ts",
67
+ "import": "./dist/colors/*.js",
68
+ "require": "./dist/colors/*.cjs"
69
+ },
70
+ "./design-tokens": {
71
+ "types": "./dist/design-tokens/index.d.ts",
72
+ "import": "./dist/design-tokens/index.js",
73
+ "require": "./dist/design-tokens/index.cjs"
74
+ },
75
+ "./design-tokens/design-token-presets": {
76
+ "types": "./dist/design-tokens/design-token-presets.d.ts",
77
+ "import": "./dist/design-tokens/design-token-presets.js",
78
+ "require": "./dist/design-tokens/design-token-presets.cjs"
79
+ },
80
+ "./design-tokens/design-token-types": {
81
+ "types": "./dist/design-tokens/design-token-types.d.ts"
82
+ },
83
+ "./layout/types": {
84
+ "types": "./dist/layout/types.d.ts"
85
+ },
86
+ "./host-adapter": {
87
+ "types": "./dist/host-adapter.d.ts"
88
+ },
89
+ "./types": {
90
+ "types": "./dist/types.d.ts"
91
+ },
92
+ "./vdom": {
93
+ "types": "./vdom/index.d.ts",
94
+ "source": "./src/vdom.ts",
95
+ "import": "./vdom/index.js",
96
+ "require": "./vdom/index.cjs"
97
+ }
98
+ },
99
+ "files": [
100
+ "dist",
101
+ "vdom",
102
+ "README.md"
103
+ ],
104
+ "keywords": [
105
+ "jsx",
106
+ "tsx",
107
+ "typescript",
108
+ "vdom",
109
+ "virtual-dom",
110
+ "hooks",
111
+ "theme",
112
+ "theme-engine",
113
+ "effects",
114
+ "effect-engine",
115
+ "layout",
116
+ "flexbox",
117
+ "renderer-neutral",
118
+ "renderer-agnostic",
119
+ "game-engine",
120
+ "game-development",
121
+ "game-ui",
122
+ "game-ui-framework",
123
+ "declarative",
124
+ "react-like",
125
+ "ui",
126
+ "ui-framework",
127
+ "portal",
128
+ "animation"
129
+ ],
130
+ "publishConfig": {
131
+ "access": "public"
132
+ },
133
+ "repository": {
134
+ "type": "git",
135
+ "url": "https://github.com/Michael--/phaserjsx",
136
+ "directory": "packages/core"
137
+ },
138
+ "homepage": "https://phaserjsx.number10.de/",
139
+ "bugs": {
140
+ "url": "https://github.com/Michael--/phaserjsx/issues"
141
+ },
142
+ "dependencies": {
143
+ "@preact/signals-core": "^1.14.2"
144
+ },
145
+ "devDependencies": {
146
+ "@preact/signals-core": "^1.14.2",
147
+ "@types/node": "^24.10.1",
148
+ "typescript": "^6.0.3",
149
+ "vite": "^7.2.7",
150
+ "vite-plugin-dts": "^4.5.4",
151
+ "vitest": "^4.1.6"
152
+ },
153
+ "scripts": {
154
+ "dev": "vite build --watch",
155
+ "build": "vite build",
156
+ "test": "vitest run",
157
+ "test:watch": "vitest",
158
+ "lint": "eslint src/",
159
+ "typecheck": "tsc --noEmit"
160
+ }
161
+ }
package/vdom/index.cjs ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('../dist/vdom/index.cjs')
@@ -0,0 +1 @@
1
+ export * from '../dist/vdom/index'
package/vdom/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from '../dist/vdom/index.js'