@rasamjs/core 0.2.0 → 0.3.1

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 (178) hide show
  1. package/API.md +14 -4
  2. package/CHANGELOG.md +71 -0
  3. package/COMPONENTS.md +229 -0
  4. package/README.md +46 -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 +76 -28
  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 +18 -4
  21. package/dist/changes/service.js.map +1 -1
  22. package/dist/changes/state.d.ts.map +1 -1
  23. package/dist/changes/state.js +33 -27
  24. package/dist/changes/state.js.map +1 -1
  25. package/dist/changes.d.ts.map +1 -1
  26. package/dist/changes.js +20 -4
  27. package/dist/changes.js.map +1 -1
  28. package/dist/components/changes.d.ts +34 -0
  29. package/dist/components/changes.d.ts.map +1 -0
  30. package/dist/components/changes.js +119 -0
  31. package/dist/components/changes.js.map +1 -0
  32. package/dist/components/component.d.ts +62 -0
  33. package/dist/components/component.d.ts.map +1 -0
  34. package/dist/components/component.js +355 -0
  35. package/dist/components/component.js.map +1 -0
  36. package/dist/components/decorators.d.ts +7 -0
  37. package/dist/components/decorators.d.ts.map +1 -0
  38. package/dist/components/decorators.js +83 -0
  39. package/dist/components/decorators.js.map +1 -0
  40. package/dist/components/metadata.d.ts +10 -0
  41. package/dist/components/metadata.d.ts.map +1 -0
  42. package/dist/components/metadata.js +85 -0
  43. package/dist/components/metadata.js.map +1 -0
  44. package/dist/components/registry.d.ts +24 -0
  45. package/dist/components/registry.d.ts.map +1 -0
  46. package/dist/components/registry.js +78 -0
  47. package/dist/components/registry.js.map +1 -0
  48. package/dist/components/types.d.ts +54 -0
  49. package/dist/components/types.d.ts.map +1 -0
  50. package/dist/components/types.js +2 -0
  51. package/dist/components/types.js.map +1 -0
  52. package/dist/components/view.d.ts +9 -0
  53. package/dist/components/view.d.ts.map +1 -0
  54. package/dist/components/view.js +104 -0
  55. package/dist/components/view.js.map +1 -0
  56. package/dist/components.d.ts +6 -0
  57. package/dist/components.d.ts.map +1 -0
  58. package/dist/components.js +5 -0
  59. package/dist/components.js.map +1 -0
  60. package/dist/core/node.d.ts +7 -0
  61. package/dist/core/node.d.ts.map +1 -1
  62. package/dist/core/node.js +30 -0
  63. package/dist/core/node.js.map +1 -1
  64. package/dist/interchange/clone.d.ts.map +1 -1
  65. package/dist/interchange/clone.js +3 -2
  66. package/dist/interchange/clone.js.map +1 -1
  67. package/dist/interchange/reconstruct.d.ts.map +1 -1
  68. package/dist/interchange/reconstruct.js +16 -12
  69. package/dist/interchange/reconstruct.js.map +1 -1
  70. package/dist/interchange/references.d.ts.map +1 -1
  71. package/dist/interchange/references.js +10 -4
  72. package/dist/interchange/references.js.map +1 -1
  73. package/dist/mixins/parent-internals.d.ts +6 -0
  74. package/dist/mixins/parent-internals.d.ts.map +1 -1
  75. package/dist/mixins/parent-internals.js +34 -0
  76. package/dist/mixins/parent-internals.js.map +1 -1
  77. package/dist/mixins/parent.d.ts.map +1 -1
  78. package/dist/mixins/parent.js +6 -1
  79. package/dist/mixins/parent.js.map +1 -1
  80. package/dist/mixins/types.d.ts +2 -2
  81. package/dist/mixins/types.d.ts.map +1 -1
  82. package/dist/resources/references.d.ts +2 -0
  83. package/dist/resources/references.d.ts.map +1 -1
  84. package/dist/resources/references.js +3 -3
  85. package/dist/resources/references.js.map +1 -1
  86. package/dist/services/catalog.d.ts.map +1 -1
  87. package/dist/services/catalog.js +5 -3
  88. package/dist/services/catalog.js.map +1 -1
  89. package/dist/services/claims.d.ts +7 -0
  90. package/dist/services/claims.d.ts.map +1 -0
  91. package/dist/services/claims.js +11 -0
  92. package/dist/services/claims.js.map +1 -0
  93. package/dist/services/defs-manager.d.ts +2 -0
  94. package/dist/services/defs-manager.d.ts.map +1 -1
  95. package/dist/services/defs-manager.js +4 -0
  96. package/dist/services/defs-manager.js.map +1 -1
  97. package/dist/services/element-key.d.ts +4 -0
  98. package/dist/services/element-key.d.ts.map +1 -0
  99. package/dist/services/element-key.js +12 -0
  100. package/dist/services/element-key.js.map +1 -0
  101. package/dist/services/initialization.d.ts +7 -0
  102. package/dist/services/initialization.d.ts.map +1 -0
  103. package/dist/services/initialization.js +27 -0
  104. package/dist/services/initialization.js.map +1 -0
  105. package/dist/services/registry.d.ts +8 -0
  106. package/dist/services/registry.d.ts.map +1 -1
  107. package/dist/services/registry.js +47 -10
  108. package/dist/services/registry.js.map +1 -1
  109. package/dist/services/types.d.ts +17 -0
  110. package/dist/services/types.d.ts.map +1 -1
  111. package/dist/template/parts.d.ts +12 -6
  112. package/dist/template/parts.d.ts.map +1 -1
  113. package/dist/template/parts.js +36 -29
  114. package/dist/template/parts.js.map +1 -1
  115. package/dist/template/render.d.ts +6 -7
  116. package/dist/template/render.d.ts.map +1 -1
  117. package/dist/template/render.js +188 -44
  118. package/dist/template/render.js.map +1 -1
  119. package/dist/template/svg-tag.d.ts +5 -1
  120. package/dist/template/svg-tag.d.ts.map +1 -1
  121. package/dist/template/svg-tag.js.map +1 -1
  122. package/dist/text/internals.d.ts +1 -0
  123. package/dist/text/internals.d.ts.map +1 -1
  124. package/dist/types/common.d.ts +27 -0
  125. package/dist/types/common.d.ts.map +1 -1
  126. package/package.json +10 -1
  127. package/reports/adoption.json +20 -20
  128. package/reports/animation-benchmark.json +613 -613
  129. package/reports/benchmark.json +27 -27
  130. package/reports/change-groups-benchmark.json +471 -0
  131. package/reports/components-benchmark-before.json +10 -0
  132. package/reports/components-benchmark.json +10 -0
  133. package/reports/creation.json +26 -26
  134. package/reports/interchange-benchmark.json +85 -85
  135. package/reports/phase-3-core-after.json +40 -0
  136. package/reports/phase-3-core-before.json +40 -0
  137. package/reports/public-api-contract.json +335 -17
  138. package/reports/size-components.json +103 -0
  139. package/reports/size-parity.json +50 -34
  140. package/reports/size.json +7 -4
  141. package/reports/svgjs-comparison.json +3049 -3049
  142. package/reports/svgjs-comparison.md +15 -15
  143. package/reports/svgjs-parity-current.json +133 -46
  144. package/src/advanced.ts +1 -1
  145. package/src/catalog/fragment.ts +2 -2
  146. package/src/changes/derived.ts +19 -0
  147. package/src/changes/restore.ts +78 -36
  148. package/src/changes/service.ts +23 -8
  149. package/src/changes/state.ts +37 -28
  150. package/src/changes.ts +24 -5
  151. package/src/components/changes.ts +131 -0
  152. package/src/components/component.ts +401 -0
  153. package/src/components/decorators.ts +106 -0
  154. package/src/components/metadata.ts +111 -0
  155. package/src/components/registry.ts +79 -0
  156. package/src/components/types.ts +66 -0
  157. package/src/components/view.ts +123 -0
  158. package/src/components.ts +15 -0
  159. package/src/core/node.ts +32 -1
  160. package/src/interchange/clone.ts +3 -2
  161. package/src/interchange/reconstruct.ts +16 -12
  162. package/src/interchange/references.ts +12 -4
  163. package/src/mixins/parent-internals.ts +37 -0
  164. package/src/mixins/parent.ts +13 -4
  165. package/src/mixins/types.ts +2 -2
  166. package/src/resources/references.ts +5 -5
  167. package/src/services/catalog.ts +5 -3
  168. package/src/services/claims.ts +14 -0
  169. package/src/services/defs-manager.ts +5 -0
  170. package/src/services/element-key.ts +14 -0
  171. package/src/services/initialization.ts +25 -0
  172. package/src/services/registry.ts +49 -10
  173. package/src/services/types.ts +21 -0
  174. package/src/template/parts.ts +54 -39
  175. package/src/template/render.ts +211 -54
  176. package/src/template/svg-tag.ts +6 -1
  177. package/src/text/internals.ts +1 -0
  178. package/src/types/common.ts +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/components/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAalD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAChE,MAAM,aAAa,GAAG,IAAI,OAAO,EAAa,CAAC;AAO/C,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAU,CAAC;AAC3C,MAAM,IAAI,GAAG,CAAQ,KAAY,EAAS,EAAE,CAC1C,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAEtE,4FAA4F;AAC5F,MAAM,OAAgB,SAAU,SAAQ,KAAK;IAE3C,MAAM,CAAmB,YAAY,GAAG,IAAI,CAAC;IAC7C,yFAAyF;IACzF,MAAM,CAAU,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAChC,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IACnC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IACzC,YAAY,GAAG,KAAK,CAAC;IACrB,aAAa,GAAG,IAAI,CAAC;IACrB,SAAS,CAAc;IACvB,cAAc,GAAmB,EAAE,CAAC;IACpC,WAAW,CAA+D;IAC1E,gBAAgB,CAA6B;IACpC,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,MAAM,CAA+D;IACrE,aAAa,GAAG,KAAK,CAAC;IAEb,MAAM,CAAiB;IACvB,SAAS,CAAsB;IAExC,YAAY,OAAuB,EAAE,KAAK,GAAmB,EAAE,EAAE,QAAsB;QACrF,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,SAAS;QACX,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,eAAe;QACjB,OAAO,CAAC,IAAI,CAAC,gBAAgB,KAAK,MAAM,CAAC,MAAM,CAC7C,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;aAC5C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CACrB,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAoB,EAAE,CAAC,CAC/E,CACJ,CAAC,CAAC;IACL,CAAC;IAED,yFAAyF;IACzF,IAAI,iBAAiB;QACnB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,+EAA+E;IAC/E,CAAC,cAAc,CAAC,CAAC,IAAY,EAAE,KAAa;QAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,oFAAoF;IACpF,IAAI,eAAe;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,KAAU,CAAC;IAClB,SAAS,KAAU,CAAC;IACpB,OAAO,CAAC,KAAa,IAAS,CAAC;IAEtB,iBAAiB,CAAC,IAAY,EAAE,KAAqB;QAC5D,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrC,IACE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,kBAAkB;YACrD,YAAY,IAAI,IAAI;YACpB,IAAI,CAAC,YAAY;YAEjB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAEQ,iBAAiB,CAAC,IAAY,EAAE,KAAqB;QAC5D,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,kBAAkB;YAClF,OAAO,IAAI,CAAC;QACd,OAAO,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAEQ,KAAK,CAAC,MAAqC;QAClD,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YACzB,MAAM,GAAG,MAAM,CAAC,WAAW,CACzB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3B,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAClE,CACF,CAAC;QACJ,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,wFAAwF;IACxF,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,OAAO,CAAC;IACrD,CAAC;IAIQ,KAAK,CAAC,KAAc;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClF,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5F,CAAC;IAGQ,MAAM,CAAC,KAAc;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpF,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5F,CAAC;IAED,6FAA6F;IACpF,IAAI,CAAC,KAAa,EAAE,MAAe;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YACpB,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;SAC1D,CAAC;QACF,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;SACjF,CAAC;QACF,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAChG,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE;YAClE,IAAI,CAAC,iBAAiB,CACpB,kBAAkB,EAClB,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CACpD,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAA4B;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAE,CAAC;IACjE,CAAC;IAED,UAAU;QACR,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO;YACtC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,wFAAwF;IACxF,CAAC,iBAAiB,CAAC;QACjB,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO;YACzE,MAAM,IAAI,SAAS,CAAC,eAAe,QAAQ,CAAC,IAAI,uBAAuB,UAAU,EAAE,CAAC,CAAC;QACvF,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO;YACjD,MAAM,IAAI,SAAS,CAAC,oBAAoB,QAAQ,CAAC,IAAI,YAAY,OAAO,EAAE,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,KAAK,GAA8B,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO;YACtC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;oBAC5C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBACnB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;wBAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;wBACd,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;gBACpB,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,OAAoB,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACrE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO;YAC7B,KAAK,MAAM,IAAI,IAAI,KAAK;gBACtB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAW,CAAC;QAClF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC/D,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,GAAG,EAAE;gBACX,IAAI,IAAI,CAAC,YAAY,EAAE;oBAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1C,CAAC;YACD,MAAM,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,CAAC;YACD,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;SAC5B,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;YAClB,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YAC9B,IAAI,IAAI,CAAC,QAAQ;gBAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,CAAC;oBAAS,CAAC;gBACT,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC7B,CAAC;YACD,gFAAgF;YAChF,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,EAAE;gBAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACvF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qFAAqF;IACrF,CAAC,WAAW,CAAC,CAAC,IAAY;QACxB,IAAI,IAAI,IAAI,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YACnF,MAAM,IAAI,SAAS,CAAC,6DAA6D,IAAI,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,qFAAqF;IACrF,CAAC,YAAY,CAAC,CACZ,IAAY,EACZ,IAAsB,EACtB,OAAoB,EACpB,OAAgB;QAEhB,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,MAAM;YAAE,YAAY,CAAC,OAAO,EAAE,OAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAChF,MAAM,KAAK,GAAU;YACnB,IAAI;YACJ,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;gBACrB,GAAG,OAAO;gBACV,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7E,CAAC;YACF,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;YACtB,KAAK,EAAE,OAAO;SACf,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE;YAChC,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;YACnB,GAAG,EAAE,GAAG,EAAE;gBACR,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrB,IAAI,IAAI,CAAC,aAAa;wBAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;oBACvF,OAAO,KAAK,CAAC,KAAK,CAAC;gBACrB,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;oBAC/B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBACb,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;wBAChC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;wBACnB,CAAC,CAAC,OAAO,CAAC;YAChB,CAAC;YACD,GAAG,EAAE,CAAC,KAAc,EAAE,EAAE;gBACtB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrB,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;wBAAE,OAAO;oBAC1C,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;oBACpB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACnB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;oBACrB,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAO;gBACpC,YAAY,CAAC,KAAK,EAAE,OAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBACzD,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC;oBAAE,OAAO;gBACtD,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,EAAE;oBACvD,IAAI,CAAC,iBAAiB,CACpB,kBAAkB,EAClB,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CACxD,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,kFAAkF;IAClF,CAAC,aAAa,CAAC,CAAS,KAAa,EAAE,QAAsB;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,QAAQ,EAAE,CAAC;QAC7F,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,MAAM,IAAI,OAAQ,MAA+B,CAAC,IAAI,KAAK,UAAU;gBACvE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;YAC/D,KAAK,CAAC,GAAG,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,MAAM,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,oCAAoC,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,UAAU;QACR,qFAAqF;QACrF,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACpF,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAChC,CAAC;IACD,YAAY,CAAC,KAAqB;QAChC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7D,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;QAC3D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,MAAM,IAAK,KAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;oBAAE,MAAM,IAAI,UAAU,CAAC,aAAa,IAAI,4BAA4B,CAAC,CAAC;gBACxF,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,MAAM,IAAI,SAAS,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;YAC5F,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,OAAoB,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,YAAY;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAC7B,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QACjC,IAAI,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CACjF,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAClD,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO;QACL,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7D,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;CACF;AAED,qFAAqF;AACrF,SAAS,MAAM,CAAC,KAAa;IAC3B,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;QACpC,MAAM,IAAI,UAAU,CAAC,qDAAqD,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU,CAAC,GAAmB;IACrC,MAAM,KAAK,GAAY,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7D,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IAC/D,OAAO,KAAuB,CAAC;AACjC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Component } from './component.js';
2
+ import type { ComponentClass, ComponentOptions, PropOptions } from './types.js';
3
+ export declare function component(options: ComponentOptions): <Class extends ComponentClass>(target: Class, _context: ClassDecoratorContext<Class>) => Class;
4
+ export declare function prop(options?: PropOptions): <Host extends Component, Value>(_target: undefined, context: ClassFieldDecoratorContext<Host, Value>) => (this: Host, value: Value) => Value;
5
+ export declare function state(): <Host extends Component, Value>(_target: undefined, context: ClassFieldDecoratorContext<Host, Value>) => (this: Host, value: Value) => Value;
6
+ export declare function action(label: string): <Host extends Component, Args extends unknown[], Result>(method: (this: Host, ...args: Args) => Result, context: ClassMethodDecoratorContext<Host, (this: Host, ...args: Args) => Result>) => (this: Host, ...args: Args) => Result;
7
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/components/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAKV,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhF,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,IACzC,KAAK,SAAS,cAAc,UAC1B,KAAK,YACH,qBAAqB,CAAC,KAAK,CAAC,KACrC,KAAK,CAmCT;AAwBD,wBAAgB,IAAI,CAAC,OAAO,GAAE,WAAgB,IArBpC,IAAI,SAAS,SAAS,EAAE,KAAK,WAC1B,SAAS,WACT,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,YAYzB,IAAI,SAAS,KAAK,KAAG,KAAK,CASpD;AACD,wBAAgB,KAAK,KAxBX,IAAI,SAAS,SAAS,EAAE,KAAK,WAC1B,SAAS,WACT,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,YAYzB,IAAI,SAAS,KAAK,KAAG,KAAK,CAYpD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,IAC1B,IAAI,SAAS,SAAS,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,UACpD,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,WACpC,2BAA2B,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,YAc1D,IAAI,WAAW,IAAI,KAAG,MAAM,CAItD"}
@@ -0,0 +1,83 @@
1
+ import { Component, installField, assertField, editComponent, registerAction, } from './component.js';
2
+ import { defineComponent } from './metadata.js';
3
+ import { initializeElement } from '../services/initialization.js';
4
+ import { destroySubtrees } from '../core/destruction.js';
5
+ import { claims, claimedSince } from '../services/claims.js';
6
+ import { withInternalStructure } from '../mixins/parent-internals.js';
7
+ export function component(options) {
8
+ return (target, _context) => {
9
+ if (!(target.prototype instanceof Component))
10
+ throw new TypeError('@component requires extends Component');
11
+ const Base = target;
12
+ const Decorated = class extends Base {
13
+ constructor(...args) {
14
+ // A marker, not a copy of every node: construction runs once per component.
15
+ const context = args[0], mark = claims;
16
+ try {
17
+ super(...args);
18
+ if (new.target === Decorated && !this.adopting)
19
+ this[initializeElement]();
20
+ }
21
+ catch (error) {
22
+ const created = claimedSince(context.registry.nodes, mark);
23
+ if (created.length) {
24
+ try {
25
+ withInternalStructure(() => created[0][destroySubtrees](created));
26
+ }
27
+ catch (cleanup) {
28
+ throw new AggregateError([error, cleanup], 'Component construction and cleanup failed');
29
+ }
30
+ }
31
+ throw error;
32
+ }
33
+ }
34
+ };
35
+ // Inherit edit rules from the decorated application base, not this wrapper's implementation base.
36
+ defineComponent(Decorated, options);
37
+ Object.defineProperty(Decorated, 'variant', {
38
+ value: Object.freeze({ attribute: 'data-rasam-component', value: options.type }),
39
+ });
40
+ return Decorated;
41
+ };
42
+ }
43
+ function field(kind, options) {
44
+ return (_target, context) => {
45
+ if (context.kind !== 'field' ||
46
+ context.private ||
47
+ context.static ||
48
+ typeof context.name !== 'string')
49
+ throw new TypeError(`@${kind} requires a public instance field`);
50
+ context.addInitializer(function () {
51
+ this[installField](context.name, kind, options, context.access.get(this));
52
+ });
53
+ return function (value) {
54
+ // Validate before the JS field definition can overwrite a base instance member.
55
+ this[assertField](context.name);
56
+ return value;
57
+ };
58
+ };
59
+ }
60
+ export function prop(options = {}) {
61
+ return field('prop', options);
62
+ }
63
+ export function state() {
64
+ return field('state', {});
65
+ }
66
+ export function action(label) {
67
+ return (method, context) => {
68
+ if (context.static ||
69
+ context.private ||
70
+ typeof context.name !== 'string' ||
71
+ !label.trim() ||
72
+ method.constructor.name === 'AsyncFunction')
73
+ throw new TypeError('@action requires a synchronous public instance method and label');
74
+ const name = context.name;
75
+ context.addInitializer(function () {
76
+ this[registerAction](name, label);
77
+ });
78
+ return function (...args) {
79
+ return this[editComponent](label, () => method.apply(this, args));
80
+ };
81
+ };
82
+ }
83
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/components/decorators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { PortDefinition } from '../types/common.js';
2
+ import type { ComponentClass, ComponentDefinition, ComponentOptions, PropOptions, PropValue } from './types.js';
3
+ export declare function definition(Constructor: object): ComponentDefinition;
4
+ export declare function defineComponent(Constructor: ComponentClass, options: ComponentOptions): void;
5
+ /** A saved size of a `resize: 'props'` component, in user units. */
6
+ export declare const isSize: (value: unknown) => value is number;
7
+ export declare function validateProp(value: unknown, initial: PropValue, options: PropOptions, name: string): asserts value is PropValue;
8
+ /** Checks what `ports()` returned and freezes a copy with only the known fields. */
9
+ export declare function validatePorts(ports: unknown): readonly PortDefinition[];
10
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/components/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACV,MAAM,YAAY,CAAC;AAIpB,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAInE;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CA4C5F;AAED,oEAAoE;AACpE,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,KAAK,IAAI,MACiB,CAAC;AAEnE,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,KAAK,IAAI,SAAS,CAc5B;AAID,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,cAAc,EAAE,CAmBvE"}
@@ -0,0 +1,85 @@
1
+ const definitions = new WeakMap();
2
+ export function definition(Constructor) {
3
+ const result = definitions.get(Constructor);
4
+ if (!result)
5
+ throw new TypeError('Component classes require their own @component decorator');
6
+ return result;
7
+ }
8
+ export function defineComponent(Constructor, options) {
9
+ let parent = Object.getPrototypeOf(Constructor);
10
+ while (parent && !definitions.has(parent))
11
+ parent = Object.getPrototypeOf(parent);
12
+ const inherited = definitions.get(parent);
13
+ const result = {
14
+ category: 'General',
15
+ version: 1,
16
+ rotate: 'free',
17
+ flip: true,
18
+ resize: 'scale',
19
+ ...(inherited
20
+ ? {
21
+ rotate: inherited.rotate,
22
+ flip: inherited.flip,
23
+ resize: inherited.resize,
24
+ width: inherited.width,
25
+ height: inherited.height,
26
+ }
27
+ : {}),
28
+ ...options,
29
+ };
30
+ if (result.resize === 'props')
31
+ Object.assign(result, { width: result.width ?? 100, height: result.height ?? 100 });
32
+ if (!/^[a-z][a-z0-9-]*$/.test(result.type) || !result.name?.trim() || !result.category?.trim())
33
+ throw new TypeError('Components need a lowercase type, display name and category');
34
+ if (!Number.isInteger(result.version) || result.version < 1)
35
+ throw new TypeError('Component version must be a positive integer');
36
+ if (result.rotate !== 'free' &&
37
+ result.rotate !== false &&
38
+ (!Number.isFinite(result.rotate) ||
39
+ result.rotate <= 0 ||
40
+ Math.abs(360 / result.rotate - Math.round(360 / result.rotate)) > 1e-8))
41
+ throw new TypeError('Rotation steps must be positive divisors of 360');
42
+ if (typeof result.flip !== 'boolean' || !['scale', 'props', false].includes(result.resize))
43
+ throw new TypeError('Invalid component flip or resize rule');
44
+ if (result.resize === 'props'
45
+ ? !isSize(result.width) || !isSize(result.height)
46
+ : result.width !== undefined || result.height !== undefined)
47
+ throw new TypeError("Default sizes need resize: 'props' and positive finite numbers");
48
+ definitions.set(Constructor, Object.freeze(result));
49
+ }
50
+ /** A saved size of a `resize: 'props'` component, in user units. */
51
+ export const isSize = (value) => typeof value === 'number' && Number.isFinite(value) && value > 0;
52
+ export function validateProp(value, initial, options, name) {
53
+ if (value !== null && !['string', 'number', 'boolean'].includes(typeof value))
54
+ throw new TypeError(`Invalid component prop: ${name}`);
55
+ if (value !== null && initial !== null && typeof value !== typeof initial)
56
+ throw new TypeError(`Wrong type for component prop: ${name}`);
57
+ if (typeof value === 'number' &&
58
+ (!Number.isFinite(value) ||
59
+ value < (options.min ?? -Infinity) ||
60
+ value > (options.max ?? Infinity)))
61
+ throw new RangeError(`Component prop is outside its limits: ${name}`);
62
+ if (options.options && !options.options.includes(value))
63
+ throw new RangeError(`Unknown option for component prop: ${name}`);
64
+ }
65
+ const sides = ['left', 'right', 'top', 'bottom'];
66
+ /** Checks what `ports()` returned and freezes a copy with only the known fields. */
67
+ export function validatePorts(ports) {
68
+ if (!Array.isArray(ports))
69
+ throw new TypeError('Component ports() must return an array');
70
+ const names = new Set();
71
+ return Object.freeze(ports.map((port) => {
72
+ const { name, x, y, side } = port ?? {};
73
+ if (typeof name !== 'string' || !name)
74
+ throw new TypeError('Component port names must be non-empty strings');
75
+ if (names.has(name))
76
+ throw new TypeError(`Duplicate component port: ${name}`);
77
+ names.add(name);
78
+ if (!Number.isFinite(x) || !Number.isFinite(y))
79
+ throw new RangeError(`Component port ${name} needs finite x and y`);
80
+ if (side !== undefined && !sides.includes(side))
81
+ throw new TypeError(`Unknown side for component port ${name}: ${String(side)}`);
82
+ return Object.freeze(side === undefined ? { name, x: x, y: y } : { name, x: x, y: y, side });
83
+ }));
84
+ }
85
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/components/metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AnyNode } from '../core/types.js';
2
+ import type { ParentNode } from '../mixins/types.js';
3
+ import { Component } from './component.js';
4
+ import type { ComponentClass, ComponentDefinition } from './types.js';
5
+ /** Per-drawing type registration, palette metadata, icons and unknown-type warnings. */
6
+ export declare class ComponentTypes {
7
+ private readonly drawing;
8
+ private readonly types;
9
+ private readonly warned;
10
+ private readonly seen;
11
+ private readonly stop;
12
+ constructor(drawing: AnyNode, types?: readonly ComponentClass[]);
13
+ private inspect;
14
+ private warn;
15
+ register(Constructor: ComponentClass): this;
16
+ list(category?: string): readonly ComponentDefinition[];
17
+ get(type: string): ComponentClass | undefined;
18
+ icon(type: string, parent: ParentNode): Component;
19
+ resetState(): void;
20
+ destroy(): void;
21
+ }
22
+ /** Compose with selection's existing filter to keep rendered children closed. */
23
+ export declare function isComponentChild(node: AnyNode): boolean;
24
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/components/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtE,wFAAwF;AACxF,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,YACmB,OAAO,EAAE,OAAO,EACjC,KAAK,GAAE,SAAS,cAAc,EAAO,EAStC;IACD,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,IAAI;IAOZ,QAAQ,CAAC,WAAW,EAAE,cAAc,GAAG,IAAI,CAQ1C;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,mBAAmB,EAAE,CAOtD;IACD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE5C;IACD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CAIhD;IACD,UAAU,IAAI,IAAI,CAEjB;IACD,OAAO,IAAI,IAAI,CAEd;CACF;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAIvD"}
@@ -0,0 +1,78 @@
1
+ import { Guards } from '../mixins/guards.js';
2
+ import { ComponentChanges } from './changes.js';
3
+ import { Component } from './component.js';
4
+ import { definition } from './metadata.js';
5
+ /** Per-drawing type registration, palette metadata, icons and unknown-type warnings. */
6
+ export class ComponentTypes {
7
+ drawing;
8
+ types = new Map();
9
+ warned = new Set();
10
+ seen = new WeakSet();
11
+ stop;
12
+ constructor(drawing, types = []) {
13
+ this.drawing = drawing;
14
+ for (const Constructor of types)
15
+ this.register(Constructor);
16
+ this.stop = ComponentChanges.for(drawing).discover({
17
+ added: (node) => this.inspect(node),
18
+ identityChanged: (node) => this.warn(node),
19
+ });
20
+ drawing.onDispose(() => this.destroy());
21
+ this.inspect(drawing);
22
+ }
23
+ inspect(node) {
24
+ if (this.seen.has(node) || node.isDestroyed)
25
+ return;
26
+ this.seen.add(node);
27
+ this.warn(node);
28
+ if (Guards.isParent(node))
29
+ for (const child of node.children)
30
+ this.inspect(child);
31
+ }
32
+ warn(node) {
33
+ const type = node.getAttributeValue('data-rasam-component');
34
+ if (type !== undefined && !(node instanceof Component) && !this.warned.has(String(type))) {
35
+ this.warned.add(String(type));
36
+ console.warn(`Unknown rasam component type: ${type}; loaded as a plain group`);
37
+ }
38
+ }
39
+ register(Constructor) {
40
+ const metadata = definition(Constructor), previous = this.types.get(metadata.type);
41
+ if (previous && previous !== Constructor)
42
+ throw new Error(`Component type already registered: ${metadata.type}`);
43
+ this.drawing.context.registry.register(Constructor);
44
+ this.types.set(metadata.type, Constructor);
45
+ return this;
46
+ }
47
+ list(category) {
48
+ return Object.freeze([...this.types.values()]
49
+ .map((Constructor) => definition(Constructor))
50
+ .filter((metadata) => category === undefined || metadata.category === category)
51
+ .sort((a, b) => a.category.localeCompare(b.category) || a.name.localeCompare(b.name)));
52
+ }
53
+ get(type) {
54
+ return this.types.get(type);
55
+ }
56
+ icon(type, parent) {
57
+ const Constructor = this.get(type);
58
+ if (!Constructor)
59
+ throw new TypeError(`Unknown component type: ${type}`);
60
+ return parent.create(Constructor, {});
61
+ }
62
+ resetState() {
63
+ for (const node of this.drawing.descendants())
64
+ if (node instanceof Component)
65
+ node.resetState();
66
+ }
67
+ destroy() {
68
+ this.stop();
69
+ }
70
+ }
71
+ /** Compose with selection's existing filter to keep rendered children closed. */
72
+ export function isComponentChild(node) {
73
+ for (let parent = node.parent; parent; parent = parent.parent)
74
+ if (parent instanceof Component)
75
+ return true;
76
+ return false;
77
+ }
78
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/components/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { EditRules } from '../types/common.js';
2
+ import type { Component } from './component.js';
3
+ import type { DrawingContext } from '../services/context.js';
4
+ import type { ElementClass } from '../services/types.js';
5
+ export type PropValue = string | number | boolean | null;
6
+ export type ComponentProps = Readonly<Record<string, PropValue>>;
7
+ /** Standard decorators cannot distinguish props from other fields in the TS type system. */
8
+ export type ComponentFields<Instance extends Component> = {
9
+ [Key in Exclude<keyof Instance, keyof Component> as Instance[Key] extends PropValue ? Key : never]?: Instance[Key];
10
+ } & {
11
+ /** The saved size of a `resize: 'props'` component; other components reject it. */
12
+ readonly width?: number;
13
+ readonly height?: number;
14
+ };
15
+ export interface PropOptions {
16
+ readonly label?: string;
17
+ readonly unit?: string;
18
+ readonly min?: number;
19
+ readonly max?: number;
20
+ readonly step?: number;
21
+ readonly options?: readonly PropValue[];
22
+ readonly type?: 'color';
23
+ readonly notation?: 'si';
24
+ }
25
+ export interface ComponentOptions extends EditRules {
26
+ readonly type: string;
27
+ readonly name: string;
28
+ readonly category?: string;
29
+ readonly version?: number;
30
+ readonly migrate?: (props: ComponentProps, version: number) => ComponentProps;
31
+ /** Default size for `resize: 'props'`, in user units. Defaults to 100. */
32
+ readonly width?: number;
33
+ readonly height?: number;
34
+ }
35
+ export interface ComponentDefinition extends ComponentOptions {
36
+ readonly category: string;
37
+ readonly version: number;
38
+ readonly rotate: NonNullable<EditRules['rotate']>;
39
+ readonly flip: boolean;
40
+ readonly resize: NonNullable<EditRules['resize']>;
41
+ }
42
+ export interface ComponentClass<Instance extends Component = Component> extends ElementClass<ComponentProps, Instance> {
43
+ new (context: DrawingContext, props?: ComponentProps, existing?: SVGGElement): Instance;
44
+ }
45
+ /** An `@action` method: its name and undo label. */
46
+ export interface ActionDefinition {
47
+ readonly name: string;
48
+ readonly label: string;
49
+ }
50
+ export interface PropDefinition extends PropOptions {
51
+ readonly name: string;
52
+ readonly initial: PropValue;
53
+ }
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/components/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/components/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { SvgTemplate } from '../template/svg-tag.js';
2
+ import type { Component } from './component.js';
3
+ /** Reuses saved wrappers when their structure matches the class's current template. */
4
+ export declare class ComponentView {
5
+ #private;
6
+ constructor(owner: Component);
7
+ render(template: SvgTemplate): void;
8
+ }
9
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/components/view.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,uFAAuF;AACvF,qBAAa,aAAa;;IAMxB,YAAY,KAAK,EAAE,SAAS,EAE3B;IAED,MAAM,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CA8ClC;CAkDF"}
@@ -0,0 +1,104 @@
1
+ import { Group } from '../elements/group.js';
2
+ import { Renderer } from '../template/render.js';
3
+ import { BindingPart, TemplateCompiler, } from '../template/parts.js';
4
+ import { Guards } from '../mixins/guards.js';
5
+ import { destroySubtrees } from '../core/destruction.js';
6
+ import { Attributes } from '../dom/attributes.js';
7
+ /** Reuses saved wrappers when their structure matches the class's current template. */
8
+ export class ComponentView {
9
+ #instance;
10
+ #host;
11
+ #strings;
12
+ #parts = [];
13
+ #owner;
14
+ constructor(owner) {
15
+ this.#owner = owner;
16
+ }
17
+ render(template) {
18
+ if (this.#instance &&
19
+ !this.#instance.isDestroyed &&
20
+ this.#instance.host.parent === this.#owner &&
21
+ this.#instance.template.strings === template.strings) {
22
+ this.#instance.update(template);
23
+ return;
24
+ }
25
+ if (this.#host &&
26
+ !this.#host.isDestroyed &&
27
+ this.#host.parent === this.#owner &&
28
+ this.#strings === template.strings) {
29
+ this.#update(template);
30
+ return;
31
+ }
32
+ this.#parts = [];
33
+ // The first template-power phase owns structural holes; rebuild saved dynamic trees
34
+ // through its renderer instead of trying to infer their binding layout here.
35
+ const content = TemplateCompiler.content(this.#owner.context.dom, template.strings);
36
+ TemplateCompiler.validate(content, this.#owner.context.registry);
37
+ const descriptions = this.#hasChildHoles(content)
38
+ ? undefined
39
+ : content.filter((item) => 'tag' in item);
40
+ const host = this.#owner.children.length === 1 ? this.#owner.children[0] : undefined;
41
+ if (descriptions &&
42
+ host instanceof Group &&
43
+ this.#attributesMatch(host, {}) &&
44
+ this.#matches(host.children, descriptions)) {
45
+ this.#bind(host.children, descriptions);
46
+ this.#host = host;
47
+ this.#strings = template.strings;
48
+ this.#instance = undefined;
49
+ this.#update(template);
50
+ return;
51
+ }
52
+ const previous = [...this.#owner.children];
53
+ this.#instance = new Renderer(this.#owner).render(template);
54
+ if (previous.length)
55
+ this.#owner[destroySubtrees](previous);
56
+ this.#host = undefined;
57
+ this.#strings = undefined;
58
+ }
59
+ #attributesMatch(node, attributes) {
60
+ const names = node.attributes.entries().map(([name]) => name);
61
+ names.push(...node.el.getAttributeNames().map(Attributes.normalizeName));
62
+ return names.every((name) => Object.hasOwn(attributes, name));
63
+ }
64
+ #hasChildHoles(content) {
65
+ return content.some((item) => {
66
+ if (!('tag' in item))
67
+ return item.parts.some((part) => typeof part === 'number');
68
+ const Constructor = this.#owner.context.registry.get(item.tag);
69
+ return this.#hasChildHoles(Constructor?.isText ? item.children : item.content);
70
+ });
71
+ }
72
+ #matches(nodes, descriptions) {
73
+ return (nodes.length === descriptions.length &&
74
+ nodes.every((node, index) => {
75
+ const description = descriptions[index];
76
+ return (!(Guards.isTextual(node) && description.text.length && description.children.length) &&
77
+ node.el.localName === description.tag &&
78
+ this.#attributesMatch(node, description.attributes) &&
79
+ (Guards.isParent(node)
80
+ ? this.#matches(node.children, description.children)
81
+ : description.children.length === 0));
82
+ }));
83
+ }
84
+ #bind(nodes, descriptions) {
85
+ nodes.forEach((node, index) => {
86
+ const description = descriptions[index];
87
+ for (const [name, parts] of Object.entries(description.attributes))
88
+ this.#parts.push(new BindingPart(node, name, parts));
89
+ if (description.text.length && Guards.isTextual(node)) {
90
+ this.#parts.push(new BindingPart(node, null, description.text));
91
+ }
92
+ if (Guards.isParent(node))
93
+ this.#bind(node.children, description.children);
94
+ });
95
+ }
96
+ #update(template) {
97
+ const changes = this.#parts.map((part) => ({ part, value: part.evaluate(template.values) }));
98
+ for (const { part, value } of changes)
99
+ part.validate(value);
100
+ for (const { part, value } of changes)
101
+ part.commit(value);
102
+ }
103
+ }
104
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/components/view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Opt-in class component rendering, saved props and temporary live state. */
2
+ export { Component } from './components/component.js';
3
+ export { component, prop, state, action } from './components/decorators.js';
4
+ export { ComponentTypes, isComponentChild } from './components/registry.js';
5
+ export type { ActionDefinition, ComponentClass, ComponentDefinition, ComponentFields, ComponentOptions, ComponentProps, PropValue, PropOptions, PropDefinition, } from './components/types.js';
6
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,WAAW,EACX,cAAc,GACf,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Opt-in class component rendering, saved props and temporary live state. */
2
+ export { Component } from './components/component.js';
3
+ export { component, prop, state, action } from './components/decorators.js';
4
+ export { ComponentTypes, isComponentChild } from './components/registry.js';
5
+ //# sourceMappingURL=components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { Attributes } from '../dom/attributes.js';
2
2
  import { Emitter } from '../events/emitter.js';
3
3
  import type { DrawingContext } from '../services/context.js';
4
+ import type { ElementVariant } from '../services/types.js';
4
5
  import type { ParentNode } from '../mixins/types.js';
5
6
  import type { AttributeValue, Bounds, CommonAttributes } from '../types/common.js';
6
7
  import type { AnyNode, NodeEvents } from './types.js';
@@ -15,6 +16,10 @@ export declare class Node<Element extends SVGElement = SVGElement, Properties ex
15
16
  static readonly isText: boolean;
16
17
  static readonly childTags: readonly string[] | undefined;
17
18
  static readonly forbiddenDescendantTags: readonly string[] | undefined;
19
+ /** See `ElementVariant`: one `data-*` attribute value selects this class for its tag. */
20
+ static readonly variant: ElementVariant | undefined;
21
+ /** When true, only the class itself changes its children, through `withOwnChildren()`. */
22
+ static readonly ownsChildren: boolean;
18
23
  readonly el: Element;
19
24
  readonly attributes: Attributes;
20
25
  private eventEmitter?;
@@ -37,6 +42,8 @@ export declare class Node<Element extends SVGElement = SVGElement, Properties ex
37
42
  [validateModelState](_state: ModelFeatures): void;
38
43
  defineAttribute(name: string): void;
39
44
  validateAttribute(name: string, value: AttributeValue): void;
45
+ /** For classes with `static ownsChildren`: change this node's own children. */
46
+ protected withOwnChildren<Result>(callback: () => Result): Result;
40
47
  getAttributeValue(name: string): string | number | undefined;
41
48
  attr<Key extends keyof Properties & string>(name: Key): Properties[Key] | undefined;
42
49
  attr<Key extends keyof Properties & string>(name: Key, value: Properties[Key] | null | undefined): this;