@microsoft/fast-element 2.10.4 → 3.0.0-rc.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 (349) hide show
  1. package/ARCHITECTURE_HTML_TAGGED_TEMPLATE_LITERAL.md +1 -1
  2. package/ARCHITECTURE_OVERVIEW.md +2 -2
  3. package/CHANGELOG.json +1 -1
  4. package/CHANGELOG.md +2 -2
  5. package/DECLARATIVE_DESIGN.md +806 -0
  6. package/DECLARATIVE_HTML.md +470 -0
  7. package/DECLARATIVE_MIGRATION.md +215 -0
  8. package/DECLARATIVE_RENDERING.md +530 -0
  9. package/DECLARATIVE_RENDERING_LIFECYCLE.md +288 -0
  10. package/DECLARATIVE_SCHEMA_OBSERVER_MAP.md +489 -0
  11. package/DESIGN.md +138 -33
  12. package/MIGRATION.md +387 -0
  13. package/README.md +208 -1
  14. package/SIZES.md +25 -0
  15. package/api-extractor.arrays.json +15 -0
  16. package/api-extractor.context.json +1 -0
  17. package/api-extractor.declarative.json +15 -0
  18. package/api-extractor.di.json +1 -0
  19. package/api-extractor.hydration.json +15 -0
  20. package/api-extractor.styles.json +15 -0
  21. package/dist/arrays/arrays.api.json +2621 -0
  22. package/dist/declarative/declarative.api.json +7844 -0
  23. package/dist/di/di.api.json +1 -1
  24. package/dist/dts/array-observer.d.ts +2 -0
  25. package/dist/dts/arrays.d.ts +2 -0
  26. package/dist/dts/attr.d.ts +1 -0
  27. package/dist/dts/binding/signal.d.ts +6 -6
  28. package/dist/dts/binding/two-way.d.ts +1 -0
  29. package/dist/dts/binding.d.ts +7 -0
  30. package/dist/dts/components/attributes.d.ts +2 -5
  31. package/dist/dts/components/definition-schema-transforms.d.ts +9 -0
  32. package/dist/dts/components/element-controller.d.ts +80 -114
  33. package/dist/dts/components/element-hydration.d.ts +1 -1
  34. package/dist/dts/components/enable-hydration.d.ts +34 -0
  35. package/dist/dts/components/fast-definitions.d.ts +91 -42
  36. package/dist/dts/components/fast-element.d.ts +5 -8
  37. package/dist/dts/components/hydration-tracker.d.ts +40 -0
  38. package/dist/dts/components/hydration.d.ts +18 -53
  39. package/dist/dts/components/schema.d.ts +205 -0
  40. package/dist/dts/context.d.ts +6 -6
  41. package/dist/dts/css.d.ts +3 -0
  42. package/dist/dts/debug.d.ts +5 -1
  43. package/dist/dts/declarative/attribute-map.d.ts +58 -0
  44. package/dist/dts/declarative/debug.d.ts +5 -0
  45. package/dist/dts/declarative/index.d.ts +13 -0
  46. package/dist/dts/declarative/interfaces.d.ts +9 -0
  47. package/dist/dts/declarative/observer-map-utilities.d.ts +58 -0
  48. package/dist/dts/declarative/observer-map.d.ts +89 -0
  49. package/dist/dts/declarative/runtime.d.ts +5 -0
  50. package/dist/dts/declarative/syntax.d.ts +21 -0
  51. package/dist/dts/declarative/template-bridge.d.ts +33 -0
  52. package/dist/dts/declarative/template-parser.d.ts +98 -0
  53. package/dist/dts/declarative/template.d.ts +9 -0
  54. package/dist/dts/declarative/utilities.d.ts +312 -0
  55. package/dist/dts/di/di.d.ts +1 -1
  56. package/dist/dts/directives/children.d.ts +2 -0
  57. package/dist/dts/directives/node-observation.d.ts +2 -0
  58. package/dist/dts/directives/ref.d.ts +2 -0
  59. package/dist/dts/directives/repeat.d.ts +4 -0
  60. package/dist/dts/directives/slotted.d.ts +2 -0
  61. package/dist/dts/directives/when.d.ts +3 -0
  62. package/dist/dts/dom-policy.d.ts +1 -1
  63. package/dist/dts/html.d.ts +5 -0
  64. package/dist/dts/hydration/runtime.d.ts +7 -0
  65. package/dist/dts/hydration/target-builder.d.ts +15 -12
  66. package/dist/dts/hydration.d.ts +14 -0
  67. package/dist/dts/index.d.ts +38 -42
  68. package/dist/dts/index.debug.d.ts +0 -1
  69. package/dist/dts/index.rollup.debug.d.ts +0 -1
  70. package/dist/dts/interfaces.d.ts +1 -49
  71. package/dist/dts/observable.d.ts +3 -6
  72. package/dist/dts/observation/arrays.d.ts +1 -1
  73. package/dist/dts/observation/update-queue.d.ts +1 -1
  74. package/dist/dts/platform.d.ts +25 -4
  75. package/dist/dts/render.d.ts +7 -0
  76. package/dist/dts/schema.d.ts +1 -0
  77. package/dist/dts/state/exports.d.ts +1 -1
  78. package/dist/dts/state/state.d.ts +2 -2
  79. package/dist/dts/styles/css-directive.d.ts +5 -12
  80. package/dist/dts/styles/css.d.ts +5 -7
  81. package/dist/dts/styles/element-styles.d.ts +0 -10
  82. package/dist/dts/styles.d.ts +6 -0
  83. package/dist/dts/templating/children.d.ts +1 -1
  84. package/dist/dts/templating/html-binding-directive.d.ts +4 -0
  85. package/dist/dts/templating/html-directive.d.ts +17 -0
  86. package/dist/dts/templating/hydration-view.d.ts +109 -0
  87. package/dist/dts/templating/ref.d.ts +1 -1
  88. package/dist/dts/templating/render.d.ts +1 -1
  89. package/dist/dts/templating/repeat.d.ts +2 -2
  90. package/dist/dts/templating/slotted.d.ts +1 -1
  91. package/dist/dts/templating/template.d.ts +17 -9
  92. package/dist/dts/templating/view.d.ts +25 -102
  93. package/dist/dts/templating/when.d.ts +1 -1
  94. package/dist/dts/templating.d.ts +10 -0
  95. package/dist/dts/testing/exports.d.ts +2 -2
  96. package/dist/dts/updates.d.ts +1 -0
  97. package/dist/dts/volatile.d.ts +2 -0
  98. package/dist/esm/array-observer.js +1 -0
  99. package/dist/esm/arrays.js +1 -0
  100. package/dist/esm/attr.js +1 -0
  101. package/dist/esm/binding/normalize.js +1 -1
  102. package/dist/esm/binding/signal.js +4 -4
  103. package/dist/esm/binding/two-way.js +2 -1
  104. package/dist/esm/binding.js +4 -0
  105. package/dist/esm/components/attributes.js +8 -5
  106. package/dist/esm/components/definition-schema-transforms.js +23 -0
  107. package/dist/esm/components/element-controller.js +200 -269
  108. package/dist/esm/components/element-hydration.js +1 -1
  109. package/dist/esm/components/enable-hydration.js +100 -0
  110. package/dist/esm/components/fast-definitions.js +211 -49
  111. package/dist/esm/components/fast-element.js +18 -27
  112. package/dist/esm/components/hydration-tracker.js +93 -0
  113. package/dist/esm/components/hydration.js +62 -144
  114. package/dist/esm/components/schema.js +253 -0
  115. package/dist/esm/context.js +6 -6
  116. package/dist/esm/css.js +3 -0
  117. package/dist/esm/debug.js +26 -26
  118. package/dist/esm/declarative/attribute-map.js +121 -0
  119. package/dist/esm/declarative/debug.js +5 -0
  120. package/dist/esm/declarative/index.js +3 -0
  121. package/dist/esm/declarative/interfaces.js +10 -0
  122. package/dist/esm/declarative/observer-map-utilities.js +562 -0
  123. package/dist/esm/declarative/observer-map.js +216 -0
  124. package/dist/esm/declarative/runtime.js +14 -0
  125. package/dist/esm/declarative/syntax.js +36 -0
  126. package/dist/esm/declarative/template-bridge.js +170 -0
  127. package/dist/esm/declarative/template-parser.js +306 -0
  128. package/dist/esm/declarative/template.js +142 -0
  129. package/dist/esm/declarative/utilities.js +834 -0
  130. package/dist/esm/di/di.js +6 -8
  131. package/dist/esm/directives/children.js +1 -0
  132. package/dist/esm/directives/node-observation.js +1 -0
  133. package/dist/esm/directives/ref.js +1 -0
  134. package/dist/esm/directives/repeat.js +1 -0
  135. package/dist/esm/directives/slotted.js +1 -0
  136. package/dist/esm/directives/when.js +1 -0
  137. package/dist/esm/dom-policy.js +2 -2
  138. package/dist/esm/dom.js +1 -1
  139. package/dist/esm/html.js +2 -0
  140. package/dist/esm/hydration/runtime.js +33 -0
  141. package/dist/esm/hydration/target-builder.js +97 -90
  142. package/dist/esm/hydration.js +4 -0
  143. package/dist/esm/index.debug.js +2 -1
  144. package/dist/esm/index.js +34 -29
  145. package/dist/esm/index.rollup.debug.js +3 -2
  146. package/dist/esm/index.rollup.js +1 -1
  147. package/dist/esm/interfaces.js +1 -45
  148. package/dist/esm/observable.js +1 -4
  149. package/dist/esm/observation/arrays.js +1 -1
  150. package/dist/esm/observation/observable.js +5 -5
  151. package/dist/esm/observation/update-queue.js +47 -58
  152. package/dist/esm/platform.js +31 -30
  153. package/dist/esm/render.js +1 -0
  154. package/dist/esm/schema.js +1 -0
  155. package/dist/esm/state/exports.js +1 -1
  156. package/dist/esm/styles/css-directive.js +1 -2
  157. package/dist/esm/styles/css.js +15 -56
  158. package/dist/esm/styles/element-styles.js +69 -15
  159. package/dist/esm/styles.js +2 -0
  160. package/dist/esm/templating/html-binding-directive.js +10 -8
  161. package/dist/esm/templating/hydration-view.js +235 -0
  162. package/dist/esm/templating/render.js +1 -1
  163. package/dist/esm/templating/repeat.js +36 -34
  164. package/dist/esm/templating/template.js +7 -7
  165. package/dist/esm/templating/view.js +24 -233
  166. package/dist/esm/templating.js +7 -0
  167. package/dist/esm/testing/exports.js +2 -2
  168. package/dist/esm/updates.js +1 -0
  169. package/dist/esm/volatile.js +1 -0
  170. package/dist/fast-element.api.json +9016 -6995
  171. package/dist/fast-element.d.ts +3557 -796
  172. package/dist/fast-element.debug.js +5088 -4437
  173. package/dist/fast-element.debug.min.js +2 -2
  174. package/dist/fast-element.js +5369 -4649
  175. package/dist/fast-element.min.js +2 -2
  176. package/dist/fast-element.untrimmed.d.ts +863 -475
  177. package/dist/hydration/hydration.api.json +5237 -0
  178. package/dist/styles/styles.api.json +2672 -0
  179. package/docs/api-report.api.md +343 -166
  180. package/docs/arrays/api-report.api.md +114 -0
  181. package/docs/declarative/api-report.api.md +397 -0
  182. package/docs/hydration/api-report.api.md +285 -0
  183. package/docs/styles/api-report.api.md +135 -0
  184. package/package.json +149 -41
  185. package/playwright.declarative.config.ts +26 -0
  186. package/playwright.declarative.webui.config.ts +20 -0
  187. package/scripts/declarative/build-fixtures-with-webui.js +135 -0
  188. package/scripts/declarative/build-fixtures.js +49 -0
  189. package/scripts/declarative/build-fixtures.utilities.js +101 -0
  190. package/scripts/measure-sizes.js +219 -0
  191. package/scripts/run-api-extractor.js +39 -20
  192. package/test/declarative/fixtures/README.md +72 -0
  193. package/test/declarative/fixtures/WRITING_FIXTURES.md +330 -0
  194. package/test/declarative/fixtures/bindings/README.md +12 -0
  195. package/test/declarative/fixtures/bindings/attribute/entry.html +13 -0
  196. package/test/declarative/fixtures/bindings/attribute/fast-build.config.json +6 -0
  197. package/test/declarative/fixtures/bindings/attribute/index.html +25 -0
  198. package/test/declarative/fixtures/bindings/attribute/main.ts +41 -0
  199. package/test/declarative/fixtures/bindings/attribute/state.json +8 -0
  200. package/test/declarative/fixtures/bindings/attribute/templates.html +11 -0
  201. package/test/declarative/fixtures/bindings/content/entry.html +12 -0
  202. package/test/declarative/fixtures/bindings/content/fast-build.config.json +6 -0
  203. package/test/declarative/fixtures/bindings/content/index.html +19 -0
  204. package/test/declarative/fixtures/bindings/content/main.ts +27 -0
  205. package/test/declarative/fixtures/bindings/content/state.json +4 -0
  206. package/test/declarative/fixtures/bindings/content/templates.html +6 -0
  207. package/test/declarative/fixtures/bindings/dot-syntax/entry.html +11 -0
  208. package/test/declarative/fixtures/bindings/dot-syntax/fast-build.config.json +6 -0
  209. package/test/declarative/fixtures/bindings/dot-syntax/index.html +47 -0
  210. package/test/declarative/fixtures/bindings/dot-syntax/main.ts +59 -0
  211. package/test/declarative/fixtures/bindings/dot-syntax/state.json +16 -0
  212. package/test/declarative/fixtures/bindings/dot-syntax/templates.html +17 -0
  213. package/test/declarative/fixtures/bindings/event/entry.html +11 -0
  214. package/test/declarative/fixtures/bindings/event/fast-build.config.json +6 -0
  215. package/test/declarative/fixtures/bindings/event/index.html +43 -0
  216. package/test/declarative/fixtures/bindings/event/main.ts +43 -0
  217. package/test/declarative/fixtures/bindings/event/state.json +3 -0
  218. package/test/declarative/fixtures/bindings/event/templates.html +18 -0
  219. package/test/declarative/fixtures/bindings/host/entry.html +40 -0
  220. package/test/declarative/fixtures/bindings/host/fast-build.config.json +6 -0
  221. package/test/declarative/fixtures/bindings/host/index.html +96 -0
  222. package/test/declarative/fixtures/bindings/host/main.ts +222 -0
  223. package/test/declarative/fixtures/bindings/host/state.json +9 -0
  224. package/test/declarative/fixtures/bindings/host/templates.html +55 -0
  225. package/test/declarative/fixtures/directives/README.md +12 -0
  226. package/test/declarative/fixtures/directives/children/entry.html +11 -0
  227. package/test/declarative/fixtures/directives/children/fast-build.config.json +6 -0
  228. package/test/declarative/fixtures/directives/children/index.html +15 -0
  229. package/test/declarative/fixtures/directives/children/main.ts +22 -0
  230. package/test/declarative/fixtures/directives/children/state.json +3 -0
  231. package/test/declarative/fixtures/directives/children/templates.html +3 -0
  232. package/test/declarative/fixtures/directives/ref/entry.html +11 -0
  233. package/test/declarative/fixtures/directives/ref/fast-build.config.json +6 -0
  234. package/test/declarative/fixtures/directives/ref/index.html +15 -0
  235. package/test/declarative/fixtures/directives/ref/main.ts +17 -0
  236. package/test/declarative/fixtures/directives/ref/state.json +1 -0
  237. package/test/declarative/fixtures/directives/ref/templates.html +3 -0
  238. package/test/declarative/fixtures/directives/repeat/entry.html +21 -0
  239. package/test/declarative/fixtures/directives/repeat/fast-build.config.json +6 -0
  240. package/test/declarative/fixtures/directives/repeat/index.html +133 -0
  241. package/test/declarative/fixtures/directives/repeat/main.ts +110 -0
  242. package/test/declarative/fixtures/directives/repeat/sprites.svg +8 -0
  243. package/test/declarative/fixtures/directives/repeat/state.json +10 -0
  244. package/test/declarative/fixtures/directives/repeat/templates.html +75 -0
  245. package/test/declarative/fixtures/directives/slotted/entry.html +17 -0
  246. package/test/declarative/fixtures/directives/slotted/fast-build.config.json +6 -0
  247. package/test/declarative/fixtures/directives/slotted/index.html +27 -0
  248. package/test/declarative/fixtures/directives/slotted/main.ts +29 -0
  249. package/test/declarative/fixtures/directives/slotted/state.json +1 -0
  250. package/test/declarative/fixtures/directives/slotted/templates.html +7 -0
  251. package/test/declarative/fixtures/directives/when/entry.html +51 -0
  252. package/test/declarative/fixtures/directives/when/fast-build.config.json +6 -0
  253. package/test/declarative/fixtures/directives/when/index.html +136 -0
  254. package/test/declarative/fixtures/directives/when/main.ts +172 -0
  255. package/test/declarative/fixtures/directives/when/state.json +12 -0
  256. package/test/declarative/fixtures/directives/when/templates.html +75 -0
  257. package/test/declarative/fixtures/ecosystem/README.md +11 -0
  258. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/entry.html +12 -0
  259. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/fast-build.config.json +6 -0
  260. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/index.html +20 -0
  261. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/main.ts +68 -0
  262. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/state.json +4 -0
  263. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/templates.html +7 -0
  264. package/test/declarative/fixtures/ecosystem/errors/entry.html +12 -0
  265. package/test/declarative/fixtures/ecosystem/errors/fast-build.config.json +6 -0
  266. package/test/declarative/fixtures/ecosystem/errors/index.html +20 -0
  267. package/test/declarative/fixtures/ecosystem/errors/main.ts +17 -0
  268. package/test/declarative/fixtures/ecosystem/errors/state.json +1 -0
  269. package/test/declarative/fixtures/ecosystem/errors/templates.html +7 -0
  270. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/entry.html +17 -0
  271. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/fast-build.config.json +6 -0
  272. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/index.html +56 -0
  273. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/main.ts +134 -0
  274. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/state.json +12 -0
  275. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/templates.html +34 -0
  276. package/test/declarative/fixtures/ecosystem/performance-metrics/entry.html +25 -0
  277. package/test/declarative/fixtures/ecosystem/performance-metrics/fast-build.config.json +6 -0
  278. package/test/declarative/fixtures/ecosystem/performance-metrics/fast-card.css +10 -0
  279. package/test/declarative/fixtures/ecosystem/performance-metrics/index.html +181 -0
  280. package/test/declarative/fixtures/ecosystem/performance-metrics/main.ts +58 -0
  281. package/test/declarative/fixtures/ecosystem/performance-metrics/state.json +6 -0
  282. package/test/declarative/fixtures/ecosystem/performance-metrics/templates.html +15 -0
  283. package/test/declarative/fixtures/extensions/README.md +15 -0
  284. package/test/declarative/fixtures/extensions/attribute-map/entry.html +14 -0
  285. package/test/declarative/fixtures/extensions/attribute-map/fast-build.config.json +6 -0
  286. package/test/declarative/fixtures/extensions/attribute-map/index.html +31 -0
  287. package/test/declarative/fixtures/extensions/attribute-map/main.ts +40 -0
  288. package/test/declarative/fixtures/extensions/attribute-map/state.json +4 -0
  289. package/test/declarative/fixtures/extensions/attribute-map/templates.html +14 -0
  290. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/entry.html +12 -0
  291. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/fast-build.config.json +7 -0
  292. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/index.html +25 -0
  293. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/main.ts +31 -0
  294. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/state.json +5 -0
  295. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/templates.html +11 -0
  296. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/entry.html +13 -0
  297. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/fast-build.config.json +7 -0
  298. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/index.html +23 -0
  299. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/main.ts +37 -0
  300. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/state.json +1 -0
  301. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/templates.html +9 -0
  302. package/test/declarative/fixtures/extensions/observer-map/entry.html +15 -0
  303. package/test/declarative/fixtures/extensions/observer-map/fast-build.config.json +6 -0
  304. package/test/declarative/fixtures/extensions/observer-map/index.html +442 -0
  305. package/test/declarative/fixtures/extensions/observer-map/main.ts +482 -0
  306. package/test/declarative/fixtures/extensions/observer-map/state.json +158 -0
  307. package/test/declarative/fixtures/extensions/observer-map/templates.html +172 -0
  308. package/test/declarative/fixtures/extensions/observer-map-config-object/entry.html +16 -0
  309. package/test/declarative/fixtures/extensions/observer-map-config-object/fast-build.config.json +6 -0
  310. package/test/declarative/fixtures/extensions/observer-map-config-object/index.html +27 -0
  311. package/test/declarative/fixtures/extensions/observer-map-config-object/main.ts +53 -0
  312. package/test/declarative/fixtures/extensions/observer-map-config-object/state.json +9 -0
  313. package/test/declarative/fixtures/extensions/observer-map-config-object/templates.html +12 -0
  314. package/test/declarative/fixtures/extensions/observer-map-deep-merge/README.md +98 -0
  315. package/test/declarative/fixtures/extensions/observer-map-deep-merge/entry.html +156 -0
  316. package/test/declarative/fixtures/extensions/observer-map-deep-merge/fast-build.config.json +6 -0
  317. package/test/declarative/fixtures/extensions/observer-map-deep-merge/index.html +376 -0
  318. package/test/declarative/fixtures/extensions/observer-map-deep-merge/main.ts +366 -0
  319. package/test/declarative/fixtures/extensions/observer-map-deep-merge/state.json +69 -0
  320. package/test/declarative/fixtures/extensions/observer-map-deep-merge/templates.html +91 -0
  321. package/test/declarative/fixtures/extensions/observer-map-properties/entry.html +14 -0
  322. package/test/declarative/fixtures/extensions/observer-map-properties/fast-build.config.json +6 -0
  323. package/test/declarative/fixtures/extensions/observer-map-properties/index.html +110 -0
  324. package/test/declarative/fixtures/extensions/observer-map-properties/main.ts +175 -0
  325. package/test/declarative/fixtures/extensions/observer-map-properties/state.json +29 -0
  326. package/test/declarative/fixtures/extensions/observer-map-properties/templates.html +55 -0
  327. package/test/declarative/fixtures/scenarios/README.md +7 -0
  328. package/test/declarative/fixtures/scenarios/nested-elements/entry.html +16 -0
  329. package/test/declarative/fixtures/scenarios/nested-elements/fast-build.config.json +6 -0
  330. package/test/declarative/fixtures/scenarios/nested-elements/index.html +126 -0
  331. package/test/declarative/fixtures/scenarios/nested-elements/main.ts +214 -0
  332. package/test/declarative/fixtures/scenarios/nested-elements/state.json +10 -0
  333. package/test/declarative/fixtures/scenarios/nested-elements/templates.html +54 -0
  334. package/test/declarative/index.html +12 -0
  335. package/test/declarative/vite.config.ts +55 -0
  336. package/test/declarative-main.ts +6 -0
  337. package/test/extension-subpaths-main.ts +9 -0
  338. package/test/main.ts +38 -33
  339. package/test/pure-declarative-main.ts +1 -0
  340. package/dist/dts/components/install-hydration.d.ts +0 -1
  341. package/dist/dts/pending-task.d.ts +0 -32
  342. package/dist/dts/polyfills.d.ts +0 -0
  343. package/dist/dts/styles/css-binding-directive.d.ts +0 -60
  344. package/dist/dts/templating/install-hydratable-view-templates.d.ts +0 -1
  345. package/dist/esm/components/install-hydration.js +0 -3
  346. package/dist/esm/pending-task.js +0 -28
  347. package/dist/esm/polyfills.js +0 -60
  348. package/dist/esm/styles/css-binding-directive.js +0 -76
  349. package/dist/esm/templating/install-hydratable-view-templates.js +0 -23
@@ -0,0 +1,16 @@
1
+ {
2
+ "object": {
3
+ "a": {
4
+ "b1": null,
5
+ "b2": {
6
+ "c": "FOO"
7
+ }
8
+ },
9
+ "b": "bar",
10
+ "c": [
11
+ { "name": "Item 1", "status": "active" },
12
+ { "name": "Item 2", "status": "active" },
13
+ { "status": "active" }
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,17 @@
1
+ <f-template name="test-element">
2
+ <template>
3
+ <span>{{object.b}}</span>
4
+ <span>{{object.a.b1}}</span>
5
+ <span>{{object.a.b2.c}}</span>
6
+ <button @click="{handleBClick()}">Set b</button>
7
+ <button @click="{handleAB1Click()}">Set a.b1</button>
8
+ <button @click="{handleAB2CClick()}">Set a.b2.c</button>
9
+ <f-when value="{{object.c}}">
10
+ <f-repeat value="{{item in object.c}}">
11
+ <f-when value="{{item.name && item.status == 'active'}}">
12
+ <div>{{item.name}}</div>
13
+ </f-when>
14
+ </f-repeat>
15
+ </f-when>
16
+ </template>
17
+ </f-template>
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title></title>
6
+ </head>
7
+ <body>
8
+ <test-element foo="{{foo}}"></test-element>
9
+ <script type="module" src="./main.ts"></script>
10
+ </body>
11
+ </html>
@@ -0,0 +1,6 @@
1
+ {
2
+ "entry": "entry.html",
3
+ "state": "state.json",
4
+ "output": "index.html",
5
+ "templates": "templates.html"
6
+ }
@@ -0,0 +1,43 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title></title>
6
+ </head>
7
+ <body>
8
+ <test-element foo="bar"><template shadowrootmode="open" shadowroot="open"><button type="button" data-fe="1">No arguments</button>
9
+ <button type="button" data-fe="1">modify foo</button>
10
+ <button type="button" data-fe="1">
11
+ event argument ($e)
12
+ </button>
13
+ <button type="button" data-fe="1">
14
+ context argument ($c)
15
+ </button>
16
+ <button type="button" data-fe="1">
17
+ multiple arguments ($e, $c)
18
+ </button>
19
+ <button type="button" data-fe="1">
20
+ context event argument ($c.event)
21
+ </button></template></test-element>
22
+ <f-template name="test-element">
23
+ <template>
24
+ <button type="button" @click="{handleNoArgsClick()}">No arguments</button>
25
+ <button type="button" @click="{handleModifyAttributeClick()}">modify foo</button>
26
+ <button type="button" @click="{handleDollarEArgClick($e)}">
27
+ event argument ($e)
28
+ </button>
29
+ <button type="button" @click="{handleContextArgClick($c)}">
30
+ context argument ($c)
31
+ </button>
32
+ <button type="button" @click="{handleMultiArgClick($e, $c)}">
33
+ multiple arguments ($e, $c)
34
+ </button>
35
+ <button type="button" @click="{handleContextEventArgClick($c.event)}">
36
+ context event argument ($c.event)
37
+ </button>
38
+ </template>
39
+ </f-template>
40
+
41
+ <script type="module" src="./main.ts"></script>
42
+ </body>
43
+ </html>
@@ -0,0 +1,43 @@
1
+ import { attr } from "@microsoft/fast-element/attr.js";
2
+ import { declarativeTemplate } from "@microsoft/fast-element/declarative.js";
3
+ import { FASTElement } from "@microsoft/fast-element/fast-element.js";
4
+ import { enableHydration } from "@microsoft/fast-element/hydration.js";
5
+
6
+ class TestElement extends FASTElement {
7
+ @attr
8
+ foo: string = "";
9
+
10
+ public handleNoArgsClick = (): void => {
11
+ console.log("no args");
12
+ };
13
+
14
+ public handleModifyAttributeClick = (): void => {
15
+ this.foo = "modified-by-click";
16
+ };
17
+
18
+ public handleDollarEArgClick = (e: MouseEvent): void => {
19
+ console.log(e.type);
20
+ };
21
+
22
+ public handleContextArgClick = (c: any): void => {
23
+ console.log(c.event.type);
24
+ };
25
+
26
+ public handleMultiArgClick = (e: MouseEvent, c: any): void => {
27
+ console.log(`${e.type},${c.event.type}`);
28
+ };
29
+
30
+ public handleContextEventArgClick = (e: MouseEvent): void => {
31
+ console.log(e.type);
32
+ };
33
+ }
34
+ TestElement.define({
35
+ name: "test-element",
36
+ template: declarativeTemplate(),
37
+ });
38
+
39
+ enableHydration({
40
+ hydrationComplete() {
41
+ (window as any).hydrationCompleted = true;
42
+ },
43
+ });
@@ -0,0 +1,3 @@
1
+ {
2
+ "foo": "bar"
3
+ }
@@ -0,0 +1,18 @@
1
+ <f-template name="test-element">
2
+ <template>
3
+ <button type="button" @click="{handleNoArgsClick()}">No arguments</button>
4
+ <button type="button" @click="{handleModifyAttributeClick()}">modify foo</button>
5
+ <button type="button" @click="{handleDollarEArgClick($e)}">
6
+ event argument ($e)
7
+ </button>
8
+ <button type="button" @click="{handleContextArgClick($c)}">
9
+ context argument ($c)
10
+ </button>
11
+ <button type="button" @click="{handleMultiArgClick($e, $c)}">
12
+ multiple arguments ($e, $c)
13
+ </button>
14
+ <button type="button" @click="{handleContextEventArgClick($c.event)}">
15
+ context event argument ($c.event)
16
+ </button>
17
+ </template>
18
+ </f-template>
@@ -0,0 +1,40 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Host Bindings Test</title>
6
+ <style>
7
+ /* Ensure custom elements display as block to prevent overlap */
8
+ host-event-element,
9
+ host-multi-element,
10
+ host-static-element,
11
+ host-events-element,
12
+ host-multi-content-element,
13
+ host-text-binding-element,
14
+ host-property-element,
15
+ host-all-types-element,
16
+ host-perm-attr-first,
17
+ host-perm-bool-first,
18
+ host-perm-prop-first {
19
+ display: block;
20
+ margin: 10px 0;
21
+ padding: 10px;
22
+ border: 1px solid #ccc;
23
+ }
24
+ </style>
25
+ </head>
26
+ <body>
27
+ <host-event-element></host-event-element>
28
+ <host-multi-element disabled></host-multi-element>
29
+ <host-static-element id="static-host"></host-static-element>
30
+ <host-events-element text="content text"></host-events-element>
31
+ <host-multi-content-element first="a" second="b"></host-multi-content-element>
32
+ <host-text-binding-element text="text content"></host-text-binding-element>
33
+ <host-property-element text="property test"></host-property-element>
34
+ <host-all-types-element text="all types" attr="value" disabled></host-all-types-element>
35
+ <host-perm-attr-first text="perm attr first" attr="value" disabled></host-perm-attr-first>
36
+ <host-perm-bool-first text="perm bool first" attr="value" disabled></host-perm-bool-first>
37
+ <host-perm-prop-first text="perm prop first" attr="value" disabled></host-perm-prop-first>
38
+ <script type="module" src="./main.ts"></script>
39
+ </body>
40
+ </html>
@@ -0,0 +1,6 @@
1
+ {
2
+ "entry": "entry.html",
3
+ "state": "state.json",
4
+ "output": "index.html",
5
+ "templates": "templates.html"
6
+ }
@@ -0,0 +1,96 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Host Bindings Test</title>
6
+ <style>
7
+ /* Ensure custom elements display as block to prevent overlap */
8
+ host-event-element,
9
+ host-multi-element,
10
+ host-static-element,
11
+ host-events-element,
12
+ host-multi-content-element,
13
+ host-text-binding-element,
14
+ host-property-element,
15
+ host-all-types-element,
16
+ host-perm-attr-first,
17
+ host-perm-bool-first,
18
+ host-perm-prop-first {
19
+ display: block;
20
+ margin: 10px 0;
21
+ padding: 10px;
22
+ border: 1px solid #ccc;
23
+ }
24
+ </style>
25
+ </head>
26
+ <body>
27
+ <host-event-element><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->Hello<!--fe:/b--></span></template></host-event-element>
28
+ <host-multi-element disabled><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->World<!--fe:/b--></span></template></host-multi-element>
29
+ <host-static-element id="static-host"><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->first<!--fe:/b--> <!--fe:b-->second<!--fe:/b--></span></template></host-static-element>
30
+ <host-events-element text="content text"><template shadowrootmode="open" shadowroot="open"><!--fe:b-->content text<!--fe:/b--></template></host-events-element>
31
+ <host-multi-content-element first="a" second="b"><template shadowrootmode="open" shadowroot="open"><span first="a" second="b" data-fe="2"></span></template></host-multi-content-element>
32
+ <host-text-binding-element text="text content"><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->text content<!--fe:/b--></span></template></host-text-binding-element>
33
+ <host-property-element text="property test"><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->property test<!--fe:/b--></span></template></host-property-element>
34
+ <host-all-types-element text="all types" attr="value" disabled><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->all types<!--fe:/b--></span></template></host-all-types-element>
35
+ <host-perm-attr-first text="perm attr first" attr="value" disabled><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->perm attr first<!--fe:/b--></span></template></host-perm-attr-first>
36
+ <host-perm-bool-first text="perm bool first" attr="value" disabled><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->perm bool first<!--fe:/b--></span></template></host-perm-bool-first>
37
+ <host-perm-prop-first text="perm prop first" attr="value" disabled><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->perm prop first<!--fe:/b--></span></template></host-perm-prop-first>
38
+ <f-template name="host-event-element">
39
+ <template @click="{handleClick()}">
40
+ <span>{{greeting}}</span>
41
+ </template>
42
+ </f-template>
43
+ <f-template name="host-multi-element">
44
+ <template @click="{handleClick()}" ?disabled="{{isDisabled}}">
45
+ <span>{{text}}</span>
46
+ </template>
47
+ </f-template>
48
+ <f-template name="host-static-element">
49
+ <template id="static-host" @click="{handleClick()}">
50
+ <span>{{first}} {{second}}</span>
51
+ </template>
52
+ </f-template>
53
+ <f-template name="host-events-element">
54
+ <template @click="{handleClick()}" @mouseenter="{handleMouseEnter()}">
55
+ {{text}}
56
+ </template>
57
+ </f-template>
58
+ <f-template name="host-multi-content-element">
59
+ <template @click="{handleClick()}">
60
+ <span first="{{first}}" second="{{second}}"></span>
61
+ </template>
62
+ </f-template>
63
+ <f-template name="host-text-binding-element">
64
+ <template @click="{handleClick()}">
65
+ <span>{{text}}</span>
66
+ </template>
67
+ </f-template>
68
+ <f-template name="host-property-element">
69
+ <template :title="{hostTitle}">
70
+ <span>{{text}}</span>
71
+ </template>
72
+ </f-template>
73
+ <f-template name="host-all-types-element">
74
+ <template @click="{handleClick()}" ?disabled="{{isDisabled}}" :title="{hostTitle}" attr="{{hostAttr}}">
75
+ <span>{{text}}</span>
76
+ </template>
77
+ </f-template>
78
+ <f-template name="host-perm-attr-first">
79
+ <template attr="{{hostAttr}}" :title="{hostTitle}" ?disabled="{{isDisabled}}" @click="{handleClick()}">
80
+ <span>{{text}}</span>
81
+ </template>
82
+ </f-template>
83
+ <f-template name="host-perm-bool-first">
84
+ <template ?disabled="{{isDisabled}}" @click="{handleClick()}" attr="{{hostAttr}}" :title="{hostTitle}">
85
+ <span>{{text}}</span>
86
+ </template>
87
+ </f-template>
88
+ <f-template name="host-perm-prop-first">
89
+ <template :title="{hostTitle}" attr="{{hostAttr}}" @click="{handleClick()}" ?disabled="{{isDisabled}}">
90
+ <span>{{text}}</span>
91
+ </template>
92
+ </f-template>
93
+
94
+ <script type="module" src="./main.ts"></script>
95
+ </body>
96
+ </html>
@@ -0,0 +1,222 @@
1
+ import { attr } from "@microsoft/fast-element/attr.js";
2
+ import { declarativeTemplate } from "@microsoft/fast-element/declarative.js";
3
+ import { FASTElement } from "@microsoft/fast-element/fast-element.js";
4
+ import { enableHydration } from "@microsoft/fast-element/hydration.js";
5
+ import { observable } from "@microsoft/fast-element/observable.js";
6
+
7
+ // Test 1: Element with single host event binding and content attribute binding
8
+ class HostEventElement extends FASTElement {
9
+ @attr
10
+ greeting: string = "Hello";
11
+
12
+ public clickCount = 0;
13
+
14
+ public handleClick = (): void => {
15
+ this.clickCount++;
16
+ console.log(`host-event clicked: ${this.clickCount}`);
17
+ };
18
+ }
19
+ HostEventElement.define({
20
+ name: "host-event-element",
21
+ template: declarativeTemplate(),
22
+ });
23
+
24
+ // Test 2: Element with multiple host bindings (event + boolean)
25
+ class HostMultiElement extends FASTElement {
26
+ @attr
27
+ text: string = "World";
28
+
29
+ @observable
30
+ isDisabled: boolean = true;
31
+
32
+ public clickCount = 0;
33
+
34
+ public handleClick = (): void => {
35
+ this.clickCount++;
36
+ console.log(`host-multi clicked: ${this.clickCount}`);
37
+ };
38
+ }
39
+ HostMultiElement.define({
40
+ name: "host-multi-element",
41
+ template: declarativeTemplate(),
42
+ });
43
+
44
+ // Test 3: Element with static attribute and multiple content bindings
45
+ class HostStaticElement extends FASTElement {
46
+ @attr
47
+ first: string = "first";
48
+
49
+ @attr
50
+ second: string = "second";
51
+
52
+ public clickCount = 0;
53
+
54
+ public handleClick = (): void => {
55
+ this.clickCount++;
56
+ console.log(`host-static clicked: ${this.clickCount}`);
57
+ };
58
+ }
59
+ HostStaticElement.define({
60
+ name: "host-static-element",
61
+ template: declarativeTemplate(),
62
+ });
63
+
64
+ // Test 4: Element with multiple host events
65
+ class HostEventsElement extends FASTElement {
66
+ @attr
67
+ text: string = "content text";
68
+
69
+ public clickCount = 0;
70
+ public mouseEnterCount = 0;
71
+
72
+ public handleClick = (): void => {
73
+ this.clickCount++;
74
+ console.log(`host-events clicked: ${this.clickCount}`);
75
+ };
76
+
77
+ public handleMouseEnter = (): void => {
78
+ this.mouseEnterCount++;
79
+ console.log(`host-events mouseenter: ${this.mouseEnterCount}`);
80
+ };
81
+ }
82
+ HostEventsElement.define({
83
+ name: "host-events-element",
84
+ template: declarativeTemplate(),
85
+ });
86
+
87
+ // Test 5: Element with host event and multiple content attribute bindings
88
+ // KEY TEST: Verifies content binding indexes are 0,1 not offset by host bindings
89
+ class HostMultiContentElement extends FASTElement {
90
+ @attr
91
+ first: string = "a";
92
+
93
+ @attr
94
+ second: string = "b";
95
+
96
+ public clickCount = 0;
97
+
98
+ public handleClick = (): void => {
99
+ this.clickCount++;
100
+ console.log(`host-multi-content clicked: ${this.clickCount}`);
101
+ };
102
+ }
103
+ HostMultiContentElement.define({
104
+ name: "host-multi-content-element",
105
+ template: declarativeTemplate(),
106
+ });
107
+
108
+ // Test 6: Element with host event and content text binding
109
+ class HostTextBindingElement extends FASTElement {
110
+ @attr
111
+ text: string = "text content";
112
+
113
+ public clickCount = 0;
114
+
115
+ public handleClick = (): void => {
116
+ this.clickCount++;
117
+ console.log(`host-text-binding clicked: ${this.clickCount}`);
118
+ };
119
+ }
120
+ HostTextBindingElement.define({
121
+ name: "host-text-binding-element",
122
+ template: declarativeTemplate(),
123
+ });
124
+
125
+ // Test 7: Element with host property binding
126
+ class HostPropertyElement extends FASTElement {
127
+ @attr
128
+ text: string = "property test";
129
+
130
+ @observable
131
+ hostTitle: string = "tooltip text";
132
+
133
+ public clickCount = 0;
134
+ }
135
+ HostPropertyElement.define({
136
+ name: "host-property-element",
137
+ template: declarativeTemplate(),
138
+ });
139
+
140
+ // Test 8: Element with all host binding types (event + boolean + property + attribute)
141
+ class HostAllTypesElement extends FASTElement {
142
+ @attr
143
+ text: string = "all types";
144
+
145
+ @observable
146
+ isDisabled: boolean = true;
147
+
148
+ @observable
149
+ hostTitle: string = "all types tooltip";
150
+
151
+ @attr({ attribute: "attr" })
152
+ hostAttr: string = "value";
153
+
154
+ public clickCount = 0;
155
+
156
+ public handleClick = (): void => {
157
+ this.clickCount++;
158
+ console.log(`host-all-types clicked: ${this.clickCount}`);
159
+ };
160
+ }
161
+ HostAllTypesElement.define({
162
+ name: "host-all-types-element",
163
+ template: declarativeTemplate(),
164
+ });
165
+
166
+ // Base class for permutation tests - all have same properties/behavior
167
+ class HostPermutationBase extends FASTElement {
168
+ @attr
169
+ text: string = "";
170
+
171
+ @observable
172
+ isDisabled: boolean = true;
173
+
174
+ @observable
175
+ hostTitle: string = "permutation tooltip";
176
+
177
+ @attr({ attribute: "attr" })
178
+ hostAttr: string = "value";
179
+
180
+ public clickCount = 0;
181
+
182
+ public handleClick = (): void => {
183
+ this.clickCount++;
184
+ console.log(`${this.tagName.toLowerCase()} clicked: ${this.clickCount}`);
185
+ };
186
+ }
187
+
188
+ // Test 9: Permutation - attribute first
189
+ class HostPermAttrFirst extends HostPermutationBase {
190
+ @attr
191
+ override text: string = "perm attr first";
192
+ }
193
+ HostPermAttrFirst.define({
194
+ name: "host-perm-attr-first",
195
+ template: declarativeTemplate(),
196
+ });
197
+
198
+ // Test 10: Permutation - boolean first
199
+ class HostPermBoolFirst extends HostPermutationBase {
200
+ @attr
201
+ override text: string = "perm bool first";
202
+ }
203
+ HostPermBoolFirst.define({
204
+ name: "host-perm-bool-first",
205
+ template: declarativeTemplate(),
206
+ });
207
+
208
+ // Test 11: Permutation - property first
209
+ class HostPermPropFirst extends HostPermutationBase {
210
+ @attr
211
+ override text: string = "perm prop first";
212
+ }
213
+ HostPermPropFirst.define({
214
+ name: "host-perm-prop-first",
215
+ template: declarativeTemplate(),
216
+ });
217
+
218
+ enableHydration({
219
+ hydrationComplete() {
220
+ (window as any).hydrationCompleted = true;
221
+ },
222
+ });
@@ -0,0 +1,9 @@
1
+ {
2
+ "greeting": "Hello",
3
+ "text": "World",
4
+ "isDisabled": true,
5
+ "first": "first",
6
+ "second": "second",
7
+ "hostTitle": "tooltip",
8
+ "hostAttr": "value"
9
+ }
@@ -0,0 +1,55 @@
1
+ <f-template name="host-event-element">
2
+ <template @click="{handleClick()}">
3
+ <span>{{greeting}}</span>
4
+ </template>
5
+ </f-template>
6
+ <f-template name="host-multi-element">
7
+ <template @click="{handleClick()}" ?disabled="{{isDisabled}}">
8
+ <span>{{text}}</span>
9
+ </template>
10
+ </f-template>
11
+ <f-template name="host-static-element">
12
+ <template id="static-host" @click="{handleClick()}">
13
+ <span>{{first}} {{second}}</span>
14
+ </template>
15
+ </f-template>
16
+ <f-template name="host-events-element">
17
+ <template @click="{handleClick()}" @mouseenter="{handleMouseEnter()}">
18
+ {{text}}
19
+ </template>
20
+ </f-template>
21
+ <f-template name="host-multi-content-element">
22
+ <template @click="{handleClick()}">
23
+ <span first="{{first}}" second="{{second}}"></span>
24
+ </template>
25
+ </f-template>
26
+ <f-template name="host-text-binding-element">
27
+ <template @click="{handleClick()}">
28
+ <span>{{text}}</span>
29
+ </template>
30
+ </f-template>
31
+ <f-template name="host-property-element">
32
+ <template :title="{hostTitle}">
33
+ <span>{{text}}</span>
34
+ </template>
35
+ </f-template>
36
+ <f-template name="host-all-types-element">
37
+ <template @click="{handleClick()}" ?disabled="{{isDisabled}}" :title="{hostTitle}" attr="{{hostAttr}}">
38
+ <span>{{text}}</span>
39
+ </template>
40
+ </f-template>
41
+ <f-template name="host-perm-attr-first">
42
+ <template attr="{{hostAttr}}" :title="{hostTitle}" ?disabled="{{isDisabled}}" @click="{handleClick()}">
43
+ <span>{{text}}</span>
44
+ </template>
45
+ </f-template>
46
+ <f-template name="host-perm-bool-first">
47
+ <template ?disabled="{{isDisabled}}" @click="{handleClick()}" attr="{{hostAttr}}" :title="{hostTitle}">
48
+ <span>{{text}}</span>
49
+ </template>
50
+ </f-template>
51
+ <f-template name="host-perm-prop-first">
52
+ <template :title="{hostTitle}" attr="{{hostAttr}}" @click="{handleClick()}" ?disabled="{{isDisabled}}">
53
+ <span>{{text}}</span>
54
+ </template>
55
+ </f-template>
@@ -0,0 +1,12 @@
1
+ # Directives
2
+
3
+ Fixtures for testing attribute and element directives available in FAST
4
+ Element's declarative templates.
5
+
6
+ | Fixture | Description |
7
+ |---|---|
8
+ | `children` | The `f-children` directive for injecting child nodes into templates. |
9
+ | `ref` | The `f-ref` directive for obtaining direct references to DOM elements. |
10
+ | `repeat` | The `f-repeat` directive for iterating over arrays with binding context access. |
11
+ | `slotted` | The `f-slotted` directive for filtering slotted content. |
12
+ | `when` | The `f-when` conditional directive with boolean and comparison operators. |
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title></title>
6
+ </head>
7
+ <body>
8
+ <test-element></test-element>
9
+ <script type="module" src="./main.ts"></script>
10
+ </body>
11
+ </html>
@@ -0,0 +1,6 @@
1
+ {
2
+ "entry": "entry.html",
3
+ "state": "state.json",
4
+ "output": "index.html",
5
+ "templates": "templates.html"
6
+ }
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title></title>
6
+ </head>
7
+ <body>
8
+ <test-element><template shadowrootmode="open" shadowroot="open"><ul data-fe="1"><!--fe:b--><!--fe:r--><li><!--fe:b-->Foo<!--fe:/b--></li><!--fe:/r--><!--fe:r--><li><!--fe:b-->Bar<!--fe:/b--></li><!--fe:/r--><!--fe:/b--></ul></template></test-element>
9
+ <f-template name="test-element">
10
+ <template><ul f-children="{listItems}"><f-repeat value="{{item in list}}"><li>{{item}}</li></f-repeat></ul></template>
11
+ </f-template>
12
+
13
+ <script type="module" src="./main.ts"></script>
14
+ </body>
15
+ </html>