@miurajs/miura-render 0.0.0 → 0.1.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 (262) hide show
  1. package/dist/index.d.ts +14 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +13 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/binding-manager/binding-manager.d.ts +30 -0
  6. package/dist/src/binding-manager/binding-manager.d.ts.map +1 -0
  7. package/dist/src/binding-manager/binding-manager.js +245 -0
  8. package/dist/src/binding-manager/binding-manager.js.map +1 -0
  9. package/dist/src/binding-manager/binding-type.d.ts +24 -0
  10. package/dist/src/binding-manager/binding-type.d.ts.map +1 -0
  11. package/dist/src/binding-manager/binding-type.js +25 -0
  12. package/dist/src/binding-manager/binding-type.js.map +1 -0
  13. package/dist/src/binding-manager/bindings/async-binding.d.ts +23 -0
  14. package/dist/src/binding-manager/bindings/async-binding.d.ts.map +1 -0
  15. package/dist/src/binding-manager/bindings/async-binding.js +67 -0
  16. package/dist/src/binding-manager/bindings/async-binding.js.map +1 -0
  17. package/dist/src/binding-manager/bindings/attribute-binding.d.ts +41 -0
  18. package/dist/src/binding-manager/bindings/attribute-binding.d.ts.map +1 -0
  19. package/dist/src/binding-manager/bindings/attribute-binding.js +79 -0
  20. package/dist/src/binding-manager/bindings/attribute-binding.js.map +1 -0
  21. package/dist/src/binding-manager/bindings/bind-binding.d.ts +30 -0
  22. package/dist/src/binding-manager/bindings/bind-binding.d.ts.map +1 -0
  23. package/dist/src/binding-manager/bindings/bind-binding.js +81 -0
  24. package/dist/src/binding-manager/bindings/bind-binding.js.map +1 -0
  25. package/dist/src/binding-manager/bindings/binding.d.ts +6 -0
  26. package/dist/src/binding-manager/bindings/binding.d.ts.map +1 -0
  27. package/dist/src/binding-manager/bindings/binding.js +2 -0
  28. package/dist/src/binding-manager/bindings/binding.js.map +1 -0
  29. package/dist/src/binding-manager/bindings/boolean-binding.d.ts +18 -0
  30. package/dist/src/binding-manager/bindings/boolean-binding.d.ts.map +1 -0
  31. package/dist/src/binding-manager/bindings/boolean-binding.js +65 -0
  32. package/dist/src/binding-manager/bindings/boolean-binding.js.map +1 -0
  33. package/dist/src/binding-manager/bindings/class-binding.d.ts +10 -0
  34. package/dist/src/binding-manager/bindings/class-binding.d.ts.map +1 -0
  35. package/dist/src/binding-manager/bindings/class-binding.js +68 -0
  36. package/dist/src/binding-manager/bindings/class-binding.js.map +1 -0
  37. package/dist/src/binding-manager/bindings/directive-binding.d.ts +15 -0
  38. package/dist/src/binding-manager/bindings/directive-binding.d.ts.map +1 -0
  39. package/dist/src/binding-manager/bindings/directive-binding.js +70 -0
  40. package/dist/src/binding-manager/bindings/directive-binding.js.map +1 -0
  41. package/dist/src/binding-manager/bindings/event-binding.d.ts +14 -0
  42. package/dist/src/binding-manager/bindings/event-binding.d.ts.map +1 -0
  43. package/dist/src/binding-manager/bindings/event-binding.js +73 -0
  44. package/dist/src/binding-manager/bindings/event-binding.js.map +1 -0
  45. package/dist/src/binding-manager/bindings/node-binding.d.ts +36 -0
  46. package/dist/src/binding-manager/bindings/node-binding.d.ts.map +1 -0
  47. package/dist/src/binding-manager/bindings/node-binding.js +235 -0
  48. package/dist/src/binding-manager/bindings/node-binding.js.map +1 -0
  49. package/dist/src/binding-manager/bindings/object-class-binding.d.ts +16 -0
  50. package/dist/src/binding-manager/bindings/object-class-binding.d.ts.map +1 -0
  51. package/dist/src/binding-manager/bindings/object-class-binding.js +42 -0
  52. package/dist/src/binding-manager/bindings/object-class-binding.js.map +1 -0
  53. package/dist/src/binding-manager/bindings/object-style-binding.d.ts +16 -0
  54. package/dist/src/binding-manager/bindings/object-style-binding.d.ts.map +1 -0
  55. package/dist/src/binding-manager/bindings/object-style-binding.js +38 -0
  56. package/dist/src/binding-manager/bindings/object-style-binding.js.map +1 -0
  57. package/dist/src/binding-manager/bindings/property-binding.d.ts +12 -0
  58. package/dist/src/binding-manager/bindings/property-binding.d.ts.map +1 -0
  59. package/dist/src/binding-manager/bindings/property-binding.js +44 -0
  60. package/dist/src/binding-manager/bindings/property-binding.js.map +1 -0
  61. package/dist/src/binding-manager/bindings/reference-binding.d.ts +14 -0
  62. package/dist/src/binding-manager/bindings/reference-binding.d.ts.map +1 -0
  63. package/dist/src/binding-manager/bindings/reference-binding.js +44 -0
  64. package/dist/src/binding-manager/bindings/reference-binding.js.map +1 -0
  65. package/dist/src/binding-manager/bindings/spread-binding.d.ts +16 -0
  66. package/dist/src/binding-manager/bindings/spread-binding.d.ts.map +1 -0
  67. package/dist/src/binding-manager/bindings/spread-binding.js +40 -0
  68. package/dist/src/binding-manager/bindings/spread-binding.js.map +1 -0
  69. package/dist/src/binding-manager/bindings/style-binding.d.ts +10 -0
  70. package/dist/src/binding-manager/bindings/style-binding.d.ts.map +1 -0
  71. package/dist/src/binding-manager/bindings/style-binding.js +44 -0
  72. package/dist/src/binding-manager/bindings/style-binding.js.map +1 -0
  73. package/dist/src/compiler/code-factory.d.ts +45 -0
  74. package/dist/src/compiler/code-factory.d.ts.map +1 -0
  75. package/dist/src/compiler/code-factory.js +211 -0
  76. package/dist/src/compiler/code-factory.js.map +1 -0
  77. package/dist/src/compiler/compiler.d.ts +77 -0
  78. package/dist/src/compiler/compiler.d.ts.map +1 -0
  79. package/dist/src/compiler/compiler.js +77 -0
  80. package/dist/src/compiler/compiler.js.map +1 -0
  81. package/dist/src/compiler/constants.d.ts +5 -0
  82. package/dist/src/compiler/constants.d.ts.map +1 -0
  83. package/dist/src/compiler/constants.js +9 -0
  84. package/dist/src/compiler/constants.js.map +1 -0
  85. package/dist/src/css-result.d.ts +27 -0
  86. package/dist/src/css-result.d.ts.map +1 -0
  87. package/dist/src/css-result.js +56 -0
  88. package/dist/src/css-result.js.map +1 -0
  89. package/dist/src/css.d.ts +26 -0
  90. package/dist/src/css.d.ts.map +1 -0
  91. package/dist/src/css.js +62 -0
  92. package/dist/src/css.js.map +1 -0
  93. package/dist/src/directives/animate.directive.d.ts +42 -0
  94. package/dist/src/directives/animate.directive.d.ts.map +1 -0
  95. package/dist/src/directives/animate.directive.js +349 -0
  96. package/dist/src/directives/animate.directive.js.map +1 -0
  97. package/dist/src/directives/await.d.ts +68 -0
  98. package/dist/src/directives/await.d.ts.map +1 -0
  99. package/dist/src/directives/await.js +70 -0
  100. package/dist/src/directives/await.js.map +1 -0
  101. package/dist/src/directives/choose.d.ts +28 -0
  102. package/dist/src/directives/choose.d.ts.map +1 -0
  103. package/dist/src/directives/choose.js +30 -0
  104. package/dist/src/directives/choose.js.map +1 -0
  105. package/dist/src/directives/decorator-example.d.ts +8 -0
  106. package/dist/src/directives/decorator-example.d.ts.map +1 -0
  107. package/dist/src/directives/decorator-example.js +32 -0
  108. package/dist/src/directives/decorator-example.js.map +1 -0
  109. package/dist/src/directives/decorators.d.ts +3 -0
  110. package/dist/src/directives/decorators.d.ts.map +1 -0
  111. package/dist/src/directives/decorators.js +17 -0
  112. package/dist/src/directives/decorators.js.map +1 -0
  113. package/dist/src/directives/directive-manager.d.ts +26 -0
  114. package/dist/src/directives/directive-manager.d.ts.map +1 -0
  115. package/dist/src/directives/directive-manager.js +114 -0
  116. package/dist/src/directives/directive-manager.js.map +1 -0
  117. package/dist/src/directives/directive.d.ts +38 -0
  118. package/dist/src/directives/directive.d.ts.map +1 -0
  119. package/dist/src/directives/directive.js +18 -0
  120. package/dist/src/directives/directive.js.map +1 -0
  121. package/dist/src/directives/focus.directive.d.ts +16 -0
  122. package/dist/src/directives/focus.directive.d.ts.map +1 -0
  123. package/dist/src/directives/focus.directive.js +29 -0
  124. package/dist/src/directives/focus.directive.js.map +1 -0
  125. package/dist/src/directives/gesture.directive.d.ts +58 -0
  126. package/dist/src/directives/gesture.directive.d.ts.map +1 -0
  127. package/dist/src/directives/gesture.directive.js +331 -0
  128. package/dist/src/directives/gesture.directive.js.map +1 -0
  129. package/dist/src/directives/index.d.ts +34 -0
  130. package/dist/src/directives/index.d.ts.map +1 -0
  131. package/dist/src/directives/index.js +35 -0
  132. package/dist/src/directives/index.js.map +1 -0
  133. package/dist/src/directives/intersection.directive.d.ts +18 -0
  134. package/dist/src/directives/intersection.directive.d.ts.map +1 -0
  135. package/dist/src/directives/intersection.directive.js +50 -0
  136. package/dist/src/directives/intersection.directive.js.map +1 -0
  137. package/dist/src/directives/keyed-diff.d.ts +30 -0
  138. package/dist/src/directives/keyed-diff.d.ts.map +1 -0
  139. package/dist/src/directives/keyed-diff.js +185 -0
  140. package/dist/src/directives/keyed-diff.js.map +1 -0
  141. package/dist/src/directives/lazy-setup.d.ts +3 -0
  142. package/dist/src/directives/lazy-setup.d.ts.map +1 -0
  143. package/dist/src/directives/lazy-setup.js +55 -0
  144. package/dist/src/directives/lazy-setup.js.map +1 -0
  145. package/dist/src/directives/lazy.directive.d.ts +19 -0
  146. package/dist/src/directives/lazy.directive.d.ts.map +1 -0
  147. package/dist/src/directives/lazy.directive.js +73 -0
  148. package/dist/src/directives/lazy.directive.js.map +1 -0
  149. package/dist/src/directives/media.directive.d.ts +31 -0
  150. package/dist/src/directives/media.directive.d.ts.map +1 -0
  151. package/dist/src/directives/media.directive.js +105 -0
  152. package/dist/src/directives/media.directive.js.map +1 -0
  153. package/dist/src/directives/mutation.directive.d.ts +11 -0
  154. package/dist/src/directives/mutation.directive.d.ts.map +1 -0
  155. package/dist/src/directives/mutation.directive.js +56 -0
  156. package/dist/src/directives/mutation.directive.js.map +1 -0
  157. package/dist/src/directives/repeat.d.ts +50 -0
  158. package/dist/src/directives/repeat.d.ts.map +1 -0
  159. package/dist/src/directives/repeat.js +47 -0
  160. package/dist/src/directives/repeat.js.map +1 -0
  161. package/dist/src/directives/resize.directive.d.ts +14 -0
  162. package/dist/src/directives/resize.directive.d.ts.map +1 -0
  163. package/dist/src/directives/resize.directive.js +81 -0
  164. package/dist/src/directives/resize.directive.js.map +1 -0
  165. package/dist/src/directives/setup.d.ts +9 -0
  166. package/dist/src/directives/setup.d.ts.map +1 -0
  167. package/dist/src/directives/setup.js +9 -0
  168. package/dist/src/directives/setup.js.map +1 -0
  169. package/dist/src/directives/structural/async.directive.d.ts +39 -0
  170. package/dist/src/directives/structural/async.directive.d.ts.map +1 -0
  171. package/dist/src/directives/structural/async.directive.js +115 -0
  172. package/dist/src/directives/structural/async.directive.js.map +1 -0
  173. package/dist/src/directives/structural/for.directive.d.ts +37 -0
  174. package/dist/src/directives/structural/for.directive.d.ts.map +1 -0
  175. package/dist/src/directives/structural/for.directive.js +209 -0
  176. package/dist/src/directives/structural/for.directive.js.map +1 -0
  177. package/dist/src/directives/structural/if.directive.d.ts +54 -0
  178. package/dist/src/directives/structural/if.directive.d.ts.map +1 -0
  179. package/dist/src/directives/structural/if.directive.js +210 -0
  180. package/dist/src/directives/structural/if.directive.js.map +1 -0
  181. package/dist/src/directives/structural/structural.directive.d.ts +11 -0
  182. package/dist/src/directives/structural/structural.directive.d.ts.map +1 -0
  183. package/dist/src/directives/structural/structural.directive.js +29 -0
  184. package/dist/src/directives/structural/structural.directive.js.map +1 -0
  185. package/dist/src/directives/structural/switch.directive.d.ts +12 -0
  186. package/dist/src/directives/structural/switch.directive.d.ts.map +1 -0
  187. package/dist/src/directives/structural/switch.directive.js +69 -0
  188. package/dist/src/directives/structural/switch.directive.js.map +1 -0
  189. package/dist/src/directives/structural/virtual-scroll.directive.d.ts +50 -0
  190. package/dist/src/directives/structural/virtual-scroll.directive.d.ts.map +1 -0
  191. package/dist/src/directives/structural/virtual-scroll.directive.js +165 -0
  192. package/dist/src/directives/structural/virtual-scroll.directive.js.map +1 -0
  193. package/dist/src/directives/utils.d.ts +61 -0
  194. package/dist/src/directives/utils.d.ts.map +1 -0
  195. package/dist/src/directives/utils.js +121 -0
  196. package/dist/src/directives/utils.js.map +1 -0
  197. package/dist/src/directives/validate.directive.d.ts +41 -0
  198. package/dist/src/directives/validate.directive.d.ts.map +1 -0
  199. package/dist/src/directives/validate.directive.js +161 -0
  200. package/dist/src/directives/validate.directive.js.map +1 -0
  201. package/dist/src/directives/virtual-scroll.d.ts +91 -0
  202. package/dist/src/directives/virtual-scroll.d.ts.map +1 -0
  203. package/dist/src/directives/virtual-scroll.js +78 -0
  204. package/dist/src/directives/virtual-scroll.js.map +1 -0
  205. package/dist/src/directives/when.d.ts +24 -0
  206. package/dist/src/directives/when.d.ts.map +1 -0
  207. package/dist/src/directives/when.js +25 -0
  208. package/dist/src/directives/when.js.map +1 -0
  209. package/dist/src/html.d.ts +23 -0
  210. package/dist/src/html.d.ts.map +1 -0
  211. package/dist/src/html.js +37 -0
  212. package/dist/src/html.js.map +1 -0
  213. package/dist/src/modifiers/capture-modifier.d.ts +6 -0
  214. package/dist/src/modifiers/capture-modifier.d.ts.map +1 -0
  215. package/dist/src/modifiers/capture-modifier.js +14 -0
  216. package/dist/src/modifiers/capture-modifier.js.map +1 -0
  217. package/dist/src/modifiers/event-modifiers.d.ts +38 -0
  218. package/dist/src/modifiers/event-modifiers.d.ts.map +1 -0
  219. package/dist/src/modifiers/event-modifiers.js +90 -0
  220. package/dist/src/modifiers/event-modifiers.js.map +1 -0
  221. package/dist/src/modifiers/key-modifiers.d.ts +8 -0
  222. package/dist/src/modifiers/key-modifiers.d.ts.map +1 -0
  223. package/dist/src/modifiers/key-modifiers.js +29 -0
  224. package/dist/src/modifiers/key-modifiers.js.map +1 -0
  225. package/dist/src/modifiers/mouse-modifiers.d.ts +8 -0
  226. package/dist/src/modifiers/mouse-modifiers.d.ts.map +1 -0
  227. package/dist/src/modifiers/mouse-modifiers.js +15 -0
  228. package/dist/src/modifiers/mouse-modifiers.js.map +1 -0
  229. package/dist/src/modifiers/once-modifier.d.ts +6 -0
  230. package/dist/src/modifiers/once-modifier.d.ts.map +1 -0
  231. package/dist/src/modifiers/once-modifier.js +11 -0
  232. package/dist/src/modifiers/once-modifier.js.map +1 -0
  233. package/dist/src/modifiers/passive-modifier.d.ts +6 -0
  234. package/dist/src/modifiers/passive-modifier.d.ts.map +1 -0
  235. package/dist/src/modifiers/passive-modifier.js +14 -0
  236. package/dist/src/modifiers/passive-modifier.js.map +1 -0
  237. package/dist/src/processor/parser.d.ts +74 -0
  238. package/dist/src/processor/parser.d.ts.map +1 -0
  239. package/dist/src/processor/parser.js +345 -0
  240. package/dist/src/processor/parser.js.map +1 -0
  241. package/dist/src/processor/processor.d.ts +68 -0
  242. package/dist/src/processor/processor.d.ts.map +1 -0
  243. package/dist/src/processor/processor.js +138 -0
  244. package/dist/src/processor/processor.js.map +1 -0
  245. package/dist/src/processor/template-result.d.ts +74 -0
  246. package/dist/src/processor/template-result.d.ts.map +1 -0
  247. package/dist/src/processor/template-result.js +53 -0
  248. package/dist/src/processor/template-result.js.map +1 -0
  249. package/dist/src/processor/types.d.ts +16 -0
  250. package/dist/src/processor/types.d.ts.map +1 -0
  251. package/dist/src/processor/types.js +13 -0
  252. package/dist/src/processor/types.js.map +1 -0
  253. package/dist/src/utils/debug.d.ts +7 -0
  254. package/dist/src/utils/debug.d.ts.map +1 -0
  255. package/dist/src/utils/debug.js +7 -0
  256. package/dist/src/utils/debug.js.map +1 -0
  257. package/dist/src/utils/performance.d.ts +50 -0
  258. package/dist/src/utils/performance.d.ts.map +1 -0
  259. package/dist/src/utils/performance.js +51 -0
  260. package/dist/src/utils/performance.js.map +1 -0
  261. package/dist/tsconfig.tsbuildinfo +1 -0
  262. package/package.json +8 -10
@@ -0,0 +1,14 @@
1
+ export * from './src/processor/template-result';
2
+ export * from './src/processor/processor';
3
+ export * from './src/processor/types';
4
+ export * from './src/css-result';
5
+ export * from './src/utils/debug';
6
+ export * from './src/utils/performance';
7
+ export { html, getHtmlMetrics, resetHtmlMetrics } from './src/html';
8
+ export { css, getCssMetrics, resetCssMetrics, clearCssCache } from './src/css';
9
+ export * from './src/directives';
10
+ export { TemplateCompiler } from './src/compiler/compiler';
11
+ export type { CompiledTemplate } from './src/compiler/compiler';
12
+ export { NodeBinding } from './src/binding-manager/bindings/node-binding';
13
+ export { DirectiveBinding } from './src/binding-manager/bindings/directive-binding';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/E,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ export * from './src/processor/template-result';
2
+ export * from './src/processor/processor';
3
+ export * from './src/processor/types';
4
+ export * from './src/css-result';
5
+ export * from './src/utils/debug';
6
+ export * from './src/utils/performance';
7
+ export { html, getHtmlMetrics, resetHtmlMetrics } from './src/html';
8
+ export { css, getCssMetrics, resetCssMetrics, clearCssCache } from './src/css';
9
+ export * from './src/directives';
10
+ export { TemplateCompiler } from './src/compiler/compiler';
11
+ export { NodeBinding } from './src/binding-manager/bindings/node-binding';
12
+ export { DirectiveBinding } from './src/binding-manager/bindings/directive-binding';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/E,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { Binding } from './bindings/binding';
2
+ import { TemplateBinding } from '../processor/parser';
3
+ import { ITemplateProcessor } from '../processor/types';
4
+ export declare class BindingManager {
5
+ /**
6
+ * Performance tracking
7
+ */
8
+ private static metrics;
9
+ /**
10
+ * Get performance metrics
11
+ */
12
+ static getPerformanceMetrics(): {
13
+ createTime: number;
14
+ initTime: number;
15
+ bindingCount: number;
16
+ };
17
+ /**
18
+ * Reset performance metrics
19
+ */
20
+ static resetMetrics(): void;
21
+ static createAndInitializeParts(fragment: DocumentFragment, bindings: TemplateBinding[], values: unknown[], context?: unknown, processor?: ITemplateProcessor): Promise<Binding[]>;
22
+ private static createBindings;
23
+ private static createBindingForType;
24
+ private static findBindingElement;
25
+ private static findMarkers;
26
+ private static isBindingMarker;
27
+ private static hasBindingAttribute;
28
+ static initializeBindings(bindings: Binding[], values: unknown[], context?: unknown): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=binding-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-manager.d.ts","sourceRoot":"","sources":["../../../src/binding-manager/binding-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAuBxD,qBAAa,cAAc;IACvB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO,CAIpB;IAEF;;OAEG;IACH,MAAM,CAAC,qBAAqB;;;;;IAI5B;;OAEG;IACH,MAAM,CAAC,YAAY;WAQN,wBAAwB,CACjC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,EACjB,SAAS,CAAC,EAAE,kBAAkB,GAC/B,OAAO,CAAC,OAAO,EAAE,CAAC;IASrB,OAAO,CAAC,MAAM,CAAC,cAAc;IA0D7B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAoEnC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA2BjC,OAAO,CAAC,MAAM,CAAC,WAAW;IAuC1B,OAAO,CAAC,MAAM,CAAC,eAAe;IAI9B,OAAO,CAAC,MAAM,CAAC,mBAAmB;WAMd,kBAAkB,CAClC,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC;CA6CnB"}
@@ -0,0 +1,245 @@
1
+ import { NodeBinding } from './bindings/node-binding';
2
+ import { BindingType } from '../processor/template-result';
3
+ import { debugLog } from '../utils/debug';
4
+ import { PropertyBinding } from './bindings/property-binding';
5
+ import { EventBinding } from './bindings/event-binding';
6
+ import { ClassBinding } from './bindings/class-binding';
7
+ import { BooleanBinding } from './bindings/boolean-binding';
8
+ import { ReferenceBinding } from './bindings/reference-binding';
9
+ import { StyleBinding } from './bindings/style-binding';
10
+ import { DirectiveBinding } from './bindings/directive-binding';
11
+ import { AttributeBinding, AttributePartBinding } from './bindings/attribute-binding';
12
+ import { BindBinding } from './bindings/bind-binding';
13
+ import { ObjectClassBinding } from './bindings/object-class-binding';
14
+ import { ObjectStyleBinding } from './bindings/object-style-binding';
15
+ import { SpreadBinding } from './bindings/spread-binding';
16
+ import { AsyncBinding } from './bindings/async-binding';
17
+ function _isSignal(v) {
18
+ return typeof v === 'function' && v.__isSignal === true;
19
+ }
20
+ export class BindingManager {
21
+ /**
22
+ * Performance tracking
23
+ */
24
+ static metrics = {
25
+ createTime: 0,
26
+ initTime: 0,
27
+ bindingCount: 0
28
+ };
29
+ /**
30
+ * Get performance metrics
31
+ */
32
+ static getPerformanceMetrics() {
33
+ return { ...this.metrics };
34
+ }
35
+ /**
36
+ * Reset performance metrics
37
+ */
38
+ static resetMetrics() {
39
+ this.metrics = {
40
+ createTime: 0,
41
+ initTime: 0,
42
+ bindingCount: 0
43
+ };
44
+ }
45
+ static async createAndInitializeParts(fragment, bindings, values, context, processor) {
46
+ const startTime = performance.now();
47
+ const parts = this.createBindings(fragment, bindings, processor);
48
+ await this.initializeBindings(parts, values, context);
49
+ this.metrics.createTime = performance.now() - startTime;
50
+ this.metrics.bindingCount += bindings.length;
51
+ return parts;
52
+ }
53
+ static createBindings(fragment, bindings, processor) {
54
+ debugLog('bindingManager', 'Creating bindings', { bindingsCount: bindings.length });
55
+ const bindingInstances = [];
56
+ // Caches for multi-part attribute groups
57
+ const elementCache = new Map();
58
+ const attrBindingCache = new Map();
59
+ bindings.forEach(binding => {
60
+ // Handle multi-part Attribute bindings
61
+ if (binding.type === BindingType.Attribute) {
62
+ const groupStart = binding.groupStart ?? binding.index;
63
+ let element;
64
+ if (groupStart === binding.index) {
65
+ // First part in the group — find element via marker
66
+ element = this.findBindingElement(fragment, binding.index);
67
+ if (element)
68
+ elementCache.set(groupStart, element);
69
+ }
70
+ else {
71
+ // Subsequent part — reuse cached element
72
+ element = elementCache.get(groupStart) || null;
73
+ }
74
+ if (!element)
75
+ return;
76
+ if (groupStart === binding.index) {
77
+ // Create the shared AttributeBinding
78
+ const strings = binding.strings || ['', ''];
79
+ const attrBinding = new AttributeBinding(element, binding.name || '', strings);
80
+ attrBindingCache.set(groupStart, attrBinding);
81
+ bindingInstances[binding.index] = attrBinding;
82
+ }
83
+ else {
84
+ // Create a part binding that delegates to the shared parent
85
+ const parent = attrBindingCache.get(groupStart);
86
+ if (parent) {
87
+ bindingInstances[binding.index] = new AttributePartBinding(parent, binding.partIndex ?? 0);
88
+ }
89
+ }
90
+ return;
91
+ }
92
+ // Non-attribute bindings — original logic
93
+ const element = this.findBindingElement(fragment, binding.index);
94
+ if (element) {
95
+ const bindingInstance = this.createBindingForType(element, binding, processor);
96
+ if (bindingInstance) {
97
+ bindingInstances[binding.index] = bindingInstance;
98
+ }
99
+ }
100
+ });
101
+ return bindingInstances;
102
+ }
103
+ static createBindingForType(element, binding, processor) {
104
+ const name = binding.name || '';
105
+ switch (binding.type) {
106
+ case BindingType.Node:
107
+ const [startMarker, endMarker] = this.findMarkers(element, binding.index);
108
+ return new NodeBinding(element, startMarker, endMarker, processor);
109
+ case BindingType.Property:
110
+ return new PropertyBinding(element, name.slice(1)); // Remove . prefix
111
+ case BindingType.Boolean:
112
+ const booleanAttrName = name.startsWith('?') ? name.slice(1) : name;
113
+ return new BooleanBinding(element, booleanAttrName);
114
+ case BindingType.Event:
115
+ return new EventBinding(element, name, binding.modifiers || []);
116
+ case BindingType.Class:
117
+ debugLog('bindingManager', 'Creating class binding', {
118
+ element: element.tagName,
119
+ name
120
+ });
121
+ return new ClassBinding(element);
122
+ case BindingType.Reference:
123
+ const refName = name.startsWith('#') ? name.slice(1) : name;
124
+ return new ReferenceBinding(element);
125
+ case BindingType.Style:
126
+ return new StyleBinding(element);
127
+ case BindingType.Directive:
128
+ const directiveName = name.replace(/^#/, '');
129
+ return new DirectiveBinding(element, directiveName);
130
+ case BindingType.Bind: {
131
+ const bindProp = name.startsWith('&') ? name.slice(1) : name;
132
+ return new BindBinding(element, bindProp);
133
+ }
134
+ case BindingType.ObjectClass:
135
+ return new ObjectClassBinding(element);
136
+ case BindingType.ObjectStyle:
137
+ return new ObjectStyleBinding(element);
138
+ case BindingType.Spread:
139
+ return new SpreadBinding(element);
140
+ case BindingType.Async: {
141
+ const asyncProp = name.startsWith('~') ? name.slice(1) : name;
142
+ return new AsyncBinding(element, asyncProp);
143
+ }
144
+ default:
145
+ throw new Error(`Unsupported binding type: ${binding.type}`);
146
+ }
147
+ }
148
+ static findBindingElement(fragment, index) {
149
+ const walker = document.createTreeWalker(fragment, NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_ELEMENT);
150
+ let node;
151
+ while ((node = walker.nextNode())) {
152
+ if (node.nodeType === Node.COMMENT_NODE) {
153
+ const comment = node;
154
+ if (this.isBindingMarker(comment, index)) {
155
+ return comment.parentElement;
156
+ }
157
+ }
158
+ else if (node.nodeType === Node.ELEMENT_NODE) {
159
+ const element = node;
160
+ if (this.hasBindingAttribute(element, index)) {
161
+ return element;
162
+ }
163
+ }
164
+ }
165
+ return null;
166
+ }
167
+ static findMarkers(element, index) {
168
+ const walker = document.createTreeWalker(element.parentElement || element, NodeFilter.SHOW_COMMENT);
169
+ let startMarker = null;
170
+ let endMarker = null;
171
+ let foundStart = false;
172
+ let node;
173
+ while ((node = walker.nextNode())) {
174
+ const comment = node;
175
+ const value = comment.nodeValue || '';
176
+ if (!foundStart && value === `binding:${index}`) {
177
+ startMarker = comment;
178
+ foundStart = true;
179
+ }
180
+ else if (foundStart && value === `/binding:${index}`) {
181
+ endMarker = comment;
182
+ break;
183
+ }
184
+ }
185
+ if (!startMarker || !endMarker) {
186
+ debugLog('bindingManager', 'Failed to find markers', {
187
+ index,
188
+ element,
189
+ parentHTML: element.parentElement?.innerHTML
190
+ });
191
+ throw new Error(`Could not find markers for binding ${index}`);
192
+ }
193
+ return [startMarker, endMarker];
194
+ }
195
+ static isBindingMarker(comment, index) {
196
+ return comment.nodeValue === `binding:${index}`;
197
+ }
198
+ static hasBindingAttribute(element, index) {
199
+ return Array.from(element.attributes).some(attr => attr.value === `binding:${index}`);
200
+ }
201
+ static async initializeBindings(bindings, values, context) {
202
+ const startTime = performance.now();
203
+ debugLog('bindingManager', 'Initializing bindings', {
204
+ bindingsCount: bindings.length,
205
+ valuesCount: values.length
206
+ });
207
+ const promises = bindings.map(async (binding, i) => {
208
+ try {
209
+ const value = values[i];
210
+ if (value === undefined)
211
+ return;
212
+ if (_isSignal(value)) {
213
+ // Already subscribed to this exact signal — skip (idempotent)
214
+ if (binding.__lastSignal === value)
215
+ return;
216
+ // Cancel previous subscription if the signal instance changed
217
+ const prev = binding.__signalUnsub;
218
+ if (typeof prev === 'function')
219
+ prev();
220
+ binding.__lastSignal = value;
221
+ binding.__signalUnsub = value.subscribe((v) => {
222
+ binding.setValue(v, context);
223
+ });
224
+ // Set current value immediately (no full re-render needed)
225
+ await binding.setValue(value.peek(), context);
226
+ return;
227
+ }
228
+ // Handle async directive bindings
229
+ if (binding.setValue.constructor.name === 'AsyncFunction') {
230
+ await binding.setValue(value, context);
231
+ }
232
+ else {
233
+ binding.setValue(value, context);
234
+ }
235
+ }
236
+ catch (error) {
237
+ console.error(`Error initializing binding ${i}:`, error);
238
+ throw error;
239
+ }
240
+ });
241
+ await Promise.all(promises);
242
+ this.metrics.initTime = performance.now() - startTime;
243
+ }
244
+ }
245
+ //# sourceMappingURL=binding-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-manager.js","sourceRoot":"","sources":["../../../src/binding-manager/binding-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Represents the different types of bindings that can be used in templates
3
+ */
4
+ export declare enum BindingType {
5
+ /** Text/Node content binding */
6
+ Node = "node",
7
+ /** Event binding (@event) */
8
+ Event = "event",
9
+ /** Property binding (.prop) */
10
+ Property = "property",
11
+ /** Boolean attribute binding (?attr) */
12
+ Boolean = "boolean",
13
+ /** Reference binding (#ref) */
14
+ Reference = "reference",
15
+ /** Class binding (class="...") */
16
+ Class = "class",
17
+ /** Style binding (style="...") */
18
+ Style = "style",
19
+ /** Template binding (for nested templates) */
20
+ Template = "template",
21
+ /** Expression binding (for computed values) */
22
+ Expression = "expression"
23
+ }
24
+ //# sourceMappingURL=binding-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-type.d.ts","sourceRoot":"","sources":["../../../src/binding-manager/binding-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,WAAW;IACnB,gCAAgC;IAChC,IAAI,SAAS;IAEb,6BAA6B;IAC7B,KAAK,UAAU;IAEf,+BAA+B;IAC/B,QAAQ,aAAa;IAErB,wCAAwC;IACxC,OAAO,YAAY;IAEnB,+BAA+B;IAC/B,SAAS,cAAc;IAEvB,kCAAkC;IAClC,KAAK,UAAU;IAEf,kCAAkC;IAClC,KAAK,UAAU;IAEf,8CAA8C;IAC9C,QAAQ,aAAa;IAErB,+CAA+C;IAC/C,UAAU,eAAe;CAC5B"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Represents the different types of bindings that can be used in templates
3
+ */
4
+ export var BindingType;
5
+ (function (BindingType) {
6
+ /** Text/Node content binding */
7
+ BindingType["Node"] = "node";
8
+ /** Event binding (@event) */
9
+ BindingType["Event"] = "event";
10
+ /** Property binding (.prop) */
11
+ BindingType["Property"] = "property";
12
+ /** Boolean attribute binding (?attr) */
13
+ BindingType["Boolean"] = "boolean";
14
+ /** Reference binding (#ref) */
15
+ BindingType["Reference"] = "reference";
16
+ /** Class binding (class="...") */
17
+ BindingType["Class"] = "class";
18
+ /** Style binding (style="...") */
19
+ BindingType["Style"] = "style";
20
+ /** Template binding (for nested templates) */
21
+ BindingType["Template"] = "template";
22
+ /** Expression binding (for computed values) */
23
+ BindingType["Expression"] = "expression";
24
+ })(BindingType || (BindingType = {}));
25
+ //# sourceMappingURL=binding-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-type.js","sourceRoot":"","sources":["../../../src/binding-manager/binding-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,WA2BX;AA3BD,WAAY,WAAW;IACnB,gCAAgC;IAChC,4BAAa,CAAA;IAEb,6BAA6B;IAC7B,8BAAe,CAAA;IAEf,+BAA+B;IAC/B,oCAAqB,CAAA;IAErB,wCAAwC;IACxC,kCAAmB,CAAA;IAEnB,+BAA+B;IAC/B,sCAAuB,CAAA;IAEvB,kCAAkC;IAClC,8BAAe,CAAA;IAEf,kCAAkC;IAClC,8BAAe,CAAA;IAEf,8CAA8C;IAC9C,oCAAqB,CAAA;IAErB,+CAA+C;IAC/C,wCAAyB,CAAA;AAC7B,CAAC,EA3BW,WAAW,KAAX,WAAW,QA2BtB"}
@@ -0,0 +1,23 @@
1
+ import { Binding } from './binding';
2
+ /**
3
+ * AsyncBinding — handles `~prop=${promise}`
4
+ *
5
+ * Accepts a Promise (or any thenable). While the promise is pending, sets a
6
+ * `data-pending` attribute on the element and optionally a `pending` property.
7
+ * When the promise resolves, sets `name` property to the resolved value and
8
+ * removes the pending marker. On rejection, sets `name` to undefined and adds
9
+ * a `data-error` attribute with the error message.
10
+ *
11
+ * Supports re-entrant updates: if a new promise arrives before the previous
12
+ * one settles, the previous result is discarded (last-write wins).
13
+ */
14
+ export declare class AsyncBinding implements Binding {
15
+ private readonly element;
16
+ private readonly name;
17
+ private generation;
18
+ constructor(element: Element, name: string);
19
+ setValue(value: unknown): Promise<void>;
20
+ clear(): void;
21
+ disconnect(): void;
22
+ }
23
+ //# sourceMappingURL=async-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-binding.d.ts","sourceRoot":"","sources":["../../../../src/binding-manager/bindings/async-binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,YAAW,OAAO;IAIpC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJzB,OAAO,CAAC,UAAU,CAAK;gBAGF,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM;IAG3B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC7C,KAAK,IAAI,IAAI;IAQb,UAAU,IAAI,IAAI;CAGrB"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * AsyncBinding — handles `~prop=${promise}`
3
+ *
4
+ * Accepts a Promise (or any thenable). While the promise is pending, sets a
5
+ * `data-pending` attribute on the element and optionally a `pending` property.
6
+ * When the promise resolves, sets `name` property to the resolved value and
7
+ * removes the pending marker. On rejection, sets `name` to undefined and adds
8
+ * a `data-error` attribute with the error message.
9
+ *
10
+ * Supports re-entrant updates: if a new promise arrives before the previous
11
+ * one settles, the previous result is discarded (last-write wins).
12
+ */
13
+ export class AsyncBinding {
14
+ element;
15
+ name;
16
+ generation = 0;
17
+ constructor(element, name) {
18
+ this.element = element;
19
+ this.name = name;
20
+ }
21
+ async setValue(value) {
22
+ if (value === null || value === undefined) {
23
+ this.element[this.name] = value;
24
+ this.element.removeAttribute('data-pending');
25
+ this.element.removeAttribute('data-error');
26
+ return;
27
+ }
28
+ // Plain (non-promise) value — set directly
29
+ if (typeof value.then !== 'function') {
30
+ this.element[this.name] = value;
31
+ this.element.removeAttribute('data-pending');
32
+ this.element.removeAttribute('data-error');
33
+ return;
34
+ }
35
+ const gen = ++this.generation;
36
+ this.element.setAttribute('data-pending', '');
37
+ this.element['pending'] = true;
38
+ try {
39
+ const resolved = await value;
40
+ if (gen !== this.generation)
41
+ return; // superseded
42
+ this.element[this.name] = resolved;
43
+ this.element['pending'] = false;
44
+ this.element.removeAttribute('data-pending');
45
+ this.element.removeAttribute('data-error');
46
+ }
47
+ catch (err) {
48
+ if (gen !== this.generation)
49
+ return; // superseded
50
+ this.element[this.name] = undefined;
51
+ this.element['pending'] = false;
52
+ this.element.removeAttribute('data-pending');
53
+ this.element.setAttribute('data-error', err instanceof Error ? err.message : String(err));
54
+ }
55
+ }
56
+ clear() {
57
+ this.generation++;
58
+ this.element[this.name] = undefined;
59
+ this.element['pending'] = false;
60
+ this.element.removeAttribute('data-pending');
61
+ this.element.removeAttribute('data-error');
62
+ }
63
+ disconnect() {
64
+ this.generation++; // cancel any in-flight promise
65
+ }
66
+ }
67
+ //# sourceMappingURL=async-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-binding.js","sourceRoot":"","sources":["../../../../src/binding-manager/bindings/async-binding.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,YAAY;IAIA;IACA;IAJb,UAAU,GAAG,CAAC,CAAC;IAEvB,YACqB,OAAgB,EAChB,IAAY;QADZ,YAAO,GAAP,OAAO,CAAS;QAChB,SAAI,GAAJ,IAAI,CAAQ;IAC9B,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,KAAc;QACzB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,2CAA2C;QAC3C,IAAI,OAAQ,KAAa,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAO,KAA0B,CAAC;YACnD,IAAI,GAAG,KAAK,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,aAAa;YACjD,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;YAC3C,IAAI,CAAC,OAAe,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,KAAK,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,aAAa;YACjD,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;YAC5C,IAAI,CAAC,OAAe,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,YAAY,CACrB,YAAY,EACZ,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACnD,CAAC;QACN,CAAC;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QAC5C,IAAI,CAAC,OAAe,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU;QACN,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,+BAA+B;IACtD,CAAC;CACJ"}
@@ -0,0 +1,41 @@
1
+ import { Binding } from './binding';
2
+ /**
3
+ * Handles generic attribute value composition — both single and multi-expression.
4
+ * For multi-expression attributes like style="color: ${a}; bg: ${b}",
5
+ * the binding concatenates static string segments with dynamic values.
6
+ */
7
+ export declare class AttributeBinding implements Binding {
8
+ private element;
9
+ private attrName;
10
+ private strings;
11
+ private values;
12
+ private committed;
13
+ constructor(element: Element, attrName: string, strings: string[]);
14
+ /**
15
+ * Set a specific part's value (for multi-expression attributes).
16
+ */
17
+ setPartValue(partIndex: number, value: unknown): void;
18
+ /**
19
+ * Standard Binding interface — sets the first (and possibly only) value.
20
+ */
21
+ setValue(value: unknown): void;
22
+ /**
23
+ * Recompute and apply the full attribute value.
24
+ */
25
+ private commit;
26
+ clear(): void;
27
+ disconnect(): void;
28
+ }
29
+ /**
30
+ * Thin wrapper for subsequent expressions in a multi-expression attribute.
31
+ * Delegates to the parent AttributeBinding with the correct part index.
32
+ */
33
+ export declare class AttributePartBinding implements Binding {
34
+ private parent;
35
+ private partIndex;
36
+ constructor(parent: AttributeBinding, partIndex: number);
37
+ setValue(value: unknown): void;
38
+ clear(): void;
39
+ disconnect(): void;
40
+ }
41
+ //# sourceMappingURL=attribute-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-binding.d.ts","sourceRoot":"","sources":["../../../../src/binding-manager/bindings/attribute-binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,OAAO;IAKxC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IANnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAS;gBAGd,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE;IAM7B;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKrD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B;;OAEG;IACH,OAAO,CAAC,MAAM;IAgBd,KAAK,IAAI,IAAI;IAMb,UAAU,IAAI,IAAI;CAGrB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,OAAO;IAE5C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;gBADT,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM;IAG7B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,KAAK,IAAI,IAAI;IAIb,UAAU,IAAI,IAAI;CAGrB"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Handles generic attribute value composition — both single and multi-expression.
3
+ * For multi-expression attributes like style="color: ${a}; bg: ${b}",
4
+ * the binding concatenates static string segments with dynamic values.
5
+ */
6
+ export class AttributeBinding {
7
+ element;
8
+ attrName;
9
+ strings;
10
+ values;
11
+ committed = false;
12
+ constructor(element, attrName, strings) {
13
+ this.element = element;
14
+ this.attrName = attrName;
15
+ this.strings = strings;
16
+ // strings has N+1 entries for N expression slots
17
+ this.values = new Array(strings.length - 1).fill('');
18
+ }
19
+ /**
20
+ * Set a specific part's value (for multi-expression attributes).
21
+ */
22
+ setPartValue(partIndex, value) {
23
+ this.values[partIndex] = value;
24
+ this.commit();
25
+ }
26
+ /**
27
+ * Standard Binding interface — sets the first (and possibly only) value.
28
+ */
29
+ setValue(value) {
30
+ this.setPartValue(0, value);
31
+ }
32
+ /**
33
+ * Recompute and apply the full attribute value.
34
+ */
35
+ commit() {
36
+ let result = '';
37
+ for (let i = 0; i < this.strings.length; i++) {
38
+ result += this.strings[i];
39
+ if (i < this.values.length) {
40
+ const v = this.values[i];
41
+ result += v == null ? '' : String(v);
42
+ }
43
+ }
44
+ // Strip the binding prefix (@, ., ?, #) from the actual DOM attribute name
45
+ const domName = this.attrName.replace(/^[.@?#]/, '');
46
+ this.element.setAttribute(domName, result);
47
+ this.committed = true;
48
+ }
49
+ clear() {
50
+ const domName = this.attrName.replace(/^[.@?#]/, '');
51
+ this.element.removeAttribute(domName);
52
+ this.committed = false;
53
+ }
54
+ disconnect() {
55
+ this.clear();
56
+ }
57
+ }
58
+ /**
59
+ * Thin wrapper for subsequent expressions in a multi-expression attribute.
60
+ * Delegates to the parent AttributeBinding with the correct part index.
61
+ */
62
+ export class AttributePartBinding {
63
+ parent;
64
+ partIndex;
65
+ constructor(parent, partIndex) {
66
+ this.parent = parent;
67
+ this.partIndex = partIndex;
68
+ }
69
+ setValue(value) {
70
+ this.parent.setPartValue(this.partIndex, value);
71
+ }
72
+ clear() {
73
+ // Only the parent AttributeBinding clears the attribute
74
+ }
75
+ disconnect() {
76
+ // Managed by parent
77
+ }
78
+ }
79
+ //# sourceMappingURL=attribute-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-binding.js","sourceRoot":"","sources":["../../../../src/binding-manager/bindings/attribute-binding.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAKb;IACA;IACA;IANJ,MAAM,CAAY;IAClB,SAAS,GAAG,KAAK,CAAC;IAE1B,YACY,OAAgB,EAChB,QAAgB,EAChB,OAAiB;QAFjB,YAAO,GAAP,OAAO,CAAS;QAChB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,YAAO,GAAP,OAAO,CAAU;QAEzB,iDAAiD;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAAiB,EAAE,KAAc;QAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAc;QACnB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,MAAM;QACV,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;QAED,2EAA2E;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,UAAU;QACN,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAEjB;IACA;IAFZ,YACY,MAAwB,EACxB,SAAiB;QADjB,WAAM,GAAN,MAAM,CAAkB;QACxB,cAAS,GAAT,SAAS,CAAQ;IAC1B,CAAC;IAEJ,QAAQ,CAAC,KAAc;QACnB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,KAAK;QACD,wDAAwD;IAC5D,CAAC;IAED,UAAU;QACN,oBAAoB;IACxB,CAAC;CACJ"}