Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(material/tree): add levelAccessor, childrenAccessor, TreeKeyManag… #28071

Closed
wants to merge 43 commits into from

Conversation

zarend
Copy link
Contributor

@zarend zarend commented Nov 7, 2023

…er; a11y and docs improvements

Update multiple facets of Tree component. Add APIs to manage data models, improve existing behaviors, add keyboard functionality and update documentation.

Add APIs options to the Tree data model by introducing levelAccessor and childrenAccessor. See “Api Addition” for usage. Currently, Tree component use TreeControl to manage data model. When applied, add levelAccessor and childrenAccessor functions as alternatives to TreeControl.

Add TreeKeyManager, which provides keyboard functionality. Currently Tree component allows developers to manage focus by setting tabindex on each tree node. When applied, Tree manages its own focus using key manager pattern. Keyboard commands match WAI ARIA Tree View Pattern. See “Deprecated” for adopting changes to existing applications.

Correct the ARIA semantics of Tree and Tree node components.

Document updated APIs and behaviors. Refine documentation of existing APIs and behaviors.

Changes to Cdk Tree API also apply to Mat Tree API. See “Deprecated” for adopting changes to existing applications.

Accessibility:

  • add CdkTreeKeyManager to provide keyboard navigation for CdkTree and MatTree
  • Improve keyboard usability of CdkTreeNodeToggle.
  • Improve ARIA semantics of CdkTree, CdkTreeNode, Tree and TreeNode components
  • Fix miscellaneous accessibility issues in tree and cdk-tree examples
  • Add accessibility instructions to documentation

Documentation:

  • Add API and usage examples for TreeKeyManager
  • Update @angular/cdk/tree and @angular/material/tree to be more consistent
  • Update examples to use levelAccessor and childrenAccessor
  • Add example for (activation) on MatTreeNode and CdkTreeNode

API ADDITION: add CdkTree#childrenAccessor and CdkTree#levelAccessor

  • Add CdkTree#childrenAccessor. Given a data node, childrenAccessor determines the children of that node.
  • Add CdkTree#levelAccessor. Given a data node, levelAccessor determines the level of the node in the parent hierarchy.
  • CdkTreeNode#levelAcessor and CdkTreeNode#childrenAccessor replace CdkTreeNode#treeControl.

See “Deprecated” for updating apps using treeControl.

API ADDITION: control expanded state of tree nodes using isExpandable and isExpanded

  • Add CdkTreeNode#isExpandable, determines if argument tree node can be expanded or collapsed.
  • CdkTreeNode#isExpanded to specify the expanded state. Has no effect if node is not expandable.
  • Add NestedTreeControlOptions#isExpandable function, determines if argument tree node can be expanded or collapsed.

For trees using treeControl, recommend providing isExpandable if not already provided. See “Deprecated” for more information on updating applications.

API ADDITION: use CdkTree to manage expansion state

  • Add CdkTree#isExpanded method.
  • Add CdkTree#toggle, CdkTree#expand and CdkTree#collapse methods.
  • Add CdkTree#toggleDescendants, CdkTree#expandDescendants, and CdkTree#collapseDescendants methods to CdkTree
  • Add CdkTree#expandAll and CdkTree#collapseAll methods
  • Add expandedChange Output to CdkTreeNode

API ADDITION: add injection token for tree-key-manager

  • Add TREE_KEY_MANAGER injection token. When provided, tree uses given key manager
  • TreeKeyManagerStrategy interface, which defines API contract of TREE_KEY_MANAGER

BEHAVIOR CHANGE: MatTree and CdkTree components respond to keyboard navigation.

  • CdkTree and MatTree respond to arrow keys, page up, page down, etc.; Keyboard commands match WAI ARIA Tree View Pattern.
  • Can no longer set the tabindex on MatTreeNode. See “Deprecated” for adopting existing applications.
  • Add TreeKeyManager to cdk/a11y

DEPRECATED: Tree controller deprecated. Use one of levelAccessor or childrenAccessor instead. To be removed in a future version.

  • BaseTreeControl, TreeControl, FlatTreeControl, and NestedTreeControl deprecated
  • CdkTree#treeControl deprecated. Provide one of CdkTree#levelAccessor or CdkTree#childrenAccessor instead.
  • MatTreeFlattener deprecated. Use MatTree#childrenAccessor and MatTreeNode#isExpandable instead.
  • MatTreeFlatDataSource deprecated. Use one of levelAccessor or childrenAccessor instead of TreeControl.

Note when upgrading: isExpandable works differently on Trees using treeControl than trees using childrenAccessor or levelAccessor. Nodes on trees that have a treeControl are expandable by default. Nodes on trees using childrenAccessor or levelAccessor are not expandable by default. Provide isExpandable to override default behavior.

DEPRECATED: Setting tabindex of tree nodes deprecated. By default, Tree ignores tabindex passed to tree nodes.

  • MatTreeNode#tabIndex deprecated. MatTreeNode ignores Input tabIndex and manages its own focus behavior.
  • MatTreeNode#defaultTabIndex deprecated. MatTreeNode ignores defaultTabIndex and manages its own focus behavior.
  • MatNestedTreeNode#tabIndex deprecated. MatTreeNode ignores Input defaultTabIndex and manages its own focus behavior.
  • LegacyTreeKeyManager and LEGACY_TREE_KEY_MANAGER_FACTORY_PROVIDER deprecated. Inject a TreeKeyManagerFactory to customize keyboard behavior.

Note when upgrading: an opt-out is available for keyboard functionality changes. Provide LEGACY_TREE_KEY_MANAGER_FACTORY_PROVIDER to opt-out of Tree managing its own focus. When provided, Tree does not manage it’s own focus and respects tabindex passed to TreeNode. When provided, have the same focus behavior as before this commit is applied.

Add Legacy Keyboard Interface demo, which shows usage of LEGACY_TREE_KEY_MANAGER_FACTORY_PROVIDER. Add Custom Key Manager, which shows usage of injecting a TreeKeyManagerStrategy

DEPRECATED: disabled renamed to isDisabled.

  • CdkTreeNode#disabled deprecated and alias to CdkTreeNode#isDisabled

crisbeto and others added 30 commits October 31, 2023 15:26
…r#28025)

Fixes that the schematics would throw if the app is using the `browser-esbuild` builder from the CLI.
Fixes a failing test in the `ng add` schematic.
…vate to protected (angular#28019) (angular#28020)

Having customized MatDialog allow to have customized cdk/dialog inside of it.
* fix(cdk/accordion): add `CDK_ACCORDION` export

Fixes an issue in the Angular CDK `accordion` component where `CDK_ACCORDION` injection token cannot be imported from `@angular/cdk/accordion`. This is because `public-api.ts` did not contain `CDK_ACCORDION` export.

* fix(cdk/accordion): update public api
…ponents (angular#28024)

These changes add a schematic that will log a fatal error and prevent the app from updating to v17 if it's using legacy components. Legacy components have been deleted in v17 so the app won't build if it updates.
…angular#28030)

* refactor(material/button): clean up tokens and use tokens for ripples

These changes rework the existing button setup for emitting different color palette tokens to match how it's being done in the rest of the project. Then it builds on top of the changes to introduce Angular-specific tokens for each of the buttons so that we can implement the ripples through them, instead of the existing variables that are used for all button types at the same time.

* fixup! refactor(material/button): clean up tokens and use tokens for ripples
this particular example had css for a mdc form field that isn't reference in the example
Switches to use the shared dev-infra actions for setting up Bazel, RBE
and Yarn. This was not done as part of the GHA migrations.
Automatically deploys the dev-app to firebase for pushes
to the `main` branch.

Note: not using `material2-dev` as it would complicate automated
deployement as service key creation is limited given the project
being a 1P-managed GCP project.
…#28042)

Switches the ripple element color to be controlled through a token.
The deploy script seems rather legacy and also doesn't ensure
that the dist directory is actually present. We can simplify
the logic and potentially delete the script in the future.
…28049)

This will make it easier to discover the URL for the dev-app
deployment.
Instead of using a preview channel, we are deploying to a live
channel so that we have a static URL for team members.

For this we created a separate new sub-site in the ng-dev-previews
Firebase project- still allowing us to benefit from the dev-infra
maintenance of the project (and token/secret management).
Updates the repo to Angular `17.0.0-rc.2`.
Reworks the chips to use input transforms instead of mixins.
Reworks the select to use input transforms instead of mixins.
Reworks the expansion panel to use input transforms instead of mixins.
Reworks the CDK tree to use input transforms instead of getters and setters.
Reworks the Material tree to use input transforms instead of mixins.
Reworks the radio button to use input transforms instead of mixins.
Reworks the tabs to use input transforms instead of mixins.
Reworks the slider to use input transforms instead of mixins.
Reworks the sort header to use input transforms instead of mixins.
Reworks the datepicker to use input transforms instead of mixins.
crisbeto and others added 11 commits November 6, 2023 14:00
Reworks the paginator to use input transforms instead of mixins.
Reworks the toolbar to use input transforms instead of mixins.
Reworks the icon to use input transforms instead of mixins.
Reworks the stepper to use input transforms instead of mixins.
Reworks the progress spinner to use input transforms instead of mixins.
Reworks the progress bar to use input transforms instead of mixins.
Switches all of our tests to use the new control flow in order to validate that it works as expected.
Switches the dev and e2e apps to use the new control flow.
Switches the docs examples to use the new control flow instead of `*ngIf`, `*ngFor` and `*ngSwitch`.
Const enums prevent enabling the `isolatedModules` check which is needed for fast TS compilation based on transpileModule API.
@angular-robot angular-robot bot added the detected: deprecation PR contains a commit with a deprecation label Nov 7, 2023
@zarend zarend changed the base branch from main to cdk-tree-revamp November 7, 2023 18:53
@zarend zarend closed this Nov 8, 2023
@zarend zarend deleted the cdk-tree-revamp-merge1 branch November 8, 2023 22:01
@angular-automatic-lock-bot
Copy link

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Dec 9, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
detected: deprecation PR contains a commit with a deprecation
Projects
None yet
Development

Successfully merging this pull request may close these issues.