fast/specs
Rob Eisenberg 4699e77715
FASTElement 2.0 (#5282)
* feat(compiler): remove tree walker & switch to structural target lookup

* fix(compiler): don't add unnecessary descriptors to compile result

* fix(compiler): correct extraction of child index from parent id

* feat(compiler): unify host and view factories

* feat(view): unify behavior creation with first bind; clean up compiler

* chore(template): clean up imports

* chore(templating): clean up imports

* refactor(view): cleanup view internals and remove range

* feat(binding): enable control over className vs. classList behavior

* docs: add notes on changes in FAST Element 2

* feat: add generic types to views and templates

* refactor: internal cleanup and fixing router to match new APIs.

* feat: improve types related to behaviors

* refactor: clean up styles code a bit

* feat: introduce ViewBehavior to enable stateless behaviors

* fix: remove unnecessary render based on element id

* perf: switch targetId to set and use normal props for r/h lookups

* refactor(observable): tighten up some code

* refactor: tighten up notifier

* refactor: clean up array observer

* refactor: clean up class binding scenarios

* refactor: clean up more internal of css and observable

* feat: switch ref over to the new stateless model for view behaviors

* refactor: cleanup in node observation

* feat: createCustomAttributePlaceholder no longer requires an attr name

* feat: update children and slotted to share instances

* refactor: dry up ref and node observation directives

* refactor: improve compiler internals by combining context and result

* feat: wip updating binding system to support modes and configs

* fix: correct handle change signature for content binding

* feat: enable interpolating non-strings as one time bindings in templates

* refactor: remove duplication in one time event

* refactor: reduce some duplication when creating binding configs

* refactor: reduce duplication and simplify new binding system

* refactor: improve compiler/directive protocol

* refactor: rename Notifier#source to Notifier#subject

* refactor: reduce duplication

* fix: state issue with token list bindings

* refactor: clean up types and remove internals from public export

* refactor: centralize common type checks

* refactor: centralize id generation

* refactor: only export intended types for directives

* refactor: internal code reduction

* refactor: consolidate more unique id logic

* chore: fix module import path

* feat: signal bindings and refactoring of binding type APIs

* refactor(controller): minor internal improvements

* refactor(attributes): reduce some duplication

* fix(binding): bug in location of update target

* refactor: modernize the splice code

* refactor: small simplification in array change records

* perf: use less memory and reduce code for signal bindings

* chore: set up SSR package (#5589)

* project files and starting to set up test infrastructure

* incorporating ts project references and getting tests working

* adding .npmignore to ingore tests and server

* adding readmes

* Update packages/web-components/fast-ssr/package.json

Co-authored-by: Chris Holt <chhol@microsoft.com>

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>
Co-authored-by: Chris Holt <chhol@microsoft.com>

* feat: expose fast-element as a module package to NodeJS (#5601)

* add lint rule to enforce file extensions in imports

* declare fast-element as a ESModule package

* convert eslintrc to a commonjs module

* adding file extensions to import paths

* fixing accidently modified string

* fixing build processes

* revert change

* Change files

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* Add the fast-style web component (#5600)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This branch adds the following:

- A FAST Style element that will hydrate styles client side
- A webpack config that will build the minimal JS for the logic for this web component so that the file `fast-style.min.js` can be referred to in server side generated HTML

### 🎫 Issues

<!---
* List and link relevant issues here.
-->
Closes #5575

## 👩‍💻 Reviewer Notes

<!---
Provide some notes for reviewers to help them provide targeted feedback and testing.

Do you recommend a smoke test for this PR? What steps should be followed?
Are there particular areas of the code the reviewer should focus on?
-->
If you run the test server after building all the necessary files, you can navigate to `localhost:8080/fast-style` and see the component working there. One thing is the fixture uses `shadowroot="open"` to be able to see which styles are applied to nested elements during Playwright testing. This does not need the case for actual implementation, the shadowroot can be closed, this has been manually verified.

## 📑 Test Plan

<!---
Please provide a summary of the tests affected by this work and any unique strategies employed in testing the features/fixes.
-->
The added tests are Playwright tests, I'll let reviewers comment as to whether more tests are needed, this however tests the base case of applying styles to the container of the fast-style web component.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [x] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [ ] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

## ⏭ Next Steps

<!---
If there is relevant follow-up work to this PR, please list any existing issues or provide brief descriptions of what you would like to do next.
-->
- Integrate the FASTStyle wc to the HTML renderer #5576

* Pin the checkchange to the feature branch (#5611)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This change will pin the `checkchange` check in the github workflow to check for changes against the `features/fast-element-2` branch. Since the branch should only be checking PRs against its contents and not the default branch this is the current workaround for checking for changefiles against non-default branches. This change must be removed prior to inclusion to the default branch.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

## ⏭ Next Steps

<!---
If there is relevant follow-up work to this PR, please list any existing issues or provide brief descriptions of what you would like to do next.
-->
- Add an issue to remove this change in the feature branch tracking project (https://github.com/microsoft/fast/issues/5612)

* Added change files for FAST Element 2 (#5610)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
These are the necessary change files for the current state of work for FAST Element 2.0. Subsequent changes will require a change file after a PR has been added to pin the `checkchange` to the feature branch.

## 👩‍💻 Reviewer Notes

<!---
Provide some notes for reviewers to help them provide targeted feedback and testing.

Do you recommend a smoke test for this PR? What steps should be followed?
Are there particular areas of the code the reviewer should focus on?
-->
Read the change files carefully and see if you agree with the wording/change type/package/etc.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [x] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [ ] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

## ⏭ Next Steps

<!---
If there is relevant follow-up work to this PR, please list any existing issues or provide brief descriptions of what you would like to do next.
-->
- Add a PR to pin `checkchange` to the feature branch (#5611)
- Add an issue to remove `checkchange` pinning once feature branch work is complete (https://github.com/microsoft/fast/issues/5612)

* Add branch pointing to config instead of package scripts (#5616)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This change moves the branch specificity to beachball config to allow `yarn change` to target the feature branch and also removes the restriction on "major" change updates.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

* feat: enable synchronous dom updates for SSR (#5615)

* feat: enable synchronous dom updates for SSR

* Add branch pointing to config instead of package scripts (#5616)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This change moves the branch specificity to beachball config to allow `yarn change` to target the feature branch and also removes the restriction on "major" change updates.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

* feat: enable synchronous dom updates for SSR

* Change files

* Change files

Co-authored-by: Jane Chu <7559015+janechu@users.noreply.github.com>
Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: adds FASTElementRenderer to fast-ssr (#5613)

* adds FASTElementRenderer as a ElementRenderer implementation

* adding test

* adding eslint for file extensions

* re-structure tests to better support dependency structures

* Fixing tests for FASTElementRenderer.matchesClass

* adding code comments

* Update packages/web-components/fast-ssr/src/element-renderer/element-renderer.ts

Co-authored-by: Jane Chu <7559015+janechu@users.noreply.github.com>

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>
Co-authored-by: Jane Chu <7559015+janechu@users.noreply.github.com>

* Added prettier to fast-ssr package (#5617)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This change adds prettier to the `@microsoft/fast-ssr` package.

Note: I ran prettier after the changes and it looks like the current files are gtg. This is more for future proofing.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

* Fixed linting errors and warnings (#5619)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This change does the following:
- Allow `no-non-null-assertion`
- Fixes all other warnings and errors

## 👩‍💻 Reviewer Notes

<!---
Provide some notes for reviewers to help them provide targeted feedback and testing.

Do you recommend a smoke test for this PR? What steps should be followed?
Are there particular areas of the code the reviewer should focus on?
-->
@EisenbergEffect since these changes affect your work please take a close look, most of the changes are benign but I did move code around to best minimize ignoring the no-use-before-define issues.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

* Added watch script and chokidar (#5621)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This PR adds `chokidar` so that we can watch files and re-run the playwright tests. Playwright does not currently have a watcher for this purpose so `chokidar-cli` was added to facilitate this.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

* feat: enable pluggable style handling strategies (#5623)

* feat: enable pluggable style handling strategies

* refactor: move unnecessary internal function

* test: fix up style tests based on new API

* refactor: improve the style strategy interface

* Change files

* refactor: improve strategy factory design via constructible types

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* Updated api-extractor version and exported markdown (#5640)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
When running `npm run build` inside `@microsoft/fast-element` package, the following error is encountered:

`Error: Error parsing tsconfig.json content: Unknown compiler option 'importsNotUsedAsValues'.`

This happens because running `api-extractor` happens as a final step in the `build`, and the reason this error occurs is that the currently pinned version `typescript` used by `api-extractor` is below `3.8.0` when `importsNotUsedAsValues` was introduced as a flag. This change updates the version, we now have no errors, but the following warnings with this change:

```
Warning: You have changed the public API signature for this project. Updating docs/api-report.md
Warning: dist/dts/dom.d.ts:70:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
Warning: dist/dts/observation/array-change-records.d.ts:6:33 - (tsdoc-escape-greater-than) The ">" character should be escaped using a backslash to avoid confusion with an HTML tag
Warning: dist/dts/observation/array-change-records.d.ts:6:6 - (tsdoc-html-tag-missing-greater-than) The HTML tag has invalid syntax: Expecting an attribute or ">" or "/>"
Warning: dist/dts/templating/binding.d.ts:4:1 - (ae-missing-release-tag) "BindingBehaviorFactory" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
Warning: dist/dts/templating/binding.d.ts:7:1 - (ae-missing-release-tag) "BindingType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
Warning: dist/dts/templating/binding.d.ts:9:1 - (ae-missing-release-tag) "BindingMode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
Warning: dist/dts/templating/binding.d.ts:17:1 - (ae-missing-release-tag) "BindingConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
Warning: dist/dts/templating/binding.d.ts:23:1 - (ae-missing-release-tag) "DefaultBindingOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
Warning: dist/dts/templating/binding.d.ts:26:22 - (ae-missing-release-tag) "onChange" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
Warning: dist/dts/templating/binding.d.ts:27:22 - (ae-missing-release-tag) "oneTime" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
Warning: dist/dts/templating/binding.d.ts:43:1 - (ae-missing-release-tag) "bind" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
Warning: dist/dts/templating/html-directive.d.ts:84:1 - (ae-missing-release-tag) "InlinableHTMLDirective" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
```

### 🎫 Issues

<!---
* List and link relevant issues here.
-->
Partially addresses #5641 

## 👩‍💻 Reviewer Notes

<!---
Provide some notes for reviewers to help them provide targeted feedback and testing.

Do you recommend a smoke test for this PR? What steps should be followed?
Are there particular areas of the code the reviewer should focus on?
-->
Please take a look at the above warnings and determine if these are legitimate and we should proceed with the version update.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

* Update the fast-router with the updates to fast-element APIs (#5643)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This change updates `@microsoft/fast-router` so that it uses the new APIs available from `@microsoft/fast-element`. This unblocks part of the `yarn install` errors currently happening in the build gate.

### 🎫 Issues

<!---
* List and link relevant issues here.
-->
Relates to #5641 

## 👩‍💻 Reviewer Notes

<!---
Provide some notes for reviewers to help them provide targeted feedback and testing.

Do you recommend a smoke test for this PR? What steps should be followed?
Are there particular areas of the code the reviewer should focus on?
-->
@EisenbergEffect could you take a look at these changes and verify this is the intended use for the updated `ElementStyles` and `ViewBehaviorTargets`.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

* fix: add null value as acceptable value to FASTElement.attributeChangedCallback (#5642)

* allow null values in attributeChangedCallback

* Change files

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* Updated to use the new FAST element 2.0 APIs for creating behaviors and creating element styles (#5648)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This work updates components in `@microsoft/fast-foundation` to use updated APIs from FAST Element 2.0.

### 🎫 Issues

<!---
* List and link relevant issues here.
-->
Relates to #5641

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [x] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

* Update the API report based on foundation updates for FAST element 2.0 (#5650)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This api report update comes after the work in #5648 where the installation was finally able to happen, this now allowed for the updates in FAST element 2.0 to update the api report for `@microsoft/fast-components`.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [x] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

* feat: expose official Markup and Parser APIs (#5649)

* feat: expose official Markup and Parser APIs

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* Fixed an updated export from FAST element 2.0 (#5653)

* Fixed an updated export from FAST element 2.0

* Change files

* fix: prevent duplicative array observation patch (FE2) (#5656)

* fix: prevent duplicative array observation patch

* Change files

* refactor: re-organize array observer code

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* fix: defend against for/in use on arrays (FE2) (#5662)

* fix: defend against for/in use on arrays

* Change files

* test: added some basic tests for array observers

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* docs: add alpha tags to unfinished binding APIs (#5665)

* docs: add alpha tags to unfinished binding APIs

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* refactor: move template/style resolution to lazy getter (#5657)

* refactor: move template/style resolution to lazy getter

Enables access in SSR scenarios to the fully resolved template and styles.

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: handle existing shadow roots when upgrading (#5679)

* feat: handle existing shadow roots when upgrading

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* Adds TemplateParser to SSR package (#5645)

* adding template-renderer feature and spec files

* adding DOM emission configuration to TemplateRenderer

* adding render function to TemplateRenderer

* adding method description to TemplateRenderer.render

* add template parser files and entry functions

* parseTemplateToOpCodes should throw when used with an HTMLTemplateElement template

* change script structure to allow breakpoints to percist in files from build to build

* adding parse5 HTML parser

* generate AST from ViewTemplate

* implement AST traverser

* adding node type checks

* implement parser class that acts as a node visitor for node traversal

* adding flushTo method to TemplateParser

* implement completion method

* writing a few test fixtures for pure HTML templates

* add directive type and parsing test

* move template-parser files to own directory

* adding tests for directive ops

* fix-up after rebase

* emit op-codes for custom elements

* adding attribute binding ops

* formatting

* adding tests for custom element attribute bindings

* organize imports

* fix processing of interpolated bindings and add test

* Change files

* Update packages/web-components/fast-ssr/src/template-parser/template-parser.ts

Co-authored-by: Jane Chu <7559015+janechu@users.noreply.github.com>

* rename ast variable

* remove dependency on Markup.marker

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>
Co-authored-by: Jane Chu <7559015+janechu@users.noreply.github.com>

* Added specification for a FAST CLI and project initialization package (#5669)

# Pull Request

## 📖 Description

<!---
Provide some background and a description of your work.
What problem does this change solve?
Is this a breaking change, chore, fix, feature, etc?
-->
This specification is based on the need for FAST to have a CLI for accelerating workflows and provide an easy way to initialize a project. 

### 🎫 Issues

<!---
* List and link relevant issues here.
-->
Related to https://github.com/microsoft/fast/issues/5578

## 👩‍💻 Reviewer Notes

<!---
Provide some notes for reviewers to help them provide targeted feedback and testing.

Do you recommend a smoke test for this PR? What steps should be followed?
Are there particular areas of the code the reviewer should focus on?
-->
I believe some work has been done on this already but the priorities have shifted around, this is my interpretation for what the requirements are and what generally the goals should be. Please give this a thorough read and determine if this captures all requirements, an MVP roadmap is included at the bottom. This is targeting the feature branch including FAST element 2.0 and the server side rendering work as I believe these are related.

##  Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [ ] I have tested my changes.
- [x] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/Microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://www.fast.design/docs/community/code-of-conduct/#our-standards) for this project.

* Add fast command buffer (#5708)

* Adds TemplateOp to SSR template parser (#5706)

* adding template element open and close ops

* emit template open and close codes from template parser

* fleshes out template op emission

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* feat: enable multiple instances of fast-element on a page at once (#5718)

* feat: enable multiple instances of fast-element on a page at once

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* refactor: enable pluggable template compiler for SSR scenarios (#5722)

* refactor: enable pluggable template compiler for SSR scenarios

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: create unified API for parsing markers (#5727)

* feat: create unified API for parsing markers

* fix: correct logic for inserting stable first node

* Change files

* refactor: tersify compiler comment first node check

* fix: correct some API types on the Parser

* change directive op type to use return type of Parser.aggregate()

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>
Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* feat: aspected html directive exposes metadata (#5739)

* feat: aspected html directive exposes metadata

* test: expand tests around aspected directives

* Change files

* chore: add missing comment to change file

* replace Parser with Compiler

* fix: remove dependency on this from markup helpers

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>
Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* refactor: extract polyfill and polyfill-like code to an optional module (#5752)

* refactor: extract polyfill and polyfill-like code to an optional module

* Change files

* fix: correct build break in fast-foundation from removing $global

* fix: update templates to use classList and fix classList bug

* Change files

* feat: require trusted types for bindings to innerHtml & move core policy

* fix: bug that arises when there are real trusted types

* refactor: minor internal cleanup in the polyfills

* fix: remove polyfill external module dependency

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: implement template renderer infrastructure  (#5698)

* implement factory fn to create TemplateRenderer and ElementRenderer

* rename index to exports

* adding default render info object

* adding initial directive rendering

* adds initial custom element rendering

* add directive renderers

* add renderInfo to DirectiveRenderer

* use default directive renderers

* adding attribute binding tests

* ensure attributes don't get emitted twice for custom elements

* Adding internal function to render op codes so that we can omit template elements when rendering custom element templates

* emit template open and close codes from template parser

* implement FAST parser changes and fix tests

* working AspectedHTMLDirective changes into branch

* naive implementation of custom element template rendering

* adds rendering of template op code

* progress on elmeent rendering

* fixing custom element attribute rendering bug

* Change files

* adding boolean and property binding test

* fix bug preventing template elements from being parsed

* add failing template nesting test

* update parsing of content nodes to correctly render interpolated templates

* fix API report and formatting

* adding repeater rendering

* adding directive implementations for Ref, Slotted, and Children

* clean up op types to reduce rendant information

* remove commented code that is no longer needed

* adding tests for ref, slotted, and children

* re-use noop function for noop directives

* cache length of arrays in for loops

* adding style tests

* implementing style renderer

* remove 'data' from style id name

* adding tests

* renaming files to align with current conventions

* update attachShadow signature

* adding classList support

* fixing tests and supporting string types

* removing comment that is a non-concern

* add playwright install step to ci

* add browser path to ci script

* change install script to install at the package level

* update playwright

* Change files

* fixing test

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* feat: add warn/error message infrastructure (#5776)

* feat: add warn/error message infrastructure

* Change files

* feat: add sideEffects files and basic debug tests

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: new execution context design (#5800)

* refactor: new design for execution context

* feat: add two new event helpers to the execution context and tests

* fix: wip update types to match new context apis

* fix: update foundation and components template types

* Change files

* fix: update template type in fast-website

* fix: update site components for new template types

* fix: add missing api updates

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* fixes build-break caused by rebase

* feat: new HTMLDirective design (#5826)

* refactor: clean up array observer

* refactor: modernize the splice code

* chore: set up SSR package (#5589)

* project files and starting to set up test infrastructure

* incorporating ts project references and getting tests working

* adding .npmignore to ingore tests and server

* adding readmes

* Update packages/web-components/fast-ssr/package.json

Co-authored-by: Chris Holt <chhol@microsoft.com>

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>
Co-authored-by: Chris Holt <chhol@microsoft.com>

* feat: enable multiple instances of fast-element on a page at once (#5718)

* feat: enable multiple instances of fast-element on a page at once

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* refactor: extract polyfill and polyfill-like code to an optional module (#5752)

* refactor: extract polyfill and polyfill-like code to an optional module

* Change files

* fix: correct build break in fast-foundation from removing $global

* fix: update templates to use classList and fix classList bug

* Change files

* feat: require trusted types for bindings to innerHtml & move core policy

* fix: bug that arises when there are real trusted types

* refactor: minor internal cleanup in the polyfills

* fix: remove polyfill external module dependency

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: implement template renderer infrastructure  (#5698)

* implement factory fn to create TemplateRenderer and ElementRenderer

* rename index to exports

* adding default render info object

* adding initial directive rendering

* adds initial custom element rendering

* add directive renderers

* add renderInfo to DirectiveRenderer

* use default directive renderers

* adding attribute binding tests

* ensure attributes don't get emitted twice for custom elements

* Adding internal function to render op codes so that we can omit template elements when rendering custom element templates

* emit template open and close codes from template parser

* implement FAST parser changes and fix tests

* working AspectedHTMLDirective changes into branch

* naive implementation of custom element template rendering

* adds rendering of template op code

* progress on elmeent rendering

* fixing custom element attribute rendering bug

* Change files

* adding boolean and property binding test

* fix bug preventing template elements from being parsed

* add failing template nesting test

* update parsing of content nodes to correctly render interpolated templates

* fix API report and formatting

* adding repeater rendering

* adding directive implementations for Ref, Slotted, and Children

* clean up op types to reduce rendant information

* remove commented code that is no longer needed

* adding tests for ref, slotted, and children

* re-use noop function for noop directives

* cache length of arrays in for loops

* adding style tests

* implementing style renderer

* remove 'data' from style id name

* adding tests

* renaming files to align with current conventions

* update attachShadow signature

* adding classList support

* fixing tests and supporting string types

* removing comment that is a non-concern

* add playwright install step to ci

* add browser path to ci script

* change install script to install at the package level

* update playwright

* Change files

* fixing test

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* feat: new execution context design (#5800)

* refactor: new design for execution context

* feat: add two new event helpers to the execution context and tests

* fix: wip update types to match new context apis

* fix: update foundation and components template types

* Change files

* fix: update template type in fast-website

* fix: update site components for new template types

* fix: add missing api updates

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: new HTMLDirective API

* feat: new directive registration/identification model

* refactor: refine design/implementation of new directive aproach

* refactor: clean up comments, interfaces, types for directives/registries

* fix: update foundation to new APIs

* fix: update router to new directive APIs.

* fix: update ssr to new directive APIs

* refactor: clean up ssr switch to new directive APIs

* fix: update React wrapper lib to use latest APIs

* Change files

* fix: post rebase issues

* fix: update reflectAttributes directive to new directive APIs

* test: add more tests to capture new html/directive aspect scenarios

* Change files

* chore: run prettier on foundation

* Update packages/web-components/fast-ssr/src/template-parser/template-parser.spec.ts

Co-authored-by: Nicholas Rice <3213292+nicholasrice@users.noreply.github.com>

* Update packages/web-components/fast-ssr/src/template-parser/template-parser.spec.ts

Co-authored-by: Nicholas Rice <3213292+nicholasrice@users.noreply.github.com>

* Update packages/web-components/fast-foundation/src/directives/reflect-attributes.ts

Co-authored-by: Nicholas Rice <3213292+nicholasrice@users.noreply.github.com>

* Update packages/web-components/fast-foundation/src/directives/reflect-attributes.ts

Co-authored-by: Nicholas Rice <3213292+nicholasrice@users.noreply.github.com>

* chore: cleanup tests after rebase

Co-authored-by: Nicholas Rice <3213292+nicholasrice@users.noreply.github.com>
Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>
Co-authored-by: Chris Holt <chhol@microsoft.com>
Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* fix: ssr bug fixes (#5850)

* expose dom shim from package root

* ensure DOM updates are made synchronously

* upgrade lit to use latest dom shim

* fleshing out dom-shim with foundation-element requirements

* fix root <template> behavior to be more durable to formatting

* implement classList binding for native elements

* enables style retrevial for a custom element through SSR style-strategy

* clean up exports

* add tagName to elements created by ElementRenderer to be used by componentPresentation

* prettier

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* feat: new CSSDirective design (#5835)

* feat: new CSSDirective design

* feat: attach the partial helper to the css helper

* fix: update foundation to new CSSDirective API

* fix: update components to new CSSDirective API

* docs: add missing docs to CSSTEmplateTag type

* Change files

* fix: add back cssPartial with deprecation message

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* rename title attribute on disclosure to summary (#5861)

* rename title attribute on disclosure to summary

* Change files

* fix: update default value of dialog's modal attribute to false (#5860)

* update the default value of dialog  modal attribute to false

* Change files

* feat: update private change handlers to protected (#5872)

* update attribute and observable change handlers with internal logic to be protected instead of private

* Change files

* udpate api docs

* feat: trim unnecessary nodes from start end (#5892)

* remove unnecessary DOM nodes from start/end slot templates

* Change files

* fix document element bindings in SSR template rendering (#5905)

* add missing tests for host element bindings

* use parse for template rendering to support binding to document elements

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* fix various binding bugs in SSR template renderer (#5929)

* adding tests

* ensure boolean attribute bindings have value converted prior to setting attribute value

* ensure setAttribute isn't called for a null or undefined binding product

* consolidate binding rendering logic

* adding tests for binding boolean attributes and classList for template elements

* fix template binding bugs

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* fixing build / test after rebase

* chore: add api extractor to FAST SSR (#5939)

* adds api extractor and configures exports. Also removes entrypoints to certain incomplete features

* use latest api extractor

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* update after rebase

* update yarn.lock after rebase

* feat: officially expose testing helpers (#5958)

* feat: officially expose testing helpers

* Change files

* docs: improve testing helper code docs

* test: trying to fix react wrapper tests

* Change files

* update typescript to 4.7.0-beta

* fix type error in router configuration

* fixing foundation compile error

* all packages passing build

* add export paths to fast-element

* fixing reat-wrapper testing infrastructure

* fixing test in fast-website

* fixing color-explorer test

* fixing figma-plugin tests

* fixing dev server

* fixing fast-website dev

* fixing error generating docs

* add description for utility

* Change files

Co-authored-by: Rob Eisenberg <rob@bluespire.com>
Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>
Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* chore: modernize package.json and rollup for vNext (#5966)

* chore: fast-element package and build modernization

* chore: fast-foundation package and build modernization

* chore: package updates for fast-ssr

* chore: remove rollup of router

* chore: update rollup to enable package exports

* Change files

* chore: remove rollup of react-wrapper

* Change files

* chore: update package.json metadata

* Change files

* chore: ensure default export last for fast-element

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* refactor: separate update queue from DOM and fix architectural layers (#5972)

* refactor: separate update queue from DOM and fix architectural layers

* fix: update fast-foundation to not use deprecated APIs

* fix: update fast-ssr to not use deprecated APIs

* fix: update fast-react-wrapper to not use deprecated APIs

* fix: update fast-website to not use deprecated APIs

* Change files

* chore: re-enable deprecated APIs after package updates

* docs: fix some API comment typos in the update queue docs

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* fix: enable safer type inference on the repeat helper (#5975)

* fix: enable safer type inference on the repeat helper

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: enable array length observation (#5977)

* feat: enable array length observation

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* fix: merge bug related to moved APIs (#5978)

* fix: merge bug related to moved APIs

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* chore: add SSR documentation (#5969)

* adding ssr documentation

* exporting ViewBehaviorFactoryRenderer type

* pretty pretty

* fixing api docs

* pretty pretty pretty

* Update packages/web-components/fast-ssr/README.md

Co-authored-by: Rob Eisenberg <EisenbergEffect@users.noreply.github.com>

* Update packages/web-components/fast-ssr/README.md

Co-authored-by: Rob Eisenberg <EisenbergEffect@users.noreply.github.com>

* Update packages/web-components/fast-ssr/README.md

Co-authored-by: Rob Eisenberg <EisenbergEffect@users.noreply.github.com>

* Update packages/web-components/fast-ssr/README.md

Co-authored-by: Rob Eisenberg <EisenbergEffect@users.noreply.github.com>

* Update packages/web-components/fast-ssr/README.md

Co-authored-by: Rob Eisenberg <EisenbergEffect@users.noreply.github.com>

* Update packages/web-components/fast-ssr/README.md

Co-authored-by: Jane Chu <7559015+janechu@users.noreply.github.com>

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>
Co-authored-by: Rob Eisenberg <EisenbergEffect@users.noreply.github.com>
Co-authored-by: Jane Chu <7559015+janechu@users.noreply.github.com>

* feat: introduce binding mode and binding config define APIs (#5988)

* feat: introduce AspectType

* feat: introduce binding mode and binding config define APIs

* refactor: refine binding mode types

* docs: document binding APIs

* Change files

* refactor: make the standard event binding a default for mode creation

* fix: correct a generics issue and export a missing type

* fix: default event type for binding modes never undefined

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: add two-way binding (#5995)

* feat: add two-way binding

* test: add tests for previously created binding modes

* test: add tests for two-way bindings

* test: add event binding tests

* Change files

* fix: prevent memory leek in one-time events

* fix: prevent clashing state for behaviors on the same node

* fix: more internal consistency for binding state

* fix: more consistency and prevent internal clobber of directive state

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* chore: remove dependency on ie11 types (#5941)

* feat: new execution context design (#5800)

* refactor: new design for execution context

* feat: add two new event helpers to the execution context and tests

* fix: wip update types to match new context apis

* fix: update foundation and components template types

* Change files

* fix: update template type in fast-website

* fix: update site components for new template types

* fix: add missing api updates

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* remove unnecessary dependency on @types/ie11 package

* Change files

Co-authored-by: Rob Eisenberg <EisenbergEffect@users.noreply.github.com>
Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* fix incorrect and non-semantic slot names for search (#5942)

* fix incorrect and unsemantic slot names for search

* Change files

* remove deprecated keyCodes and add additional "keys" (#5944)

* remove deprecated keycodes and add additional keys

* Change files

* remove deprecated keyCode m fn

* remove deprecated item slot on accordion (#5945)

* remove deprecated item slot on accordion

* Change files

* remove classes and parts from slots on `fast-foundation` templates (#5946)

* fixes build-break caused by rebase

* feat: update private change handlers to protected (#5872)

* update attribute and observable change handlers with internal logic to be protected instead of private

* Change files

* udpate api docs

* fixing build / test after rebase

* remove class and part names from slots in fast foundation templates

* Change files

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* feat: add splice strategies for array observation (#5999)

* feat: extract splice merging to a strategy

* feat: enable splice strategy to control splice creation per array method

* feat: add reset splice strategy

* refactor: made array length observation part of the standard interface

* feat: add SpliceStrategySupport and fix enum/literals

* refactor: re-organize array observation code

* chore: add splice-strategies to the package and clean up exports

* Change files

* chore: remove invalid eslint comments

* test: add array observer tests for all array mutations

* fix: adding extensions back to exports

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* Implement ElementRenderer and DOM shim directly into SSR package, remove lit-labs/ssr dependency (#5997)

* integrate DOM shim and update acknowledgements

* remove lit-labs/ssr dependency

* add license info to acknowledgements

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* fix(fast-element): do not notify splices for changes pre-subscription (v2) (#6006)

* fix(fast-element): do not notify splices for changes pre-subscription

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* remove private field from fast-ssr (#6010)

* remove private field from package.json

* Change files

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* changed fast-element to a peer dependency (#6011)

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* chore: strip internals from package d.ts files (#6015)

* chore: configure fast-element for internal stripping

* chore: configure fast-foundation for internals stripping

* chore: configure fast-ssr for internals stripping

* chore: configure fast-router for internals stripping

* chore: finish cleanup of internals stripping

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: update tabs bool attr defaulting to true (#6020)

* change activeindicator attribute in tabs to hide-active-indicator to better support boolean attribute behavior

* Change files

* Add adaptive-ui package (#5989)

* chore: update api extractor to support node 16 (#6032)

* update api extractor and typescript to use the latest versions

* Change files

* update dialog trap focus to default to false (#6016)

* change trapFocus on dialog to noFocusTrap to better support boolean attributes

* Change files

* update SSR npmignore file w/ new project structure (#6017)

* update npmignore file w/ new project structure

* Change files

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* fix: add support for foundation components to SSR DOM shim (#6031)

* add files and foundation dev dependency

* fixing issue where getter and static property "attributes" was causing static to clobber the getter

* removing style utilities

* adding uninstall dom shim test util

* adding foundation DOM shim

* Revert "removing style utilities"

This reverts commit bfa5816d72.

* deprecate styling utilities and hard-code focus-visible

* fixing errors in foundation element rendering

* cleans up foundation-dom-shim spec file

* adding un-install dom shim

* adding exports field for foundation shim and install-foundation-shim

* Change files

* remove foundation DOM shim and integrate it into minimal DOM shim

* fixing deprecation notice

* remove uninstall-dom-shim because it is no longer needed

* removing foundation DOM shim

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* docs: update a few readme files (#6035)

* docs: update a few readme files

* Change files

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>

* feat: fast-element utilities, hooks, disposable, and binding observer improvements (#6030)

* chore: rebase to accept typescript and api-extractor updates

* feat: enable subscribing deeply to observables

* feat: introduce Disposable interface and use throughout fast-element

* test: add initial tests for makeObservable utility

* test: add initial tests for the watch utility

* feat: initial prototype of useState() and useEffect() hooks

* test: add tests for the useState() hook

* refactor: remove disconnect from BindingObserve and add  sync updates

* chore: fixing up file extension in tests and for disposable

* chore: various fixes for Node16 and package exports

* chore: update core web component library webpack and karma config

* Change files

* fix: temporary fix for site build

* chore: fix adaptive-ui build and test

* Change files

* Users/chhol/remove unnecessary site utilities (#6036)

* remove site util source directory and update website webpack loaders for assets

* fixing fast-foundation dependency version to install workspace version

* fixing test errors in fast-site-utilities

* removing eslint from site-utilties

* fixing path to spect files in adaptive-ui

* fixing color-explorer build

* remove babel-loader from website

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* Change files

* chore: remove prettier from site-utilities

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>
Co-authored-by: Chris Holt <chhol@microsoft.com>
Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* fix: post rebase fixes

* fixing FE2 build breaks (#6044)

* add missing dependency to fast-animation

* adding missing dependency to fast-color-explorer

* update webpack in fast-animation

* Change files

* fix webpack config

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* add PW browser install step to ci-validate-platforms process (#6045)

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* replace custom badge URL w/ badge.fury.io path (#6046)

Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>

* Remove the branch specific logic for version updates (#6047)

Co-authored-by: Nicholas Rice <3213292+nicholasrice@users.noreply.github.com>
Co-authored-by: nicholasrice <nicholasrice@users.noreply.github.com>
Co-authored-by: Chris Holt <chhol@microsoft.com>
Co-authored-by: Jane Chu <7559015+janechu@users.noreply.github.com>
Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>
Co-authored-by: William Wagner <44823142+williamw2@users.noreply.github.com>
Co-authored-by: Brian Heston <47367562+bheston@users.noreply.github.com>
2022-05-31 14:49:22 -07:00
..
carousel chore: remove old explore links that will no longer point the the React version of the components (#3391) 2020-06-29 12:01:15 -07:00
date-picker Date picker spec (#4906) 2022-03-31 11:43:51 -07:00
typography chore: remove old explore links that will no longer point the the React version of the components (#3391) 2020-06-29 12:01:15 -07:00
README.md chore: removed outdated specs and updated readme (#4518) 2021-03-30 15:45:41 -07:00
avatar.md docs(spec): add avatar spec (#3555) 2020-08-06 16:43:46 -07:00
fast-cli.md FASTElement 2.0 (#5282) 2022-05-31 14:49:22 -07:00
template.md doc: update the component spec and establish new process checkpoints (#4673) 2021-05-07 10:35:05 -04:00

README.md

Specs

Here you'll find specifications for custom elements and other library features.

Note: When authoring a new spec, please use our standard spec template. Specs can be submitted in the form of a PR. Prior to creating a PR, be sure to remove any boilerplate from the spec template which was not used. The PR that introduces your spec should also add a link to this readme in the specs section below.

Web Component Specifications

Name Spec Component
Accordion
Alert -- --
Anchored region
Avatar --
Badge
Breadcrumb
Card
Carousel -- --
Checkbox
Combobox --
Data grid
Dialog
Disclosure
Flipper
Form associated custom elements
Horizontal scroll --
Listbox
Menu
Number field
Progress
Radio
Radio group
Rating -- --
Select --
Skeleton
Slider
Spin button -- --
Switch
Tabs
Text area
Text field
Toolbar --
Tooltip
Tree view
Typography --