@vielzeug/craftit 2.1.0 → 3.0.3

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 (325) hide show
  1. package/README.md +58 -124
  2. package/dist/controls/a11y-control.cjs +1 -1
  3. package/dist/controls/a11y-control.cjs.map +1 -1
  4. package/dist/controls/a11y-control.d.ts +1 -1
  5. package/dist/controls/a11y-control.d.ts.map +1 -1
  6. package/dist/controls/a11y-control.js +1 -1
  7. package/dist/controls/a11y-control.js.map +1 -1
  8. package/dist/controls/checkable-control.cjs +1 -1
  9. package/dist/controls/checkable-control.cjs.map +1 -1
  10. package/dist/controls/checkable-control.d.ts +7 -7
  11. package/dist/controls/checkable-control.d.ts.map +1 -1
  12. package/dist/controls/checkable-control.js +1 -1
  13. package/dist/controls/checkable-control.js.map +1 -1
  14. package/dist/controls/choice-field-control.cjs +2 -0
  15. package/dist/controls/choice-field-control.cjs.map +1 -0
  16. package/dist/controls/choice-field-control.d.ts +3 -0
  17. package/dist/controls/choice-field-control.d.ts.map +1 -0
  18. package/dist/controls/choice-field-control.js +2 -0
  19. package/dist/controls/choice-field-control.js.map +1 -0
  20. package/dist/controls/field-control.cjs +1 -1
  21. package/dist/controls/field-control.cjs.map +1 -1
  22. package/dist/controls/field-control.d.ts +28 -73
  23. package/dist/controls/field-control.d.ts.map +1 -1
  24. package/dist/controls/field-control.js +1 -1
  25. package/dist/controls/field-control.js.map +1 -1
  26. package/dist/controls/index.d.ts +11 -9
  27. package/dist/controls/index.d.ts.map +1 -1
  28. package/dist/controls/internal/control-state.cjs +1 -1
  29. package/dist/controls/internal/control-state.cjs.map +1 -1
  30. package/dist/controls/internal/control-state.d.ts +6 -4
  31. package/dist/controls/internal/control-state.d.ts.map +1 -1
  32. package/dist/controls/internal/control-state.js +1 -1
  33. package/dist/controls/internal/control-state.js.map +1 -1
  34. package/dist/controls/internal/keyboard-utils.cjs.map +1 -1
  35. package/dist/controls/internal/keyboard-utils.js.map +1 -1
  36. package/dist/controls/internal/number-utils.cjs.map +1 -1
  37. package/dist/controls/internal/number-utils.js.map +1 -1
  38. package/dist/controls/internal/validation-utils.cjs.map +1 -1
  39. package/dist/controls/internal/validation-utils.js.map +1 -1
  40. package/dist/controls/list-control.cjs +1 -1
  41. package/dist/controls/list-control.cjs.map +1 -1
  42. package/dist/controls/list-control.d.ts +10 -8
  43. package/dist/controls/list-control.d.ts.map +1 -1
  44. package/dist/controls/list-control.js +1 -1
  45. package/dist/controls/list-control.js.map +1 -1
  46. package/dist/controls/overlay-control.cjs +1 -1
  47. package/dist/controls/overlay-control.cjs.map +1 -1
  48. package/dist/controls/overlay-control.d.ts +17 -14
  49. package/dist/controls/overlay-control.d.ts.map +1 -1
  50. package/dist/controls/overlay-control.js +1 -1
  51. package/dist/controls/overlay-control.js.map +1 -1
  52. package/dist/controls/popup-list-control.cjs +2 -0
  53. package/dist/controls/popup-list-control.cjs.map +1 -0
  54. package/dist/controls/popup-list-control.d.ts +160 -0
  55. package/dist/controls/popup-list-control.d.ts.map +1 -0
  56. package/dist/controls/popup-list-control.js +2 -0
  57. package/dist/controls/popup-list-control.js.map +1 -0
  58. package/dist/controls/press-control.cjs.map +1 -1
  59. package/dist/controls/press-control.js.map +1 -1
  60. package/dist/controls/slider-control.cjs.map +1 -1
  61. package/dist/controls/slider-control.js.map +1 -1
  62. package/dist/controls/spinner-control.cjs.map +1 -1
  63. package/dist/controls/spinner-control.js.map +1 -1
  64. package/dist/controls/swipe-control.cjs +2 -0
  65. package/dist/controls/swipe-control.cjs.map +1 -0
  66. package/dist/controls/swipe-control.d.ts +32 -0
  67. package/dist/controls/swipe-control.d.ts.map +1 -0
  68. package/dist/controls/swipe-control.js +2 -0
  69. package/dist/controls/swipe-control.js.map +1 -0
  70. package/dist/controls/text-field-control.cjs +2 -0
  71. package/dist/controls/text-field-control.cjs.map +1 -0
  72. package/dist/controls/text-field-control.d.ts +3 -0
  73. package/dist/controls/text-field-control.d.ts.map +1 -0
  74. package/dist/controls/text-field-control.js +2 -0
  75. package/dist/controls/text-field-control.js.map +1 -0
  76. package/dist/controls.cjs +1 -1
  77. package/dist/controls.js +1 -1
  78. package/dist/craftit.cjs +1 -1
  79. package/dist/craftit.cjs.map +1 -1
  80. package/dist/craftit.js +1 -1
  81. package/dist/craftit.js.map +1 -1
  82. package/dist/directives/classMap.cjs +2 -0
  83. package/dist/directives/classMap.cjs.map +1 -0
  84. package/dist/directives/classMap.d.ts +19 -0
  85. package/dist/directives/classMap.d.ts.map +1 -0
  86. package/dist/directives/classMap.js +2 -0
  87. package/dist/directives/classMap.js.map +1 -0
  88. package/dist/directives/each.cjs +1 -1
  89. package/dist/directives/each.cjs.map +1 -1
  90. package/dist/directives/each.d.ts +5 -30
  91. package/dist/directives/each.d.ts.map +1 -1
  92. package/dist/directives/each.js +1 -1
  93. package/dist/directives/each.js.map +1 -1
  94. package/dist/directives/guard.cjs +2 -0
  95. package/dist/directives/guard.cjs.map +1 -0
  96. package/dist/directives/guard.d.ts +10 -0
  97. package/dist/directives/guard.d.ts.map +1 -0
  98. package/dist/directives/guard.js +2 -0
  99. package/dist/directives/guard.js.map +1 -0
  100. package/dist/directives/live.cjs +2 -0
  101. package/dist/directives/live.cjs.map +1 -0
  102. package/dist/directives/live.d.ts +23 -0
  103. package/dist/directives/live.d.ts.map +1 -0
  104. package/dist/directives/live.js +2 -0
  105. package/dist/directives/live.js.map +1 -0
  106. package/dist/directives/raw.cjs +1 -1
  107. package/dist/directives/raw.cjs.map +1 -1
  108. package/dist/directives/raw.d.ts +3 -5
  109. package/dist/directives/raw.d.ts.map +1 -1
  110. package/dist/directives/raw.js +1 -1
  111. package/dist/directives/raw.js.map +1 -1
  112. package/dist/directives/resource.cjs +2 -0
  113. package/dist/directives/resource.cjs.map +1 -0
  114. package/dist/directives/resource.d.ts +32 -0
  115. package/dist/directives/resource.d.ts.map +1 -0
  116. package/dist/directives/resource.js +2 -0
  117. package/dist/directives/resource.js.map +1 -0
  118. package/dist/directives/styleMap.cjs +2 -0
  119. package/dist/directives/styleMap.cjs.map +1 -0
  120. package/dist/directives/styleMap.d.ts +11 -0
  121. package/dist/directives/styleMap.d.ts.map +1 -0
  122. package/dist/directives/styleMap.js +2 -0
  123. package/dist/directives/styleMap.js.map +1 -0
  124. package/dist/directives/when.cjs +1 -1
  125. package/dist/directives/when.cjs.map +1 -1
  126. package/dist/directives/when.d.ts +6 -19
  127. package/dist/directives/when.d.ts.map +1 -1
  128. package/dist/directives/when.js +1 -1
  129. package/dist/directives/when.js.map +1 -1
  130. package/dist/errors.cjs +2 -0
  131. package/dist/errors.cjs.map +1 -0
  132. package/dist/errors.d.ts +12 -0
  133. package/dist/errors.d.ts.map +1 -0
  134. package/dist/errors.js +2 -0
  135. package/dist/errors.js.map +1 -0
  136. package/dist/form.cjs +1 -1
  137. package/dist/form.cjs.map +1 -1
  138. package/dist/form.d.ts +3 -17
  139. package/dist/form.d.ts.map +1 -1
  140. package/dist/form.js +1 -1
  141. package/dist/form.js.map +1 -1
  142. package/dist/host.cjs +1 -1
  143. package/dist/host.cjs.map +1 -1
  144. package/dist/host.d.ts +40 -37
  145. package/dist/host.d.ts.map +1 -1
  146. package/dist/host.js +1 -1
  147. package/dist/host.js.map +1 -1
  148. package/dist/index.cjs +1 -1
  149. package/dist/index.d.ts +16 -8
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +1 -1
  152. package/dist/internal.cjs +1 -1
  153. package/dist/internal.cjs.map +1 -1
  154. package/dist/internal.d.ts +60 -120
  155. package/dist/internal.d.ts.map +1 -1
  156. package/dist/internal.js +1 -1
  157. package/dist/internal.js.map +1 -1
  158. package/dist/observers/index.d.ts +1 -0
  159. package/dist/observers/index.d.ts.map +1 -1
  160. package/dist/observers/intersection-observe.cjs +1 -1
  161. package/dist/observers/intersection-observe.cjs.map +1 -1
  162. package/dist/observers/intersection-observe.d.ts +1 -1
  163. package/dist/observers/intersection-observe.js +1 -1
  164. package/dist/observers/intersection-observe.js.map +1 -1
  165. package/dist/observers/media-observe.cjs +1 -1
  166. package/dist/observers/media-observe.cjs.map +1 -1
  167. package/dist/observers/media-observe.d.ts +1 -1
  168. package/dist/observers/media-observe.js +1 -1
  169. package/dist/observers/media-observe.js.map +1 -1
  170. package/dist/observers/mutation-observe.cjs +2 -0
  171. package/dist/observers/mutation-observe.cjs.map +1 -0
  172. package/dist/observers/mutation-observe.d.ts +10 -0
  173. package/dist/observers/mutation-observe.d.ts.map +1 -0
  174. package/dist/observers/mutation-observe.js +2 -0
  175. package/dist/observers/mutation-observe.js.map +1 -0
  176. package/dist/observers/resize-observe.cjs +1 -1
  177. package/dist/observers/resize-observe.cjs.map +1 -1
  178. package/dist/observers/resize-observe.d.ts +1 -1
  179. package/dist/observers/resize-observe.js +1 -1
  180. package/dist/observers/resize-observe.js.map +1 -1
  181. package/dist/observers.cjs +1 -1
  182. package/dist/observers.js +1 -1
  183. package/dist/props.cjs +1 -1
  184. package/dist/props.cjs.map +1 -1
  185. package/dist/props.d.ts +18 -31
  186. package/dist/props.d.ts.map +1 -1
  187. package/dist/props.js +1 -1
  188. package/dist/props.js.map +1 -1
  189. package/dist/registration.cjs +1 -1
  190. package/dist/registration.cjs.map +1 -1
  191. package/dist/registration.d.ts +27 -7
  192. package/dist/registration.d.ts.map +1 -1
  193. package/dist/registration.js +1 -1
  194. package/dist/registration.js.map +1 -1
  195. package/dist/runtime.cjs +1 -1
  196. package/dist/runtime.cjs.map +1 -1
  197. package/dist/runtime.d.ts +29 -17
  198. package/dist/runtime.d.ts.map +1 -1
  199. package/dist/runtime.js +1 -1
  200. package/dist/runtime.js.map +1 -1
  201. package/dist/template-bindings.cjs +1 -1
  202. package/dist/template-bindings.cjs.map +1 -1
  203. package/dist/template-bindings.d.ts +10 -47
  204. package/dist/template-bindings.d.ts.map +1 -1
  205. package/dist/template-bindings.js +1 -1
  206. package/dist/template-bindings.js.map +1 -1
  207. package/dist/template-compiler.cjs +1 -1
  208. package/dist/template-compiler.cjs.map +1 -1
  209. package/dist/template-compiler.d.ts +1 -21
  210. package/dist/template-compiler.d.ts.map +1 -1
  211. package/dist/template-compiler.js +1 -1
  212. package/dist/template-compiler.js.map +1 -1
  213. package/dist/testing/testing.cjs +1 -1
  214. package/dist/testing/testing.cjs.map +1 -1
  215. package/dist/testing/testing.d.ts +12 -5
  216. package/dist/testing/testing.d.ts.map +1 -1
  217. package/dist/testing/testing.js +1 -1
  218. package/dist/testing/testing.js.map +1 -1
  219. package/package.json +6 -12
  220. package/dist/component.cjs +0 -2
  221. package/dist/component.cjs.map +0 -1
  222. package/dist/component.d.ts +0 -39
  223. package/dist/component.d.ts.map +0 -1
  224. package/dist/component.js +0 -2
  225. package/dist/component.js.map +0 -1
  226. package/dist/controls/list-key-control.cjs +0 -2
  227. package/dist/controls/list-key-control.cjs.map +0 -1
  228. package/dist/controls/list-key-control.d.ts +0 -14
  229. package/dist/controls/list-key-control.d.ts.map +0 -1
  230. package/dist/controls/list-key-control.js +0 -2
  231. package/dist/controls/list-key-control.js.map +0 -1
  232. package/dist/directives/attr.cjs +0 -2
  233. package/dist/directives/attr.cjs.map +0 -1
  234. package/dist/directives/attr.d.ts +0 -12
  235. package/dist/directives/attr.d.ts.map +0 -1
  236. package/dist/directives/attr.js +0 -2
  237. package/dist/directives/attr.js.map +0 -1
  238. package/dist/directives/bind.cjs +0 -2
  239. package/dist/directives/bind.cjs.map +0 -1
  240. package/dist/directives/bind.d.ts +0 -38
  241. package/dist/directives/bind.d.ts.map +0 -1
  242. package/dist/directives/bind.js +0 -2
  243. package/dist/directives/bind.js.map +0 -1
  244. package/dist/directives/choose.cjs +0 -2
  245. package/dist/directives/choose.cjs.map +0 -1
  246. package/dist/directives/choose.d.ts +0 -39
  247. package/dist/directives/choose.d.ts.map +0 -1
  248. package/dist/directives/choose.js +0 -2
  249. package/dist/directives/choose.js.map +0 -1
  250. package/dist/directives/classes.cjs +0 -2
  251. package/dist/directives/classes.cjs.map +0 -1
  252. package/dist/directives/classes.d.ts +0 -20
  253. package/dist/directives/classes.d.ts.map +0 -1
  254. package/dist/directives/classes.js +0 -2
  255. package/dist/directives/classes.js.map +0 -1
  256. package/dist/directives/index.d.ts +0 -13
  257. package/dist/directives/index.d.ts.map +0 -1
  258. package/dist/directives/memo.cjs +0 -2
  259. package/dist/directives/memo.cjs.map +0 -1
  260. package/dist/directives/memo.d.ts +0 -27
  261. package/dist/directives/memo.d.ts.map +0 -1
  262. package/dist/directives/memo.js +0 -2
  263. package/dist/directives/memo.js.map +0 -1
  264. package/dist/directives/on.cjs +0 -2
  265. package/dist/directives/on.cjs.map +0 -1
  266. package/dist/directives/on.d.ts +0 -25
  267. package/dist/directives/on.d.ts.map +0 -1
  268. package/dist/directives/on.js +0 -2
  269. package/dist/directives/on.js.map +0 -1
  270. package/dist/directives/spread.cjs +0 -2
  271. package/dist/directives/spread.cjs.map +0 -1
  272. package/dist/directives/spread.d.ts +0 -14
  273. package/dist/directives/spread.d.ts.map +0 -1
  274. package/dist/directives/spread.js +0 -2
  275. package/dist/directives/spread.js.map +0 -1
  276. package/dist/directives/style.cjs +0 -2
  277. package/dist/directives/style.cjs.map +0 -1
  278. package/dist/directives/style.d.ts +0 -22
  279. package/dist/directives/style.d.ts.map +0 -1
  280. package/dist/directives/style.js +0 -2
  281. package/dist/directives/style.js.map +0 -1
  282. package/dist/directives/until.cjs +0 -2
  283. package/dist/directives/until.cjs.map +0 -1
  284. package/dist/directives/until.d.ts +0 -26
  285. package/dist/directives/until.d.ts.map +0 -1
  286. package/dist/directives/until.js +0 -2
  287. package/dist/directives/until.js.map +0 -1
  288. package/dist/directives.cjs +0 -1
  289. package/dist/directives.js +0 -1
  290. package/dist/runtime-bindings.cjs +0 -2
  291. package/dist/runtime-bindings.cjs.map +0 -1
  292. package/dist/runtime-bindings.d.ts +0 -6
  293. package/dist/runtime-bindings.d.ts.map +0 -1
  294. package/dist/runtime-bindings.js +0 -2
  295. package/dist/runtime-bindings.js.map +0 -1
  296. package/dist/runtime-core.cjs +0 -2
  297. package/dist/runtime-core.cjs.map +0 -1
  298. package/dist/runtime-core.d.ts +0 -21
  299. package/dist/runtime-core.d.ts.map +0 -1
  300. package/dist/runtime-core.js +0 -2
  301. package/dist/runtime-core.js.map +0 -1
  302. package/dist/runtime-lifecycle.cjs +0 -2
  303. package/dist/runtime-lifecycle.cjs.map +0 -1
  304. package/dist/runtime-lifecycle.d.ts +0 -24
  305. package/dist/runtime-lifecycle.d.ts.map +0 -1
  306. package/dist/runtime-lifecycle.js +0 -2
  307. package/dist/runtime-lifecycle.js.map +0 -1
  308. package/dist/template-dom.cjs +0 -2
  309. package/dist/template-dom.cjs.map +0 -1
  310. package/dist/template-dom.d.ts +0 -13
  311. package/dist/template-dom.d.ts.map +0 -1
  312. package/dist/template-dom.js +0 -2
  313. package/dist/template-dom.js.map +0 -1
  314. package/dist/template-html.cjs +0 -2
  315. package/dist/template-html.cjs.map +0 -1
  316. package/dist/template-html.d.ts +0 -23
  317. package/dist/template-html.d.ts.map +0 -1
  318. package/dist/template-html.js +0 -2
  319. package/dist/template-html.js.map +0 -1
  320. package/dist/template.cjs +0 -2
  321. package/dist/template.cjs.map +0 -1
  322. package/dist/template.d.ts +0 -10
  323. package/dist/template.d.ts.map +0 -1
  324. package/dist/template.js +0 -2
  325. package/dist/template.js.map +0 -1
@@ -1,23 +0,0 @@
1
- import { type CleanupFn } from '@vielzeug/stateit';
2
- import { type Binding, type HtmlBinding } from './internal';
3
- import { type RegisterCleanup } from './template-bindings';
4
- import { type BindingTargets } from './template-dom';
5
- /** Keyed reconciliation node — holds DOM nodes + lifecycle for one `each()` item. */
6
- export type KeyedNode = {
7
- bindings: Binding[];
8
- cleanups: CleanupFn[];
9
- html: string;
10
- nodes: Node[];
11
- targets: BindingTargets;
12
- };
13
- /**
14
- * Sets up the reactive effect for an html-binding marker. Handles both non-keyed
15
- * (full replace) and keyed (`each()`) reconciliation.
16
- *
17
- * @param root The root node containing the marker comment.
18
- * @param b The HtmlBinding descriptor.
19
- * @param registerCleanup Function that registers a cleanup tied to the outer container's lifetime.
20
- * @param keyedStates Per-element map of `marker → (key → KeyedNode)` — caller owns this state.
21
- */
22
- export declare const applyHtmlBinding: (root: Node, b: HtmlBinding, registerCleanup: RegisterCleanup, keyedStates: Map<string, Map<string | number, KeyedNode>>) => void;
23
- //# sourceMappingURL=template-html.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template-html.d.ts","sourceRoot":"","sources":["../src/template-html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEtF,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAG5D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAExB,qFAAqF;AACrF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,OAAO,EAAE,cAAc,CAAC;CACzB,CAAC;AAqBF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,IAAI,EACV,GAAG,WAAW,EACd,iBAAiB,eAAe,EAChC,aAAa,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,KACxD,IAsJF,CAAC"}
@@ -1,2 +0,0 @@
1
- import{runAll as e}from"./internal.js";import{createNodes as t,findCommentMarker as n,indexBindingsInNodes as r,insertNodes as i,parseHTML as a}from"./template-dom.js";import{applyBindingsInContainer as o,applyBindingsWithTargets as s}from"./template-bindings.js";import{batch as c,effect as l,untrack as u}from"@vielzeug/stateit";var d=t=>{e(t.cleanups);for(let e of t.nodes)e.remove()},f=(e,t,n=r(e))=>{let i=[];return s(t,e=>i.push(e),n),i},p=(s,m,h,g)=>{let _=n(s,m.uid);if(!_)return;let v=document.createComment(`html-binding`);_.replaceWith(v);let y=[],b=e=>y.push(e),x=()=>{e(y),y=[]},S=null,C=[];h(l(()=>{c(()=>{let n=m.signal.value;if(!m.keyed&&n.html===S)return;S=n.html,x();let{bindings:l,html:h,keys:_}=n;m.keyed&&!g.has(m.uid)&&g.set(m.uid,new Map);let y=m.keyed?g.get(m.uid):null,w=v.parentElement||s,T=!1;u(()=>{c(()=>{if(y&&_?.length&&n.items?.length===_.length){if(T=!0,y.size===0&&C.length>0){for(let e of C)e.remove();C=[]}let a=new Map;for(let o=0;o<_.length;o++){let s=_[o],c=n.items[o],l=y.get(s),u=o>0?a.get(_[o-1])?.nodes:null,d=u?.length?u[u.length-1].nextSibling:v.nextSibling;if(l&&l.html===c.html){l.nodes[0]&&i(v,l.nodes,d),e(l.cleanups);let t=r(l.nodes),n=f(l.nodes,c.bindings,t);a.set(s,{...l,bindings:c.bindings,cleanups:n,targets:t})}else if(l){e(l.cleanups);let n=t(c.html),o=r(n);i(v,n,d);let u=f(n,c.bindings,o);a.set(s,{bindings:c.bindings,cleanups:u,html:c.html,nodes:n,targets:o});for(let e of l.nodes)e.remove()}else{let e=t(c.html),n=r(e);i(v,e,d);let o=f(e,c.bindings,n);a.set(s,{bindings:c.bindings,cleanups:o,html:c.html,nodes:e,targets:n})}}for(let[e,t]of y)a.has(e)||d(t);g.set(m.uid,a)}else{if(m.keyed&&y&&y.size>0)for(let[,e]of y)d(e);else for(let e of C)e.remove();let e=a(h);C=Array.from(e.childNodes),v.after(e),m.keyed&&g.set(m.uid,new Map)}}),T||o(w,l,b,{onHtml:e=>p(w,e,b,g)})})})})),h(x),m.keyed&&h(()=>g.delete(m.uid))};export{p as applyHtmlBinding};
2
- //# sourceMappingURL=template-html.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template-html.js","names":[],"sources":["../src/template-html.ts"],"sourcesContent":["import { batch, untrack, effect as _effect, type CleanupFn } from '@vielzeug/stateit';\n\nimport { type Binding, type HtmlBinding } from './internal';\nimport { runAll } from './internal';\nimport { applyBindingsInContainer, applyBindingsWithTargets } from './template-bindings';\nimport { type RegisterCleanup } from './template-bindings';\nimport {\n createNodes,\n findCommentMarker,\n indexBindingsInNodes,\n insertNodes,\n parseHTML,\n type BindingTargets,\n} from './template-dom';\n\n/** Keyed reconciliation node — holds DOM nodes + lifecycle for one `each()` item. */\nexport type KeyedNode = {\n bindings: Binding[];\n cleanups: CleanupFn[];\n html: string;\n nodes: Node[];\n targets: BindingTargets;\n};\n\nconst removeKeyed = (keyedNode: KeyedNode) => {\n runAll(keyedNode.cleanups);\n for (const n of keyedNode.nodes) (n as ChildNode).remove();\n};\n\n/** Apply bindings to keyed item nodes using pre-indexed targets. */\nconst applyKeyedItemBindings = (\n nodes: Node[],\n itemBindings: Binding[],\n targets = indexBindingsInNodes(nodes),\n): CleanupFn[] => {\n const itemCleanups: CleanupFn[] = [];\n const itemRegisterCleanup: RegisterCleanup = (fn) => itemCleanups.push(fn);\n\n applyBindingsWithTargets(itemBindings, itemRegisterCleanup, targets);\n\n return itemCleanups;\n};\n\n/**\n * Sets up the reactive effect for an html-binding marker. Handles both non-keyed\n * (full replace) and keyed (`each()`) reconciliation.\n *\n * @param root The root node containing the marker comment.\n * @param b The HtmlBinding descriptor.\n * @param registerCleanup Function that registers a cleanup tied to the outer container's lifetime.\n * @param keyedStates Per-element map of `marker → (key → KeyedNode)` — caller owns this state.\n */\nexport const applyHtmlBinding = (\n root: Node,\n b: HtmlBinding,\n registerCleanup: RegisterCleanup,\n keyedStates: Map<string, Map<string | number, KeyedNode>>,\n): void => {\n const found = findCommentMarker(root, b.uid);\n\n if (!found) return;\n\n const marker = document.createComment('html-binding');\n\n found.replaceWith(marker);\n\n let currentCleanups: CleanupFn[] = [];\n const registerInnerCleanup: RegisterCleanup = (fn) => currentCleanups.push(fn);\n const runCurrentCleanups = () => {\n runAll(currentCleanups);\n currentCleanups = [];\n };\n let lastHtml: string | null = null;\n let lastInsertedNodes: Node[] = [];\n\n // Use stateit.effect directly so cleanup is managed manually via registerCleanup, not autoCleanup.\n const stop = _effect(() => {\n batch(() => {\n const data = b.signal.value;\n\n if (!b.keyed && data.html === lastHtml) {\n return;\n }\n\n lastHtml = data.html;\n\n runCurrentCleanups();\n\n const { bindings, html, keys } = data;\n\n if (b.keyed && !keyedStates.has(b.uid)) keyedStates.set(b.uid, new Map());\n\n const keyedState = b.keyed ? keyedStates.get(b.uid)! : null;\n const container = (marker.parentElement || root) as ParentNode;\n\n let bindingsAlreadyApplied = false;\n\n untrack(() => {\n batch(() => {\n if (keyedState && keys?.length && data.items?.length === keys.length) {\n bindingsAlreadyApplied = true;\n\n // Transition from empty/fallback insertion back to keyed list items.\n if (keyedState.size === 0 && lastInsertedNodes.length > 0) {\n for (const n of lastInsertedNodes) (n as ChildNode).remove();\n lastInsertedNodes = [];\n }\n\n const newKeyedState = new Map<string | number, KeyedNode>();\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const itemData = data.items[i];\n const existing = keyedState.get(key);\n\n const prevNodes = i > 0 ? newKeyedState.get(keys[i - 1])?.nodes : null;\n const insertPoint = prevNodes?.length ? prevNodes[prevNodes.length - 1].nextSibling : marker.nextSibling;\n\n if (existing && existing.html === itemData.html) {\n // UPDATE: Same HTML — reuse nodes, reapply bindings\n if (existing.nodes[0]) insertNodes(marker, existing.nodes, insertPoint);\n\n runAll(existing.cleanups);\n\n const itemTargets = indexBindingsInNodes(existing.nodes);\n const itemCleanups = applyKeyedItemBindings(existing.nodes, itemData.bindings, itemTargets);\n\n newKeyedState.set(key, {\n ...existing,\n bindings: itemData.bindings,\n cleanups: itemCleanups,\n targets: itemTargets,\n });\n } else if (existing) {\n // REPLACE: Different HTML — create new nodes, remove old\n runAll(existing.cleanups);\n\n const newNodes = createNodes(itemData.html);\n const itemTargets = indexBindingsInNodes(newNodes);\n\n insertNodes(marker, newNodes, insertPoint);\n\n const itemCleanups = applyKeyedItemBindings(newNodes, itemData.bindings, itemTargets);\n\n newKeyedState.set(key, {\n bindings: itemData.bindings,\n cleanups: itemCleanups,\n html: itemData.html,\n nodes: newNodes,\n targets: itemTargets,\n });\n for (const n of existing.nodes) (n as ChildNode).remove();\n } else {\n // CREATE: New item\n const newNodes = createNodes(itemData.html);\n const itemTargets = indexBindingsInNodes(newNodes);\n\n insertNodes(marker, newNodes, insertPoint);\n\n const itemCleanups = applyKeyedItemBindings(newNodes, itemData.bindings, itemTargets);\n\n newKeyedState.set(key, {\n bindings: itemData.bindings,\n cleanups: itemCleanups,\n html: itemData.html,\n nodes: newNodes,\n targets: itemTargets,\n });\n }\n }\n\n // DELETE: Remove old items not in new state\n for (const [oldKey, oldNode] of keyedState) {\n if (!newKeyedState.has(oldKey)) removeKeyed(oldNode);\n }\n\n keyedStates.set(b.uid, newKeyedState);\n } else {\n // Non-keyed or empty list: replace previously inserted nodes.\n if (b.keyed && keyedState && keyedState.size > 0) {\n for (const [, kn] of keyedState) removeKeyed(kn);\n } else {\n for (const n of lastInsertedNodes) (n as ChildNode).remove();\n }\n\n const parsed = parseHTML(html);\n\n lastInsertedNodes = Array.from(parsed.childNodes);\n marker.after(parsed);\n\n if (b.keyed) keyedStates.set(b.uid, new Map());\n }\n });\n\n if (!bindingsAlreadyApplied) {\n applyBindingsInContainer(container, bindings, registerInnerCleanup, {\n onHtml: (binding) => applyHtmlBinding(container, binding, registerInnerCleanup, keyedStates),\n });\n }\n });\n });\n });\n\n registerCleanup(stop);\n registerCleanup(runCurrentCleanups);\n\n if (b.keyed) registerCleanup(() => keyedStates.delete(b.uid));\n};\n"],"mappings":"2UAwBA,IAAM,EAAe,GAAyB,CAC5C,EAAO,EAAU,SAAS,CAC1B,IAAK,IAAM,KAAK,EAAU,MAAQ,EAAgB,QAAQ,EAItD,GACJ,EACA,EACA,EAAU,EAAqB,EAAM,GACrB,CAChB,IAAM,EAA4B,EAAE,CAKpC,OAFA,EAAyB,EAFqB,GAAO,EAAa,KAAK,EAAG,CAEd,EAAQ,CAE7D,GAYI,GACX,EACA,EACA,EACA,IACS,CACT,IAAM,EAAQ,EAAkB,EAAM,EAAE,IAAI,CAE5C,GAAI,CAAC,EAAO,OAEZ,IAAM,EAAS,SAAS,cAAc,eAAe,CAErD,EAAM,YAAY,EAAO,CAEzB,IAAI,EAA+B,EAAE,CAC/B,EAAyC,GAAO,EAAgB,KAAK,EAAG,CACxE,MAA2B,CAC/B,EAAO,EAAgB,CACvB,EAAkB,EAAE,EAElB,EAA0B,KAC1B,EAA4B,EAAE,CAkIlC,EA/Ha,MAAc,CACzB,MAAY,CACV,IAAM,EAAO,EAAE,OAAO,MAEtB,GAAI,CAAC,EAAE,OAAS,EAAK,OAAS,EAC5B,OAGF,EAAW,EAAK,KAEhB,GAAoB,CAEpB,GAAM,CAAE,WAAU,OAAM,QAAS,EAE7B,EAAE,OAAS,CAAC,EAAY,IAAI,EAAE,IAAI,EAAE,EAAY,IAAI,EAAE,IAAK,IAAI,IAAM,CAEzE,IAAM,EAAa,EAAE,MAAQ,EAAY,IAAI,EAAE,IAAI,CAAI,KACjD,EAAa,EAAO,eAAiB,EAEvC,EAAyB,GAE7B,MAAc,CACZ,MAAY,CACV,GAAI,GAAc,GAAM,QAAU,EAAK,OAAO,SAAW,EAAK,OAAQ,CAIpE,GAHA,EAAyB,GAGrB,EAAW,OAAS,GAAK,EAAkB,OAAS,EAAG,CACzD,IAAK,IAAM,KAAK,EAAoB,EAAgB,QAAQ,CAC5D,EAAoB,EAAE,CAGxB,IAAM,EAAgB,IAAI,IAE1B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,IAAM,EAAM,EAAK,GACX,EAAW,EAAK,MAAM,GACtB,EAAW,EAAW,IAAI,EAAI,CAE9B,EAAY,EAAI,EAAI,EAAc,IAAI,EAAK,EAAI,GAAG,EAAE,MAAQ,KAC5D,EAAc,GAAW,OAAS,EAAU,EAAU,OAAS,GAAG,YAAc,EAAO,YAE7F,GAAI,GAAY,EAAS,OAAS,EAAS,KAAM,CAE3C,EAAS,MAAM,IAAI,EAAY,EAAQ,EAAS,MAAO,EAAY,CAEvE,EAAO,EAAS,SAAS,CAEzB,IAAM,EAAc,EAAqB,EAAS,MAAM,CAClD,EAAe,EAAuB,EAAS,MAAO,EAAS,SAAU,EAAY,CAE3F,EAAc,IAAI,EAAK,CACrB,GAAG,EACH,SAAU,EAAS,SACnB,SAAU,EACV,QAAS,EACV,CAAC,SACO,EAAU,CAEnB,EAAO,EAAS,SAAS,CAEzB,IAAM,EAAW,EAAY,EAAS,KAAK,CACrC,EAAc,EAAqB,EAAS,CAElD,EAAY,EAAQ,EAAU,EAAY,CAE1C,IAAM,EAAe,EAAuB,EAAU,EAAS,SAAU,EAAY,CAErF,EAAc,IAAI,EAAK,CACrB,SAAU,EAAS,SACnB,SAAU,EACV,KAAM,EAAS,KACf,MAAO,EACP,QAAS,EACV,CAAC,CACF,IAAK,IAAM,KAAK,EAAS,MAAQ,EAAgB,QAAQ,KACpD,CAEL,IAAM,EAAW,EAAY,EAAS,KAAK,CACrC,EAAc,EAAqB,EAAS,CAElD,EAAY,EAAQ,EAAU,EAAY,CAE1C,IAAM,EAAe,EAAuB,EAAU,EAAS,SAAU,EAAY,CAErF,EAAc,IAAI,EAAK,CACrB,SAAU,EAAS,SACnB,SAAU,EACV,KAAM,EAAS,KACf,MAAO,EACP,QAAS,EACV,CAAC,EAKN,IAAK,GAAM,CAAC,EAAQ,KAAY,EACzB,EAAc,IAAI,EAAO,EAAE,EAAY,EAAQ,CAGtD,EAAY,IAAI,EAAE,IAAK,EAAc,KAChC,CAEL,GAAI,EAAE,OAAS,GAAc,EAAW,KAAO,EAC7C,IAAK,GAAM,EAAG,KAAO,EAAY,EAAY,EAAG,MAEhD,IAAK,IAAM,KAAK,EAAoB,EAAgB,QAAQ,CAG9D,IAAM,EAAS,EAAU,EAAK,CAE9B,EAAoB,MAAM,KAAK,EAAO,WAAW,CACjD,EAAO,MAAM,EAAO,CAEhB,EAAE,OAAO,EAAY,IAAI,EAAE,IAAK,IAAI,IAAM,GAEhD,CAEG,GACH,EAAyB,EAAW,EAAU,EAAsB,CAClE,OAAS,GAAY,EAAiB,EAAW,EAAS,EAAsB,EAAY,CAC7F,CAAC,EAEJ,EACF,EACF,CAEmB,CACrB,EAAgB,EAAmB,CAE/B,EAAE,OAAO,MAAsB,EAAY,OAAO,EAAE,IAAI,CAAC"}
package/dist/template.cjs DELETED
@@ -1,2 +0,0 @@
1
- require(`./internal.cjs`);const e=require(`./template-bindings.cjs`),t=require(`./template-compiler.cjs`),n=require(`./template-html.cjs`);var r=e.applyBindingsInContainer,i=(e,...n)=>t.compileTemplate(e,n),a=(e,t,r,i)=>{n.applyHtmlBinding(e,t,r,i)};exports.applyBindingsInContainer=r,exports.applyHtmlBinding=a,exports.html=i;
2
- //# sourceMappingURL=template.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.cjs","names":[],"sources":["../src/template.ts"],"sourcesContent":["import { type HtmlBinding, type HTMLResult } from './internal';\nimport { applyBindingsInContainer as applyBindingsInContainerImpl, type RegisterCleanup } from './template-bindings';\nimport { compileTemplate } from './template-compiler';\nimport { applyHtmlBinding as applyHtmlBindingImpl, type KeyedNode } from './template-html';\n\n// ─── Re-exports for consumers ─────────────────────────────────────────────────\nexport type { KeyedNode };\nexport const applyBindingsInContainer = applyBindingsInContainerImpl;\n\n// ─── Template compilation ─────────────────────────────────────────────────────\n\nexport const html = (strings: TemplateStringsArray, ...values: unknown[]): HTMLResult =>\n compileTemplate(strings, values);\n\n// ─── HTML binding with keyed reconciliation ────────────────────────────────────\n\nexport const applyHtmlBinding = (\n root: Node,\n b: HtmlBinding,\n registerCleanup: RegisterCleanup,\n keyedStates: Map<string, Map<string | number, KeyedNode>>,\n): void => {\n applyHtmlBindingImpl(root, b, registerCleanup, keyedStates);\n};\n"],"mappings":"2IAOA,IAAa,EAA2B,EAAA,yBAI3B,GAAQ,EAA+B,GAAG,IACrD,EAAA,gBAAgB,EAAS,EAAO,CAIrB,GACX,EACA,EACA,EACA,IACS,CACT,EAAA,iBAAqB,EAAM,EAAG,EAAiB,EAAY"}
@@ -1,10 +0,0 @@
1
- import { type HtmlBinding, type HTMLResult } from './internal';
2
- import { type RegisterCleanup } from './template-bindings';
3
- import { type KeyedNode } from './template-html';
4
- export type { KeyedNode };
5
- export declare const applyBindingsInContainer: (container: ParentNode, bindings: import("./internal").Binding[], registerCleanup: RegisterCleanup, opts?: {
6
- onHtml?: (b: HtmlBinding) => void;
7
- }) => void;
8
- export declare const html: (strings: TemplateStringsArray, ...values: unknown[]) => HTMLResult;
9
- export declare const applyHtmlBinding: (root: Node, b: HtmlBinding, registerCleanup: RegisterCleanup, keyedStates: Map<string, Map<string | number, KeyedNode>>) => void;
10
- //# sourceMappingURL=template.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAA4D,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAErH,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG3F,YAAY,EAAE,SAAS,EAAE,CAAC;AAC1B,eAAO,MAAM,wBAAwB;UAiByhL,CAAC;UAjB3/K,CAAC;AAIrE,eAAO,MAAM,IAAI,GAAI,SAAS,oBAAoB,EAAE,GAAG,QAAQ,OAAO,EAAE,KAAG,UACzC,CAAC;AAInC,eAAO,MAAM,gBAAgB,GAC3B,MAAM,IAAI,EACV,GAAG,WAAW,EACd,iBAAiB,eAAe,EAChC,aAAa,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,KACxD,IAEF,CAAC"}
package/dist/template.js DELETED
@@ -1,2 +0,0 @@
1
- import"./internal.js";import{applyBindingsInContainer as e}from"./template-bindings.js";import{compileTemplate as t}from"./template-compiler.js";import{applyHtmlBinding as n}from"./template-html.js";var r=e,i=(e,...n)=>t(e,n),a=(e,t,r,i)=>{n(e,t,r,i)};export{r as applyBindingsInContainer,a as applyHtmlBinding,i as html};
2
- //# sourceMappingURL=template.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.js","names":[],"sources":["../src/template.ts"],"sourcesContent":["import { type HtmlBinding, type HTMLResult } from './internal';\nimport { applyBindingsInContainer as applyBindingsInContainerImpl, type RegisterCleanup } from './template-bindings';\nimport { compileTemplate } from './template-compiler';\nimport { applyHtmlBinding as applyHtmlBindingImpl, type KeyedNode } from './template-html';\n\n// ─── Re-exports for consumers ─────────────────────────────────────────────────\nexport type { KeyedNode };\nexport const applyBindingsInContainer = applyBindingsInContainerImpl;\n\n// ─── Template compilation ─────────────────────────────────────────────────────\n\nexport const html = (strings: TemplateStringsArray, ...values: unknown[]): HTMLResult =>\n compileTemplate(strings, values);\n\n// ─── HTML binding with keyed reconciliation ────────────────────────────────────\n\nexport const applyHtmlBinding = (\n root: Node,\n b: HtmlBinding,\n registerCleanup: RegisterCleanup,\n keyedStates: Map<string, Map<string | number, KeyedNode>>,\n): void => {\n applyHtmlBindingImpl(root, b, registerCleanup, keyedStates);\n};\n"],"mappings":"uMAOA,IAAa,EAA2B,EAI3B,GAAQ,EAA+B,GAAG,IACrD,EAAgB,EAAS,EAAO,CAIrB,GACX,EACA,EACA,EACA,IACS,CACT,EAAqB,EAAM,EAAG,EAAiB,EAAY"}