@rasamjs/core 0.2.0 → 0.3.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 (162) hide show
  1. package/API.md +14 -4
  2. package/CHANGELOG.md +59 -0
  3. package/COMPONENTS.md +229 -0
  4. package/README.md +39 -6
  5. package/RELEASING.md +4 -2
  6. package/dist/advanced.d.ts +1 -1
  7. package/dist/advanced.d.ts.map +1 -1
  8. package/dist/catalog/fragment.d.ts +2 -2
  9. package/dist/catalog/fragment.d.ts.map +1 -1
  10. package/dist/catalog/fragment.js.map +1 -1
  11. package/dist/changes/derived.d.ts +10 -0
  12. package/dist/changes/derived.d.ts.map +1 -0
  13. package/dist/changes/derived.js +14 -0
  14. package/dist/changes/derived.js.map +1 -0
  15. package/dist/changes/restore.d.ts.map +1 -1
  16. package/dist/changes/restore.js +22 -4
  17. package/dist/changes/restore.js.map +1 -1
  18. package/dist/changes/service.d.ts +5 -0
  19. package/dist/changes/service.d.ts.map +1 -1
  20. package/dist/changes/service.js +16 -2
  21. package/dist/changes/service.js.map +1 -1
  22. package/dist/components/changes.d.ts +34 -0
  23. package/dist/components/changes.d.ts.map +1 -0
  24. package/dist/components/changes.js +119 -0
  25. package/dist/components/changes.js.map +1 -0
  26. package/dist/components/component.d.ts +62 -0
  27. package/dist/components/component.d.ts.map +1 -0
  28. package/dist/components/component.js +355 -0
  29. package/dist/components/component.js.map +1 -0
  30. package/dist/components/decorators.d.ts +7 -0
  31. package/dist/components/decorators.d.ts.map +1 -0
  32. package/dist/components/decorators.js +81 -0
  33. package/dist/components/decorators.js.map +1 -0
  34. package/dist/components/metadata.d.ts +10 -0
  35. package/dist/components/metadata.d.ts.map +1 -0
  36. package/dist/components/metadata.js +85 -0
  37. package/dist/components/metadata.js.map +1 -0
  38. package/dist/components/registry.d.ts +24 -0
  39. package/dist/components/registry.d.ts.map +1 -0
  40. package/dist/components/registry.js +78 -0
  41. package/dist/components/registry.js.map +1 -0
  42. package/dist/components/types.d.ts +54 -0
  43. package/dist/components/types.d.ts.map +1 -0
  44. package/dist/components/types.js +2 -0
  45. package/dist/components/types.js.map +1 -0
  46. package/dist/components/view.d.ts +9 -0
  47. package/dist/components/view.d.ts.map +1 -0
  48. package/dist/components/view.js +104 -0
  49. package/dist/components/view.js.map +1 -0
  50. package/dist/components.d.ts +6 -0
  51. package/dist/components.d.ts.map +1 -0
  52. package/dist/components.js +5 -0
  53. package/dist/components.js.map +1 -0
  54. package/dist/core/node.d.ts +7 -0
  55. package/dist/core/node.d.ts.map +1 -1
  56. package/dist/core/node.js +30 -0
  57. package/dist/core/node.js.map +1 -1
  58. package/dist/interchange/clone.d.ts.map +1 -1
  59. package/dist/interchange/clone.js +3 -2
  60. package/dist/interchange/clone.js.map +1 -1
  61. package/dist/interchange/reconstruct.d.ts.map +1 -1
  62. package/dist/interchange/reconstruct.js +16 -12
  63. package/dist/interchange/reconstruct.js.map +1 -1
  64. package/dist/interchange/references.d.ts.map +1 -1
  65. package/dist/interchange/references.js +10 -4
  66. package/dist/interchange/references.js.map +1 -1
  67. package/dist/mixins/parent-internals.d.ts +6 -0
  68. package/dist/mixins/parent-internals.d.ts.map +1 -1
  69. package/dist/mixins/parent-internals.js +34 -0
  70. package/dist/mixins/parent-internals.js.map +1 -1
  71. package/dist/mixins/parent.d.ts.map +1 -1
  72. package/dist/mixins/parent.js +6 -1
  73. package/dist/mixins/parent.js.map +1 -1
  74. package/dist/mixins/types.d.ts +2 -2
  75. package/dist/mixins/types.d.ts.map +1 -1
  76. package/dist/resources/references.d.ts +2 -0
  77. package/dist/resources/references.d.ts.map +1 -1
  78. package/dist/resources/references.js +3 -3
  79. package/dist/resources/references.js.map +1 -1
  80. package/dist/services/catalog.d.ts.map +1 -1
  81. package/dist/services/catalog.js +5 -3
  82. package/dist/services/catalog.js.map +1 -1
  83. package/dist/services/defs-manager.d.ts +2 -0
  84. package/dist/services/defs-manager.d.ts.map +1 -1
  85. package/dist/services/defs-manager.js +4 -0
  86. package/dist/services/defs-manager.js.map +1 -1
  87. package/dist/services/element-key.d.ts +4 -0
  88. package/dist/services/element-key.d.ts.map +1 -0
  89. package/dist/services/element-key.js +12 -0
  90. package/dist/services/element-key.js.map +1 -0
  91. package/dist/services/initialization.d.ts +7 -0
  92. package/dist/services/initialization.d.ts.map +1 -0
  93. package/dist/services/initialization.js +27 -0
  94. package/dist/services/initialization.js.map +1 -0
  95. package/dist/services/registry.d.ts +8 -0
  96. package/dist/services/registry.d.ts.map +1 -1
  97. package/dist/services/registry.js +45 -10
  98. package/dist/services/registry.js.map +1 -1
  99. package/dist/services/types.d.ts +17 -0
  100. package/dist/services/types.d.ts.map +1 -1
  101. package/dist/template/parts.d.ts +12 -6
  102. package/dist/template/parts.d.ts.map +1 -1
  103. package/dist/template/parts.js +36 -29
  104. package/dist/template/parts.js.map +1 -1
  105. package/dist/template/render.d.ts +6 -7
  106. package/dist/template/render.d.ts.map +1 -1
  107. package/dist/template/render.js +188 -44
  108. package/dist/template/render.js.map +1 -1
  109. package/dist/template/svg-tag.d.ts +5 -1
  110. package/dist/template/svg-tag.d.ts.map +1 -1
  111. package/dist/template/svg-tag.js.map +1 -1
  112. package/dist/text/internals.d.ts +1 -0
  113. package/dist/text/internals.d.ts.map +1 -1
  114. package/dist/types/common.d.ts +27 -0
  115. package/dist/types/common.d.ts.map +1 -1
  116. package/package.json +156 -148
  117. package/reports/adoption.json +20 -20
  118. package/reports/animation-benchmark.json +612 -612
  119. package/reports/benchmark.json +40 -40
  120. package/reports/components-benchmark-before.json +10 -0
  121. package/reports/components-benchmark.json +10 -0
  122. package/reports/creation.json +26 -26
  123. package/reports/interchange-benchmark.json +85 -85
  124. package/reports/public-api-contract.json +334 -17
  125. package/reports/size-components.json +102 -0
  126. package/reports/size-parity.json +47 -34
  127. package/reports/size.json +6 -4
  128. package/reports/svgjs-comparison.json +3100 -3100
  129. package/reports/svgjs-comparison.md +16 -16
  130. package/reports/svgjs-parity-current.json +135 -42
  131. package/src/advanced.ts +1 -1
  132. package/src/catalog/fragment.ts +2 -2
  133. package/src/changes/derived.ts +19 -0
  134. package/src/changes/restore.ts +27 -4
  135. package/src/changes/service.ts +21 -6
  136. package/src/components/changes.ts +131 -0
  137. package/src/components/component.ts +401 -0
  138. package/src/components/decorators.ts +104 -0
  139. package/src/components/metadata.ts +111 -0
  140. package/src/components/registry.ts +79 -0
  141. package/src/components/types.ts +66 -0
  142. package/src/components/view.ts +123 -0
  143. package/src/components.ts +15 -0
  144. package/src/core/node.ts +32 -1
  145. package/src/interchange/clone.ts +3 -2
  146. package/src/interchange/reconstruct.ts +16 -12
  147. package/src/interchange/references.ts +12 -4
  148. package/src/mixins/parent-internals.ts +37 -0
  149. package/src/mixins/parent.ts +13 -4
  150. package/src/mixins/types.ts +2 -2
  151. package/src/resources/references.ts +5 -5
  152. package/src/services/catalog.ts +5 -3
  153. package/src/services/defs-manager.ts +5 -0
  154. package/src/services/element-key.ts +14 -0
  155. package/src/services/initialization.ts +25 -0
  156. package/src/services/registry.ts +47 -10
  157. package/src/services/types.ts +21 -0
  158. package/src/template/parts.ts +54 -39
  159. package/src/template/render.ts +211 -54
  160. package/src/template/svg-tag.ts +6 -1
  161. package/src/text/internals.ts +1 -0
  162. package/src/types/common.ts +29 -0
@@ -1,26 +1,26 @@
1
1
  # Rasam vs SVG.js
2
2
 
3
- SVG.js 3.2.8; Rasam 0.2.0 workspace. CPU: Intel(R) Core(TM) i7-10610U CPU @ 1.80GHz.
3
+ SVG.js 3.2.8; Rasam 0.3.0 workspace. CPU: Intel(R) Core(TM) i7-10610U CPU @ 1.80GHz.
4
4
 
5
5
  All timings below are medians in milliseconds. Ratios above 1 mean Rasam took longer.
6
6
 
7
7
  | Browser | Workload | Nodes | Samples | Rasam | SVG.js | Rasam / SVG.js |
8
8
  | --- | --- | ---: | ---: | ---: | ---: | ---: |
9
- | chromium 156.0.8078.4 | creation | 2000 | 15 | 9.60 | 11.90 | 0.81 |
10
- | chromium 156.0.8078.4 | creation | 8000 | 15 | 33.80 | 38.70 | 0.87 |
11
- | chromium 156.0.8078.4 | fill | 1000 | 100 | 0.43 | 1.21 | 0.36 |
12
- | chromium 156.0.8078.4 | repeated-fill | 1000 | 100 | 0.66 | 3.53 | 0.19 |
13
- | chromium 156.0.8078.4 | pointer-one | 8000 | 40 | 3.73 | 3.56 | 1.05 |
14
- | chromium 156.0.8078.4 | pointer-all | 8000 | 40 | 3.82 | 3.66 | 1.04 |
15
- | firefox 157.0 | creation | 2000 | 15 | 20.00 | 23.00 | 0.87 |
16
- | firefox 157.0 | creation | 8000 | 15 | 75.00 | 80.00 | 0.94 |
17
- | firefox 157.0 | fill | 1000 | 100 | 1.20 | 1.55 | 0.77 |
18
- | firefox 157.0 | repeated-fill | 1000 | 100 | 1.60 | 4.70 | 0.34 |
19
- | firefox 157.0 | pointer-one | 8000 | 40 | 4.30 | 3.60 | 1.19 |
20
- | firefox 157.0 | pointer-all | 8000 | 40 | 4.20 | 3.60 | 1.17 |
21
- | webkit 27.2 | creation | 2000 | 15 | 14.00 | 18.00 | 0.78 |
22
- | webkit 27.2 | creation | 8000 | 15 | 55.00 | 69.00 | 0.80 |
23
- | webkit 27.2 | fill | 1000 | 100 | 0.60 | 1.60 | 0.37 |
9
+ | chromium 156.0.8078.4 | creation | 2000 | 15 | 9.40 | 11.70 | 0.80 |
10
+ | chromium 156.0.8078.4 | creation | 8000 | 15 | 36.70 | 39.10 | 0.94 |
11
+ | chromium 156.0.8078.4 | fill | 1000 | 100 | 0.47 | 1.30 | 0.36 |
12
+ | chromium 156.0.8078.4 | repeated-fill | 1000 | 100 | 0.71 | 3.51 | 0.20 |
13
+ | chromium 156.0.8078.4 | pointer-one | 8000 | 40 | 3.82 | 3.66 | 1.04 |
14
+ | chromium 156.0.8078.4 | pointer-all | 8000 | 40 | 3.99 | 3.81 | 1.05 |
15
+ | firefox 157.0 | creation | 2000 | 15 | 19.00 | 21.00 | 0.90 |
16
+ | firefox 157.0 | creation | 8000 | 15 | 92.00 | 86.00 | 1.07 |
17
+ | firefox 157.0 | fill | 1000 | 100 | 1.20 | 1.50 | 0.80 |
18
+ | firefox 157.0 | repeated-fill | 1000 | 100 | 1.70 | 4.90 | 0.35 |
19
+ | firefox 157.0 | pointer-one | 8000 | 40 | 4.20 | 3.40 | 1.24 |
20
+ | firefox 157.0 | pointer-all | 8000 | 40 | 4.00 | 3.40 | 1.18 |
21
+ | webkit 27.2 | creation | 2000 | 15 | 13.00 | 18.00 | 0.72 |
22
+ | webkit 27.2 | creation | 8000 | 15 | 66.00 | 84.00 | 0.79 |
23
+ | webkit 27.2 | fill | 1000 | 100 | 0.70 | 1.70 | 0.41 |
24
24
  | webkit 27.2 | repeated-fill | 1000 | 100 | 0.90 | 4.90 | 0.18 |
25
25
  | webkit 27.2 | pointer-one | 8000 | 40 | 4.20 | 3.40 | 1.24 |
26
26
  | webkit 27.2 | pointer-all | 8000 | 40 | 4.20 | 3.40 | 1.24 |
@@ -1,10 +1,31 @@
1
1
  {
2
- "generatedAt": "2026-11-06T20:46:53.699Z",
3
- "revision": "a802f04c6f0965cedbd4c469fad996a445c6f878",
2
+ "generatedAt": "2026-11-07T18:31:24.666Z",
3
+ "revision": "8199249715ac19aaa2d8a287b748d8c29d0eceb9",
4
4
  "dirtyTree": [
5
- "M packages/rasam/reports/adoption.json",
5
+ "M apps/circuit/package.json",
6
+ " M apps/playground/package.json",
7
+ " M apps/react-example/package.json",
8
+ " M bun.lock",
9
+ " M packages/boolean/package.json",
10
+ " M packages/clipboard/package.json",
11
+ " M packages/connectors/API.md",
12
+ " M packages/connectors/CHANGELOG.md",
13
+ " M packages/connectors/README.md",
14
+ " M packages/connectors/RELEASING.md",
15
+ " M packages/connectors/package.json",
16
+ " M packages/editor/package.json",
17
+ " M packages/history/package.json",
18
+ " M packages/rasam/CHANGELOG.md",
19
+ " M packages/rasam/RELEASING.md",
20
+ " M packages/rasam/package.json",
21
+ " M packages/rasam/reports/adoption.json",
6
22
  " M packages/rasam/reports/creation.json",
7
- " M packages/rasam/reports/interchange-benchmark.json"
23
+ " M packages/rasam/reports/interchange-benchmark.json",
24
+ " M packages/react/package.json",
25
+ " M packages/selection/package.json",
26
+ " M packages/tools/package.json",
27
+ " M packages/transformer/package.json",
28
+ " M packages/viewport/package.json"
8
29
  ],
9
30
  "sourceFiles": [
10
31
  {
@@ -17,7 +38,7 @@
17
38
  },
18
39
  {
19
40
  "path": "src/advanced.ts",
20
- "sha256": "0db45c196e7e60bfbad07a1545f356107993eb731549284e721361d2ac4aa958"
41
+ "sha256": "876db673243af9895b06bf801b6f993a974173c36312959ca4cfbe53bd6d2955"
21
42
  },
22
43
  {
23
44
  "path": "src/animation.ts",
@@ -61,7 +82,7 @@
61
82
  },
62
83
  {
63
84
  "path": "src/catalog/fragment.ts",
64
- "sha256": "2fe9c5fc6afe742e47315bde2b8b8d953c687d12272d20ab7fa6c6d8ad9a8b67"
85
+ "sha256": "637ecc9d275a80456e64544b0e140559def48ed007e40549d19ff922564c8705"
65
86
  },
66
87
  {
67
88
  "path": "src/catalog/namespaces.ts",
@@ -79,17 +100,21 @@
79
100
  "path": "src/changes.ts",
80
101
  "sha256": "3c1270b193852d88350c84c66453bba1601a4ec6da8263c20e7a4a482982738b"
81
102
  },
103
+ {
104
+ "path": "src/changes/derived.ts",
105
+ "sha256": "95aa53801a72a0cc869cd706760c85b73295339b13e71b1e956bd4f9b3708332"
106
+ },
82
107
  {
83
108
  "path": "src/changes/mutation.ts",
84
109
  "sha256": "123f9bd35973137224c0cb802073afd72f3325af3da1f115073d8541f1b63d0d"
85
110
  },
86
111
  {
87
112
  "path": "src/changes/restore.ts",
88
- "sha256": "a8ab84b53c4b11771af26f64e17c341862c6582756a3158796137c9c3f4ce47f"
113
+ "sha256": "6ccbe21c649e6e71f32a2d75b8df581d1bd011009b1d203a1e214d0195d272b6"
89
114
  },
90
115
  {
91
116
  "path": "src/changes/service.ts",
92
- "sha256": "75d5347a4bce501bd2d691a1ead98767d9a8e7d9bb116777107689ee52abdc54"
117
+ "sha256": "c6cab7009ee7ccd49442b57aed253b495266d8ca43ae6aaf834c1413ac01a215"
93
118
  },
94
119
  {
95
120
  "path": "src/changes/state.ts",
@@ -99,6 +124,38 @@
99
124
  "path": "src/changes/types.ts",
100
125
  "sha256": "1158dc5615c62c5647cfbf3609ea7df1466819fa200b368e48a70259a30eec33"
101
126
  },
127
+ {
128
+ "path": "src/components.ts",
129
+ "sha256": "b1aeab2e742cfd83e3423ee4ba344a03e93cf3b90fa49a0ee3b1ba6a669b6c6f"
130
+ },
131
+ {
132
+ "path": "src/components/changes.ts",
133
+ "sha256": "8a519d45736851efb55af63885a67763b289d429d47eae73deab2379a214a6c2"
134
+ },
135
+ {
136
+ "path": "src/components/component.ts",
137
+ "sha256": "ad6bb7e84448ec513b5762f7630fa1385954c38032f1c1f48933406600aeb992"
138
+ },
139
+ {
140
+ "path": "src/components/decorators.ts",
141
+ "sha256": "abf31eeb3fad5251c87ef7e9888d1016c61037e3ad97faf8e35c9814b0c72717"
142
+ },
143
+ {
144
+ "path": "src/components/metadata.ts",
145
+ "sha256": "695399455449d223bb6c83b1707868bc85042ed5acd93bfc6d9d9d77e052a92a"
146
+ },
147
+ {
148
+ "path": "src/components/registry.ts",
149
+ "sha256": "fff5b210a8b0d56c4a7759d8c39f9cecb60830cb93d32dee41fb2b9484ebbba3"
150
+ },
151
+ {
152
+ "path": "src/components/types.ts",
153
+ "sha256": "0d99c682e52d374f7ff85b4f98696edc24ed18a6867f614feb5bdb1b0a9236d5"
154
+ },
155
+ {
156
+ "path": "src/components/view.ts",
157
+ "sha256": "9fea613d700a78e5f87a177bab41036a841448b5cc3f81055c8debbd67a82fd6"
158
+ },
102
159
  {
103
160
  "path": "src/core/attribute-validation.ts",
104
161
  "sha256": "9edfa9c74a71c98af542aa3f8f219773c221a8c125c8bcfbdc25383f6be17d96"
@@ -117,7 +174,7 @@
117
174
  },
118
175
  {
119
176
  "path": "src/core/node.ts",
120
- "sha256": "04772c44f25d36debe93a08bccc452c54ed1fe69b473b6c340f9077b45085932"
177
+ "sha256": "7af76b8d575591c86b40eedc4c861af96ec6c46d9ac6bf44b8da1e1362f55d46"
121
178
  },
122
179
  {
123
180
  "path": "src/core/shape.ts",
@@ -365,7 +422,7 @@
365
422
  },
366
423
  {
367
424
  "path": "src/interchange/clone.ts",
368
- "sha256": "ac5b0422f99912bd75117f6d25789ae7e86b858dee6662881a714be3aa1e21ad"
425
+ "sha256": "32a6f14d6e9a7f8326ffc67f607c7da76a8fae888fd961ab9f933336458168f1"
369
426
  },
370
427
  {
371
428
  "path": "src/interchange/dom.ts",
@@ -381,11 +438,11 @@
381
438
  },
382
439
  {
383
440
  "path": "src/interchange/reconstruct.ts",
384
- "sha256": "63d2c33010605b7635a23870a1f778f748c962979d2000dda5b5198e351cdfde"
441
+ "sha256": "f7f4bddba6ed478d2e6dfb4680048081e6fe2a2076d5246458ed078b3161a2d0"
385
442
  },
386
443
  {
387
444
  "path": "src/interchange/references.ts",
388
- "sha256": "1311a4f608a92b2a7d3a857ac6aff50066427b1b4a9e0e050062952b0a124dd0"
445
+ "sha256": "f0f67b66b889b66e8fd047684f63a174aa9e7203448d6626fdfeb67c360ff7da"
389
446
  },
390
447
  {
391
448
  "path": "src/interchange/snapshot.ts",
@@ -449,11 +506,11 @@
449
506
  },
450
507
  {
451
508
  "path": "src/mixins/parent-internals.ts",
452
- "sha256": "02d0421d9a7c966d0e0eff4b5172963844f578e1eda9cba5c2220ec8cd1652f3"
509
+ "sha256": "48491d5b332801cfbd833be2c497f543dfd49a9be25fd6deef7118dd8407eff1"
453
510
  },
454
511
  {
455
512
  "path": "src/mixins/parent.ts",
456
- "sha256": "ca04ac7b5d06fa3b523dd5940c7f898d13683dd81ec7dea1afba56d230045719"
513
+ "sha256": "40d5cc4bc2e114c71b46c4b010f3a8dd973ee26e54b5e80d57ead78498ecceba"
457
514
  },
458
515
  {
459
516
  "path": "src/mixins/placement.ts",
@@ -489,7 +546,7 @@
489
546
  },
490
547
  {
491
548
  "path": "src/mixins/types.ts",
492
- "sha256": "2182bc357f70d99b4731b1773f47fbe03eb9047d4d2dda5df23fd2df9642c53d"
549
+ "sha256": "43c0faf91768a5eb829044ad9fd947ec1332f074bd2d077e4c8c038a1084028f"
493
550
  },
494
551
  {
495
552
  "path": "src/path/path-array.ts",
@@ -541,7 +598,7 @@
541
598
  },
542
599
  {
543
600
  "path": "src/resources/references.ts",
544
- "sha256": "49a3aaba63aee99a725b67a85849a0f071c07e7f4d3b7458aa8cfc8409298895"
601
+ "sha256": "33180ab6f3a76be873c9dfb96cd72ae0f4ff3eb3b58ec34337c0114d5aa5b398"
545
602
  },
546
603
  {
547
604
  "path": "src/resources/validation.ts",
@@ -553,7 +610,7 @@
553
610
  },
554
611
  {
555
612
  "path": "src/services/catalog.ts",
556
- "sha256": "d35141083aed66903bbac9486cf96e6250a59eebc9f167ce387bc658dfba8241"
613
+ "sha256": "bd11868233bb9604062311cff9bfbacf2cf93e054dd979b5c0853e3b439ad7b2"
557
614
  },
558
615
  {
559
616
  "path": "src/services/context.ts",
@@ -561,7 +618,15 @@
561
618
  },
562
619
  {
563
620
  "path": "src/services/defs-manager.ts",
564
- "sha256": "96a72adb42bed2256ab6f1cbb6d5f3e2109e95a83cfa40b80cf4c657ef672da5"
621
+ "sha256": "627a17f2591a790180ec5e071d339d1dc81aaff5b01f5ef60378988e3b5d28d5"
622
+ },
623
+ {
624
+ "path": "src/services/element-key.ts",
625
+ "sha256": "d12670cf6a6cd51998be574e17a5d6f34283a8a83eb376adf5ac6632d4650521"
626
+ },
627
+ {
628
+ "path": "src/services/initialization.ts",
629
+ "sha256": "dcd88bf5d2e881860c3d54be79af7258b37373100c5e97a6333f579a56bb6481"
565
630
  },
566
631
  {
567
632
  "path": "src/services/mount.ts",
@@ -573,7 +638,7 @@
573
638
  },
574
639
  {
575
640
  "path": "src/services/registry.ts",
576
- "sha256": "7705ad6ce80dce79550a1efb95984aa147c2f77c91b1ab303a908012b15c3ed3"
641
+ "sha256": "7f3aa78852eb8b9d9affadff346ee15d99f5d158891fb68561f6f3da23c4cda9"
577
642
  },
578
643
  {
579
644
  "path": "src/services/scheduler.ts",
@@ -581,7 +646,7 @@
581
646
  },
582
647
  {
583
648
  "path": "src/services/types.ts",
584
- "sha256": "f8e5940c238f6c72244a2ea77ae2c88d108b19a6fa4a8d6044464019dd6a84e3"
649
+ "sha256": "965180eb8fbd1cf1a8a6958a74734f1cee28159c794e03ffbee9da3009f6ae53"
585
650
  },
586
651
  {
587
652
  "path": "src/services/viewport.ts",
@@ -593,15 +658,15 @@
593
658
  },
594
659
  {
595
660
  "path": "src/template/parts.ts",
596
- "sha256": "37b2d801ce331f4e2b4e30b3109946add6dd3c973dbc8be1205c3f49f9991576"
661
+ "sha256": "1ccd47288ac361ab07125a9e711bb8d399a067f1d8d7f07cb98c8feba560b8af"
597
662
  },
598
663
  {
599
664
  "path": "src/template/render.ts",
600
- "sha256": "41f35314ac30636680c7d4b02db28842105a147f966a30e260ee263d8593422e"
665
+ "sha256": "c8171b3ff00013d4fefd02a4cc29a9c4cb5bada096c5513871dd611fb1d79e41"
601
666
  },
602
667
  {
603
668
  "path": "src/template/svg-tag.ts",
604
- "sha256": "a273628f3a35b725cda4f66fd4a020a4ee9b2303f2fca420fe3a014f2f105d9f"
669
+ "sha256": "caa9b0c305d64f11c7046d3a70a17450df0e152e84792ab046d28e17d36f7e55"
605
670
  },
606
671
  {
607
672
  "path": "src/text.ts",
@@ -613,7 +678,7 @@
613
678
  },
614
679
  {
615
680
  "path": "src/text/internals.ts",
616
- "sha256": "13502607793e31b7d40f826bec156954ea6f93467f5ece52d29780ff3195d5bc"
681
+ "sha256": "0db863e05948307ac1cffba308c3c4992c3fc8e171058ff89b622946b943a87a"
617
682
  },
618
683
  {
619
684
  "path": "src/text/measure.ts",
@@ -661,7 +726,7 @@
661
726
  },
662
727
  {
663
728
  "path": "src/types/common.ts",
664
- "sha256": "6557c10a9222584c94b86f09edb524b7fc26633a90d7bcb0b325d845e45b1349"
729
+ "sha256": "0d6a832507a1bb7614c54896fa1437fed796533345d5648f245924e3be133bde"
665
730
  },
666
731
  {
667
732
  "path": "src/types/elements.ts",
@@ -677,7 +742,7 @@
677
742
  },
678
743
  {
679
744
  "path": "../../bun.lock",
680
- "sha256": "d38780d5a3180ba7ee8c2cc6f6ff28c0065bb650496d78f55a3db94d5ce1800f"
745
+ "sha256": "d33d090542d5ea14545f4da707e6077c1552d615bb49151fe20dd0d355000a54"
681
746
  }
682
747
  ],
683
748
  "svgjs": "3.2.8",
@@ -927,6 +992,7 @@
927
992
  "setValidatedAttributeValue",
928
993
  "toggleClass",
929
994
  "validateAttribute",
995
+ "withOwnChildren",
930
996
  "writeAttribute",
931
997
  "writeAttributes"
932
998
  ],
@@ -1086,6 +1152,7 @@
1086
1152
  "setValidatedAttributeValue",
1087
1153
  "toggleClass",
1088
1154
  "validateAttribute",
1155
+ "withOwnChildren",
1089
1156
  "writeAttribute",
1090
1157
  "writeAttributes"
1091
1158
  ],
@@ -1240,6 +1307,7 @@
1240
1307
  "setValidatedAttributeValue",
1241
1308
  "toggleClass",
1242
1309
  "validateAttribute",
1310
+ "withOwnChildren",
1243
1311
  "writeAttribute",
1244
1312
  "writeAttributes"
1245
1313
  ],
@@ -1253,6 +1321,7 @@
1253
1321
  "assertCanDestroy",
1254
1322
  "bind",
1255
1323
  "clear",
1324
+ "consumersOf",
1256
1325
  "ensureId",
1257
1326
  "geometryConsumers",
1258
1327
  "getDefs",
@@ -1418,6 +1487,7 @@
1418
1487
  "setValidatedAttributeValue",
1419
1488
  "toggleClass",
1420
1489
  "validateAttribute",
1490
+ "withOwnChildren",
1421
1491
  "writeAttribute",
1422
1492
  "writeAttributes"
1423
1493
  ],
@@ -1498,6 +1568,7 @@
1498
1568
  "setValidatedAttributeValue",
1499
1569
  "toggleClass",
1500
1570
  "validateAttribute",
1571
+ "withOwnChildren",
1501
1572
  "writeAttribute",
1502
1573
  "writeAttributes"
1503
1574
  ],
@@ -1651,6 +1722,7 @@
1651
1722
  "setValidatedAttributeValue",
1652
1723
  "toggleClass",
1653
1724
  "validateAttribute",
1725
+ "withOwnChildren",
1654
1726
  "writeAttribute",
1655
1727
  "writeAttributes"
1656
1728
  ],
@@ -1768,6 +1840,7 @@
1768
1840
  "setValidatedAttributeValue",
1769
1841
  "toggleClass",
1770
1842
  "validateAttribute",
1843
+ "withOwnChildren",
1771
1844
  "writeAttribute",
1772
1845
  "writeAttributes"
1773
1846
  ],
@@ -1842,6 +1915,7 @@
1842
1915
  "setValidatedAttributeValue",
1843
1916
  "toggleClass",
1844
1917
  "validateAttribute",
1918
+ "withOwnChildren",
1845
1919
  "writeAttribute",
1846
1920
  "writeAttributes"
1847
1921
  ],
@@ -2001,6 +2075,7 @@
2001
2075
  "setValidatedAttributeValue",
2002
2076
  "toggleClass",
2003
2077
  "validateAttribute",
2078
+ "withOwnChildren",
2004
2079
  "writeAttribute",
2005
2080
  "writeAttributes"
2006
2081
  ],
@@ -2125,6 +2200,7 @@
2125
2200
  "setValidatedAttributeValue",
2126
2201
  "toggleClass",
2127
2202
  "validateAttribute",
2203
+ "withOwnChildren",
2128
2204
  "writeAttribute",
2129
2205
  "writeAttributes"
2130
2206
  ],
@@ -2293,6 +2369,7 @@
2293
2369
  "setValidatedAttributeValue",
2294
2370
  "toggleClass",
2295
2371
  "validateAttribute",
2372
+ "withOwnChildren",
2296
2373
  "writeAttribute",
2297
2374
  "writeAttributes"
2298
2375
  ],
@@ -2410,6 +2487,7 @@
2410
2487
  "setValidatedAttributeValue",
2411
2488
  "toggleClass",
2412
2489
  "validateAttribute",
2490
+ "withOwnChildren",
2413
2491
  "writeAttribute",
2414
2492
  "writeAttributes"
2415
2493
  ],
@@ -2484,6 +2562,7 @@
2484
2562
  "setValidatedAttributeValue",
2485
2563
  "toggleClass",
2486
2564
  "validateAttribute",
2565
+ "withOwnChildren",
2487
2566
  "writeAttribute",
2488
2567
  "writeAttributes"
2489
2568
  ],
@@ -2600,6 +2679,7 @@
2600
2679
  "setValidatedAttributeValue",
2601
2680
  "toggleClass",
2602
2681
  "validateAttribute",
2682
+ "withOwnChildren",
2603
2683
  "writeAttribute",
2604
2684
  "writeAttributes"
2605
2685
  ],
@@ -2619,7 +2699,10 @@
2619
2699
  "get",
2620
2700
  "managedChildren",
2621
2701
  "register",
2702
+ "registered",
2703
+ "resolve",
2622
2704
  "validateTree",
2705
+ "variant",
2623
2706
  "wrapTree",
2624
2707
  "wrapper"
2625
2708
  ],
@@ -2749,6 +2832,7 @@
2749
2832
  "setValidatedAttributeValue",
2750
2833
  "toggleClass",
2751
2834
  "validateAttribute",
2835
+ "withOwnChildren",
2752
2836
  "writeAttribute",
2753
2837
  "writeAttributes"
2754
2838
  ],
@@ -2793,6 +2877,7 @@
2793
2877
  "setValidatedAttributeValue",
2794
2878
  "toggleClass",
2795
2879
  "validateAttribute",
2880
+ "withOwnChildren",
2796
2881
  "writeAttribute",
2797
2882
  "writeAttributes"
2798
2883
  ],
@@ -2947,6 +3032,7 @@
2947
3032
  "setValidatedAttributeValue",
2948
3033
  "toggleClass",
2949
3034
  "validateAttribute",
3035
+ "withOwnChildren",
2950
3036
  "writeAttribute",
2951
3037
  "writeAttributes"
2952
3038
  ],
@@ -2990,6 +3076,7 @@
2990
3076
  "setValidatedAttributeValue",
2991
3077
  "toggleClass",
2992
3078
  "validateAttribute",
3079
+ "withOwnChildren",
2993
3080
  "writeAttribute",
2994
3081
  "writeAttributes"
2995
3082
  ],
@@ -3149,6 +3236,7 @@
3149
3236
  "setValidatedAttributeValue",
3150
3237
  "toggleClass",
3151
3238
  "validateAttribute",
3239
+ "withOwnChildren",
3152
3240
  "writeAttribute",
3153
3241
  "writeAttributes"
3154
3242
  ],
@@ -3265,6 +3353,7 @@
3265
3353
  "setValidatedAttributeValue",
3266
3354
  "toggleClass",
3267
3355
  "validateAttribute",
3356
+ "withOwnChildren",
3268
3357
  "writeAttribute",
3269
3358
  "writeAttributes"
3270
3359
  ],
@@ -9633,9 +9722,9 @@
9633
9722
  },
9634
9723
  "size": {
9635
9724
  "fixture": "fixtures/size.ts",
9636
- "rawBytes": 66378,
9637
- "gzipBytes": 19897,
9638
- "budgetBytes": 20480,
9725
+ "rawBytes": 68399,
9726
+ "gzipBytes": 20540,
9727
+ "budgetBytes": 20992,
9639
9728
  "included": [
9640
9729
  "src/changes/mutation.ts",
9641
9730
  "src/dom/attributes.ts",
@@ -9644,6 +9733,7 @@
9644
9733
  "src/math/vec2.ts",
9645
9734
  "src/math/matrix.ts",
9646
9735
  "src/core/destruction.ts",
9736
+ "src/mixins/parent-internals.ts",
9647
9737
  "src/core/attribute-validation.ts",
9648
9738
  "src/changes/types.ts",
9649
9739
  "src/core/node.ts",
@@ -9661,7 +9751,6 @@
9661
9751
  "src/mixins/sizing-internals.ts",
9662
9752
  "src/mixins/sizable.ts",
9663
9753
  "src/core/shape.ts",
9664
- "src/mixins/parent-internals.ts",
9665
9754
  "src/mixins/parent.ts",
9666
9755
  "src/mixins/creatable.ts",
9667
9756
  "src/elements/group.ts",
@@ -9671,6 +9760,8 @@
9671
9760
  "src/services/bounds.ts",
9672
9761
  "src/services/defs-manager.ts",
9673
9762
  "src/core/native-validation.ts",
9763
+ "src/services/element-key.ts",
9764
+ "src/services/initialization.ts",
9674
9765
  "src/services/registry.ts",
9675
9766
  "src/services/scheduler.ts",
9676
9767
  "src/changes/service.ts",
@@ -9684,7 +9775,7 @@
9684
9775
  },
9685
9776
  "performance": {
9686
9777
  "fixture": "scripts/benchmark.mjs",
9687
- "date": "2026-11-06T20:46:47.900Z",
9778
+ "date": "2026-11-07T18:31:19.500Z",
9688
9779
  "browser": "Chromium 156.0.8078.4",
9689
9780
  "node": "v24.21.0",
9690
9781
  "os": "win32 10.0.26200",
@@ -9693,28 +9784,30 @@
9693
9784
  "count": 1000,
9694
9785
  "warmup": 20,
9695
9786
  "iterations": 100,
9696
- "medianMs": 0.6000000238418579,
9697
- "p95Ms": 0.8000000715255737,
9787
+ "medianMs": 0.6999999284744263,
9788
+ "p95Ms": 1.3000000715255737,
9698
9789
  "targetMedianMs": 16,
9699
9790
  "includes": "logical mutations and synchronous DOM commit; excludes paint",
9700
9791
  "timings": [
9701
- 0.3999999761581421, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
9702
- 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
9703
- 0.5, 0.5, 0.5999999046325684, 0.5999999046325684, 0.5999999046325684, 0.5999999046325684,
9792
+ 0.40000009536743164, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
9793
+ 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5999999046325684, 0.5999999046325684,
9794
+ 0.5999999046325684, 0.5999999046325684, 0.5999999046325684, 0.5999999046325684,
9704
9795
  0.5999999046325684, 0.6000000238418579, 0.6000000238418579, 0.6000000238418579,
9705
9796
  0.6000000238418579, 0.6000000238418579, 0.6000000238418579, 0.6000000238418579,
9706
9797
  0.6000000238418579, 0.6000000238418579, 0.6000000238418579, 0.6000000238418579,
9707
- 0.6000000238418579, 0.6000000238418579, 0.6000000238418579, 0.6000000238418579,
9708
- 0.6000000238418579, 0.6000000238418579, 0.6000000238418579, 0.6000000238418579,
9709
- 0.6000000238418579, 0.6000000238418579, 0.6000000238418579, 0.6000000238418579,
9710
- 0.6000000238418579, 0.6000000238418579, 0.6000000238418579, 0.6000000238418579,
9711
- 0.6000000238418579, 0.6000000238418579, 0.6000000238418579, 0.6000000238418579,
9712
9798
  0.6000000238418579, 0.6000000238418579, 0.6000000238418579, 0.6999999284744263,
9713
9799
  0.6999999284744263, 0.6999999284744263, 0.6999999284744263, 0.6999999284744263,
9714
9800
  0.6999999284744263, 0.6999999284744263, 0.6999999284744263, 0.7000000476837158,
9715
9801
  0.7000000476837158, 0.7000000476837158, 0.7000000476837158, 0.7000000476837158,
9802
+ 0.7000000476837158, 0.7000000476837158, 0.7000000476837158, 0.7000000476837158,
9716
9803
  0.7000000476837158, 0.7000000476837158, 0.7000000476837158, 0.7999999523162842,
9717
- 0.7999999523162842, 0.8000000715255737, 0.8000000715255737, 0.8999999761581421, 1, 1, 1
9804
+ 0.8000000715255737, 0.8000000715255737, 0.8000000715255737, 0.8999999761581421,
9805
+ 0.8999999761581421, 0.8999999761581421, 0.8999999761581421, 0.9000000953674316, 1, 1, 1, 1,
9806
+ 1.100000023841858, 1.100000023841858, 1.100000023841858, 1.100000023841858, 1.100000023841858,
9807
+ 1.1999999284744263, 1.1999999284744263, 1.1999999284744263, 1.1999999284744263,
9808
+ 1.1999999284744263, 1.2000000476837158, 1.2000000476837158, 1.2000000476837158,
9809
+ 1.2000000476837158, 1.2999999523162842, 1.2999999523162842, 1.2999999523162842,
9810
+ 1.3000000715255737, 1.3000000715255737, 1.399999976158142, 1.5, 1.5, 1.600000023841858
9718
9811
  ]
9719
9812
  }
9720
9813
  }
package/src/advanced.ts CHANGED
@@ -11,7 +11,7 @@ export { Namespace } from './dom/namespace.js';
11
11
  export { DrawingContext } from './services/context.js';
12
12
  export { Scheduler } from './services/scheduler.js';
13
13
  export { Registry } from './services/registry.js';
14
- export type { ElementClass } from './services/types.js';
14
+ export type { ElementClass, ElementVariant } from './services/types.js';
15
15
  export { BoundsService } from './services/bounds.js';
16
16
  export { DefsManager } from './services/defs-manager.js';
17
17
 
@@ -1,6 +1,6 @@
1
1
  import { Group } from '../elements/group.js';
2
2
  import type { AnyNode } from '../core/types.js';
3
- import type { ElementClass } from '../services/types.js';
3
+ import type { ElementClass, CreationOptions } from '../services/types.js';
4
4
  import type { ParentNode } from '../mixins/types.js';
5
5
  import { validateChild, validateIndex } from '../mixins/parent-internals.js';
6
6
  import { destroySubtrees } from '../core/destruction.js';
@@ -32,7 +32,7 @@ export class SvgFragment {
32
32
  }
33
33
  create<Options, Child extends AnyNode>(
34
34
  Constructor: ElementClass<Options, Child>,
35
- options: Options,
35
+ options: NoInfer<CreationOptions<Options, Child>>,
36
36
  ): Child {
37
37
  return this.#host.create(Constructor, options);
38
38
  }
@@ -0,0 +1,19 @@
1
+ import type { AnyNode } from '../core/types.js';
2
+ import type { ModelChange } from './types.js';
3
+
4
+ /** Marks a class whose children are drawn from its own state, such as a component. */
5
+ export const derivesChildren = Symbol('derivesChildren');
6
+ const derived = new WeakSet<AnyNode>();
7
+
8
+ export const ownsDerived = (Constructor: unknown): boolean =>
9
+ !!(Constructor as { [derivesChildren]?: boolean } | undefined)?.[derivesChildren];
10
+
11
+ /** Records the owner's current descendants as derived. The owner redraws them after replay. */
12
+ export function markDerived(owner: AnyNode): void {
13
+ for (const node of owner.descendants()) if (node !== owner) derived.add(node);
14
+ }
15
+
16
+ /** Replay skips derived nodes and their owners' child lists. */
17
+ export const isDerivedChange = (change: ModelChange): boolean =>
18
+ derived.has(change.target.node) ||
19
+ (change.domain === 'children' && ownsDerived(change.target.node.constructor));