@rasamjs/core 0.1.2 → 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 (240) hide show
  1. package/API.md +29 -9
  2. package/CHANGELOG.md +98 -1
  3. package/COMPONENTS.md +229 -0
  4. package/README.md +178 -25
  5. package/RELEASING.md +31 -21
  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 +10 -2
  19. package/dist/changes/service.d.ts.map +1 -1
  20. package/dist/changes/service.js +45 -6
  21. package/dist/changes/service.js.map +1 -1
  22. package/dist/changes/types.d.ts +9 -0
  23. package/dist/changes/types.d.ts.map +1 -1
  24. package/dist/changes/types.js.map +1 -1
  25. package/dist/changes.d.ts +5 -3
  26. package/dist/changes.d.ts.map +1 -1
  27. package/dist/changes.js +103 -2
  28. package/dist/changes.js.map +1 -1
  29. package/dist/components/changes.d.ts +34 -0
  30. package/dist/components/changes.d.ts.map +1 -0
  31. package/dist/components/changes.js +119 -0
  32. package/dist/components/changes.js.map +1 -0
  33. package/dist/components/component.d.ts +62 -0
  34. package/dist/components/component.d.ts.map +1 -0
  35. package/dist/components/component.js +355 -0
  36. package/dist/components/component.js.map +1 -0
  37. package/dist/components/decorators.d.ts +7 -0
  38. package/dist/components/decorators.d.ts.map +1 -0
  39. package/dist/components/decorators.js +81 -0
  40. package/dist/components/decorators.js.map +1 -0
  41. package/dist/components/metadata.d.ts +10 -0
  42. package/dist/components/metadata.d.ts.map +1 -0
  43. package/dist/components/metadata.js +85 -0
  44. package/dist/components/metadata.js.map +1 -0
  45. package/dist/components/registry.d.ts +24 -0
  46. package/dist/components/registry.d.ts.map +1 -0
  47. package/dist/components/registry.js +78 -0
  48. package/dist/components/registry.js.map +1 -0
  49. package/dist/components/types.d.ts +54 -0
  50. package/dist/components/types.d.ts.map +1 -0
  51. package/dist/components/types.js +2 -0
  52. package/dist/components/types.js.map +1 -0
  53. package/dist/components/view.d.ts +9 -0
  54. package/dist/components/view.d.ts.map +1 -0
  55. package/dist/components/view.js +104 -0
  56. package/dist/components/view.js.map +1 -0
  57. package/dist/components.d.ts +6 -0
  58. package/dist/components.d.ts.map +1 -0
  59. package/dist/components.js +5 -0
  60. package/dist/components.js.map +1 -0
  61. package/dist/core/node.d.ts +7 -0
  62. package/dist/core/node.d.ts.map +1 -1
  63. package/dist/core/node.js +30 -0
  64. package/dist/core/node.js.map +1 -1
  65. package/dist/dom/images.d.ts.map +1 -1
  66. package/dist/dom/images.js +3 -1
  67. package/dist/dom/images.js.map +1 -1
  68. package/dist/elements/image.d.ts.map +1 -1
  69. package/dist/elements/image.js +4 -1
  70. package/dist/elements/image.js.map +1 -1
  71. package/dist/interchange/clone.d.ts.map +1 -1
  72. package/dist/interchange/clone.js +4 -3
  73. package/dist/interchange/clone.js.map +1 -1
  74. package/dist/interchange/dom.d.ts +3 -1
  75. package/dist/interchange/dom.d.ts.map +1 -1
  76. package/dist/interchange/dom.js +29 -5
  77. package/dist/interchange/dom.js.map +1 -1
  78. package/dist/interchange/markup.d.ts.map +1 -1
  79. package/dist/interchange/markup.js +71 -3
  80. package/dist/interchange/markup.js.map +1 -1
  81. package/dist/interchange/policy.d.ts.map +1 -1
  82. package/dist/interchange/policy.js +4 -0
  83. package/dist/interchange/policy.js.map +1 -1
  84. package/dist/interchange/reconstruct.d.ts.map +1 -1
  85. package/dist/interchange/reconstruct.js +16 -12
  86. package/dist/interchange/reconstruct.js.map +1 -1
  87. package/dist/interchange/references.d.ts.map +1 -1
  88. package/dist/interchange/references.js +10 -4
  89. package/dist/interchange/references.js.map +1 -1
  90. package/dist/interchange/types.d.ts +10 -1
  91. package/dist/interchange/types.d.ts.map +1 -1
  92. package/dist/mixins/parent-internals.d.ts +6 -0
  93. package/dist/mixins/parent-internals.d.ts.map +1 -1
  94. package/dist/mixins/parent-internals.js +34 -0
  95. package/dist/mixins/parent-internals.js.map +1 -1
  96. package/dist/mixins/parent.d.ts.map +1 -1
  97. package/dist/mixins/parent.js +6 -1
  98. package/dist/mixins/parent.js.map +1 -1
  99. package/dist/mixins/transformable.d.ts.map +1 -1
  100. package/dist/mixins/transformable.js +25 -27
  101. package/dist/mixins/transformable.js.map +1 -1
  102. package/dist/mixins/types.d.ts +2 -2
  103. package/dist/mixins/types.d.ts.map +1 -1
  104. package/dist/raster/frame.d.ts +12 -0
  105. package/dist/raster/frame.d.ts.map +1 -0
  106. package/dist/raster/frame.js +43 -0
  107. package/dist/raster/frame.js.map +1 -0
  108. package/dist/raster/images.d.ts +2 -0
  109. package/dist/raster/images.d.ts.map +1 -0
  110. package/dist/raster/images.js +60 -0
  111. package/dist/raster/images.js.map +1 -0
  112. package/dist/raster/render.d.ts +3 -0
  113. package/dist/raster/render.d.ts.map +1 -0
  114. package/dist/raster/render.js +40 -0
  115. package/dist/raster/render.js.map +1 -0
  116. package/dist/raster/types.d.ts +10 -0
  117. package/dist/raster/types.d.ts.map +1 -0
  118. package/dist/raster/types.js +2 -0
  119. package/dist/raster/types.js.map +1 -0
  120. package/dist/raster.d.ts +6 -0
  121. package/dist/raster.d.ts.map +1 -0
  122. package/dist/raster.js +10 -0
  123. package/dist/raster.js.map +1 -0
  124. package/dist/resources/references.d.ts +2 -0
  125. package/dist/resources/references.d.ts.map +1 -1
  126. package/dist/resources/references.js +3 -1
  127. package/dist/resources/references.js.map +1 -1
  128. package/dist/services/catalog.d.ts.map +1 -1
  129. package/dist/services/catalog.js +5 -3
  130. package/dist/services/catalog.js.map +1 -1
  131. package/dist/services/defs-manager.d.ts +2 -0
  132. package/dist/services/defs-manager.d.ts.map +1 -1
  133. package/dist/services/defs-manager.js +4 -0
  134. package/dist/services/defs-manager.js.map +1 -1
  135. package/dist/services/element-key.d.ts +4 -0
  136. package/dist/services/element-key.d.ts.map +1 -0
  137. package/dist/services/element-key.js +12 -0
  138. package/dist/services/element-key.js.map +1 -0
  139. package/dist/services/initialization.d.ts +7 -0
  140. package/dist/services/initialization.d.ts.map +1 -0
  141. package/dist/services/initialization.js +27 -0
  142. package/dist/services/initialization.js.map +1 -0
  143. package/dist/services/registry.d.ts +8 -0
  144. package/dist/services/registry.d.ts.map +1 -1
  145. package/dist/services/registry.js +45 -10
  146. package/dist/services/registry.js.map +1 -1
  147. package/dist/services/types.d.ts +17 -0
  148. package/dist/services/types.d.ts.map +1 -1
  149. package/dist/services/viewport.d.ts +2 -0
  150. package/dist/services/viewport.d.ts.map +1 -1
  151. package/dist/services/viewport.js +4 -3
  152. package/dist/services/viewport.js.map +1 -1
  153. package/dist/template/parts.d.ts +12 -6
  154. package/dist/template/parts.d.ts.map +1 -1
  155. package/dist/template/parts.js +36 -29
  156. package/dist/template/parts.js.map +1 -1
  157. package/dist/template/render.d.ts +6 -7
  158. package/dist/template/render.d.ts.map +1 -1
  159. package/dist/template/render.js +188 -44
  160. package/dist/template/render.js.map +1 -1
  161. package/dist/template/svg-tag.d.ts +5 -1
  162. package/dist/template/svg-tag.d.ts.map +1 -1
  163. package/dist/template/svg-tag.js.map +1 -1
  164. package/dist/text/content.d.ts +0 -2
  165. package/dist/text/content.d.ts.map +1 -1
  166. package/dist/text/content.js +4 -10
  167. package/dist/text/content.js.map +1 -1
  168. package/dist/text/internals.d.ts +1 -0
  169. package/dist/text/internals.d.ts.map +1 -1
  170. package/dist/text/policies.d.ts +7 -0
  171. package/dist/text/policies.d.ts.map +1 -0
  172. package/dist/text/policies.js +13 -0
  173. package/dist/text/policies.js.map +1 -0
  174. package/dist/types/common.d.ts +27 -0
  175. package/dist/types/common.d.ts.map +1 -1
  176. package/package.json +156 -143
  177. package/reports/adoption.json +20 -20
  178. package/reports/animation-benchmark.json +616 -616
  179. package/reports/benchmark.json +65 -65
  180. package/reports/components-benchmark-before.json +10 -0
  181. package/reports/components-benchmark.json +10 -0
  182. package/reports/creation.json +26 -26
  183. package/reports/interchange-benchmark.json +85 -85
  184. package/reports/public-api-contract.json +353 -23
  185. package/reports/public-api-review.md +23 -0
  186. package/reports/size-components.json +102 -0
  187. package/reports/size-parity.json +82 -34
  188. package/reports/size.json +6 -4
  189. package/reports/svgjs-comparison.json +3466 -3466
  190. package/reports/svgjs-comparison.md +19 -19
  191. package/reports/svgjs-parity-current.json +177 -60
  192. package/src/advanced.ts +1 -1
  193. package/src/catalog/fragment.ts +2 -2
  194. package/src/changes/derived.ts +19 -0
  195. package/src/changes/restore.ts +27 -4
  196. package/src/changes/service.ts +60 -11
  197. package/src/changes/types.ts +9 -0
  198. package/src/changes.ts +93 -4
  199. package/src/components/changes.ts +131 -0
  200. package/src/components/component.ts +401 -0
  201. package/src/components/decorators.ts +104 -0
  202. package/src/components/metadata.ts +111 -0
  203. package/src/components/registry.ts +79 -0
  204. package/src/components/types.ts +66 -0
  205. package/src/components/view.ts +123 -0
  206. package/src/components.ts +15 -0
  207. package/src/core/node.ts +32 -1
  208. package/src/dom/images.ts +2 -1
  209. package/src/elements/image.ts +4 -1
  210. package/src/interchange/clone.ts +4 -3
  211. package/src/interchange/dom.ts +34 -5
  212. package/src/interchange/markup.ts +77 -3
  213. package/src/interchange/policy.ts +6 -0
  214. package/src/interchange/reconstruct.ts +16 -12
  215. package/src/interchange/references.ts +12 -4
  216. package/src/interchange/types.ts +10 -1
  217. package/src/mixins/parent-internals.ts +37 -0
  218. package/src/mixins/parent.ts +13 -4
  219. package/src/mixins/transformable.ts +23 -25
  220. package/src/mixins/types.ts +2 -2
  221. package/src/raster/frame.ts +53 -0
  222. package/src/raster/images.ts +73 -0
  223. package/src/raster/render.ts +45 -0
  224. package/src/raster/types.ts +9 -0
  225. package/src/raster.ts +13 -0
  226. package/src/resources/references.ts +5 -1
  227. package/src/services/catalog.ts +5 -3
  228. package/src/services/defs-manager.ts +5 -0
  229. package/src/services/element-key.ts +14 -0
  230. package/src/services/initialization.ts +25 -0
  231. package/src/services/registry.ts +47 -10
  232. package/src/services/types.ts +21 -0
  233. package/src/services/viewport.ts +5 -4
  234. package/src/template/parts.ts +54 -39
  235. package/src/template/render.ts +211 -54
  236. package/src/template/svg-tag.ts +6 -1
  237. package/src/text/content.ts +4 -14
  238. package/src/text/internals.ts +1 -0
  239. package/src/text/policies.ts +18 -0
  240. package/src/types/common.ts +29 -0
@@ -4,6 +4,19 @@ import type { DrawingContext } from './context.js';
4
4
  import type { AttributeValue } from '../types/common.js';
5
5
  import { validateAttributeValue } from '../core/attribute-validation.js';
6
6
  import { validateNativeElement } from '../core/native-validation.js';
7
+ /** Type-only capability for constructors whose options come from instance fields. */
8
+ export declare const creationOptions: unique symbol;
9
+ export type CreationOptions<Options, Instance> = Instance extends {
10
+ readonly [creationOptions]: infer Fields;
11
+ } ? Fields : Options;
12
+ /**
13
+ * Selects a subclass for elements that share a tag, by the exact value of one `data-*`
14
+ * attribute. Instances always carry that value, and it can't change.
15
+ */
16
+ export interface ElementVariant {
17
+ readonly attribute: string;
18
+ readonly value: string;
19
+ }
7
20
  export interface ElementClass<Options = any, Result extends AnyNode = AnyNode> {
8
21
  readonly tag: string;
9
22
  readonly attributeNames: readonly string[];
@@ -12,6 +25,10 @@ export interface ElementClass<Options = any, Result extends AnyNode = AnyNode> {
12
25
  readonly childTags?: readonly string[] | undefined;
13
26
  readonly forbiddenDescendantTags?: readonly string[] | undefined;
14
27
  readonly opaqueContent?: boolean;
28
+ /** Registers the class for one attribute value of its tag instead of the whole tag. */
29
+ readonly variant?: ElementVariant | undefined;
30
+ /** Children belong to the class: outside structural edits throw. */
31
+ readonly ownsChildren?: boolean;
15
32
  [validateAttributeValue]?(name: string, value: AttributeValue): void;
16
33
  [validateNativeElement]?(element: SVGElement): void;
17
34
  new (context: DrawingContext, options: Options, existing?: any): Result;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAIrE,MAAM,WAAW,YAAY,CAAC,OAAO,GAAG,GAAG,EAAE,MAAM,SAAS,OAAO,GAAG,OAAO;IAC3E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACrE,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IACpD,KAAK,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;CACzE;AAID,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAID,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,2DAA2D;AAC3D,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtD,sEAAsE;AACtE,MAAM,MAAM,oBAAoB,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAIrE,qFAAqF;AACrF,MAAM,CAAC,OAAO,CAAC,MAAM,eAAe,EAAE,OAAO,MAAM,CAAC;AACpD,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,QAAQ,IAAI,QAAQ,SAAS;IAChE,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1C,GACG,MAAM,GACN,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY,CAAC,OAAO,GAAG,GAAG,EAAE,MAAM,SAAS,OAAO,GAAG,OAAO;IAC3E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,uFAAuF;IACvF,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC9C,oEAAoE;IACpE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACrE,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IACpD,KAAK,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;CACzE;AAID,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAID,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,2DAA2D;AAC3D,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtD,sEAAsE;AACtE,MAAM,MAAM,oBAAoB,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -6,6 +6,8 @@ type Axis = 'width' | 'height';
6
6
  export declare const isNestedViewport: (node: AnyNode) => boolean;
7
7
  /** Reports unresolved viewport geometry as unavailable bounds; other failures propagate. */
8
8
  export declare function unresolved(error: unknown): Bounds;
9
+ /** Resolve an authored viewport length against its original ancestor viewport. */
10
+ export declare function viewportLength(node: AnyNode, name: string, axis: Axis, fallback: unknown): number;
9
11
  /** A viewport's width or height in its parent's user units; omitted sizes are 100%. */
10
12
  export declare function viewportSize(node: AnyNode, axis: Axis): number;
11
13
  /** Placement and viewBox transform from a nested viewport's user space to its parent's. */
@@ -1 +1 @@
1
- {"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../../src/services/viewport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,KAAK,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC;AAI/B,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,SAAU,OAAO,YAAmD,CAAC;AAElG,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGjD;AAaD,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAI9D;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAWrD"}
1
+ {"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../../src/services/viewport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,KAAK,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC;AAI/B,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,SAAU,OAAO,YAAmD,CAAC;AAElG,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGjD;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CASjG;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAI9D;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAWrD"}
@@ -10,7 +10,8 @@ export function unresolved(error) {
10
10
  return BBox.unavailable(error.message);
11
11
  throw error;
12
12
  }
13
- function length(node, name, axis, fallback) {
13
+ /** Resolve an authored viewport length against its original ancestor viewport. */
14
+ export function viewportLength(node, name, axis, fallback) {
14
15
  return userLength(node.getAttributeValue(name) ?? fallback, () => {
15
16
  // Percentages use the nearest ancestor viewport's viewBox, or its size without one.
16
17
  let viewport = node === node.context.root ? null : node.parent;
@@ -24,14 +25,14 @@ function length(node, name, axis, fallback) {
24
25
  }
25
26
  /** A viewport's width or height in its parent's user units; omitted sizes are 100%. */
26
27
  export function viewportSize(node, axis) {
27
- const size = length(node, axis, axis, '100%');
28
+ const size = viewportLength(node, axis, axis, '100%');
28
29
  if (size < 0)
29
30
  throw new ViewportError('Negative viewport size');
30
31
  return size;
31
32
  }
32
33
  /** Placement and viewBox transform from a nested viewport's user space to its parent's. */
33
34
  export function viewportMapping(node) {
34
- const x = length(node, 'x', 'width', 0), y = length(node, 'y', 'height', 0), viewBox = node.getAttributeValue('viewBox');
35
+ const x = viewportLength(node, 'x', 'width', 0), y = viewportLength(node, 'y', 'height', 0), viewBox = node.getAttributeValue('viewBox');
35
36
  return viewBox === undefined
36
37
  ? Matrix.translation(x, y)
37
38
  : viewportMatrix({ x, y, width: viewportSize(node, 'width'), height: viewportSize(node, 'height') }, viewBoxValue(viewBox), String(node.getAttributeValue('preserveAspectRatio') ?? 'xMidYMid'));
@@ -1 +1 @@
1
- {"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../src/services/viewport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK9F,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC;AAE9E,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAElG,4FAA4F;AAC5F,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,aAAa;QAAE,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3E,MAAM,KAAK,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,IAAa,EAAE,IAAY,EAAE,IAAU,EAAE,QAAiB;IACxE,OAAO,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,GAAG,EAAE;QAC/D,oFAAoF;QACpF,IAAI,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/D,OAAO,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;QACrE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,aAAa,CAAC,uCAAuC,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACtD,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,IAAU;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,IAAI,GAAG,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,wBAAwB,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,EACrC,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAClC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC9C,OAAO,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,cAAc,CACZ,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAClF,YAAY,CAAC,OAAO,CAAC,EACrB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,IAAI,UAAU,CAAC,CACpE,CAAC;AACR,CAAC"}
1
+ {"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../src/services/viewport.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { AnyNode } from '../core/types.js';
2
2
  import type { DomFactory } from '../dom/create.js';
3
3
  import type { Registry } from '../services/registry.js';
4
+ import type { ElementClass } from '../services/types.js';
4
5
  import type { TemplateValue } from './svg-tag.js';
5
6
  import type { TextBinding } from '../text/internals.js';
6
7
  export type PartValue = string | number;
@@ -9,16 +10,22 @@ export interface TemplateDescription {
9
10
  readonly attributes: Readonly<Record<string, readonly PartValue[]>>;
10
11
  readonly children: readonly TemplateDescription[];
11
12
  readonly text: readonly PartValue[];
12
- readonly content: readonly (TemplateDescription | {
13
- readonly parts: readonly PartValue[];
14
- })[];
13
+ readonly content: readonly ContentItem[];
15
14
  }
15
+ /** An element, or a text run whose number parts are hole indexes (child holes outside text). */
16
+ export type ContentItem = TemplateDescription | {
17
+ readonly parts: readonly PartValue[];
18
+ };
16
19
  export declare class TemplateCompiler {
17
20
  private static readonly cache;
18
21
  private readonly counts;
19
22
  private constructor();
23
+ /** Top-level elements; templates with top-level child holes need `content()`. */
20
24
  static compile(dom: DomFactory, strings: TemplateStringsArray): readonly TemplateDescription[];
21
- static validate(descriptions: readonly TemplateDescription[], registry: Registry, forbidden?: ReadonlySet<string>): void;
25
+ /** Top-level content in order: elements and text runs that may hold child holes. */
26
+ static content(dom: DomFactory, strings: TemplateStringsArray): readonly ContentItem[];
27
+ /** `parent` is the container class that receives `content`, for its child rules. */
28
+ static validate(content: readonly ContentItem[], registry: Registry, forbidden?: ReadonlySet<string>, parent?: ElementClass): void;
22
29
  private split;
23
30
  private describe;
24
31
  }
@@ -27,11 +34,10 @@ export declare class BindingPart {
27
34
  private readonly name;
28
35
  private readonly parts;
29
36
  private readonly textBinding?;
30
- private previous;
31
37
  constructor(node: AnyNode, name: string | null, parts: readonly PartValue[], textBinding?: TextBinding);
32
38
  evaluate(values: readonly TemplateValue[]): string | undefined;
33
39
  validate(value: string | undefined): void;
34
- commit(value: string | undefined, initial?: boolean): void;
40
+ commit(value: string | undefined): void;
35
41
  private static primitive;
36
42
  }
37
43
  //# sourceMappingURL=parts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/template/parts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAExC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,mBAAmB,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;KAAE,CAAC,EAAE,CAAC;CAC/F;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAGzB;IACJ,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAElC,OAAO,eAEN;IAED,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,GAAG,SAAS,mBAAmB,EAAE,CAkB7F;IAED,MAAM,CAAC,QAAQ,CACb,YAAY,EAAE,SAAS,mBAAmB,EAAE,EAC5C,QAAQ,EAAE,QAAQ,EAClB,SAAS,GAAE,WAAW,CAAC,MAAM,CAAa,GACzC,IAAI,CAgCN;IAED,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,QAAQ;CAoCjB;AAED,qBAAa,WAAW;IAIpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAN/B,OAAO,CAAC,QAAQ,CAAqB;IAErC,YACmB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,WAAW,CAAC,EAAE,WAAW,EACxC;IAEJ,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,GAAG,SAAS,CAa7D;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAiBxC;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,UAAQ,GAAG,IAAI,CASvD;IAED,OAAO,CAAC,MAAM,CAAC,SAAS;CAMzB"}
1
+ {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/template/parts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAExC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;CAC1C;AAED,gGAAgG;AAChG,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,CAAC;AAEzF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAA+D;IAC5F,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAElC,OAAO,eAEN;IAED,iFAAiF;IACjF,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,GAAG,SAAS,mBAAmB,EAAE,CAW7F;IAED,oFAAoF;IACpF,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,GAAG,SAAS,WAAW,EAAE,CAgBrF;IAED,oFAAoF;IACpF,MAAM,CAAC,QAAQ,CACb,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,QAAQ,EAAE,QAAQ,EAClB,SAAS,GAAE,WAAW,CAAC,MAAM,CAAa,EAC1C,MAAM,CAAC,EAAE,YAAY,GACpB,IAAI,CAoCN;IAED,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,QAAQ;CA8BjB;AAED,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAJ/B,YACmB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,WAAW,CAAC,EAAE,WAAW,EACxC;IAEJ,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,GAAG,SAAS,CAa7D;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAiBxC;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAYtC;IAED,OAAO,CAAC,MAAM,CAAC,SAAS;CAMzB"}
@@ -7,7 +7,16 @@ export class TemplateCompiler {
7
7
  constructor(strings) {
8
8
  this.counts = new Array(strings.length - 1).fill(0);
9
9
  }
10
+ /** Top-level elements; templates with top-level child holes need `content()`. */
10
11
  static compile(dom, strings) {
12
+ const content = TemplateCompiler.content(dom, strings);
13
+ if (content.some((item) => !('tag' in item) &&
14
+ item.parts.some((part) => part !== '' && (typeof part == 'number' || part.trim()))))
15
+ throw new TypeError('Template text must be inside a text element');
16
+ return content.filter((item) => 'tag' in item);
17
+ }
18
+ /** Top-level content in order: elements and text runs that may hold child holes. */
19
+ static content(dom, strings) {
11
20
  const cached = TemplateCompiler.cache.get(strings);
12
21
  if (cached)
13
22
  return cached;
@@ -18,38 +27,41 @@ export class TemplateCompiler {
18
27
  .map((part, index) => part + (index < strings.length - 1 ? `rasamHole${index}End` : ''))
19
28
  .join('');
20
29
  const result = [];
21
- for (const node of dom.parse(source)) {
22
- const description = compiler.describe(node);
23
- if (description)
24
- result.push(description);
25
- }
30
+ for (const node of dom.parse(source))
31
+ result.push('text' in node ? { parts: compiler.split(node.text) } : compiler.describe(node));
26
32
  if (compiler.counts.some((count) => count !== 1))
27
33
  throw new TypeError('Bindings must appear in attribute values or text elements');
28
34
  TemplateCompiler.cache.set(strings, result);
29
35
  return result;
30
36
  }
31
- static validate(descriptions, registry, forbidden = new Set()) {
32
- for (const description of descriptions) {
37
+ /** `parent` is the container class that receives `content`, for its child rules. */
38
+ static validate(content, registry, forbidden = new Set(), parent) {
39
+ for (const description of content) {
40
+ if (!('tag' in description)) {
41
+ if (description.parts.some((part) => typeof part == 'string' && part.trim()))
42
+ throw new TypeError('Template text must be inside a text element');
43
+ continue;
44
+ }
33
45
  const Constructor = registry.get(description.tag);
34
46
  if (forbidden.has(description.tag))
35
47
  throw new TypeError('Nested links or forbidden descendants are unsupported');
36
48
  if (!Constructor)
37
49
  throw new TypeError(`Unsupported template tag: ${description.tag}`);
50
+ if (parent?.childTags && !parent.childTags.includes(description.tag))
51
+ throw new TypeError(`${parent.tag} only accepts ${parent.childTags.join(', ')} children`);
38
52
  for (const name of Object.keys(description.attributes)) {
39
53
  if (!Constructor.attributeNames.includes(name) && !/^(?:data|aria)-[\w-]+$/.test(name))
40
54
  throw new TypeError(`Unsupported template attribute: ${name}`);
41
55
  }
42
56
  if (description.children.length > 0 && !Constructor.isContainer)
43
57
  throw new TypeError('Only containers may have element children');
44
- if (Constructor.childTags &&
45
- description.children.some((child) => !Constructor.childTags.includes(child.tag)))
46
- throw new TypeError(`${description.tag} only accepts ${Constructor.childTags.join(', ')} children`);
47
- if (description.text.some((part) => typeof part === 'number' || part.trim()) &&
48
- !Constructor.isText)
58
+ // Outside text elements, holes between children are child holes, so only containers take them.
59
+ if (!Constructor.isText &&
60
+ description.text.some((part) => typeof part == 'number' ? !Constructor.isContainer : part.trim()))
49
61
  throw new TypeError('Text bindings require a text element');
50
- TemplateCompiler.validate(description.children, registry, Constructor.forbiddenDescendantTags
62
+ TemplateCompiler.validate(Constructor.isText ? description.children : description.content, registry, Constructor.forbiddenDescendantTags
51
63
  ? new Set([...forbidden, ...Constructor.forbiddenDescendantTags])
52
- : forbidden);
64
+ : forbidden, Constructor);
53
65
  }
54
66
  }
55
67
  split(value) {
@@ -67,11 +79,6 @@ export class TemplateCompiler {
67
79
  return parts;
68
80
  }
69
81
  describe(node) {
70
- if ('text' in node) {
71
- if (node.text.trim())
72
- throw new TypeError('Template text must be inside a text element');
73
- return null;
74
- }
75
82
  if (/rasamHole\d+End/.test(node.tag))
76
83
  throw new TypeError('Dynamic tag names are unsupported');
77
84
  const attributes = {};
@@ -97,10 +104,8 @@ export class TemplateCompiler {
97
104
  }
98
105
  else {
99
106
  const description = this.describe(child);
100
- if (description) {
101
- children.push(description);
102
- content.push(description);
103
- }
107
+ children.push(description);
108
+ content.push(description);
104
109
  }
105
110
  }
106
111
  return { tag: node.tag, attributes, children, text, content };
@@ -111,7 +116,6 @@ export class BindingPart {
111
116
  name;
112
117
  parts;
113
118
  textBinding;
114
- previous;
115
119
  constructor(node, name, parts, textBinding) {
116
120
  this.node = node;
117
121
  this.name = name;
@@ -150,20 +154,23 @@ export class BindingPart {
150
154
  throw new TypeError('Templates support only local url(#id) references');
151
155
  }
152
156
  }
153
- commit(value, initial = false) {
154
- if (!initial && value === this.previous)
155
- return;
157
+ commit(value) {
156
158
  if (this.name === null) {
157
159
  if (!Guards.isTextual(this.node))
158
160
  throw new TypeError('Text binding requires the Textual mixin');
161
+ if ((this.textBinding ? this.textBinding.value : this.node.text()) === (value ?? ''))
162
+ return;
159
163
  if (this.textBinding)
160
164
  this.textBinding.set(value ?? '');
161
165
  else
162
166
  this.node.text(value ?? '');
163
167
  }
164
- else
168
+ else {
169
+ const current = this.node.getAttributeValue(this.name);
170
+ if ((current === undefined ? undefined : String(current)) === value)
171
+ return;
165
172
  this.node.setAttributeValue(this.name, value);
166
- this.previous = value;
173
+ }
167
174
  }
168
175
  static primitive(value) {
169
176
  if (value == null)
@@ -1 +1 @@
1
- {"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/template/parts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/template/parts.ts"],"names":[],"mappings":"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"}
@@ -2,19 +2,18 @@ import type { AnyNode } from '../core/types.js';
2
2
  import type { ParentNode } from '../mixins/types.js';
3
3
  import { Group } from '../elements/group.js';
4
4
  import type { Registry } from '../services/registry.js';
5
- import type { TemplateDescription } from './parts.js';
6
- import type { SvgTemplate } from './svg-tag.js';
5
+ import type { ContentItem } from './parts.js';
6
+ import { SvgTemplate } from './svg-tag.js';
7
7
  export declare class TemplateInstance {
8
8
  readonly template: SvgTemplate;
9
9
  readonly host: Group;
10
- readonly nodes: readonly AnyNode[];
11
- private readonly parts;
12
- constructor(parent: ParentNode, template: SvgTemplate, registry: Registry, descriptions: readonly TemplateDescription[]);
10
+ private readonly mount;
11
+ constructor(parent: ParentNode, template: SvgTemplate, registry: Registry, content: readonly ContentItem[]);
12
+ /** The current top-level nodes, including those that child holes render. */
13
+ get nodes(): readonly AnyNode[];
13
14
  get isDestroyed(): boolean;
14
15
  update(template: SvgTemplate): this;
15
16
  destroy(): void;
16
- private instantiate;
17
- private bind;
18
17
  }
19
18
  export declare class Renderer {
20
19
  private readonly parent;
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/template/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,qBAAa,gBAAgB;IAOzB,QAAQ,CAAC,QAAQ,EAAE,WAAW;IANhC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAE3C,YACE,MAAM,EAAE,UAAU,EACT,QAAQ,EAAE,WAAW,EAC9B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,SAAS,mBAAmB,EAAE,EAW7C;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,MAAM,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAelC;IAED,OAAO,IAAI,IAAI,CAEd;IAED,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,IAAI;CAMb;AAED,qBAAa,QAAQ;IAKjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACxE,OAAO,CAAC,QAAQ,CAAiC;IAEjD,YACmB,MAAM,EAAE,UAAU,EAClB,QAAQ,WAA0B,EAMpD;IAED,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,WAAW,EACrB,QAAQ,WAA0B,GACjC,gBAAgB,CAOlB;IAED,MAAM,CAAC,QAAQ,EAAE,WAAW,GAAG,gBAAgB,CAoB9C;CACF"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/template/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAkM3C,qBAAa,gBAAgB;IAMzB,QAAQ,CAAC,QAAQ,EAAE,WAAW;IALhC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,YACE,MAAM,EAAE,UAAU,EACT,QAAQ,EAAE,WAAW,EAC9B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,SAAS,WAAW,EAAE,EAShC;IAED,4EAA4E;IAC5E,IAAI,KAAK,IAAI,SAAS,OAAO,EAAE,CAE9B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,MAAM,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAQlC;IAED,OAAO,IAAI,IAAI,CAEd;CACF;AAED,qBAAa,QAAQ;IAKjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACxE,OAAO,CAAC,QAAQ,CAAiC;IAEjD,YACmB,MAAM,EAAE,UAAU,EAClB,QAAQ,WAA0B,EAMpD;IAED,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,WAAW,EACrB,QAAQ,WAA0B,GACjC,gBAAgB,CAOlB;IAED,MAAM,CAAC,QAAQ,EAAE,WAAW,GAAG,gBAAgB,CAuB9C;CACF"}