@microsoft/fast-element 3.0.0-rc.1 → 3.0.0-rc.2

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 (286) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/README.md +50 -14
  3. package/dist/context/context.api.json +13 -13
  4. package/dist/declarative/declarative.api.json +654 -15
  5. package/dist/di/di.api.json +15 -15
  6. package/dist/dts/__test__/helpers.d.ts +6 -0
  7. package/dist/dts/__test__/setup-node.d.ts +0 -0
  8. package/dist/dts/binding/binding.d.ts +15 -5
  9. package/dist/dts/binding/one-time.d.ts +1 -1
  10. package/dist/dts/binding/one-way.d.ts +1 -1
  11. package/dist/dts/binding/signal.d.ts +1 -1
  12. package/dist/dts/binding/two-way.d.ts +1 -1
  13. package/dist/dts/components/attributes.d.ts +1 -1
  14. package/dist/dts/components/enable-hydration.d.ts +22 -2
  15. package/dist/dts/components/fast-definitions.d.ts +7 -4
  16. package/dist/dts/components/fast-element.d.ts +42 -12
  17. package/dist/dts/components/hydration-tracker.d.ts +47 -4
  18. package/dist/dts/components/hydration.d.ts +5 -0
  19. package/dist/dts/context.d.ts +7 -7
  20. package/dist/dts/declarative/debug.d.ts +2 -3
  21. package/dist/dts/declarative/index.d.ts +3 -2
  22. package/dist/dts/declarative/interfaces.d.ts +1 -2
  23. package/dist/dts/declarative/template.d.ts +2 -1
  24. package/dist/dts/declarative/utilities.d.ts +50 -4
  25. package/dist/dts/di/di.d.ts +6 -6
  26. package/dist/dts/dom-policy.d.ts +22 -4
  27. package/dist/dts/dom.d.ts +4 -16
  28. package/dist/dts/hydration/diagnostics.d.ts +93 -0
  29. package/dist/dts/hydration/hydration-debugger.d.ts +35 -0
  30. package/dist/dts/hydration/messages.d.ts +62 -0
  31. package/dist/dts/hydration/target-builder.d.ts +26 -1
  32. package/dist/dts/hydration.d.ts +7 -3
  33. package/dist/dts/index.d.ts +7 -3
  34. package/dist/dts/interfaces.d.ts +1 -0
  35. package/dist/dts/observation/observable.d.ts +3 -3
  36. package/dist/dts/platform.d.ts +20 -4
  37. package/dist/dts/registry.d.ts +1 -0
  38. package/dist/dts/templating/children.d.ts +1 -1
  39. package/dist/dts/templating/compiler.d.ts +1 -1
  40. package/dist/dts/templating/html-binding-directive.d.ts +6 -2
  41. package/dist/dts/templating/html-directive.d.ts +2 -1
  42. package/dist/dts/templating/hydration-view.d.ts +24 -3
  43. package/dist/dts/templating/ref.d.ts +1 -1
  44. package/dist/dts/templating/render.d.ts +2 -2
  45. package/dist/dts/templating/repeat.d.ts +1 -1
  46. package/dist/dts/templating/slotted.d.ts +1 -1
  47. package/dist/dts/templating/template.d.ts +5 -5
  48. package/dist/dts/templating/when.d.ts +1 -1
  49. package/dist/dts/testing/fakes.d.ts +4 -4
  50. package/dist/esm/__test__/helpers.js +22 -0
  51. package/dist/esm/__test__/setup-node.js +18 -0
  52. package/dist/esm/binding/two-way.js +1 -2
  53. package/dist/esm/components/attributes.js +12 -8
  54. package/dist/esm/components/element-controller.js +11 -6
  55. package/dist/esm/components/enable-hydration.js +27 -3
  56. package/dist/esm/components/fast-definitions.js +19 -18
  57. package/dist/esm/components/hydration-tracker.js +34 -5
  58. package/dist/esm/components/hydration.js +85 -6
  59. package/dist/esm/debug.js +1 -0
  60. package/dist/esm/declarative/attribute-map.js +2 -1
  61. package/dist/esm/declarative/debug.js +0 -1
  62. package/dist/esm/declarative/index.js +1 -0
  63. package/dist/esm/declarative/interfaces.js +0 -1
  64. package/dist/esm/declarative/observer-map-utilities.js +58 -55
  65. package/dist/esm/declarative/template-bridge.js +4 -14
  66. package/dist/esm/declarative/template.js +4 -3
  67. package/dist/esm/declarative/utilities.js +236 -1
  68. package/dist/esm/di/di.js +2 -1
  69. package/dist/esm/dom-policy.js +33 -4
  70. package/dist/esm/hydration/diagnostics.js +50 -0
  71. package/dist/esm/hydration/hydration-debugger.js +112 -0
  72. package/dist/esm/hydration/messages.js +84 -0
  73. package/dist/esm/hydration/target-builder.js +65 -19
  74. package/dist/esm/hydration.js +3 -1
  75. package/dist/esm/index.js +6 -2
  76. package/dist/esm/interfaces.js +1 -0
  77. package/dist/esm/metadata.js +2 -8
  78. package/dist/esm/observation/notifier.js +2 -4
  79. package/dist/esm/registry.js +1 -0
  80. package/dist/esm/templating/html-binding-directive.js +1 -1
  81. package/dist/esm/templating/hydration-view.js +20 -27
  82. package/dist/esm/templating/render.js +39 -18
  83. package/dist/esm/templating/repeat.js +51 -17
  84. package/dist/esm/templating/view.js +1 -1
  85. package/dist/esm/testing/fixture.js +2 -2
  86. package/dist/esm/testing/timeout.js +2 -2
  87. package/dist/fast-element.api.json +1329 -99
  88. package/dist/fast-element.d.ts +147 -66
  89. package/dist/fast-element.debug.js +392 -99
  90. package/dist/fast-element.debug.min.js +2 -2
  91. package/dist/fast-element.js +392 -99
  92. package/dist/fast-element.min.js +2 -2
  93. package/dist/fast-element.untrimmed.d.ts +133 -70
  94. package/dist/hydration/hydration.api.json +1280 -57
  95. package/dist/styles/styles.api.json +1 -1
  96. package/package.json +21 -9
  97. package/ARCHITECTURE_FASTELEMENT.md +0 -63
  98. package/ARCHITECTURE_HTML_TAGGED_TEMPLATE_LITERAL.md +0 -36
  99. package/ARCHITECTURE_INTRO.md +0 -10
  100. package/ARCHITECTURE_OVERVIEW.md +0 -52
  101. package/ARCHITECTURE_UPDATES.md +0 -11
  102. package/CHANGELOG.json +0 -2275
  103. package/DECLARATIVE_DESIGN.md +0 -806
  104. package/DECLARATIVE_HTML.md +0 -470
  105. package/DECLARATIVE_MIGRATION.md +0 -215
  106. package/DECLARATIVE_RENDERING.md +0 -530
  107. package/DECLARATIVE_RENDERING_LIFECYCLE.md +0 -288
  108. package/DECLARATIVE_SCHEMA_OBSERVER_MAP.md +0 -489
  109. package/DESIGN.md +0 -615
  110. package/MIGRATION.md +0 -387
  111. package/SIZES.md +0 -25
  112. package/api-extractor.arrays.json +0 -15
  113. package/api-extractor.context.json +0 -15
  114. package/api-extractor.declarative.json +0 -15
  115. package/api-extractor.di.json +0 -15
  116. package/api-extractor.hydration.json +0 -15
  117. package/api-extractor.styles.json +0 -15
  118. package/biome.json +0 -4
  119. package/docs/ACKNOWLEDGEMENTS.md +0 -12
  120. package/docs/api-report.api.md +0 -1299
  121. package/docs/arrays/api-report.api.md +0 -114
  122. package/docs/context/api-report.api.md +0 -69
  123. package/docs/declarative/api-report.api.md +0 -397
  124. package/docs/di/api-report.api.md +0 -315
  125. package/docs/fast-element-2-changes.md +0 -15
  126. package/docs/hydration/api-report.api.md +0 -285
  127. package/docs/styles/api-report.api.md +0 -135
  128. package/playwright.config.ts +0 -26
  129. package/playwright.declarative.config.ts +0 -26
  130. package/playwright.declarative.webui.config.ts +0 -20
  131. package/scripts/declarative/build-fixtures-with-webui.js +0 -135
  132. package/scripts/declarative/build-fixtures.js +0 -49
  133. package/scripts/declarative/build-fixtures.utilities.js +0 -101
  134. package/scripts/measure-sizes.js +0 -219
  135. package/scripts/run-api-extractor.js +0 -70
  136. package/test/declarative/fixtures/README.md +0 -72
  137. package/test/declarative/fixtures/WRITING_FIXTURES.md +0 -330
  138. package/test/declarative/fixtures/bindings/README.md +0 -12
  139. package/test/declarative/fixtures/bindings/attribute/entry.html +0 -13
  140. package/test/declarative/fixtures/bindings/attribute/fast-build.config.json +0 -6
  141. package/test/declarative/fixtures/bindings/attribute/index.html +0 -25
  142. package/test/declarative/fixtures/bindings/attribute/main.ts +0 -41
  143. package/test/declarative/fixtures/bindings/attribute/state.json +0 -8
  144. package/test/declarative/fixtures/bindings/attribute/templates.html +0 -11
  145. package/test/declarative/fixtures/bindings/content/entry.html +0 -12
  146. package/test/declarative/fixtures/bindings/content/fast-build.config.json +0 -6
  147. package/test/declarative/fixtures/bindings/content/index.html +0 -19
  148. package/test/declarative/fixtures/bindings/content/main.ts +0 -27
  149. package/test/declarative/fixtures/bindings/content/state.json +0 -4
  150. package/test/declarative/fixtures/bindings/content/templates.html +0 -6
  151. package/test/declarative/fixtures/bindings/dot-syntax/entry.html +0 -11
  152. package/test/declarative/fixtures/bindings/dot-syntax/fast-build.config.json +0 -6
  153. package/test/declarative/fixtures/bindings/dot-syntax/index.html +0 -47
  154. package/test/declarative/fixtures/bindings/dot-syntax/main.ts +0 -59
  155. package/test/declarative/fixtures/bindings/dot-syntax/state.json +0 -16
  156. package/test/declarative/fixtures/bindings/dot-syntax/templates.html +0 -17
  157. package/test/declarative/fixtures/bindings/event/entry.html +0 -11
  158. package/test/declarative/fixtures/bindings/event/fast-build.config.json +0 -6
  159. package/test/declarative/fixtures/bindings/event/index.html +0 -43
  160. package/test/declarative/fixtures/bindings/event/main.ts +0 -43
  161. package/test/declarative/fixtures/bindings/event/state.json +0 -3
  162. package/test/declarative/fixtures/bindings/event/templates.html +0 -18
  163. package/test/declarative/fixtures/bindings/host/entry.html +0 -40
  164. package/test/declarative/fixtures/bindings/host/fast-build.config.json +0 -6
  165. package/test/declarative/fixtures/bindings/host/index.html +0 -96
  166. package/test/declarative/fixtures/bindings/host/main.ts +0 -222
  167. package/test/declarative/fixtures/bindings/host/state.json +0 -9
  168. package/test/declarative/fixtures/bindings/host/templates.html +0 -55
  169. package/test/declarative/fixtures/directives/README.md +0 -12
  170. package/test/declarative/fixtures/directives/children/entry.html +0 -11
  171. package/test/declarative/fixtures/directives/children/fast-build.config.json +0 -6
  172. package/test/declarative/fixtures/directives/children/index.html +0 -15
  173. package/test/declarative/fixtures/directives/children/main.ts +0 -22
  174. package/test/declarative/fixtures/directives/children/state.json +0 -3
  175. package/test/declarative/fixtures/directives/children/templates.html +0 -3
  176. package/test/declarative/fixtures/directives/ref/entry.html +0 -11
  177. package/test/declarative/fixtures/directives/ref/fast-build.config.json +0 -6
  178. package/test/declarative/fixtures/directives/ref/index.html +0 -15
  179. package/test/declarative/fixtures/directives/ref/main.ts +0 -17
  180. package/test/declarative/fixtures/directives/ref/state.json +0 -1
  181. package/test/declarative/fixtures/directives/ref/templates.html +0 -3
  182. package/test/declarative/fixtures/directives/repeat/entry.html +0 -21
  183. package/test/declarative/fixtures/directives/repeat/fast-build.config.json +0 -6
  184. package/test/declarative/fixtures/directives/repeat/index.html +0 -133
  185. package/test/declarative/fixtures/directives/repeat/main.ts +0 -110
  186. package/test/declarative/fixtures/directives/repeat/sprites.svg +0 -8
  187. package/test/declarative/fixtures/directives/repeat/state.json +0 -10
  188. package/test/declarative/fixtures/directives/repeat/templates.html +0 -75
  189. package/test/declarative/fixtures/directives/slotted/entry.html +0 -17
  190. package/test/declarative/fixtures/directives/slotted/fast-build.config.json +0 -6
  191. package/test/declarative/fixtures/directives/slotted/index.html +0 -27
  192. package/test/declarative/fixtures/directives/slotted/main.ts +0 -29
  193. package/test/declarative/fixtures/directives/slotted/state.json +0 -1
  194. package/test/declarative/fixtures/directives/slotted/templates.html +0 -7
  195. package/test/declarative/fixtures/directives/when/entry.html +0 -51
  196. package/test/declarative/fixtures/directives/when/fast-build.config.json +0 -6
  197. package/test/declarative/fixtures/directives/when/index.html +0 -136
  198. package/test/declarative/fixtures/directives/when/main.ts +0 -172
  199. package/test/declarative/fixtures/directives/when/state.json +0 -12
  200. package/test/declarative/fixtures/directives/when/templates.html +0 -75
  201. package/test/declarative/fixtures/ecosystem/README.md +0 -11
  202. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/entry.html +0 -12
  203. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/fast-build.config.json +0 -6
  204. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/index.html +0 -20
  205. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/main.ts +0 -68
  206. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/state.json +0 -4
  207. package/test/declarative/fixtures/ecosystem/declarative-no-hydration/templates.html +0 -7
  208. package/test/declarative/fixtures/ecosystem/errors/entry.html +0 -12
  209. package/test/declarative/fixtures/ecosystem/errors/fast-build.config.json +0 -6
  210. package/test/declarative/fixtures/ecosystem/errors/index.html +0 -20
  211. package/test/declarative/fixtures/ecosystem/errors/main.ts +0 -17
  212. package/test/declarative/fixtures/ecosystem/errors/state.json +0 -1
  213. package/test/declarative/fixtures/ecosystem/errors/templates.html +0 -7
  214. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/entry.html +0 -17
  215. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/fast-build.config.json +0 -6
  216. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/index.html +0 -56
  217. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/main.ts +0 -134
  218. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/state.json +0 -12
  219. package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/templates.html +0 -34
  220. package/test/declarative/fixtures/ecosystem/performance-metrics/entry.html +0 -25
  221. package/test/declarative/fixtures/ecosystem/performance-metrics/fast-build.config.json +0 -6
  222. package/test/declarative/fixtures/ecosystem/performance-metrics/fast-card.css +0 -10
  223. package/test/declarative/fixtures/ecosystem/performance-metrics/index.html +0 -181
  224. package/test/declarative/fixtures/ecosystem/performance-metrics/main.ts +0 -58
  225. package/test/declarative/fixtures/ecosystem/performance-metrics/state.json +0 -6
  226. package/test/declarative/fixtures/ecosystem/performance-metrics/templates.html +0 -15
  227. package/test/declarative/fixtures/extensions/README.md +0 -15
  228. package/test/declarative/fixtures/extensions/attribute-map/entry.html +0 -14
  229. package/test/declarative/fixtures/extensions/attribute-map/fast-build.config.json +0 -6
  230. package/test/declarative/fixtures/extensions/attribute-map/index.html +0 -31
  231. package/test/declarative/fixtures/extensions/attribute-map/main.ts +0 -40
  232. package/test/declarative/fixtures/extensions/attribute-map/state.json +0 -4
  233. package/test/declarative/fixtures/extensions/attribute-map/templates.html +0 -14
  234. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/entry.html +0 -12
  235. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/fast-build.config.json +0 -7
  236. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/index.html +0 -25
  237. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/main.ts +0 -31
  238. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/state.json +0 -5
  239. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/templates.html +0 -11
  240. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/entry.html +0 -13
  241. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/fast-build.config.json +0 -7
  242. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/index.html +0 -23
  243. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/main.ts +0 -37
  244. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/state.json +0 -1
  245. package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/templates.html +0 -9
  246. package/test/declarative/fixtures/extensions/observer-map/entry.html +0 -15
  247. package/test/declarative/fixtures/extensions/observer-map/fast-build.config.json +0 -6
  248. package/test/declarative/fixtures/extensions/observer-map/index.html +0 -442
  249. package/test/declarative/fixtures/extensions/observer-map/main.ts +0 -482
  250. package/test/declarative/fixtures/extensions/observer-map/state.json +0 -158
  251. package/test/declarative/fixtures/extensions/observer-map/templates.html +0 -172
  252. package/test/declarative/fixtures/extensions/observer-map-config-object/entry.html +0 -16
  253. package/test/declarative/fixtures/extensions/observer-map-config-object/fast-build.config.json +0 -6
  254. package/test/declarative/fixtures/extensions/observer-map-config-object/index.html +0 -27
  255. package/test/declarative/fixtures/extensions/observer-map-config-object/main.ts +0 -53
  256. package/test/declarative/fixtures/extensions/observer-map-config-object/state.json +0 -9
  257. package/test/declarative/fixtures/extensions/observer-map-config-object/templates.html +0 -12
  258. package/test/declarative/fixtures/extensions/observer-map-deep-merge/README.md +0 -98
  259. package/test/declarative/fixtures/extensions/observer-map-deep-merge/entry.html +0 -156
  260. package/test/declarative/fixtures/extensions/observer-map-deep-merge/fast-build.config.json +0 -6
  261. package/test/declarative/fixtures/extensions/observer-map-deep-merge/index.html +0 -376
  262. package/test/declarative/fixtures/extensions/observer-map-deep-merge/main.ts +0 -366
  263. package/test/declarative/fixtures/extensions/observer-map-deep-merge/state.json +0 -69
  264. package/test/declarative/fixtures/extensions/observer-map-deep-merge/templates.html +0 -91
  265. package/test/declarative/fixtures/extensions/observer-map-properties/entry.html +0 -14
  266. package/test/declarative/fixtures/extensions/observer-map-properties/fast-build.config.json +0 -6
  267. package/test/declarative/fixtures/extensions/observer-map-properties/index.html +0 -110
  268. package/test/declarative/fixtures/extensions/observer-map-properties/main.ts +0 -175
  269. package/test/declarative/fixtures/extensions/observer-map-properties/state.json +0 -29
  270. package/test/declarative/fixtures/extensions/observer-map-properties/templates.html +0 -55
  271. package/test/declarative/fixtures/scenarios/README.md +0 -7
  272. package/test/declarative/fixtures/scenarios/nested-elements/entry.html +0 -16
  273. package/test/declarative/fixtures/scenarios/nested-elements/fast-build.config.json +0 -6
  274. package/test/declarative/fixtures/scenarios/nested-elements/index.html +0 -126
  275. package/test/declarative/fixtures/scenarios/nested-elements/main.ts +0 -214
  276. package/test/declarative/fixtures/scenarios/nested-elements/state.json +0 -10
  277. package/test/declarative/fixtures/scenarios/nested-elements/templates.html +0 -54
  278. package/test/declarative/index.html +0 -12
  279. package/test/declarative/vite.config.ts +0 -55
  280. package/test/declarative-main.ts +0 -6
  281. package/test/extension-subpaths-main.ts +0 -9
  282. package/test/index.html +0 -11
  283. package/test/main.ts +0 -109
  284. package/test/pure-declarative-main.ts +0 -1
  285. package/test/vite.config.ts +0 -19
  286. package/tsconfig.api-extractor.json +0 -6
package/MIGRATION.md DELETED
@@ -1,387 +0,0 @@
1
- # Migrating from previous versions
2
-
3
- ## FASTGlobal version tracking (v2 → v3)
4
-
5
- ### Removed API
6
-
7
- | Removed | Replacement |
8
- |---|---|
9
- | `FAST.versions` | No replacement. Multiple FAST versions on the same page are unsupported in v3. |
10
-
11
- ### Removed configuration
12
-
13
- | Removed | Replacement |
14
- |---|---|
15
- | `fast-kernel="share"` / `fast-kernel="share-v2"` / `fast-kernel="isolate"` | No replacement. FAST now uses a single shared kernel contract, and multiple FAST versions on the same page are unsupported. |
16
-
17
- ### Migration steps
18
-
19
- 1. Remove any runtime checks that read `FAST.versions`.
20
- 2. Fix duplicate FAST installs in your bundler or dependency graph instead of relying on version tracking at runtime.
21
- 3. Remove any `fast-kernel` script attributes. They no longer affect FAST initialization.
22
-
23
- ## Native `globalThis` requirement (v2 → v3)
24
-
25
- ### Changed behavior
26
-
27
- - **Native `globalThis` required**: `@microsoft/fast-element` no longer installs
28
- a `globalThis` polyfill as a side effect. The package only keeps the
29
- `requestIdleCallback` / `cancelIdleCallback` fallback for environments that
30
- still lack those APIs.
31
-
32
- ### Migration steps
33
-
34
- 1. Verify that the browsers and JS runtimes you support provide native
35
- `globalThis`.
36
- 2. If you still target an older runtime without `globalThis`, load that
37
- polyfill before importing `@microsoft/fast-element`.
38
-
39
- ## Declarative HTML moved into fast-element (v3)
40
-
41
- Declarative HTML APIs now ship from `@microsoft/fast-element` instead of the
42
- removed `@microsoft/fast-html` package.
43
-
44
- ### Import changes
45
-
46
- | Before | After |
47
- |---|---|
48
- | `@microsoft/fast-html` | `@microsoft/fast-element` |
49
- | `@microsoft/fast-html/utilities.js` | `@microsoft/fast-element` |
50
-
51
- Core FAST Element helpers are available from the root package export:
52
-
53
- | API | Import path |
54
- |---|---|
55
- | `Updates` | `@microsoft/fast-element` |
56
- | `Observable`, `observable` | `@microsoft/fast-element` |
57
- | `attr`, `AttributeDefinition`, converters, `ValueConverter` | `@microsoft/fast-element` |
58
- | `Binding`, `oneWay`, `oneTime`, `listener` | `@microsoft/fast-element` |
59
- | `DOM`, `DOMAspect`, `DOMPolicy` | `@microsoft/fast-element` |
60
- | `Schema`, `schemaRegistry`, schema types | `@microsoft/fast-element` |
61
- | `css` | `@microsoft/fast-element` |
62
- | `html`, `ViewTemplate`, `HTMLView` | `@microsoft/fast-element` |
63
- | `Compiler`, `HTMLDirective`, `htmlDirective`, templating/view types | `@microsoft/fast-element` |
64
- | `render`, `RenderBehavior`, `RenderDirective` | `@microsoft/fast-element` |
65
- | `enableHydration`, `HydrationTracker`, hydration types | `@microsoft/fast-element/hydration.js` |
66
- | `ArrayObserver` | `@microsoft/fast-element` |
67
- | `volatile` | `@microsoft/fast-element` |
68
- | `children` | `@microsoft/fast-element` |
69
- | `elements`, `NodeObservationDirective` | `@microsoft/fast-element` |
70
- | `ref` | `@microsoft/fast-element` |
71
- | `slotted` | `@microsoft/fast-element` |
72
- | `when` | `@microsoft/fast-element` |
73
- | `repeat` | `@microsoft/fast-element` |
74
-
75
- ### Migration steps
76
-
77
- 1. Update declarative runtime imports to
78
- `@microsoft/fast-element/declarative.js`.
79
- 2. Update declarative utility imports such as `deepMerge` to
80
- `@microsoft/fast-element/declarative-utilities.js`.
81
- 3. Keep importing FAST Element APIs such as `FASTElement`, `FAST`,
82
- `ElementController`, definition/controller types, `attr`, `Schema`, and
83
- `observable` from `@microsoft/fast-element`.
84
- 4. Call `enableHydration()` from `@microsoft/fast-element/hydration.js` when
85
- prerendered content should be hydrated.
86
-
87
- ## `TemplateOptions` removal (v3)
88
-
89
- ### Removed APIs
90
-
91
- | Removed | Replacement |
92
- |---|---|
93
- | `TemplateOptions` | No replacement |
94
- | `PartialFASTElementDefinition.templateOptions` | No replacement |
95
- | `FASTElementDefinition.templateOptions` | No replacement |
96
-
97
- ### Changed behavior
98
-
99
- - `FASTElement.define()` no longer uses `templateOptions` to delay platform
100
- definition or connection.
101
- - Elements can still be defined before a template is attached; a later
102
- `FASTElementDefinition.template` update notifies connected elements so they
103
- can render or hydrate with the new template.
104
-
105
- ### Migration steps
106
-
107
- 1. Remove `templateOptions` from element definitions.
108
- 2. Continue calling `define({ name })` when a definition needs to exist before
109
- its template is attached.
110
- 3. If a template is supplied later, assign `FASTElementDefinition.template` (or
111
- use the declarative runtime that does so for you).
112
-
113
-
114
- ## Declarative TemplateElement API removal (v3)
115
-
116
- ### Removed APIs
117
-
118
- | Removed | Replacement |
119
- |---|---|
120
- | `TemplateElement` public export | `declarativeTemplate()` on each FAST element definition |
121
- | `TemplateElement.define({ name: "f-template" })` | No manual definition; `declarativeTemplate()` defines FAST's internal `<f-template>` publisher in the target registry |
122
- | `TemplateElement.config(callbacks)` / `HydrationLifecycleCallbacks` | Per-element callbacks via `declarativeTemplate(callbacks)` and global callbacks via `enableHydration(options)` |
123
- | `TemplateElement.options(...)`, `ElementOptions`, `ElementOptionsDictionary` | Define extensions: `attributeMap(...)` and `observerMap(...)` passed as the second argument to `define()` |
124
- | `AttributeMap` / `ObserverMap` exports from the old declarative public surface | `attributeMap()` / `observerMap()` extension helpers and their config types |
125
-
126
- ### Migration steps
127
-
128
- 1. Replace manual `<f-template>` registration with `template: declarativeTemplate()`:
129
-
130
- ```typescript
131
- // Before
132
- import { TemplateElement } from "@microsoft/fast-element";
133
- TemplateElement.define({ name: "f-template" });
134
-
135
- MyElement.define({ name: "my-element" });
136
-
137
- // After
138
- import { declarativeTemplate } from "@microsoft/fast-element/declarative.js";
139
-
140
- MyElement.define({
141
- name: "my-element",
142
- template: declarativeTemplate(),
143
- });
144
- ```
145
-
146
- 2. Replace `TemplateElement.options()` with definition extensions:
147
-
148
- ```typescript
149
- import { attributeMap } from "@microsoft/fast-element/attribute-map.js";
150
- import { declarativeTemplate } from "@microsoft/fast-element/declarative.js";
151
- import { observerMap } from "@microsoft/fast-element/observer-map.js";
152
-
153
- MyElement.define(
154
- {
155
- name: "my-element",
156
- template: declarativeTemplate(),
157
- },
158
- [attributeMap(), observerMap()],
159
- );
160
- ```
161
-
162
- `attributeMap()` is imported from
163
- `@microsoft/fast-element/attribute-map.js` and `observerMap()` from
164
- `@microsoft/fast-element/observer-map.js` for declarative templates,
165
- manually supplied schemas, or both. `FASTElementDefinition.schema` is optional;
166
- `declarativeTemplate()` assigns it automatically, and `observerMap()` can
167
- take a manual schema with `observerMap({ schema })`.
168
-
169
- 3. Replace `TemplateElement.config()` with `declarativeTemplate(callbacks)` for
170
- per-element callbacks and `enableHydration(options)` for global hydration
171
- callbacks. Hydration is not installed by `declarative.js`; call
172
- `enableHydration()` before elements connect when SSR content should hydrate.
173
-
174
- ## Debug entrypoint explicit enablement (v3)
175
-
176
- ### Import changes
177
-
178
- | Before | After |
179
- |---|---|
180
- | `import "@microsoft/fast-element";` | `import { enableDebug } from "@microsoft/fast-element/debug.js"; enableDebug();` |
181
-
182
- ### Migration steps
183
-
184
- 1. Replace setup-only `debug.js` imports with an explicit `enableDebug()` call.
185
- 2. Keep using the root package `development` export or debug rollup bundle when
186
- you want debug behavior enabled automatically.
187
-
188
- ## Declarative event handler `e` removal (v3)
189
-
190
- ### Removed behavior
191
-
192
- | Removed | Replacement |
193
- |---|---|
194
- | Bare `e` event arguments in declarative event handlers | `$e` |
195
- | `TemplateParser.hasDeprecatedEventSyntax` | No replacement |
196
-
197
- Only `$e` and `$c` are reserved event handler arguments in declarative
198
- templates. Bare `e` now resolves like any other binding path on the current
199
- data source.
200
-
201
- ### Migration steps
202
-
203
- 1. Replace declarative event bindings such as
204
- `@click="{handleClick(e)}"` with `@click="{handleClick($e)}"`.
205
- 2. Remove any `TemplateParser.hasDeprecatedEventSyntax` checks or warnings from
206
- custom tooling.
207
-
208
- ## Prerendered Content Optimization (v2 → v3)
209
-
210
- ### Removed exports
211
-
212
- | Export | Replacement |
213
- |---|---|
214
- | `HydratableElementController` | `ElementController` (prerendered path built in) |
215
- | `HydrationControllerCallbacks` | `ElementHydrationCallbacks` via `ElementController.configHydration()` |
216
- | `needsHydrationAttribute` | `ElementController.isPrerendered` |
217
- | `deferHydrationAttribute` | Template-pending guard in `ElementController.connect()` |
218
-
219
- ### Removed side-effect imports
220
-
221
- | Import | Replacement |
222
- |---|---|
223
- | `@microsoft/fast-element/install-hydration.js` | No replacement needed — prerendered path is built into `ElementController` |
224
-
225
- Use `enableHydration()` from `@microsoft/fast-element/hydration.js` when SSR
226
- content should hydrate. The declarative entrypoint no longer installs hydration
227
- automatically.
228
-
229
- ### Changed behavior
230
-
231
- - **`attributeChangedCallback` during upgrade**: When `isPrerendered` is true and the element has not yet connected, attribute change callbacks are suppressed. After connection, all attribute changes are processed normally.
232
- - **Declarative template resolution**: `declarativeTemplate()` waits for the
233
- matching `<f-template>` before `define()` completes, so connected elements
234
- hydrate with a concrete template. No `defer-hydration` attribute is needed.
235
- - **Binding evaluation with existing shadow root**: When an existing shadow root is detected, `attribute` and `booleanAttribute` bindings skip their initial DOM update. All other binding types (event, content, property, tokenList) run normally.
236
-
237
- ### New APIs
238
-
239
- - **`ElementController.isPrerendered`** (`Promise<boolean>`): Resolves to `true` after prerendered content has been hydrated, or `false` when the component is client-side rendered. Component authors can await this to know when the element is fully interactive.
240
- - **`ViewController.isPrerendered`** (`Promise<boolean> | undefined`): Available to custom directives. Resolves to `true` when the view's content was prerendered, `false` otherwise.
241
-
242
- ### Migration steps
243
-
244
- 1. Remove `HydratableElementController.install()` calls.
245
- 2. Remove `import "@microsoft/fast-element/install-hydration.js"` side-effect imports.
246
- 3. Replace `element.$fastController instanceof HydratableElementController` checks with `await element.$fastController.isPrerendered`.
247
- 4. Remove `defer-hydration` and `needs-hydration` attributes from server-rendered markup.
248
-
249
- ## Hydration Marker Format (v3)
250
-
251
- ### Changed format
252
-
253
- The hydration markers embedded in SSR output have been simplified from verbose, index-embedded comment markers to compact, data-free sequential markers.
254
-
255
- #### Comment markers
256
-
257
- | Marker type | Old format | New format |
258
- |---|---|---|
259
- | Content binding start | `<!-- fe-b$$start$$<index>$$<scopeId>$$fe-b -->` | `<!--fe:b-->` |
260
- | Content binding end | `<!-- fe-b$$end$$<index>$$<scopeId>$$fe-b -->` | `<!--fe:/b-->` |
261
- | Repeat item start | `<!-- fe-repeat$$start$$<itemIndex>$$fe-repeat -->` | `<!--fe:r-->` |
262
- | Repeat item end | `<!-- fe-repeat$$end$$<itemIndex>$$fe-repeat -->` | `<!--fe:/r-->` |
263
- | Element boundary start | `<!-- fe-eb$$start$$<elementId>$$fe-eb -->` | `<!--fe:e-->` |
264
- | Element boundary end | `<!-- fe-eb$$end$$<elementId>$$fe-eb -->` | `<!--fe:/e-->` |
265
-
266
- #### Attribute binding markers
267
-
268
- | Old format | New format |
269
- |---|---|
270
- | `data-fe-b="0 1 2"` (space-separated indices) | `data-fe="N"` (binding count) |
271
- | `data-fe-b-0` (enumerated, one per factory) | `data-fe="N"` |
272
- | `data-fe-c-0-3` (compact, start index + count) | `data-fe="N"` |
273
-
274
- ### Removed APIs
275
-
276
- | Export | Replacement |
277
- |---|---|
278
- | `HydrationMarkup.contentBindingStartMarker(index, scopeId)` | `HydrationMarkup.contentBindingStartMarker()` |
279
- | `HydrationMarkup.contentBindingEndMarker(index, scopeId)` | `HydrationMarkup.contentBindingEndMarker()` |
280
- | `HydrationMarkup.isContentBindingStartMarker(data)` | `HydrationMarkup.isContentBindingStartMarker(data)` (unchanged signature, new implementation) |
281
- | `HydrationMarkup.isContentBindingEndMarker(data)` | `HydrationMarkup.isContentBindingEndMarker(data)` (unchanged signature, new implementation) |
282
- | `HydrationMarkup.parseAttributeBinding(element)` | `HydrationMarkup.parseAttributeBindingCount(element)` |
283
- | `HydrationMarkup.parseRepeatStartMarker(data)` | `HydrationMarkup.isRepeatViewStartMarker(data)` |
284
- | `HydrationMarkup.parseRepeatEndMarker(data)` | `HydrationMarkup.isRepeatViewEndMarker(data)` |
285
- | `HydrationMarkup.parseElementBoundaryStartMarker(content)` | `HydrationMarkup.isElementBoundaryStartMarker(node)` |
286
- | `HydrationMarkup.parseElementBoundaryEndMarker(content)` | `HydrationMarkup.isElementBoundaryEndMarker(node)` |
287
-
288
- ### Impact
289
-
290
- This is a **breaking change** for SSR output format. Any system that produces or parses hydration markers must be updated to use the new format. The `@microsoft/fast-build` Rust crate and WASM binary have been updated accordingly.
291
-
292
- - Marker parsing uses string equality checks (`data === "fe:b"`) instead of regex
293
- - Start/end pairing uses balanced depth counting instead of embedded IDs
294
- - The hydration walker uses a sequential factory pointer instead of index-based lookup
295
- - SSR and client versions must match — mixing old SSR output with new client code (or vice versa) will fail
296
-
297
- ## Async define/compose/register API (v3)
298
-
299
- ### Removed APIs
300
-
301
- | Removed | Replacement |
302
- |---|---|
303
- | `FASTElement.defineAsync()` | `FASTElement.define()` (now returns `Promise<TType>`) |
304
- | `FASTElementDefinition.composeAsync()` | `FASTElementDefinition.compose()` (now returns `Promise<FASTElementDefinition>`) |
305
- | `FASTElementDefinition.registerAsync()` | `FASTElementDefinition.register()` (same `Promise<Function>` return type) |
306
-
307
- ### Changed behavior
308
-
309
- - **`FASTElement.define()`** now returns `Promise<TType>`. When a concrete
310
- template is provided at definition time, the Promise resolves immediately.
311
- When `template: declarativeTemplate()` is used, the Promise resolves after
312
- the matching `<f-template>` supplies the concrete template.
313
- - **`FASTElement.compose()`** now returns `Promise<FASTElementDefinition>`. The Promise always resolves immediately.
314
- - **`FASTElementDefinition.compose()`** now returns `Promise<FASTElementDefinition>`. The Promise always resolves immediately.
315
- - **`@customElement` decorator** calls `define()` internally but does not return the Promise (fire-and-forget). For complete definitions with a template, the element is registered via a microtask.
316
-
317
- ### Migration steps
318
-
319
- 1. Replace `defineAsync()` calls with `define()`:
320
-
321
- ```typescript
322
- // Before
323
- MyElement.defineAsync({
324
- name: "my-element",
325
- templateOptions: "defer-and-hydrate",
326
- });
327
-
328
- // After
329
- await MyElement.define({
330
- name: "my-element",
331
- template: declarativeTemplate(),
332
- });
333
- ```
334
-
335
- 2. Replace `composeAsync()` calls with `compose()` and add `await`:
336
-
337
- ```typescript
338
- // Before
339
- const def = await FASTElementDefinition.composeAsync(MyElement, name);
340
-
341
- // After
342
- const def = await FASTElementDefinition.compose(MyElement, name);
343
- ```
344
-
345
- 3. Replace `registerAsync()` calls with `register()`:
346
-
347
- ```typescript
348
- // Before
349
- const el = await FASTElementDefinition.registerAsync(name);
350
-
351
- // After
352
- const el = await FASTElementDefinition.register(name);
353
- ```
354
-
355
- 4. Add `await` to `compose()` calls that chain `.define()`:
356
-
357
- ```typescript
358
- // Before
359
- FASTElementDefinition.compose(MyElement, options).define();
360
-
361
- // After
362
- (await FASTElementDefinition.compose(MyElement, options)).define();
363
- ```
364
-
365
- ## Dynamic stylesheet behaviors (v3)
366
-
367
- ### Removed API
368
-
369
- | Removed | Replacement |
370
- |---|---|
371
- | `ElementStyles.withBehaviors()` | Move the runtime condition into the element and call `this.$fastController.addStyles()` / `this.$fastController.removeStyles()` directly. |
372
- | `ElementStyles.behaviors` | Move any runtime behavior out of the stylesheet and into the element or controller lifecycle. |
373
- | CSS bindings in `css` (for example ``css`color: ${x => x.color}```) | Move the dynamic value into the element and update classes, attributes, or inline styles from element code. |
374
- | `CSSDirective.createCSS(add)` | Update directives to implement `createCSS()` and return only static CSS content. |
375
-
376
- ### Changed behavior
377
-
378
- - `css` and `css.partial()` no longer compose `HostBehavior`s.
379
- - `css` no longer accepts function or `Binding` interpolations.
380
- - `ElementStyles` is now a fully static style container.
381
-
382
- ### Migration steps
383
-
384
- 1. Keep the conditional `ElementStyles` in a separate `css` value.
385
- 2. Move the external listener or condition (for example `matchMedia()` or an app event subscription) into the element lifecycle.
386
- 3. Call `this.$fastController.addStyles(styles)` when the condition is active and `this.$fastController.removeStyles(styles)` when it is inactive or during cleanup.
387
- 4. If you previously interpolated bindings or behavior-producing directives into `css`, replace them with element state and standard DOM or controller updates.
package/SIZES.md DELETED
@@ -1,25 +0,0 @@
1
- # Export Sizes
2
-
3
- Bundle sizes for `@microsoft/fast-element` exports.
4
-
5
- | Export | Minified | Gzip | Brotli |
6
- |--------|----------|------|--------|
7
- | CDN Rollup Bundle | 76.36 KB | 22.91 KB | 20.32 KB |
8
- | FASTElement (@microsoft/fast-element/fast-element.js) | 23.73 KB | 7.38 KB | 6.63 KB |
9
- | Updates (@microsoft/fast-element/updates.js) | 473 B | 335 B | 288 B |
10
- | Observable (@microsoft/fast-element/observable.js) | 6.70 KB | 2.50 KB | 2.22 KB |
11
- | observable (@microsoft/fast-element/observable.js) | 6.74 KB | 2.51 KB | 2.23 KB |
12
- | attr (@microsoft/fast-element/attr.js) | 477 B | 288 B | 244 B |
13
- | children (@microsoft/fast-element/children.js) | 4.81 KB | 1.86 KB | 1.64 KB |
14
- | ref (@microsoft/fast-element/ref.js) | 3.78 KB | 1.52 KB | 1.34 KB |
15
- | slotted (@microsoft/fast-element/slotted.js) | 4.60 KB | 1.79 KB | 1.58 KB |
16
- | volatile (@microsoft/fast-element/volatile.js) | 6.79 KB | 2.53 KB | 2.25 KB |
17
- | when (@microsoft/fast-element/when.js) | 1.82 KB | 712 B | 565 B |
18
- | html (@microsoft/fast-element/html.js) | 25.92 KB | 8.50 KB | 7.61 KB |
19
- | repeat (@microsoft/fast-element/repeat.js) | 29.57 KB | 9.41 KB | 8.47 KB |
20
- | css (@microsoft/fast-element/css.js) | 2.43 KB | 1.00 KB | 911 B |
21
- | enableHydration (@microsoft/fast-element/hydration.js) | 43.27 KB | 13.22 KB | 11.89 KB |
22
- | declarativeTemplate (@microsoft/fast-element/declarative.js) | 58.77 KB | 18.46 KB | 16.46 KB |
23
- | ArrayObserver (@microsoft/fast-element/array-observer.js) | 12.51 KB | 4.45 KB | 4.01 KB |
24
- | observerMap (@microsoft/fast-element/observer-map.js) | 20.41 KB | 7.26 KB | 6.52 KB |
25
- | attributeMap (@microsoft/fast-element/attribute-map.js) | 15.78 KB | 5.59 KB | 5.04 KB |
@@ -1,15 +0,0 @@
1
- {
2
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "../../api-extractor.json",
4
- "mainEntryPointFilePath": "./dist/dts/arrays.d.ts",
5
- "dtsRollup": { "enabled": false },
6
- "apiReport": {
7
- "enabled": true,
8
- "reportFolder": "<projectFolder>/docs/arrays",
9
- "reportFileName": "api-report"
10
- },
11
- "docModel": {
12
- "enabled": true,
13
- "apiJsonFilePath": "<projectFolder>/dist/arrays/arrays.api.json"
14
- }
15
- }
@@ -1,15 +0,0 @@
1
- {
2
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "../../api-extractor.json",
4
- "mainEntryPointFilePath": "./dist/dts/context.d.ts",
5
- "dtsRollup": { "enabled": false },
6
- "apiReport": {
7
- "enabled": true,
8
- "reportFolder": "<projectFolder>/docs/context",
9
- "reportFileName": "api-report"
10
- },
11
- "docModel": {
12
- "enabled": true,
13
- "apiJsonFilePath": "<projectFolder>/dist/context/context.api.json"
14
- }
15
- }
@@ -1,15 +0,0 @@
1
- {
2
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "../../api-extractor.json",
4
- "mainEntryPointFilePath": "./dist/dts/declarative/index.d.ts",
5
- "dtsRollup": { "enabled": false },
6
- "apiReport": {
7
- "enabled": true,
8
- "reportFolder": "<projectFolder>/docs/declarative",
9
- "reportFileName": "api-report"
10
- },
11
- "docModel": {
12
- "enabled": true,
13
- "apiJsonFilePath": "<projectFolder>/dist/declarative/declarative.api.json"
14
- }
15
- }
@@ -1,15 +0,0 @@
1
- {
2
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "../../api-extractor.json",
4
- "mainEntryPointFilePath": "./dist/dts/di/di.d.ts",
5
- "dtsRollup": { "enabled": false },
6
- "apiReport": {
7
- "enabled": true,
8
- "reportFolder": "<projectFolder>/docs/di",
9
- "reportFileName": "api-report"
10
- },
11
- "docModel": {
12
- "enabled": true,
13
- "apiJsonFilePath": "<projectFolder>/dist/di/di.api.json"
14
- }
15
- }
@@ -1,15 +0,0 @@
1
- {
2
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "../../api-extractor.json",
4
- "mainEntryPointFilePath": "./dist/dts/hydration.d.ts",
5
- "dtsRollup": { "enabled": false },
6
- "apiReport": {
7
- "enabled": true,
8
- "reportFolder": "<projectFolder>/docs/hydration",
9
- "reportFileName": "api-report"
10
- },
11
- "docModel": {
12
- "enabled": true,
13
- "apiJsonFilePath": "<projectFolder>/dist/hydration/hydration.api.json"
14
- }
15
- }
@@ -1,15 +0,0 @@
1
- {
2
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "../../api-extractor.json",
4
- "mainEntryPointFilePath": "./dist/dts/styles.d.ts",
5
- "dtsRollup": { "enabled": false },
6
- "apiReport": {
7
- "enabled": true,
8
- "reportFolder": "<projectFolder>/docs/styles",
9
- "reportFileName": "api-report"
10
- },
11
- "docModel": {
12
- "enabled": true,
13
- "apiJsonFilePath": "<projectFolder>/dist/styles/styles.api.json"
14
- }
15
- }
package/biome.json DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "root": false,
3
- "extends": "//"
4
- }
@@ -1,12 +0,0 @@
1
- # Acknowledgements
2
-
3
- There are many great open source projects that have inspired us and enabled us to build FAST. Below are a few that stand out.
4
-
5
- * [.NET](https://dotnet.microsoft.com/) - Many thanks to the .NET team for sharing their policies and practices upon which our issue management and release planning docs and practices were based.
6
- * [asap](https://github.com/kriskowal/asap) - An awesome, time-tested async task queue implementation that heavily inspired our DOM update system.
7
- * [Aurelia 1 and Aurelia 2](https://aurelia.io/) - Various details of Aurelia 2's decorator and metadata model inspired us in the design of `fast-element`. Additionally, Aurelia 1's mechanisms for array observation, binding, and template compilation also guided us in our work.
8
- * [faastjs](https://github.com/faastjs) - A project with a similar name but a very different purpose. Their API documentation approach leveraging [api-extractor](https://api-extractor.com/) was a huge help to us.
9
- * [Knockout](https://knockoutjs.com/) - One of the first JavaScript libraries (if not the first) to implement an observer system. The original techniques for observables and computed observables have influenced many libraries over the years. Re-interpreting these ideas in terms of modern JavaScript and DOM has helped us to build a powerful and robust system.
10
- * [lit-html](https://lit-html.polymer-project.org/) - One of the first libraries to leverage standard JavaScript tagged template literals for HTML templates. We were inspired by this technique and wanted to explore whether it could be combined with our idea of arrow function binding expressions.
11
- * [Polymer](https://www.polymer-project.org/) - One of the first libraries (if not the first) to embrace Web Components.
12
- * [Vue](https://vuejs.org/) - We liked the terseness of the `:` and `@` syntax in templates, so we adapted it along with some modifications in our templates.