@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
@@ -1,376 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <title>Deep Merge Test Fixture</title>
6
- <style>
7
- body {
8
- font-family: system-ui, -apple-system, sans-serif;
9
- max-width: 1200px;
10
- margin: 0 auto;
11
- padding: 20px;
12
- background: #f5f5f5;
13
- }
14
-
15
- h1 {
16
- color: #333;
17
- border-bottom: 2px solid #0078d4;
18
- padding-bottom: 10px;
19
- }
20
-
21
- h2 {
22
- color: #555;
23
- margin-top: 30px;
24
- }
25
-
26
- .container {
27
- background: white;
28
- padding: 20px;
29
- border-radius: 8px;
30
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
31
- }
32
-
33
- .stats {
34
- background: #e3f2fd;
35
- padding: 15px;
36
- border-radius: 6px;
37
- margin: 20px 0;
38
- }
39
-
40
- .stats p {
41
- margin: 8px 0;
42
- }
43
-
44
- .controls {
45
- background: #f5f5f5;
46
- padding: 15px;
47
- border-radius: 6px;
48
- margin: 20px 0;
49
- }
50
-
51
- button {
52
- background: #0078d4;
53
- color: white;
54
- border: none;
55
- padding: 10px 16px;
56
- border-radius: 4px;
57
- cursor: pointer;
58
- margin: 5px;
59
- font-size: 14px;
60
- }
61
-
62
- button:hover {
63
- background: #106ebe;
64
- }
65
-
66
- button:active {
67
- background: #005a9e;
68
- }
69
-
70
- .user-card {
71
- border: 1px solid #ddd;
72
- border-radius: 6px;
73
- padding: 15px;
74
- margin: 15px 0;
75
- background: #fafafa;
76
- }
77
-
78
- .user-card h3 {
79
- margin-top: 0;
80
- color: #0078d4;
81
- }
82
-
83
- .profile {
84
- background: white;
85
- padding: 10px;
86
- border-radius: 4px;
87
- margin: 10px 0;
88
- }
89
-
90
- .profile h4 {
91
- margin-top: 0;
92
- }
93
-
94
- .orders {
95
- margin-top: 15px;
96
- }
97
-
98
- .order {
99
- background: white;
100
- padding: 10px;
101
- border-radius: 4px;
102
- margin: 10px 0;
103
- border-left: 3px solid #0078d4;
104
- }
105
-
106
- .items {
107
- list-style: none;
108
- padding: 0;
109
- margin: 10px 0;
110
- }
111
-
112
- .item {
113
- padding: 8px;
114
- margin: 5px 0;
115
- background: #f9f9f9;
116
- border-radius: 4px;
117
- }
118
-
119
- .stock {
120
- margin-left: 10px;
121
- font-size: 12px;
122
- }
123
-
124
- .tags {
125
- margin-top: 5px;
126
- font-size: 12px;
127
- }
128
-
129
- .tag {
130
- background: #0078d4;
131
- color: white;
132
- padding: 2px 8px;
133
- border-radius: 3px;
134
- margin-right: 5px;
135
- display: inline-block;
136
- }
137
-
138
- .metadata {
139
- margin-top: 5px;
140
- color: #666;
141
- }
142
-
143
- strong {
144
- color: #333;
145
- }
146
-
147
- em {
148
- color: #999;
149
- }
150
- </style>
151
- </head>
152
- <body>
153
- <deep-merge-test-element><template shadowrootmode="open" shadowroot="open"><div class="container">
154
- <h1>Deep Merge Test Fixture</h1>
155
-
156
- <!-- Stats Section with Deep Property Access -->
157
- <div class="stats">
158
- <h2>Statistics</h2>
159
- <p>Total Orders: <strong><!--fe:b-->3<!--fe:/b--></strong></p>
160
- <p>Total Revenue: <strong>$<!--fe:b-->425.5<!--fe:/b--></strong></p>
161
- <p>Active Users: <strong><!--fe:b-->2<!--fe:/b--></strong></p>
162
- <button data-fe="1">Update Stats</button>
163
- </div>
164
-
165
- <!-- Control Buttons -->
166
- <div class="controls">
167
- <h2>Test Actions</h2>
168
- <button data-fe="1">Update User Profile</button>
169
- <button data-fe="1">Replace Orders</button>
170
- <button data-fe="1">Remove Order Items</button>
171
- <button data-fe="1">Update Product Tags</button>
172
- <button data-fe="1">Add New User</button>
173
- <button data-fe="1">Toggle Details</button>
174
- <button data-fe="1">Increment Age</button>
175
- <button data-fe="1">Test Undefined Merge</button>
176
- </div>
177
-
178
- <!-- Users List with Conditional Rendering -->
179
- <div class="users">
180
- <h2>Users (<!--fe:b-->2<!--fe:/b--> total)</h2>
181
-
182
- <!--fe:b--><!--fe:r-->
183
- <div class="user-card">
184
- <h3><!--fe:b-->Alice Johnson<!--fe:/b--> (ID: <!--fe:b-->1<!--fe:/b-->)</h3>
185
- <p>Email: <!--fe:b-->alice@example.com<!--fe:/b--></p>
186
-
187
- <!-- Conditional Details Section -->
188
- <!--fe:b-->
189
- <div class="profile">
190
- <h4>Profile</h4>
191
- <p>Age: <!--fe:b-->28<!--fe:/b--></p>
192
- <p>Location: <!--fe:b-->New York<!--fe:/b-->, <!--fe:b-->USA<!--fe:/b--></p>
193
- <p>Theme: <!--fe:b-->dark<!--fe:/b--></p>
194
- <p>Notifications: <!--fe:b-->Enabled<!--fe:/b--><!--fe:b--><!--fe:/b--></p>
195
- </div>
196
- <!--fe:/b-->
197
-
198
- <!-- Orders Section with Nested Repeats -->
199
- <div class="orders">
200
- <h4>Orders (<!--fe:b-->1<!--fe:/b-->)</h4>
201
-
202
- <!--fe:b-->
203
- <!--fe:b--><!--fe:r-->
204
- <div class="order">
205
- <p><strong>Order #<!--fe:b-->101<!--fe:/b--></strong> - <!--fe:b-->2024-01-15<!--fe:/b--> - Total: $<!--fe:b-->150.5<!--fe:/b--></p>
206
-
207
- <!-- Items with Nested Array -->
208
- <ul class="items">
209
- <!--fe:b--><!--fe:r-->
210
- <li class="item">
211
- <strong><!--fe:b-->Laptop<!--fe:/b--></strong> - $<!--fe:b-->100<!--fe:/b-->
212
- <span class="stock"><!--fe:b-->✓ In Stock<!--fe:/b--><!--fe:b--><!--fe:/b--></span>
213
-
214
- <!-- Tags Array -->
215
- <div class="tags">
216
- Tags: <!--fe:b--><!--fe:r--><span class="tag"><!--fe:b-->electronics<!--fe:/b--></span><!--fe:/r--><!--fe:r--><span class="tag"><!--fe:b-->computers<!--fe:/b--></span><!--fe:/r--><!--fe:/b-->
217
- </div>
218
-
219
- <!-- Metadata -->
220
- <!--fe:b-->
221
- <div class="metadata">
222
- <small>Views: <!--fe:b-->250<!--fe:/b--> | Rating: <!--fe:b-->4.5<!--fe:/b--></small>
223
- </div>
224
- <!--fe:/b-->
225
- </li>
226
- <!--fe:/r--><!--fe:r-->
227
- <li class="item">
228
- <strong><!--fe:b-->Mouse<!--fe:/b--></strong> - $<!--fe:b-->50.5<!--fe:/b-->
229
- <span class="stock"><!--fe:b-->✓ In Stock<!--fe:/b--><!--fe:b--><!--fe:/b--></span>
230
-
231
- <!-- Tags Array -->
232
- <div class="tags">
233
- Tags: <!--fe:b--><!--fe:r--><span class="tag"><!--fe:b-->electronics<!--fe:/b--></span><!--fe:/r--><!--fe:r--><span class="tag"><!--fe:b-->accessories<!--fe:/b--></span><!--fe:/r--><!--fe:/b-->
234
- </div>
235
-
236
- <!-- Metadata -->
237
- <!--fe:b-->
238
- <div class="metadata">
239
- <small>Views: <!--fe:b-->180<!--fe:/b--> | Rating: <!--fe:b-->4<!--fe:/b--></small>
240
- </div>
241
- <!--fe:/b-->
242
- </li>
243
- <!--fe:/r--><!--fe:/b-->
244
- </ul>
245
- </div>
246
- <!--fe:/r--><!--fe:/b-->
247
- <!--fe:/b-->
248
-
249
- <!--fe:b--><!--fe:/b-->
250
- </div>
251
- </div>
252
- <!--fe:/r--><!--fe:r-->
253
- <div class="user-card">
254
- <h3><!--fe:b-->Bob Smith<!--fe:/b--> (ID: <!--fe:b-->2<!--fe:/b-->)</h3>
255
- <p>Email: <!--fe:b-->bob@example.com<!--fe:/b--></p>
256
-
257
- <!-- Conditional Details Section -->
258
- <!--fe:b-->
259
- <div class="profile">
260
- <h4>Profile</h4>
261
- <p>Age: <!--fe:b-->35<!--fe:/b--></p>
262
- <p>Location: <!--fe:b-->London<!--fe:/b-->, <!--fe:b-->UK<!--fe:/b--></p>
263
- <p>Theme: <!--fe:b-->light<!--fe:/b--></p>
264
- <p>Notifications: <!--fe:b--><!--fe:/b--><!--fe:b-->Disabled<!--fe:/b--></p>
265
- </div>
266
- <!--fe:/b-->
267
-
268
- <!-- Orders Section with Nested Repeats -->
269
- <div class="orders">
270
- <h4>Orders (<!--fe:b-->0<!--fe:/b-->)</h4>
271
-
272
- <!--fe:b--><!--fe:/b-->
273
-
274
- <!--fe:b-->
275
- <p><em>No orders yet</em></p>
276
- <!--fe:/b-->
277
- </div>
278
- </div>
279
- <!--fe:/r--><!--fe:/b-->
280
- </div>
281
- </div></template></deep-merge-test-element>
282
- <f-template name="deep-merge-test-element">
283
- <template>
284
- <div class="container">
285
- <h1>Deep Merge Test Fixture</h1>
286
-
287
- <!-- Stats Section with Deep Property Access -->
288
- <div class="stats">
289
- <h2>Statistics</h2>
290
- <p>Total Orders: <strong>{{stats.totalOrders}}</strong></p>
291
- <p>Total Revenue: <strong>${{stats.totalRevenue}}</strong></p>
292
- <p>Active Users: <strong>{{stats.activeUsers}}</strong></p>
293
- <button @click="{updateStats()}">Update Stats</button>
294
- </div>
295
-
296
- <!-- Control Buttons -->
297
- <div class="controls">
298
- <h2>Test Actions</h2>
299
- <button @click="{updateUserProfile()}">Update User Profile</button>
300
- <button @click="{updateUserOrders()}">Replace Orders</button>
301
- <button @click="{removeOrderItems()}">Remove Order Items</button>
302
- <button @click="{updateProductTags()}">Update Product Tags</button>
303
- <button @click="{addNewUser()}">Add New User</button>
304
- <button @click="{toggleDetails()}">Toggle Details</button>
305
- <button @click="{incrementAge()}">Increment Age</button>
306
- <button @click="{testUndefinedMerge()}">Test Undefined Merge</button>
307
- </div>
308
-
309
- <!-- Users List with Conditional Rendering -->
310
- <div class="users">
311
- <h2>Users ({{users.length}} total)</h2>
312
-
313
- <f-repeat value="{{user in users}}">
314
- <div class="user-card">
315
- <h3>{{user.name}} (ID: {{user.id}})</h3>
316
- <p>Email: {{user.email}}</p>
317
-
318
- <!-- Conditional Details Section -->
319
- <f-when value="{{showDetails}}">
320
- <div class="profile">
321
- <h4>Profile</h4>
322
- <p>Age: {{user.profile.age}}</p>
323
- <p>Location: {{user.profile.location.city}}, {{user.profile.location.country}}</p>
324
- <p>Theme: {{user.profile.preferences.theme}}</p>
325
- <p>Notifications: <f-when value="{{user.profile.preferences.notifications}}">Enabled</f-when><f-when value="{{!user.profile.preferences.notifications}}">Disabled</f-when></p>
326
- </div>
327
- </f-when>
328
-
329
- <!-- Orders Section with Nested Repeats -->
330
- <div class="orders">
331
- <h4>Orders ({{user.orders.length}})</h4>
332
-
333
- <f-when value="{{user.orders.length > 0}}">
334
- <f-repeat value="{{order in user.orders}}">
335
- <div class="order">
336
- <p><strong>Order #{{order.id}}</strong> - {{order.date}} - Total: ${{order.total}}</p>
337
-
338
- <!-- Items with Nested Array -->
339
- <ul class="items">
340
- <f-repeat value="{{item in order.items}}">
341
- <li class="item">
342
- <strong>{{item.name}}</strong> - ${{item.price}}
343
- <span class="stock"><f-when value="{{item.inStock}}">✓ In Stock</f-when><f-when value="{{!item.inStock}}">✗ Out of Stock</f-when></span>
344
-
345
- <!-- Tags Array -->
346
- <div class="tags">
347
- Tags: <f-repeat value="{{tag in item.tags}}"><span class="tag">{{tag}}</span></f-repeat>
348
- </div>
349
-
350
- <!-- Metadata -->
351
- <f-when value="{{showDetails}}">
352
- <div class="metadata">
353
- <small>Views: {{item.metadata.views}} | Rating: {{item.metadata.rating}}</small>
354
- </div>
355
- </f-when>
356
- </li>
357
- </f-repeat>
358
- </ul>
359
- </div>
360
- </f-repeat>
361
- </f-when>
362
-
363
- <f-when value="{{user.orders.length == 0}}">
364
- <p><em>No orders yet</em></p>
365
- </f-when>
366
- </div>
367
- </div>
368
- </f-repeat>
369
- </div>
370
- </div>
371
- </template>
372
- </f-template>
373
-
374
- <script type="module" src="./main.ts"></script>
375
- </body>
376
- </html>