@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.
- package/ARCHITECTURE_HTML_TAGGED_TEMPLATE_LITERAL.md +1 -1
- package/ARCHITECTURE_OVERVIEW.md +2 -2
- package/CHANGELOG.json +1 -1
- package/CHANGELOG.md +2 -2
- package/DECLARATIVE_DESIGN.md +806 -0
- package/DECLARATIVE_HTML.md +470 -0
- package/DECLARATIVE_MIGRATION.md +215 -0
- package/DECLARATIVE_RENDERING.md +530 -0
- package/DECLARATIVE_RENDERING_LIFECYCLE.md +288 -0
- package/DECLARATIVE_SCHEMA_OBSERVER_MAP.md +489 -0
- package/DESIGN.md +138 -33
- package/MIGRATION.md +387 -0
- package/README.md +208 -1
- package/SIZES.md +25 -0
- package/api-extractor.arrays.json +15 -0
- package/api-extractor.context.json +1 -0
- package/api-extractor.declarative.json +15 -0
- package/api-extractor.di.json +1 -0
- package/api-extractor.hydration.json +15 -0
- package/api-extractor.styles.json +15 -0
- package/dist/arrays/arrays.api.json +2621 -0
- package/dist/declarative/declarative.api.json +7844 -0
- package/dist/di/di.api.json +1 -1
- package/dist/dts/array-observer.d.ts +2 -0
- package/dist/dts/arrays.d.ts +2 -0
- package/dist/dts/attr.d.ts +1 -0
- package/dist/dts/binding/signal.d.ts +6 -6
- package/dist/dts/binding/two-way.d.ts +1 -0
- package/dist/dts/binding.d.ts +7 -0
- package/dist/dts/components/attributes.d.ts +2 -5
- package/dist/dts/components/definition-schema-transforms.d.ts +9 -0
- package/dist/dts/components/element-controller.d.ts +80 -114
- package/dist/dts/components/element-hydration.d.ts +1 -1
- package/dist/dts/components/enable-hydration.d.ts +34 -0
- package/dist/dts/components/fast-definitions.d.ts +91 -42
- package/dist/dts/components/fast-element.d.ts +5 -8
- package/dist/dts/components/hydration-tracker.d.ts +40 -0
- package/dist/dts/components/hydration.d.ts +18 -53
- package/dist/dts/components/schema.d.ts +205 -0
- package/dist/dts/context.d.ts +6 -6
- package/dist/dts/css.d.ts +3 -0
- package/dist/dts/debug.d.ts +5 -1
- package/dist/dts/declarative/attribute-map.d.ts +58 -0
- package/dist/dts/declarative/debug.d.ts +5 -0
- package/dist/dts/declarative/index.d.ts +13 -0
- package/dist/dts/declarative/interfaces.d.ts +9 -0
- package/dist/dts/declarative/observer-map-utilities.d.ts +58 -0
- package/dist/dts/declarative/observer-map.d.ts +89 -0
- package/dist/dts/declarative/runtime.d.ts +5 -0
- package/dist/dts/declarative/syntax.d.ts +21 -0
- package/dist/dts/declarative/template-bridge.d.ts +33 -0
- package/dist/dts/declarative/template-parser.d.ts +98 -0
- package/dist/dts/declarative/template.d.ts +9 -0
- package/dist/dts/declarative/utilities.d.ts +312 -0
- package/dist/dts/di/di.d.ts +1 -1
- package/dist/dts/directives/children.d.ts +2 -0
- package/dist/dts/directives/node-observation.d.ts +2 -0
- package/dist/dts/directives/ref.d.ts +2 -0
- package/dist/dts/directives/repeat.d.ts +4 -0
- package/dist/dts/directives/slotted.d.ts +2 -0
- package/dist/dts/directives/when.d.ts +3 -0
- package/dist/dts/dom-policy.d.ts +1 -1
- package/dist/dts/html.d.ts +5 -0
- package/dist/dts/hydration/runtime.d.ts +7 -0
- package/dist/dts/hydration/target-builder.d.ts +15 -12
- package/dist/dts/hydration.d.ts +14 -0
- package/dist/dts/index.d.ts +38 -42
- package/dist/dts/index.debug.d.ts +0 -1
- package/dist/dts/index.rollup.debug.d.ts +0 -1
- package/dist/dts/interfaces.d.ts +1 -49
- package/dist/dts/observable.d.ts +3 -6
- package/dist/dts/observation/arrays.d.ts +1 -1
- package/dist/dts/observation/update-queue.d.ts +1 -1
- package/dist/dts/platform.d.ts +25 -4
- package/dist/dts/render.d.ts +7 -0
- package/dist/dts/schema.d.ts +1 -0
- package/dist/dts/state/exports.d.ts +1 -1
- package/dist/dts/state/state.d.ts +2 -2
- package/dist/dts/styles/css-directive.d.ts +5 -12
- package/dist/dts/styles/css.d.ts +5 -7
- package/dist/dts/styles/element-styles.d.ts +0 -10
- package/dist/dts/styles.d.ts +6 -0
- package/dist/dts/templating/children.d.ts +1 -1
- package/dist/dts/templating/html-binding-directive.d.ts +4 -0
- package/dist/dts/templating/html-directive.d.ts +17 -0
- package/dist/dts/templating/hydration-view.d.ts +109 -0
- package/dist/dts/templating/ref.d.ts +1 -1
- package/dist/dts/templating/render.d.ts +1 -1
- package/dist/dts/templating/repeat.d.ts +2 -2
- package/dist/dts/templating/slotted.d.ts +1 -1
- package/dist/dts/templating/template.d.ts +17 -9
- package/dist/dts/templating/view.d.ts +25 -102
- package/dist/dts/templating/when.d.ts +1 -1
- package/dist/dts/templating.d.ts +10 -0
- package/dist/dts/testing/exports.d.ts +2 -2
- package/dist/dts/updates.d.ts +1 -0
- package/dist/dts/volatile.d.ts +2 -0
- package/dist/esm/array-observer.js +1 -0
- package/dist/esm/arrays.js +1 -0
- package/dist/esm/attr.js +1 -0
- package/dist/esm/binding/normalize.js +1 -1
- package/dist/esm/binding/signal.js +4 -4
- package/dist/esm/binding/two-way.js +2 -1
- package/dist/esm/binding.js +4 -0
- package/dist/esm/components/attributes.js +8 -5
- package/dist/esm/components/definition-schema-transforms.js +23 -0
- package/dist/esm/components/element-controller.js +200 -269
- package/dist/esm/components/element-hydration.js +1 -1
- package/dist/esm/components/enable-hydration.js +100 -0
- package/dist/esm/components/fast-definitions.js +211 -49
- package/dist/esm/components/fast-element.js +18 -27
- package/dist/esm/components/hydration-tracker.js +93 -0
- package/dist/esm/components/hydration.js +62 -144
- package/dist/esm/components/schema.js +253 -0
- package/dist/esm/context.js +6 -6
- package/dist/esm/css.js +3 -0
- package/dist/esm/debug.js +26 -26
- package/dist/esm/declarative/attribute-map.js +121 -0
- package/dist/esm/declarative/debug.js +5 -0
- package/dist/esm/declarative/index.js +3 -0
- package/dist/esm/declarative/interfaces.js +10 -0
- package/dist/esm/declarative/observer-map-utilities.js +562 -0
- package/dist/esm/declarative/observer-map.js +216 -0
- package/dist/esm/declarative/runtime.js +14 -0
- package/dist/esm/declarative/syntax.js +36 -0
- package/dist/esm/declarative/template-bridge.js +170 -0
- package/dist/esm/declarative/template-parser.js +306 -0
- package/dist/esm/declarative/template.js +142 -0
- package/dist/esm/declarative/utilities.js +834 -0
- package/dist/esm/di/di.js +6 -8
- package/dist/esm/directives/children.js +1 -0
- package/dist/esm/directives/node-observation.js +1 -0
- package/dist/esm/directives/ref.js +1 -0
- package/dist/esm/directives/repeat.js +1 -0
- package/dist/esm/directives/slotted.js +1 -0
- package/dist/esm/directives/when.js +1 -0
- package/dist/esm/dom-policy.js +2 -2
- package/dist/esm/dom.js +1 -1
- package/dist/esm/html.js +2 -0
- package/dist/esm/hydration/runtime.js +33 -0
- package/dist/esm/hydration/target-builder.js +97 -90
- package/dist/esm/hydration.js +4 -0
- package/dist/esm/index.debug.js +2 -1
- package/dist/esm/index.js +34 -29
- package/dist/esm/index.rollup.debug.js +3 -2
- package/dist/esm/index.rollup.js +1 -1
- package/dist/esm/interfaces.js +1 -45
- package/dist/esm/observable.js +1 -4
- package/dist/esm/observation/arrays.js +1 -1
- package/dist/esm/observation/observable.js +5 -5
- package/dist/esm/observation/update-queue.js +47 -58
- package/dist/esm/platform.js +31 -30
- package/dist/esm/render.js +1 -0
- package/dist/esm/schema.js +1 -0
- package/dist/esm/state/exports.js +1 -1
- package/dist/esm/styles/css-directive.js +1 -2
- package/dist/esm/styles/css.js +15 -56
- package/dist/esm/styles/element-styles.js +69 -15
- package/dist/esm/styles.js +2 -0
- package/dist/esm/templating/html-binding-directive.js +10 -8
- package/dist/esm/templating/hydration-view.js +235 -0
- package/dist/esm/templating/render.js +1 -1
- package/dist/esm/templating/repeat.js +36 -34
- package/dist/esm/templating/template.js +7 -7
- package/dist/esm/templating/view.js +24 -233
- package/dist/esm/templating.js +7 -0
- package/dist/esm/testing/exports.js +2 -2
- package/dist/esm/updates.js +1 -0
- package/dist/esm/volatile.js +1 -0
- package/dist/fast-element.api.json +9016 -6995
- package/dist/fast-element.d.ts +3557 -796
- package/dist/fast-element.debug.js +5088 -4437
- package/dist/fast-element.debug.min.js +2 -2
- package/dist/fast-element.js +5369 -4649
- package/dist/fast-element.min.js +2 -2
- package/dist/fast-element.untrimmed.d.ts +863 -475
- package/dist/hydration/hydration.api.json +5237 -0
- package/dist/styles/styles.api.json +2672 -0
- package/docs/api-report.api.md +343 -166
- package/docs/arrays/api-report.api.md +114 -0
- package/docs/declarative/api-report.api.md +397 -0
- package/docs/hydration/api-report.api.md +285 -0
- package/docs/styles/api-report.api.md +135 -0
- package/package.json +149 -41
- package/playwright.declarative.config.ts +26 -0
- package/playwright.declarative.webui.config.ts +20 -0
- package/scripts/declarative/build-fixtures-with-webui.js +135 -0
- package/scripts/declarative/build-fixtures.js +49 -0
- package/scripts/declarative/build-fixtures.utilities.js +101 -0
- package/scripts/measure-sizes.js +219 -0
- package/scripts/run-api-extractor.js +39 -20
- package/test/declarative/fixtures/README.md +72 -0
- package/test/declarative/fixtures/WRITING_FIXTURES.md +330 -0
- package/test/declarative/fixtures/bindings/README.md +12 -0
- package/test/declarative/fixtures/bindings/attribute/entry.html +13 -0
- package/test/declarative/fixtures/bindings/attribute/fast-build.config.json +6 -0
- package/test/declarative/fixtures/bindings/attribute/index.html +25 -0
- package/test/declarative/fixtures/bindings/attribute/main.ts +41 -0
- package/test/declarative/fixtures/bindings/attribute/state.json +8 -0
- package/test/declarative/fixtures/bindings/attribute/templates.html +11 -0
- package/test/declarative/fixtures/bindings/content/entry.html +12 -0
- package/test/declarative/fixtures/bindings/content/fast-build.config.json +6 -0
- package/test/declarative/fixtures/bindings/content/index.html +19 -0
- package/test/declarative/fixtures/bindings/content/main.ts +27 -0
- package/test/declarative/fixtures/bindings/content/state.json +4 -0
- package/test/declarative/fixtures/bindings/content/templates.html +6 -0
- package/test/declarative/fixtures/bindings/dot-syntax/entry.html +11 -0
- package/test/declarative/fixtures/bindings/dot-syntax/fast-build.config.json +6 -0
- package/test/declarative/fixtures/bindings/dot-syntax/index.html +47 -0
- package/test/declarative/fixtures/bindings/dot-syntax/main.ts +59 -0
- package/test/declarative/fixtures/bindings/dot-syntax/state.json +16 -0
- package/test/declarative/fixtures/bindings/dot-syntax/templates.html +17 -0
- package/test/declarative/fixtures/bindings/event/entry.html +11 -0
- package/test/declarative/fixtures/bindings/event/fast-build.config.json +6 -0
- package/test/declarative/fixtures/bindings/event/index.html +43 -0
- package/test/declarative/fixtures/bindings/event/main.ts +43 -0
- package/test/declarative/fixtures/bindings/event/state.json +3 -0
- package/test/declarative/fixtures/bindings/event/templates.html +18 -0
- package/test/declarative/fixtures/bindings/host/entry.html +40 -0
- package/test/declarative/fixtures/bindings/host/fast-build.config.json +6 -0
- package/test/declarative/fixtures/bindings/host/index.html +96 -0
- package/test/declarative/fixtures/bindings/host/main.ts +222 -0
- package/test/declarative/fixtures/bindings/host/state.json +9 -0
- package/test/declarative/fixtures/bindings/host/templates.html +55 -0
- package/test/declarative/fixtures/directives/README.md +12 -0
- package/test/declarative/fixtures/directives/children/entry.html +11 -0
- package/test/declarative/fixtures/directives/children/fast-build.config.json +6 -0
- package/test/declarative/fixtures/directives/children/index.html +15 -0
- package/test/declarative/fixtures/directives/children/main.ts +22 -0
- package/test/declarative/fixtures/directives/children/state.json +3 -0
- package/test/declarative/fixtures/directives/children/templates.html +3 -0
- package/test/declarative/fixtures/directives/ref/entry.html +11 -0
- package/test/declarative/fixtures/directives/ref/fast-build.config.json +6 -0
- package/test/declarative/fixtures/directives/ref/index.html +15 -0
- package/test/declarative/fixtures/directives/ref/main.ts +17 -0
- package/test/declarative/fixtures/directives/ref/state.json +1 -0
- package/test/declarative/fixtures/directives/ref/templates.html +3 -0
- package/test/declarative/fixtures/directives/repeat/entry.html +21 -0
- package/test/declarative/fixtures/directives/repeat/fast-build.config.json +6 -0
- package/test/declarative/fixtures/directives/repeat/index.html +133 -0
- package/test/declarative/fixtures/directives/repeat/main.ts +110 -0
- package/test/declarative/fixtures/directives/repeat/sprites.svg +8 -0
- package/test/declarative/fixtures/directives/repeat/state.json +10 -0
- package/test/declarative/fixtures/directives/repeat/templates.html +75 -0
- package/test/declarative/fixtures/directives/slotted/entry.html +17 -0
- package/test/declarative/fixtures/directives/slotted/fast-build.config.json +6 -0
- package/test/declarative/fixtures/directives/slotted/index.html +27 -0
- package/test/declarative/fixtures/directives/slotted/main.ts +29 -0
- package/test/declarative/fixtures/directives/slotted/state.json +1 -0
- package/test/declarative/fixtures/directives/slotted/templates.html +7 -0
- package/test/declarative/fixtures/directives/when/entry.html +51 -0
- package/test/declarative/fixtures/directives/when/fast-build.config.json +6 -0
- package/test/declarative/fixtures/directives/when/index.html +136 -0
- package/test/declarative/fixtures/directives/when/main.ts +172 -0
- package/test/declarative/fixtures/directives/when/state.json +12 -0
- package/test/declarative/fixtures/directives/when/templates.html +75 -0
- package/test/declarative/fixtures/ecosystem/README.md +11 -0
- package/test/declarative/fixtures/ecosystem/declarative-no-hydration/entry.html +12 -0
- package/test/declarative/fixtures/ecosystem/declarative-no-hydration/fast-build.config.json +6 -0
- package/test/declarative/fixtures/ecosystem/declarative-no-hydration/index.html +20 -0
- package/test/declarative/fixtures/ecosystem/declarative-no-hydration/main.ts +68 -0
- package/test/declarative/fixtures/ecosystem/declarative-no-hydration/state.json +4 -0
- package/test/declarative/fixtures/ecosystem/declarative-no-hydration/templates.html +7 -0
- package/test/declarative/fixtures/ecosystem/errors/entry.html +12 -0
- package/test/declarative/fixtures/ecosystem/errors/fast-build.config.json +6 -0
- package/test/declarative/fixtures/ecosystem/errors/index.html +20 -0
- package/test/declarative/fixtures/ecosystem/errors/main.ts +17 -0
- package/test/declarative/fixtures/ecosystem/errors/state.json +1 -0
- package/test/declarative/fixtures/ecosystem/errors/templates.html +7 -0
- package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/entry.html +17 -0
- package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/fast-build.config.json +6 -0
- package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/index.html +56 -0
- package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/main.ts +134 -0
- package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/state.json +12 -0
- package/test/declarative/fixtures/ecosystem/lifecycle-callbacks/templates.html +34 -0
- package/test/declarative/fixtures/ecosystem/performance-metrics/entry.html +25 -0
- package/test/declarative/fixtures/ecosystem/performance-metrics/fast-build.config.json +6 -0
- package/test/declarative/fixtures/ecosystem/performance-metrics/fast-card.css +10 -0
- package/test/declarative/fixtures/ecosystem/performance-metrics/index.html +181 -0
- package/test/declarative/fixtures/ecosystem/performance-metrics/main.ts +58 -0
- package/test/declarative/fixtures/ecosystem/performance-metrics/state.json +6 -0
- package/test/declarative/fixtures/ecosystem/performance-metrics/templates.html +15 -0
- package/test/declarative/fixtures/extensions/README.md +15 -0
- package/test/declarative/fixtures/extensions/attribute-map/entry.html +14 -0
- package/test/declarative/fixtures/extensions/attribute-map/fast-build.config.json +6 -0
- package/test/declarative/fixtures/extensions/attribute-map/index.html +31 -0
- package/test/declarative/fixtures/extensions/attribute-map/main.ts +40 -0
- package/test/declarative/fixtures/extensions/attribute-map/state.json +4 -0
- package/test/declarative/fixtures/extensions/attribute-map/templates.html +14 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/entry.html +12 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/fast-build.config.json +7 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/index.html +25 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/main.ts +31 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/state.json +5 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy/templates.html +11 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/entry.html +13 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/fast-build.config.json +7 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/index.html +23 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/main.ts +37 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/state.json +1 -0
- package/test/declarative/fixtures/extensions/attribute-map-naming-strategy-camel-case/templates.html +9 -0
- package/test/declarative/fixtures/extensions/observer-map/entry.html +15 -0
- package/test/declarative/fixtures/extensions/observer-map/fast-build.config.json +6 -0
- package/test/declarative/fixtures/extensions/observer-map/index.html +442 -0
- package/test/declarative/fixtures/extensions/observer-map/main.ts +482 -0
- package/test/declarative/fixtures/extensions/observer-map/state.json +158 -0
- package/test/declarative/fixtures/extensions/observer-map/templates.html +172 -0
- package/test/declarative/fixtures/extensions/observer-map-config-object/entry.html +16 -0
- package/test/declarative/fixtures/extensions/observer-map-config-object/fast-build.config.json +6 -0
- package/test/declarative/fixtures/extensions/observer-map-config-object/index.html +27 -0
- package/test/declarative/fixtures/extensions/observer-map-config-object/main.ts +53 -0
- package/test/declarative/fixtures/extensions/observer-map-config-object/state.json +9 -0
- package/test/declarative/fixtures/extensions/observer-map-config-object/templates.html +12 -0
- package/test/declarative/fixtures/extensions/observer-map-deep-merge/README.md +98 -0
- package/test/declarative/fixtures/extensions/observer-map-deep-merge/entry.html +156 -0
- package/test/declarative/fixtures/extensions/observer-map-deep-merge/fast-build.config.json +6 -0
- package/test/declarative/fixtures/extensions/observer-map-deep-merge/index.html +376 -0
- package/test/declarative/fixtures/extensions/observer-map-deep-merge/main.ts +366 -0
- package/test/declarative/fixtures/extensions/observer-map-deep-merge/state.json +69 -0
- package/test/declarative/fixtures/extensions/observer-map-deep-merge/templates.html +91 -0
- package/test/declarative/fixtures/extensions/observer-map-properties/entry.html +14 -0
- package/test/declarative/fixtures/extensions/observer-map-properties/fast-build.config.json +6 -0
- package/test/declarative/fixtures/extensions/observer-map-properties/index.html +110 -0
- package/test/declarative/fixtures/extensions/observer-map-properties/main.ts +175 -0
- package/test/declarative/fixtures/extensions/observer-map-properties/state.json +29 -0
- package/test/declarative/fixtures/extensions/observer-map-properties/templates.html +55 -0
- package/test/declarative/fixtures/scenarios/README.md +7 -0
- package/test/declarative/fixtures/scenarios/nested-elements/entry.html +16 -0
- package/test/declarative/fixtures/scenarios/nested-elements/fast-build.config.json +6 -0
- package/test/declarative/fixtures/scenarios/nested-elements/index.html +126 -0
- package/test/declarative/fixtures/scenarios/nested-elements/main.ts +214 -0
- package/test/declarative/fixtures/scenarios/nested-elements/state.json +10 -0
- package/test/declarative/fixtures/scenarios/nested-elements/templates.html +54 -0
- package/test/declarative/index.html +12 -0
- package/test/declarative/vite.config.ts +55 -0
- package/test/declarative-main.ts +6 -0
- package/test/extension-subpaths-main.ts +9 -0
- package/test/main.ts +38 -33
- package/test/pure-declarative-main.ts +1 -0
- package/dist/dts/components/install-hydration.d.ts +0 -1
- package/dist/dts/pending-task.d.ts +0 -32
- package/dist/dts/polyfills.d.ts +0 -0
- package/dist/dts/styles/css-binding-directive.d.ts +0 -60
- package/dist/dts/templating/install-hydratable-view-templates.d.ts +0 -1
- package/dist/esm/components/install-hydration.js +0 -3
- package/dist/esm/pending-task.js +0 -28
- package/dist/esm/polyfills.js +0 -60
- package/dist/esm/styles/css-binding-directive.js +0 -76
- package/dist/esm/templating/install-hydratable-view-templates.js +0 -23
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en-US">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Lifecycle Callbacks Test</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<simple-element needs-hydration><template shadowrootmode="open" shadowroot="open"><!--fe:b-->Hello<!--fe:/b--> World</template></simple-element>
|
|
9
|
+
<complex-element needs-hydration count="0"><template shadowrootmode="open" shadowroot="open"><div>
|
|
10
|
+
<h2><!--fe:b-->Complex<!--fe:/b--></h2>
|
|
11
|
+
<p>Count: <!--fe:b-->0<!--fe:/b--></p>
|
|
12
|
+
<nested-element label="Complex" data-fe="1"><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->Complex<!--fe:/b--></span></template></nested-element>
|
|
13
|
+
</div></template></complex-element>
|
|
14
|
+
<deferred-element needs-hydration defer-hydration><template shadowrootmode="open" shadowroot="open"><p>Status: <!--fe:b-->pending<!--fe:/b--></p></template></deferred-element>
|
|
15
|
+
<deferred-parent-element needs-hydration defer-hydration><template shadowrootmode="open" shadowroot="open"><section>
|
|
16
|
+
<p><!--fe:b-->Parent<!--fe:/b--></p>
|
|
17
|
+
<deferred-child-element label="Parent" data-fe="1"><template shadowrootmode="open" shadowroot="open"><span><!--fe:b-->Parent<!--fe:/b--></span></template></deferred-child-element>
|
|
18
|
+
</section></template></deferred-parent-element>
|
|
19
|
+
<f-template name="simple-element">
|
|
20
|
+
<template>{{message}} World</template>
|
|
21
|
+
</f-template>
|
|
22
|
+
|
|
23
|
+
<f-template name="complex-element">
|
|
24
|
+
<template>
|
|
25
|
+
<div>
|
|
26
|
+
<h2>{{title}}</h2>
|
|
27
|
+
<p>Count: {{count}}</p>
|
|
28
|
+
<nested-element label="{{title}}"></nested-element>
|
|
29
|
+
</div>
|
|
30
|
+
</template>
|
|
31
|
+
</f-template>
|
|
32
|
+
|
|
33
|
+
<f-template name="nested-element">
|
|
34
|
+
<template><span>{{label}}</span></template>
|
|
35
|
+
</f-template>
|
|
36
|
+
|
|
37
|
+
<f-template name="deferred-element">
|
|
38
|
+
<template><p>Status: {{status}}</p></template>
|
|
39
|
+
</f-template>
|
|
40
|
+
|
|
41
|
+
<f-template name="deferred-parent-element">
|
|
42
|
+
<template>
|
|
43
|
+
<section>
|
|
44
|
+
<p>{{label}}</p>
|
|
45
|
+
<deferred-child-element label="{{label}}"></deferred-child-element>
|
|
46
|
+
</section>
|
|
47
|
+
</template>
|
|
48
|
+
</f-template>
|
|
49
|
+
|
|
50
|
+
<f-template name="deferred-child-element">
|
|
51
|
+
<template><span>{{label}}</span></template>
|
|
52
|
+
</f-template>
|
|
53
|
+
|
|
54
|
+
<script type="module" src="./main.ts"></script>
|
|
55
|
+
</body>
|
|
56
|
+
</html>
|
|
@@ -0,0 +1,134 @@
|
|
|
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
|
+
import { observerMap } from "@microsoft/fast-element/observer-map.js";
|
|
7
|
+
|
|
8
|
+
// Track lifecycle callbacks for testing
|
|
9
|
+
export const lifecycleEvents: Array<{ callback: string; name?: string }> = [];
|
|
10
|
+
|
|
11
|
+
// Enable hydration with global callback
|
|
12
|
+
enableHydration({
|
|
13
|
+
hydrationComplete(): void {
|
|
14
|
+
lifecycleEvents.push({ callback: "hydrationComplete" });
|
|
15
|
+
(window as any).hydrationCompleted = true;
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
// Per-element lifecycle callbacks
|
|
20
|
+
const lifecycleCallbacks = {
|
|
21
|
+
elementDidRegister(name: string): void {
|
|
22
|
+
lifecycleEvents.push({ callback: "elementDidRegister", name });
|
|
23
|
+
},
|
|
24
|
+
templateWillUpdate(name: string): void {
|
|
25
|
+
lifecycleEvents.push({ callback: "templateWillUpdate", name });
|
|
26
|
+
},
|
|
27
|
+
templateDidUpdate(name: string): void {
|
|
28
|
+
lifecycleEvents.push({ callback: "templateDidUpdate", name });
|
|
29
|
+
},
|
|
30
|
+
elementDidDefine(name: string): void {
|
|
31
|
+
lifecycleEvents.push({ callback: "elementDidDefine", name });
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
// Simple element with basic property
|
|
36
|
+
class SimpleElement extends FASTElement {
|
|
37
|
+
@attr
|
|
38
|
+
message: string = "Hello";
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
SimpleElement.define({
|
|
42
|
+
name: "simple-element",
|
|
43
|
+
template: declarativeTemplate(lifecycleCallbacks),
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Complex element with multiple properties and methods
|
|
47
|
+
class ComplexElement extends FASTElement {
|
|
48
|
+
@attr
|
|
49
|
+
title: string = "Complex";
|
|
50
|
+
|
|
51
|
+
@observable
|
|
52
|
+
count: number = 0;
|
|
53
|
+
|
|
54
|
+
@observable
|
|
55
|
+
items: string[] = [];
|
|
56
|
+
|
|
57
|
+
increment() {
|
|
58
|
+
this.count++;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
addItem(item: string) {
|
|
62
|
+
this.items = [...this.items, item];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
ComplexElement.define(
|
|
67
|
+
{
|
|
68
|
+
name: "complex-element",
|
|
69
|
+
template: declarativeTemplate(lifecycleCallbacks),
|
|
70
|
+
},
|
|
71
|
+
[observerMap()],
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
// Nested element
|
|
75
|
+
class NestedElement extends FASTElement {
|
|
76
|
+
@attr
|
|
77
|
+
label: string = "Nested";
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
NestedElement.define({
|
|
81
|
+
name: "nested-element",
|
|
82
|
+
template: declarativeTemplate(lifecycleCallbacks),
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// Element with deferred hydration
|
|
86
|
+
class DeferredElement extends FASTElement {
|
|
87
|
+
@attr
|
|
88
|
+
status: string = "pending";
|
|
89
|
+
|
|
90
|
+
connectedCallback() {
|
|
91
|
+
super.connectedCallback();
|
|
92
|
+
// Simulate async work
|
|
93
|
+
setTimeout(() => {
|
|
94
|
+
this.status = "ready";
|
|
95
|
+
}, 100);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
DeferredElement.define({
|
|
100
|
+
name: "deferred-element",
|
|
101
|
+
template: declarativeTemplate(lifecycleCallbacks),
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Nested deferred elements to verify parent-first hydration
|
|
105
|
+
class DeferredParentElement extends FASTElement {
|
|
106
|
+
@attr
|
|
107
|
+
label: string = "Parent";
|
|
108
|
+
|
|
109
|
+
connectedCallback() {
|
|
110
|
+
super.connectedCallback();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
DeferredParentElement.define({
|
|
115
|
+
name: "deferred-parent-element",
|
|
116
|
+
template: declarativeTemplate(lifecycleCallbacks),
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
class DeferredChildElement extends FASTElement {
|
|
120
|
+
@attr
|
|
121
|
+
label: string = "Child";
|
|
122
|
+
|
|
123
|
+
connectedCallback() {
|
|
124
|
+
super.connectedCallback();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
DeferredChildElement.define({
|
|
129
|
+
name: "deferred-child-element",
|
|
130
|
+
template: declarativeTemplate(lifecycleCallbacks),
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// Make lifecycleEvents available globally for testing
|
|
134
|
+
(window as any).lifecycleEvents = lifecycleEvents;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<f-template name="simple-element">
|
|
2
|
+
<template>{{message}} World</template>
|
|
3
|
+
</f-template>
|
|
4
|
+
|
|
5
|
+
<f-template name="complex-element">
|
|
6
|
+
<template>
|
|
7
|
+
<div>
|
|
8
|
+
<h2>{{title}}</h2>
|
|
9
|
+
<p>Count: {{count}}</p>
|
|
10
|
+
<nested-element label="{{title}}"></nested-element>
|
|
11
|
+
</div>
|
|
12
|
+
</template>
|
|
13
|
+
</f-template>
|
|
14
|
+
|
|
15
|
+
<f-template name="nested-element">
|
|
16
|
+
<template><span>{{label}}</span></template>
|
|
17
|
+
</f-template>
|
|
18
|
+
|
|
19
|
+
<f-template name="deferred-element">
|
|
20
|
+
<template><p>Status: {{status}}</p></template>
|
|
21
|
+
</f-template>
|
|
22
|
+
|
|
23
|
+
<f-template name="deferred-parent-element">
|
|
24
|
+
<template>
|
|
25
|
+
<section>
|
|
26
|
+
<p>{{label}}</p>
|
|
27
|
+
<deferred-child-element label="{{label}}"></deferred-child-element>
|
|
28
|
+
</section>
|
|
29
|
+
</template>
|
|
30
|
+
</f-template>
|
|
31
|
+
|
|
32
|
+
<f-template name="deferred-child-element">
|
|
33
|
+
<template><span>{{label}}</span></template>
|
|
34
|
+
</f-template>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en-US">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Performance Metrics Test</title>
|
|
6
|
+
<link rel="preload" as="style" href="./fast-card.css" />
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<fast-card needs-hydration defer-hydration defer-delay="0" displayDelay="0ms"></fast-card>
|
|
10
|
+
<fast-card needs-hydration defer-hydration defer-delay="0" displayDelay="0ms"></fast-card>
|
|
11
|
+
<fast-card needs-hydration defer-hydration defer-delay="0" displayDelay="0ms"></fast-card>
|
|
12
|
+
<fast-card needs-hydration defer-hydration defer-delay="0" displayDelay="0ms"></fast-card>
|
|
13
|
+
<fast-card needs-hydration defer-hydration defer-delay="0" displayDelay="0ms"></fast-card>
|
|
14
|
+
<fast-card needs-hydration defer-hydration defer-delay="150" displayDelay="150ms"></fast-card>
|
|
15
|
+
<fast-card needs-hydration defer-hydration defer-delay="150" displayDelay="150ms"></fast-card>
|
|
16
|
+
<fast-card needs-hydration defer-hydration defer-delay="150" displayDelay="150ms"></fast-card>
|
|
17
|
+
<fast-card needs-hydration defer-hydration defer-delay="150" displayDelay="150ms"></fast-card>
|
|
18
|
+
<fast-card needs-hydration defer-hydration defer-delay="300" displayDelay="300ms"></fast-card>
|
|
19
|
+
<fast-card needs-hydration defer-hydration defer-delay="300" displayDelay="300ms"></fast-card>
|
|
20
|
+
<fast-card needs-hydration defer-hydration defer-delay="300" displayDelay="300ms"></fast-card>
|
|
21
|
+
<fast-card needs-hydration defer-hydration defer-delay="300" displayDelay="300ms"></fast-card>
|
|
22
|
+
<fast-card needs-hydration defer-hydration defer-delay="300" displayDelay="300ms"></fast-card>
|
|
23
|
+
<script type="module" src="./main.ts"></script>
|
|
24
|
+
</body>
|
|
25
|
+
</html>
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en-US">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Performance Metrics Test</title>
|
|
6
|
+
<link rel="preload" as="style" href="./fast-card.css" />
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<fast-card needs-hydration defer-hydration defer-delay="0" displayDelay="0ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
10
|
+
<dl>
|
|
11
|
+
<dt>Configured Delay</dt>
|
|
12
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
13
|
+
<dt>Element Will Hydrate</dt>
|
|
14
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
15
|
+
<dt>Element Did Hydrate</dt>
|
|
16
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
17
|
+
<dt>Element Hydration Duration</dt>
|
|
18
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
19
|
+
</dl></template></fast-card>
|
|
20
|
+
<fast-card needs-hydration defer-hydration defer-delay="0" displayDelay="0ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
21
|
+
<dl>
|
|
22
|
+
<dt>Configured Delay</dt>
|
|
23
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
24
|
+
<dt>Element Will Hydrate</dt>
|
|
25
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
26
|
+
<dt>Element Did Hydrate</dt>
|
|
27
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
28
|
+
<dt>Element Hydration Duration</dt>
|
|
29
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
30
|
+
</dl></template></fast-card>
|
|
31
|
+
<fast-card needs-hydration defer-hydration defer-delay="0" displayDelay="0ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
32
|
+
<dl>
|
|
33
|
+
<dt>Configured Delay</dt>
|
|
34
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
35
|
+
<dt>Element Will Hydrate</dt>
|
|
36
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
37
|
+
<dt>Element Did Hydrate</dt>
|
|
38
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
39
|
+
<dt>Element Hydration Duration</dt>
|
|
40
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
41
|
+
</dl></template></fast-card>
|
|
42
|
+
<fast-card needs-hydration defer-hydration defer-delay="0" displayDelay="0ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
43
|
+
<dl>
|
|
44
|
+
<dt>Configured Delay</dt>
|
|
45
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
46
|
+
<dt>Element Will Hydrate</dt>
|
|
47
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
48
|
+
<dt>Element Did Hydrate</dt>
|
|
49
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
50
|
+
<dt>Element Hydration Duration</dt>
|
|
51
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
52
|
+
</dl></template></fast-card>
|
|
53
|
+
<fast-card needs-hydration defer-hydration defer-delay="0" displayDelay="0ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
54
|
+
<dl>
|
|
55
|
+
<dt>Configured Delay</dt>
|
|
56
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
57
|
+
<dt>Element Will Hydrate</dt>
|
|
58
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
59
|
+
<dt>Element Did Hydrate</dt>
|
|
60
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
61
|
+
<dt>Element Hydration Duration</dt>
|
|
62
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
63
|
+
</dl></template></fast-card>
|
|
64
|
+
<fast-card needs-hydration defer-hydration defer-delay="150" displayDelay="150ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
65
|
+
<dl>
|
|
66
|
+
<dt>Configured Delay</dt>
|
|
67
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
68
|
+
<dt>Element Will Hydrate</dt>
|
|
69
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
70
|
+
<dt>Element Did Hydrate</dt>
|
|
71
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
72
|
+
<dt>Element Hydration Duration</dt>
|
|
73
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
74
|
+
</dl></template></fast-card>
|
|
75
|
+
<fast-card needs-hydration defer-hydration defer-delay="150" displayDelay="150ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
76
|
+
<dl>
|
|
77
|
+
<dt>Configured Delay</dt>
|
|
78
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
79
|
+
<dt>Element Will Hydrate</dt>
|
|
80
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
81
|
+
<dt>Element Did Hydrate</dt>
|
|
82
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
83
|
+
<dt>Element Hydration Duration</dt>
|
|
84
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
85
|
+
</dl></template></fast-card>
|
|
86
|
+
<fast-card needs-hydration defer-hydration defer-delay="150" displayDelay="150ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
87
|
+
<dl>
|
|
88
|
+
<dt>Configured Delay</dt>
|
|
89
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
90
|
+
<dt>Element Will Hydrate</dt>
|
|
91
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
92
|
+
<dt>Element Did Hydrate</dt>
|
|
93
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
94
|
+
<dt>Element Hydration Duration</dt>
|
|
95
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
96
|
+
</dl></template></fast-card>
|
|
97
|
+
<fast-card needs-hydration defer-hydration defer-delay="150" displayDelay="150ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
98
|
+
<dl>
|
|
99
|
+
<dt>Configured Delay</dt>
|
|
100
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
101
|
+
<dt>Element Will Hydrate</dt>
|
|
102
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
103
|
+
<dt>Element Did Hydrate</dt>
|
|
104
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
105
|
+
<dt>Element Hydration Duration</dt>
|
|
106
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
107
|
+
</dl></template></fast-card>
|
|
108
|
+
<fast-card needs-hydration defer-hydration defer-delay="300" displayDelay="300ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
109
|
+
<dl>
|
|
110
|
+
<dt>Configured Delay</dt>
|
|
111
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
112
|
+
<dt>Element Will Hydrate</dt>
|
|
113
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
114
|
+
<dt>Element Did Hydrate</dt>
|
|
115
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
116
|
+
<dt>Element Hydration Duration</dt>
|
|
117
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
118
|
+
</dl></template></fast-card>
|
|
119
|
+
<fast-card needs-hydration defer-hydration defer-delay="300" displayDelay="300ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
120
|
+
<dl>
|
|
121
|
+
<dt>Configured Delay</dt>
|
|
122
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
123
|
+
<dt>Element Will Hydrate</dt>
|
|
124
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
125
|
+
<dt>Element Did Hydrate</dt>
|
|
126
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
127
|
+
<dt>Element Hydration Duration</dt>
|
|
128
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
129
|
+
</dl></template></fast-card>
|
|
130
|
+
<fast-card needs-hydration defer-hydration defer-delay="300" displayDelay="300ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
131
|
+
<dl>
|
|
132
|
+
<dt>Configured Delay</dt>
|
|
133
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
134
|
+
<dt>Element Will Hydrate</dt>
|
|
135
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
136
|
+
<dt>Element Did Hydrate</dt>
|
|
137
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
138
|
+
<dt>Element Hydration Duration</dt>
|
|
139
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
140
|
+
</dl></template></fast-card>
|
|
141
|
+
<fast-card needs-hydration defer-hydration defer-delay="300" displayDelay="300ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
142
|
+
<dl>
|
|
143
|
+
<dt>Configured Delay</dt>
|
|
144
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
145
|
+
<dt>Element Will Hydrate</dt>
|
|
146
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
147
|
+
<dt>Element Did Hydrate</dt>
|
|
148
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
149
|
+
<dt>Element Hydration Duration</dt>
|
|
150
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
151
|
+
</dl></template></fast-card>
|
|
152
|
+
<fast-card needs-hydration defer-hydration defer-delay="300" displayDelay="300ms"><template shadowrootmode="open" shadowroot="open"><link rel="stylesheet" href="./fast-card.css" />
|
|
153
|
+
<dl>
|
|
154
|
+
<dt>Configured Delay</dt>
|
|
155
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
156
|
+
<dt>Element Will Hydrate</dt>
|
|
157
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
158
|
+
<dt>Element Did Hydrate</dt>
|
|
159
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
160
|
+
<dt>Element Hydration Duration</dt>
|
|
161
|
+
<dd><!--fe:b-->0ms<!--fe:/b--></dd>
|
|
162
|
+
</dl></template></fast-card>
|
|
163
|
+
<f-template name="fast-card">
|
|
164
|
+
<template>
|
|
165
|
+
<link rel="stylesheet" href="./fast-card.css" />
|
|
166
|
+
<dl>
|
|
167
|
+
<dt>Configured Delay</dt>
|
|
168
|
+
<dd>{{displayDelay}}</dd>
|
|
169
|
+
<dt>Element Will Hydrate</dt>
|
|
170
|
+
<dd>{{willHydrate}}</dd>
|
|
171
|
+
<dt>Element Did Hydrate</dt>
|
|
172
|
+
<dd>{{didHydrate}}</dd>
|
|
173
|
+
<dt>Element Hydration Duration</dt>
|
|
174
|
+
<dd>{{hydrationDuration}}</dd>
|
|
175
|
+
</dl>
|
|
176
|
+
</template>
|
|
177
|
+
</f-template>
|
|
178
|
+
|
|
179
|
+
<script type="module" src="./main.ts"></script>
|
|
180
|
+
</body>
|
|
181
|
+
</html>
|
|
@@ -0,0 +1,58 @@
|
|
|
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 { volatile } from "@microsoft/fast-element/volatile.js";
|
|
6
|
+
|
|
7
|
+
let markSequence = 0;
|
|
8
|
+
|
|
9
|
+
// Enable hydration with global start/complete callbacks
|
|
10
|
+
enableHydration({
|
|
11
|
+
hydrationStarted(): void {
|
|
12
|
+
performance.mark("hydration:started", { detail: { sequence: markSequence++ } });
|
|
13
|
+
},
|
|
14
|
+
hydrationComplete(): void {
|
|
15
|
+
performance.measure("hydration:complete", "hydration:started");
|
|
16
|
+
(window as any).hydrationCompleted = true;
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
class FastCard extends FASTElement {
|
|
21
|
+
@attr({ attribute: "defer-delay" })
|
|
22
|
+
deferDelay!: number;
|
|
23
|
+
|
|
24
|
+
@volatile
|
|
25
|
+
get displayDelay(): string {
|
|
26
|
+
return `${(this.deferDelay ?? 0).toString()}ms`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
FastCard.define({
|
|
31
|
+
name: "fast-card",
|
|
32
|
+
template: declarativeTemplate({
|
|
33
|
+
templateWillUpdate(name: string) {
|
|
34
|
+
performance.mark(`template-update:${name}:start`, {
|
|
35
|
+
detail: { sequence: markSequence++ },
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
templateDidUpdate(name) {
|
|
40
|
+
performance.measure(
|
|
41
|
+
`template-update:${name}`,
|
|
42
|
+
`template-update:${name}:start`,
|
|
43
|
+
);
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
elementDidDefine(name) {
|
|
47
|
+
performance.mark(`element-define:${name}`, {
|
|
48
|
+
detail: { sequence: markSequence++ },
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
elementDidRegister(name) {
|
|
53
|
+
performance.mark(`element-register:${name}`, {
|
|
54
|
+
detail: { sequence: markSequence++ },
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
}),
|
|
58
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<f-template name="fast-card">
|
|
2
|
+
<template>
|
|
3
|
+
<link rel="stylesheet" href="./fast-card.css" />
|
|
4
|
+
<dl>
|
|
5
|
+
<dt>Configured Delay</dt>
|
|
6
|
+
<dd>{{displayDelay}}</dd>
|
|
7
|
+
<dt>Element Will Hydrate</dt>
|
|
8
|
+
<dd>{{willHydrate}}</dd>
|
|
9
|
+
<dt>Element Did Hydrate</dt>
|
|
10
|
+
<dd>{{didHydrate}}</dd>
|
|
11
|
+
<dt>Element Hydration Duration</dt>
|
|
12
|
+
<dd>{{hydrationDuration}}</dd>
|
|
13
|
+
</dl>
|
|
14
|
+
</template>
|
|
15
|
+
</f-template>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Extensions
|
|
2
|
+
|
|
3
|
+
Fixtures for additional functionality that augments the core declarative FAST
|
|
4
|
+
Element behavior beyond developer direct configuration, such as automatic
|
|
5
|
+
attribute mapping and deep property observation.
|
|
6
|
+
|
|
7
|
+
| Fixture | Description |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `attribute-map` | Automatic attribute mapping enabled with the `attributeMap()` definition extension. |
|
|
10
|
+
| `attribute-map-naming-strategy` | The `attributeMap({ "attribute-name-strategy": "camelCase" })` definition extension for mapping HTML attribute names to property names. |
|
|
11
|
+
| `attribute-map-naming-strategy-camel-case` | Explicit `@attr` decorator behavior with `camelCase` attribute name strategy in the build configuration. |
|
|
12
|
+
| `observer-map` | Automatic deep reactive observation enabled with the `observerMap()` definition extension. |
|
|
13
|
+
| `observer-map-config-object` | Explicit non-default configuration objects applied via `observerMap(...)` and `attributeMap(...)` definition extensions. |
|
|
14
|
+
| `observer-map-deep-merge` | Nested object merging behavior for complex state structures. |
|
|
15
|
+
| `observer-map-properties` | Selective property observation using `observerMap({ properties: {...} })` for fine-grained control. |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en-US">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title></title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<attribute-map-test-element id="test-element"></attribute-map-test-element>
|
|
9
|
+
<attribute-map-existing-attr-test-element
|
|
10
|
+
id="existing-attr-test-element"
|
|
11
|
+
></attribute-map-existing-attr-test-element>
|
|
12
|
+
<script type="module" src="./main.ts"></script>
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en-US">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title></title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<attribute-map-test-element id="test-element"><template shadowrootmode="open" shadowroot="open"><div class="foo-value"><!--fe:b--><!--fe:/b--></div>
|
|
9
|
+
<div class="foo-bar-value"><!--fe:b--><!--fe:/b--></div>
|
|
10
|
+
<button type="button" data-fe="1">Set Foo</button>
|
|
11
|
+
<button type="button" data-fe="1">Set FooBar</button>
|
|
12
|
+
<button type="button" data-fe="1">Set Multiple</button></template></attribute-map-test-element>
|
|
13
|
+
<attribute-map-existing-attr-test-element id="existing-attr-test-element"><template shadowrootmode="open" shadowroot="open"><div class="existing-foo-value"><!--fe:b--><!--fe:/b--></div></template></attribute-map-existing-attr-test-element>
|
|
14
|
+
<f-template name="attribute-map-test-element">
|
|
15
|
+
<template>
|
|
16
|
+
<div class="foo-value">{{foo}}</div>
|
|
17
|
+
<div class="foo-bar-value">{{foo-bar}}</div>
|
|
18
|
+
<button type="button" @click="{setFoo()}">Set Foo</button>
|
|
19
|
+
<button type="button" @click="{setFooBar()}">Set FooBar</button>
|
|
20
|
+
<button type="button" @click="{setMultiple()}">Set Multiple</button>
|
|
21
|
+
</template>
|
|
22
|
+
</f-template>
|
|
23
|
+
<f-template name="attribute-map-existing-attr-test-element">
|
|
24
|
+
<template>
|
|
25
|
+
<div class="existing-foo-value">{{foo}}</div>
|
|
26
|
+
</template>
|
|
27
|
+
</f-template>
|
|
28
|
+
|
|
29
|
+
<script type="module" src="./main.ts"></script>
|
|
30
|
+
</body>
|
|
31
|
+
</html>
|