Workday® is the registered trademark of Workday, Inc. This project is not affiliated with Workday, Inc. and Workday, Inc. does not endorse this project.
The purposes of these components are:
Wrap the Canvas Kit CSS components to reduce boilerplate code and typos
Offer alternatives to Canvas Kit React components that do not have CSS equivalents
Plug into HTML form validation
React based applications would benefit from the direct usage of the React components included in Canvas Kit. Web Component based applications can easily include these components or wrap the React components using PReact as demonstrated here.
New collaborators or contributors are welcome.
Logically each Canvas Kit component should be wrapped as a LitElement web component. However some of the Canvas Kit component utilize descendant CSS selectors that are unable to pierce web component shadow DOMs. For example, error.scss defines
wdc-form-error at the form field level and has descendant selectors for text and select inputs. There are three potential solutions to this issue:
Add CSS selectors to child elements for :host-context()
Forego the use of the Shadow DOM and create elements in the Light DOM.
The Light DOM option was used for select components. The ::slotted and ::part solution would require upstream changes to Canvas Kit SCSS or a large amount of forked SCSS to replicate SCSS parent selectors. Likewise the :host-context() solution would require advanced introspection of the SCSS and targeted CSS for child components. Also FireFox does not support complex :host CSS selectors. Due to the complex nature of the comobox component it does use the Shadow DOM and has CSS selectors specifically for error highlighting.
The form related web components are added to the Light DOM and their styles are individually added to the closest shadow DOM or document. Typically form components will be wrapped by another custom element or the provided lwdc-form element so the styles will have some isolation and not excessive duplication.
The LitElement components utilize two experimental browser features:
The current version of Chrome supports both of these features without any extra configuration. Firefox support is evolving:
Partial form associated custom element support can be activated in the latest version of Firefox via the
dom.webcomponents.elementInternals.enabled setting in
A minimal pollyfill is used to provide the missing form associated element features in Firefox in order to provide full form validation.
Build the components:
yarn install then
Build the Storybook:
Run the Storybook:
yarn add @aaronanderson/lwdc
Local testing can be performed by checking this project out, running
npm link in the checked out directory, and then running
npm link @aaronanderson/lwdc in the target project.
yarn pack in the checked out directory and then run
yarn remove @aaronanderson/lwdc,
yarn cache clean,
yarn add file:aaronanderson-lwdc-v1.0.0.tgz in the target project to install the latest version.