From 0a1b2475131c22fd3e4cee4ff8bdfe3c78d35754 Mon Sep 17 00:00:00 2001 From: Thomas Allmer Date: Mon, 12 Oct 2020 19:39:18 +0200 Subject: [PATCH] chore: new website using rocket Co-authored-by: Lars den Bakker --- .github/ISSUE_TEMPLATE/bug_report.md | 19 + .github/ISSUE_TEMPLATE/feature_request.md | 9 + .github/pull_request_template.md | 3 + .gitignore | 8 + .nvmrc | 2 +- cli-build.js | 88 - cli-start.js | 68 - docs/.eleventy.js | 27 - docs/404.md | 8 + docs/README.md | 30 - docs/_assets/head.html | 9 + docs/_assets/icons/android-chrome-192x192.png | Bin 0 -> 16515 bytes docs/_assets/icons/android-chrome-512x512.png | Bin 0 -> 50024 bytes docs/_assets/icons/apple-touch-icon.png | Bin 0 -> 6313 bytes docs/_assets/icons/favicon-16x16.png | Bin 0 -> 1102 bytes docs/_assets/icons/favicon-32x32.png | Bin 0 -> 1615 bytes docs/_assets/icons/maskable-icon.png | Bin 0 -> 50024 bytes docs/_assets/icons/mstile-150x150.png | Bin 0 -> 4243 bytes docs/_assets/icons/safari-pinned-tab.svg | 60 + docs/_assets/logo.svg | 1 + docs/_assets/social-media-image.jpg | Bin 0 -> 12064 bytes docs/_assets/style.css | 130 + docs/_assets/variables.css | 140 + docs/_building-rollup/createMpaConfig.js | 20 - docs/_data/baseLibraries.js | 90 + docs/_data/componentLibraries.js | 156 + docs/_data/footer.json | 49 + docs/_data/layout.js | 1 - docs/_data/rocketLaunch.json | 4 + docs/_data/site.js | 40 +- docs/_includes/home.njk | 92 - docs/_includes/layout.njk | 33 - docs/_includes/partials/content-footer.njk | 6 + docs/_includes/partials/header.njk | 44 - docs/_includes/partials/meta.njk | 34 - docs/_includes/partials/service-worker.njk | 42 - docs/_includes/partials/sidebar-about.njk | 14 - docs/_includes/partials/sidebar-faq.njk | 30 - docs/_includes/partials/sidebar-guide.njk | 233 - docs/_includes/partials/sidebar-script.njk | 18 - docs/_includes/partials/sidebar.njk | 41 - docs/_plugin-mdjs/index.js | 46 - docs/_redirects | 42 + docs/about/blog.md | 33 - docs/about/contact.md | 15 - docs/about/rationales.md | 75 - docs/automating/README.md | 47 - .../images/blog-header.jpg | Bin 0 -> 10992 bytes .../images/media-image.jpg | Bin 0 -> 12064 bytes .../announcing-open-web-components/index.md | 176 + docs/blog/index.md | 19 + .../images/01-watch-mode-intro.gif | Bin 0 -> 430867 bytes .../images/02-debugging-in-browser.png | Bin 0 -> 64880 bytes .../images/03-coverage-overview.png | Bin 0 -> 15334 bytes .../images/04-coverage-line-by-line.png | Bin 0 -> 20149 bytes .../images/05-coverage-line-by-line-else.png | Bin 0 -> 9119 bytes .../images/blog-header.jpg | Bin 0 -> 10992 bytes .../images/media-image.jpg | Bin 0 -> 12064 bytes .../index.md | 971 ++ .../images/blog-header.jpg | Bin 0 -> 10992 bytes .../images/media-image.jpg | Bin 0 -> 12064 bytes .../the-all-new-open-web-components/index.md | 83 + docs/browserconfig.xml | 9 + docs/building/README.md | 41 - docs/building/building-rollup.md | 1 - docs/building/polyfills-loader.md | 1 - docs/building/rollup-plugin-html.md | 1 - .../rollup-plugin-polyfills-loader.md | 1 - docs/developing/README.md | 59 - docs/developing/best-practices.md | 26 - docs/developing/es-dev-server.md | 942 -- docs/developing/ide.md | 74 - docs/developing/lit-helpers.md | 1 - docs/developing/lit-html.md | 26 - docs/developing/types.md | 106 - docs/{about/README.md => discover/about.md} | 24 +- docs/discover/slack.md | 5 + docs/docs/building/index.md | 3 + docs/docs/building/overview.md | 5 + docs/docs/building/rollup.md | 458 + docs/docs/demoing/index.md | 3 + .../demoing/storybook-addon-markdown-docs.md | 19 + docs/docs/demoing/storybook.md | 321 + docs/docs/development/dedupe-mixin.md | 205 + .../development/generator.md} | 16 +- docs/docs/development/index.md | 3 + docs/docs/development/lit-helpers.md | 196 + docs/docs/development/scoped-elements.md | 323 + docs/docs/experimental/index.md | 3 + .../docs/experimental/mdjs.md | 12 +- docs/docs/index.md | 10 + docs/docs/legacy/index.md | 3 + docs/docs/legacy/legacy-projects.md | 18 + .../linting/eslint-plugin-lit-a11y/index.md | 3 + .../eslint-plugin-lit-a11y/overview.md | 106 + .../rules/accessible-emoji.md | 50 + .../eslint-plugin-lit-a11y/rules/alt-text.md | 51 + .../rules/anchor-has-content.md | 31 + .../rules/anchor-is-valid.md | 235 + .../aria-activedescendant-has-tabindex.md | 35 + .../rules/aria-attr-valid-value.md | 23 + .../rules/aria-attrs.md | 21 + .../eslint-plugin-lit-a11y/rules/aria-role.md | 39 + .../rules/aria-unsupported-elements.md | 28 + .../rules/autocomplete-valid.md | 37 + .../rules/click-events-have-key-events.md | 55 + .../rules/heading-has-content.md | 113 + .../rules/iframe-title.md | 23 + .../rules/img-redundant-alt.md | 44 + .../rules/mouse-events-have-key-events.md | 57 + .../rules/no-access-key.md | 25 + .../rules/no-autofocus.md | 30 + .../rules/no-distracting-elements.md | 30 + .../rules/no-invalid-change-handler.md | 38 + .../rules/no-redundant-role.md | 39 + .../rules/role-has-required-aria-attrs.md | 53 + .../rules/role-supports-aria-attr.md | 37 + .../eslint-plugin-lit-a11y/rules/scope.md | 61 + .../rules/tabindex-no-positive.md | 42 + docs/docs/linting/index.md | 3 + docs/docs/testing/chai-a11y-axe.md | 67 + docs/docs/testing/helpers.md | 293 + docs/docs/testing/index.md | 1 + docs/docs/testing/semantic-dom-diff.md | 355 + docs/docs/testing/testing-package.md | 70 + docs/faq/README.md | 270 - docs/favicon.ico | Bin 0 -> 15086 bytes docs/favicon.png | Bin 3768 -> 0 bytes docs/guide/README.md | 45 - docs/guide/component-libraries.md | 114 - docs/guide/dedupe-mixin.md | 1 - .../README.md => guides/app/deploying.md} | 10 +- docs/guides/app/getting-started.md | 10 + docs/guides/app/index.md | 3 + docs/guides/app/multi-page/building.md | 7 + docs/guides/app/multi-page/getting-started.md | 5 + docs/guides/app/multi-page/index.md | 3 + docs/guides/app/single-page/building.md | 7 + .../guides/app/single-page/getting-started.md | 5 + docs/guides/app/single-page/index.md | 3 + docs/guides/community/base-libraries.md | 26 + docs/guides/community/component-libraries.md | 16 + docs/guides/community/getting-started.md | 19 + docs/guides/community/index.md | 3 + .../developing-components}/code-examples.md | 11 +- .../developing-components/codelabs.md} | 21 +- .../developing-components/getting-started.md | 39 + .../developing-components/going-buildless.md | 39 + docs/guides/developing-components/index.md | 3 + .../developing-components/publishing.md} | 77 +- docs/guides/developing-components/testing.md | 29 + docs/guides/developing-components/types.md | 26 + docs/guides/index.md | 32 + .../knowledge/attributes-and-properties.md | 165 + docs/{faq => guides/knowledge}/events.md | 10 +- docs/guides/knowledge/index.md | 3 + docs/guides/knowledge/lit-element/index.md | 3 + .../knowledge/lit-element/lifecycle.md} | 18 +- .../knowledge/lit-element/rendering.md} | 12 +- docs/guides/knowledge/styling/index.md | 3 + .../styling/style-host-via-property.md | 45 + .../styling/styles-piercing-shadow-dom.md | 52 + .../knowledge/testing/events.md} | 10 +- docs/guides/knowledge/testing/index.md | 3 + .../knowledge/testing/initialization.md} | 10 +- docs/guides/knowledge/testing/stubs.md | 63 + .../assets}/intellij-syntax-highlighting.png | Bin docs/guides/tools/ide.md | 58 + docs/guides/tools/index.md | 3 + docs/guides/tools/linting-and-formatting.md | 86 + docs/hero.png | Bin 22190 -> 0 bytes docs/icons/icon-128x128.png | Bin 6634 -> 0 bytes docs/icons/icon-512x512.png | Bin 30184 -> 0 bytes docs/index.md | 23 + docs/logo.png | Bin 10144 -> 0 bytes docs/manifest.json | 23 - docs/mdjs/README.md | 1 - docs/scoped-elements/README.md | 1 - docs/styles.css | 1 - docs/testing/README.md | 53 - docs/testing/semantic-dom-diff.md | 1 - docs/testing/testing-chai-a11y-axe.md | 1 - docs/testing/testing-helpers.md | 1 - docs/testing/testing.md | 1 - docs/webmanifest.json | 29 + netlify.toml | 14 +- package.json | 16 +- packages/building-utils/package.json | 2 +- .../polyfill-multiple-legacy.html | 2 +- .../create-index-html/polyfill-multiple.html | 2 +- .../create-index-html/polyfill-wc.html | 2 +- .../codelabs/src/basics/web-components.md | 8 +- .../codelabs/src/intermediate/lit-html.md | 10 +- .../demoing-storybook/demo/src/DemoWcCard.js | 8 +- .../stories/markdown-demo-wc-card.stories.md | 4 +- packages/demoing-storybook/package.json | 2 +- .../docs/rules/anchor-is-valid.md | 6 +- packages/mdjs/demo/stories/src/DemoWcCard.js | 8 +- packages/rollup-plugin-html/package.json | 2 +- .../package.json | 2 +- packages/semantic-dom-diff/README.md | 20 +- .../demo/src/DemoWcCard.js | 8 +- .../package.json | 2 +- .../__snapshots__/mdjsToCsf.test.js.snap.js | 9 +- .../demo/src/DemoWcCard.js | 8 +- patches/@11ty+eleventy+0.11.0.patch | 13 - rocket.config.mjs | 9 + yarn.lock | 8907 +++++++++++------ {docs => ~docs}/demoing/MIGRATION.md | 0 {docs => ~docs}/demoing/README.md | 0 .../demoing/demo/custom-elements.json | 0 .../demoing/storybook-addon-markdown-docs.md | 0 {docs => ~docs}/ide-vscode-settings.gif | Bin {docs => ~docs}/linting/README.md | 0 {docs => ~docs}/linting/linting-eslint.md | 0 ~docs/linting/linting-types.md | 58 + {docs => ~docs}/types.gif | Bin 217 files changed, 12776 insertions(+), 5915 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/pull_request_template.md delete mode 100644 cli-build.js delete mode 100644 cli-start.js delete mode 100644 docs/.eleventy.js create mode 100644 docs/404.md delete mode 100644 docs/README.md create mode 100644 docs/_assets/head.html create mode 100644 docs/_assets/icons/android-chrome-192x192.png create mode 100644 docs/_assets/icons/android-chrome-512x512.png create mode 100644 docs/_assets/icons/apple-touch-icon.png create mode 100644 docs/_assets/icons/favicon-16x16.png create mode 100644 docs/_assets/icons/favicon-32x32.png create mode 100644 docs/_assets/icons/maskable-icon.png create mode 100644 docs/_assets/icons/mstile-150x150.png create mode 100644 docs/_assets/icons/safari-pinned-tab.svg create mode 100644 docs/_assets/logo.svg create mode 100644 docs/_assets/social-media-image.jpg create mode 100644 docs/_assets/style.css create mode 100644 docs/_assets/variables.css delete mode 100644 docs/_building-rollup/createMpaConfig.js create mode 100644 docs/_data/baseLibraries.js create mode 100644 docs/_data/componentLibraries.js create mode 100644 docs/_data/footer.json delete mode 100644 docs/_data/layout.js create mode 100644 docs/_data/rocketLaunch.json delete mode 100644 docs/_includes/home.njk delete mode 100644 docs/_includes/layout.njk create mode 100644 docs/_includes/partials/content-footer.njk delete mode 100644 docs/_includes/partials/header.njk delete mode 100644 docs/_includes/partials/meta.njk delete mode 100644 docs/_includes/partials/service-worker.njk delete mode 100644 docs/_includes/partials/sidebar-about.njk delete mode 100644 docs/_includes/partials/sidebar-faq.njk delete mode 100644 docs/_includes/partials/sidebar-guide.njk delete mode 100644 docs/_includes/partials/sidebar-script.njk delete mode 100644 docs/_includes/partials/sidebar.njk delete mode 100644 docs/_plugin-mdjs/index.js create mode 100644 docs/_redirects delete mode 100644 docs/about/blog.md delete mode 100644 docs/about/contact.md delete mode 100644 docs/about/rationales.md delete mode 100644 docs/automating/README.md create mode 100644 docs/blog/announcing-open-web-components/images/blog-header.jpg create mode 100644 docs/blog/announcing-open-web-components/images/media-image.jpg create mode 100644 docs/blog/announcing-open-web-components/index.md create mode 100644 docs/blog/index.md create mode 100644 docs/blog/testing-workflow-for-web-components/images/01-watch-mode-intro.gif create mode 100644 docs/blog/testing-workflow-for-web-components/images/02-debugging-in-browser.png create mode 100644 docs/blog/testing-workflow-for-web-components/images/03-coverage-overview.png create mode 100644 docs/blog/testing-workflow-for-web-components/images/04-coverage-line-by-line.png create mode 100644 docs/blog/testing-workflow-for-web-components/images/05-coverage-line-by-line-else.png create mode 100644 docs/blog/testing-workflow-for-web-components/images/blog-header.jpg create mode 100644 docs/blog/testing-workflow-for-web-components/images/media-image.jpg create mode 100644 docs/blog/testing-workflow-for-web-components/index.md create mode 100644 docs/blog/the-all-new-open-web-components/images/blog-header.jpg create mode 100644 docs/blog/the-all-new-open-web-components/images/media-image.jpg create mode 100644 docs/blog/the-all-new-open-web-components/index.md create mode 100644 docs/browserconfig.xml delete mode 100644 docs/building/README.md delete mode 120000 docs/building/building-rollup.md delete mode 120000 docs/building/polyfills-loader.md delete mode 120000 docs/building/rollup-plugin-html.md delete mode 120000 docs/building/rollup-plugin-polyfills-loader.md delete mode 100644 docs/developing/README.md delete mode 100644 docs/developing/best-practices.md delete mode 100644 docs/developing/es-dev-server.md delete mode 100644 docs/developing/ide.md delete mode 120000 docs/developing/lit-helpers.md delete mode 100644 docs/developing/lit-html.md delete mode 100644 docs/developing/types.md rename docs/{about/README.md => discover/about.md} (76%) create mode 100644 docs/discover/slack.md create mode 100644 docs/docs/building/index.md create mode 100644 docs/docs/building/overview.md create mode 100644 docs/docs/building/rollup.md create mode 100644 docs/docs/demoing/index.md create mode 100644 docs/docs/demoing/storybook-addon-markdown-docs.md create mode 100644 docs/docs/demoing/storybook.md create mode 100644 docs/docs/development/dedupe-mixin.md rename docs/{init/README.md => docs/development/generator.md} (85%) create mode 100644 docs/docs/development/index.md create mode 100644 docs/docs/development/lit-helpers.md create mode 100644 docs/docs/development/scoped-elements.md create mode 100644 docs/docs/experimental/index.md rename packages/mdjs/README.md => docs/docs/experimental/mdjs.md (93%) create mode 100644 docs/docs/index.md create mode 100644 docs/docs/legacy/index.md create mode 100644 docs/docs/legacy/legacy-projects.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/index.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/overview.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/accessible-emoji.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/alt-text.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/anchor-has-content.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/anchor-is-valid.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-activedescendant-has-tabindex.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-attr-valid-value.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-attrs.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-role.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-unsupported-elements.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/autocomplete-valid.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/click-events-have-key-events.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/heading-has-content.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/iframe-title.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/img-redundant-alt.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/mouse-events-have-key-events.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/no-access-key.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/no-autofocus.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/no-distracting-elements.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/no-invalid-change-handler.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/no-redundant-role.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/role-has-required-aria-attrs.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/role-supports-aria-attr.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/scope.md create mode 100644 docs/docs/linting/eslint-plugin-lit-a11y/rules/tabindex-no-positive.md create mode 100644 docs/docs/linting/index.md create mode 100644 docs/docs/testing/chai-a11y-axe.md create mode 100644 docs/docs/testing/helpers.md create mode 100644 docs/docs/testing/index.md create mode 100644 docs/docs/testing/semantic-dom-diff.md create mode 100644 docs/docs/testing/testing-package.md delete mode 100644 docs/faq/README.md create mode 100644 docs/favicon.ico delete mode 100644 docs/favicon.png delete mode 100644 docs/guide/README.md delete mode 100644 docs/guide/component-libraries.md delete mode 120000 docs/guide/dedupe-mixin.md rename docs/{deploying/README.md => guides/app/deploying.md} (96%) create mode 100644 docs/guides/app/getting-started.md create mode 100644 docs/guides/app/index.md create mode 100644 docs/guides/app/multi-page/building.md create mode 100644 docs/guides/app/multi-page/getting-started.md create mode 100644 docs/guides/app/multi-page/index.md create mode 100644 docs/guides/app/single-page/building.md create mode 100644 docs/guides/app/single-page/getting-started.md create mode 100644 docs/guides/app/single-page/index.md create mode 100644 docs/guides/community/base-libraries.md create mode 100644 docs/guides/community/component-libraries.md create mode 100644 docs/guides/community/getting-started.md create mode 100644 docs/guides/community/index.md rename docs/{developing => guides/developing-components}/code-examples.md (97%) rename docs/{codelabs/README.md => guides/developing-components/codelabs.md} (52%) create mode 100644 docs/guides/developing-components/getting-started.md create mode 100644 docs/guides/developing-components/going-buildless.md create mode 100644 docs/guides/developing-components/index.md rename docs/{publishing/index.md => guides/developing-components/publishing.md} (83%) create mode 100644 docs/guides/developing-components/testing.md create mode 100644 docs/guides/developing-components/types.md create mode 100644 docs/guides/index.md create mode 100644 docs/guides/knowledge/attributes-and-properties.md rename docs/{faq => guides/knowledge}/events.md (98%) create mode 100644 docs/guides/knowledge/index.md create mode 100644 docs/guides/knowledge/lit-element/index.md rename docs/{faq/lit-element-lifecycle.md => guides/knowledge/lit-element/lifecycle.md} (93%) rename docs/{faq/rerender.md => guides/knowledge/lit-element/rendering.md} (93%) create mode 100644 docs/guides/knowledge/styling/index.md create mode 100644 docs/guides/knowledge/styling/style-host-via-property.md create mode 100644 docs/guides/knowledge/styling/styles-piercing-shadow-dom.md rename docs/{faq/unit-testing-custom-events.md => guides/knowledge/testing/events.md} (95%) create mode 100644 docs/guides/knowledge/testing/index.md rename docs/{faq/unit-testing-init-error.md => guides/knowledge/testing/initialization.md} (91%) create mode 100644 docs/guides/knowledge/testing/stubs.md rename docs/{ => guides/tools/assets}/intellij-syntax-highlighting.png (100%) create mode 100644 docs/guides/tools/ide.md create mode 100644 docs/guides/tools/index.md create mode 100644 docs/guides/tools/linting-and-formatting.md delete mode 100644 docs/hero.png delete mode 100755 docs/icons/icon-128x128.png delete mode 100644 docs/icons/icon-512x512.png create mode 100644 docs/index.md delete mode 100644 docs/logo.png delete mode 100644 docs/manifest.json delete mode 120000 docs/mdjs/README.md delete mode 120000 docs/scoped-elements/README.md delete mode 100644 docs/styles.css delete mode 100644 docs/testing/README.md delete mode 120000 docs/testing/semantic-dom-diff.md delete mode 120000 docs/testing/testing-chai-a11y-axe.md delete mode 120000 docs/testing/testing-helpers.md delete mode 120000 docs/testing/testing.md create mode 100644 docs/webmanifest.json delete mode 100644 patches/@11ty+eleventy+0.11.0.patch create mode 100644 rocket.config.mjs rename {docs => ~docs}/demoing/MIGRATION.md (100%) rename {docs => ~docs}/demoing/README.md (100%) rename {docs => ~docs}/demoing/demo/custom-elements.json (100%) rename {docs => ~docs}/demoing/storybook-addon-markdown-docs.md (100%) rename {docs => ~docs}/ide-vscode-settings.gif (100%) rename {docs => ~docs}/linting/README.md (100%) rename {docs => ~docs}/linting/linting-eslint.md (100%) create mode 100644 ~docs/linting/linting-types.md rename {docs => ~docs}/types.gif (100%) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..381b3117 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,19 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' +--- + +## Expected behavior + +A clear and concise description of what you expected to happen. + +## Actual Behavior + +Describe what happens instead. + +## Additional context + +Which packages and versions are you using. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..d1c24db0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,9 @@ +--- +name: Feature Request +about: You have an idea about an additional feature +title: '[Feature Request] please use the discussions tab' +labels: '' +assignees: '' +--- + +Please use [discussions](https://github.com/open-wc/open-wc/discussions/new) for new feature requests. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..7a57296e --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,3 @@ +## What I did + +1. diff --git a/.gitignore b/.gitignore index 1b28250e..292be202 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,11 @@ local.log ## generated codelabs docs/.vuepress/public/codelabs + +# Local Netlify folder +.netlify + +## Rocket ignore files (need to be the full relative path to the folders) +docs/_merged_data/ +docs/_merged_assets/ +docs/_merged_includes/ diff --git a/.nvmrc b/.nvmrc index 48082f72..8351c193 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -12 +14 diff --git a/cli-build.js b/cli-build.js deleted file mode 100644 index b70d5728..00000000 --- a/cli-build.js +++ /dev/null @@ -1,88 +0,0 @@ -/* eslint-disable */ - -const path = require('path'); -const copy = require('rollup-plugin-copy'); -const { rollup } = require('rollup'); -const { generateSW } = require('rollup-plugin-workbox'); -const Eleventy = require('@11ty/eleventy'); -const { createMpaConfig } = require('./docs/_building-rollup/createMpaConfig.js'); - -const elev = new Eleventy('./docs', './_site'); -elev.setConfigPathOverride('./docs/.eleventy.js'); -elev.setDryRun(true); // do not write to file system - -/** - * @param {object} config - */ -async function buildAndWrite(config) { - const bundle = await rollup(config); - - if (Array.isArray(config.output)) { - await bundle.write(config.output[0]); - await bundle.write(config.output[1]); - } else { - await bundle.write(config.output); - } -} - -async function productionBuild(html) { - const mpaConfig = createMpaConfig({ - outputDir: '_site', - legacyBuild: false, - html: { html }, - injectServiceWorker: false, - workbox: false, - }); - - mpaConfig.plugins.push( - generateSW({ - globIgnores: ['polyfills/*.js', 'legacy-*.js', 'nomodule-*.js'], - swDest: path.join(process.cwd(), '_site', 'service-worker.js'), - globDirectory: path.join(process.cwd(), '_site'), - globPatterns: ['**/*.{html,js,json,css,webmanifest,png,gif}'], - skipWaiting: true, - clientsClaim: true, - runtimeCaching: [ - { - urlPattern: 'polyfills/*.js', - handler: 'CacheFirst', - }, - ], - }), - ); - - const dest = '_site/'; - mpaConfig.plugins.push( - copy({ - targets: [ - { src: 'docs/styles.css', dest }, - { src: 'docs/demoing/demo/custom-elements.json', dest }, - { src: 'docs/manifest.json', dest }, - { src: 'docs/**/*.{png,gif}', dest }, - ], - flatten: false, - }), - ); - - await buildAndWrite(mpaConfig); -} - -async function main() { - const htmlFiles = []; - - elev.config.filters['hook-for-rocket'] = (html, outputPath, inputPath) => { - htmlFiles.push({ - html, - name: outputPath.substring(8), - rootDir: path.dirname(path.resolve(inputPath)), - }); - return html; - }; - - await elev.init(); - await elev.write(); - - await productionBuild(htmlFiles); -} - -main(); diff --git a/cli-start.js b/cli-start.js deleted file mode 100644 index 76326a6c..00000000 --- a/cli-start.js +++ /dev/null @@ -1,68 +0,0 @@ -/* eslint-disable */ - -const { createConfig, startServer } = require('es-dev-server'); -const Eleventy = require('@11ty/eleventy'); - -const elev = new Eleventy('./docs', './__site'); -elev.setConfigPathOverride('./docs/.eleventy.js'); -elev.setDryRun(true); // do not write to file system - -async function run() { - await elev.init(); - - const config = { - nodeResolve: true, - watch: true, - open: './docs/README.md', - middlewares: [ - async (ctx, next) => { - if (ctx.path.endsWith('index.html')) { - ctx.path = ctx.path.replace('index.html', 'README.md'); - } else if (ctx.path.endsWith('.html')) { - ctx.path = ctx.path.replace('.html', '.md'); - } else if (ctx.path.endsWith('/')) { - ctx.path += 'README.md'; - } - return next(); - }, - ], - plugins: [ - { - async transform(context) { - if (context.path.endsWith('md')) { - const serverPath = context.path; - let { body } = 'File not found'; - elev.config.filters['hook-for-rocket'] = (content, outputPath, inputPath) => { - if (inputPath === `.${serverPath}`) { - body = content; - } - return content; - }; - await elev.write(); - return { - body: body.replace(/href="\//g, 'href="/docs/').replace(/src="\//g, 'src="/docs/'), - }; - } - return undefined; - }, - resolveMimeType(context) { - if (context.path.endsWith('md')) { - return 'text/html'; - } - return undefined; - }, - }, - ], - }; - - startServer(createConfig(config)); - - ['exit', 'SIGINT'].forEach(event => { - // @ts-ignore - process.on(event, () => { - process.exit(0); - }); - }); -} - -run(); diff --git a/docs/.eleventy.js b/docs/.eleventy.js deleted file mode 100644 index 13aadfb0..00000000 --- a/docs/.eleventy.js +++ /dev/null @@ -1,27 +0,0 @@ -const pluginMdjs = require('./_plugin-mdjs/index.js'); - -module.exports = function (eleventyConfig) { - eleventyConfig.addPlugin(pluginMdjs); - - eleventyConfig.addPassthroughCopy('./styles.css'); - eleventyConfig.addPassthroughCopy('./demoing/demo/custom-elements.json'); - eleventyConfig.addPassthroughCopy('./manifest.json'); - eleventyConfig.addPassthroughCopy('./**/*.{png,gif}'); - - eleventyConfig.addCollection('section', function (collection) { - // This works _because_ of our current content. Something like https://github.com/Polymer/lit-html/blob/master/docs/.eleventy.js#L37 - // would be more robust, but there are likely other answers here. - return collection.getFilteredByTag('section').reverse(); - }); - - // 11ty needs this as it apparently reads this config from multiple files - // and only if we provide this hook we can actually override later when we - // programmatically trigger 11ty - // @TODO: create an issue and find a nicer way to add this transformer - eleventyConfig.addTransform('hook-for-rocket'); - - return { - dir: { input: './', output: '../_site-dev' }, - passthroughFileCopy: true, - }; -}; diff --git a/docs/404.md b/docs/404.md new file mode 100644 index 00000000..d6b04f25 --- /dev/null +++ b/docs/404.md @@ -0,0 +1,8 @@ +--- +title: Open Web Components 404 Page +permalink: 404.html +--- + +This page could not be found. + +Return [home](/) to start over. diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index a0e9759a..00000000 --- a/docs/README.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -permalink: 'index.html' -title: Open Web Components -layout: home.njk -home: true -actionText: Get Started → -actionLink: /guide/ -features: - - title: Smart Defaults - details: Enjoy the peace of mind that comes from having a well-known default solution for almost everything. From linting to testing to demos to publishing - have the full experience. - - title: Awesome Generators - details: Get up and running quickly with opinionated generators, or add recommended tools to existing projects. Our comprehensive fleet of generators have got you covered. - - title: Open Source Love - details: Open Web Components is a community-effort, independent of any framework or company. We use mostly open-source tools and services. -footer: MIT Licensed | Copyright © 2018-2020 open-wc ---- - -
-

- I used open-wc to get testing working, it was so helpful, works like a charm! -

- Ikira -

-
-

- Just now visiting open-wc.org site for the first time. You guys are killing it! Amazing stuff, and IMO totally on target. Many thanks. -

- Petecarapetyan -

-

- hosted by netlify -

diff --git a/docs/_assets/head.html b/docs/_assets/head.html new file mode 100644 index 00000000..99ce7bd8 --- /dev/null +++ b/docs/_assets/head.html @@ -0,0 +1,9 @@ + + diff --git a/docs/_assets/icons/android-chrome-192x192.png b/docs/_assets/icons/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..971a43dca5a515736dbcdb2be9057f6b34f7851b GIT binary patch literal 16515 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 Hy@3A#q9>nZ literal 0 HcmV?d00001 diff --git a/docs/_assets/icons/android-chrome-512x512.png b/docs/_assets/icons/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..5070e09e5cd70a9af22c948b48695f21b5d3681c GIT binary patch literal 50024 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 Tq9TzF4gqMX>#6-zfrb4auMtTd literal 0 HcmV?d00001 diff --git a/docs/_assets/icons/apple-touch-icon.png b/docs/_assets/icons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e33ebb1fa6526b1e54f084be808891af3e9d591b GIT binary patch literal 6313 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 literal 0 HcmV?d00001 diff --git a/docs/_assets/icons/favicon-16x16.png b/docs/_assets/icons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..e93c7c1b9bf169d7f12af3fb7614c56d384cec10 GIT binary patch literal 1102 zcmZ{gZA_b06vt0n#!D&4pp=%e(Mjo8807)v#R@{Pj248kw&2DFwDx5*ZE4p&Qb5E< zAWLQz*s@`8BW@-xaZAK3`pIYlu1=7}m$<~KL&uRT`CqA-mqO;O&Ff{=Tr~$Z9 zfQNL&-3EAx0k~rY&`ttm1g1XPTL~cOX?fmKM-R>bo(7x(B=Ik#-vYb{_@)p~3pN1c z0FR4t{4qwPIFg2=sdyv_xeQ*9r1Hm*0>fF@mx;Y(w_sluAL~`4Hy1ss4M?c5OT%N& zM^_1U6{58OJ2Yr6=do0vnJ7a;4H~M^sN-$D4y%kYZBl5Bi1E>&ri%9sX-5O|~|)k5h^uzC#9-OC7*IvyU{B$Y$d4IN~`!zSE z6};G3ukU~R#S$iKB) zLAYD(lC_ofCdbC#T)FjStY};3v&`A*9Xsl4S`1)F2njdogQ2?5A_}=Gq6(dVMcE}W2QO|F3N9IHB^0~9Q0>*RV$-iZL$=3WG3ae?3C2ZSZVxt zUSZ+*vDe20rb|o8iNn7qq+5?qN|Q@>J)K)xP?b}X7>Nbn`#UxHxjTQQrgGW3eXPUA zI<@wolN=N?#Y{mFQEVwH*Or!PON#TEVlBh${-*8k{{;B_4!5iS{{za8-L0hn1)ss} zcd=nx&YHv%JKbeETr>iFH;3&GR@bVk{cN#@K_q$wivWPUTpP%?&$2@rQb+9V>!I@)iPCr4q$Alp zpb5R~?at!yZ!{}nVtIluax0w`&n_!Npe0QN&oMcs$3r*Y-A#_4z#H5BC^sfqmoaUi zVbkjk5&5n#%dt#MewVqAuIF9Crff_pp#=-g!V z{(a(j>LhjPcQy=VqX9e z2Dhwj-le8yIa1}h>k$6D2dwH&jQaDNC>wZC=1uC99*ZV~R94N06)!^_B=RdaZ!7N? zP$Y)jO8;v;sD4VwJEpHek;A?{dc9?xoACUK5Hh1JVyI zFEo5RXoUQs*)?5%%5hcjuxMNTK*>#S*ReA;ez@>eD1nn88tYCa4WKBd*l zES*hK4S1kD>lwDq&o*@wPU|$cTtJc0er$^pFaSCtlzTl&7vN;zYUm+F+XszC`>?wq z-+gPLfLh&-N3u;#DkGP=@Rk}p z@6AyPL;xq7k^RjY2xeAY%NQRnYn_@;dtb67%~?;>`DKH03#O_w*$#f|m2l2Xt>7W{ zs%Gk1euiGMovmrJmY?>#PIF3;g-v~*hoRtWdB*k>~CeH zd7cir=|+;vSXVpIwy{Zeeu#7_1wMKT3AxY8J*r4nll`Nwd@LD1ZeKz79^TvZ(DVgX z9Q))qn@`iT`^beMx1-x4snoJtm1l2+n9>78g*PTSrIDiH26eq)X+e#XEF82nr+I(S zE_r&c`#h^cmOe6X(pZM2TW?v>It#v-G)k< z;^?=YYwUZ)tvlB(a~^6M_Z8mZ^`ov2K#sLbkCZcUxlU&E z+;8o0iml9=U}j(~%#Hqef6v_}_$2m?VEf3|#g+r7YG<is{ufIy*Fq@`%)ld4AfZRcvWpj?j$~=dm}@v%`Y`)OV=!7v*pUz|PKihsfRvOJk}y6-6d92yASER4sd(;UtT_rw ze7@$kK)!>X>nF4HcZ-b}A59};+q(-$wgI+ki8fVYRAd%bIT_P@G8 BtFZt8 literal 0 HcmV?d00001 diff --git a/docs/_assets/icons/maskable-icon.png b/docs/_assets/icons/maskable-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5070e09e5cd70a9af22c948b48695f21b5d3681c GIT binary patch literal 50024 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 Tq9TzF4gqMX>#6-zfrb4auMtTd literal 0 HcmV?d00001 diff --git a/docs/_assets/icons/mstile-150x150.png b/docs/_assets/icons/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..e9449c4fb32e5703a3e0e32ff3623d6357e032ce GIT binary patch literal 4243 zcmcInS5y;hlMadoDFFhZh9&|^51k-E1nD54A0kB{5s;pcP$C_bB9KUvND+{aqW?#e zB2`)l9mI&T0tzHj1(S&Mvh07eXD{|*FLuuRo;mZp=b5>9&zYGg)!xpWhf|Cb008h< zT9`Tl0BoTDx*Y7M$j26#>ZxP*HMTVd0P2ZchhFDSV`-Fyqb&gNP#yq?e+&TZpF;5~ z06>^J0I=o>0KiEAfH1nS&Ee|l!x^NtxhdcznK;^Y8Ub;Zwl{!uPHuj^D;H{7j{pE( zJxf#L+mT;4=AzKIzr+9;zuY^Y*~`gXP~K8MBU6{ao`%sdbA(512DSyw!TEL? z{jb-3*X#_2E)jg!{5G=c=Q>g_G&>A;eZ9$=aK$H?X_4zTf$SpCH;Hm=4-+NZKW@ez z0IxsamYHj>#YXHLcv0fIbGIWVj-xj_mkSRJ;#2N9h2I$GDVq+|-2$RUIx+eP6 zfrB>%(6M5o+x8&=gnI>iBxGwIVD?-Ns3KT;9*YrODwCYLY!2gm#x>FMTso1_mllgF z<557fo1>xCD-$(ZL-}-1#2Olsk5*ZF1>OV2MRWKvVW4>lXt(8v?|z`8ELYZ}y$9VH zEuv{K0X*hd!{{p`;Agigv?0l+`0iV8Tm`Je($bpa&oL zKclOAEL+L5hAbBQ91&z4DjxQxD6aOnPp;*eT3gA4NC2sp!Aaf7`a|lQ3e+j$;+OaV zUm^t;D^o5a2JNVK`To+CTDnaQ$|-m5QCQV3ViRC7qY8uDir(@C?A240rbj;!kyf5f5RH)y>xmQcS$?iGlnF;6Ahu3|> z&3NlMF`itC!N=~el;9Sz}DjL3s!bz8|Shb^)g2GRNfCH=ouY} z82PqAG{M3w`$7*};df{rB_yGwu$Z<)63`kf>Y(71d@el?4RA}H9P@2WJck*`oRCKd z^hFbhM#!dBr%{W>UA|fMN>b?>dIrJ zRIny?OUF0}p&9bOvLAcTN@9zd0^>Jb+<2ms9%Y;I(Oo;>KNXgL-y8cZ&;DhgW&B@7 zJD1*R`pSH{xf`BN6gT;$j%)V;jMFknjx@fI`jZwhEKcYS(=&&ocT?*D zlk<3aaBdi*sy^53N03DD-}3JmQ@SNYdzFGEOFjAKSC#|~TAgo5t;K%SfR=N2)9geESoXqhQ1a`AABGhuNr4#I zxWV6EsZ6miim*kB|M6$9&_lAyZ(-%dyxwnp;`0G(Fz{m!oZi&u!j6Q{qCC_jnFw5&%o6wmqF>MgxTf&YF5V}TfqcqxQh}Vl1_sBU|pYccx zKu_aF7iM2TZ9$7HWP>Z$R0De&Mm*RU^+|D<4L8rR-3rrodjVBW%9cBn@_e_NQdT%1 zg)*!$rF+#%w_%_M3=rs5|C**mzMjilmQ96D1En0`Y;h{k#8ZBHXY*$ihsXdI*~Kj2+=!kTn|YDfg% zPM%EvAws@#C=^x4D^=RZNdgUDh>%Z?iKDsu^+ zMefaRODaEc`8~brTI&YN6*G)$+5T{y&B{LEMU{!682ZW^djgnF1f@f~lCn@5RIj+$ zrgNPYeMKVw`VbEvr9eloYb!b=CSLyG`*gnTmHnnQ!3sE`s8aL2l&KUcve(RM4(SdH znP^kfSA>$cQdd0{rhx5S_)uv2=HDp?%^6p)eAK(t9=kQ}pM->m_CD}w`^|Ozim%_s zwc;gD@i)S;^ouFdi5%TV`@Rq86Ve@w-ZYtAhB&n+Dbyo$+G88sU2>W=jBkBG+!7!a z&G6zd5lNCd&OABKXWCuVx4LN!I^aLI@Yc8t{rSYJY*hrg{5}eV;n|T(KC13Aw46zC z1GF&TE;hy7Cu|IuqMRS~uMFV1J^9WukQ{v+(kq)`P~lcJ{e9zt2_^l_s9i3stWFQn zi@PVyc&n86?25VCM5*xdWCm7`7|UHEb+i&b^HhCD&YU-~*?O`)*akMrO_vEtlvIre zB*D1V_L&^VbGR1TX-fFQyCSIF=c)n+-Jz~!X`t}%avNi4Bu4jd3D72dP2f(Rp6H4( z=wV>&2BHuq5psFw57c*(=vXi?e*JYp@`q|^sUFQL^Rr8(YRzK)<`` z-i_|qM|Ce!3e|K%yx`0}GJa7ZO2t zQJ?-c^(Mn2CqKnFoaG)o57!}g{dRL&kRUXF$M;l^S@W((3cn-HMwx1mg@Tt&R-5lM z8G}X;VXd`4sVxmx=o-fYytdC6m9vf}+B|xyB0K-IFFBJ0Tz0dB{9>Duc2`9neWa~Q zk8Ff#@p_v^8B(1 z^4DU68yN4FgWr7fzEB<-LZQ*Vw|S3dHtcClWTb6s6))!Ez7Mx=k(Hn!w5f4d9!fyQ zhB#@W=_(&xZ9tXH{25pjyC*v^Wc=Rv;17oY#7`m) z##&X_-Fp@^9I&U?Zi3wU4d}9J=Xxy%zBkZJ`Y2o83G^jaoVN^T_ApW6qcka2Q6232 zO|4ys@WWj-*d<`AL6|EF<1oE1pjOQ7?%nH;5PEyW$adKhP|#taZB{WUUB!n$a~C%V z=Bj*mP-&+y7S9!-sUAxH_goi^UzZ@{-oxeZ$VWJ*-{>f)b}%|I)Om7b3X$>#T6S%R zS#vyREyLu1t3To{h1eHm%nH7Z3#|Iiv`gyP8G+U;s_iLmgk zbT=9uGR~TdCMeN70*24j%vU_CBn+|df{T6{%GqJqjM9}12ZMtb@~2PKe9qnZy>~%~ z>*js6ycfYe>69r4Cr>zR@aPZ};@Nt%s^(HifgB2bZ-}{)N=Ma{&Arl6%{0?|yfu%w zx>gbxi(AHUM=@0qIJRUdF3#1{<`loDwPkWz!}zMbbxcp06L=g z4ga~xG^fUrbCqZzLy>r?YpR?MNupIf<)kNKIbT(;YqwUSyJo^s!_xoEFSV$tWbUn& z<=xv~x%p8cu>62)wp{mfdI8-^D#RaR&WQ#^kd7-PX1slJErk|mwXBIJlk0>lWPLvz z#*(=PW(#P+8(+rIlt2&u12)>h7qMj)#35EJLY1F*V(zOwtFfzXTKGG#N~ zkhG|AIeie;wv8vxSNh(#Fw#xwxpH50YB<-1RcQTVUUEJ3^5oZDbYu_+mL!zNfb82W zpG)5LaI4Wpx+lvWDi%om#ctI|+|~XgTGM|Xq0{q_aUVVw_v0#cSxo>5s$Jlv2>xaD z1awULvJNS4>~>RK=wjZsQiW9?BJ#X_*q%4K{G_pC(fXTYF}LT9bH2$K_L(}!*lJ_j zNNTz*2vG9GnsIlQ0I9NC2@XFMHnnv;29qx(4agMvvTWL!B^1bM(Z?+M7}uf#lbTWK=z-E)o!h{V-^^L8O#|rjd&3U_QMi<(9*fR_FK; zd*X|K>oeeg>$B2ReI}TU;SO@@T3xxNw4Oz~=t4?#yzL3EC_7VrnIcF(!_l1V<&<#e;caJ}qgRA9IyA(`FVI^W zhevx$`=N0t03foE#^UC{I9yjI`+v$74h qrAMYe4U$L6P%>~N-lD`x6|g4Ek7Hfe&OI#wu)JYsT65hq@jn4Z + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + + + + + + + diff --git a/docs/_assets/logo.svg b/docs/_assets/logo.svg new file mode 100644 index 00000000..a7964956 --- /dev/null +++ b/docs/_assets/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_assets/social-media-image.jpg b/docs/_assets/social-media-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..459fe86d9c5fbe39246321fcfed19262319f3a2b GIT binary patch literal 12064 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 rocket-navigation > ul > li.menu-item.current > a { + color: var(--owc-active-color)!important; +} + +#sidebar-nav > rocket-navigation > ul > li.menu-item.current > ul > li.menu-item.anchor.current a { + color: var(--owc-active-color)!important; +} + + +/* Docs styles: */ +#sidebar-nav > rocket-navigation > ul > li.menu-item.active > a { + color: var(--owc-active-color)!important; +} + +#sidebar-nav > rocket-navigation > ul > li.menu-item.active > ul > li.menu-item.current > a { + color: var(--owc-active-color)!important; +} + +#sidebar-nav > rocket-navigation > ul > li.menu-item.active > ul > li.menu-item.current > ul > li.menu-item.anchor.current:before { + background: var(--owc-active-color)!important; +} + +#sidebar-nav > rocket-navigation > ul > li.menu-item.active > ul > li.menu-item.current > ul > li.menu-item.anchor.current a { + color: var(--owc-active-color)!important; +} + + +footer { + border-top: 0px!important; +} + +rocket-navigation > ul > li > a { + text-transform: none!important; +} + +@media (prefers-color-scheme: dark) { + .markdown-body { + color: var(--primary-text-color); + } + .sidebar-tags .tag { + background: var(--footer-background); + } +} + +@media screen and (min-width: 1024px) { + #sidebar { + max-width: 280px; + } +} diff --git a/docs/_assets/variables.css b/docs/_assets/variables.css new file mode 100644 index 00000000..2442f289 --- /dev/null +++ b/docs/_assets/variables.css @@ -0,0 +1,140 @@ +html { + --page-background: white; + --footer-background: rgba(0, 0, 0, 0.02); + --primary-color: rgb(44, 62, 80); + --primary-color-lighter: #449ad7; + --primary-color-darker: #1a5285; + --primary-color-accent: #cee5f6; + --contrast-color-light: #fff; + --contrast-color-dark: #1d3557; + --primary-text-color: #2c3e50; + --primary-lines-color: #ccc; + --markdown-link-color: #2758ff; + + --header-color: white; + + --owc-active-color: #2758ff; + --owc-hover-color: #436eff; + + --button-one: #2758ff; + --button-one-hover: #436eff; + + --button-two: black; + --button-two-hover: #444444; +} + +/* TODO: markdown Vars */ + +/* SEE: https://github.com/daKmoR/rocket/pull/18 */ + +@media (prefers-color-scheme: dark) { + html { + --header-color: #2f3136; + + --footer-background: rgba(255, 255, 255, 0.1); + --page-background: #36393e; + --primary-text-color: #eee; + --primary-color: white; + --primary-color-lighter: #449ad7; + --primary-color-darker: #1a5285; + --primary-color-accent: #cee5f6; + --contrast-color-light: #fff; + --contrast-color-dark: #1d3557; + --primary-lines-color: #333; + + --owc-active-color: #41ffb0; + --owc-hover-color: #6dffc2; + + --button-one: #9b03fe; + --button-one-hover: #a724ff; + + --button-two: black; + --button-two-hover: rgb(36, 36, 36); + + + /* Markdown */ + --markdown-octicon-link: var(--primary-text-color); + --markdown-body: #24292e; + --markdown-link-color: #41ffb0; + --markdown-divider-color: #e1e4e8; + --markdown-blockquote-border-color: #dfe2e5; + --markdown-blockquote-color: #90aac7; + --markdown-kbd-background-color: #fafbfc; + --markdown-kbd-border-color: #c6cbd1; + --markdown-kbd-border-bottom-color: #959da5; + --markdown-kbd-color: #444d56; + --markdown-heading-color-6: #6a737d; + --markdown-table-background-color: #fff; + --markdown-table-border-color: #c6cbd1; + --markdown-table-row-odd-background-color: #f6f8fa; + --markdown-code-background-color: rgba(27, 31, 35, 0.05); + --markdown-pre-background-color: rgb(49, 49, 49); + + /* syntax */ + --markdown-syntax-color: #f8f8f2; + --markdown-syntax-background-color: #2e3440; + --markdown-syntax-atrule-color: #88c0d0; + --markdown-syntax-attr-name-color: #a3be8c; + --markdown-syntax-attr-value-color: #88c0d0; + --markdown-syntax-builtin-color: #a3be8c; + --markdown-syntax-boolean-color: #81a1c1; + --markdown-syntax-class-name-color: #88c0d0; + --markdown-syntax-constant-color: #81a1c1; + --markdown-syntax-char-color: #a3be8c; + --markdown-syntax-deleted-color: #81a1c1; + --markdown-syntax-entity-color: #81a1c1; + --markdown-syntax-function-color: #88c0d0; + --markdown-syntax-inserted-color: #a3be8c; + --markdown-syntax-keyword-color: #81a1c1; + --markdown-syntax-number-color: #b48ead; + --markdown-syntax-operator-color: #81a1c1; + --markdown-syntax-property-color: #81a1c1; + --markdown-syntax-punctuation-color: #81a1c1; + --markdown-syntax-regex-color: #81a1c1; + --markdown-syntax-important-color: #81a1c1; + --markdown-syntax-selector-color: #a3be8c; + --markdown-syntax-symbol-color: #81a1c1; + --markdown-syntax-string-color: #a3be8c; + --markdown-syntax-tag-color: #81a1c1; + --markdown-syntax-url-color: #81a1c1; + --markdown-syntax-variable-color: #81a1c1; + --markdown-syntax-hotkey-selector-color: #d73a49; + --markdown-syntax-keyword-color: #22863a; + --markdown-table-background-color: #212121; + --markdown-table-row-odd-background-color: #515151; + --markdown-table-border-color: #8e8e8e; + + --markdown-syntax-background-color: rgb(27, 29, 35); + --markdown-syntax-atrule-color: rgb(198, 120, 221); + --markdown-syntax-attr-name-color: rgb(198, 120, 221); + --markdown-syntax-boolean-color: rgb(209, 154, 102); + --markdown-syntax-class-name-color: rgb(97, 175, 239); + --markdown-syntax-constant-color: rgb(220, 220, 170); + --markdown-syntax-entity-color: rgb(220, 220, 170); + --markdown-syntax-function-color: rgb(97, 175, 239); + --markdown-syntax-inserted-color: rgb(220, 220, 170); + --markdown-syntax-keyword-color: rgb(198, 120, 221); + --markdown-syntax-number-color: rgb(220, 220, 170); + --markdown-syntax-operator-color: rgb(220, 220, 170); + --markdown-syntax-property-color: rgb(220, 220, 170); + --markdown-syntax-punctuation-color: white; + --markdown-syntax-regex-color: rgb(209, 154, 102); + --markdown-syntax-selector-color: rgb(86, 156, 214); + --markdown-syntax-symbol-color: rgb(220, 220, 170); + --markdown-syntax-tag-color: rgb(86, 156, 214); + --markdown-syntax-url-color: rgb(220, 220, 170); + --markdown-syntax-variable-color: rgb(220, 220, 170); + } + + .string { + color: rgb(152, 195, 121); + } + + .comment { + color: #7d7d7d; + } + + .language-css { + --markdown-syntax-string-color: #81a1c1; + } +} diff --git a/docs/_building-rollup/createMpaConfig.js b/docs/_building-rollup/createMpaConfig.js deleted file mode 100644 index 3ad98449..00000000 --- a/docs/_building-rollup/createMpaConfig.js +++ /dev/null @@ -1,20 +0,0 @@ -/* eslint-disable */ -/** @typedef {import('./types').SpaOptions} SpaOptions */ - -const merge = require('deepmerge'); -const { createSpaConfig } = require('@open-wc/building-rollup'); - -/** - * @param {SpaOptions} options - */ -function createMpaConfig(options) { - const userOptions = merge( - { - html: { flatten: false }, - }, - options, - ); - return createSpaConfig(userOptions); -} - -module.exports = { createMpaConfig }; diff --git a/docs/_data/baseLibraries.js b/docs/_data/baseLibraries.js new file mode 100644 index 00000000..3e35c9df --- /dev/null +++ b/docs/_data/baseLibraries.js @@ -0,0 +1,90 @@ +/* eslint-disable import/no-extraneous-dependencies */ +const fetch = require('node-fetch'); + +const baseLibraries = [ + { + name: 'lit-element', + package: 'lit-element', + description: 'A simple base class for creating fast, lightweight web components', + url: 'https://lit-element.polymer-project.org/', + }, + { + name: 'FAST', + package: '@microsoft/fast-element', + description: 'The adaptive interface system for modern web experiences', + url: 'https://www.fast.design/', + }, + { + package: 'atomico', + description: + 'Atomico a micro-library for creating webcomponents using only functions, hooks and virtual-dom.', + }, + { + package: 'haunted', + description: "React's Hooks API but for standard web components and lit-html or hyperHTML", + }, + { + package: 'hybrids', + description: 'The simplest way to create web components with plain objects and pure functions!', + }, + { + package: 'hyperhtml-element', + description: 'An extensible class to define hyperHTML based Custom Elements', + }, + { + name: 'Joist', + package: '@joist/component', + description: + 'A small (~2kb) library to help with the creation of web components and web component based applications', + }, + { + name: 'Lightning Web Components', + package: 'lwc', + description: 'A Blazing Fast, Enterprise-Grade Web Components Foundation', + }, + { + name: 'preact-custom-element', + package: 'preact-custom-element', + description: 'Generate/register a custom element from a preact component', + }, + { + package: 'skatejs', + description: + 'Skate is a library built on top of the W3C web component specs that enables you to write functional and performant web components with a very small footprint.', + url: 'https://skatejs.netlify.com/', + }, + { + package: 'slimjs', + description: + 'a lightweight web component authoring library that provides extended capabilities for components (such as data binding) using es6 native class inheritance', + }, + { + package: 'solid-js', + description: 'The Deceptively Simple User Interface Library', + }, + { + package: 'stencil', + description: 'web component with typescript and JSX (requires a build step)', + url: 'https://stenciljs.com/', + }, +]; + +module.exports = async function getBaseLibraries() { + const result = await Promise.all( + baseLibraries.map(async lib => { + const pkg = encodeURIComponent(lib.package); + const response = await fetch(`https://api.npmjs.org/downloads/point/last-week/${pkg}`); + const { downloads } = await response.json(); + + return { + ...lib, + downloads, + downloadsFormatted: new Intl.NumberFormat('de-DE').format(downloads), + name: lib.name || lib.package, + url: lib.url || `https://www.npmjs.com/package/${pkg}`, + }; + }), + ); + + return result.sort((a, b) => b.downloads - a.downloads); +}; diff --git a/docs/_data/componentLibraries.js b/docs/_data/componentLibraries.js new file mode 100644 index 00000000..dc515ddc --- /dev/null +++ b/docs/_data/componentLibraries.js @@ -0,0 +1,156 @@ +const componentLibraries = [ + { + name: 'aybolit', + url: 'https://web-padawan.github.io/aybolit/', + description: + 'A growing family of elements with default styling for Bootstrap, Bulma, and Material, as well as a solid white-label basis for extending the underlying functionality with your own custom designs.', + }, + { + name: 'Auro', + url: 'https://auro.alaskaair.com', + description: + "The Auro Design System and by extension, Auro Web Components are the core components for a new cross-team, multi-platform development strategy to ensure consistency of UI and experience for all of Alaska's customers. Auro is an eco-system of design, core utilities, and web components designed to reduce design and development efforts.", + }, + { + name: 'Bolt', + url: 'https://boltdesignsystem.com/', + description: + 'A family of web components built with first-class participation in the Twig templating system for PHP in mind. This set is backed by an expansive catalog of usage variants.', + }, + { + name: 'Carbon Design System', + url: 'https://github.com/carbon-design-system/carbon-custom-elements', + description: + 'Carbon is an open-source design system built by IBM. With the IBM Design Language as its foundation, the system consists of working code, design tools and resources, human interface guidelines, and a vibrant community of contributors.', + }, + { + name: 'Clever Components', + url: 'https://github.com/CleverCloud/clever-components', + description: + 'A collection of low-level (atoms) and high-level (domain specific) Web Components made by Clever Cloud for its different Web UIs (public and internal).', + }, + { + name: 'Elix', + url: 'https://component.kitchen/elix', + description: + 'The Elix project aims to create a universal library of all general-purpose user interface patterns commonly found in desktop and mobile UIs, where each pattern is implemented as a well-designed, attractive, high-quality, performant, accessible, localizable, and extensively customizable web component.', + }, + { + name: 'FAST', + url: 'https://fast.design', + description: + 'FAST is a web component library built by Microsoft. The core, `fast-element`, is a lightweight means to easily build performant and standards-compliant Web Components. `fast-foundation` is a library of Web Component classes, templates, and other utilities built on fast-element intended to be composed into registered web components by design systems.', + }, + { + name: 'HelixUI', + url: 'https://helixdesignsystem.github.io/helix-ui/', + description: + 'The HelixUI library provides front-end developers a set of reusable CSS classes and HTML Custom Elements that adhere to Helix design standards, as outlined by Rackspace.', + }, + { + name: 'Ink Components', + url: 'https://components.ink/', + description: + 'Web components for interactive scientific writing, reactive documents and explorable explanations. The Ink Components library can bring your math and science documents to the next level by breathing life into charts, equations, and variables that can be used throughout your application or content.', + }, + { + name: 'Io GUI', + url: 'https://io-gui.dev/#page=elements', + description: + 'Io is a UI framework for web applications and custom elements. It supports virtual DOM, reactive rendering and data binding. It includes a design system composed of UI elements ranging from simple input fields, to menu systems and responsive layouts. Its unique feature is the ability to create visually complex, yet fast and GPU-optimized elements using WebGL shaders.', + }, + { + name: 'Ionic UI Components', + url: 'https://ionicframework.com/docs/components', + description: + 'Take advantage of the component system that powers Ionic applications with a large ecosystem to choose from and in-depth usage instructions, no matter the framework you use.', + }, + { + name: 'iooxa.dev', + url: 'https://iooxa.dev/', + description: + 'The goal of [iooxa.dev](https://iooxa.dev/) is to provide open source tools to promote and enable interactive scientific writing, reactive documents and explorable explanations.', + }, + { + name: 'Kor UI', + url: 'https://kor-ui.com/', + description: + 'A Design System and complete UI component library built to facilitate the design and development of intuitive, coherent and pleasing applications based on Web technologies (HTML5). It contains 35+ components which are compatible with any framework, form factor, input type and modern browser.', + }, + { + name: 'Lightning Web Components by SalesForce', + url: 'https://developer.salesforce.com/docs/component-library/overview/components', + description: + 'Lightning Web Components are now the go-to standard for developing applications in the SalesForce ecosystem, and with the power of web components, they can be the basis of applications outside of their ecosystem, too!', + }, + { + name: 'Lion Web Components by ING Bank', + url: 'https://github.com/ing-bank/lion', + description: + 'Lion web components is a set of highly performant, accessible and flexible Web Components. They provide an unopinionated, white label layer that can be extended to your own layer of components.', + }, + { + name: 'Material Web Components', + url: + 'https://material-components.github.io/material-components-web-components/demos/index.html', + description: + "Material Design Components from Material Design team themselves. Stay as close as possible to the changing specification with these components from Google's own Material Design team.", + }, + { + name: 'Morningstar', + url: 'http://designsystem.morningstar.com/components/component-status.html', + description: + 'The Morningstar Design System combines vanilla HTML/CSS with web components in just the right proportions to empower the design and development of wide reaching content and functionality.', + }, + { + name: 'Shoelace', + url: 'https://shoelace.style/', + description: + 'Shoelace provides a collection of professionally designed, every day UI components built on a framework-agnostic technology. Every web component is built with accessibility and developer experience in mind.', + }, + { + name: 'Smart HTML Elements', + url: 'https://www.htmlelements.com', + description: + 'With the goal of helping to deliver modern responsive websites and applications that work on any device and are pleasure to use, the Smart HTML Elements collection is one the most feature rich and comprehensive javascript user interface frameworks.', + }, + { + name: 'Spectrum Web Components', + url: 'https://opensource.adobe.com/spectrum-web-components/', + description: + "The Spectrum Web Components project is an implementation of Spectrum, Adobe’s design system. It's designed to work with any web framework — or even without one.", + }, + { + name: 'UI5 Web Components', + url: 'https://sap.github.io/ui5-webcomponents/', + description: + "Get the power and flexibility of SAP's UI5 rendering stack with the ergonomics and ease of use of web components, and bring enterprise-grade features, Fiori UX and themeability home to your application.", + }, + { + name: 'Vaadin', + url: 'https://vaadin.com/components', + description: + 'Vaadin has a comprehensive set of beautifully crafted, performant, and adaptable UI components for modern mobile-first Web apps. They are the ideal building blocks for Progressive Web Applications.', + }, + { + name: 'Weightless', + url: 'https://weightless.dev/', + description: + 'A lightweight component library featuring a wide array of design concepts. It surfaces a good amount of customizability via comprehensive component and CSS Custom Property APIs with a small footprint, just short of 30KB.', + }, + { + name: 'Wired Elements', + url: 'https://wiredjs.com/', + description: + 'A set of common UI elements with a hand-drawn, sketchy look. These can be used for wireframes, mockups, or just the fun hand-drawn look.', + }, + { + name: 'Zooplus Web Components', + url: 'https://zooplus.github.io/zoo-web-components/', + description: 'A set of web components that implement Z+ shop style guide.', + }, +]; + +module.exports = async function getComponentLibraries() { + return componentLibraries.sort((a, b) => a.name.localeCompare(b.name)); +}; diff --git a/docs/_data/footer.json b/docs/_data/footer.json new file mode 100644 index 00000000..a5b6c8d5 --- /dev/null +++ b/docs/_data/footer.json @@ -0,0 +1,49 @@ +[ + { + "name": "Discover", + "children": [ + { + "text": "Blog", + "href": "/blog/" + }, + { + "text": "About", + "href": "/discover/about/" + }, + { + "text": "Help and Feedback", + "href": "https://github.com/open-wc/open-wc/issues" + } + ] + }, + { + "name": "Follow", + "children": [ + { + "text": "Github", + "href": "https://github.com/open-wc/open-wc" + }, + { + "text": "Twitter", + "href": "https://twitter.com/openwc" + }, + { + "text": "Slack", + "href": "/discover/slack/" + } + ] + }, + { + "name": "Support", + "children": [ + { + "text": "Sponsor", + "href": "https://opencollective.com/modern-web" + }, + { + "text": "Contribute", + "href": "https://github.com/open-wc/open-wc/blob/master/CONTRIBUTING.md" + } + ] + } +] diff --git a/docs/_data/layout.js b/docs/_data/layout.js deleted file mode 100644 index c3f18ebb..00000000 --- a/docs/_data/layout.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'layout.njk'; diff --git a/docs/_data/rocketLaunch.json b/docs/_data/rocketLaunch.json new file mode 100644 index 00000000..6b6c0007 --- /dev/null +++ b/docs/_data/rocketLaunch.json @@ -0,0 +1,4 @@ +{ + "homeLayout": "home", + "newsletter": false +} diff --git a/docs/_data/site.js b/docs/_data/site.js index b715d5aa..ceec09a8 100644 --- a/docs/_data/site.js +++ b/docs/_data/site.js @@ -1,22 +1,22 @@ -let url = '/'; +/* eslint-disable */ -switch (process.env.CONTEXT) { - case 'production': - url = process.env.URL; - break; - case 'deploy-preview': - url = process.env.DEPLOY_URL; - break; - case 'branch-deploy': - url = process.env.DEPLOY_PRIME_URL; - break; - default: - break; -} - -module.exports = { - name: 'Open Web Components', - shortDesc: - 'Open Web Components provides a set of defaults, recommendations and tools to help facilitate your web component project. Our recommendations include: developing, linting, testing, building, tooling, demoing, publishing and automating.', - url, +module.exports = async function () { + return { + name: 'Open Web Components', + description: + 'Open Web Components provides a set of defaults, recommendations and tools to help facilitate your Web Component.', + socialLinks: [ + { + name: 'GitHub', + url: 'https://github.com/open-wc/open-wc', + }, + ], + helpUrl: 'https://github.com/open-wc/open-wc/issues', + logoAlt: 'O with occluded right edge to appear also as a C', + iconColorMaskIcon: '#3f93ce', + iconColorMsapplicationTileColor: '#1d3557', + iconColorThemeColor: '#1d3557', + analytics: 'UA-131782693-2', + socialMediaImage: '/_assets/social-media-image.jpg', + }; }; diff --git a/docs/_includes/home.njk b/docs/_includes/home.njk deleted file mode 100644 index 00b3ad9a..00000000 --- a/docs/_includes/home.njk +++ /dev/null @@ -1,92 +0,0 @@ - - - - - {% include 'partials/meta.njk' %} - - - - -
-
- {% include 'partials/header.njk' %} - - -
-
- -

open-wc

-

- Open Web Component Recommendations -

- - npm init @open-wc - -

- - Get Started → - -

-
-
-
-

Smart Defaults

-

Enjoy the peace of mind that comes from having a well-known default solution for almost everything. From linting to testing to demos to publishing - have the full experience.

-
-
-

Awesome Generators

-

Get up and running quickly with opinionated generators, or add recommended tools to existing projects. Our comprehensive fleet of generators have got you covered.

-
-
-

Open Source Love

-

Open Web Components is a community-effort, independent of any framework or company. We use mostly open-source tools and services.

-
-
-
- {{ content.html | safe }} - -
-
-
-
- - {% include "partials/sidebar-script.njk" %} - {% include 'partials/service-worker.njk' %} - - - diff --git a/docs/_includes/layout.njk b/docs/_includes/layout.njk deleted file mode 100644 index dbb5bd29..00000000 --- a/docs/_includes/layout.njk +++ /dev/null @@ -1,33 +0,0 @@ - - - - - {% include 'partials/meta.njk' %} - - - - -
-
- {% include 'partials/header.njk' %} - {% include 'partials/sidebar.njk' %} -
-
- {{ content.html | safe }} -
-
-
-
-
- - {% include "partials/sidebar-script.njk" %} - - {% if content.jsCode %} - - {% endif %} - {% include 'partials/service-worker.njk' %} - - - diff --git a/docs/_includes/partials/content-footer.njk b/docs/_includes/partials/content-footer.njk new file mode 100644 index 00000000..34513e62 --- /dev/null +++ b/docs/_includes/partials/content-footer.njk @@ -0,0 +1,6 @@ + diff --git a/docs/_includes/partials/header.njk b/docs/_includes/partials/header.njk deleted file mode 100644 index 2e05e7bf..00000000 --- a/docs/_includes/partials/header.njk +++ /dev/null @@ -1,44 +0,0 @@ - diff --git a/docs/_includes/partials/meta.njk b/docs/_includes/partials/meta.njk deleted file mode 100644 index cb1d8ed1..00000000 --- a/docs/_includes/partials/meta.njk +++ /dev/null @@ -1,34 +0,0 @@ -{% set pageTitle = title %} -{% if title != site.name %} - {% set pageTitle = title + ': ' + site.name %} -{% endif %} -{% set currentUrl = site.url + page.url %} - -{% set metaDesc = site.shortDesc %} - - - -{{ pageTitle }} - - - - - -{% if site.url !== '/' %} - -{% endif %} - - - - - - - - - - -{% if metaDesc %} - - - -{% endif %} diff --git a/docs/_includes/partials/service-worker.njk b/docs/_includes/partials/service-worker.njk deleted file mode 100644 index 8c583598..00000000 --- a/docs/_includes/partials/service-worker.njk +++ /dev/null @@ -1,42 +0,0 @@ - \ No newline at end of file diff --git a/docs/_includes/partials/sidebar-about.njk b/docs/_includes/partials/sidebar-about.njk deleted file mode 100644 index 962d2a86..00000000 --- a/docs/_includes/partials/sidebar-about.njk +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/docs/_includes/partials/sidebar-faq.njk b/docs/_includes/partials/sidebar-faq.njk deleted file mode 100644 index 462640bc..00000000 --- a/docs/_includes/partials/sidebar-faq.njk +++ /dev/null @@ -1,30 +0,0 @@ - diff --git a/docs/_includes/partials/sidebar-guide.njk b/docs/_includes/partials/sidebar-guide.njk deleted file mode 100644 index 61694223..00000000 --- a/docs/_includes/partials/sidebar-guide.njk +++ /dev/null @@ -1,233 +0,0 @@ - - diff --git a/docs/_includes/partials/sidebar-script.njk b/docs/_includes/partials/sidebar-script.njk deleted file mode 100644 index 1db9385a..00000000 --- a/docs/_includes/partials/sidebar-script.njk +++ /dev/null @@ -1,18 +0,0 @@ - \ No newline at end of file diff --git a/docs/_includes/partials/sidebar.njk b/docs/_includes/partials/sidebar.njk deleted file mode 100644 index 81d538b1..00000000 --- a/docs/_includes/partials/sidebar.njk +++ /dev/null @@ -1,41 +0,0 @@ - - diff --git a/docs/_plugin-mdjs/index.js b/docs/_plugin-mdjs/index.js deleted file mode 100644 index ee80a727..00000000 --- a/docs/_plugin-mdjs/index.js +++ /dev/null @@ -1,46 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -const { mdjsProcess, mdjsProcessPlugins } = require('@mdjs/core'); - -const plugins = mdjsProcessPlugins.map(pluginObj => { - if (pluginObj.name === 'htmlHeading') { - return { - ...pluginObj, - options: { - properties: { - className: ['header-anchor'], - }, - content: [{ type: 'text', value: '#' }], - }, - }; - } - return pluginObj; -}); - -function eleventyUnified() { - return { - set: () => {}, - render: async str => { - const result = await mdjsProcess(str, { - plugins, - }); - return result; - }, - }; -} - -const defaultEleventyUnifiedOptions = { - plugins: [], -}; - -const _eleventy = { - initArguments: {}, - configFunction: (eleventyConfig, pluginOptions = {}) => { - const options = { - ...defaultEleventyUnifiedOptions, - ...pluginOptions, - }; - eleventyConfig.setLibrary('md', eleventyUnified(options)); - }, -}; - -module.exports = _eleventy; diff --git a/docs/_redirects b/docs/_redirects new file mode 100644 index 00000000..a2a01633 --- /dev/null +++ b/docs/_redirects @@ -0,0 +1,42 @@ +/guide/ /guides/ +/guide/component-libraries.html /guides/community/component-libraries/ +/developing/code-examples.html /guides/developing-components/code-examples/ +/developing/ /guides/developing-components/getting-started/ +/developing/es-dev-server.html /docs/legacy/legacy-projects/ +/init/ /guides/developing-components/getting-started/ +/codelabs/ /guides/developing-components/codelabs/ +/testing/ /guides/developing-components/testing/ +/guide/index.html /guides/ +/testing/testing-helpers.html /docs/testing/helpers/ +/demoing/ /docs/demoing/storybook/ +/developing/best-practices.html /guides/knowledge/lit-element/lifecycle/ +/building/building-rollup.html /docs/building/rollup/ +/index.html / +/faq/events.html /guides/knowledge/events/ +/building/ /docs/building/ +/mdjs/ /docs/experimental/mdjs/ +/scoped-elements/ /docs/development/scoped-elements/ +/testing/testing.html /guides/developing-components/testing/ +/testing/testing-karma.html /docs/legacy/legacy-projects/ +/developing/lit-html.html /guides/developing-components/getting-started/ +/publishing/ /guides/developing-components/publishing/ +/developing/lit-helpers.html /docs/development/lit-helpers/ +/developing/ide.html /guides/tools/ide/ +/building/rollup-plugin-html.html /docs/legacy/legacy-projects/ +/faq/rerender.html /guides/knowledge/lit-element/rendering/ +/faq/unit-testing-custom-events.html /guides/knowledge/events/ +/guide/dedupe-mixin.html /docs/development/dedupe-mixin/ +/faq/index.html /guides/knowledge/lit-element/lifecycle/ +/testing/semantic-dom-diff.html /docs/testing/semantic-dom-diff/ +/linting/ /guides/tools/linting-and-formatting/ +/building/polyfills-loader.html /docs/legacy/legacy-projects/ +/about/index.html /discover/about/ +/demoing/storybook-addon-markdown-docs.html /docs/legacy/legacy-projects/ +/testing/testing-chai-a11y-axe.html /docs/testing/chai-a11y-axe/ +/linting/linting-eslint.html /guides/tools/linting-and-formatting/ +/testing/karma-esm.html /docs/legacy/legacy-projects/ +/faq/lit-element-lifecycle.html /guides/knowledge/lit-element/lifecycle/ +/about/ /discover/about/ +/faq/ /guides/knowledge/lit-element/lifecycle/ +/building/rollup-plugin-polyfills-loader.html /docs/legacy/legacy-projects/ +/testing/testing-karma-bs.html /docs/legacy/legacy-projects/ diff --git a/docs/about/blog.md b/docs/about/blog.md deleted file mode 100644 index b34d8bfc..00000000 --- a/docs/about/blog.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -permalink: 'about/blog.html' -title: Blog -section: about -tags: - - about ---- - -# Blog - -## [Announcing Open Web Components](https://dev.to/thepassle/announcing-open-web-components-5h7) - -by [open-wc](https://github.com/open-wc) - -## [Cross Browser Testing your Stencil Web Component like a boss](https://medium.com/vincent-ogloblinsky/cross-browser-testing-your-stencil-web-component-like-a-boss-93c1b154bfd9) - -by [Vincent Ogloblinsky](https://github.com/vogloblinsky) - -## [npm Convos: open-wc](https://blog.npmjs.org/post/182917093835/npm-convos-open-wc?utm_campaign=newsletter20190228&utm_source=newsletter_mailer&utm_medium=email&utm_source=npm+Weekly&utm_campaign=72f3f1c998-npm_weekly_186_2019_02_26_08_58&utm_medium=email&utm_term=0_e17fe5d778-72f3f1c998-303236901) - -by [npm](https://npmjs.com) - -## [Not Another To Do App](https://medium.com/@westbrook/not-another-to-do-app-169c14bb7ef9) - -by [Westbrook Johnson](https://github.com/westbrook) - -## [Web Components: spoils of the browser wars](https://www.andrewzigler.com/blog/2019/02/28/web-components-spoils-of-the-browser-wars/) - -by [Andrew Zigler](https://github.com/azigler) - -## [Shared Behaviors best practices with Mocha](https://dev.to/open-wc/shared-behaviors-best-practices-with-mocha-519d) - -by [Noël Macé](https://github.com/noelmace) diff --git a/docs/about/contact.md b/docs/about/contact.md deleted file mode 100644 index f6559125..00000000 --- a/docs/about/contact.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -permalink: 'about/contact.html' -title: Contact -section: about -tags: - - about ---- - -# Contact - -Feel free to reach out to us on [twitter](https://twitter.com/OpenWc) or create [a github issue](https://github.com/open-wc/open-wc/issues/new) for any feedback or questions you might have. - -You can also find us on the Polymer slack in the [#open-wc](https://slack.com/share/IUQNUPWUF/awabyN8iYH4dXX6aGpu16ES9/enQtOTc2Nzc2ODEyOTY3LWM5ZGExNGFiMmM4NDY2YWI2MzYwOGY5ZTNlZjk4OGU4NTFhMGJjNmVhNGI4MzVlNTMwNGRiNGIxNjc4MGJhNDg) channel. - -You can join the Polymer slack by visiting [this link](https://www.polymer-project.org/slack-invite). diff --git a/docs/about/rationales.md b/docs/about/rationales.md deleted file mode 100644 index 6cda8eb0..00000000 --- a/docs/about/rationales.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -permalink: 'about/rationales.html' -title: Rationales -section: about -tags: - - about ---- - -# Rationales - -Our recommendations must fulfill certain criteria before we publish them. - -1. Language or platform features/APIs must be released without a flag in the stable version of at least one browser -1. Libraries must offer an ES module version - -**Note**: We currently have ONE exception to this rule and that is 'bare modules'. -This is such a powerful and widely-used pattern in the current JavaScript ecosystem, that if you don't use it you basically need to implement everything yourself. -We want to help you build your apps as easily and efficiently as possible, so for now we've adopted this practice as our only exception to the above rules. -The [import maps](https://github.com/WICG/import-maps) proposal aims to bring bare modules to the web browser. You can follow that repository to stay up to date. - -## Workflows - -We recommend implementing the following three workflows for specific tasks while developing your component or application. -You are encouraged to freely switch between them depending on what you are working on. - -### Development Workflow - -The ideal development environment uses no tools, just an up-to-date browser and a simple HTTP server. - -

WARNING

Unfortunately we are not fully there yet, because of the bare modules exception you will still need to have a server that at least supports them. -We recommend our ES Dev Server as it does nothing more/nothing less.

- -When would you choose this workflow: - -- When developing new features - -Why would you choose this: - -- Simple to setup -- As fast as it gets - -### Bundling Workflow - -Chances are that the web components you're building will need to run in more than just the latest browser. -In these cases it's time to open your toolbox and make sure everything works in all supported browsers. - -When would you choose this workflow: - -- To verify everything works in all supported browsers -- To debug legacy browsers - -We recommend our [Open Web Components Building Setup](../building). - -Why would you choose it: - -- As good as it gets when you need to work with legacy browsers -- Auto-bundling/reloading - -### Production Workflow - -Once you're happy with your web components, it's time to put them somewhere more useful. -Most likely a publicly available web server. -Before you do that let's apply all the optimizations magic we can cook up. - -When would you use this: - -- Optimize your build -- Publishing to production - -We recommend our [Open Web Components Building Setup](../building). - -Why would you choose it: - -- Multiple bundles for differential serving -- Conditional auto-loader for those bundles (without a special server) diff --git a/docs/automating/README.md b/docs/automating/README.md deleted file mode 100644 index 8047aa20..00000000 --- a/docs/automating/README.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -permalink: 'automating/index.html' -title: Automating -section: guides -tags: - - guides ---- - -# Automating - -Having continuous integration in your project can provide valuable insights, and we consider it an essential in your projects. - -## Circle ci - -If you use the default generator you will already have CircleCi setup with a .circleci folder. -It also contains a config that takes care of linting and testing. - -

Info

This is part of the default open-wc recommendation.

-## Setup - -```bash -npm init @open-wc automating -``` - -### Manual Setup - -- copy [.circleci/config.yml](https://github.com/open-wc/open-wc/blob/master/packages/create/src/generators/tools-circleci/templates/static/.circleci/config.yml) to `.circleci/config.yml` - -## Usage - -- Register via [https://circleci.com/signup/](https://circleci.com/signup/) -- Use Sign Up with Github and select your user -- If you already have an account, simply login -- In the sidebar click "Add Projects" -- Click "Set up Project" -- Config is already present so you can simply click "Start building" - -## Run Tests via Browserstack - -- If you do not have an account yet, please create a Browserstack account -- For open source projects you can request a sponsorhip (like we have for open-wc) => You only need to add the logo + link to browserstack and write an E-Mail. -- Go to [https://www.browserstack.com/accounts/settings](https://www.browserstack.com/accounts/settings) -- Look for "Automate", and write down the "Access Key" and "Username" -- Open your [circleci App](https://circleci.com/dashboard) or direclty via https://circleci.com/gh/{groupname}/{reponame}/edit -- Go to the project settings -> Environment Variables -- Add Variable: BROWSER_STACK_USERNAME + \${username from url above} -- Add Variable: BROWSER_STACK_ACCESS_KEY + \${key from url above} diff --git a/docs/blog/announcing-open-web-components/images/blog-header.jpg b/docs/blog/announcing-open-web-components/images/blog-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3318dfb9a80e07a544b7d053511075cfa3a6fe7 GIT binary patch literal 10992 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 L`UXI4zM1-8-!lD; literal 0 HcmV?d00001 diff --git a/docs/blog/announcing-open-web-components/images/media-image.jpg b/docs/blog/announcing-open-web-components/images/media-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..459fe86d9c5fbe39246321fcfed19262319f3a2b GIT binary patch literal 12064 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 { + const el = await fixture(html``); + expect(el.foo).to.equal('bar'); +} +``` + +### Compare DOM: + +![compare-dom](https://i.imgur.com/pjGezjL.png) + +```js +CAPTION: code snippet +import { html, fixture } from '@open-wc/testing-helpers'; +​ +it('has the following dom', async () => { + const el = await fixture(`

${'Hey'}

`); + expect(el).dom.to.equal('

Hey

'); +}); +``` + +### Manage timings: + +![timing](https://i.imgur.com/iyE0IKf.png) + +```js +CAPTION: code snippet +import { nextFrame, aTimeout, html, fixture } from '@open-wc/testing-helpers'; +​ +const el = await fixture(html``); +el.foo = 'baz'; +await nextFrame(); +​ +expect(el.shadowRoot.querySelector('#foo').innerText).to.equal('baz'); +​ +``` + +### Define multiple custom elements: + +![definece](https://i.imgur.com/lHUO7BO.png) + +```js +CAPTION: code snippet +import { fixture, defineCE } from '@open-wc/testing-helpers'; +​ +const tag = defineCE(class extends MyMixin(HTMLElement) { + constructor() { + super(); + this.foo = true; + } +}); +const el = await fixture(`<${tag}>`); +expect(el.foo).to.be.true; +``` + +​ + +## App Starter + +​ +Many developers have experienced what has often been described as "JavaScript Fatigue", the overwhelming feeling of having to keep up with every new technology in the JavaScript ecosystem. JavaScript tooling can have an intimidating learning curve and can often be frustrating to configure. What are the right tools? Which tools should I be using? How do these tools work? +​ +Our recommendations aim to relieve you some of that painful setup so you can skip right to the fun part; development. So if you want to get straight to developing, with a powerful setup that leverages the best of browser standards in no time, our [open-wc-app-starter](https://github.com/open-wc/open-wc-starter-app) might be for you! +​ +[![app-starter](https://i.imgur.com/HMiq3b4.png)](https://github.com/open-wc/open-wc-starter-app) +​ +Live demo [here](https://open-wc-starter-app.netlify.com/). +​ +Our open-wc-app-starter will set you up with a full configuration, with the following features: +​ + +- **Module resolution** +- **Automatic module type selection** +- **HTML, JS and CSS minifications** +- **es2015 and es5 output** - Using [webpack-babel-multi-target-plugin](https://www.npmjs.com/package/webpack-babel-multi-target-plugin), our build outputs an es5 and es2015 version of your app. Using the [nomodule trick](https://jakearchibald.com/2017/es-modules-in-browsers/), we can serve es2015 code on modern browsers and es5 on older browsers (IE11 specifically). This significantly reduces the size of your app on modern browsers. +- **No regenerator runtime / transform** +- **Polyfills by usage** - Language polyfills are added based on browser support and usage. This leads to a significantly smaller initial bundle of your app. +- **Syntax and javascript APIs** - Our config only supports standard javascript syntax and browser APIs. We support stage 3 proposals when they add significant value and are easy to support without major performance penalties. Some of the proposals we support are: - Dynamic import - import.meta.url +- **Testing suite with Karma** +- **Linting with ESLint, Prettier and commitlint** + ​ + You can find more documentation on our `open-wc-app-starter` [here](https://github.com/open-wc/open-wc-starter-app). We try to provide the best, user friendly set up available and your feedback is extremely valuable to us, so if you feel like anything is missing or you have any kind of feedback, please feel free to create an issue on our repo. + ​ + +## And much, much more + +​ +Other recommendations include anything betwixt and between: [linting](https://open-wc.org/linting/), [demoing](https://open-wc.org/demoing/), [building](https://open-wc.org/building/), [publishing](https://open-wc.org/publishing/) and [automating](https://open-wc.org/automating/). We also have a fleet of [generators](https://open-wc.org/developing/generator) to plug and play any of our setups in your current project. +​ +If you're interested in learning more about our philosophy and the rationale for our recommendations, you can do so [here](https://open-wc.org/about/). +​ +It is our goal to help you get set up as quickly, and effortlessly as possible. If you feel like our recommendations are missing something, feel free to contact us. Please note that our recommendations and best practices are subject to change and may evolve over time. +​ +​ + +## Join the conversation! + +​ +We'd love to hear any feedback or questions you might have. You can reach us at: +​ + +- Feel free to open an issue on our [Github](https://github.com/open-wc/open-wc) if you have a question or feedback. + ​ +- You can also find us on the Polymer slack in the [#open-wc](https://polymer.slack.com/messages/CE6D9DN05) channel. + You can join the Polymer slack by visiting [this link](https://join.slack.com/t/polymer/shared_invite/enQtNTAzNzg3NjU4ODM4LTkzZGVlOGIxMmNiMjMzZDM1YzYyMzdiYTk0YjQyOWZhZTMwN2RlNjM5ZDFmZjMxZWRjMWViMDA1MjNiYWFhZWM). + ​ +- You can find our recommendations and documentation over at: [open-wc](https://open-wc.org). +​ +You can also find some of us on twitter: [BennyP](https://twitter.com/PowersBenny), [daKmoR](https://twitter.com/daKmoR), [passle](https://twitter.com/passle_) +​ +
+

+🚽 Made with love by open-wc.

diff --git a/docs/blog/index.md b/docs/blog/index.md new file mode 100644 index 00000000..7060b1c3 --- /dev/null +++ b/docs/blog/index.md @@ -0,0 +1,19 @@ +--- +title: Open Web Components Blog +pageTitle: Open Web Components Blog +layout: blog-overview.njk +eleventyNavigation: + key: Blog + order: 30 +pagination: + data: collections.blog + size: 10 + reverse: true + alias: posts +--- + +Discover articles from the core team and contributors about Open Web Components, tips, and tricks included! + +Do you want to write a blog post, or want us to write about a specific topic? [Suggest it!](https://github.com/open-wc/open-wc/issues/new?title=[blog%20post]%20Write%20about%20...&labels=blog%20post&body=I%20would%20like%20to%20write%20about...) + +_Note: blog posts may age while our guides & docs section will always be up to date_ diff --git a/docs/blog/testing-workflow-for-web-components/images/01-watch-mode-intro.gif b/docs/blog/testing-workflow-for-web-components/images/01-watch-mode-intro.gif new file mode 100644 index 0000000000000000000000000000000000000000..3592b42db69c9ff7cc9022440b2001fb3158ff74 GIT binary patch literal 430867 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 z\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 literal 0 HcmV?d00001 diff --git a/docs/blog/testing-workflow-for-web-components/images/02-debugging-in-browser.png b/docs/blog/testing-workflow-for-web-components/images/02-debugging-in-browser.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c6dc07e5117b76a52c4f0568c3cff5bf983484 GIT binary patch literal 64880 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 +})XjycRy;SejV|9?9v0?2J1KwHR(@ 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 bzyg@eq=g=7U5dN literal 0 HcmV?d00001 diff --git a/docs/blog/testing-workflow-for-web-components/images/04-coverage-line-by-line.png b/docs/blog/testing-workflow-for-web-components/images/04-coverage-line-by-line.png new file mode 100644 index 0000000000000000000000000000000000000000..4ab4b00775bc4ddb75f7d25b44724ea9ea105c03 GIT binary patch literal 20149 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 literal 0 HcmV?d00001 diff --git a/docs/blog/testing-workflow-for-web-components/images/05-coverage-line-by-line-else.png b/docs/blog/testing-workflow-for-web-components/images/05-coverage-line-by-line-else.png new file mode 100644 index 0000000000000000000000000000000000000000..342dd9190230c8be26134fde754e2b1c2f7605ba GIT binary patch literal 9119 zcmZviby$>J_xERpZbwo&RRkHjL%JkYN>V`tB@{*x1{joXlujv;5C%{>22hc1h7O4V z28ITadT%_>bKY~V-}47Bb8*MoYv233*ZO|$FhhM!DspCW5C}x2t)*rR0)gj%&wZrC z!0(&pkXGOi*uz*;1ytJ0x(a+DbX3+;27$_BC{FB%fbV4PTIL=g5Ov$d54hd!qdf@3 zBd)EceAml*BSSBORWlWN%-yeK9=z{+*2c=hT^g@bq9# z8}oO_70<0g2euNCb?XD}w$6`}54SA8R|kzDctk~KLnA{w%Zf@m{n$zCcjZJY=?og< z%(vN7*mf6`nkStDvMp0~b9dL8tx91rJ=;rg1^E3MNdtq;-LSFsGo=f;| zEgdPX9ks%im)^Y?AKJu?lNk@DS3b=!J?v39TK&4pvs;x3$b5z z9XvS=QJPK0xE87EqHOYtpAO+RX-cqePt~7L(Pk8T5(@)st)F& z08Yn7(xF6@ntyX4pvBSAx-eTZey3jZ7er8D5a_mDW)f;mDo?7zR7=~Vw?e>+m=XlK zvjVf-Kan~s9Kc~W5H`>ILhk^hS|=yG_#e|WkwRj;I99MeAd3qOLW^J8GGqz`VtDk= z9Dy#5MS)0}fN_B@0e3<}{z@+M5At{jK_I5CJfRi))*vdGfQ!(8Ib((J5T*Yh znKJZJw2XVZoDO7t?$R8e;Kih_z<_(s9UPU#Hz0y8LI;iyL9Ym{l;`EiI0DlvP593c z|9S@g@4SNu8%#<$Qig^!mt7Rdy4-zVJ&o2E>V_*QWIoy5+xse?(ZmB9qa`M-iKQ94 zgC)|BhFZM?LUA~+m1MluzWh^9!Tc8U=0caqO+3Z!R%27teu9jWY}r}8W`neprempw ziLIulOCffX*3?mR`9xg-Dw2g1SkxWyIqa$4xA$M%b#I@-ou+`0RzSk^snl1E=@fm> z2p~cgzF`034mOY94zn8vHs}qB*t%thYC1k}U(Y1Wpu5o^nC*7e>iH|+Oc7)BGy+|g zRsX{@IN!1o+4kL}19!1_>OU^7<$f`AuCQY1_yVEE7W+!Ymc z@ZOCbM<$NrEc$S2=pfvs^*gg32J>f+E`gO0_Y6Sj8R6ULS_JwA z+4(01l=JORAWtdhA-F{-^4{XLuRGhGxc3K#YksmS75jILoj$6^l@wnssXqNV_bum; zjkP`OJ4V80bA@#nPFkj1lliGww&2lug|Fa(x4&|u9NZA2x!I;8BJX;V|6ZYtw3a;% zxr@o(8h;$?*z%H??4GyUC1LcLNFl{Um}F$I+ZQBUb@Fz5l(X~(?@yjglR%ZJe!0bD zXW#q7XJQcjOrWOMUCO+Tr$10Y?GpeXRXItx9Q>4L=i%&BzhPz#8h* z!HRJAET}e^5pNUKc%TiX@n=aTWwKRD+2#{$cL_!MF5sCv>O`WLC%hEStAAvNd6gi2 zAFkWKXYsCg&6&p>jr$qGY|8?$Fje)pRX z5si~L!wt<5yLhC)#OYEr58vfd)@t()ytT^c`Nlp3d*0Iq>g_Lg4)Y(a-|q*;dj7XU zMQ~BM^0qF;UUy2FMZCy+tUgTNVH{|~N*x*3Ot9>z1v(~!WJWYzcK>F~V+ZGMzTRn> z+(y3@ABS3`xI*v@w9fKR{aUw1pP#rE{}GmdOGH}>y3gqVEMnC^?f8|t+^U8zD&Ay_8jca!FzYhoI zZ8<$Up6crydgy~qDQn9>0uSv8S*g_dA^LnP2C;7+6@|ts`Myf9G`WEyoMhNS2dGou zLib3Zn$u>=W_4(4vpj?a{Uy-eO#E}#Ikwgzevg`d&57+w9Umqf{q|s^>Z&-bd_H5a z_AJwPn3hueBXiwj((k*v5+But=^oTHn>=>)cX6FntVk=M-av&7AYiSJlQm6;pS=Og z=X_U6dQh&iHn!f!QOvNVPV1zB#jswhd(k3k5x!k(l3&YE>th6E6X2io_K~{jZ`!W6 zEI=JI)C(J_SHZN{WRV{Ry-(AXiSBjT#ugongdr&oVKtiDjr5{#zK_{St>y&Ni`_=& zBhW<@vQqk=fzevl4U}p9;@REbU;g0*iwhQrO)3y^vrPL5W7vh}kSZzG;E-x~aWJ(H-#YBW*ME9)V6BE* z#a((zTVkqPbyV_spQ2BBHUc%%A`yo7$EJs42ZSO9us=gbY4EzQY@$7BNFc#q#0n{7 zQ#@OAEY#bf{7%8@+?LlSZO`^;cMIhi&rZT#eZp!wzzT!<6V!9&jj8fn7bl!Bb5+nF zx|?%)QC8h!vMURLLxah<->bfXRK8KHcRsmA)S1YDuO0I7ejOTanT`1H%R8w|mFL^7 zZGv6SODXTiOcXV>pE$44-8GJ>S;UYDqq^bS2 zfr_g7-7D+X!7=;_%Whp}q_%eD&6E|>o<8zAp<{!om1AP<){--J=SVLWc|DO2xmoFh;r(PJODMdHK3q%(l>`+BEyY8>DaJ#z9M?Ax2-D z57s?(baw@3=)b*#TRKdlbw{wiw3=3I^`7+D5xpxKO}6QB`^e9;dfNS*uEPVSNN`m& zcz@6a9fUwjGP@=&EeYi1t?F8o;`vGrYTZtZP0S9UnEv_|?QqwI35RivLg1^1V6YP{%+7ZVhV^kJN0G$ny?0X``HBUom>;oOPV)N-g1r!?Y@c~OxMJp z5gpdwFggtcv})&D@$ZJ6VDXZK0jvIpe}tbwQX;nAmSe3SHMXf?> zQA61g%o_9r1m5H)t?2^v%6#56^k?EiEK$1u0j@4f%&nQAgz#Tg*A}(3l9E*O*?w7% z+-5^%`48_3MG&Zjg|NXv?F0XS>kTa?knJ?*+|41Wov4VXBp?uu2<(;;Z+V=^4dY1l zuRrcTd8r^nkphO=R*zMe97(`D@kjod`w^HU}LVuwS^+S%$9rk%7dg_G3?X6fAB%IwCY z9#>sI;pl178qbsMAIZIiS=7_X&1c)CN7JTK`+HulP2QN3<&)Bz{;9ZYI%Vv4k9}radm|7k}J)JYZFL$2mhG^IA9>$*LF zNJ@WR9#W*Dl7&{{(leIh6I+XH9SoV;ulAF2Na2ek_PTD^`leHn7QIu@fWo>(>ODuX4 z7iGy)SDNjRj1)UU+9;Lf%$quwtf)Lcix*!QjPj$A;&9g~sq|ES$!(Q#@Zex+7_qO~ zSQF?Ok!jM5n<~zk6;*W)5@oD9v(thd3De!& zX@5Eq3U*lrF6sz`l&Tp+`XSMW`3H=wl`4AoUlqB0UU`lkPATJM>Z(YodOHFy4rf4> z+Nd@3A)}EL80AEZ6o!K&P9KlP!b7ww%JgtBgRO+;HB2&0S9|?YabZ zY<_R@@}pZ)1&amkk;)G(a0t+)5VAUGcEYs_@(Oijd5rH-i(lmP2?NTdA&t0>1zf;# zswLcWFz`&gd~VpYY39h`l&GYMGoJUpg$Wcd#?3$14L9_9_UN$q#|%YbwXDgG_c(md zw}@$%xY6^}Lfd3#*a|%$HtqyPk^ZvU#gMtl_Z&)!LxlsocP^VGr~B&=HZ&p7{N?xz zqz9GiFjKXfieW`uaHA7y<3NG1q$-B&pnxpr(YUEV;6*)WI9Mrq2Rl4m?=f|70wKrp z+V|@!g3;>qY)>Qhf6PY~=f@JD}NtF`!g&RJX@5oe>mp1wj4LV>xl!e}IUqW+(sed<;;d9eol9srfQP+g<&Se; zs_Cg%>C#k2x4?HWT*;fZPrIC; zPwuIspJ6`FjBXTX9^N~ql%C3>qvv;1;Y|y(Xm2EnLS{R7GVYmO^zQ2{<#$8kr@5*2 zMU~=Kv;T$eP9n$*n0u%x4pkC@0E0$p{&)%h?vuBy zJsz@WAs){(Qj%~b>%6cHXhAr#v-&<}-wNKU`$64E3i1%WbOHTq#QX?>k~lvdkLQ2C_?CJP*^*8UG0fin_m(=ik;W~o)T?%@Pl+U zk)aqCksA_1J6p9_n)b+fDZ0Hh{Wx5^@=aA+Jvhgk z^gW;Dl-*TvuFx~bFbu&`yPuSfWA9cMKO+5wA821LXG_o--S)2zMXQ1f4)1Bis9VOd zY07k$E?(iDbGMSgFB?_o$&E%^=Y?-P_@Y2QAga_F$FZ%I#6OU&Rcmlp@aJ4`(?3 zxs@vw_}8PyN=(mTkBF>>_C03J(7tu0v|E%+w)K0A?jjuS%`1RGG?et&l17eW%S_F0 z-eX3~o`*2qpF&pFx^ea`QoW?kRWFZ4DK~m{xR<=ff*1Di+v`t6&h-(rM?oIb9UB$G z1ukEB*Mm*scA98kNK_lU*tCZ4&dKiSTGYC(3oXpN)i(AgZ+Pd?(Ze#dei4v@>lwJtS!M?sPoDfp{N@q z{aIj0?-BunPM3=D;L~u9&DxGY@dotZ#{i*arp4B1zoi2yEUC%(tZMs?F4dB>gI7Db z!g~!-dRrBAe);>C9aHlc-V<-uPZne-xwaX_6=g+C>L^;}kHFNc%>_QQjwqC?}^Y#f`nOaP=blV6 zcJ=T*!84`AINDuPbQIKN-e*QPpLyrDJpalc}9;{%YOzFUX}$+0-71VVSy}0U1P_ zFVW9RW5dblk~ix^E_dkRy~bsanr3a>DQ$9iFBKliyx#XUg3~18Jji!hX^uo~`ve$Q zU*LW8T$|K`aqE6@l@G4U2D4Mry7P0Ocpt_(+!=yi<(ZpIqw!+Wcjqq;(k9*W)_>ra zLZ8IwA_6N@j9%vv3HIQf6LwO0kOr{=Gp^aT#~idqVOV~jl+wHN+>U!g@6PL(lI2oT z?@6@2s?!Wb(PuME{g9I@WnilWipumq-T~8aPi_cYCU?M)>wV2P-g8>Dh`TrN&@pR3 zl0Mr~Ko%b7;;DASAsk5o9}7nopWDcP)Zxq3AvJ+;2Vd1G?qVQXkA`YLuxHz8A8jw{ z(g0(g7mscTs2WtT$L&qx2IzfD72B>H^1ZgRvIG3el3nmiF|MG#Kvm;GN*!%p7qD)X@OFAzaI0<;U#7%-BjDetM)FNC`#A?&xJPmuLIz@2&OgQY-NtSBOu&p z&0F!by3!gJe&f^o+{cpJ4xA;bj2L*5Yro_RWt^;iUyBifc&bI>_vKTaHvipw`{zZ{ zPFlGN^3FSyjHpnJ#MO=OBgzL!k@0WvHZq5MT0U&8VkTi#-Hf}H97&#@$DfxM4vKC#}-g$-CpZ0K@q zkDV5}Ot?B+i?=oRox0@=XG>j$!Y{q{zJBz1x7ZuLLxGcBUQ^(FThhlj)2ky@+q`Aw z+js9enOP#$c#^GBSw~jIbeUp1&!9}}r-%RD+d-Z=4gzbadf7>@)(zDrG-Z@ugw0Q0 z(W{W)9!^^`j*RQ_rxlE_eq_W)61DZjlS&&*L>rd;cfdao02)tpvJi9s=7oj)7Y_Ja zZ!WBEpd*Uk#YFinB`s;RT)rqMN{El;+T?N4!^p*PzAX`1a@9!mH9ol$1dSP#yv#FthqwN!uP~xvd znOYhFBrinv63nTWOj|z%f^nA z8ic%efg}FQLV!f1Yvm~YFZ*0zae3#V$Khg1ZDB#dGZ!KK=Ad{quNX!E#kaIPBy?((Rp>c!?Sx#Gegr=>DU3+b^(~B;#-ESmWDb3@}W!;!8 z++(xE#;k`6T%gNRXPa0Mu z7)}&iI?Ycv-!p72JjyT`tV+tWZr*jke^al#?T>#xrX^XU`Ma)$J$?|rGNn{&;N1AD z4tGrFFXXUdLR=Q0YKKJLvu7bSTLu8sP5~S3@9zyI+&}ptc#UT6`Iv4DCXHu7!YCY> z_I%B6?88uk0I@}-o+5Uz$*Fq+1L9QcCw4^%M5)2>-Ux<>MAF1 z2-9P=8k(tlRve4c6-C`}-(HbJ-T93CXO}!^{fX-u`K6Y(J07hD)0L{K;VXwt|1^2t z_X#OO)ZD<6rH&crQVgh==wg{cJ_T#^<$2k0;@z^WWP_#JEv!NJ69uIkPjYM+J#)78 zNNd8J5uW16o~RGb$lULD3}P6zh@VkG-BHbtXHDK(01Z|>h6|S2+jRLjEymBPzp(F) zDf*1Unp;%p{iZTP$=<>yWE&Elvs$;;bO`d%FaTp<*6?t(uR;>pe*6Nla5bIOy0L%Q zXt#i}Zv6_^Pi+VT|HeC{3lBc}Vf}z_-nD&2k7Pv@saGIU;fT0sbPr`w)zL_f4??Nn=a_A}{+o6`>3eo&LqMyoui z#ns7)7|`}6bK9Etxv`wHy|~t;csUA32-dw?c=u&qdf!om7M%&YNfDkmqKj_o-Kn0q zIyPGs*LN#t(kllUgqMVMs~$br(rz$1{q~{GrbXiIF~-vIWmIQYKDqD4`s{|}a~hqj zkU=by?QF6-T2Z+-F^9<(o62-mkr?`aCHehPzBIe{HVD=&L-J)zI!toVLk~ zgp?HX-p}wCVE78ihx(t5Rz0ITci7oqbnyQckZ4jcrp=g`;Mp)gnS`3v%Lp_BZ1ul@+Sbw$1WHzM10Qyf zJjH7AlRx~^W?zmIZqtQ;&`jRsHJXaH0<$|5W&kGv$hGocnEB*#Vm>WcPTB20dz0y( zjC>G|K<4|%Mn|XN*FyhLXb7;Cq3OPpc|rbQZGwxOAe}hpvV|`Jj%N4&*rWe1>lIc( zhXH;uk)0fAd(kd%K~Oi^7JO|N{A4}3A7`LR3LyL-I|%+A&9B5i{5iQ51WwuopP#IS z)KUEY50lmf#@ILn;f_Uo@VD~7W1e_>_o;XA&Z&xt`}#BGEC_FJ#y>p;an zVc6PVDwk<$5XNe1E^BpmsONuVhCY7K^wh)J#bZ6msiVngH`l?`apPp6YZUoSc5J1Z zZpqbxod?1Wl^_7!iUUK0770wWf4RLu#zglWq{4LOhvSyOxV{jv&Vc#g#Xaa%mXBS+&ad6(%=rzJ`#Q5df z#nWHKPbPis+cSts+_SIZU>e^Ky1>MssEC^b9kk^M4yHy)#}v9;>VqWA!6cJfFFlzg nNS>R}5dmBSgd{*GpOd&g)(TLJs$K^s6{M}MuU4vJ`}+R@HiqHo literal 0 HcmV?d00001 diff --git a/docs/blog/testing-workflow-for-web-components/images/blog-header.jpg b/docs/blog/testing-workflow-for-web-components/images/blog-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3318dfb9a80e07a544b7d053511075cfa3a6fe7 GIT binary patch literal 10992 zcmcI~by!s0_wN}RloAk-E@>15q&o(XE-67mN}2%?=~7~Vp}U5XZlqDV8M?buK$O0` z_}=&H`+c6@{pa4h&w0+Q_4%x`_C9-`y`DXLotw#djK~xfIon7 zTQD&&v9K_)aqi<_6X4_F;S-P(KD<51S;?r#Zco<791L^}9FL`Vo;=}^Qj!pnP%_li zG<0=vO->#L{ogvc`3m4;fZ)iR$RJt(2_J-v54vds$p300>R(O$r=TJsqoARKFm9#+ zjNin@KivOM!QEvIB9t@t`QLSLn9c+0;o*z_LQ6O{0ipKJe_^I?&H<1$QpBI&GkO3( z&8zzpLgspb9$R!~Fx{dX1pkw0=GkQHTt*NdJ9*r?@^A@?G5H!=5tTsr z2ZJ*I?pU`P02$~U5jRY*{oxJSy!NS)H$YsiM-u<8@{e1P8sRi_-oU-;g68+3)PE4& zQ^@-50Pq;j`qbzT82O0_ws8vpig8S1&g}YwFngO(XyOe#aJ9$`;cNL10rIlIc1Hn# zsQ&H-sLy|J0M}*OUx*Jt$|q;#F*NyuKsM`r$YTVcUim%lzpmpcfK$_%D>W;+V_h-n;mhBL9K` z%K0M2|9av7ZSa5A8dFFYZ!Ngq{?RT_)lUrlgVZuHlpDa|Y-c+yK@gp16gT77Ta|tF zGa*sU+Z)KL=J0-d2AvRdjMTrWsh{p$oGVvI=-EYFD(iU&x7XbOEIVGpE*A}UWh>_P z;JLW!%bC&_bw$Ml(|Z#xWK!EYmpj^fp5If}bq!*Z3z1>Sh^%&+p@02=nmPk+1j zp!!CA-cCWbK0oI7Wy?JFPY#mvs=^N-UEwK+F{PhX8vc&l*9<~4GY;iea_ z2mdkp$gHxGoRPBeAGk&5R*Nf%tts9+ni#qC9hk|U+9uy{9zG$(h1Uii6Vx~nd2Y z9Is>GvOmbLb?V+2t~v8Ug9v)z=bq?nTl#}J$2eK{hL^s~%4!zG+SIkJqj~Vm3wlWYHm{-6HbMt8E?_>By@E&p*0LP5I?@aT8J9qF%L zJpB*%-xBgx*1q8nle*<t~G_dwee!sP90WoQ-WzWWV>FaxV#|i)rP{Zw4^fHAtK-R=H#T z>w*E|#FQFL0FW4NZBeM{edWBR+S$Vuy*?qx^7wQv$qD^7Hw6 zXAk?0@jC=mVB#13aBjPA@lJi{@_7aH_WT(9Thq;LL2dfba;H2HLwZAfCt+Q3L|`qy zy_1nr%{9~M(iWPH?$md^IyuOxkL~UhP*l(ENW^mSyv^@!!)kKvxe`gp5)7NGqQ0}h z5ltvWIk5Krt=Pr)dhecl{H6f@XZ&{vF^ER+>8;SC2W$6hJ_cqGTEkoSoGQRx0< zICjwOg6W0%r3M4%$@PkyF41P*qkpP)i`aIU76@aMMj`W>1^BIP9oNj%- zEps~&)9QH#h#oX<87ryie|kE8_n=UKJ{il?l3zhT$ZK`lts^|qWAxkRJIB@H;oH7o zk!nfKXfm%HrcaJiK;#5bSKDog;Ftiir~C%_3F4t_GF6b_NLraH1qL&r5D1RH8%a0p@W;^=J$P zU&<(Q2SAkqjVp3b+Ek{y;Kp#sLG;uPvTkv}o#eAcrzH??yg?Pp_s8J#GL(*^!Fx#O6LT`Ep-u&#Wd zj9ajrOpBVB62JP$j4Zud=YFmsWMrct&egnSR(5t<2HkDVkl4REQ$xPgVF$I5#I#_G z3YPf*mNklIxpA+U*}U?ytF}A>mQ@MCvWYV|!Bc#0BW(L*mbrGfYBSxud6AF2UnDwv z%|AlM&1CFUwJc|3HuA_8=dFpI6;#BW94-{rLb!p>6RNgax&U9icCL>y84?!}%6G-Y z+NKdfid~-AVoM{~zL1+;CYVnb(d^c7!`xRsKFgek3@Wx$`LOeqNMng0MPbP|n|fU4 z^G*!v!dPB#eS7VG90e`W&Is+c?p#ykhaH6X(>(n;DIYz_(v6a+V3Rv6A?tlc42tiZ zlr0$Y60lylY|@BI!1ZuCmN9GS;iV%Pa0~v`q5R&n=jhB(d7o$v(cE|u;AWb3pvWQF zD<_|4}G3qKt1)!aY`Mn8kFE$pVB-?Sg{Jj7;w;M4Ievi7F`)3*@9usYDw8k$u)h|YWZ*kaEahPDM#qBry8UqY&m1bHPZ0qBEFudD9;?u z4v>Hk3=3K!#0g=9Ad0NjIkMH6)Rkjy`XWp44n3CR_>l)HgP}t%iCeQ`6|N7ft_KnR zqUAFN#{7|k4doul3H%9pqoHr(_oM@4yQw2Hp7z%kdmXYL&yvm6db@R_YO$4=`G(VuP^Nh@!g7#@)9~k><6AdIV)H(&fR_i@{-z+mZ|0@Q8FQ zF!jjclovvY=p+E_eaug7r~K|mFzZ?ntZ5+ooeH(L_^PKym)r+iWk$h^Et{e$!XkS7 zGjQp{(}&GG%?${=XnF=Z0D|jl*6gBh>a?ebC*GQOlwx$2OIOACIjh(5d)Jbo)L4fs zX3-}R$LpmXifR=)--^EXqU`IB+yu3fFWjX?ZQbsk?gpS8!D+DfCs5t%uLjuYWx}BG;OkEHv>uMDsEbuc694x7JRs&sF#(MSYEN0 z4v+w#qtymE1s`ozx8!Ee`wLmu{#?anvz)=CY4Hx)XCC+5A)T;#y6cPE;>u zMd*fqx&hYx@K?dFI!GPbJqYRZu14!AwlHVwHQI6;%Im1%5#lHizvI)T7ZAaj;G>cG z=m*RedREN3SemmkxCOe(ip3W^;-)#Qd{3A>x(QdR6$Js?C21%>fX+j;p7p}|iubs+ z{37fWwFu>LNuA@AXRwBv_jeiHi17M$9$vCTvu2``JxF$Ro~O3L;L*LSFGu!JCW-5U zRLdem++OarZoo-WUv+tEPKA!tDN}~RPAKpO82xMG02$EA{Iu%Yn?%y`A|Uz~(>~Gg ztO!~fF8+Yzj^P&(GwXzToxC+~$3Wn<=n>>H3=4!9UpQ`_(=_x_GH4F-`koe*&8-1u z6`r7~MA>JQVocn^1iaVqHK{JxGg1U9LiIW2U33eLC+O7(Z>x z)k2o0JEuKUsrBVcy}%7XQ|?s|`i_aJ?~;N{KPA#O2J>4QgRZQja!hpULv)S69AVx9VWCMluLX z=r^s6SoBPPde%AJUT|igDi`Gne!C5`P_I>Sc;RVpsN7Bhc12Lx2{ny3iWUgw4}xC)<K z(g637=uvvw{@h8N`xvEP`GF;*=A>;cjR+aczFohZ(=A_JEC0rG3ZWvK_hZgXE0Z%Har?pzU{OQ{Z{KR~j@F>5EHrZDU`aKX(@_gdwL8QuDfxe?F5M+Yz!OvY%X51r100AJ1G%O!%6{rBW3(tT9erUm9J#o8Fn zAb8&;=2Q=P3b`Tm%M%-7p|P)C3y%6b$`7$hNrdoTjy#B$EP9wMsHsgsU>b2Li;T@l znzH?lu8(yeWmLf>B07NcAy3&Z&TCNB=c*j2@$^Io@1c}Oi@?OIzSH0lE%cHaphZ=Z zi7eIW3wM%COqq;)iZPws_OfUIvuwKtd)@5{!z_oUAvLqw8%yrHGN*2V694ODycnVm z=LbE5^HF<58Eh_}PBj}j?kUyM7YRlS0)*V-v6XU>T+7DZJMi)uI0_9#D`O#I_mS}) zfs=hEdp1<5^g&t~xZo;V%e^pOS`X%nMKmAaLOZ5SUhX#WsaN)&O_>I08YR70{cBt8~7WoPN$BcQ=9n|syHtK`B_>BxN; zLej!^<`6g${g%EU&$i!iIES#>lb_9QvX~ezQdd$jWOstEhdH^^szJ_ zf0YwEdvBZVyLPx`EBAF0Vq#OsBD6H3)J2&5ZR@FzHipv7hFsw3^YSHey1bQ2FYC>< zAnyJ`Xh+utp|sVT=<$qt27~fs?Jwr8t;0^T9#iuzj})ELOARY)rt!8ezy(;o+&}VV z%aIv(#qweENz7-;dHJ1M8d)m_B~&6L~-7 zdMLPh;QfLCceRGZv^{H^OE|LjX~Y$DGXO`1E_eO`xH!xt&R-KSe_fkBEx1 z1+KFb0}7)n$}lLtS?~<|g*@H2fw^RlcTv(-^-F)rb2fTsB(kg$%Cc8|Ks-zunRWeE)LhB61Of3W$(wNlF~jH@zv54HO{lebZ2syvp6-DeKC9lsfI4WccB z9AedN_RjL}m$xw*nid`=zcnQs4=ZbYQ+c>*By!XX1r6F6DatjK3P?(&tawki8J7_5 z@)Q(R>_3FX;}mf{vgeBkAdKYAK!q<)7AQFBn?-#;xh4?gb@RVNctJh zr;5$1|IQny^~6+n#Z|1bmXt2&V5`M9(PuPBuiuZx_ zW=Oe0hn1gW{j}0W@?DWPhXpxoi_qq73QH3GpoyPX8MhC@leQ?Lc|3lUJBW$9%Vd)- zK9yPyE`}BF@#T$I$HAs+OWbkQq%EvNoSZM;d<}Z={0A#lU=?p@)25WstKq;BbWmWR@uJl41T*_@; z{_>+=>I#|c7ojJv@5cEf*F#%RWCP0U@@E%u)_O1DuWT&vWei`t4~6I8(z0}B*>UZ& zJ$}LX5*pyUJxk_>)2dtNNMpIq??2i5ItRprgZ){ztKB)u!KT0j4=IS~r$pDj1nWOD zyzmCl*-vXwUL+d!TK{QRJm&0u7XFz=L|_KmbKRady52tDb7U-9(?inBfh2>u9@W#t zHvUR;b(R%+H94SN(dnuwnz>(Q%>P&>2ZCu+UUlx_x1%jfpCVPVlw2I`wW#Y^KbCo0 z$zGa)m-hs?xghsf>`vAb#7J|%4bY$sKArKe*&C1vJnmMo#$rz|A5Vjf`W^q&38^w>{JW$7_P+fu7Ks*#Q$h!HpW=vGQH1O} zBiqHAw)2JQ-G&{UjCFlAatU7;JQ+_~PvC`HHDa!ViZFb-(j{s+(NM11qsf%n?A4Hu z_LY-EePwMwwM=M<95cV}rE;s$m0{%#fHb&BWUA(sy?z7QA40TC|qg_c7^X)$mrH|sa-^?MQUHkikzQoQ~Otk z9!@J~CL+%3m(l2}R)suSzE-qPh2kRX1|EN(>sJ4e<`>N%`266+qn0R#hp`Q}+qIkT zQUhhhv(M<)qp?SE=VB+?Lg7BG5>a6n$7%MzjCvgjyAVkyQxFbZ+mXZ+gxZ=!4C%vS zQb>0Clkk-Kz-M7;sJU?InWD1SpQqZ{vff~FAqGq=atqmlhVVoJ#96EP}n6_<)VRGWb<8Tou64c5HPZeTZ z`Jf7=W3h9kDzNVyDh~J3A-(FYDlCa&OM566?t8C5A*>+Zgit`)?`wB;W83~br>>ux zQd3h*vp;v};gqtP72%W$0}l&pc8wmte1P~Ce<}$<(ayqj4w(8PMqNNDl#G_B@oUr9 z?*Oi&)rv!$Q|xNKZA@KrDNYNzQPJ}vPuiN#RPD1L8gie1cY)ll0g~c6;`r5Tg*do; zrs`du0y`~5PYOh{_IhO_zW?eGA0&9gdl6=(chEU9{G_{Boa zB$?!Qr_={fEYJLsE2XO4%dbk;yE#>qA70x~{``s1& zysgBG*h{;@qJUys6J{Sr&LC?kF;tvQKeQzd^Q%LYdO*jZ7rfn1dg$;Z0?BP&1-Ek| zAhqcZdq;T1tAvFb*HICAYDQvO*X<4O8^6NA?-ll&E&^<8Gqdx4z`SbMrc+zmW2bv- z9;+?WatF|#;)U;~5DC!V+fnXuW9NQkPsCCu)-b)VYD7!eG0y}s6Bj*!-)2>W@&C%I z0B9)pQP7a@@-2U7Rq!6r+~!o!R9-s}5K`09J>`;6^YJaS&uAT{7n3x0j5Nty`kieA z-KJ44Us}e!dMT-xZzTluOK&#hJ~icw4Wij#N!XmLYPMmuzX2SZ->TVYjqV3d^ivO4 z%|L&>y^KH=G^+Y?h2+=ILJL39Sd2%A#DtG(oR3Qa_gp?6#%8r%jYHMysE| z_(UlCl%PUES)j)^$pNg*ovgtT+2BjSWSzTAM#vmD?NM2a_!{AguTzkH#%}$LFo3_d z|nYD(V95h+IrMQ zI80Aunt$}7;ZyH-3(J=hU)<%d0>nyr=P6<(Vw%;x5ArAC*{X9?klTD=(HFudZ=h7Q z+&HUl8(SkD$tE3#U_OVrlcYm=$`odZ|2B}dU5W>tE{b*$omuN+NuNd2J_or}mr+FL zM=d?@CRFojP~9Tuz;3(_I#4?pP76I2kK?Mu!|Z(N>>%0xN}17f<;5uB3s_X^n8%fd z%&yYYF8i7#9<(M6_+G}FDgmy^uIsTV^|z(*!N=VkX3SkP;}qnsxFQp65g8|2&7JK1 zhu&_*aH{x84+U{7NNJT-dY(0MbovmhP(7pm%KPVrFr4o5tR50ERo0(?w|Gowx?+% zy}P&y2aL2y@x!P_!!vC`X1OPA6xn4z6~&rr$H}5%vX*}a z=+n)ZO6xcH_(W7X2!-oN#MU}K*meo)A#dk8wyO-%(^AWb%&{qFYmLdhw^(_Q|By5c zrZ)x=4nm8=GR7ey9X?5XAt!%oQs)k{Ok(>9?tP7%7$#XR1C^LPDcB=J?^PTa_ykgZ z=3n1ti&bRi4YwvYw;1SyR#eZ<`ZwTdAi|T=M%ABiUsyV12he|~gfHGttbc{s8ly#c=y&tfM^<~F1JN*=oTdFf=vmNTI_9(;YXNU@h$MMz+c(o z`rfPiv>FyI$H;h?KF*|N@n|4)liOmyXe@C>Y;z&&_rCXVV!ye}?bIHa?l(XCmKBDz zAyKQ1MQEW?EP!^b?~K)t{i7oQi!2OlNuM>qzF70PnA>%N0{Ltf8?b2k!8Z~{awInF zvue`SxomeEGN0XrOb{v>D)L`h=-UDUZZpyN4`@(1#Z^=ZXrDUxWKeTSzK(pRHjGCn zVIT4P8-Tw8|N#n$-_oaZR>7pX?Z2uB z?;VkL1zEw?mChwC20gwpe>M>l1Ri180{JU%P$}~nze(#_rO^B8_8N_EFMf+!l_yjn zorZvghf&BV%@lDht~^y6O)GTr3yR?HQ}d6yX%1@BwkP;=_8ic6GmGCL6lFE0B)!?6 z-{TRseg4+{ypZ0>fCdH1m>_}j7CD?Kv0qumaL#i7(m{T6&Y}LJ+Ng-q$`dmpL79?? zU3h*d($JGWW8!x@Y|#k38RYy!lc;-}A=y#gy!hAB^5Y?T@iI0LShvvJJbv^cM&m|s z**Y*~T7I}+uDy=S%gO+I?&ek^-s)~NCOP#H$a-_z?xrE)zQL+}ETcdlT%;ka4pRs)jQ@`(M=of3vqo_eT z>$ZO=j7J?39-Nt9SWjZR-$+PgGzFug&B?|Y7sge>B4sr76*cM0`KUl@dBS`qbJS@e z(f=l+5Ju6llA*dsLUC-6&HIj`PRmm@@wS(7RniP!^bdBOVA*8QCqAzmOYB#hAn7vs zVP30+)-gL!99e~3JG|nchTeA6=}S&*Q7=8sG3*jjX^^>x=P`zjX_FoATKhbgCm$Y| z9p5FC{5(Lj{BwGJf*a|m-4Coa{U6%GnuD57WBNZdMm04VFKqa(SJE}~cpq8w{an53 z42t7R4UF{~{YWrsp^=0}ckaaBWW2fi2udKkk2lF9WEMX6%m_DMb#pw=MU#-1Rw!KC L`UXI4zM1-8-!lD; literal 0 HcmV?d00001 diff --git a/docs/blog/testing-workflow-for-web-components/images/media-image.jpg b/docs/blog/testing-workflow-for-web-components/images/media-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..459fe86d9c5fbe39246321fcfed19262319f3a2b GIT binary patch literal 12064 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 Yes, I know reality hits hard and there will be many cases where that doesn't happen - but you should always strive to have tests + +### Disclaimer + +In this tutorial, we're going to make a simple version of an input element. By the end of it, you'll gain the skills and knowledge to put open-wc testing tools to practice; and build a solid, accessible, and well-tested input component. + +### Warning + +This is an in-depth tutorial showing a few pitfalls and tough cases when working with web components. This is definitely for more advanced users. You should have a basic knowledge about [LitElement](https://lit-element.polymer-project.org/) and [JSDoc Types](https://dev.to/dakmor/type-safe-web-components-with-jsdoc-4icf). Having an idea what [Mocha](https://mochajs.org/), [Chai BDD](https://www.chaijs.com/api/bdd/), [Karma](https://karma-runner.github.io/latest/index.html) is might help a little as well. + +> We are thinking about posting an easier digestible version of this so if that is something you would like to see - let us know in the comments. + +If you want to play along - all the code is on [github](https://github.com/daKmoR/testing-workflow-for-web-components). + +## Let's Get Started! + +Run in your console + +```bash +$ npm init @open-wc + +# Results in this flow +✔ What would you like to do today? › Scaffold a new project +✔ What would you like to scaffold? › Web Component +# Select with space! "Testing" => just enter will move one with no selection +✔ What would you like to add? › Testing +✔ Would you like to scaffold examples files for? › Testing +✔ What is the tag name of your application/web component? … a11y-input +✔ Do you want to write this file structure to disk? › Yes +Writing..... done +✔ Do you want to install dependencies? › No +``` + +For more details please see [https://open-wc.org/testing/](https://open-wc.org/testing/). + +Delete `src/A11yInput.js` + +Modify `src/a11y-input.js` to: + +```js +import { LitElement, html, css } from 'lit-element'; + +export class A11yInput extends LitElement {} + +customElements.define('a11y-input', A11yInput); +``` + +and `test/a11y-input.test.js` to: + +```js +/* eslint-disable no-unused-expressions */ +import { html, fixture, expect } from '@open-wc/testing'; + +import '../src/a11y-input.js'; + +/** + * @typedef {import('../src/a11y-input.js').A11yInput} A11yInput + */ + +describe('a11y input', () => { + it('has by default an empty string as label', async () => { + const el = /** @type {A11yInput} */ (await fixture('')); + expect(el.label).to.equal(''); + }); +}); +``` + +Our tests so far consist of a single feature (the `label` property) and a single assertion (`expect`). We're using karma and chai's BDD syntax, so we group sets of tests (`it`) under the features or APIs they relate to (`describe`). + +Let's see if everything works correctly by running: `npm run test`. + +``` +SUMMARY: +✔ 0 tests completed +✖ 1 test failed + +FAILED TESTS: + a11y input + ✖ has by default an empty string as label + HeadlessChrome 73.0.3683 (Windows 10.0.0) + AssertionError: expected undefined to equal '' + + + expected - actual + + -[undefined] + +"" +``` + +Awesome - just as expected (🥁), we have a failing test :) + +Let's switch into watch mode, which will run the tests continuously whenever you make changes to your code. + +`npm run test:watch` + +![01-watch-mode-intro](./images/01-watch-mode-intro.gif) + +The following code was added in the video above to `src/a11y-input.js`: + +```js +static get properties() { + return { + label: { type: String }, + }; +} + +constructor() { + super(); + this.label = ''; +} +``` + +So far, so good? Still with us? Great! Let's up the game a little... + +### Adding a Test for Shadow DOM + +Let's add an assertion to test the contents of our element's shadow root. + +If we want to be sure that our element behaves/looks the same we should make sure its dom structure remains the same. +So let's compare the actual shadow dom to what we want it to be. + +```js +it('has a static shadowDom', async () => { + const el = /** @type {A11yInput} */ (await fixture(html` `)); + expect(el.shadowRoot.innerHTML).to.equal(` + + + `); +}); +``` + +As expected, we get: + +``` +✖ has a static shadowDom +AssertionError: expected '' to equal '\n \n \n ' + + + expected - actual + + + + + + + + + +``` + +So let's implement that in our element. + +```js +render() { + return html` + + + `; +} +``` + +Interesting, the test should be green... but it's not :thinking: Let's take a look. + +``` +✖ has a static shadowDom +AssertionError: expected '\n \n \n ' to equal '\n \n \n ' + + + expected - actual + + - + - + - + - + + + + + + + + +``` + +You may have noticed those weird empty comment `` tags. They are markers that `lit-html` uses to remember where dynamic parts are, so it can be updated efficiently. For testing, however, this can be a little annoying to deal with. + +If we use `innerHTML` to compare the DOM, we'd have to rely on simple string equality. Under those circumstances, we'd have to exactly match the generated DOM's whitespace, comments, etc; in other words: it will need to be a perfect match. Really all we need to test is that the elements we want to render are rendered. We want to test the _semantic_ contents of the shadow root. + +Fortunately, we've got you covered. If you're using `@open-wc/testing` then it automatically loads the `@open-wc/semantic-dom-diff` chai plugin for us to use. + +So let's try it out :muscle: + +```js +// old: +expect(el.shadowRoot.innerHTML).to.equal(`...`); + +// new: +expect(el).shadowDom.to.equal(` + + +`); +``` + +Bam :tada: + +``` +a11y input + ✔ has by default an empty string as a label + ✔ has a static shadowDom +``` + +### How does shadowDom.to.equal() work? + +1. It gets the `innerHTML` of the shadow root +2. Parses it (actually, the browser parses it - no library needed) +3. Normalizes it (potentially every tag/property on its own line) +4. Parses and normalizes the expected HTML string +5. Passes both normalized DOM strings on to chai's default compare function +6. In case of failure, groups, and displays any differences in a clear manner + +If you want to know more, please check out the documentation of [semantic-dom-diff](https://open-wc.org/testing/semantic-dom-diff.html). + +### Testing the "Light" DOM + +We can do exactly the same thing with the light DOM. (The DOM which will be provided by our user or our defaults, i.e. the element's `children`). + +```js +it('has 1 input and 1 label in light-dom', async () => { + const el = /** @type {A11yInput} */ (await fixture(html` + + `)); + expect(el).lightDom.to.equal(` + + + `); +}); +``` + +And let's implement it. + +```js +connectedCallback() { + super.connectedCallback(); + this.labelEl = document.createElement('label'); + this.labelEl.innerText = this.label; + this.labelEl.setAttribute('slot', 'label'); + this.appendChild(this.labelEl); + + this.inputEl = document.createElement('input'); + this.inputEl.setAttribute('slot', 'input'); + this.appendChild(this.inputEl); +} +``` + +So we tested our light and shadow dom :muscle: and our tests run clean :tada: + +> Note: Using the DOM API in a lit-element's lifecycle is an anti-pattern, however to allow for a11y it might be a real use case - anyways it's great for illustration purposes + +### Using Our Element in an App + +So now that we have a basic a11y input let's use it - and test it - in our application. + +Again we start with a skeleton `src/my-app.js` + +```js +/* eslint-disable class-methods-use-this */ +import { LitElement, html, css } from 'lit-element'; + +export class MyApp extends LitElement {} + +customElements.define('my-app', MyApp); +``` + +And our test in `test/my-app.test.js`; + +```js +/* eslint-disable no-unused-expressions */ +import { html, fixture, expect } from '@open-wc/testing'; + +import '../src/my-app.js'; + +/** + * @typedef {import('../src/my-app.js').MyApp} MyApp + */ + +describe('My Filter App', () => { + it('has a heading and a search field', async () => { + const el = /** @type {MyApp} */ (await fixture(html` `)); + expect(el).shadowDom.to.equal(` +

My Filter App

+ + `); + }); +}); +``` + +Run the test => fails and then we add the implementation to `src/a11y-input.js` + +```js +render() { + return html` +

My Filter App

+ + `; +} +``` + +But oh no! That should be green now... + +``` +SUMMARY: +✔ 3 tests completed +✖ 1 test failed + +FAILED TESTS: + My Filter App + ✖ has a heading and a search field + AssertionError: expected '

\n My Filter App\n

\n\n \n \n\n' to equal '

\n My Filter App\n

\n\n\n' + + + expected - actual + +

+ My Filter App +

+ + - + - + +``` + +What is happening? +Do you remember that we had a specific test to ensure the light-dom of a11y-input? +So even if the users only puts `` in his code - what actually comes out is + +```html + + + + +``` + +e.g. `a11y-input` is actually creating nodes inside of your `my-app` shadow dom. Preposterous! For our example here we say that's what we want. +So how can we still test it? + +Luckily `.shadowDom` has another ace up its sleeve; it allows us to ignore parts of dom. + +```js +expect(el).shadowDom.to.equal( + ` +

My Filter App

+ +`, + { ignoreChildren: ['a11y-input'] }, +); +``` + +We can even specify the following properties as well: + +- `ignoreChildren` +- `ignoreTags` +- `ignoreAttributes` (globally or for specific tags) + +For more details please see [semantic-dom-diff](https://open-wc.org/testing/semantic-dom-diff.html). + +#### Snapshot testing + +If you have a lot of big dom trees writing/maintaining all those manually written expects is going to be tough. +To help you with that there are semi/automatic snapshots. + +So if we change our code + +```js +// from +expect(el).shadowDom.to.equal(` + + +`); + +// to +expect(el).shadowDom.to.equalSnapshot(); +``` + +If we now execute `npm run test` it will create a file `__snapshots__/a11y input.md` and fill it with something like this + +```` +## `a11y input` + +#### `has a static shadowDom` + +```html + + + + +```` + +```` + +What we wrote before by hand can now be auto-generated on init or forcefully via `npm run test:update-snapshots`. + +If the file `__snapshots__/a11y input.md` already exists it will compare it with the output and you will get errors if your html output changed. + +``` +FAILED TESTS: + a11y input + ✖ has a static shadowDom + HeadlessChrome 73.0.3683 (Windows 10.0.0) + AssertionError: Received value does not match stored snapshot 0 + + + expected - actual + + - + + + + + - + + +``` + +For more details please see [semantic-dom-diff](https://open-wc.org/testing/semantic-dom-diff.html). + +I think that's now enough about comparing dom trees... +It's time for a change :hugs: + +### Code coverage + +Another useful metric we get when testing with the open-wc setup is code coverage. +So what does it mean and how can we get it? [Code coverage](https://www.wikiwand.com/en/Code_coverage) is a measure of *how much* of our code is checked by tests. If there's a line, statement, function, or branch (e.g. `if`/`else` statement) that our tests don't cover our coverage score will be affected. +A simple `npm run test` is all we need and you will get the following: + +``` +=============================== Coverage summary =============================== +Statements : 100% ( 15/15 ) +Branches : 100% ( 0/0 ) +Functions : 100% ( 5/5 ) +Lines : 100% ( 15/15 ) +================================================================================ +``` + +Which means that 100% of our code's statements, branches, functions, and lines are covered by tests. Pretty neat! + +So let's go the other way and add code to `src/a11y-input.js` before adding a test. Let's say we want to access the value of our input directly via our custom element and whenever its value is 'cat' we want to log something. + +```js +get value() { + return this.inputEl.value; +} + +set value(newValue) { + if (newValue === 'cat') { + console.log('We like cats too :)'); + } + this.inputEl.value = newValue; +} +``` + +It's a vastly different result +``` +SUMMARY: +✔ 4 tests completed +TOTAL: 4 SUCCESS + +=============================== Coverage summary =============================== +Statements : 81.82% ( 18/22 ) +Branches : 0% ( 0/2 ) +Functions : 75% ( 6/8 ) +Lines : 81.82% ( 18/22 ) +================================================================================ +06 04 2019 10:40:45.380:ERROR [reporter.coverage-istanbul]: Coverage for statements (81.82%) does not meet global threshold (90%) +06 04 2019 10:40:45.381:ERROR [reporter.coverage-istanbul]: Coverage for lines (81.82%) does not meet global threshold (90%) +06 04 2019 10:40:45.381:ERROR [reporter.coverage-istanbul]: Coverage for branches (0%) does not meet global threshold (90%) +06 04 2019 10:40:45.381:ERROR [reporter.coverage-istanbul]: Coverage for functions (75%) does not meet global threshold (90%) +``` + +Our coverage is way lower than before. Our test command even fails, even though all the tests run successfully. +This is because by default open-wc's config sets a 90% threshold for code coverage. + +If we want to improve coverage we need to add tests - so let's do it +```js +it('can set/get the input value directly via the custom element', async () => { + const el = /** @type {A11yInput} */ (await fixture(html` + + `)); + expect(el.value).to.equal('foo'); +}); +``` + +uh oh :scream: we wanted to improve coverage but now we need fix an actual bug first :disappointed: +``` +FAILED TESTS: + a11y input + ✖ can set/get the input value directly via the custom element + TypeError: Cannot set property 'value' of null at HTMLElement.set value [as value] + // ... => long error stack +``` + +That was unexpected... on first glance, I don't really know what that means... better to check some actual nodes and inspect them in the browser. + +### Debugging in the Browser + +When we run our test with watch, karma sets up a persistent browser environment to run tests in. + +- Be sure you started with `npm run test:watch` +- visit [http://localhost:9876/debug.html](http://localhost:9876/debug.html) + + +You should see something like this +![02-debugging-in-browser](./images/02-debugging-in-browser.png) + +You can click on the circled play button to only run one individual test. + +So let's open the Chrome Dev Tools (F12) and put a debugger in the test code. + +```js +it('can set/get the input value directly via the custom element', async () => { + const el = /** @type {A11yInput} */ (await fixture(html` + + `)); + debugger; + expect(el.value).to.equal('foo'); +}); +``` + +Dang.. the error happens even before that point... +"Fatal" errors like this are a little tougher as they are not failing tests but sort of a complete meltdown of your full component. + +Ok, let's put some code in the `setter` directly. + +```js +set value(newValue) { + debugger; +``` + +Alright, that worked so our chrome console we write `console.log(this)` let's see what we have here +```js + + #shadow-root (open) + +``` + +Ahh there we have it - the shadow dom is not yet rendered when the setter is called. +So let's be safe and add a check before + +```js +set value(newValue) { + if (newValue === 'cat') { + console.log('We like cats too :)'); + } + if (this.inputEl) { + this.inputEl.value = newValue; + } +} +``` + +Fatel error is gone :tada: +But we now have a failing test :sob: + +``` +✖ can set/get the input value directly via the custom element +AssertionError: expected '' to equal 'foo' +``` + +We may need a change of tactic :thinking: +We can add it as a separate `value` property and sync when needed. + +```js +static get properties() { + return { + label: { type: String }, + value: { type: String }, + }; +} + +constructor() { + super(); + this.label = ''; + this.value = ''; + // ... +} + +update(changedProperties) { + super.update(changedProperties); + if (changedProperties.has('value')) { + if (this.value === 'cat') { + console.log('We like cats too :)'); + } + this.inputEl.value = this.value; + } +} +``` + +And we're finally back in business! :tada: + +ok bug fixed - can we please get back to coverage? thank you :pray: + +### Back to coverage + +With this added test we made some progress. + +``` +=============================== Coverage summary =============================== +Statements : 95.83% ( 23/24 ) +Branches : 50% ( 2/4 ) +Functions : 100% ( 7/7 ) +Lines : 95.83% ( 23/24 ) +================================================================================ +06 04 2019 13:18:54.902:ERROR [reporter.coverage-istanbul]: Coverage for branches (50%) does not meet global threshold (90%) +``` + +However we are still not fully there - the question is why? + +To find out open `coverage/index.html` in your browser. No web server needed just open the file in your browser - on a mac you can do that from the command line with `open coverage/index.html` + +You will see something like this + +![03-coverage-overview](./images/03-coverage-overview.png) + +Once you click on `a11y-input.js` you get a line by line info how often they got executed. +So we can immediately see which lines are not executed yet by our tests. + +![04-coverage-line-by-line](./images/04-coverage-line-by-line.png) + +So let's add a test for that +```js +it('logs "We like cats too :)" if the value is "cat"', async () => { + const el = /** @type {A11yInput} */ (await fixture(html` + + `)); + // somehow check that console.log was called +}); +``` + +``` +=============================== Coverage summary =============================== +Statements : 100% ( 24/24 ) +Branches : 75% ( 3/4 ) +Functions : 100% ( 7/7 ) +Lines : 100% ( 24/24 ) +================================================================================ +``` + +With that, we are back at 100% on statements but we still have something missing on branches. +Let's see why? + +![05-coverage-line-by-line-else](./images/05-coverage-line-by-line-else.png) + +This `E` means `else path not taken`. +So whenever the function `update` gets called there is always a property `value` in the changedProperties. + +We have `label` as well so it's a good idea to test it. :+1: + +```js +it('can update its label', async () => { + const el = /** @type {A11yInput} */ (await fixture('')); + expect(el.label).to.equal('foo'); + el.label = 'bar'; + expect(el.label).to.equal('bar'); +}); +``` + +boom 100% :muscle: we win :1st_place_medal: + +``` +=============================== Coverage summary =============================== +Statements : 100% ( 24/24 ) +Branches : 100% ( 4/4 ) +Functions : 100% ( 7/7 ) +Lines : 100% ( 24/24 ) +================================================================================ +``` + +But wait we didn't even finish the test above - the code is still +```js + // somehow check that console.log was called +``` + +#### How come we have 100% test coverage? + +Lets first try to understand how code coverage works :thinking: +The way code coverage gets measured is by applying a form of `instrumentation`. In short, before our code is executed it gets changed (`instrumented`) and it behaves something like this: + +**Note:** This is a super simplified version for illustration purposes. +```js +if (this.value === 'cat') { + console.log('We like cats too :)'); +} + +// becomes something like this (psoido code) +__instrumented['functionUpdate'] += 1; +if (this.value === 'cat') { + __instrumented['functionUpdateBranch1yes'] += 1; + console.log('We like cats too :)'); +} else { + __instrumented['functionUpdateBranch1no'] += 1; +} +``` + +Basically, your code gets littered with many many flags. Based on which flags get trigger a statistic gets created. + +So 100% test coverage only means that every line you have in your code was executed at least once after all your tests finished. It does *not* mean that you tested everything, or if your tests make the correct assertions. + +So even though we already have 100% code coverage we are still going to improve our log test. + +You should, therefore, see code coverage as a tool that only gives you guidance and help on spotting some missing tests, rather than a hard guarantee of code quality. + +### Spying on Code + +If you want to check how often or with which parameters a function gets called, that's called spying. +open-wc recommends the venerable [sinon](https://sinonjs.org/) package, which provides many tools for spying and other related tasks. + +```bash +npm i -D sinon +``` + +So you create a spy on a specific object and then you can check how often it gets called. + +```js +import sinon from 'sinon'; + +it('outputs "We like cats too :)" if the value is set to "cat"', async () => { + const logSpy = sinon.spy(console, 'log'); + const el = /** @type {A11yInput} */ (await fixture(html` + + `)); + + el.value = 'cat'; + expect(logSpy.callCount).to.equal(1); +}); +``` + +Uh oh... the test fails: +``` +AssertionError: expected 0 to equal 1 +``` + +Messing with global objects like `console` might have [side effects](https://gyandeeps.com/console-stubbing/) so let's better refactor using a dedicated log function. + +```js +update(changedProperties) { + super.update(changedProperties); + if (changedProperties.has('value')) { + if (this.value === 'cat') { + this.log('We like cats too :)'); + } + this.inputEl.value = this.value; + } +} + +log(msg) { + console.log(msg); +} +``` + +This result in no global object in our test code - sweet :hugs: + +```js +it('logs "We like cats too :)" if the value is set to "cat"', async () => { + const el = /** @type {A11yInput} */ (await fixture(html` + + `)); + const logSpy = sinon.spy(el, 'log'); + + el.value = 'cat'; + expect(logSpy.callCount).to.equal(1); +}); +``` + +However, we still get the same error. Let's debug... boohoo apparently `update` is not sync - a wrong assumption I made :see_no_evil: I am saying *assumptions are dangerous* quite often - still I fall for it from time to time :cry:. + +So what can we do? Sadly there seems to be no public api to do some sync actions triggered by an property update. +Let's create an issue for it https://github.com/Polymer/lit-element/issues/643. + +For now apparently, the only way is to rely on a *private* api. :see_no_evil: +Also, we needed to move the value sync to `updated` so it gets executed after every dom render. + +```js +_requestUpdate(name, oldValue) { + super._requestUpdate(name, oldValue); + if (name === 'value') { + if (this.value === 'cat') { + this.log('We like cats too :)'); + } + } +} + +updated(changedProperties) { + super.updated(changedProperties); + if (changedProperties.has('value')) { + this.inputEl.value = this.value; + } +} +``` + +and here is the updated test for the logging +```js +it('logs "We like cats too :)" if the value is set to "cat"', async () => { + const el = /** @type {A11yInput} */ (await fixture(html` + + `)); + const logSpy = sinon.spy(el, 'log'); + + el.value = 'cat'; + expect(logSpy.callCount).to.equal(1); + expect(logSpy.calledWith('We like cats too :)')).to.be.true; + + // different values do NOT log + el.value = 'foo'; + expect(logSpy.callCount).to.equal(1); + + el.value = 'cat'; + expect(logSpy.callCount).to.equal(2); +}); +``` + +wow, that was a little tougher than expected but we did it :muscle: + +``` +SUMMARY: +✔ 7 tests completed +TOTAL: 7 SUCCESS +``` + +### Running Tests Without Karma Framework + +The Karma framework is powerful and feature-rich, but sometimes we might want to pare-down our testing regiment. The nice thing with everything we proposed so far is that we only used browser-standard es modules with no need for transpilation, [with the one exception of bare modules specifiers](https://open-wc.org/about/rationales.html#workflows). +So just by creating a `test/index.html`. + +```html + + + + + + + + + +
+ + + + + +``` + +and opening it via `owc-dev-server` in chrome, it will work perfectly fine. +We got everything up and running without `webpack` or `karma` - sweet :hugs: + +### Do the Cross-Browser Thing + +We now feel pretty comfortable with our web component. It's tested and covered; there's just one more step - we want to make sure it runs and is tested in all browsers. + +Open WC recommends [Browserstack](https://www.browserstack.com/) for cross-browser testing. If you haven't set it up yet, you can do it now - here is the link again - [https://open-wc.org/testing/](https://open-wc.org/testing/). + +So let's just run it +``` +npm run test:bs + +SUMMARY: +✔ 42 tests completed +TOTAL: 42 SUCCESS +``` + +Yeah, that works nicely! :hugs: + +If there are failing tests it will output them in the summary with the specific browser where it failed. +``` +SUMMARY: +✔ 40 tests completed +✖ 2 tests failed + +FAILED TESTS: + a11y input + ✖ has a static shadowDom + Firefox 64.0.0 (Windows 10.0.0) + Safari 12.0.0 (Mac OS X 10.14.0) + expected '\n\n\n\n\n' to equal '\n\n\n\n' + + + expected - actual + + + + + + - +``` + +If you need to debug a particular browser: +- `npm run test:legacy:watch` +- visit [http://localhost:9876/debug.html](http://localhost:9876/debug.html) with that browser (either it locally or via browserstack) +- select a specific test (or use `it.only()` in code) +- start debugging + +Also if you want to adjust the browser that gets tested you can adjust your `karma.bs.config.js`. + +For example, if you want to add the `Firefox ESR` to your list. + +```js +module.exports = config => { + config.set( + merge(bsSettings(config), createBaseConfig(config), { + browserStack: { + project: 'testing-workflow-for-web-components', + }, + browsers: [ + 'bs_win10_firefox_ESR', + ], + // define browsers + // https://www.browserstack.com/automate/capabilities + customLaunchers: { + bs_win10_firefox_ESR: { + base: 'BrowserStack', + browser: 'Firefox', + browser_version: '60', + os: 'Windows', + os_version: '10', + }, + }, + }), + ); + + return config; +}; +``` + +Or maybe you want to test only 2 specific browsers? + +```js +merge.strategy({ + browsers: 'replace', +})(bsSettings(config), createBaseConfig(config), { + browserStack: { + project: 'testing-workflow-for-web-components', + }, + browsers: [ + 'bs_win10_ie_11', + 'bs_win10_firefox_ESR', + ], +}), +``` + +**Note:** This uses the [webpack merge strategies](https://github.com/survivejs/webpack-merge#merging-with-strategies) replace. + +## Quick Recap +- Testing is important for every project. Be sure to write as many as you can. +- Try to keep your code coverage high, but remember it's not a magic guarantee, so it doesn't always need to be 100%. +- Debug in the browser via `npm run test:watch`. For legacy browsers, use `npm run test:legacy.watch`. + +## What's Next? +- Run the tests in your CI (works perfectly well together with browserstack). See our recommendations at [automating](https://open-wc.org/automating/). + +Follow us on [Twitter](https://twitter.com/openwc), or follow me on my personal [Twitter](https://twitter.com/dakmor). +Make sure to check out our other tools and recommendations at [open-wc.org](https://open-wc.org). + +Thanks to [Pascal](https://dev.to/thepassle) and [Benny](https://dev.to/bennypowers) for feedback and helping turn my scribbles to a followable story. +```` diff --git a/docs/blog/the-all-new-open-web-components/images/blog-header.jpg b/docs/blog/the-all-new-open-web-components/images/blog-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3318dfb9a80e07a544b7d053511075cfa3a6fe7 GIT binary patch literal 10992 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 L`UXI4zM1-8-!lD; literal 0 HcmV?d00001 diff --git a/docs/blog/the-all-new-open-web-components/images/media-image.jpg b/docs/blog/the-all-new-open-web-components/images/media-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..459fe86d9c5fbe39246321fcfed19262319f3a2b GIT binary patch literal 12064 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 + + + + + #9b03fe + + + diff --git a/docs/building/README.md b/docs/building/README.md deleted file mode 100644 index e6b799c6..00000000 --- a/docs/building/README.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -permalink: 'building/index.html' -title: Building -section: guides -tags: - - guides ---- - -# Building - -Building is a necessary optimization when shipping apps to production. By using a build you reduce the total size and amount of files transferred to the end-user, and you ensure your code runs on all supported browsers. - -We recommend doing most of the building only in projects which deploy the final result to production, such as apps or websites. This is where you can make the best decisions about supported browsers and optimizations. - -## Build types - -Depending on the type of project, we recommend different approaches to building. - -### Building single page apps (SPA) - -If you are building a single page application we recommend [rollup](https://rollupjs.org/guide/en/) to build your app. - -Take a look at our dedicated [building-rollup](/building/building-rollup.html) page which explains how to set up rollup. We ship a default config that you can use to set up your project, or you can use it as inspiration for your custom config. - -### Building reusable components and libraries - -If you are building a reusable component or library we recommend publishing code that runs without modifications on the latest browsers. You should not bundle in any dependencies or polyfills, or build to a very old version of JavaScript such as ES5. This way, consuming projects can decide which polyfills to load and which JavaScript version to target based on browser support. - -In practical terms, this means publishing standard ES modules and standard JavaScript features implemented in modern browsers, like Chrome, Safari, Firefox, and Edge. We recommend [buildless development](/developing/), so unless you are using very cutting edge features, you can actually just publish your source code as is. See [this blog post](https://justinfagnani.com/2019/11/01/how-to-publish-web-components-to-npm/) for a general guideline. - -If you are using very new or non-standard features, such as TypeScript, you will need to set up a lightweight build. For this, we recommend tools such as [babel](https://babeljs.io/) with the [preset-env](https://babeljs.io/docs/en/babel-preset-env) plugin or the [TypeScript compiler](https://www.typescriptlang.org/). Make sure to set the target to modern browsers, and publish ES modules. - -### Building websites or multi page apps (MPA) - -Single page apps are great for a snappy user experience when you have highly dynamic content, but a lot of content on the web does not fall into this category. It still makes sense to build websites or apps consisting of multiple pages. This also requires a different approach to your build system. - -We are still in the process of investigating and documenting our recommendations for this. In the meantime both [building-rollup](/building/building-rollup.html) and [@open-wc/rollup-plugin-html](https://open-wc.org/building/rollup-plugin-html.html) have tips for these types of projects. - -## Webpack - -We recommend [rollup](https://rollupjs.org/guide/en/) as a build tool. It is designed specifically for standard es modules and it's very easy to use. But sometimes you are not in control of choosing the tools to use on a project, and you need to make things work with other tools. For webpack, we have a legacy [standard config](https://github.com/open-wc/legacy/tree/master/packages/building-webpack) which can be used to build apps with web components. diff --git a/docs/building/building-rollup.md b/docs/building/building-rollup.md deleted file mode 120000 index 68c4b2b8..00000000 --- a/docs/building/building-rollup.md +++ /dev/null @@ -1 +0,0 @@ -../../packages/building-rollup/README.md \ No newline at end of file diff --git a/docs/building/polyfills-loader.md b/docs/building/polyfills-loader.md deleted file mode 120000 index c1256c06..00000000 --- a/docs/building/polyfills-loader.md +++ /dev/null @@ -1 +0,0 @@ -../../packages/polyfills-loader/README.md \ No newline at end of file diff --git a/docs/building/rollup-plugin-html.md b/docs/building/rollup-plugin-html.md deleted file mode 120000 index 7ff1d5a2..00000000 --- a/docs/building/rollup-plugin-html.md +++ /dev/null @@ -1 +0,0 @@ -../../packages/rollup-plugin-html/README.md \ No newline at end of file diff --git a/docs/building/rollup-plugin-polyfills-loader.md b/docs/building/rollup-plugin-polyfills-loader.md deleted file mode 120000 index a717a83a..00000000 --- a/docs/building/rollup-plugin-polyfills-loader.md +++ /dev/null @@ -1 +0,0 @@ -../../packages/rollup-plugin-polyfills-loader/README.md \ No newline at end of file diff --git a/docs/developing/README.md b/docs/developing/README.md deleted file mode 100644 index e192a6ff..00000000 --- a/docs/developing/README.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -permalink: 'developing/index.html' -title: Developing -section: guides -tags: - - guides ---- - -# Developing - -## Going buildless - -Browsers have improved a lot over the past years. It's now possible to do web development without requiring any build tools, using the native module loader of the browser. We think this is a great fit for web components, and we recommend this as a general starting point. - -Build tools can quickly add a lot of complexity to your code, and make your code reliant on a specific build setup. We think it's best to avoid them during development, or only add them for light transformations if you know what you're doing. - -Read [this article](https://dev.to/open-wc/developing-without-a-build-1-introduction-26ao) to learn more about this approach. - -## Development server - -We created [es-dev-server](https://open-wc.org/developing/es-dev-server.html) to help developing without build tools. - -## Web component libraries - -You can write web components using just the basic web component APIs. This can be a great choice when you're looking to keep dependencies low. But generally, we recommend using lightweight libraries to help improve the developer experience and reduce boilerplate. - -We recommend [lit-html](https://www.npmjs.com/package/lit-html) with the [lit-element](https://www.npmjs.com/package/lit-element) base class as a general-purpose library for building web components. `lit-html` is feature complete, extremely lightweight and offers a great development experience. Check out the [lit-html page](/developing/lit-html.html) for code examples and more information. - -In the code snippets throughout our documentation we use `lit-html` and `lit-element`, but our recommendations and tools are not specific to them. You should be able to use them with any web component library that follows browser standards. If you do run into issues, or have any questions, let us know about it! - -### Alternative libraries - -Besides `lit-html`, there are other great options available: - -- [haunted](https://www.npmjs.com/package/haunted) functional-style web components, with react-like hooks -- [hybrids](https://www.npmjs.com/package/hybrids) another functional web component library -- [SkateJS](https://skatejs.netlify.com/) wraps libraries like react, preact or lit-html in a web component -- [slim.js](https://slimjs.com/) declarative web components -- [stencil](https://stenciljs.com/) web component with typescript and JSX (requires a build step) - -## Codelabs - -See the [codelabs](/codelabs/) page for step by step tutorials for development. - -## Code examples - -Check out the [code examples](/developing/code-examples.html) page for a collection of best practices and design patterns. - -## Testing - -Check out our [testing documentation](/testing/) for help with setting up testing. - -## Building - -When you are ready to ship your app to production, or when you need to test your app on older browsers, take a look at our [building documentation](/building/) to get you started. - -## Further reading - -See: [awesome lit-html](https://github.com/web-padawan/awesome-lit-html) for a great collection of resources. diff --git a/docs/developing/best-practices.md b/docs/developing/best-practices.md deleted file mode 100644 index 0d71e610..00000000 --- a/docs/developing/best-practices.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -permalink: 'developing/best-practices.html' -title: Best Practices -section: guides -tags: - - guides - - guide ---- - -# Best Practices - -If you're using our [linting setup](/linting), you may already follow some Web Component best practices, but unfortunately, linters do not cover everything. On this page, you can find our recommended best practices. - -In general, we recommend you read [Custom Element Best Practices](https://developers.google.com/web/fundamentals/web-components/best-practices), and [Guidelines for creating web platform compatible components](https://w3ctag.github.io/webcomponents-design-guidelines/). - -
- -## Upwards Data - -> ⬇️ Properties/attributes down -> -> ⬆️ Events up - -Every developer at some point will run into the problem of moving some data upwards to a parent element. While there are many ways to manage state in your application like Redux, or passing down a bound function to a child element to mutate state in the parent, our default recommendation for moving data upwards is simply using events. The benefits of using events are that it's close to the platform, and will always have the same expected behavior across frameworks. You can find a demo of using `CustomEvents` [here](https://stackblitz.com/edit/open-wc-lit-demos?file=01-basic%2F12-firing-events.js). - -If you find yourself moving a lot of data around, it may be time to look into some state management libraries like [Redux](https://redux.js.org/) or consider some more advanced composition techniques with [slotting](https://webcomponents.dev/edit/collection/fOta0aCFgRQqMtyXJjXT/pNsN9JVAiNHOAHpvkL6c). diff --git a/docs/developing/es-dev-server.md b/docs/developing/es-dev-server.md deleted file mode 100644 index cdde11a1..00000000 --- a/docs/developing/es-dev-server.md +++ /dev/null @@ -1,942 +0,0 @@ ---- -permalink: 'developing/es-dev-server.html' -title: ES dev server -section: guides -tags: - - guides ---- - -> **Notice** -> -> Development of es-dev-server continues under a new name: [web dev server](https://modern-web.dev/docs/dev-server/overview/). We recommend using it for new projects, and upgrading for existing projects. -> -> We will continue to support fixing bugs for es-dev-server. - -# es dev server - -A web server for development without bundling. - -```bash -npx es-dev-server --node-resolve --watch -``` - -**Quick overview** - -- efficient browser caching for fast reloads -- [transform code on older browsers for compatibility](#compatibility-mode) -- [resolve bare module imports for use in the browser](#node-resolve) (`--node-resolve`) -- auto-reload on file changes with the (`--watch`) -- history API fallback for SPA routing (`--app-index index.html`) -- [plugin API for extensions](#plugins) - -[See all commands](#command-line-flags-and-configuration) - -## Getting started - -We recommend [following this guide](https://dev.to/open-wc/developing-without-a-build-2-es-dev-server-1cf5) for a step by step overview of different workflows with `es-dev-server`. - -## Setup - -```bash -npm i --save-dev es-dev-server -``` - -Add scripts to your `package.json`, modify the flags as needed: - -```json -{ - "scripts": { - "start": "es-dev-server --app-index index.html --node-resolve --watch --open" - } -} -``` - -Run the server: - -```bash -npm run start -``` - -## Node version - -es-dev-server requires node v10 or higher - -## Command-line flags and Configuration - -### Server configuration - -| name | type | description | -| --------- | -------------- | ----------------------------------------------------------------------- | -| port | number | The port to use, uses a random free port if not set. | -| hostname | string | The hostname to use. Default: localhost | -| open | boolean/string | Opens the browser on app-index, root dir or a custom path | -| app-index | string | The app's index.html file, sets up history API fallback for SPA routing | -| root-dir | string | The root directory to serve files from. Default: working directory | -| base-path | string | Base path the app is served on. Example: /my-app | -| config | string | The file to read configuration from (JS or JSON) | -| cors | boolean | Enable CORS | -| help | none | See all options | - -### Development help - -| name | type | description | -| ----- | ------- | ------------------------------------------------------------------- | -| watch | boolean | Reload the browser when files are edited | -| http2 | boolean | Serve files over HTTP2. Sets up HTTPS with self-signed certificates | - -### Code transformation - -| name | type | description | -| -------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| compatibility | string | Compatibility mode for older browsers. Can be: `auto`, `always`, `min`, `max` or `none` Default `auto` | -| node-resolve | boolean | Resolve bare import imports using node resolve | -| dedupe | boolean/array | Deduplicates all modules, or modules from specified packages if the value is an array | -| preserve-symlinks | boolean | Preserve symlinks when resolving modules. Set to true, if using tools that rely on symlinks, such as `npm link`. Default false. | -| module-dirs | string/array | Directories to resolve modules from. Used by node-resolve | -| babel | boolean | Transform served code through babel. Requires .babelrc | -| file-extensions | string/array | Extra file extensions to use when transforming code. | -| babel-exclude | number/array | Patterns of files to exclude from babel compilation. | -| babel-modern-exclude | number/array | Patterns of files to exclude from babel compilation on modern browsers. | -| babel-module-exclude | number/array | Patterns of files to exclude from babel compilation for modules only. | -| event-stream | boolean | Whether to inject event stream script. Defaults to true. | - -Most commands have an alias/shorthand. You can view them by using `--help`. - -### Configuration files - -We pick up an `es-dev-server.config.js` file automatically if it is present in the current working directory. You can specify a custom config path using the `config` flag. - -Configuration options are the same as command line flags, using their camelCased names. Example: - -```javascript -module.exports = { - port: 8080, - watch: true, - nodeResolve: true, - appIndex: 'demo/index.html', - plugins: [], - moduleDirs: ['node_modules', 'web_modules'], -}; -``` - -In addition to the command-line flags, the configuration file accepts these additional options: - -| name | type | description | -| --------------- | ------- | --------------------------------------------------------- | -| middlewares | array | Koa middlewares to add to the server. (read more below) | -| plugins | array | Plugins to add to the server. (read more below) | -| babelConfig | object | Babel config to run with the server. | -| polyfillsLoader | object | Configuration for the polyfills loader. (read more below) | -| debug | boolean | Whether to turn on debug mode on the server. | - -## Serving files - -es-dev-server is a static web server. When a request is made from the browser for `/foo/bar.js` it will try and find this file from the root directory. It cannot serve any files outside of your root directory because the browser has no way to request them, and the path on the file system must always be reflected in the path of the browser. - -### index.html in the root - -The simplest setup, making sure that all files are accessible, is to place your index.html at the root of your project - -
- Read more - -Consider this example directory structure: - -``` -node_modules/... -src/... -index.html -``` - -If you run the `es-dev-server` command from the root of the project, you can access your app at `/` or `/index.html` in the browser. - -
- -### index.html in a folder - -If you move your `index.html` outside the root of your project, you have some different options. - -
- Read more - -Use the `--open` parameter for when you'd like to keep you index.html in a subfolder. - -``` -node_modules/... -src/... -src/index.html -``` - -You can access your app in the browser at `/src/` or `/src/index.html`. You can tell es-dev-server to explicitly open at this path: - -```bash -# with app-index flag -es-dev-server --app-index src/index.html --open -# without app-index flag -es-dev-server --open src/ -``` - -You can also change the root directory of the dev server: - -```bash -es-dev-server --root-dir src --open -``` - -Now your `index.html` is accessible at `/` or `/index.html`. However, the dev server cannot serve any files outside of the root directory. So if your app uses any node modules, they will no longer because accessible. - -If you want your index in a subfolder without this being visible in the browser URL, you can set up a file rewrite rule. [Read more here](#rewriting-request-urls) - -
- -### Monorepos - -If you are using es-dev-server in a monorepo, your node modules are in two different locations. In a package's folder and at the repository root. You need to make sure that es-dev-server can serve from both directories. - -
- Read more - -For example, a typical monorepo setup looks like this: - -``` -node_modules/... -packages/my-package/node_modules/... -packages/my-package/index.html -``` - -You will need to make sure the root node_modules folder is accessible to the dev server. - -If your working directory is `packages/my-package` you can use this command: - -```bash -# with app-index (for SPA) -es-dev-server --root-dir ../../ --app-index packages/my-package/index.html --open -# without app-index -es-dev-server --root-dir ../../ --open packages/my-package/index.html -``` - -If your working directory is the root of the repository you can use this command: - -```bash -# with app index (for SPA) -es-dev-server --app-index packages/my-package/index.html --open -# without app index -es-dev-server --open packages/my-package/index.html -``` - -This is the same approach as serving an index.html in a subdirectory, so the section above applies here as well. - -
- -### Base Element - -
- Read more - -If you are building a single page application with client-side routing, we recommend adding a base element to set the base URL of your document. - -The base URL of the document can be accessed through `document.baseURI` and is used by the browser to resolve relative paths (anchors, images, links, scripts, etc.). By default, it is set to the browser's URL. - -You can add `` element to modify how files are resolved relatively to your index.html. This can be very useful when your index.html is not at the root of your project. - -[Read more about this on MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base) - -
- -## Node resolve - -"Bare imports" are imports which don't specify a full path to a file: - -```js -import foo from 'bar'; -``` - -The browser doesn't know where to find this file called `bar`. The `--node-resolve` flag resolves this bare import to the actual file path before serving it to the browser: - -```js -import foo from './node_modules/bar/bar.js'; -``` - -Because we use [es-module-lexer](https://github.com/guybedford/es-module-lexer) for blazing fast analysis to find the imports in a file without booting up a full-blown parser like babel, we can do this without a noticeable impact on performance. - -For the actual resolve logic, we internally use [@rollup/plugin-node-resolve](https://github.com/rollup/plugins/tree/master/packages/node-resolve) so that you can keep the resolve logic in sync between development and production. When using a config file, the `nodeResolve` can also be an object which accepts the same options as the rollup plugin. options. - -
-Example config - -See [the rollup docs](https://github.com/rollup/plugins/tree/master/packages/node-resolve) for all options and what they do. - -Some options like `dedupe`, `fileExtensions`, `preserveSymlinks` and `moduleDirs` are mapped to options for `nodeResolve` internally. You can overwrite them with your custom config. - -```js -module.exports = { - nodeResolve: { - jsnext: true, - browser: true, - // set default to false because es-dev-server always - // runs in the browser - preferBuiltins: true, - // will overwrite es-dev-server's fileExtensions option - extensions: ['.mjs', '.js'], - // will overwrite es-dev-server's dedupe option - dedupe: ['lit-html'], - customResolveOptions: { - // will overwrite es-dev-server's moduleDirs option - moduleDirectory: ['node_modules'], - preserveSymlinks: true, - }, - }, -}; -``` - -
- -In the future, we are hoping that [import maps](https://github.com/WICG/import-maps) will make this step unnecessary. - -## Middleware - -You can add your own middleware to es-dev-server using the `middlewares` property. The middleware should be a standard koa middleware. [Read more about koa here.](https://koajs.com/) - -You can use middleware to modify respond to any request from the browser, for example to rewrite a URL or proxy to another server. For serving or manipulating files it's recommended to use plugins. - -### Proxying requests - -
- Read more - -```javascript -const proxy = require('koa-proxies'); - -module.exports = { - port: 9000, - middlewares: [ - proxy('/api', { - target: 'http://localhost:9001', - }), - ], -}; -``` - -
- -### Rewriting request urls - -You can rewrite certain file requests using a simple middleware. This can be useful for example to serve your `index.html` from a different file location or to alias a module. - -
- Read more - -Serve `/index.html` from `/src/index.html`: - -```javascript -module.exports = { - middlewares: [ - function rewriteIndex(context, next) { - if (context.url === '/' || context.url === '/index.html') { - context.url = '/src/index.html'; - } - - return next(); - }, - ], -}; -``` - -
- -## Plugins - -Plugins are objects with lifecycle hooks called by es-dev-server as it serves files to the browser. They can be used to serve virtual files, transform files, or resolve module imports. - -### Adding plugins - -A plugin is just an object that you add to the `plugins` array in your configuration file. You can add an object directly, or create one from a function somewhere: - -
- Read more - -```js -const awesomePlugin = require('awesome-plugin'); - -module.exports = { - plugins: [ - // use a plugin - awesomePlugin({ someOption: 'someProperty' }), - // create an inline plugin - { - transform(context) { - if (context.response.is('html')) { - return { body: context.body.replace(//, '') }; - } - }, - }, - ], -}; -``` - -
- -See the full type interface for all options: - -
- Read more - -```ts -import Koa, { Context } from 'koa'; -import { FSWatcher } from 'chokidar'; -import { Server } from 'net'; -import { ParsedConfig } from './config'; - -type ServeResult = void | { body: string; type?: string; headers?: Record }; -type TransformResult = void | { body?: string; headers?: Record }; -type ResolveResult = void | string | Promise | Promise; - -interface ServerArgs { - config: ParsedConfig; - app: Koa; - server: Server; - fileWatcher: FSWatcher; -} - -export interface Plugin { - serverStart?(args: ServerArgs): void | Promise; - serve?(context: Context): ServeResult | Promise; - transform?(context: Context): TransformResult | Promise; - resolveImport?(args: { source: string; context: Context }): ResolveResult; - resolveMimeType?(context: Context): undefined | string | Promise; -} -``` - -
- -### Hook: serve - -The serve hook can be used to serve virtual files from the server. The first plugin to respond with a body is used. It can return a Promise. - -
-Read more - -Serve an auto generated `index.html`: - -```js -const indexHTML = generateIndexHTML(); - -module.exports = { - plugins: [ - { - serve(context) { - if (context.path === '/index.html') { - return { body: indexHTML }; - } - }, - }, - ], -}; -``` - -Serve a virtual module: - -```js -const indexHTML = generateIndexHTML(); - -module.exports = { - plugins: [ - { - serve(context) { - if (context.path === '/messages.js') { - return { body: 'export default "Hello world";' }; - } - }, - }, - ], -}; -``` - -The file extension is used to infer the mime type to respond with. If you are using a non-standard file extension you can use the `type` property to set it explicitly: - -```js -module.exports = { - plugins: [ - { - serve(context) { - if (context.path === '/foo.xyz') { - return { body: 'console.log("foo bar");', type: 'js' }; - } - }, - }, - ], -}; -``` - -
- -### Hook: resolveMimeType - -Browsers don't use file extensions to know how to interpret files. Instead, they use [media or MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) which is set using the `content-type` header. - -es-dev-server guesses the MIME type based on the file extension. When serving virtual files with non-standard file extensions, you can set the MIME type in the returned result (see the examples above). If you are transforming code from one format to another, you need to use the `resolveMimeType` hook. - -
-Read more - -The returned MIME type can be a file extension, this will be used to set the corresponding default MIME type. For example `js` resolves to `application/javascript` and `css` to `text/css`. - -```js -module.exports = { - plugins: [ - { - resolveMimeType(context) { - // change all MD files to HTML - if (context.response.is('md')) { - return 'html'; - } - }, - }, - { - resolveMimeType(context) { - // change all CSS files to JS, except for a specific file - if (context.response.is('css') && context.path !== '/global.css') { - return 'js'; - } - }, - }, - ], -}; -``` - -It is also possible to set the full mime type directly: - -```js -module.exports = { - plugins: [ - { - resolveMimeType(context) { - if (context.response.is('md')) { - return 'text/html'; - } - }, - }, - ], -}; -``` - -
- -### Hook: transform - -The transform hook is called for each file and can be used to transform a file. Multiple plugins can transform a single file. It can return a Promise. - -This hook is useful for small modifications, such as injecting environment variables, or for compiling files to JS before serving them to the browser. - -If you are transforming non-standard file types, you may also need to include a `resolveMimeType` hook. - -
- Read more - -Rewrite the base path of your application for local development; - -```js -module.exports = { - plugins: [ - { - transform(context) { - if (context.path === '/index.html') { - const transformedBody = context.body.replace(//, ''); - return { body: transformedBody }; - } - }, - }, - ], -}; -``` - -Inject a script to set global variables during local development: - -```js -module.exports = { - plugins: [ - { - transform(context) { - if (context.path === '/index.html') { - const transformedBody = context.body.replace( - '', - '', - ); - return { body: transformedBody }; - } - }, - }, - ], -}; -``` - -Inject environment variables into a JS module: - -```js -const packageJson = require('./package.json'); - -module.exports = { - plugins: [ - { - transform(context) { - if (context.path === '/src/environment.js') { - return { body: `export const version = '${packageJson.version}';` }; - } - }, - }, - ], -}; -``` - -Transform markdown to HTML: - -```js -const markdownToHTML = require('markdown-to-html-library'); - -module.exports = { - plugins: [ - { - resolveMimeType(context) { - // this ensures the browser interprets .md files as .html - if (context.path.endsWith('.md')) { - return 'html'; - } - }, - - async transform(context) { - // this will transform all MD files. if you only want to transform certain MD files - // you can check context.path - if (context.path.endsWith('.md')) { - const html = await markdownToHTML(body); - - return { body: html }; - } - }, - }, - ], -}; -``` - -Polyfill CSS modules in JS: - -```js -module.exports = { - plugins: [ - { - resolveMimeType(context) { - if (context.path.endsWith('.css')) { - return 'js'; - } - }, - - async transform(context) { - if (context.path.endsWith('.css')) { - const stylesheet = ` - const stylesheet = new CSSStyleSheet(); - stylesheet.replaceSync(${JSON.stringify(body)}); - export default stylesheet; - `; - - return { body: stylesheet }; - } - }, - }, - ], -}; -``` - -
- -### Hook: resolveImport - -The `resolveImport` hook is called for each module import. It can be used to resolve module imports before they reach the browser. - -
- Read more - -es-dev-server already resolves module imports when the `--node-resolve` flag is turned on. You can do the resolving yourself, or overwrite it for some files. - -The hook receives the import string and should return the string to replace it with. This should be a browser-compatible path, not a file path. - -```js -module.exports = { - plugins: [ - { - async resolveImport({ source, context }) { - const resolvedImport = fancyResolveLibrary(source); - return resolvedImport; - }, - }, - ], -}; -``` - -
- -### Hook: serverStart - -The `serverStart` hook is called when the server starts. It is the ideal location to boot up other servers you will proxy to. It receives the server config, which you can use if plugins need access to general information such as the `rootDir` or `appIndex`. It also receives the HTTP server, Koa app, and `chokidar` file watcher instance. These can be used for more advanced plugins. This hook can be async, and it awaited before actually booting the server and opening the browser. - -
-Read more - -Accessing the serverStart parameters: - -```js -function myFancyPlugin() { - let rootDir; - - return { - serverStart({ config, app, server, fileWatcher }) { - // take the rootDir to access it later - rootDir = config.rootDir; - - // register a koa middleware directly - app.use((context, next) => { - console.log(context.path); - return next(); - }); - - // register a file to be watched - fileWatcher.add('/foo.md'); - }, - }; -} - -module.exports = { - plugins: [myFancyPlugin()], -}; -``` - -Boot up another server for proxying in serverStart: - -```js -const proxy = require('koa-proxies'); - -module.exports = { - plugins: [ - { - async serverStart({ app }) { - // set up a proxy for certain requests - app.use( - proxy('/api', { - target: 'http://localhost:9001', - }), - ); - - // boot up the other server, because it is awaited es-dev-server will also wait for it - await startOtherServer({ port: 9001 }); - }, - }, - ], -}; -``` - -
- -### Koa Context - -The plugin hooks simply receive the Koa `Context` object. This contains information about the server's request and response. Check the [Koa documentation](https://koajs.com/) to learn more about this. - -To transform specific kinds of files we don't recommend relying on file extensions. Other plugins may be using non-standard file extensions. Instead, you should use the server's MIME type or content-type header. You can easily check this using the `context.response.is()` function. This is used a lot in the examples above. - -Because files can be requested with query parameters and hashes, we recommend using `context.path` for reading the path segment of the URL only. If you do need to access search parameters, we recommend using `context.URL.searchParams.get('my-parameter')`. - -## Order of execution - -The order of execution for the es-dev-server when a file request is received: - -1. User middleware: before "next" -2. Serve - - Plugins: serve - - es-dev-server: static file middleware (if no plugin match) -3. Plugins: resolveMimeType -4. Plugins: transform -5. Resolve module imports - - Plugins: resolveModuleImport - - es-dev-server: node-resolve (if no plugin resolve) -6. es-dev-server: babel + compatibility transforms -7. es-dev-server: response cache (caches all JS files served, including plugin transforms) -8. User middleware: after "next" - -## Typescript support - -Because es-dev-server doesn't do any bundling, it's easy to integrate it with typescript and doesn't require any extra tooling or plugins. Just run `tsc` on your code, and serve the compiled output with es-dev-server. You can run both `tsc` and es-dev-server in watch mode, changes will be picked up automatically. - -Make sure to configure `tsc` to output real ES modules. - -## Compatibility mode - -Compatibility mode enables bundle-free development using modern browsers features on older browsers. Automatic compatibility mode is enabled by default. - -
- - Read more - -Compatibility mode can be configured using the `--compatibility` flag. The possible options are `auto`, `min`, `max`, and `none`. The default is mode is `auto`. - -**auto** -`auto` compatibility looks at the current browser to determine the level of compatibility to enable. On the latest 2 versions of the major browsers, it doesn't do any work. This keeps the server as fast as possible in the general case. - -On older browsers, the server uses the browser's user agent and [@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env) to do a targeted transformation for that specific browser and version. `@babel/preset-env` only works with stage 4 javascript features, they should become an official standard before they can be used. - -If the browser does not support es module scripts, dynamic imports or `import.meta.url` es modules are transformed to [system-js](https://github.com/systemjs/systemjs). - -This works down to at least IE11. Depending on what browser features you are using, it might work with an earlier version too but this is not tested. - -**always** -`always` compatibility is the same as `auto`, except that it doesn't skip compiling on the latest 2 versions of the major browsers. This makes it a bit slower on modern browsers but allows you to use new features before they are implemented in the browser. - -**min** -`min` compatibility forces the same level of compatibility on all browsers. It makes code compatible with the latest two versions of the major browsers and does not transform es modules. - -**max** -`max` compatibility forces the same level of compatibility on all browsers. It compiles everything to es5 and [system-js](https://github.com/systemjs/systemjs). - -**none** -`none` disables compatibility mode entirely. - -
- -### Polyfills loader - -When compatibility mode is enabled, polyfills are loaded using [polyfills-loader](https://github.com/open-wc/open-wc/tree/master/packages/polyfills-loader). - -
- Read more - -You can customize the polyfill loader configuration from your configuration file. Check the docs for the [polyfills-loader](https://github.com/open-wc/open-wc/tree/master/packages/polyfills-loader) for all possible options. - -```js -module.exports = { - polyfillsLoader: { - polyfills: { - fetch: false, - custom: [ - { - name: 'my-feature-polyfill', - path: require.resolve('my-feature-polyfill'), - test: "!('myFeature' in window)", - }, - ], - }, - }, -}; -``` - -By default, es-dev-server wraps all scripts and are deferred until polyfills are loaded. Loading order of scripts are preserved, but this can create problems if you rely on a script being executed before HTML is parsed. You can configure `es-dev-server` to exclude certain types of scripts: - -```js -module.exports = { - polyfillsLoader: { - exclude: { - jsModules: true, - inlineJsModules: true, - jsScripts: true, - inlineJsScripts: true, - }, - }, -}; -``` - -
- -## Using es-dev-server programmatically - -You can use different components from `es-dev-server` as a library and integrate it with other tools: - -
- -Read more - -### createConfig - -When using the server from javascript you are going to need a config object to tell the server what options to turn on and off. It's best to use `createConfig` for this as this converts the public API to an internal config structure and sets up default values. - -By default, all options besides static file serving are turned off, so it's easy to configure based on your requirements. - -The config structure is the same as the configuration explained in the [configuration files section](#configuration-files) - -```javascript -import { createConfig } from 'es-dev-server'; - -const config = createConfig({ - http2: true, - babel: true, - open: true, -}); -``` - -### createMiddlewares - -`createMiddlewares` creates the dev server's middlewares based on your configuration. You can use this to hook them up to your koa server. - -Returns an array of koa middleware functions. - -```javascript -import Koa from 'koa'; -import { createConfig, createMiddlewares } from 'es-dev-server'; - -const config = createConfig({}); -const middlewares = createMiddlewares(config); - -const app = new Koa(); -middlewares.forEach(middleware => { - app.use(middleware); -}); -``` - -### createServer - -`createServer` creates an instance of the dev server including all middlewares, but without starting the server. This is useful if you want to be in control of starting the server yourself. - -Returns the koa app and a node http or http2 server. - -```javascript -import Koa from 'koa'; -import { createConfig, createServer } from 'es-dev-server'; - -const config = createConfig({ ... }); -const { app, server } = createServer(config); -server.listen(3000); -``` - -### watch mode - -`createMiddlewares` and `createServer` requires a chokidar fileWatcher if watch mode is enabled. You need to pass this separately because the watcher nees-dev-server to be killed explicitly when the server closes. - -```javascript -import Koa from 'koa'; -import chokidar from 'chokidar'; -import { createConfig, createMiddlewares, createServer } from 'es-dev-server'; - -const config = createConfig({ ... }); -const fileWatcher = chokidar.watch([]); - -// if using createMiddlewares -createMiddlewares(config, fileWatcher); -// if using createServer -createServer(config, fileWatcher); - -// close filewatcher when no longer necessary -fileWatcher.close(); -``` - -### startServer - -`startServer` asynchronously creates and starts the server, listening on the configured port. It opens the browser if configured and logs a startup message. - -Returns the koa app and a node http or http2 server. - -```javascript -import Koa from 'koa'; -import { createConfig, startServer } from 'es-dev-server'; - -async function main() { - const config = createConfig({ ... }); - const { app, server } = await startServer(config, fileWatcher); -} - -main(); -``` - -
diff --git a/docs/developing/ide.md b/docs/developing/ide.md deleted file mode 100644 index 7648c822..00000000 --- a/docs/developing/ide.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -permalink: 'developing/ide.html' -title: IDE -section: guides -tags: - - guides - - guide ---- - -# IDE - -Your IDE is your primary tool while working with code, we recommend the following tools and plugins to make developing Web Components easier. - -## Visual Studio Code - -We recommend [VSCode](https://code.visualstudio.com/). For setup please visit the instructions on the Visual Studio Code [homepage](https://code.visualstudio.com/). - -### Configuration - -We recommend the following user settings: - -```json -{ - "files.autoSave": "onWindowChange", - "editor.tabSize": 2, - "files.trimTrailingWhitespace": true, - "[markdown]": { - "files.trimTrailingWhitespace": false - } -} -``` - -**How to set up**: - -1. File > Preferences > Settings -1. click on "..." > Open settings.json - -![VSCodeSettings](/ide-vscode-settings.gif) - -### Plugins - -We recommend the following plugins: - -- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) - Get ESLint feedback directly in your IDE => more details under [Linting](/linting/) -- [lit-plugin](https://marketplace.visualstudio.com/items?itemName=runem.lit-plugin) - Syntax highlighting, type checking and code completion for lit-html -- [prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) Code formatter. - -## Atom - -An alternative to VSCode is [Atom](https://atom.io/), an IDE created by Github. It provides near-native support for working with web components and has great support for template literals. - -### Recommended plugins - -- [prettier-atom](https://atom.io/packages/prettier-atom) - Template literal highlighting and formatting - -## [Intellij IDEA](https://www.jetbrains.com/idea/) and other Jetbrains variants - -Another possible alternative for development is IntelliJ IDEA. IntelliJ is a Java integrated development environment (IDE) for developing computer software. It is developed by JetBrains (formerly known as IntelliJ), and is available as an Apache 2 Licensed community edition and in a proprietary commercial edition. - -Syntax highlighting from html and css in template literals should be supported out of the box. Generic web components related functionalitites such as Custom Elements support and completion is also available. You can read more about it [here](https://blog.jetbrains.com/phpstorm/2013/10/phpstorm-7-web-toolkit-javascript-templates-web-components-support/). - -![intellij-syntax0-highlighting](/intellij-syntax-highlighting.png) - -Due to the support available directly in the IDE, the ecosystem for plugins is very limited and we do not recommend any. - -## [Sublime Text 3](https://www.sublimetext.com/3) - -Officially called a text editor Sublime Text features plugins which give it a lot of the possibilities of the IDE's listed above. It is available for Windows, Linux and OSX and can be evaluated for free. - -### Recommended plugins - -- [Lit Element Syntax Highlighting](https://packagecontrol.io/packages/LitElement%20Syntax%20Highlighting) - Syntax highlighting diff --git a/docs/developing/lit-helpers.md b/docs/developing/lit-helpers.md deleted file mode 120000 index 9716e92b..00000000 --- a/docs/developing/lit-helpers.md +++ /dev/null @@ -1 +0,0 @@ -../../packages/lit-helpers/README.md \ No newline at end of file diff --git a/docs/developing/lit-html.md b/docs/developing/lit-html.md deleted file mode 100644 index 21716e7a..00000000 --- a/docs/developing/lit-html.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -permalink: 'developing/lit-html.html' -title: lit-html -section: guides -tags: - - guides - - guide ---- - -# lit-html - -We recommend [lit-html](https://www.npmjs.com/package/lit-html) with the [lit-element](https://www.npmjs.com/package/lit-element) base class as a general-purpose library for building web components. `lit-html` is feature complete, extremely lightweight and offers a great development experience. - -Under the hood new Web Component APIs such as [Constructable Stylesheets](https://developers.google.com/web/updates/2019/02/constructable-stylesheets) are used when they are available. As browser support improves, you get performance improvements for free. - -## Getting started - -To get started, we recommend using our project scaffolding: - -```bash -npm init @open-wc -``` - -## Examples - -Check out the [code examples](/developing/code-examples.html) page for a collection of best practices and design patterns. diff --git a/docs/developing/types.md b/docs/developing/types.md deleted file mode 100644 index 7083aafd..00000000 --- a/docs/developing/types.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -permalink: 'developing/types.html' -title: Types -section: guides -tags: - - guides - - guide ---- - -# Types - -## Types are good - -> The following information is a quote from [Type Safe JavaScript with JSDoc](https://medium.com/@trukrs/type-safe-javascript-with-jsdoc-7a2a63209b76) - -Types provide valuable information about the nature of code, and help identify typos, enable refactoring, etc. Most editors these days provide some kind of IntelliSense based on type information gleaned from the code. My favorite is Visual Studio Code. With proper type information it can give you symbol defintions on hover, code completion, symbol renaming across files, etc. - -### Benefits of Types - -1. Early detection of type errors -2. Better code analysis -3. Improved IDE support -4. Promotes dependable refactoring -5. Improves code readability -6. Provides useful IntelliSense while coding -7. These benefits are provided by using TypeScript, Flow and even JSDoc comments. - -## Open Web Components Types - -For most of our products we do offer types via JSDocs. -In order to utilize types, you will need to set them up for your project. - -### Why types? - -Types can help improve your developer experience by giving you: - -- Awesome intellisense for @open-wc tools/helpers -- Ability to jump directly to the source of @open-wc code via F12 (in vs code) - -Here is a small gif showing how it can help. - -![TypesExample](/types.gif) - -### Setup for JavaScript - -In order to get type linting in a JavaScript project using VS Code all you need is to add a `tsconfig.json`. - -```json -{ - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "lib": ["es2017", "dom"], - "allowJs": true, - "checkJs": true, - "noEmit": true, - "strict": false, - "noImplicitThis": true, - "alwaysStrict": true, - "esModuleInterop": true - }, - "include": ["**/*.js", "node_modules/@open-wc/**/*.js"], - "exclude": ["node_modules/!(@open-wc)"] -} -``` - -### Setup for TypeScript - -If you wish to use our typings in TypeScript you will need to do a little more. - -You will need to add to this to your `tsconfig.json`. - -```json -{ - "compilerOptions": { - "allowJs": true - }, - "include": ["node_modules/@open-wc/**/*.js"], - "exclude": ["node_modules/!(@open-wc)"] -} -``` - -e.g. we need to include the js files from @open-wc and you can not have it in an exclude. - -Example how a full config might look like - -```json -{ - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "lib": ["es2017", "dom"], - "allowJs": true, - "checkJs": true, - "noEmit": true, - "strict": false, - "noImplicitThis": true, - "alwaysStrict": true, - "esModuleInterop": true - }, - "include": ["**/*.js", "node_modules/@open-wc/**/*.js"], - "exclude": ["node_modules/!(@open-wc)"] -} -``` diff --git a/docs/about/README.md b/docs/discover/about.md similarity index 76% rename from docs/about/README.md rename to docs/discover/about.md index f2cdd6c8..ed499ccf 100644 --- a/docs/about/README.md +++ b/docs/discover/about.md @@ -1,13 +1,4 @@ ---- -permalink: 'about/index.html' -title: 'About' -section: about -tags: - - about - - section ---- - -# About Us +# About Open Web Components ## Why `open-wc` @@ -15,7 +6,7 @@ We want to provide the community with well-known and experience-tested recommend ### Our Philosophy -The goal of Open Web Components is to empower developers with powerful and battle-tested tools for creating and sharing open source web components. +The goal of Open Web Components is to empower developers with powerful and battle-tested tools for creating and sharing open-source web components. Many web developers have experienced the dreaded "Javascript Fatigue". With our recommendations, we hope you'll enjoy the peace of mind that comes from having a well-known default solution for almost everything. From IDE to CI, `open-wc` has got you covered. @@ -31,7 +22,7 @@ We believe that web components provide a standards-based solution to problems li The World Wide Web was originally just text documents connected by hyperlinks. As technologies like JavaScript and techniques like AJAX and REST entered the picture, the web slowly developed into a platform for full-fledged application development. -At first, JavaScript libraries like jQuery were absolutely required. jQuery gave developers a common set of tools across browsers with extremely different feature sets. Eventually jQuery features became standard browser features. The pattern of libraries innovating and browsers subsequently standardizing continued. As the "[browser wars](https://www.wikiwand.com/en/Browser_wars)" died down, the pace of standardization increased, and many new features came to the web. +At first, JavaScript libraries like jQuery were absolutely required. jQuery gave developers a common set of tools across browsers with extremely different feature sets. Eventually, jQuery features became standard browser features. The pattern of libraries innovating and browsers subsequently standardizing continued. As the "[browser wars](https://www.wikiwand.com/en/Browser_wars)" died down, the pace of standardization increased, and many new features came to the web. In the last several years, a component-based model for web application development was popularized, and the JavaScript community blossomed with a wide variety of libraries and approaches. Work on standardizing the web’s native component model began at Google in 2012, and after several years of open development, was successfully implemented across all major browsers in 2019. @@ -55,6 +46,13 @@ Using the browser's standards-based component model will increase the longevity The web components standards are fairly low-level, letting library authors build upon them with innovative APIs. By using such libraries you can build your app in the style you want while still leveraging built-in browser features. +## Modern Web Family + +Open-wc is part of the Modern Web family, which consists of: + +- modern-web.dev with the `@web` npm namespace +- open-wc.org with the `@open-wc` npm namespace + ## Contribute -Feel free to critique, ask questions and join the conversation, we'd love to hear your opinions and feedback. You can reach us by creating an issue on our [github](https://github.com/open-wc) or on the [#open-wc](hhttps://slack.com/share/IUQNUPWUF/awabyN8iYH4dXX6aGpu16ES9/enQtOTc2Nzc2ODEyOTY3LWM5ZGExNGFiMmM4NDY2YWI2MzYwOGY5ZTNlZjk4OGU4NTFhMGJjNmVhNGI4MzVlNTMwNGRiNGIxNjc4MGJhNDg) channel in the [Polymer slack](https://www.polymer-project.org/slack-invite). +Feel free to critique, ask questions, and join the conversation, we'd love to hear your opinions and feedback. You can reach us by creating an issue on our [github](https://github.com/open-wc) or on the [#open-wc](hhttps://slack.com/share/IUQNUPWUF/awabyN8iYH4dXX6aGpu16ES9/enQtOTc2Nzc2ODEyOTY3LWM5ZGExNGFiMmM4NDY2YWI2MzYwOGY5ZTNlZjk4OGU4NTFhMGJjNmVhNGI4MzVlNTMwNGRiNGIxNjc4MGJhNDg) channel in the [Polymer slack](https://www.polymer-project.org/slack-invite). diff --git a/docs/discover/slack.md b/docs/discover/slack.md new file mode 100644 index 00000000..b875053a --- /dev/null +++ b/docs/discover/slack.md @@ -0,0 +1,5 @@ +# Slack + +You can also find us on the Polymer slack in the [#open-wc](https://slack.com/share/IUQNUPWUF/awabyN8iYH4dXX6aGpu16ES9/enQtOTc2Nzc2ODEyOTY3LWM5ZGExNGFiMmM4NDY2YWI2MzYwOGY5ZTNlZjk4OGU4NTFhMGJjNmVhNGI4MzVlNTMwNGRiNGIxNjc4MGJhNDg) channel. + +You can join the Polymer slack by visiting [https://www.polymer-project.org/slack-invite](https://www.polymer-project.org/slack-invite). diff --git a/docs/docs/building/index.md b/docs/docs/building/index.md new file mode 100644 index 00000000..eed4fb6c --- /dev/null +++ b/docs/docs/building/index.md @@ -0,0 +1,3 @@ +# Building ||40 + +Please see a sub page diff --git a/docs/docs/building/overview.md b/docs/docs/building/overview.md new file mode 100644 index 00000000..0cdad09a --- /dev/null +++ b/docs/docs/building/overview.md @@ -0,0 +1,5 @@ +# Building >> Overview ||10 + +Building is a necessary optimization when shipping apps to production. By using a build you reduce the total size and amount of files transferred to the end-user, and you ensure your code runs on all supported browsers. + +We recommend doing most of the building only in projects which deploy the final result to production, such as apps or websites. This is where you can make the best decisions about supported browsers and optimizations. diff --git a/docs/docs/building/rollup.md b/docs/docs/building/rollup.md new file mode 100644 index 00000000..b43a411f --- /dev/null +++ b/docs/docs/building/rollup.md @@ -0,0 +1,458 @@ +# Building >> Rollup ||20 + +Rollup configuration to help you get started building modern web applications. +You write modern javascript using the latest browser features, rollup will optimize your code for production and ensure it runs on all supported browsers. + +## Features + +- Set HTML or JS as input and/or output +- Optimized for browsers which support modules +- Optional separate build for legacy browsers +- Loads polyfills using feature detection +- Generates a service worker +- Minifies JS +- Minifies lit-html templates + +## Automatic setup + +We recommend the open-wc [project generator](https://open-wc.org/init/) for automated setup, for new projects or to upgrade existing projects. + +## Manual setup + +Install the required dependencies: + +
+View + +```bash +npm i -D rollup @open-wc/building-rollup rimraf deepmerge es-dev-server +``` + +
+ +Create a `rollup.config.js` file: + +
+View + +```js +import merge from 'deepmerge'; +// use createSpaConfig for bundling a Single Page App +import { createSpaConfig } from '@open-wc/building-rollup'; + +// use createBasicConfig to do regular JS to JS bundling +// import { createBasicConfig } from '@open-wc/building-rollup'; + +const baseConfig = createSpaConfig({ + // use the outputdir option to modify where files are output + // outputDir: 'dist', + + // if you need to support older browsers, such as IE11, set the legacyBuild + // option to generate an additional build just for this browser + // legacyBuild: true, + + // development mode creates a non-minified build for debugging or development + developmentMode: process.env.ROLLUP_WATCH === 'true', + + // set to true to inject the service worker registration into your index.html + injectServiceWorker: false, +}); + +export default merge(baseConfig, { + // if you use createSpaConfig, you can use your index.html as entrypoint, + // any `, + ), + ], + }, +}); +``` + +
+ +### Customize polyfills + +[@open-wc/rollup-plugin-polyills-loader](https://github.com/open-wc/open-wc/tree/master/packages/rollup-plugin-polyfills-loader#readme) loads polyfills only when necessary based on feature detection. + +You can prevent certain polyfills from being loaded or add your own polyfills. + +
+View example + +```js +const baseConfig = createSpaConfig({ + polyfillsLoader: { + polyfills: { + webcomponents: false, + intersectionObserver: true, + resizeObserver: true, + custom: [ + { + name: 'my-feature-polyfill', + path: require.resolve('my-feature-polyfill'), + test: "!('myFeature' in window)", + minify: true, + }, + ], + }, + }, +}); +``` + +
+ +### Customize built-in babel plugins + +We add some babel plugins by default. These can be overwritten with a different configuration from the config. For example to change the html template minification, or add other modules to be minified: + +
+ View example + +```js +const baseConfig = createSpaConfig({ + babel: { + plugins: [ + [ + require.resolve('babel-plugin-template-html-minifier'), + { + modules: { + 'cool-html': ['html'], + }, + htmlMinifier: { + removeComments: false, + }, + }, + ], + ], + }, +}); +``` + +
+ +## Extending the rollup config + +A rollup config is just a plain object. It's easy to extend it using javascript. We recommend using the `deepmerge` library because it is an easy way to merge objects and arrays: + +
+View example + +```javascript +import merge from 'deepmerge'; +import { createSpaConfig } from '@open-wc/building-rollup'; + +const baseConfig = createSpaConfig(); + +export default merge(baseConfig, { + // add your own rollup configuration here + input: './index.html', + output: { + sourcemap: false, + }, + plugins: [ + // add new plugins + myPlugin(), + ], +}); +``` + +
+ +If you have enabled the legacy build option, the `output` option is an array. In that case, you cannot use deepmerge if you need to make changes to the `output` option. + +
+View example + +```javascript +import merge from 'deepmerge'; +import { createSpaConfig } from '@open-wc/building-rollup'; + +const baseConfig = createSpaConfig({ + legacyBuild: true, +}); + +// set the sourcemap option on both outputs +baseConfig.output[0].sourcemap = true; +baseConfig.output[1].sourcemap = true; + +export default merge(baseConfig, { + input: './index.html', + plugins: [ + // add new plugins + myPlugin(), + ], +}); +``` + +
+ +#### Copying assets + +To copy over assets, such as images, css or json files, we recommend using [rollup-plugin-copy](https://www.npmjs.com/package/rollup-plugin-copy) + +
+ View example + +```js +import merge from 'deepmerge'; +import { createSpaConfig } from '@open-wc/building-rollup'; +import copy from 'rollup-plugin-copy'; + +const baseConfig = createSpaConfig(); + +export default merge(baseConfig, { + input: './index.html', + plugins: [ + copy({ + targets: [{ src: 'assets/**/*', dest: '/dist' }], + // set flatten to false to preserve folder structure + flatten: false, + }), + ], +}); +``` + +
+ +#### Support for CommonJs modules + +Rollup only supports standard es modules (using `import` and `export`). A lot of projects don't use this syntax yet, and instead use the CommonJs module format. This format uses `require` and `module.exports` statements, and is intended for NodeJs. + +To support this in Rollup, you can add the [@rollup/plugin-commonjs](https://github.com/rollup/plugins/tree/master/packages/commonjs) plugin. + +
+ View example + +```js +import merge from 'deepmerge'; +import { createSpaConfig } from '@open-wc/building-rollup'; +import commonjs from '@rollup/plugin-commonjs'; + +const baseConfig = createSpaConfig(); + +export default merge(baseConfig, { + input: './index.html', + plugins: [commonjs()], +}); +``` + +
+ +#### Support for Typescript + +
+ +View example + +To support Typescript in rollup you have multiple options. You can run `tsc`, and then run rollup on the generated JS files. This is useful when you are already running `tsc` for use in other tools, such as a dev server. You can also use the [@rollup/plugin-typescript](https://github.com/rollup/plugins/tree/master/packages/typescript) plugin to integrate with rollup more directly. View their documentation for more information. + +```js +import merge from 'deepmerge'; +import { createSpaConfig } from '@open-wc/building-rollup'; +import typescript from '@rollup/plugin-typescript'; + +const baseConfig = createSpaConfig(); + +export default merge(baseConfig, { + input: './index.html', + plugins: [typescript()], +}); +``` + +
diff --git a/docs/docs/demoing/index.md b/docs/docs/demoing/index.md new file mode 100644 index 00000000..b3af62ea --- /dev/null +++ b/docs/docs/demoing/index.md @@ -0,0 +1,3 @@ +# Demoing ||30 + +Please see a sub page diff --git a/docs/docs/demoing/storybook-addon-markdown-docs.md b/docs/docs/demoing/storybook-addon-markdown-docs.md new file mode 100644 index 00000000..3dd68de7 --- /dev/null +++ b/docs/docs/demoing/storybook-addon-markdown-docs.md @@ -0,0 +1,19 @@ +--- +title: 'Storybook Addon: Markdown Docs' +eleventyNavigation: + key: 'Storybook Addon: Markdown Docs' + order: 30 + parent: Tools +--- + +[//]: # 'AUTO INSERT HEADER PREPUBLISH' + +This extension for [Storybook](https://storybook.js.org/) enables you to use [Markdown JavaScript (mdjs) Format](https://open-wc.org/mdjs/). + +## Installation + +Please check out [@open-wc/demoing-storybook](https://open-wc.org/demoing/) for a fully integrated setup. + +## How it works + +This extension converts the mdjs output directly to JavaScript (in CSF format) which can be displayed by storybook docs. diff --git a/docs/docs/demoing/storybook.md b/docs/docs/demoing/storybook.md new file mode 100644 index 00000000..80a0ecd2 --- /dev/null +++ b/docs/docs/demoing/storybook.md @@ -0,0 +1,321 @@ +# Demoing >> Storybook ||10 + +For demoing, documenting and showcasing different states of your Web Component, we recommend using [storybook](https://storybook.js.org/). + +[//]: # 'AUTO INSERT HEADER PREPUBLISH' + +# Features + +- Create API documentation/playground +- Use Storybook docs mode to showcase your elements within the normal text flow +- Works down to IE11 +- Prebuilt storybook UI (for a fast startup) +- Uses es-dev-server (serve modern code while developing) +- Completely separate storybook UI from your code + +## Demo + +```js script +import '@d4kmor/launch/inline-notification/inline-notification.js'; +``` + + + +

Don't take our word for it but look at the documentation of a demo card and the documentation of the knobs decorator.

+ +
+ +## Setup + +```bash +npm init @open-wc +# Upgrade > Demoing +``` + +### Manual + +- `yarn add @open-wc/demoing-storybook --dev` +- Copy at minimum the [.storybook](https://github.com/open-wc/open-wc/tree/master/packages/create/src/generators/demoing-storybook/templates/static/.storybook) folder to `.storybook` +- If you want to bring along the examples, you may also copy the `stories` folder. +- Be sure you have a [custom-elements.json](#custom-elementsjson) file. +- Add the following scripts to your package.json + +```json +"scripts": { + "storybook": "start-storybook --node-resolve --watch --open", + "storybook:build": "build-storybook" +}, +``` + +## Usage + +```bash +npm run storybook +``` + +### CLI configuration + +#### Dev server + +The storybook server is based on [es-dev-server](https://open-wc.org/developing/es-dev-server.html) and accepts the same command line args. Check the docs for all available options. + +#### Storybook specific + +| name | type | description | +| ---------- | ------ | ------------------------------------------------------------- | +| config-dir | string | Where the storybook config files are. Default: `./.storybook` | +| output-dir | string | Rollup build output directory. Default: `./static-storybook` | + +### Configuration file + +By default, storybook looks for a config file called `main.js` in your config dir (default `.storybook`). In this file you can configure storybook itself, `es-dev-server` and the `rollup` build configuration. + +```js +module.exports = { + // Globs of all the stories in your project + stories: ['../stories/*.stories.{js,mdx}'], + + // Addons to be loaded, note that you need to import + // them from storybook-prebuilt + addons: [ + 'storybook-prebuilt/addon-actions/register.js', + 'storybook-prebuilt/addon-knobs/register.js', + 'storybook-prebuilt/addon-a11y/register.js', + 'storybook-prebuilt/addon-docs/register.js', + ], + + // Configuration for es-dev-server (start-storybook only) + esDevServer: { + nodeResolve: true, + open: true, + }, + + // Rollup build output directory (build-storybook only) + outputDir: '../dist', + // Configuration for rollup (build-storybook only) + rollup: config => { + return config; + }, +}; +``` + +### Create documentation (mdjs) + +Create a `*.stories.md` (for example `card.stories.md`) file within the `stories` folder. + +This uses the [Markdown JavaScript (mdjs) Format](https://open-wc.org/mdjs/) via [storybook-addon-markdown-docs](https://open-wc.org/demoing/storybook-addon-markdown-docs.html). + +````md +```js script +import '../demo-wc-card.js'; + +export default { + title: 'Demo Card/Docs (markdown)', + parameters: { component: 'demo-wc-card' }, +}; +``` + +# Demo Web Component Card + +A component meant to display small information with additional data on the back. +// [...] use markdown to format your text +// the following demo is inline + +```js story +export const Simple = () => html` Hello World `; +``` + +## Variations + +Show demo with a frame and a "show code" button. + +```js preview-story +export const Simple = () => html` Hello World `; +``` + +## API + +The api table will show the data of "demo-wc-card" in your `custom-elements.json`. + + + +// [...] +```` + +### Create documentation (mdx) + +Create a `*.stories.mdx` (for example `card.stories.mdx`) file within the `stories` folder. + +```md +import { Story, Preview, Meta, Props } from '@open-wc/demoing-storybook'; +import { html } from 'lit-html'; +import '../demo-wc-card.js'; + + + +# Demo Web Component Card + +A component meant to display small information with additional data on the back. +// [...] use markdown to format your text + + + + {html` + Hello World + `} + + + +## API + +The api table will show the data of "demo-wc-card" in your `custom-elements.json`. + + + +// [...] +``` + +### Create stories in CSF (Component story format) + +Create a `*.stories.js` (for example `card-variations.stories.js`) file within the `stories` folder. + +```js +export default { + title: 'Card|Variations', + component: 'demo-wc-card', +}; + +export const singleComponent = () => html` `; +``` + +For more details see the [official storybook docs](https://storybook.js.org/docs/formats/component-story-format/). + +You can import these templates into any other place if needed. + +For example in tests: + +```js +import { expect, fixture } from '@open-wc/testing'; +import { singleComponent } from '../stories/card-variations.stories.js'; + +it('has a header', async () => { + const el = await fixture(singleComponent); + expect(el.header).to.equal('Your Message'); +}); +``` + +### Create API playground + + + +You can find a more interactive version of this in the [withWebComponentsKnobs docs](/demoing-storybook/?path=/docs/decorators-withwebcomponentknobs--example-output). + + + +Based on the data in [custom-elements.json](./#custom-elementsjson), we can automatically generate knobs for your stories. + +To enable this feature you will need to add an additional decorator. + +**MDX** + +```md +import { withKnobs, withWebComponentsKnobs } from '@open-wc/demoing-storybook'; + + + + + {html` + A character that is part of a book series... + `} + +``` + +**CSF** + +```js +import { html } from 'lit-html'; +import { withKnobs, withWebComponentsKnobs } from '@open-wc/demoing-storybook'; + +import '../demo-wc-card.js'; + +export default { + title: 'Card|Playground', + component: 'demo-wc-card', + decorators: [withKnobs, withWebComponentsKnobs], + parameters: { options: { selectedPanel: 'storybookjs/knobs/panel' } }, +}; + +export const singleComponent = () => html` `; +``` + +For additional features like + +- define which components to show knobs for +- showing knobs for multiple different components +- syncing components states to knobs +- Filtering properties and debugging states + +please see the official [documentation of the knobs for web components decorator](/demoing-storybook/?path=/docs/decorators-withwebcomponentknobs--example-output). + +### custom-elements.json + +In order to get documentation for web-components you will need to have a [custom-elements.json](https://github.com/webcomponents/custom-elementsjson) file. +You can handwrite it or better generate it. Depending on the web components sugar you are choosing your mileage may vary. +Please note that the details of the file are still being discussed so we may adopt to changes in `custom-elements.json` without a breaking release. + +Known analyzers that output `custom-elements.json`: + +- [web-component-analyzer](https://github.com/runem/web-component-analyzer) + - Supports LitElement, Polymer, Vanilla, (Stencil) +- [stenciljs](https://stenciljs.com/) + - Supports Stencil (but does not have all metadata) + +It basically looks like this: + +```json +{ + "version": 2, + "tags": [ + { + "name": "demo-wc-card", + "properties": [ + { + "name": "header", + "type": "String", + "description": "Shown at the top of the card" + } + ], + "events": [], + "slots": [], + "cssProperties": [] + } + ] +} +``` + +For a full example see the [./demo/custom-elements.json](./demo/custom-elements.json). + +### Additional middleware config like an api proxy + +As we are using [es-dev-server](https://open-wc.org/developing/es-dev-server.html) under the hood you can use all it's power. You can use the regular command line flags, or provide your own config via `start storybook -c /path/to/config.js`. + +To set up a proxy, you can set up a koa middleware. [Read more about koa here.](https://koajs.com/) + +```javascript +const proxy = require('koa-proxies'); + +module.exports = { + esDevServer: { + port: 9000, + middlewares: [ + proxy('/api', { + target: 'http://localhost:9001', + }), + ], + }, +}; +``` diff --git a/docs/docs/development/dedupe-mixin.md b/docs/docs/development/dedupe-mixin.md new file mode 100644 index 00000000..3e4c7d49 --- /dev/null +++ b/docs/docs/development/dedupe-mixin.md @@ -0,0 +1,205 @@ +# Development >> Dedupe Mixin ||30 + +Automatically Deduplicate JavaScript Class Mixins + +[//]: # 'AUTO INSERT HEADER PREPUBLISH' + +## Features + +- Small +- Fast +- Typed + +## Usage + +Apply it to each mixin in the chain to make sure they are not applied more than once to the final class. + +```js +import { dedupeMixin } from '@open-wc/dedupe-mixin'; + +export const MyMixin = dedupeMixin( + superclass => + class MyMixin extends superclass { + // your mixin code goes here + }, +); +``` + +## What is a Mixin? + +> A mixin is an abstract subclass; i.e. a subclass definition that may be applied to different superclasses to create a related family of modified classes. +> +> - Gilad Bracha and William Cook, [Mixin-based Inheritance](http://www.bracha.org/oopsla90.pdf) + +Let's take for example Logging. Imagine you have 3 Pages + +- Red +- Green +- Blue + +``` + +----------+ + | Page | + +----------+ + | | | + +----------+ | +-----------+ + | | | ++---------+ +-----------+ +----------+ +| PageRed | | PageGreen | | PageBlue | ++----+----+ +-----------+ +----------+ + +``` + +```js +class Page {} +class PageRed extends Page {} +class PageGreen extends Page {} +class PageBlue extends Page {} +``` + +Now we want to log whenever someone goes on Page Red. +To archive that we extend Page Red and make a Logged Page Red. + +``` + +----------+ + | Page | + +-+--+--+--+ + | | | + +----------+ | +-----------+ + | | | ++----+----+ +-----+-----+ +-----+----+ +| PageRed | | PageGreen | | PageBlue | ++----+----+ +-----------+ +----------+ + | ++----+----+ +| Logged | +| PageRed | ++---------+ +``` + +```js +class Page {} +class PageRed extends Page {} +class PageGreen extends Page {} +class PageBlue extends Page {} +class LoggedPagRed extends PageRed {} +``` + +If we want to start logging for PageGreen we have an issue: + +- we can't put the logic in `Page` as Blue should not be logged +- we can't reuse the logic in `Logged PageGreen` as we can not extend from 2 source (even if we could it would mean conflicting info in Red and Green) + +What we can do is put it in an "external" place and write it so it can be "mixed in". + +``` + +----------+ +----------+ + | Page | | Logging* | + +-+--+--+--+ +----------+ + | | | + +----------+ | +-----------+ + | | | ++-----+----+ +-----+-----+ +-----+----+ +| PageRed | | PageGreen | | PageBlue | +| with | | with | +----------+ +| Logging* | | Logging* | ++----------+ +-----------+ +``` + +```js +// defining the Mixin +export const LoggingMixin = superclass => + class LoggingMixin extends superclass { + // logging logic + }; + +class Page {} +// applying a Mixin +class PageRed extends LoggingMixin(Page) {} +class PageGreen extends LoggingMixin(Page) {} +class PageBlue extends Page {} +``` + +With that approach we can extract logic into a separate code pieces we can use where needed. + +For a more in depth technical explanation please read [Real Mixins with JavaScript Classes](https://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/). + +## Why is Deduping of Mixins Necessary? + +We now want all logging to the Red, Green, and Blue pages. +Easy enough - as we can now apply the LoggingMixin on the Page itself. + +``` + +----------+ +----------+ + | Page | | Logging* | + | with | +----------+ + | Logging* | + +-+--+--+--+ + | | | + +----------+ | +-----------+ + | | | ++-----+----+ +-----+-----+ +-----+----+ +| PageRed | | PageGreen | | PageBlue | ++----------+ | with | +----------+ + | Logging* | + +-----------+ +``` + +However, Team Green were eager to launch, so they already applied `LoggingMixin` to their Page class. When we apply it to the base `Page` class, Mixin is now applied twice 😱 +Suddenly, the Green page will print each log twice - not what we originally had in mind. + +What we need to do is make sure that each Mixin is attached only once even if we try to apply it multiple times. + +Generally the more generic a mixin is, the higher the chance becomes that is gets applied more than once. As a mixin author you can't control how it is used, and can't always predict it. So as a safety measure it is always recommended to create deduping mixins. + +```js +import { dedupeMixin } from '@open-wc/dedupe-mixin'; + +export const MyMixin = dedupeMixin( + superclass => + class MyMixin extends superclass { + // your mixin code goes here + }, +); +``` + +You can see exactly this situation in the demo. + +By applying dedupeMixin to the mixin function, before we export it, we can be sure that our mixin class will only take effect once, even if it is mixed in to multiple base classes in the inheritance chain. + +- [no-dedupe](/dedupe-mixin/demo/no-dedupe/) "fails" by logging Green two times +- [with-dedupe](/dedupe-mixin/demo/with-dedupe/) "succeeds" by logging Green one time as well + +You can check the source code for both on [github](https://github.com/open-wc/open-wc/tree/master/packages/dedupe-mixin/demo-typed). + +### Nested examples + +You may think that the above example is too simple and can be solved by aligning on when to do changes. +However in most real live scenarios the situation is much more complicated 🙈 +Mixins can be extended and just because you import a class it does not meant that this class has some Mixins pre applied. + +Consider this example: + +``` + +----------+ +----------+ +----------+ + | Page | | Logging* | | Feature | + | with | +----+-----+ | with | + | Logging* | | | Metrics* | + +-+--+--+--+ +----+-----+ +----+--+--+ + | | | | Metrics* | | | + +----------+ | +-----------+ +----------+ | +------ + | | | | ++-----+----+ +-----+-----+ +-----+----+ +------+-------+ +| PageRed | | PageGreen | | PageBlue | | WaterFeature | ++----------+ +-----------+ | with | +--------------+ + | Metrics* | + +----------+ +``` + +- Pages generally only need Logging +- There is however also more advanced Metrics System which extends Logging +- Metrics was separately developed for Features +- When we now want to get the same Metrics on Page Blue we get duplicate logging without consciously applying logging even once (we do `class PageBlue extends MetricsMixin(Page) {}`) +- Only deduping can help in these scenarios + +_Ascii Graphics made with [AsciiFlow](http://asciiflow.com/)_ diff --git a/docs/init/README.md b/docs/docs/development/generator.md similarity index 85% rename from docs/init/README.md rename to docs/docs/development/generator.md index 3adea8c3..290044ad 100644 --- a/docs/init/README.md +++ b/docs/docs/development/generator.md @@ -1,25 +1,13 @@ ---- -permalink: 'init/index.html' -title: Create Open Web Components -section: guides -tags: - - guides ---- - -# Create Open Web Components +# Development >> Generator ||15 Web component project scaffolding. -[//]: # 'AUTO INSERT HEADER PREPUBLISH' - ## Usage ```bash npm init @open-wc ``` -

WARNING

npm init requires node 10 & npm 6 or higher

- This will kickstart a menu guiding you through all available actions. ``` @@ -87,7 +75,7 @@ npm init @open-wc
- `Testing`
- This generator adds a complete testing setup with Web Test Runner. + This generator adds a complete testing setup with Karma.
- `Demoing`
diff --git a/docs/docs/development/index.md b/docs/docs/development/index.md new file mode 100644 index 00000000..d42945f4 --- /dev/null +++ b/docs/docs/development/index.md @@ -0,0 +1,3 @@ +# Development ||10 + +Please see a sub page diff --git a/docs/docs/development/lit-helpers.md b/docs/docs/development/lit-helpers.md new file mode 100644 index 00000000..99d3145b --- /dev/null +++ b/docs/docs/development/lit-helpers.md @@ -0,0 +1,196 @@ +# Development >> Lit Helpers ||20 + +A library with helpers functions for working with [lit-html](https://lit-html.polymer-project.org/) and [lit-element](https://lit-element.polymer-project.org/) + +[//]: # 'AUTO INSERT HEADER PREPUBLISH' + +## Installation + +```bash +npm i --save @open-wc/lit-helpers +``` + +## Spread directives + +Spread directives can be used to set an arbitrary collection of properties, attributes or event listeners on an element without knowing all the keys in advance. + +The spread directives work by taking in an object of data to spread. Because of `lit-html` syntax, we need one attribute to apply the directive to. It doesn't actually matter what the name of this attribute is, we recommend sticking to the convention of using `...` as the attribute name. + +### Regular spread + +The regular `spread` directive can be used to set properties, attribute or event listeners. It uses the same syntax as `lit-html` for distinguishing different types of bindings: + +```js +import { html, render } from 'lit-html'; +import { spread } from '@open-wc/lit-helpers'; + +render( + html` +
console.log('my-event fired'), + })} + >
+ `, + document.body, +); +``` + +### Property spread + +Because spreading properties is a common use case, you can use the `spreadProps` directive so that you don't need prefix each property with a `.`. This is especially useful when the data comes from external sources. + +```js +import { html, render } from 'lit-html'; +import { spreadProps } from '@open-wc/lit-helpers'; + +render(html`
`, document.body); +``` + +### Attribute spread + +Since `spread` already spreads attribute as the default case, we do not need a separate `spreadAttributes` directive. + +### Re-rendering + +When re-rendering, values are updated if they changed from the previous value. We use the same strict equality check (`!==`) as `lit-html` for this. + +Unlike `lit-html`, when spreading attributes we remove the attribute if it is set to `null` or `undefined`. + +If an entry in the spread data is removed, the property is set to undefined, the attribute is removed or the event listener is deregistered. + +Example: + +```js +function renderSpread(data) { + render(html`
`, document.body); +} + +// result:
+renderSpread({ foo: 'bar' }); + +// result:
+renderSpread({ foo: 'buz' }); + +// result:
+renderSpread({ foo: 'buz', lorem: 'ipsum' }); + +// result:
+renderSpread({ foo: 'buz' }); + +// result:
+renderSpread({ foo: 'undefined' }); +``` + +## Live binding + +For efficiency, lit-html does not set properties or attributes if they did not change since the previous render. This can cause problems when the properties are changed outside of lit-html's control. The `live` directive can be used to dirty check the element's live value, and set the property or attribute if it changed. + +A great example for this, is the DOM element's `scrollTop` property which changes without lit-html knowing about it when the user scrolls. + +By using the `live` directive, you can make sure it is always in sync with the value rendered by `lit-html`: + +```js +html` `; +``` + +## Privately Settable Read-Only Properties + +`ReadOnlyPropertiesMixin` provides a way for based on `LitElement` (or it's parent class `UpdatingElement`) to define properties by adding `readOnly: true` to their property declaration. Those properties are read-only from the outside, but can be updated internally with the `setReadOnlyProperties` method. + +```js +import { ReadOnlyPropertiesMixin } from '@open-wc/lit-helpers'; +import { LitElement } from 'lit-element'; +class SettableElement extends ReadOnlyPropertiesMixin(LitElement) { + static get properties() { + return { + timestamp: { type: Number, readOnly: true }, + }; + } + + constructor() { + super(); + this.timestamp = Date.now(); + } + + updateTime() { + this.setReadOnlyProperties({ timestamp: Date.now() }); + } + + render() { + return html` + + + `; + } +} +``` + +The mixin also supports the `@property` decorator. + +```js +import { ReadOnlyPropertiesMixin } from '@open-wc/lit-helpers'; +import { LitElement, property } from 'lit-element'; +class SettableElement extends ReadOnlyPropertiesMixin(LitElement) { + @property({ type: Number, readOnly: true }) timestamp = Date.now(); + + updateTime() { + this.setReadOnlyProperties({ timestamp: Date.now() }); + } + + render() { + return html` + + + `; + } +} +``` + +### Known Limitations + +#### Order of Application Matters + +Currently, this mixin only works properly when applied to LitElement (or UpdatingElement) directly. In other words, if you have a component which inherits like the example below, then `ReadOnlyPropertiesMixin` must be applied to `LitElement` only. + +```js +// Bad +class Lowest extends LitElement { + @property({ readOnly: true }) lowestProperty = undefined; +} + +class Highest extends ReadOnlyPropertiesMixin(Lowest) { + // will not work as expected + @property({ readOnly: true }) highestProperty = undefined; +} +``` + +```js +// Good +class Lowest extends ReadOnlyPropertiesMixin(LitElement) { + @property({ readOnly: true }) lowestProperty = undefined; +} + +class Highest extends Lowest { + @property({ readOnly: true }) highestProperty = undefined; +} +``` + +#### Properties Must be Initialized + +Read only properties must be initialized with some value, even if the value is `undefined`. This is because the mixin allows one free setting, to support class field initialization. + +```js +// Bad +class Uninitialized extends ReadOnlyPropertiesMixin(LitElement) { + @property({ readOnly: true }) uninitialized; +} + +// Good +class Initialized extends ReadOnlyPropertiesMixin(LitElement) { + @property({ readOnly: true }) initialized = undefined; +} +``` diff --git a/docs/docs/development/scoped-elements.md b/docs/docs/development/scoped-elements.md new file mode 100644 index 00000000..fef7a1b9 --- /dev/null +++ b/docs/docs/development/scoped-elements.md @@ -0,0 +1,323 @@ +# Development >> Scoped Elements ||40 + +Scope element tag names avoiding naming collision and allowing to use different versions of the same web component in your code. + +## Installation + +```bash +npm i --save @open-wc/scoped-elements +``` + +## Usage + +1. Import `ScopedElementsMixin` from `@open-wc/scoped-elements`. + + ```js + import { ScopedElementsMixin } from '@open-wc/scoped-elements'; + ``` + +2. Import the classes of the components you want to use. + + ```js + import { MyButton } from './MyButton.js'; + import { MyPanel } from './MyPanel.js'; + ``` + +3. Apply `ScopedElementsMixin` and define the tags you want to use for your components. + + ```js + class MyElement extends ScopedElementsMixin(LitElement) { + static get scopedElements() { + return { + 'my-button': MyButton, + 'my-panel': MyPanel, + }; + } + } + ``` + + > WARNING: If you are going to use elements that are globally defined you have to declare them in `scopedElements` as well. This is required because we are trying to work as close as possible to the future Scoped Custom Element Registries feature and, by the moment, there is not going ot be inheritance between registries. + > + > You can declare them like in the following example: + > + > ```js + > static get scopedElements() { + > return { + > 'old-button': customElements.get('old-button'), + > 'my-panel': MyPanel, + > }; + > } + > ``` + > + > If you try to register the same element globally AND locally with the exact same name AND class instance it will reuse the global tag name and NOT scope it. + +4. Use your components in your html. + + ```js + render() { + return html` + + ${this.text} + + `; + } + ``` + +### Complete example + +```js +import { css, LitElement } from 'lit-element'; +import { ScopedElementsMixin } from '@open-wc/scoped-elements'; +import { MyButton } from './MyButton.js'; +import { MyPanel } from './MyPanel.js'; + +export class MyElement extends ScopedElementsMixin(LitElement) { + static get scopedElements() { + return { + 'my-button': MyButton, + 'my-panel': MyPanel, + }; + } + + static get styles() { + return css` + .panel { + padding: 10px; + background-color: grey; + } + `; + } + + static get properties() { + return { + text: String, + }; + } + + render() { + return html` + + ${this.text} + + `; + } +} +``` + +### Lazy scoped components + +In some situations may happen that you want to use a component in your templates that is not already loaded at the moment of defining the scoped elements map. The `ScopedElementsMixin` provides the `defineScopedElement` method to define scoped elements at any time. + +```js +import { LitElement } from 'lit-element'; +import { ScopedElementsMixin } from '@open-wc/scoped-elements'; +import { MyPanel } from './MyPanel.js'; + +export class MyElement extends ScopedElementsMixin(LitElement) { + static get scopedElements() { + return { + 'my-panel': MyPanel, + }; + } + + constructor() { + super(); + + import('./MyButton.js').then(({ MyButton }) => this.defineScopedElement('my-button', MyButton)); + } + + render() { + return html` + + ${this.text} + + `; + } +} +``` + +### Obtaining a scoped tag name + +Maybe you want to create a scoped element programmatically and don't know which one is the scoped tag name? No problem, there is a static method called `getScopedTagName` that would help you for that. + +```js +import { LitElement } from 'lit-element'; +import { ScopedElementsMixin } from '@open-wc/scoped-elements'; +import { MyButton } from './MyButton.js'; +import { MyPanel } from './MyPanel.js'; + +export class MyElement extends ScopedElementsMixin(LitElement) { + static get scopedElements() { + return { + 'my-panel': MyPanel, + 'my-button': MyButton, + }; + } + + constructor() { + super(); + + const scopedTagName = this.constructor.getScopedTagName('my-button'); + + // do whatever you need with the scopedTagName + } + + // ... +} +``` + +## Motivation + +Complex Web Component applications are often developed by several teams across organizations. In that scenario it is common that shared component libraries are used by teams to create a homogeneous look and feel or just to avoid creating the same components multiple times, but as those libraries evolve problems between different versions of the same library may appear, as teams may not be able to evolve and update their code at the same velocity. This causes bottlenecks in software delivery that should be managed by the teams and complex build systems, to try to alleviate the problem. + +[Scoped Custom Element Registries](https://github.com/w3c/webcomponents/issues/716) is a proposal that will solve this problem, but until it is ready, or a polyfill becomes available, we have to _scope_ custom element tag names if we want to use different versions of those custom elements in our code. This package allows you to forget about how custom elements are defined, registered and scopes their tag names if it is necessary, and avoids the name collision problem. + +## Use case and demos + +Consider the following setup + +- **Team Blue** owns **Page A** +- **Team Green** owns **Page B** +- **Team Black** owns **Feature A & B** + +1. Everything is good and [your app is live](https://open-wc.org/scoped-elements/demo/before-nesting/) [[code](https://github.com/open-wc/open-wc/tree/master/packages/scoped-elements/demo/before-nesting)] with both pages. +2. **Team Black** releases a new version (**2.x**) of **Feature B** which unfortunately needs to be breaking in order to support new use-cases. +3. **Team Blue** (on **Page A**) does not use any of those new use cases, and they have a tight deadline to meet, so they cannot update right now. +4. **Team Green** (on **Page B**) has to deliver an important functionality to your end users, but they need to upgrade to **Feature B 2.x** since it can only be solved with this new version. +5. Since **Feature A 1.x & 2.x** are both used in the same app, this will lead to nested dependencies, which then will lead to [catastrophic failure, and errors](https://open-wc.org/scoped-elements/demo/no-scope/) [[code](https://github.com/open-wc/open-wc/tree/master/packages/scoped-elements/demo/no-scope)]. + +Two possible solutions come to mind: + +1. Temporarily (!) allow shipping similar source code (most breaking releases are not a total rewrite) and scope them via `@open-wc/scoped-elements`; see the "fixed" example [with-scope](https://open-wc.org/scoped-elements/demo/with-scope/) [[code](https://github.com/open-wc/open-wc/tree/master/packages/scoped-elements/demo/with-scope)] running with nested dependencies. +2. Synchronizing updates of shared dependencies - e.g. make sure **Team Blue** & **Team Green** always use the same version when releasing. This can be a viable solution however it comes with a high organizational overhead and is hard to scale up (for 10+ teams) + +#### Technical explanation of scenario + +The simplified app has the following dependencies + +- app + - page-a + - feature-a 1.x + - feature-b 1.x + - page-b + - feature-a 2.x + - feature-b 1.x + +which leads to the following node_modules tree + +``` +├── node_modules +│ ├── feature-a +│ ├── feature-b +│ ├── page-a +│ └── page-b +│ └── node_modules +│ └── feature-a +├── demo-app.js +└── index.html +``` + +To demonstrate, we made three demos: + +1. [before-nesting](https://open-wc.org/scoped-elements/demo/before-nesting/) [[code](https://github.com/open-wc/open-wc/tree/master/packages/scoped-elements/demo/before-nesting)] In this demo, everything works fine as **Page A and B** both are using the same version of **Feature A** + +2. [no-scope](https://open-wc.org/scoped-elements/demo/no-scope/) [[code](https://github.com/open-wc/open-wc/tree/master/packages/scoped-elements/demo/no-scope)] **Feature A** version **1.x** and **2.x** are imported via self registering entry points which leads to the following error message, because the `feature-a` component tries to register multiple times: + + ``` + Uncaught DOMException: Failed to execute 'define' on 'CustomElementRegistry': the name "feature-a" has already been used with this registry + at [...]/node_modules/page-b/node_modules/feature-a/feature-a.js:3:16 + ``` + +3. [with-scope](https://open-wc.org/scoped-elements/demo/with-scope/) [[code](https://github.com/open-wc/open-wc/tree/master/packages/scoped-elements/demo/with-scope)] This example successfully fixes the problem by using `ScopedElementsMixin` on both **Page A** and **Page B**. + +## How it works + +`ScopedElementsMixin` is mixed into your LitElement and via `static get scopedElements()` you define the tags and classes you wanna use in your elements template. +Under the hood it changes your template so `${this.text}` becomes `${this.text}`. + +Every auto-defined scoped elements gets a random\* 4 digits number suffix. This suffix changes every time to make sure developers are not inclined to use it the generated tag name as a styling hook. Additionally the suffix allows scoped-elements and traditional self-defined elements to coexist, avoiding name collision. + +\* it is actually a global counter that gets initialized with a random starting number on load + +## Limitations + +1. Components imported via npm **SHOULD NOT** be self registering components. If a shared component (installed from npm) does not offer an export to the class alone, without the registration side effect, then this component may not be used. E.g. every component that calls `customElement.define`. + + ```js + export class MyEl { ... } + customElement.define('my-el', MyEl); + ``` + + Or uses the `customElement` typescript decorator + + ```ts + @customElement('my-el') + export class MyEl { ... } + ``` + + Only side effects free class exports may be used + + ```js + export class MyEl { ... } + ``` + +2. Every component that uses sub components should use `scoped-elements`. Any import to a self registering component can potentially result in a browser exception - completely breaking the whole application. + +3. Imported elements should be fully side effect free (not only element registration) + +4. Currently, only `lit-element` is supported (though other elements/rendering engines could be incorporated in the future). + +5. You cannot use tag selectors in css, but you could use an id, a class name or even a property instead. + + ```css + 🚫 my-panel { + width: 300px; + } + ✅ .panel { + width: 300px; + } + ``` + +6. You cannot use tag names using javascript querySelectors, but you could use an id, a class name or even a property instead. + + ```js + 🚫 this.shadowRoot.querySelector('my-panel'); + ✅ this.shadowRoot.querySelector('.panel'); + ``` + +7. Using `scoped-elements` may result in a performance degradation of up to 8%. +8. Loading of duplicate/similar source code (most breaking releases are not a total rewrite) should always be a temporary solution. +9. Often, temporary solutions tend to become more permanent. Be sure to focus on keeping the lifecycle of nested dependencies short. + +## Performance + +We are using [Tachometer](https://github.com/Polymer/tachometer) to measure the performance penalty of using the scoped elements feature. The chosen test application is a slight variation of the [Polymer Shop Application](https://shop.polymer-project.org). + +This is an example of the results obtained running the performance test. + +``` +⠋ Auto-sample 560 (timeout in 16m27s) +┌─────────────┬───────────────┐ +│ Version │ │ +├─────────────┼───────────────┤ +│ Browser │ chrome │ +│ │ 80.0.3987.106 │ +├─────────────┼───────────────┤ +│ Sample size │ 610 │ +└─────────────┴───────────────┘ +┌─────────────────────────────┬────────────┬─────────────────────┬─────────────────┬──────────────────────────┐ +│ Benchmark │ Bytes │ Avg time │ vs lit-element │ vs scoped-elements-mixin │ +├─────────────────────────────┼────────────┼─────────────────────┼─────────────────┼──────────────────────────┤ +│ lit-element │ 281.24 KiB │ 285.72ms - 286.69ms │ │ faster │ +│ │ │ │ - │ 2% - 2% │ +│ │ │ │ │ 5.68ms - 7.1ms │ +├─────────────────────────────┼────────────┼─────────────────────┼─────────────────┼──────────────────────────┤ +│ scoped-elements-mixin │ 283.21 KiB │ 292.08ms - 293.11ms │ slower │ │ +│ │ │ │ 2% - 2% │ - │ +│ │ │ │ 5.68ms - 7.10ms │ │ +└─────────────────────────────┴────────────┴─────────────────────┴─────────────────┴──────────────────────────┘ +``` + +## Special thanks + +This package was initially inspired by [carehtml](https://github.com/bashmish/carehtml) and we would like to thank [@bashmish](https://github.com/bashmish) for his work on it. diff --git a/docs/docs/experimental/index.md b/docs/docs/experimental/index.md new file mode 100644 index 00000000..1bfeede5 --- /dev/null +++ b/docs/docs/experimental/index.md @@ -0,0 +1,3 @@ +# Experimental ||60 + +Please see a sub page diff --git a/packages/mdjs/README.md b/docs/docs/experimental/mdjs.md similarity index 93% rename from packages/mdjs/README.md rename to docs/docs/experimental/mdjs.md index aaad5293..5a4e5cbc 100644 --- a/packages/mdjs/README.md +++ b/docs/docs/experimental/mdjs.md @@ -1,14 +1,6 @@ ---- -permalink: 'mdjs/index.html' -title: Markdown JavaScript (mdjs) Format -section: guides -tags: - - guides ---- +# Experimental >> Markdown JavaScript || 10 -# Markdown JavaScript (mdjs) Format - -Mdjs is a format that allows you to use JavaScript with Markdown, to create interactive demos. It does so by "annotating" JavaScript that should be executed in Markdown. +Markdown JavaScript (Mdjs) is a format that allows you to use JavaScript with Markdown, to create interactive demos. It does so by "annotating" JavaScript that should be executed in Markdown. To annotate we use a code block with `js script`. diff --git a/docs/docs/index.md b/docs/docs/index.md new file mode 100644 index 00000000..13dafcaf --- /dev/null +++ b/docs/docs/index.md @@ -0,0 +1,10 @@ +--- +title: Documentation +eleventyNavigation: + key: Docs + order: 20 +--- + +Our documentation is hand crafted and optimized to serve as a dictionary to look up details once the need arises. + +For a more guided learning experience please visit our [Guides](../guides/). diff --git a/docs/docs/legacy/index.md b/docs/docs/legacy/index.md new file mode 100644 index 00000000..990fffca --- /dev/null +++ b/docs/docs/legacy/index.md @@ -0,0 +1,3 @@ +# Legacy ||50 + +Please see a sub page diff --git a/docs/docs/legacy/legacy-projects.md b/docs/docs/legacy/legacy-projects.md new file mode 100644 index 00000000..c9f3d3a7 --- /dev/null +++ b/docs/docs/legacy/legacy-projects.md @@ -0,0 +1,18 @@ +# Legacy >> Legacy Projects || 10 + +Over the last years we have created different projects and recommendations. During this time certain projects have become deprecated as we moved on to different tools or approaches. + +This doesn't mean that we've completely dropped support for these projects. While we don't feature them on the main website, we still maintain and support these projects. We don't develop any new features or functionalities, but we will continue to support bugfixes and in some cases update along with the dependent tooling. + +The documentation for our legacy projects is maintained in the github readmes: + +### Legacy projects + +- [es-dev-server](https://github.com/open-wc/es-dev-server) is now replaced by [web-dev-server](https://modern-web.dev/docs/dev-server/overview/) +- [testing-karma](https://github.com/open-wc/legacy/tree/master/packages/testing-karma) and [karma-esm](https://github.com/open-wc/legacy/tree/master/packages/karma-esm) we now recommend [web-test-runner](https://modern-web.dev/docs/test-runner/overview/) +- [testing-karma-bs](https://github.com/open-wc/legacy/tree/master/packages/testing-karma-bs) we now recommend [web-test-runner](https://modern-web.dev/docs/test-runner/overview/) & [@web/test-runner-browserstack](https://modern-web.dev/docs/test-runner/browser-launchers/browserstack/) +- [rollup-plugin-index-html](https://github.com/open-wc/legacy/tree/master/packages/rollup-plugin-index-html) we now recommend `@web/rollup-plugin-html` +- [webpack-import-meta-loader](https://github.com/open-wc/legacy/tree/master/packages/webpack-import-meta-loader) we now recommend [babel-plugin-bundled-import-meta](https://www.npmjs.com/package/babel-plugin-bundled-import-meta) +- [building-webpack](https://github.com/open-wc/legacy/tree/master/packages/building-webpack) we now recommend rollup over webpack +- [webpack-index-html-plugin](https://github.com/open-wc/legacy/tree/master/packages/webpack-index-html-plugin) we now recommend rollup over webpack +- [storybook-addon-web-components-knobs](https://github.com/open-wc/legacy/tree/master/packages/storybook-addon-web-components-knobs) storybook v6 has a new better knobs system diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/index.md b/docs/docs/linting/eslint-plugin-lit-a11y/index.md new file mode 100644 index 00000000..aa5da8f2 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/index.md @@ -0,0 +1,3 @@ +# Linting >> EsLint Plugin Lit A11y || 10 + +sse diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/overview.md b/docs/docs/linting/eslint-plugin-lit-a11y/overview.md new file mode 100644 index 00000000..c619f9fd --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/overview.md @@ -0,0 +1,106 @@ +# Linting >> EsLint Plugin Lit A11y >> Overview || -5 + +Accessibility linting plugin for lit-html. + +Most of the rules are ported from [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y), and made to work with [lit-html](https://lit-html.polymer-project.org/) templates and custom elements. + +## Installation + +You'll first need to install [ESLint](http://eslint.org): + +``` +$ npm i eslint --save-dev +``` + +Next, install `eslint-plugin-lit-a11y`: + +``` +$ npm install eslint-plugin-lit-a11y --save-dev +``` + +**Note:** If you installed ESLint globally (using the `-g` flag) then you must also install `eslint-plugin-lit-a11y` globally. + +## Usage + +Add `lit-a11y` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix: + +```json +{ + "plugins": ["lit-a11y"] +} +``` + +Then configure the rules you want to use under the rules section. + +```json +{ + "rules": { + "lit-a11y/rule-name": 2 + } +} +``` + +## Configuration + +You may also extend the recommended configuration like so: + +```json +{ + "extends": ["plugin:lit-a11y/recommended"] +} +``` + +By default, any tagged template literal that starts with `html` is linted. Example: + +```js +html``; +``` + +It could be the case, however, that you're using multiple rendering libraries in a project, like for example [`htm`](https://github.com/developit/htm), which also uses a `html` tagged template literal, but has a slightly different syntax than lit-html. In this case you can specify the following option, to make sure only lit-html tagged template literals are linted: + +```json +{ + "settings": { + "litHtmlSources": true + } +} +``` + +This will cause the plugin to lint _only_ `html` tagged template literals that are imported from either `'lit-html'` or `'lit-element'`. + +If you're importing lit-html from a package that re-exports lit-html, like for example `@apollo-elements/lit-apollo`, you can specify `@apollo-elements/lit-apollo` as a valid litHtmlSource like so: + +```json +{ + "settings": { + "litHtmlSources": ["@apollo-elements/lit-apollo"] + } +} +``` + +## Supported Rules + +- [lit-a11y/accessible-emoji](./rules/accessible-emoji.md) +- [lit-a11y/alt-text](./rules/alt-text.md) +- [lit-a11y/anchor-has-content](./rules/anchor-has-content.md) +- [lit-a11y/anchor-is-valid](./rules/anchor-is-valid.md) +- [lit-a11y/aria-activedescendant-has-tabindex](./rules/aria-activedescendant-has-tabindex.md) +- [lit-a11y/aria-attr-valid-value](./rules/aria-attr-valid-value.md) +- [lit-a11y/aria-attrs](./rules/aria-attrs.md) +- [lit-a11y/aria-role](./rules/aria-role.md) +- [lit-a11y/aria-unsupported-elements](./rules/aria-unsupported-elements.md) +- [lit-a11y/autocomplete-valid](./rules/autocomplete-valid.md) +- [lit-a11y/click-events-have-key-events](./rules/click-events-have-key-events.md) +- [lit-a11y/heading-has-content](./rules/heading-has-content.md) +- [lit-a11y/iframe-title](./rules/iframe-title.md) +- [lit-a11y/img-redundant-alt](./rules/img-redundant-alt.md) +- [lit-a11y/mouse-events-have-key-events](./rules/mouse-events-have-key-events.md) +- [lit-a11y/no-access-key](./rules/no-access-key.md) +- [lit-a11y/no-autofocus](./rules/no-autofocus.md) +- [lit-a11y/no-distracting-elements](./rules/no-distracting-elements.md) +- [lit-a11y/no-invalid-change-handler](./rules/no-invalid-change-handler.md) +- [lit-a11y/no-redundant-role](./rules/no-redundant-role.md) +- [lit-a11y/role-has-required-aria-attrs](./rules/role-has-required-aria-attrs.md) +- [lit-a11y/role-supports-aria-attr](./rules/role-supports-aria-attr.md) +- [lit-a11y/scope](./rules/scope.md) +- [lit-a11y/tabindex-no-positive](./rules/tabindex-no-positive.md) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/accessible-emoji.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/accessible-emoji.md new file mode 100644 index 00000000..a5908aeb --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/accessible-emoji.md @@ -0,0 +1,50 @@ +# Linting >> EsLint Plugin Lit A11y >> accessible-emoji (DEPRECATED) + +Enforce emojis are wrapped in `` and provide screenreader access. + +> Emoji help us communicate complex ideas very easily. When used in native apps and applications, emoji are reasonably accessible to screen readers, but on the web we need to do a little more to make sure everyone can understand emoji. + +- [Léonie Watson](https://tink.uk/accessible-emoji/) + +While many modern user agents are able to announce emoji to screen reader users, this rule is still useful for apps targetting older user agents. + +## Rule Details + +This rule aims to prevent inaccessible use of emoji in lit-html templates. + +Examples of **incorrect** code for this rule: + +```js +html` + 🐼 + 🐼 +`; +``` + +Examples of **correct** code for this rule: + +```js +html` 🐼 `; +``` + +```js +html` 🐼 `; +``` + +```js +html` + 🐼 + 🐼 + + + 🤡 +`; +``` + +## When Not To Use It + +If you exclusively target modern user agents which explicitly support emoji in plain text, or if you do not use emoji in your lit-html templates. + +## Further Reading + +[Accessible emoji by Léonie Watson](https://tink.uk/accessible-emoji/) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/alt-text.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/alt-text.md new file mode 100644 index 00000000..4d913d5f --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/alt-text.md @@ -0,0 +1,51 @@ +# Linting >> EsLint Plugin Lit A11y >> alt-text + +Enforce that all elements that require alternative text have meaningful information to relay back to the end user. This is a critical component of accessibility for screen reader users in order for them to understand the content's purpose on the page. By default, this rule checks for alternative text on `` elements. + +This rule also permits images which are completely removed from the AOM (Accessibility Object Model): + +> **Sometimes there is non-text content that really is not meant to be seen or understood by the user.** Transparent images used to move text over on a page; an invisible image that is used to track usage statistics; and a swirl in the corner that conveys no information but just fills up a blank space to create an aesthetic effect are all examples of this. Putting alternative text on such items just distracts people using screen readers from the content on the page. Not marking the content in any way, though, leaves users guessing what the non-text content is and what information they may have missed (even though they have not missed anything in reality). This type of non-text content, therefore, is marked or implemented in a way that assistive technologies (AT) will ignore it and not present anything to the user. + +- [WCAG 1.1.1](https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html#examples) + +## Rule Details + +Examples of **incorrect** code for this rule: + +```js +html` + +
+`; +``` + +Examples of **correct** code for this rule: + +```js +html` + + + + + foo + + + + + + +
+ +
+ + +`; +``` + +## Further Reading + +- [WCAG 1.1.1](https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html) +- [axe-core, object-alt](https://dequeuniversity.com/rules/axe/3.2/object-alt) +- [axe-core, image-alt](https://dequeuniversity.com/rules/axe/3.2/image-alt) +- [axe-core, input-image-alt](https://dequeuniversity.com/rules/axe/3.2/input-image-alt) +- [axe-core, area-alt](https://dequeuniversity.com/rules/axe/3.2/area-alt) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/anchor-has-content.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/anchor-has-content.md new file mode 100644 index 00000000..bf40ca0f --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/anchor-has-content.md @@ -0,0 +1,31 @@ +# Linting >> EsLint Plugin Lit A11y >> anchor-has-content + +Enforce that anchors have content and that the content is accessible to screen readers. Accessible means that it is not hidden using the `aria-hidden` attribute. Refer to the references to learn about why this is important. + +## Rule Details + +This rule aims to... + +Examples of **incorrect** code for this rule: + +```js +html` + + +`; +``` + +Examples of **correct** code for this rule: + +```js +html` + Anchor Content! + +`; +``` + +## Further Reading + +- [WCAG 2.4.4](https://www.w3.org/WAI/WCAG21/Understanding/link-purpose-in-context) +- [WCAG 4.1.2](https://www.w3.org/WAI/WCAG21/Understanding/name-role-value) +- [axe-core, link-name](https://dequeuniversity.com/rules/axe/3.2/link-name) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/anchor-is-valid.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/anchor-is-valid.md new file mode 100644 index 00000000..136f30fa --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/anchor-is-valid.md @@ -0,0 +1,235 @@ +# Linting >> EsLint Plugin Lit A11y >> anchor-is-valid + +Performs validity check on anchor hrefs. Warns when anchors are used as buttons. + +The HTML `` element, with a valid `href` attribute, is formally defined as representing a **hyperlink**. That is, a link between one HTML document and another, or between one location inside an HTML document and another location inside the same document. + +In fact, the interactive, underlined `` element has become so synonymous with web navigation that this expectation has become entrenched inside browsers, assistive technologies such as screen readers and in how people generally expect the internet to behave. In short, anchors should navigate. + +The use of JavaScript frameworks and libraries has made it very easy to add or subtract functionality from the standard HTML elements. This has led to _anchors_ often being used in applications based on how they look and function instead of what they represent. + +Whilst it is possible, for example, to turn the `` element into a fully functional ` `; +``` + +### Case: I want navigable links + +An `` element without an `href` attribute no longer functions as a hyperlink. That means that it can no longer accept keyboard focus or be clicked on. The documentation for [no-noninteractive-tabindex](no-noninteractive-tabindex.md) explores this further. Preferably use another element (such as `div` or `span`) for display of text. + +To properly function as a hyperlink, the `href` attribute should be present and also contain a valid _URL_. _JavaScript_ strings, empty values or using only **#** are not considered valid `href` values. + +Valid `href` attributes values are: + +```js +html` + Navigate to page + Navigate to page and location + Navigate to internal page location +`; +``` + +### Case: I need the HTML to be interactive, don't I need to use an `a` tag for that? + +An `` tag is not inherently interactive. Without an href attribute, it really is no different to a `
`. + +Let's look at an example that is not accessible by all users: + +```js +html` (this.showSomething = true)}> ${label} `; +``` + +If you need to create an interface element that the user can click on, consider using a button: + +```js +html` + +`; +``` + +If you want to navigate while providing the user with extra functionality, for example in the `@mouseenter` event, use an anchor with an `href` attribute containing a URL or path as its value. + +```js +html` + (this.showSomething = true)}> + ${label} + +`; +``` + +If you need to create an interface element that the user can mouse over or mouse out of, consider using a div element. In this case, you may need to apply a role of presentation or an interactive role. Interactive ARIA roles include `button`, `link`, `checkbox`, `menuitem`, `menuitemcheckbox`, `menuitemradio`, `option`, `radio`, `searchbox`, `switch` and `textbox`. + +```js +html` + +`; +``` + +In the example immediately above an `@click` event handler was added to provide the same experience mouse users enjoy to keyboard-only and touch-screen users. Never fully rely on mouse events alone to expose functionality. + +### Case: I understand the previous cases but still need an element resembling a link that is purely clickable + +We recommend, without reserve, that elements resembling anchors should navigate. This will provide a superior user experience to a larger group of users out there. + +However, we understand that developers are not always in total control of the visual design of web applications. In cases where it is imperative to provide an element resembling an anchor that purely acts as a click target with no navigation as result, we would like to recommend a compromise. + +Again change the element to a ` +`; +``` + +Then use styling to change its appearance to that of a link: + +```css +.link-button { + background-color: transparent; + border: none; + cursor: pointer; + text-decoration: underline; + display: inline; + margin: 0; + padding: 0; +} + +.link-button:hover, +.link-button:focus { + text-decoration: none; +} +``` + +This button element can now also be used inline in text. + +Once again we stress that this is an inferior implementation and some users will encounter difficulty to use your website, however, it will allow a larger group of people to interact with your website than the alternative of ignoring the rule's warning. + +## Rule Details + +This rule takes one optional object argument of type object: + +```json +{ + "rules": { + "lit-a11y/anchor-is-valid": [ + "error", + { + "allowHash": true, + "aspects": ["noHref", "invalidHref", "preferButton"] + } + ] + } +} +``` + +For the `allowHash` option (default `true`), if set to `false`, the empty hash or "scroll-to-top" link will be considered an error. + +Examples of **incorrect** code for this rule with `"allowHash": false`: + +```js +html` `; +``` + +Examples of **correct** code for this rule with `"allowHash": false`: + +```js +html` `; +``` + +For the `aspects` option, these strings determine which sub-rules are run. This allows omission of certain error types in restrictive environments. + +- `noHref`: Checks whether an anchor contains an `href` attribute. +- `invalidHref`: Checks if a given `href` value is valid. +- `preferButton`: Checks if anchors have been used as buttons. + +If omitted, all sub-rule aspects will be run by default. This is the recommended configuration for all cases except where the rule becomes unusable due to well founded restrictions. + +The option must contain at least one `aspect`. + +Examples of **incorrect** code for this rule: + +Anchors should be a button: + +```js +html` + + + + +`; +``` + +Missing `href` attribute: + +```js +html` + + + +`; +``` + +Invalid `href` attribute: + +```js +html` + + + +`; +``` + +Examples of **correct** code for this rule: + +```js +html` + + + + + + + + + + + +`; +``` + +## Further Reading + +- [WCAG 2.1.1](https://www.w3.org/WAI/WCAG21/Understanding/keyboard) +- [WebAIM - Introduction to Links and Hypertext](http://webaim.org/techniques/hypertext/) +- [Links vs. Buttons in Modern Web Applications](https://marcysutton.com/links-vs-buttons-in-modern-web-applications/) +- [Using ARIA - Notes on ARIA use in HTML](https://www.w3.org/TR/using-aria/#NOTES) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-activedescendant-has-tabindex.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-activedescendant-has-tabindex.md new file mode 100644 index 00000000..005e14b0 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-activedescendant-has-tabindex.md @@ -0,0 +1,35 @@ +# Linting >> EsLint Plugin Lit A11y >> aria-activedescendant-has-tabindex + +`aria-activedescendant` is used to manage focus within a [composite widget](https://www.w3.org/TR/wai-aria/#composite). +The element with the attribute `aria-activedescendant` retains the active document +focus; it indicates which of its child elements has secondary focus by assigning +the ID of that element to the value of `aria-activedescendant`. This pattern is +used to build a widget like a search typeahead select list. The search input box +retains document focus so that the user can type in the input. If the down arrow +key is pressed and a search suggestion is highlighted, the ID of the suggestion +element will be applied as the value of `aria-activedescendant` on the input +element. + +Because an element with `aria-activedescendant` must be tabbable, it must either +have an inherent `tabIndex` of zero or declare a `tabIndex` of zero with the `tabIndex` +attribute. + +## Rule Details + +This rule aims to... + +Examples of **incorrect** code for this rule: + +```js +html`
`; +``` + +Examples of **correct** code for this rule: + +```js +html`
`; +``` + +## Further Reading + +- [MDN, Using the aria-activedescendant attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-activedescendant_attribute) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-attr-valid-value.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-attr-valid-value.md new file mode 100644 index 00000000..72b684fe --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-attr-valid-value.md @@ -0,0 +1,23 @@ +# Linting >> EsLint Plugin Lit A11y >> aria-attr-valid-value + +ARIA state and property values must be valid. + +## Rule Details + +Examples of **incorrect** code for this rule: + +```js +html` foo `; +``` + +Examples of **correct** code for this rule: + +```js +html` `; +``` + +## Further Reading + +- [WCAG 4.1.2](https://www.w3.org/WAI/WCAG21/Understanding/name-role-value) +- [ARIA Spec, States and Properties](https://www.w3.org/TR/wai-aria/#states_and_properties) +- [Chrome Audit Rules, AX_ARIA_04](https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_aria_04) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-attrs.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-attrs.md new file mode 100644 index 00000000..74b804fb --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-attrs.md @@ -0,0 +1,21 @@ +# Linting >> EsLint Plugin Lit A11y >> aria-attrs + +Elements cannot use an invalid ARIA attribute. This will fail if it finds an `aria-*` property that is not listed in [WAI-ARIA States and Properties spec](https://www.w3.org/WAI/PF/aria-1.1/states_and_properties). + +## Rule Details + +Examples of **incorrect** code for this rule: + +```js +html`
`; +``` + +Examples of **correct** code for this rule: + +```js +html`
`; +``` + +## Further Reading + +- [WCAG 4.1.2](https://www.w3.org/WAI/WCAG21/Understanding/name-role-value) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-role.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-role.md new file mode 100644 index 00000000..b0de0f38 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-role.md @@ -0,0 +1,39 @@ +# Linting >> EsLint Plugin Lit A11y >> aria-role + +Elements with ARIA roles must use a valid, non-abstract ARIA role. A reference to role definitions can be found at [WAI-ARIA](https://www.w3.org/TR/wai-aria/#role_definitions) site. + +## Rule Details + +Examples of **incorrect** code for this rule: + +```js +html`
`; +``` + +Examples of **correct** code for this rule: + +```js +html`
`; +``` + +```js +html`
`; +``` + +```js +html`
`; +``` + +```js +html`
`; +``` + +```js +html`
`; +``` + +## Further Reading + +- [WCAG 4.1.2](https://www.w3.org/WAI/WCAG21/Understanding/name-role-value) +- [Chrome Audit Rules, AX_ARIA_01](https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_aria_01) +- [DPUB-ARIA roles](https://www.w3.org/TR/dpub-aria-1.0/) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-unsupported-elements.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-unsupported-elements.md new file mode 100644 index 00000000..327f32b0 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/aria-unsupported-elements.md @@ -0,0 +1,28 @@ +# Linting >> EsLint Plugin Lit A11y >> aria-unsupported-elements + +Certain reserved DOM elements do not support ARIA roles, states and properties. This is often because they are not visible, for example `meta`, `script`, and `style`. This rule enforces that these DOM elements do not contain the role and/or aria-\* attributes. + +## Rule Details + +Examples of **incorrect** code for this rule: + +```js +html` `; +html` `; +html` `; +html` `; +``` + +Examples of **correct** code for this rule: + +```js +html` `; +html` `; +html` `; +``` + +## Further Reading + +- [WCAG 4.1.2](https://www.w3.org/WAI/WCAG21/Understanding/name-role-value) +- [Chrome Audit Rules, AX_ARIA_12](https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_aria_12) +- [DPUB-ARIA roles](https://www.w3.org/TR/dpub-aria-1.0/) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/autocomplete-valid.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/autocomplete-valid.md new file mode 100644 index 00000000..914234c2 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/autocomplete-valid.md @@ -0,0 +1,37 @@ +# Linting >> EsLint Plugin Lit A11y >> autocomplete-valid + +Ensure the autocomplete attribute is correct and suitable for the form field it is used with. + +## Rule Details + +This rule aims to... + +Examples of **incorrect** code for this rule: + +```js +html` `; +``` + +```js +html` ; `; +``` + +Examples of **correct** code for this rule: + +```js +html` `; +``` + +```js +html` `; +``` + +```js +html` ; `; +``` + +## Further Reading + +- [WCAG 1.3.5](https://www.w3.org/WAI/WCAG21/Understanding/identify-input-purpose) +- [axe-core, autocomplete-valid](https://dequeuniversity.com/rules/axe/3.2/autocomplete-valid) +- [HTML 5.2, Autocomplete requirements](https://www.w3.org/TR/html52/sec-forms.html#autofilling-form-controls-the-autocomplete-attribute) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/click-events-have-key-events.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/click-events-have-key-events.md new file mode 100644 index 00000000..10522e86 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/click-events-have-key-events.md @@ -0,0 +1,55 @@ +# Linting >> EsLint Plugin Lit A11y >> click-events-have-key-events + +Enforce `@click` is accompanied by at least one of `@keyup`, `@keydown`, or `@keypress`. Coding for the keyboard is important for users with physical disabilities who cannot use a mouse, AT compatibility, and screenreader users. This does not apply for interactive or hidden elements. + +## Rule Details + +Examples of **incorrect** code for this rule: + +```js +html`
`; +``` + +Examples of **correct** code for this rule: + +```js +html` `; +``` + +```js +html`
`; +``` + +### Options + +The `allowList` option lets you specify tag names to exclude from this rule. the `allowCustomElements` option (true by default) excludes all custom-elements from this rule. + +```json +{ + "rules": { + "lit-a11y/click-events-have-key-events": [ + "error", + { + "allowList": ["foo-button"], + "allowCustomElements": false + } + ] + } +} +``` + +Examples of **incorrect** code with `allowCustomElements: false`: + +```js +html` `; +``` + +Examples of **correct** code with `allowCustomElements: false, allowList: ['custom-element']`: + +```js +html` `; +``` + +## Further Reading + +- [WCAG 2.1.1](https://www.w3.org/WAI/WCAG21/Understanding/keyboard) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/heading-has-content.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/heading-has-content.md new file mode 100644 index 00000000..e86d7a02 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/heading-has-content.md @@ -0,0 +1,113 @@ +# Linting >> EsLint Plugin Lit A11y >> heading-has-content + +Enforce that heading elements (`h1`, `h2`, etc.) have content and that the content is accessible to screen readers. Accessible means that it is not hidden using the `aria-hidden` attribute. Refer to the references to learn about why this is important. + +## Rule Details + +This rule aims to... + +Examples of **incorrect** code for this rule: + +```js +html` +

+ +

+`; +``` + +```js +html`

`; +``` + +Examples of **correct** code for this rule: + +```js +html`

Foo

`; +``` + +```js +html` +

+ + foo +

+`; +``` + +### Options + +The `customHeadingElements` option lets you specify tag names to include in this rule, for example, if you have a custom element which implements heading semantics. + +```js +customElements.define( + 'custom-heading', + class CustomHeading extends HTMLElement { + static get observedAttributes() { + return ['level']; + } + + get level() { + const parsed = parseInt(this.getAttribute('level')); + if (!Number.isNaN(parsed)) return parsed; + else return null; + } + + constructor() { + super(); + this.attachShadow({ mode: 'open' }); + } + + connectedCallback() { + this.render(); + } + + attributeChangedCallback() { + if (typeof this.level === 'number') this.render(); + } + + render() { + const heading = `h${this.level}`; + this.shadowRoot.innerHTML = ` + <${heading}> + + + `; + } + }, +); +``` + +```json +{ + "rules": { + "lit-a11y/heading-has-content": [ + "error", + { + "customHeadingElements": ["custom-heading"] + } + ] + } +} +``` + +Examples of **incorrect** code with `customHeadingElements: ["custom-heading"]`: + +```js +html` `; +``` + +Examples of **incorrect** code with `customHeadingElements: ["custom-heading"]`: + +```js +html` + Heading + Heading + ${foo} +`; +``` + +## Further Reading + +- [WCAG 2.4.6](https://www.w3.org/TR/UNDERSTANDING-WCAG20/navigation-mechanisms-descriptive.html) +- [axe-core, empty-heading](https://dequeuniversity.com/rules/axe/3.2/empty-heading) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/iframe-title.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/iframe-title.md new file mode 100644 index 00000000..e3faf8da --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/iframe-title.md @@ -0,0 +1,23 @@ +# Linting >> EsLint Plugin Lit A11y >> iframe-title + +` `; +``` + +Examples of **correct** code for this rule: + +```js +html` `; +``` + +## Further Reading + +- [WCAG 2.4.1](https://www.w3.org/WAI/WCAG21/Understanding/bypass-blocks) +- [WCAG 4.1.2](https://www.w3.org/WAI/WCAG21/Understanding/name-role-value) +- [axe-core, frame-title](https://dequeuniversity.com/rules/axe/3.2/frame-title) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/img-redundant-alt.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/img-redundant-alt.md new file mode 100644 index 00000000..67a98dbb --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/img-redundant-alt.md @@ -0,0 +1,44 @@ +# Linting >> EsLint Plugin Lit A11y >> img-redundant-alt + +Enforce img alt attribute does not contain the words image, picture, or photo. Screenreaders already announce img elements as an image. There is no need to use words such as image, photo, and/or picture. + +## Rule Details + +This rule takes one optional object argument of type object: + +```json +{ + "rules": { + "lit-a11y/img-redundant-alt": [ + 2, + { + "words": ["Bild", "Foto"] + } + ] + } +} +``` + +For the `words` option, these strings can be used to specify custom words that should be checked for in the alt prop, including `image`, `photo`, and `picture`. Useful for specifying words in other languages. + +The rule will first check if `aria-hidden` is true to determine whether to enforce the rule. If the image is hidden, then rule will always succeed. + +Examples of **incorrect** code for this rule: + +```js +html` Photo of foo being weird. `; +html` Image of me at a bar! `; +html` Picture of baz fixing a bug. `; +``` + +Examples of **correct** code for this rule: + +```js +html` Foo eating a sandwich. `; +html` Picture of me taking a photo of an image `; // Will pass because it is hidden. +html` ${`Baz `; // This is valid since photo is a variable name.` +``` + +## Further Reading + +- [WebAIM, Alternative Text](https://webaim.org/techniques/alttext/) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/mouse-events-have-key-events.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/mouse-events-have-key-events.md new file mode 100644 index 00000000..f274cefa --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/mouse-events-have-key-events.md @@ -0,0 +1,57 @@ +# Linting >> EsLint Plugin Lit A11y >> mouse-events-have-key-events + +Enforce `@mouseover`/`@mouseout` are accompanied by `@focus`/`@blur`. Coding for the keyboard is important for users with physical disabilities who cannot use a mouse, AT compatibility, and screenreader users. + +## Rule Details + +Examples of **incorrect** code for this rule: + +```js +html` + + +`; +``` + +Examples of **correct** code for this rule: + +```js +html` + + +`; +``` + +### Options + +The `allowList` option lets you specify tag names to exclude from this rule. the `allowCustomElements` option (true by default) excludes all custom-elements from this rule. + +```json +{ + "rules": { + "lit-a11y/click-events-have-key-events": [ + "error", + { + "allowList": ["foo-button"], + "allowCustomElements": false + } + ] + } +} +``` + +Examples of **incorrect** code with `allowCustomElements: false`: + +```js +html` `; +``` + +Examples of **correct** code with `allowCustomElements: false, allowList: ['custom-element']`: + +```js +html` `; +``` + +## Further Reading + +- [WCAG 2.1.1](https://www.w3.org/WAI/WCAG21/Understanding/keyboard) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-access-key.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-access-key.md new file mode 100644 index 00000000..d4cd1c28 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-access-key.md @@ -0,0 +1,25 @@ +## Linting >> EsLint Plugin Lit A11y >> no-access-key + +Enforce no accesskey attribute on element. Access keys are HTML attributes that allow web developers to assign keyboard shortcuts to elements. Inconsistencies between keyboard shortcuts and keyboard commands used by screenreader and keyboard only users create accessibility complications so to avoid complications, access keys should not be used. + +## Rule Details + +This rule takes no arguments. + +Examples of **incorrect** code for this rule: + +```js +html` `; +html` `; +html` `; +``` + +Examples of **correct** code for this rule: + +```js +html`
`; +``` + +## Further Reading + +- [WebAIM, Keyboard Accessibility: Accesskey](http://webaim.org/techniques/keyboard/accesskey#spec) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-autofocus.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-autofocus.md new file mode 100644 index 00000000..b73157c0 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-autofocus.md @@ -0,0 +1,30 @@ +# Linting >> EsLint Plugin Lit A11y >> no-autofocus + +Enforce that autofocus attribute is not used on elements. Autofocusing elements can cause usability issues for sighted and non-sighted users, alike. + +## Rule Details + +Examples of **incorrect** code for this rule: + +```js +html` + + + + + + + +`; +``` + +Examples of **correct** code for this rule: + +```js +html` `; +``` + +### Resources + +- [WHATWG HTML Standard, The autofocus attribute](https://html.spec.whatwg.org/multipage/interaction.html#attr-fe-autofocus) +- [The accessibility of HTML 5 autofocus](https://www.brucelawson.co.uk/2009/the-accessibility-of-html-5-autofocus/) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-distracting-elements.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-distracting-elements.md new file mode 100644 index 00000000..5bb5f680 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-distracting-elements.md @@ -0,0 +1,30 @@ +# Linting >> EsLint Plugin Lit A11y >> no-distracting-elements + +Enforces that no distracting `` or `` elements are used. These elements are visually distracting and can cause accessibility issues with visually impaired users. Such elements are also deprecated, and should not be used. + +## Rule Details + +Examples of **incorrect** code for this rule: + +```js +html` Can't read this `; +``` + +```js +html` Can't read this `; +``` + +Examples of **correct** code for this rule: + +```js +html` Readable Content `; +``` + +## Accessibility guidelines + +- [WCAG 2.2.2](https://www.w3.org/WAI/WCAG21/Understanding/pause-stop-hide) + +### Resources + +- [axe-core, marquee](https://dequeuniversity.com/rules/axe/3.2/marquee) +- [axe-core, blink](https://dequeuniversity.com/rules/axe/3.2/blink) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-invalid-change-handler.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-invalid-change-handler.md new file mode 100644 index 00000000..35ccf545 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-invalid-change-handler.md @@ -0,0 +1,38 @@ +# Linting >> EsLint Plugin Lit A11y >> no-invalid-change-handler + +Enforce usage of `@blur` over/in parallel with `@change` on select menu elements for accessibility. `@blur` should be used instead of `@change`, unless absolutely necessary and it causes no negative consequences for keyboard only or screen reader users. `@blur` is a more declarative action by the user: for instance in a dropdown, using the arrow keys to toggle between options will trigger the `@change` event in some browsers. Regardless, when a change of context results from an `@blur` event or an `@change` event, the user should be notified of the change unless it occurs below the currently focused element. + +## Rule Details + +This rule aims to prevent accessibility problems with ` `; +``` + +```js +html` `; +``` + +Examples of **correct** code for this rule: + +```js +html` `; +``` + +```js +html` + ` controls in your lit-html templates, or you are certain that your usage +of `change` conforms to [WCAG 2.1](https://www.w3.org/WAI/WCAG21/Understanding/on-input) + +## Further Reading + +- [Understanding Success Criterion 3.2.2: On Input](https://www.w3.org/WAI/WCAG21/Understanding/on-input) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-redundant-role.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-redundant-role.md new file mode 100644 index 00000000..326a2405 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/no-redundant-role.md @@ -0,0 +1,39 @@ +# Linting >> EsLint Plugin Lit A11y >> no-redundant-role + +Enforce explicit role property is not the same as implicit/default role property on element. + +Some HTML elements have implicit roles. For example, a `` element has the implicit role `dialog`. +For those elements, there's no need to define a role unless you need to explicity change the existing one. + +## Rule Details + +This rule aims to prevent redundant use of the `role` attribute. + +Examples of **incorrect** code for this rule: + +```js +html` `; +``` + +```js +html` `; +``` + +```js +html` `; +``` + +Examples of **correct** code for this rule: + +```js +html` `; +``` + +## When Not To Use It + +If you do not use ARIA roles in your lit-html templates. + +## Further Reading + +- [MDN: WAI-ARIA Roles](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles) +- [Web Fundamentals: Introduction to ARIA](https://developers.google.com/web/fundamentals/accessibility/semantics-aria/) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/role-has-required-aria-attrs.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/role-has-required-aria-attrs.md new file mode 100644 index 00000000..4ea0a9f2 --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/role-has-required-aria-attrs.md @@ -0,0 +1,53 @@ +# Linting >> EsLint Plugin Lit A11y >> role-has-required-aria-attrs + +Enforce that elements with ARIA roles must have all required attributes for that role. +Some ARIA roles require certain ARIA attributes to be present. + +## Rule Details + +This rule aims to ensure the validity of the Accessibility Object Model. + +Examples of **incorrect** code for this rule: + +```js +html` `; +``` + +```js +html`
`; +``` + +```js +html`
`; +``` + +Examples of **correct** code for this rule: + +```js +html` `; +``` + +```js +html` `; +``` + +```js +html` `; +``` + +```js +html` `; +``` + +```js +html`
`; +``` + +## When Not To Use It + +If you do not use ARIA roles in your lit-html templates. + +## Further Reading + +- [MDN: WAI-ARIA Roles](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles) +- [Web Fundamentals: Introduction to ARIA](https://developers.google.com/web/fundamentals/accessibility/semantics-aria/) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/role-supports-aria-attr.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/role-supports-aria-attr.md new file mode 100644 index 00000000..f112fadb --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/role-supports-aria-attr.md @@ -0,0 +1,37 @@ +# Linting >> EsLint Plugin Lit A11y >> role-supports-aria-attr + +Enforce that elements with a defined role contain only supported ARIA attributes for that role. +Some ARIA attributes are invalid when used with certain roles. + +## Rule Details + +This rule aims to ensure the validity of the Accessibility Object Model. + +Examples of **incorrect** code for this rule: + +```js +html`
  • Rainbow Trout
  • `; +``` + +```js +html`
    `; +``` + +Examples of **correct** code for this rule: + +```js +html`
    `; +``` + +```js +html`
    `; +``` + +## When Not To Use It + +If you do not use ARIA roles in your lit-html templates. + +## Further Reading + +- [MDN: WAI-ARIA Roles](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles) +- [Web Fundamentals: Introduction to ARIA](https://developers.google.com/web/fundamentals/accessibility/semantics-aria/) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/scope.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/scope.md new file mode 100644 index 00000000..8cc39fac --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/scope.md @@ -0,0 +1,61 @@ +# Linting >> EsLint Plugin Lit A11y >> scope + +Enforce scope attribute is only used on <th> elements. +The scope attribute may only be used on `` elements. + +## Rule Details + +This rule aims to prevent invalid use of `scope` attribute. + +Examples of **incorrect** code for this rule: + +```js +html` `; +``` + +```js +html`
    `; +``` + +```js +html` `; +``` + +Examples of **correct** code for this rule: + +```js +html` `; +``` + +```js +html` `; +``` + +```js +html` `; +``` + +```js +html` `; +``` + +```js +html` `; +``` + +```js +html` `; +``` + +```js +html` `; +``` + +## When Not To Use It + +When you do not use the `scope` attribute in your lit-html templates. + +## Further Reading + +- [MDN: `` element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-scope) +- [WebAIM: Creating Accessible Tables](https://webaim.org/techniques/tables/data#headers) diff --git a/docs/docs/linting/eslint-plugin-lit-a11y/rules/tabindex-no-positive.md b/docs/docs/linting/eslint-plugin-lit-a11y/rules/tabindex-no-positive.md new file mode 100644 index 00000000..de3487ff --- /dev/null +++ b/docs/docs/linting/eslint-plugin-lit-a11y/rules/tabindex-no-positive.md @@ -0,0 +1,42 @@ +# Linting >> EsLint Plugin Lit A11y >> tabindex-no-positive + +Enforce tabIndex value is not greater than zero. +HTML allows authors to specify an exact tab order for elements with the `tabindex` attribute, +but doing so can interfere with assistive technology. Authors should prefer to let the browser +determine the tab order by only using `-1` and `0` as values to the `tabindex` attribute. + +## Rule Details + +This rule aims to prevent degradation of keyboard accessibility for keyboard-focusable elements. + +Examples of **incorrect** code for this rule: + +```js +html`
    `; +``` + +```js +html`
    `; +``` + +```js +html`
    `; +``` + +Examples of **correct** code for this rule: + +```js +html`
    `; +``` + +```js +html`
    `; +``` + +## When Not To Use It + +If your lit-html templates do not make use of the tabindex attribute. + +## Further Reading + +[WebAIM: Keyboard Accessibility Page 2: Tabindex](https://webaim.org/techniques/keyboard/tabindex) diff --git a/docs/docs/linting/index.md b/docs/docs/linting/index.md new file mode 100644 index 00000000..e571313f --- /dev/null +++ b/docs/docs/linting/index.md @@ -0,0 +1,3 @@ +# Linting ||45 + +Please see a sub page diff --git a/docs/docs/testing/chai-a11y-axe.md b/docs/docs/testing/chai-a11y-axe.md new file mode 100644 index 00000000..f1d87e77 --- /dev/null +++ b/docs/docs/testing/chai-a11y-axe.md @@ -0,0 +1,67 @@ +# Testing >> Chai A11y aXe ||30 + +This module provides a Chai plugin to perform automated accessibility tests via axe. + +[//]: # 'AUTO INSERT HEADER PREPUBLISH' + +## Chai BDD UI + +The BDD UI works with chai's `expect` function. + +Because the test is asynchronous, you must either await its result or pass a `done` parameter in the plugin's options object. + +Rules can be ignored by passing `ignoredRules` with a list of ignored rules as a configuration option. + +```js +import { fixture, expect, html } from '@open-wc/testing'; + +it('passes accessibility test', async () => { + const el = await fixture(html` `); + await expect(el).to.be.accessible(); +}); + +it('fails without label', async () => { + const el = await fixture(html`
    `); + await expect(el).not.to.be.accessible(); +}); + +it('passes for all rules, ignores attributes test', async () => { + const el = await fixture(html`
    `); + await expect(el).to.be.accessible({ + ignoredRules: ['aria-valid-attr-value'], + }); +}); + +it('accepts "done" option', done => { + fixture(html` `).then(el => { + expect(el).to.be.accessible({ + done, + }); + }); +}); +``` + +## Chai TDD UI + +The `isAccessible()` and `isNotAccessible()` methods work on Chai's `assert` function. + +```js +import { fixture, assert, html } from '@open-wc/testing'; + +it('passes axe accessible tests', async () => { + const el = await fixture(html` `); + await assert.isAccessible(el); +}); + +it('accepts ignored rules list', async () => { + const el = await fixture(html`
    `); + await assert.isAccessible(el, { + ignoredRules: ['aria-valid-attr-value'], + }); +}); + +it('passes for negation', async () => { + const el = await fixture(html`
    `); + await assert.isNotAccessible(el); +}); +``` diff --git a/docs/docs/testing/helpers.md b/docs/docs/testing/helpers.md new file mode 100644 index 00000000..3b10f9f3 --- /dev/null +++ b/docs/docs/testing/helpers.md @@ -0,0 +1,293 @@ +# Testing >> Helpers || 20 + +A library with helpers functions for testing in the browser. + +```js script +import '@d4kmor/launch/inline-notification/inline-notification.js'; +``` + + + +Testing helpers uses [lit-html](https://lit-html.polymer-project.org/), but it's set up as a peer dependency to avoid version conflicts. +You don't need to write your components with lit-html to use this library, but you will need to install it: + +``` +npm i -D lit-html +``` + + + +# Usage + +We recommend using this library through [@open-wc/testing](https://open-wc.org/testing/testing.html) which preconfigures and combines this library with other testing libraries. + +The examples that are shown here assume this setup, and import from `@open-wc/testing`. If you want to use this library standalone, you will need to import from `@open-wc/testing-helpers` directly instead: + +```javascript +// import from general testing library +import { fixture } from '@open-wc/testing'; + +// import from testing-helpers directly +import { fixture } from '@open-wc/testing-helpers'; +``` + +## Test fixtures + +A test fixture renders a piece of HTML and injects into the DOM so that you can test the behavior of your component. It returns the first dom element from the template so that you can interact with it if needed. For example you can call functions, look up dom nodes or inspect the rendered HTML. + +Test fixtures are async to ensure rendering is properly completed. + +### Templates + +Test fixtures can be set up by using a string or a [lit-html](https://github.com/Polymer/lit-html) template. You don't need to use `lit-html` in your project to use the test fixtures, it just renders standard HTML. + +### Test a custom element + +```js +import { fixture } from '@open-wc/testing'; + +it('can instantiate an element', async () => { + const el = await fixture(''); + expect(el.getAttribute('foo')).to.equal('bar'); +} +``` + +### Test a custom element with properties + +```js +import { html, fixture } from '@open-wc/testing'; + +it('can instantiate an element with properties', async () => { + const el = await fixture(html` `); + expect(el.foo).to.equal('bar'); +}); +``` + +### Test a custom class + +If you're testing a mixin, or have multiple base classes that offer a various set of options you might find yourself in the situation of needing multiple custom element names in your tests. This can be dangerous as custom elements are global, so you don't want to have overlapping names in your tests. We recommend using the `defineCE` function to avoid that: + +```js +import { fixture, defineCE } from '@open-wc/testing'; + +const tag = defineCE( + class extends MyMixin(HTMLElement) { + constructor() { + super(); + this.foo = true; + } + }, +); +const el = await fixture(`<${tag}>`); +expect(el.foo).to.be.true; +``` + +## Test a custom class with properties + +For lit-html it's a little tougher as it does not support dynamic tag names by default. +This uses a workaround that's not performant for rerenders, which is fine for testing, but do NOT use this in production code. + +```js +import { html, fixture, defineCE, unsafeStatic } from '@open-wc/testing'; + +const tagName = defineCE( + class extends MyMixin(HTMLElement) { + constructor() { + super(); + this.foo = true; + } + }, +); +const tag = unsafeStatic(tagName); +const el = await fixture(html`<${tag} .bar=${'baz'}>`); +expect(el.bar).to.equal('baz'); +``` + +## Customize the fixture container + +Ordinarily, `fixture` will render your template as a child of a plain `
    ` element on karma's test runner page: + +```js +const el = await fixture(html``); +``` + +```html +
    +``` + +This should suffice for most cases, but if you need to specify the type of element that contains your custom element fixture, (e.g., to give it an absolute position), you can pass the wrapping node in the `parentNode` option: + +```js +const parentNode = document.createElement('div'); +parentNode.setAttribute('style', 'position:absolute;'); +const el = await fixture(html``, { parentNode }); +``` + +```html +
    +``` + +## Timings + +By default fixture awaits the elements "update complete" Promise. + +- for [lit-element](https://github.com/polymer/lit-element) that is `el.updateComplete`; +- for [stencil](https://github.com/ionic-team/stencil/) that is `el.componentOnReady()`; + +If none of those specfic Promise hooks are found, it will wait for one frame via `await nextFrame()`.
    +**Note**: this does not guarantee that the element is done rendering - it just waits for the next JavaScript tick. + +Essentially, `fixture` creates a synchronous fixture, then waits for the element to finish updating, checking `updateComplete` first, then falling back to `componentReady()`, and `nextFrame()` as a last resort. + +This way, you can write your tests more succinctly, without having to explicitly `await` those hooks yourself. + +```js +const el = await fixture(html` `); +expect(el.foo).to.equal('bar'); + +// vs + +const el = fixtureSync(html` `); +await elementUpdated(el); +expect(el.foo).to.equal('bar'); +``` + +### nextFrame + +Uses `requestAnimationFrame` to wait for the next frame. + +```js +await nextFrame(); +``` + +### aTimeout + +Waits for `x` ms via `setTimeout`; + +```js +await aTimeout(10); // would wait 10ms +``` + +### waitUntil + +Waits until the given condition returns true. This is useful when elements do async work. + +`waitUntil` can slow down the execution of tests, it should only be used when you don't have any other more reliable hooks. + +```js +import { fixture, waitUntil } from '@open-wc/testing-helpers'; + +const element = await fixture(html` `); + +// wait until some async property is set +await waitUntil(() => element.someAsyncProperty, 'Element did not become ready'); + +// wait until some child element is rendered +await waitUntil( + () => element.shadowRoot.querySelector('my-child-element'), + 'Element did not render children', +); +``` + +`waitUntil` has a default timeout of 2000ms and a polling interval of 50ms. This can be customized: + +```js +await waitUntil(predicate, 'Element should become visible', { interval: 10, timeout: 10000 }); +``` + +The predicate can return a promise. + +### elementUpdated + +If you want to test attribute and property changes, and an easy way to wait for those changes to propagate, you can import the `elementUpdated` helper (also available directly in the `testing` package) + +```js +import { fixture, elementUpdated } from '@open-wc/testing'; +import '../my-component.js'; + +describe('Attributes', () => { + describe('.title', () => { + //... + it('is bound to the `title` attribute', async () => { + const el = await fixture(''); + expect(el.title).to.eq('test'); + + el.title = 'test 2'; + await elementUpdated(el); + expect(el).dom.to.equal(``); + }); + //... + }); +}); +``` + +## Testing Events + +If you want to interact with web components you will sometimes need to await a specific event before you can continue testing. +Ordinarily, you might pass the `done` callback to a test, and call it in the body of an event handler. +This does not work with async test functions, though, which must return a promise instead of calling the `done` callback. +The `oneEvent` function helps you handle events in the context of the kinds of async test functions that we recommend. +`oneEvent` resolves with the event specified when it fires on the element specified. + +```js +import { oneEvent } from '@open-wc/testing'; + +class FiresDone extends HTMLElement { + fireDone() { + this.done = true; + this.dispatchEvent(new CustomEvent('done', { detail: this.done })); + } +} + +it('can await an event', async () => { + const tag = defineCE(FiresDone); + + const el = await fixture(`<${tag}>`); + + setTimeout(() => el.fireDone()); + + const { detail } = await oneEvent(el, 'done'); + + expect(el.done).to.be.true; + expect(detail).to.be.true; +}); +``` + +## Testing Focus & Blur on IE11 + +Focus and blur events are synchronous events in all browsers except IE11. +If you need to support that browser in your tests, you can await `triggerFocusFor` and `triggerBlurFor` helper functions. + +```js +import { triggerFocusFor, triggerBlurFor } from '@open-wc/testing'; + +it('can be focused and blured', async () => { + const el = await fixture(''); + + await triggerFocusFor(el); + expect(document.activeElement === el).to.be.true; + + await triggerBlurFor(el); + expect(document.activeElement === el).to.be.false; +}); +``` + +## Fixture Cleanup + +By default, if you import anything via `import { ... } from '@open-wc/testing';`, it will automatically register a side-effect that cleans up your fixtures. +If you want to be in full control you can do so by using + +```js +import { fixture, fixtureCleanup } from '@open-wc/testing-helpers/index-no-side-effects.js'; + +it('can instantiate an element with properties', async () => { + const el = await fixture(html``); + expect(el.foo).to.equal('bar'); + fixtureCleanup(); +} + +// Alternatively, you can add the fixtureCleanup in the afterEach function, but note that this is exactly what the automatically registered side-effect does. +afterEach(() => { + fixtureCleanup(); +}); +``` diff --git a/docs/docs/testing/index.md b/docs/docs/testing/index.md new file mode 100644 index 00000000..778e73fe --- /dev/null +++ b/docs/docs/testing/index.md @@ -0,0 +1 @@ +# Testing || 20 diff --git a/docs/docs/testing/semantic-dom-diff.md b/docs/docs/testing/semantic-dom-diff.md new file mode 100644 index 00000000..bd5b7311 --- /dev/null +++ b/docs/docs/testing/semantic-dom-diff.md @@ -0,0 +1,355 @@ +# Testing >> Semantic Dom Diff ||40 + +`semantic-dom-diff` allows diffing chunks of dom or HTML for semantic equality: + +- whitespace and newlines are normalized +- tags and attributes are printed on individual lines +- comments are removed +- style, script and SVG contents are removed +- tags, attributes or element's light dom can be ignored through configuration + +[//]: # 'AUTO INSERT HEADER PREPUBLISH' + +## Manual Setup + +```bash +npm i -D @open-wc/semantic-dom-diff +``` + +## Chai Plugin + +While `semantic-dom-diff` can be used standalone (see below), it most commonly used as a Chai plugin. + +
    + Registering the plugin + +> If you are using `@open-wc/testing` this is already done for you. + +```javascript +import 'chai/chai.js'; +import { chaiDomDiff } from '@open-wc/semantic-dom-diff'; + +window.chai.use(chaiDomDiff); +``` + +
    + +### Assertion Styles + +The Chai plugin supports both the BDD (`expect`) and TDD (`assert`) APIs. + +```javascript +expect(el).dom.to.equal('
    '); +assert.dom.equal(el, '
    '); + +expect(el).dom.to.equal('
    ', { ignoreAttributes: ['foo'] }); +assert.dom.equal(el, '
    ', { ignoreAttributes: ['foo'] }); + +expect(el).lightDom.to.equal('
    '); +assert.lightDom.equal(el, '
    '); + +expect(el).shadowDom.to.equal('
    '); +assert.shadowDom.equal(el, '
    '); +``` + +### Setting up your dom for diffing + +You can set up our chai plugin to diff different types of DOM: + +```javascript +class MyElement extends HTMLElement { + constructor() { + super(); + this.attachShadow({ mode: 'open' }); + } + + connectedCallback() { + this.shadowRoot.innerHTML = '

    shadow content

    '; + } +} + +customElements.define('my-element', MyElement); + +it('my test', async () => { + const el = await fixture(` + +
    light dom content
    +
    + `); + + expect(el).dom; // dom is
    light dom content
    + expect(el).lightDom; // dom is
    light dom content
    + expect(el).shadowDom; // dom is

    shadow content

    +}); +``` + +### Manual diffing + +You can use the chai plugin to manually diff chunks of dom. The dom is diffed semantically: whitespace, newlines, etc. are normalized. + +```javascript +class MyElement extends HTMLElement { + constructor() { + super(); + this.attachShadow({ mode: 'open' }); + } + + connectedCallback() { + this.shadowRoot.innerHTML = '

    shadow content

    '; + } +} + +customElements.define('my-element', MyElement); + +it('my test', async () => { + const el = await fixture(` + +
    light dom content
    +
    + `); + + expect(el).dom.to.equal('
    light dom content
    '); + expect(el).lightDom.to.equal('
    light dom content
    '); + expect(el).shadowDom.to.equal('

    shadow content

    '); +}); +``` + +### Snapshot testing + +The most powerful feature of `semantic-dom-diff` is the ability to test and manage snapshots of your web components. + +> If you are not using `@open-wc/testing-karma`, you need to manually install [karma-snapshot](https://www.npmjs.com/package/karma-snapshot) and [karma-mocha-snapshot](https://www.npmjs.com/package/karma-mocha-snapshot). + +#### Setting up a snapshot + +Snapshots are created by setting up your component in a specific state, and then calling `.to.equalSnapshot()`. You can use `.dom`, `.lightDom` or `.shadowDom` to set up the dom of your element: + +```js +import { fixture } from '@open-wc/testing'; + +describe('my-message', () => { + it('renders message foo correctly', async () => { + const element = await fixture(` + + `); + + expect(element).shadowDom.to.equalSnapshot(); + }); + + it('renders message bar correctly', async () => { + const element = await fixture(` + + `); + + expect(element).shadowDom.to.equalSnapshot(); + }); + + it('renders a capitalized message correctly', async () => { + const element = await fixture(` + + `); + + expect(element).shadowDom.to.equalSnapshot(); + }); + + it('allows rendering a message from a slot', async () => { + const element = await fixture(` + Bar + `); + + expect(element).lightDom.to.equalSnapshot(); + }); +}); +``` + +Snapshots are stored in the `__snapshots__` folder in your project, using the most top-level `describe` as the name for your snapshots file. + +#### Updating a snapshot + +> If you are not using the standard `@open-wc/testing-karma` configuration, see the documentation of `karma-snapshot` how to pass the update/prune flags. + +When your tests run for the first time the snapshot files are generated. On subsequent test runs your element is compared with the stored snapshots. If the element and the snapshots differ the test fails. + +If the difference was an intended change, you can update the snapshots by passing the `--update-snapshots` flag. + +#### Cleaning up unused snapshots + +After refactoring, there might be unused and leftover snapshot files. You can run karma with the `--prune-snapshots` flag to clean these up. + +**Ignoring tags and attributes** + +When working with libraries or custom elements there might be parts of the rendered dom which is random or otherwise outside of your control. In those cases, you might want to ignore certain attributes or tags entirely. This is possible by passing an options object. + +```javascript +it('renders correctly', async () => { + const el = await fixture(` +
    + Hey +
    + `); + + expect(el).dom.to.equal('
    Hey
    ', { + ignoreAttributes: ['my-random-attribute'], + }); + + expect(el).dom.to.equalSnapshot({ + ignoreAttributes: ['my-random-attribute'], + }); +}); +``` + +**Ignoring an attribute only for certain tags** + +Randomly generated ids are often used, throwing off your diffs. You can ignore attributes on specific tags: + +```javascript +it('renders correctly', async () => { + const el = await fixture(` + + `); + + // ignore id attributes on input elements + expect(el).dom.to.equal('
    Hey
    ', { + ignoreAttributes: [{ tags: ['input'], attributes: ['id'] }], + }); + + expect(el).dom.to.equalSnapshot({ + ignoreAttributes: [{ tags: ['input'], attributes: ['id'] }], + }); +}); +``` + +**Ignoring tags** + +You can tell the diff to ignore certain tags entirely: + +```javascript +it('renders correctly', async () => { + const el = await fixture(` +
    + + foo +
    + `); + + // ignore id attributes on input elements + expect(el).dom.to.equal('
    Hey
    ', { + ignoreTags: ['my-custom-element'], + }); + + expect(el).dom.to.equalSnapshot({ + ignoreTags: ['my-custom-element'], + }); +}); +``` + +**Ignoring children** + +When working with web components you may find that they sometimes render to their light dom, for example, to meet some accessibility requirements. We don't want to ignore the tag completely, as we would then not be able to test if we did render the tag. + +We can ignore just it's light dom: + +```javascript +it('renders correctly', async () => { + const el = await fixture(` +
    + + + Some text rendered in the light dom + + foo +
    + `); + + // ignore id attributes on input elements + expect(el).dom.to.equal( + ` +
    + + foo +
    + `, + { ignoreChildren: ['my-custom-input'] }, + ); + + expect(el).dom.to.equalSnapshot({ + ignoreChildren: ['my-custom-input'], + }); +}); +``` + +**[Scoped elements](https://open-wc.org/scoped-elements/)** + +You might want to ignore scoped elements when working with _Shadow DOM snapshots_, like so: + +```js +import { MyButton } from '@somewhere/my-button'; + +class MyElement extends ScopedElementsMixin(LitElement) { + static get scopedElements() { + return { + 'my-button': MyButton, + }; + } + render() { + return html` +

    Here's my button

    + Hey! + `; + } +} + +window.customElements.define('my-element', MyElement); + +it('renders correctly', async () => { + const el = await fixture(` + + + `); + + expect(el).shadowDom.to.equalSnapshot({ + ignoreTags: [el.constructor.getScopedTagName('my-button', el.constructor.scopedElements)], + }); +}); +``` + +This example will save the following snapshot: + +```html + +

    Here's my button

    +
    +``` + +However, what if you actually care about testing what goes into scoped elements? + +In that case, scoped elements should not be ignored, but diffed in snapshots correctly with their original tag name instead. Our differ will take that into account when making Shadow DOM snapshots, by default. Following the previous example: + +```js +it('renders correctly', async () => { + const el = await fixture(` + + + `); + + expect(el).shadowDom.to.equalSnapshot(); +}); +``` + +This example will save this snapshot: + +```html + +

    Here's my button

    + Hey! +
    +``` + +With the actual implementation of scoped elements, without ignoring its tags or if our differ wouldn't check them by default, the test snapshot would be produced with scoped element tags with different random numbers _every time_: + +```html + +

    Here's my button

    + Hey! +
    +``` diff --git a/docs/docs/testing/testing-package.md b/docs/docs/testing/testing-package.md new file mode 100644 index 00000000..4e615fd0 --- /dev/null +++ b/docs/docs/testing/testing-package.md @@ -0,0 +1,70 @@ +# Testing >> Testing Package ||10 + +`@open-wc/testing` is an opinionated package that combines and configures testing libraries to minimize the amount of ceremony required when writing tests. + +## Testing helpers + +Exposes all functions of [@open-wc/testing-helpers](./helpers.md), so that you have a single package to import from: + +```javascript +import { fixture, html } from '@open-wc/testing'; + +describe('my-test', () => { + it('works', async () => { + const el = await fixture(html` `); + }); +}); +``` + +## Chai + +Exposes chai as an es module with useful plugins pre-configured: + +[@open-wc/semantic-dom-diff](https://www.npmjs.com/package/@open-wc/semantic-dom-diff) for dom tree / snapshot testing: + +```javascript +import { expect, fixture, html } from '@open-wc/testing'; + +describe('Plugin - semantic-dom-diff', () => { + it('can semantically compare full dom trees', async () => { + const el = await fixture(`

    ${'Hey'}

    `); + expect(el).dom.to.equal('

    Hey

    '); + }); + + it('can semantically compare lightDom trees', async () => { + const el = await fixture(`

    ${'Hey'}

    `); + expect(el).lightDom.to.equal('

    Hey

    '); + }); + + it('can compare against a snapshot', async () => { + const el = await fixture(`

    ${'Hey'}

    `); + expect(el).dom.to.equalSnapshot(); + }); +}); +``` + +[@open-wc/chai-a11y-axe](https://www.npmjs.com/package/chai-a11y-axe) for a11y testing: + +```javascript +import { expect, fixture, html } from '@open-wc/testing'; + +describe('my-test', () => { + it('works', async () => { + const el = await fixture(html` `); + await expect(el).to.be.accessible(); + }); +}); +``` + +[chai-dom](https://www.npmjs.com/package/chai-dom) for dom testing: + +```js +import { fixture, expect } from '@open-wc/testing'; + +describe('Plugin - chai-dom', () => { + it('can check for an exiting css class', async () => { + const el = await fixture(`
    `); + expect(el).to.have.class('foo'); + }); +}); +``` diff --git a/docs/faq/README.md b/docs/faq/README.md deleted file mode 100644 index 9c8ea794..00000000 --- a/docs/faq/README.md +++ /dev/null @@ -1,270 +0,0 @@ ---- -permalink: 'faq/index.html' -title: FAQ -section: faq -tags: - - faq - - section ---- - -# FAQ - -In this section you can find answers to frequently asked questions regarding javascript and Web Components. - -**Menu:** - - - -**Deep dives:** - -- [Managing events in your custom elements](./events.html) -- [Rerender not triggered](./rerender.html) -- [Unit testing custom events](./unit-testing-custom-events.html) -- [Unit testing initialization error](./unit-testing-init-error.html) - -## Checkbox's 'checked' attribute does not match the property - -Many elements reflect their properties as attributes, and vice versa, like for example the `disabled` attribute on a button. - -```html - -``` - -```js -console.log(myButton.disabled); // true -console.log(myButton.hasAttribute('disabled')); // true -``` - -If we set the property to false, it'll _reflect_ it to an attribute. (In this case, because it's a boolean attribute, it'll be omitted) - -```js -myButton.disabled = false; -console.log(myButton.hasAttribute('disabled')); // false -``` - -This concept is called attribute reflection. - -However, this is not true for the `checked` attribute on an input element of type checkbox. The `checked` property on the input element does not reflect to an attribute, and should only be relied on to set an initial state. Consider the following example: - -```html - -``` - -It will only set the property the first time: - -```js -console.log(mycheck.checked); // true -``` - -Removing the `checked` attribute does not change the `checked` _property_. - -```js -mycheck.removeAttribute('checked'); -console.log(mycheck.checked); // true -``` - -And similarly, changing the `checked` property does not change the attribute: - -```js -mycheck.checked = false; -console.log(mycheck.hasAttribute('checked')); // true -console.log(mycheck.checked); // false -``` - -## Custom elements render life cycle - - - -## Debugging styles in adopted stylesheets with Chrome Dev Tools - -If your custom element leverages the performance benefits of [constructable stylesheets](https://developers.google.com/web/updates/2019/02/constructable-stylesheets), you will likely run into [this Chrome bug](https://bugs.chromium.org/p/chromium/issues/detail?id=946975) that makes it difficult to debug those styles in Dev Tools. In particular, the `LitElement` base class [leverages this API by default](https://github.com/Polymer/lit-element/blob/41e9fd3b8c18b3070f9df2a2f21915b796b2b298/src/lit-element.ts#L154), so when working with many of the Open Web Components recomendations you should be prepared for this eventuality. If you leverage `LitElement` or an other custom element base class that has the appropriate fallback support for browsers without this API, you can make those styles accessible in Dev Tools again by prepending the following snippet to the beginning of your development environment. This will remove the `adoptedStyleSheets` API from that page and cause those styles to be applied to the page via ` + + +These suggestions are not specifically useful for publishing to a CDN or any other context where broader application-specific optimisations may be appropriate. + + ### Do: 👍 -- ✅ [Do publish latest standard EcmaScript](#do-publish-latest-standard-ecmascript) -- ✅ [Do publish standard es modules](#do-publish-standard-es-modules) -- ✅ [Do include `"main": "index.js"` and `"module": "index.js"` in your `package.json`](#do-include-main-indexjs-and-module-indexjs-in-your-packagejson) -- ✅ [Do export element classes](#do-export-element-classes) -- ✅ [Do export side effects separately](#do-export-side-effects-separately) -- ✅ [Do import 3rd party node modules with "bare" import specifiers](#do-import-3rd-party-node-modules-with-bare-import-specifiers) -- ✅ [Do include file extensions in import specifiers](#do-include-file-extensions-in-import-specifiers) +- ✅  [Do publish latest standard EcmaScript](#do-publish-latest-standard-ecmascript) +- ✅  [Do publish standard es modules](#do-publish-standard-es-modules) +- ✅  [Do include `"main": "index.js"` and `"module": "index.js"` in your `package.json`](#do-include-main-indexjs-and-module-indexjs-in-your-packagejson) +- ✅  [Do export element classes](#do-export-element-classes) +- ✅  [Do export side effects separately](#do-export-side-effects-separately) +- ✅  [Do import 3rd party node modules with "bare" import specifiers](#do-import-3rd-party-node-modules-with-bare-import-specifiers) +- ✅  [Do include file extensions in import specifiers](#do-include-file-extensions-in-import-specifiers) - _Optional_: [use `type: "module"` when possible](#optional-use-type-module) - _Optional_: [include typings; e.g. `*.d.ts` files](#optional-include-typings) - _Optional_: [include source maps](#optional-include-source-maps) ### Don't: 👎 -- ❌ [Do not optimize](#do-not-optimize) -- ❌ [Do not bundle](#do-not-bundle) -- ❌ [Do not minify](#do-not-minify) -- ❌ [Do not use `.mjs` file extensions](#do-not-use-mjs-file-extensions) -- ❌ [Do not import polyfills](#do-not-import-polyfills) +- ❌  [Do not optimize](#do-not-optimize) +- ❌  [Do not bundle](#do-not-bundle) +- ❌  [Do not minify](#do-not-minify) +- ❌  [Do not use `.mjs` file extensions](#do-not-use-mjs-file-extensions) +- ❌  [Do not import polyfills](#do-not-import-polyfills) ### General concept: Building is an application-level concern Your users will always have the most intimate knowledge of how and where their code will be delivered to their users. Give them the greatest amount of flexibility in preparing their code for those conditions by publishing your package with the agreement that building is an application-level concern. Any decision that you can make in support of your users having an easier time when and if they decide to bundle is a good decision to make when preparing your package for publication. Every "do" and every "don't" that is included herein will help you in doing just that. -## Do publish latest standard EcmaScript +### Do publish latest standard EcmaScript Write standard EcmaScript from the start, and publishing standard EcmaScrip will come naturally. However, if you choose to write your component in TypeScript or with various emerging specifications or APIs, be sure to convert your code to standard EcmaScript before publication. If you use non-standard syntax; transpile that (and only that) down to a reasonably modern level (e.g. [TC39 Stage 4](https://github.com/tc39/proposals/blob/master/finished-proposals.md) and/or available cross-browser) to decrease the likelihood that verbose or duplicate code is included in any final production delivery of pages featuring your package. -## Do publish standard es modules +### Do publish standard es modules In agreement with the "do" above, es modules are both Stage 4, supported in all modern browsers and tool-chains, ensure your package is published as es modules. -## Do include `"main": "index.js"` and `"module": "index.js"` in your `package.json` +### Do include `"main": "index.js"` and `"module": "index.js"` in your `package.json` Your `package.json` should have both its `main` entry point and `module` entry point to the same es module file. The `module` entry point informs tooling (bundlers, CDNs, etc.) which file to load by default in a module environment and, because es modules are standard EcmaScript, your `main` entry point should point to the same file. You will find this already configured for you if you've started your project with `npm init @open-wc`, but ensure your `package.json` file includes something similar to the following: @@ -60,21 +57,21 @@ Your `package.json` should have both its `main` entry point and `module` entry p } ``` -## Do export element classes +### Do export element classes Every custom element is a class extension of `HTMLElement`; e.g. `class MyElement extends HTMLElement {}`. Be sure that you export this class from your package. When starting from `npm init @open-wc` you will see this export in `src/MyElement.js` and referenced by the `index.js` entry point. This will make it possible for both customization of your element via extension (e.g. `class NewElement extends MyElement {}`) as well as for advanced usage of the custom element in Scoped Registries, both [native](https://github.com/w3c/webcomponents/issues/716) (when available) or [synthetic](/scoped-elements/). -## Do export side effects separately +### Do export side effects separately A [side effect]() in javascript is created when the script changes state outside of the scope in which it is run. This includes when code in an es module alters values available on the `window` or `document`. A side effect occurs when registering Custom Elements via `customElements.define()`. JS files with side effects should exist separately from your packages entry point. `npm init @open-wc` takes care of this for you by creating a separate `my-element.js` that manages the registration of your custom element. If you do choose to publish code with side effects as part of your entry point, it should be placed in a separate function that has to explicitly be called by the consumer (e.g. `run()`, `init()`, etc.). This allows your users to determine when these effects are triggered. -## Do import 3rd party node modules with "bare" import specifiers +### Do import 3rd party node modules with "bare" import specifiers When referring to 3rd party dependencies in your code, you cannot guarantee that implementing projects rely on the same file structure as you do. To prevent dependency specifiers from causing issues across different environments, be sure to import these dependencies into your project with "bare" import specifiers so that tooling in your users' environment can manage resolving the location of those dependencies; e.g. `import { LitElement } from 'lit-element';` -## Do include file extensions in import specifiers +### Do include file extensions in import specifiers When importing something that doesn't point directly to the entry point of a module, e.g.: `import {LitElement} from 'lit-element';`, always make sure to include a file extension: `import { ifDefined } from 'lit-html/directives/if-defined.js';` @@ -92,39 +89,39 @@ import { html } from 'lit-html.js'; import { ifDefined } from 'lit-html/directives/if-defined'; ``` -## Optional: use `type: "module"` +### Optional: use `type: "module"` Using `type: "module"` in your `package.json` will help CDNs and bundlers choose whether to parse your package with a module parse goal. However, it will also enforce that all the code you execute needs to be es modules. This includes all the dev tools (like bundlers, linters, ...) you use as well. CommonJs may still be used but requires a special way of importing. Therefore if all of the JS in your package is es modules, and using this entry in your `package.json` does not cause issues with your tools or scripts, then using `type: "module"` will allow those CDNs or bundlers to better leverage your package. If tools or script in your package have issues running in Node@12+ due to this inclusion, excluding it will ease the local requirements on import statements in your code. -## Optional: include typings +### Optional: include typings `*.d.ts` files are an important bridge between your code and users that choose to develop in TypeScript. If you are already developing in TypeScript, then generating these is as simple as adding the appropriate property to your `tsconfig.json`. If you are developing in JS, it can still be useful to include typings; learn more about [generating type definitions from javascript](https://dev.to/open-wc/generating-typescript-definition-files-from-javascript-5bp2). -## Optional: include source maps +### Optional: include source maps If you choose work in TypeScript, or to use syntax that is newer than the standards discussed above, it can be important to include source maps and the source files (TypeScript or otherwise) that your published code originates from to make understanding that code, as well as possibly reporting/fixing issues in that code, easier for your users. -## Do not optimize +### Do not optimize Optimization is an application-level concern. It's not repeating yourself if it is a really important point, it's merely ensuring that it sinks in. Your package will be leveraged by a developer that will know more about their specific delivery targets than you will and you must not attempt to optimize your code beyond delivering the best possible standard EcmaScript that you can. -## Do not bundle +### Do not bundle Bundling is an application-level concern. If you bundle, and then another dependency bundles and both dependencies bundle the same transitive dependencies it will become next to impossible for later tooling to deduplicate that code. Be sure NOT to bundle code in your published packages so that your users will have the easiest time possible optimizing their application for the specific use cases they target. -## Do not minify +### Do not minify Minification is an application-level concern. What's more, minifiers get better all the time, and you can ensure that your users can leverage the best in class approach to this space available by skipping the minifier when publishing your package. -## Do not use `.mjs` file-extensions +### Do not use `.mjs` file-extensions It is still all too common that a `.mjs` file gets served to a browser with an incorrect mime type and causes an application to fail unrecoverably. This happens when the used server does not have `.mjs` configured which could either be because it never became a default in the server software or an older stable version is used. Prevent this issue from ever arising by only publishing `.js` files. In cases where you are working with Node scripting in your package and you find issue with this recommendation, please see [Optional: use `type: "module"`](#optional-use-type-module) above as a possible alternative. -## Do not import polyfills +### Do not import polyfills If you feel you need polyfills, for package demos or the like, feel free to add them as `devDependencies`, but NEVER import them into modules. As has been repeated many times above, only your users will fully understand the use cases they target in such a way to determine whether polyfills should be included in an application, don't force a decision in this area onto them. -### Additional Reading +#### Additional Reading - [How to Public Web Component to npm by Justing Fagnani](https://justinfagnani.com/2019/11/01/how-to-publish-web-components-to-npm/) - [npm-publish](https://docs.npmjs.com/cli/publish) diff --git a/docs/guides/developing-components/testing.md b/docs/guides/developing-components/testing.md new file mode 100644 index 00000000..31e3772b --- /dev/null +++ b/docs/guides/developing-components/testing.md @@ -0,0 +1,29 @@ +# Developing Components >> Testing ||30 + +If you choose the testing option in the project generator it will scaffold some example tests for your component. + +## Web Test Runner + +We recommend [@web/test-runner](https://modern-web.dev/docs/test-runner/overview/) for testing web components. It's based on `@web/dev-server`, following the same approach using native es modules, and runs tests in a real browser. + +## Running the tests + +To run the tests, execute this command: + +``` +npm run test +``` + +This will run the tests in a locally installed Chrome browser. There are many other browser options in Web Test Runner as well. + +To run the tests in watch mode, execute this command: + +``` +npm run test:watch +``` + +This will keep the test runner open. Editing files will re-run the associated tests. + +## Step by step guide + +[Follow this guide](https://modern-web.dev/guides/test-runner/getting-started/) for a full step by step guide on using Web Test Runner diff --git a/docs/guides/developing-components/types.md b/docs/guides/developing-components/types.md new file mode 100644 index 00000000..5a0dcaf6 --- /dev/null +++ b/docs/guides/developing-components/types.md @@ -0,0 +1,26 @@ +## Developing Components >> Types ||50 -> Hide for now + +> This text is not yet written or polished - care to help? + +## Types are good + +> The following information is a quote from [Type Safe JavaScript with JSDoc](https://medium.com/@trukrs/type-safe-javascript-with-jsdoc-7a2a63209b76) + +Types provide valuable information about the nature of code, and help identify typos, enable refactoring, etc. Most editors these days provide some kind of IntelliSense based on type information gleaned from the code. My favorite is Visual Studio Code. With proper type information it can give you symbol defintions on hover, code completion, symbol renaming across files, etc. + +### Benefits of Types + +1. Early detection of type errors +2. Better code analysis +3. Improved IDE support +4. Promotes dependable refactoring +5. Improves code readability +6. Provides useful IntelliSense while coding +7. These benefits are provided by using TypeScript, Flow and even JSDoc comments. + +### Why types? + +Types can help improve your developer experience by giving you: + +- Awesome intellisense for @open-wc tools/helpers +- Ability to jump directly to the source of @open-wc code via F12 (in vs code) diff --git a/docs/guides/index.md b/docs/guides/index.md new file mode 100644 index 00000000..702d720a --- /dev/null +++ b/docs/guides/index.md @@ -0,0 +1,32 @@ +# Guides ||10 + +The goal of Open Web Components is to empower everyone with a powerful and battle-tested setup for sharing open-source web components. We try to achieve this by giving a set of recommendations and defaults on how to facilitate your web component project. Our recommendations covers things such as development, linting, testing and building for production. + +## Quickstart + +This will kickstart a menu guiding you through all available Open Web Components actions. + +```bash +# in a new or existing folder: +npm init @open-wc +``` + +```js script +import '@d4kmor/launch/inline-notification/inline-notification.js'; +``` + +## Our Guides / Tools + +Our Guides / Tools must fulfill certain criteria before we publish them. + +1. Language or platform features/APIs must be released without a flag in the stable version of at least one browser +1. Libraries must offer an ES module version + +**Note**: We currently have ONE exception to this rule and that is 'bare modules'. +This is such a powerful and widely-used pattern in the current JavaScript ecosystem, that if you don't use it you need to implement everything yourself. +We want to help you build your apps as easily and efficiently as possible, so for now we've adopted this practice as our only exception to the above rules. +The [import maps](https://github.com/WICG/import-maps) proposal aims to bring bare modules to the web browser. You can follow that repository to stay up to date. + +## Modern Web + +We follow many of the development practices defined by [Modern Web](http://modern-web.dev/), our sister project. We recommend taking a look at their guides and documentation as well. diff --git a/docs/guides/knowledge/attributes-and-properties.md b/docs/guides/knowledge/attributes-and-properties.md new file mode 100644 index 00000000..ff6026a5 --- /dev/null +++ b/docs/guides/knowledge/attributes-and-properties.md @@ -0,0 +1,165 @@ +# Knowledge >> Attributes and properties ||30 + +The difference between attributes and properties is a common source of confusion for developers. + +## Attributes + +Attributes are key value pairs defined in HTML on an element: + +```html +
    +``` + +This attribute is available in javascript using dedicated APIs: + +```js +const myDiv = document.getElementById('myDiv'); + +console.log(myDiv.attributes); +console.log(myDiv.getAttribute('foo')); +console.log(myDiv.hasAttribute('foo')); +``` + +Attributes can also be set from javascript, and will update the attribute in the DOM: + +```js +myDiv.getAttribute('foo', 'not-bar'); +``` + +```html +
    +``` + +Because HTML is string-based, attributes can only be strings. + +## Properties + +Properties are key-value pairs defined on a javascript object. + +```js +const myObject = {}; +// a property is set +myObject.foo = 'bar'; +``` + +Because DOM elements are also exposed in javascript as objects, it's possible to set properties on DOM elements as well: + +```js +const myDiv = document.getElementById('myDiv'); + +myDiv.foo = 'bar'; +``` + +A great benefit of properties is that they can accept any javascript value, including complex objects and arrays. + +## Templating + +Most templating systems allow setting properties. For example in `lit-html` there is different syntax for setting an attribute or a property: + +```js +// set an attribute +const foo = 'bar'; +html``; +// set a property +html``; +``` + +`preact` does some detection to see if a property exists on the element, and will set the property instead of the attribute. + +## When to use what + +Attributes have the benefit of being able to be set declaratively via plain HTML. It's a good practice to support this in your web components as well. + +Properties are easier to access from javascript and are generally faster to update since they don't trigger a change to the DOM. It also supports setting complex objects. + +As a general rule of thumb we recommend the following: + +- Set properties when working with JS +- Set attributes when working with just HTML +- Sync attribute changes to the corresponding JS property +- Don't sync property changes to the corresponding HTML attribute + +Many web component libraries allow you to configure this syncing behavior and set you up with a good default. + +## Boolean attributes + +HTML attributes are always strings. Boolean attributes are a convention where they are considered to be true when the attribute is present on an element, no matter the actual value. + +```html + + + +``` + +Interestingly, it's not possible to set a boolean attribute to false: + +```html + + +``` + +## Attribute and property reflection + +Many native elements reflect their properties as attributes, and vice versa, like for example the `type` attribute on an input. + +```html + +``` + +```js +console.log(myInput.type); // text +console.log(myInput.getAttribute('type')); // text +``` + +If we change the type attribute to `number`, it will be synced with the property: + +```js +myButton.setAttribute('type', 'number'); +console.log(myInput.type); // number +``` + +If we set the property to `date`, it will be synced with the attribute: + +```js +myButton.type = 'date'; +console.log(myButton.getAttribute('type')); // date +``` + +This concept is called attribute reflection. Most native attributes are synced to the javascript object, but not all native properties are reflected up to attributes. + +We recommend reflecting from an attribute to a property, but to avoid reflecting from properties to attributes. This is because with custom elements properties can update often and triggering a DOM change for each update can impact performance. + +### Special cases + +The `checked` attribute on an input element of type checkbox is a special case. The `checked` property on the input element does not reflect to an attribute, and should only be relied on to set an initial state. Consider the following example: + +```html + +``` + +It will only set the property the first time: + +```js +console.log(mycheck.checked); // true +``` + +Removing the `checked` attribute does not change the `checked` _property_. + +```js +mycheck.removeAttribute('checked'); +console.log(mycheck.checked); // true +``` + +And similarly, changing the `checked` property does not change the attribute: + +```js +mycheck.checked = false; +console.log(mycheck.hasAttribute('checked')); // true +console.log(mycheck.checked); // false +``` + +When using lit-html, we can get around this by always setting the property instead of the attribute: + +```js +html``; +``` diff --git a/docs/faq/events.md b/docs/guides/knowledge/events.md similarity index 98% rename from docs/faq/events.md rename to docs/guides/knowledge/events.md index 5657e09c..29931fba 100644 --- a/docs/faq/events.md +++ b/docs/guides/knowledge/events.md @@ -1,12 +1,4 @@ ---- -permalink: 'faq/events.html' -title: Managing events in your custom elements -section: faq -tags: - - faq ---- - -# Managing events in your custom elements +# Knowledge >> Events ||40 Events in the DOM can span in complexity from responding to a `click` on a ` `; + } +} +``` + +You may be surprised to find that the following test will fail, `my-component.test.js`: + +```js +import { stub } from 'sinon'; +import { expect, fixture, html } from '@open-wc/testing'; + +describe('my component', () => { + it('calls myFunction when a button is clicked', () => { + const el = fixture(html` `); + const myFunctionStub = stub(el, 'myFunction'); + el.shadowRoot.querySelector('button').click(); + expect(myFunctionStub).to.have.callCount(1); + }); +}); +``` + +The following, however, will pass: + +```js +// example #2 +render() { + return html``; +} +``` + +The reason is that with `example #1` the stubbing(/wrapping) of `myFunction` happens AFTER you pass the function to lit-html, whereas with `example #2` you make fixture, stub `myFunction`, and _then_ when you click it, it will already be stubbed. + +How can we solve this? There are a few ways to go about this: + +- You can go with `@click=${this.myFunction}`, and then rerender the component in your test to make sure the function is correctly stubbed: + +```js +it('does the thing', async () => { + const el = await fixture(html` `); + const myFunctionStub = sinon.stub(el, 'myFunction'); + el.requestUpdate(); + await el.updateComplete; + el.shadowRoot.querySelector('button').click(); + expect(myFunctionStub).to.have.callCount(1); +}); +``` + +- Or you can choose to instead of testing the function has been called, test the side-effects of that function. (e.g.: it fires an event, a property has now been set, etc.) + +- As a last resort, you could pass an anonymous function that calls `this.myFunction()`, like so: `@click=${() => this.myFunction()}`. Note that this is not recommended unless its a 100% needed. Some valid usecases for this may be if you need to pass some arguments to the function, e.g.: `@click=${(e) => this.myFunction(e)}`, or `@click=${() => this.myFunction(someOtherData)}` diff --git a/docs/intellij-syntax-highlighting.png b/docs/guides/tools/assets/intellij-syntax-highlighting.png similarity index 100% rename from docs/intellij-syntax-highlighting.png rename to docs/guides/tools/assets/intellij-syntax-highlighting.png diff --git a/docs/guides/tools/ide.md b/docs/guides/tools/ide.md new file mode 100644 index 00000000..97d607a0 --- /dev/null +++ b/docs/guides/tools/ide.md @@ -0,0 +1,58 @@ +# Tools >> IDE ||10 + +Your integrated development environment (IDE) is your primary tool while working with code, we recommend the following tools and plugins to make developing web components easier. + +## Visual Studio Code + +We recommend [VSCode](https://code.visualstudio.com/). For setup please visit the instructions on the Visual Studio Code [homepage](https://code.visualstudio.com/). + +### Configuration + +We recommend the following user settings: + +```json +{ + "files.autoSave": "onWindowChange", + "editor.tabSize": 2, + "files.trimTrailingWhitespace": true, + "[markdown]": { + "files.trimTrailingWhitespace": false + } +} +``` + +### Plugins + +We recommend the following plugins: + +- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) + Get ESLint feedback directly in your IDE => more details under [Linting](/linting/) +- [lit-plugin](https://marketplace.visualstudio.com/items?itemName=runem.lit-plugin) + Syntax highlighting, type checking and code completion for lit-html +- [prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) Code formatter. + +## Atom + +[Atom](https://atom.io/) is an IDE created by Github. It provides near-native support for working with web components and has great support for template literals. + +### Plugins + +- [prettier-atom](https://atom.io/packages/prettier-atom) - Template literal highlighting and formatting + +## Intellij IDEA and other Jetbrains variants + +[Intellij IDEA](https://www.jetbrains.com/idea/) is a Java IDE for developing computer software. It is developed by JetBrains (formerly known as IntelliJ) and is available as an Apache 2 Licensed community edition and in a proprietary commercial edition. + +Syntax highlighting from HTML and CSS in template literals should be supported out of the box. Generic web component related functionalities such as Custom Elements support and completion is also available. You can read more about it [here](https://blog.jetbrains.com/phpstorm/2013/10/phpstorm-7-web-toolkit-javascript-templates-web-components-support/). + +![intellij-syntax0-highlighting](../assets/intellij-syntax-highlighting.png) + +Due to the support available directly in the IDE, the ecosystem for plugins is very limited and we do not recommend any. + +## Sublime Text 3 + +[Sublime Text 3](https://www.sublimetext.com/3) is officially called a text editor however Sublime Text features plugins which give it a lot of the possibilities like an IDE. It is available for Windows, Linux, and OSX and can be evaluated for free. + +### Plugins + +- [Lit Element Syntax Highlighting](https://packagecontrol.io/packages/LitElement%20Syntax%20Highlighting) - Syntax highlighting diff --git a/docs/guides/tools/index.md b/docs/guides/tools/index.md new file mode 100644 index 00000000..1fc5d6e8 --- /dev/null +++ b/docs/guides/tools/index.md @@ -0,0 +1,3 @@ +# Tools ||30 + +Please see a sub page diff --git a/docs/guides/tools/linting-and-formatting.md b/docs/guides/tools/linting-and-formatting.md new file mode 100644 index 00000000..e3be0328 --- /dev/null +++ b/docs/guides/tools/linting-and-formatting.md @@ -0,0 +1,86 @@ +# Tools >> Linting and Formatting ||40 + +We recommend using [ESLint](https://eslint.org/) to lint your code and [prettier](https://prettier.io/) to format your code. + +This helps catch errors during development, keep a consistent code style, and avoid formatting creating large diffs in pull requests. + +## Linting config + +We recommend `@open-wc/eslint-config` for a good default configuration for web component projects. + +The config includes smart defaults, and installs the following configs and plugins: + +- [eslint-config-airbnb-base](https://www.npmjs.com/package/eslint-config-airbnb-base) (with some modifications) +- [eslint-plugin-wc](https://www.npmjs.com/package/eslint-plugin-wc) +- [eslint-plugin-lit](https://www.npmjs.com/package/eslint-plugin-lit) +- [eslint-plugin-html](https://www.npmjs.com/package/eslint-plugin-html) +- [eslint-plugin-mocha-no-only](https://www.npmjs.com/package/eslint-plugin-mocha-no-only) + +## Setup + +### Automated + +For an automated setup, use our [project generator](../developing-components/getting-started.md) and choose the linting option. + +### Manual + +To set up our config manually, install the necessary packages: + +```bash +npm install --save-dev eslint @open-wc/eslint-config prettier eslint-config-prettier +``` + +And update your package.json with the commands and config: + +```json +{ + "scripts": { + "lint": "npm run lint:eslint && npm run lint:prettier", + "format": "npm run format:eslint && npm run format:prettier", + "lint:eslint": "eslint --ext .js,.html . --ignore-path .gitignore", + "format:eslint": "eslint --ext .js,.html . --fix --ignore-path .gitignore", + "lint:prettier": "prettier \"**/*.js\" --check --ignore-path .gitignore", + "format:prettier": "prettier \"**/*.js\" --write --ignore-path .gitignore" + }, + "eslintConfig": { + "extends": ["@open-wc/eslint-config"] + }, + "prettier": { + "singleQuote": true, + "arrowParens": "avoid" + } +} +``` + +## IDE Support + +Most IDEs have plugins or configuration options available to help with code linting and formatting. + +For VSCode we recommend the [eslint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) plugin for highlighting linting errors, and the [prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) for formatting on save. + +https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint + +## Lint on commit + +To lint changed files on commit, we recommend [husky](https://www.npmjs.com/package/husky) with [lint-staged](https://www.npmjs.com/package/lint-staged). + +Install the necessary packages: + +``` +npm install --save-dev husky lint-staged +``` + +And update your package.json: + +```json +{ + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.js": ["eslint --fix", "prettier --write", "git add"] + } +} +``` diff --git a/docs/hero.png b/docs/hero.png deleted file mode 100644 index f6cb10a00ea74d06716b8ab3566bc8c634dc9dbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22190 zcmXsV2RM}fpA=cAD>JJOA!KHcvS-Rn_9pAjnc0c6g{-XX?0wE&AzQNdS!d6j&Hwd# zp1l7 zIa{afia*A|d4i)P`&!E*b$ia!TWfWy>tMm>8KJ4}E4c@9uYNv3?IT?axLosH6HN@m zwJS;*N?aY(=G;rhKfvsY=46Xp3*-uNwGF}{D6Or}VQjt4!4_+?dyGmvukQC)Sf%Tg z?qT?qpYdZ1Onc%nsTgqrSy@@;Elw94@Km|}{tNt73KOvX=&3hJ_{TO{sW+{Kape@I z8exhmS}2H~vyhP$?*4pI(Z8`f$}PksTZzu=`5n_~sccaSh%u`@mco&PRVa z&`W%d0J&B^#98a-`;@}{?nxQ`_weCci_3B4ojVu3aycT;4Ppf5B2S`Bx2Vr)|D6OQ zUi%3aMX z?&#yioBq9bOt|0N(Ex6w>F|5B-=(nc_%eZn{tYu@0aVUk?4XpLnxPG9a+jxl%WqBs zS}m=)wg2X>lV~G;qZ!ZD-R;2PHd$#+v~o|~qrJG#hLFk3Of7__l-XDdVp~s9=1jD4 zX@ALMduKRP)>&!6Bxijth)l6*nzU zss4$uVP}4B(Bmb9rhjhg9(YA3PfJ3YrgYdYzNm!gj@_?iG$WQFcxW3+q0SE|c z&ttn}*i`ma5J$jVuzU34lOJK{M->zSOiD2@j}DWpwkB4Sy)T1Ixhg>%A`|6>e*?e~ zu9J!9a_4fD0|A%-DHgQ4RI4O0y`pkBk*;&r#j2>ovJzcRqWAMNpOu-V<>j8m5n z9e01Sxjc&@@fu%DAXgP9EFz|tCrTvJ9dQO&Lfwp)N@`Cf8m$QOCYsg374oA>VHAxZ zXP_vp?rHLMJu;5L{|vK;tlOXFRk?EMj)_G!$wNRD8GY4q_#6MdmibHZRYKy(Q`xh1Op99;HJvYEzbo0Io zeR?beeh|~|F}H~6?zj>i<$ON-(4DopsiPA_@S}wcGIdzlA-7ziAVUxX{YQ$For`kX zf~L2}~!nbkxmB+VRf(Y?_96L$C5U3EjmTvEh!xt^PO&Rj3D$hzm0~~ zj9=P1re6b18PjmkOP;y`We`>8(D)sTU#rzV6xEgR1;msLtbJI!?1fW{8z^lJj)^#% zTQ%Y$C@Rj9%FW_bysTCQZ`6!;Ro^L&MEbx)erY|PDrdP zM}UesYK^%V;F7Hvg(Ge~>4G?}kQg1MXn4rVtSVx;+ngH!)FHc_>q*oMJ(L8BH_YV1 z049893pKn`7~Sy^kjwFRXv&b8{Q$5k4)%VUoa|wj7>G5Z`x>B}eG-w-(92?S*St2% zSC;GIkXUyOkkDvr(1(KOEd|gc02r%Q!`9kc3>r`B+jv<`%D#Xg1Dfcy0>aa$qm0tK z6aXmX5u%7bpd3KN#IE7wRnOzf&FMxX^Pj_H#Qgu7HJ`f&Z-kraFF#K9Mo=6C% zdj}cv*WWIna@bQg$3htD8l6Ne5H50}g%WXNov(S(X4sl^yG}sll0zBxOKFldv+CPJ z3P+GyD?xs*#{+8{fFBx%lJMo9jL#gL*PrAD=A{cD+)xS7apJ0 zMcM7gn5luz z+ejc<5DaDwXwIw(30e95`S;Y`il`U6%U9`~cC`+*)n+De+_0q-MB`IJ18jKXB{q8a zHBqG1U*w;G)oVX$^(=s}BcoHP-M;V81VJDT8!eOr)I8U3jw!u;odyss#aHzGsJ%R* z2?zO^SBP)=8*3m*(O`n%&y)~Iq=r?5R7uw^5q-{spHO{t9>~|9_E7-nKUiplmW%)D zOh;x0u82|W;$LQEGj0qz0rH_ID|;CK`WS%aXjtShnW*+&%g=uYpxP|>90XDV8>4yY z=D7agOgX55LCEbe4(ce^q5$v#HbBF%!?^ygVd+wC$@l;qyb+U+*M0VE; z(ln-ppU??s8CEH3Ylx^d2P9Sy!I)7qQc9f0l<^aqf#%Y&v}|LW33AE`m;``vkQzS0W>+j<%0p2_MHWNUgzItJuS?oV&i@8$f2B3~ zHfFgv?dVnpc^N9~VZcL~7XSh)z1~9dX-)k`#PrNxVjBnlFV2RlLt4)ZRqOZ9E>NK#wK7g+=zN_C;GMh6@=4K&sJ0vHQ~SQn!^%8uI|m4!il# z9N|+~F+Kd+IX4HyZagzKq+rR>`IJJ`Us22_8&2g&L=Q<+w)*1bDkOCWbMkF?g45GB zzJmat(cIgLM=JPid>@)b)pjXrF8NAJLCs)L*`Fa?&+Vbk#H{>Y$D=*Be0?ny3@WwP zIa`cfwBgUAb+AnIeL>hHNjBLV#!U>5%g~hWixIlz;tb9TTIufJL9uKZMGfb>t#LLz z@;#Aftt5*+a4YbEZ*Q`8%*qwNE?+kf8GZR5?WRV%>e!Od$;ak)X858cPnT4LucR?? zv0wRwSGIGpitA6Nbp8c-Y3nkY?Q?#Zl;$g=TqaGOptC~pcEt9JTL%pg(sMp?+(gfP zj3a?r-yH-wZr_i_DiuXG+`Xxqi9L%zIgn*bkjQ7y^(0))GMjDhW1I2~qdJF+oD6fdZ>`pC|@?@C|r0FJ=flWO5t zuW;+)+f*O_!{KD+vSL2rv(!#EYk>4`wSx5LIvQLR4 z7y`B$JfpR{GVvE+)Isvixx41>AThttCP09ZCLWUFDo9uqEY z+%GNC`^D7hK@%|A;LUV{55{(A!7|Dm-n^#T_3>Epqdg+u2OKAJzD6q^ z18gqnXr~hh@7zn*ck!0)=A*sI3`5`k%u7h*U1QClIyswOBX>a?AuEh=3?7RjR{HrC z$r2Xpk1)0mwb+Yx(R01#QSfDhz7@ zg+A`AsilE$n>FAQse6paJmfsdxQHbmRi_YRm!kPL$jerJZ)>pV)eu0$ zs{S+U?bNd>xlSLvk3A)ukv@HQ4Z>go_pn!`CNxFRH&+{X8YEo4d290c;T9dR{fSd* zHOj0~l=oSIqKDRI_JDY2$<>zoM#|k6cl)uZN=(Y~U{VHGIR;Q$g?pN)#D9m3b#RAu zx>#P7fIgw=B-%G#-8w-arp_T)1B$i#u|enymR@0mbzcOpsBweuy?3`up6;qDV9de- zVa9g`how{rGe0pcuqi`n_I;{9YRjYGDO=t<_^Uo>o#mKgGoo^@b4OtU`S}|cYY7p;c!x~*B14&_SbWJ!_@*bea>!ga zg8ygBn*Ov^RHwJ5<;*8fiT0-AM5pvGLjI9Jgk0UUHF&ythSges0@;H1iw=HeYZc0uQlRTV#Tp^hOf=wkW=!|$@RY5sjq^XQaQ zYC@*jf`6eNE|QV{az-b3a3r;nYc|7aNgH$$H2Bo^Y;@6!%EvJp0fLO^j7fO25$@u; z5v8$|QP=!R{U9;)>`PQ7GMF*pO)Cn7syK&V*siM%^z^k$)HXQHW_}hL9=(!wX(?IC z*wo>dSn##ns97c3g0=%sC5<2_h6mU8w;*bfRg+Pt^@N%Eg%iZGLi z%qjuxxdjfrwmJ~TR7*f|Z@4YO_|C=Mh>7AxTC|SSn%AN#R=oe&0KfT%5s}N0As~9z zljYm_EID5$-jhM^MwrGjLE@OP5UJ@jSk-A;D0EQP02AZ!@G0ZXFFc1gNFgc&*~*kl z>RWWXIFblSh|=UfbVoE4GqKv4eIu_r@bKJIt0NK)6u)RrW~phlrSh|?4FZjfiqLwU zfL0CeMOb(EfvT9SXEui%^gvlP%0_7^A-ac5TF4+XiY^+d47=_k``k&j*3B2!{exi< zfxMK#gK?G_3gC-1{V4!}3wJj2XV8Zw7n#=Klc#zK<~2(5mpN{}+za9{iw-|j);TM2 z2kj$x6Z>nZq!qwDHN-;40hGL8>+WGazJbLvwocQrBl|b&oRI)-^X$u35xlmIO(64b z70H?jeg;lbPyTkbZ!nhUGmX}REsq8hwUHWyFRuFM)wC*$Iv8cFdzgiG^*#(ToM|DY zwsy1&LMBEy_5GdA9PbTSFFAbn( z(W%3F(*=~6e=3qy#t6{J&rgpSzlEVlCz&42@MG4)rK%RJ&GdJA!J;@Q!^spsJY(WC z+3~)BaPF(oLKy;Zj}R3WyZp0-P`WeNCcrS7rgV7U z^D~WOPW^9f4oJOy@T$7d@_jAjnLW$#&6A?rT@(_1Ke{WFGrqM6ZxT07ut0dT&tzZ^ z=;N9^ahK)!{64{|v`E`@Gl)dnCE&z+lk7bytvXNPzdsE`N6M6*{z?bY%Q7#dHH4BW zGkcIzKNMBrn61i+h;#fM_!3cc;bmEwXNnuX&A{?gO=QMMWMaN=N%8}^OK!m+F9ua$ ze>AF}ur#A#vB1Rl(QAx84z_`cAQ)!J4s`^Vb9QkDr-{)X`N# zzz6&$1|aNMu?f@cW^=QgVZUF%U?$)1PfZWSE{qNed>8=j$UHl+ny-`j71%lt=+!Fx z=u+6&Yp`p+sW>(~K=b!b!GLhs$$e9X!J?W+UGLJM z($aFR{^rOYB@_{ zYpj{V>*&1`CL;K9;(`qz+KxGsHaU;<~j(JRZ`drRxg-!hKuDl0*QPu^Y zmJ^{zr#I9^GcV;D?CFkoc$j&z5ERCPdIX;*(i+3=BdX#E%U1+|ah%r7tVL+i z=~Y2e_q_RaFXE0r)lgzlrbvqE`Z9=I_NOG>VuSvU;lbA-2hMywnG-%{j26%IW>Wtw z2o)+i$G3%&4;M%WlKJ;>Si^N+?D;0dE&Ry%ckJ~2K3+R(6E`7_qJX-Pw0VZy~h0HDJ%M1R%7E?qH>! zwbKS-=@M^!xLw6Ks!#Y|{R!N!8N2N(`M~ z>h+{mw17*EWL1@&{VpY?mzMqD<|ZXYcgi&2V=TC<)>YTijC{c2X!u|7Gb z*O8q?5B@gTYZy3mk!?U0M?!~Y+r5|}lCmcar0wVoLn(`l2mA-J%!ZCqyWLIH3U`ip zKrL9jz6}ZnYezKwBQO=N)Uz7`RYu|2w<-Bd(>0b3Us8B{{d)z!P3a7}YXQf1iLd%f zCs*`q7&sqy3yLLrNi}5bEq9d#l)&p21RA4ZQ?W*uFII||k-fe5PexzQXJ#enz1p+4 zH~yeS)h1MS#&dG=i9Dv=Mc!|L4GgC^Yw_x{xk09@Nr;{Z%YK3F?! zXs=yX#wW7eL+@vbOi+CUXey1a$F;WdZ5SasF}TPCGXF0?S%@EbIKYJJyiG{P^DAt& zh#GBZEgPXj(_w!=GW<=3Q$KE8s*2~aDzag(UNUe^g)!pj;us$NtDn{rPUN2XvOqo} zGELg!fv$%sOJ?A(X{bD6Z`Qnu83Sr~kh3iX{qtcK!e@)yl%jo~`rA?7deOmIS3EAM z{k=9q=`V*bJi|_UZVFc9Iu}t})>BSE>K=0`;G2`^o;;)nlFDBlE0#WcfRfbHp+iJX zuvRh6GP9aJpP{=5@70kV#}t=%D`X6%fy97tErJY4y*eDms={vW8+H-Z5~+Lqa_6s+ zu)VjuJgqJ2!~xlQywEM?TDoGr>sjaDiSXDUcgT*QaLmAsaI@}Hbx;>%>k`H$L_7Eb z!DOuQ;P&1{-GQAuk|@oRi}3>??o}2Xy>t@A@2=b8Sd-cDB{rsA!klAa7OkH=nNZ!UA8!7F2oU1K?hSn}?aC;9e>G`q z+a)IVQvEx%S9y08s_ps|(Vu9#mqk#ur8vJ@30pjk{XFIFzS+R|JY1cMDhKYM>X_G{-OcC3t?J*8v>;JZ~eDn zuJ^i!&$JG{KMT|;{j#&X43kP>j#zKDdWFAN0={ zCx6wW7RW{BDj|>mq>D^mJd2}?go&4{@pB)@hT#eU)?;Hg+fa&vhHmBgjKTYdo%MKe zA;os_M^zwsigHho+X;A(LU#7J&z;zhu#3NTKdOfa)JdJFT0tN`+TO>NY{Ch3t-r9- zMc2boAXbb&Y=e8grY_SwMDaR#Kb=d`^=k&{Y)a>x_ez&*-)5M(tk?7_#to?bh%nLm z)bt6BH^PnFaoW}MR`>L}41Pf792AQht$C`GsQyvLV8txI-r!9#b);N{K-i}>gFP6{ z3V*f~T6xsZghpnzoM$v84|@G&KtJmfxvM*6m3EY!623Sb8Df#xRsi}Na7beBC&gSOnH)&;q%x~-VFcg2`-+Z=p_70C|1-`uMowX&ru6+`4-7}?h3J9$BwL<5)DxR%yd#Y=A zOI!KI#;)Zqg`_$9^jY01YY=+$b+eLvBe9FavOZ=h$gnyR5kcQf5b=Ahna=HU?8g3+ z{zBsXeWA4nTF5Ck1fYP^OKa}iN1Dh3T6*8<-rD{y6kk|f_5)04#MWMX8iz3TX=(Si z+ODIF$K7MZ-VAd|`xttqxJXGjF&Oj|62w}%`0=9%;be7CqR-mkas10!mkxXV)JqB&esMFd&uhw^g1|J^7K=1c-Fx7`qtgTO%$D!1usSCh~8($Am z*G5wnct-(m96U3sr(=IpL;L*xGcy{Kh5NFY>u*%O#mkJKqxl@+Y4a{q65_OcirF;Z z7T+03#~s>ff%cN(724hBGxog8^6@1h7VWZ}otzq(@amk8NxJ_OE6PN=e<^|Rdx>r8 zOyK5Hi-Y6MnQB2>gT6sWUhkj@8iSFUG9e)rGi1#xOcGXfN>Mr2NcVf}&dqX2qKSw< z4sV!CT)Rv79Zc6BKp<1lOP;-VF=i1RC-iRiH;{02U4`x#Pg&AruNQ7@Jye}~Nneaa zN$Pv`6N=8uTP==J{owO^Qn*W#j*e>Kv(ntByh)0rk?&N%#ilw4TP|N&t{4}T88{QIdAbJ6>jm14flx zewdnJUfCS-$eHol(1)oOPEZ%R_?4&2>H+z)9?!!(Hlt{;zAxOS&Coj9o}Yy#MW|jY z_ZvQ9{b01vDI*)EOJ0#8B1M$Ogh)s}XcUX%GCQQ__oU&(bUW&E&b}zCXi{()&`#1Y zg{rTUKs4%gN|w0kMWGyTX+%{Lid#L#Q+q&~ea}5j+Xa9d>cYR+&K3%c=?kfu19V}}9`V*4DW^9B%1I$QI{o2=!KB(zF5hnRFs`gD z-L*xKKI(X)yPa$})f?+S2mjaXg z`*en$-`;Kg)lSVkxRge03+miu>%sx??1+>?dupN>&BcR`wCIjT_l#=EWC(hzk0~AR zG67d;t832cX^jXOs5 zURG{8++eU$_pgZ(x7qs{By-@_gr-Jz#3OC=@+k6;@wHG}TKY%lUYKayLv=UREbd<-K)x1F#-92DW%aU&w_DAI4L|d> zdz_`~+FPtsLm*rtj$(W6CwBcH*i5}f#o+yu1}2)X$_4iPU7n&YcL5Vnck#01(N~8* z)9TD|ANC<}BzeIADIw?*FOZO#qCcHnpIJI7pk}h|c8()je)O$FNqQ|_W0D{M9@$E} zS+=rb{a(Rcd-FjP|AiJaT|u9L`XD>|5<4h=hbkgYPByIb=R2cuYZ3ie3!E__SD*`%9Mo2WZzFJp@%(W)P1%Mk4$jjj zZERonH)qRxPJLrfu=h4AX?N|I;yXG}(abrjg+M$vlEBTjm8os-`b|t|g^&Sb(NRU* zQOY+VPE!dg8+gUdWqXfo}8D+8Rzik!f z+NZ}cq3<>h%`N88LT3UUK;G1{A1+agJ;#1qy;uX@kcoKYJ5)*bA^Y#11@AB?J zUm=6QFYM!in^5w`NuY}hVkhQ|a#9t+)9AvfI!|r|;rT!1b-~q1{D@2bG5mvgj{Re_ zl`2A8G=~$CYYXtope8i{*8ev9+WTXNjjIPqN*fj4nEjg%L?xXvy-}rY17GV-`pbu; z5f8vU39#%&=Q9mtC9OuI9+lTe+F@X}lFU0=_O}}QX=Jf^0 z=Ilp4UbXbmsdVM*6vPkY#a}+2C@eLQZ}}Z!^T{?6GvJ-;{io(5)gJGGh(3-QQ7!Ow zT?y!a(AJtKrhf%wq2@P3WF4r~Rr|Crhj~oeFF(?-R9wG`z zVqS!Y__w|CT<4TCIgVK#3(}7(_Mt)!F_Z=h~E+ zh-E(!{cGTef)Fy7bz%NgZX%(Nhrs=*br^^}ToE_r^dUUp`>;q@fF7J_HpECL>j=qT zymo!wQVfCI>zzHAYW*>+M3i3jZkap#S@^0(gbYy^RxFSGV`OR zYBSolhiL$RJ)nh3HW6@FoZ7H`KI;ZgViXMwQEZ@Ltcx16Y_E^Y>tCmMrV_&|Nd|zG z(_}`|29~^^qwl-ZS zku#f<>7}N4okdPVQ5r%X6e5?&L>}s>t)1@w(wbe@Cc*iF=9ck6+^d`sS)?s*#yRjQ z@oE|ss7zpgXO3L&#}%MZb|c?H$eU&F5lhgB%8ifWa7>)vNF(CM_fuum?sCi(RQ$Y# z?~a-j3zYe(ZI8+t-PFnIU12s;zkjPZtgyCElR31Dg67UatZi>C>dqKfTf3ad3j@Ss z{i6Hyl%+?hRXm^L8Qv`mkpFl|Zgy3NiI17^d!a3_CMN^NvRSt|<-IRw;b@^oZ_+u+ z=S0;1N4qT{&EmBmhE4cCGWQd3U0WfkqL74L-fdL zT+>aGX*v2*zfbceFh4mPCg%t}>J-gMHGL;iBy9}{@|PA#J9-&wwr7?&fB{LK$ojiX zvsm==KdW}Ae)sLW%s&o!-&{xT>&nWGYvaFd{!CQD7W*{A?h6M5vK5BYsLC`;au8Z} zORJD#jysCXFJ(kzHeI+4z+l@!stNSw*UFF(#c^4j0=_i&{;$qg>kuGb3dP|pNUotV z)9zp+yET@F>NKwmSwC{<1V?Ew3ufMN`Sl7oj~sV&{NtAt_MR_R-r*s?>mmN^nw%RC z#C|ATFmQZ)xvUS&8FLX)pvNEZmsJkBh3Mm_+8^4lEKzK7kdddBV6dL<-wQOb2QI#$ z41jOU<==l_E1$iw{QQRlF!A6XDK*{i8fYu|q1#|#+V0=3HrLN7-=tW5&}^nDBA)p1CLE{MxEKt`7@j$?$&*pzfQqjC zMzjcCcw5$a^dlhCp_BLPu=~l42@)o*IIk3ZZ~Hc|;wvh%H8N;^Kg3QCHKQe2(zTT8 zTOu;@k8XG5>+7%}TY$K7tq}v$y!VUl3K9tBn^w$py>x0ikW!;;ds*fuYq{Spq!`sj z^@pbrpVD)g?IJwOhMO9Z(-mhl?CQfY60!WqYyS@GKlcJ~Z?J z2(WEw3jaW9nTp=ir{QBkTRhzV+Hd3zf6jXCoy&j$Gu5||La?Ate2wcpeyU$z4>ga3 z@;?JtY2Rw*#xz`gkMQ69v}|gRIPmT!90l$VcYPwj6w9lRHw4@SLSmz2`=6vy_dRf0 z`|7*`_>G7P*Y*3r%EJ%`X=^r0d^liG>!G@vl|LeQ*Z(tT_5C#DqB0dBm*MR|JA!8~ zdC`=ex-rNF6k8Y~OmZKH8kh|$3ZVSCjduKTc{n_hJ)Yko7UhQj0mSE`C?b;}c^Fb+ zb7>OU9%(LlUm~bpks&4O@oIgrnka)LX zaG#av=(ZzwgtQe~I3AH#Wdf7Vs%>?s zL;)jG`qF#Ps|n3pad1}nyez5qivy<>TNjU+d_6Du(V0?MAEgVW50q@(zn?f~2REFi0N zC++<8Hq|)0L8@MzvgUUG6xXfyGW*wWj(p&ehpw2O_wvf956S!m!1{AceRP^(J+{x= zE~6#LibzOs-nc4`#i2_lTmFJlEgB89tYO8^at3hMaN=~O^mhJCq-XkB*jqfR=rr4mJiDE1U0Pm{S{7=A(>Y`n{EHlYB!%OeuLsd|V01a37XTA?3Cx z9r?#LvBy4ocU@GrIKI|29quV1HE&a;5y=KE&+bYVd)kUmJ{vnfZ*Fvo$MP*#?GHw? zkzJgtR^64x3q$!DQXM+eLw#G5my9>%b+o<(042ZAf&P{Ld5(N(j_PP>gbB3 z0Z5X7Wo!w5gAQNzl+o3+@Ab>Td^mkx2-o^tyc+E;63}v8w}pv}?$eJQh&>wBDB#tF zSk}in{;?!BNa)FQU&F+=DyUCJA`(7nxw(w>zD@kqe2!l&6gNhR2>20Xkn_+lzl%^v zKjSNV>i~;lqKrJI+?ImOZyrswuai`rW!-<1V zi*v!dxsC>3`*`FA>5;xzC+usWjt#+KBHMox&n`(IYH0%R3&8XzrG7zV`1Q~Cw+e>$ zo-3fbA`I}^aVbU2{kNnEz+l|Tlcw1B4BDGprS-E*#+44OE)>-pR$c6D*n zKK|;A&o%SykxY4;qaIduyp%vxwG#Rb_LfqpB~ok#C!dppscx(GQhV{wZ;zGaZV%5L zxu?pn!x6jgS4ck``{ZoS+^1H8+Kl8QZbVNgbF{cb z4`2p^amK~k??IEoh=j5^%}Aiy0HHOe>q|}i$lf7w2J_xrtrS_%)b5@;__36>q|LA7 zrk$Q_Jt`4YEakM@tuNvh)`Wk{wh)fE4Pt(!noC>TJP?Tx5bj>=apZVk-dB6oV~9QZ z>pnkpfdC~caWQIKC+sbP%T}JN_JmBX)gfxUzlVG|h?i-!&ho7Y2U=@Cpj%p*g`SPI zwd6^daYz#=>xLt~UAS4TDZJ$D+DI>YmD`$X9*}YCDRO&a>2`wvIF0W#e}R7zVRpYp zw%~{_@tg(SN%5{}+e!l-NCi~5zi9vVHTuHUf}^B_6Y_Msu|GcB7EtMs!ccEz#}> zVkAr|Y2(CP7Z2DUIp~$*Rc{KN^%0y31g2He=iN0tU1D<615{t5zS;ZhNmUY4KwN-t z=F!S;Wq4ja@6^()TJuLkG{ee7($TU#g8g-s(QIfyeM?Tr7eVL7M1>4z|F+OpNqd{L z;HAUNHs(~NqKB8}=Q2n(S}|Kg^zNS5LtYVDT;((|f*TC@!tPcTBi*JJF7hIP7Fo$* zDVKCQ72LlS=kaBt+*Z9nTHOCDSYI2}QP`OE_xT#GA%BIYUdLZ<347z)@Y8~RjKSxO z0^3SMMo01u5k=nWy~u9D*R{-jH72R-E>j};?s_%wvaB^=V^?vUJ8Wt-NMZYISOf?^ ztyeOeJt3VHyAj>g4@A{@jHJ$pmj4WfdpZLi-*!h|-w?$__HQo*X7>R%S8jJ!Xvb7c z{MH7L7GiDkbtlC>Kk^S`8+hlGy}D+wKhl8>A8$mB1vMPC%}Z@GX869aecc=R^e@AR z!-Z@Pl;j5KWT5vZUM&C43{W)u0w4BcKqB;yMg$GLULHR2i#vDaVmWgBj@1>DxGiG3 zY`c_4N0@arzyyZb0h;J3sg{k;zXb}#4S%2dHi=m0C8`LT=*fxbO9=6{Ox&RW+xF;! z4$_q{Nx^;L!9eSc8h-R8=BeHBY@VQ@HAUO9Lo{>AsHHZSbr4X_A7S8@v^g^N{q2~F z{YnZyl?o(mJshs9Z1?!-!0i#`S%kleiL<*i-ax8J{D;%TT~?L?kj+0*!E;Z$6}FIgu>W z8}$b6H8}VQmwZp2)k-0r(73$!`!}ENNbwt3zvpdX5&akz;v{5K?GA*2EKU;kD)~}2 zwJnD~d^*$U2hJ$UgeoWPU@u45rDgx2i?64?ScG-!v-AWm$rb&~7 zA3{8{543yVY3(JKf~{kQx!oM~Cj*nk7&gsYk7^oqQVwa0lCOWLd9QLKg$R*w)F0E= z4BqNSM}NAedLl>8@g~tG3n3wOujEAc5_Lkelgb(|zp4?_%gPdUL=k*qD2X=R(bkx#2pk8^cIQQ_e) zG2Vp;Q*kI;$>n$cw#DfUvK;pftLdPNvFt{DHBxv$uS@OIlEdqzQj)ael<|c-%CgEs zSo2H5)TWtJB(=vAFzmYT(N3EEN-uJ!sF8c{kFXRDvKM=;QGR7dHW}eEKT~RsX6iaM zhRrbvZKWPrUv`$>2ar4byWeqX5=byp5h|KG(}y0h^{Y_lqvS-$M;=z*lQ^a93T?Hi zi(emk=d*84d{9~7~J+|o4&JxW`MU9vjt?J#) z>AI=O2q~mB-cGuagm=UZ4fV|Yj$#p=_>nJQ8-eW@<>@xXJb#5-IE@S&M5vf2?VrmQ z4U9-So4t=ei87%B-oPPIHGibu-?)HvP!GmZ?Y>_i#`Itv6+W!S$y!k7lJwEYln(X%WtsGf&`1dI$|NFcECM)>_E|rAwSfHuxXls5~m|6kK$LY}b z*lugUt7H34m^`0SFXvq}@f6|=H{LKVPM%1@8&qg(mI4E8k6%*zX zcrJBkM`~F<;$Uw1oMuqF*tM=mq$SO>CDLwBl27B-{@2nl-dRnaOt0=o@2sXx8cnQ) zeJiC0VIwz1q46TicwI@41yUeXH>`66Urytl;@P`-fJ0(#3u3l}(t zwTmiq4T+75GpEfUyIrrMXT@jNQ`j)r@oR9XBFyVbGDS;&5W4s*LU{Nj&)K9g{;0*F z`#fHZZku*>QHA?Hjl@5mCAI}fyhQ?Le~|Q!W9t4|#`YlK@R3pi)_R^ zj&Dj9>uVX1xdByo;}6WQW*Bz;vVGAuJ!zKAlN$q4lQ*|gbIDuW+u-qw0wl#8ry%f` zp8!>@>AssJ*f!nJZ}z&^0}YaxRcJV<n_8oNn~|@MBKt<_SJL16ZfbCP>Y$*u9iEjbCMcC zmoICtZPbH6u?~9dv$rm6O1_cIK0R_rC43WNJtP!nvq}Z-DZXBAtgK9c!v|m4aPb*eh0v+r2YeL6cReo1+{^%d9}$&_!ajAHvvUfXJP}kl z2jRQpiUm*Jd@6Rv=%_oNi9Ol@Uc#K_D4MX;`$hVSFXiGZWg5>Zn-n(?G)$F0Rk#RX zIGSE$x>7Ebz)bXC?~w^M4be55L0^x6 z4EJb2x1^CC zL#cN2a|nV;(}}_elGy<3iwarsv`}-U?D>XT3oZm zC>Uq$PAs3;T|Ad~e9DmRPdn*6C1z?An#MRfYZp4NBg}+HWzt%A{iTgCSu}lnxTt0j z#<*aYfdKZ>MUbAfzufXn%9C2}4A@%8P_X>%@PObNLH6S-jZ%}DZ5Mn)KzIDIKb?54 zQi6sSg-37!7Pw56mgY}ar*Li;8#}xD$rnC0RV zZoFOReEszV`k&ordar+xEhL+VO9xwc?;kU+km2TAo}()924%ds(Ea%tf(~zi{{QC^ zo5me3sZUEz3u$L*Ds4(7hQrFHAb3N^vBFD^i!+(}k1PHxMoBMs)mqOKKES16L|x%u zw5>I&((XC43@nP1?{rOx{-v-bcErPn)ynAGS8WPUjQ6kBGmC4wwR%cUMzXg$-tIzq zsx%r;n0)=6YGq{Czs4~UF{H;Xc?mw?{^792J4(>Jh@WZ4Zl_nHHD_G}FS->y()6#8vB_k9Zc zVzB9H6jvlPN-5tX%i<@i>p`HR&ZIfYoy}pWj9=Iu7j!H@e36a`^+4`qiC|4u=t2%m z))O4WDa|IOTgTd20-Mxv8)ZhY>*PH1%K4|~OCKd#jdJRgfv({0%dW-sSA;2a!M*}B z58)br{mL`QI}BfCw6broEfu}2+CF|jK!$|c_Soxx8{jPuR zKkw(9^PGFndCq&^^S+Ob*7%;nLC4v2o@>d*aAZWPQEQk!_q(IIc2Dp9(4T+k1e+6i zn}i(AAU@V46AyZ`Uql{11b<+9f!%y2>})YAAWE(Us_j#u3vQPdbxe2RikC4X z4kB-Y2A)CXu$vm6yOM2utnow3h?pBMW3^uf6np<_abb@NAmdqrB*+mJ9%dIiB)6;b zjWivcxBXQ2SEcYff51N_zttR===3&G1(O+Emv|jiixK&^}7Cs__1Rz-~h3K&OAt>4yGl^`HQiWWR*FSEA zcR*RviGIc#`u%&$NV%$j0d2zg9=8(u82mFHy~@-eU|6R<72V*~_rxBEo*F<~l&yYm z4eFiF+6B0j&~*FP4g>_; z^c3V^OY73?vHph8(pcFKyQJJm;t;{*+R#0nzq{6Mc3JRqc*b5l73N zCth44*2TGr8t%^yD$Rb%*95Hb9^EW<9(58OYtnfHuulV?psi@St5_4imR*RB|DY|P zVH;FcIyz@0d?cnQXx!LiM)HO1PMDkZz4qXSq3KMqhmH#}FI3kd@^_S{%9DXUUf|FF z%kI|HoQP(+{qWKcRrK!=cRWwN{sZeV!Y};9LWESHxMl=3M6pnb@Jolk! z8okf9Aa3EM*xdPy9jRb=(ckQh3bVpa20bpY9k;bU*M6FAo9zJ9OCp=>Z_>7^xThI% zChO`KR;2y9IQ(XcUDT`kxeoX$yi-NlPZAlMhQJ+y8hKKB7)^$#jradW;u&jJx? zD@%{@AeZ#lZ{7mBs<3MP$8Olz9XA%K6H0c|9N7+dU!83{|BfmN+Y-QiCuo#9fgj^? zOova8q27K%ng6rC`K4mo=!50 z_WOJCR8f4Jy45QdR7S|o?cA?&gMTFtkA_P~h3q-@bI%Db`VUI2l10Cg%&G4QE?nQ( z-6?efL$2mbx@CNuwYjnh0seem)`EYrI%XWUq-%zT<9azXqO>2AeCG!qiO6 z_6$r%VsmDBvWS;-Z%_-MX~86g_e~}Qq~O#sz0TzP1uw{TO?@=lfb?GX zKZ@MsdQpai{OKObg&(0GVl@6m`*H}1aagbU8~;EHDl*F+3m&@Sq>84C0`1z48E-3x z%?K!wtmMWTi$`lR^ahOg*TXUo8dR1OGIiT2TI!W;$HlFOV=Pr~UF2zvl|n7&IxueVieG=5tyW8y``y31vcLmKuE<2Er5tZFOMv9*+fueOyG(^}PBuQxkH99c zDn(lCqCW0&7ZKI9F=^g*o21t^qgAro6Cz_rrK`zttYlVq#aY&?wexusyW=>D=ew?~ z1qQw~wNbO1(r%1VSXAaY924#2+teq`(WGo}p+r#0msOme^aQ<$oX3m zynpEZcFjMKFrHBzSXgNadlR~^itmaEaC&L_DA~(?xdq*8&8_q5=R5Z3yTC$bLSVNu z3!A|3gZlQZ>jb3UNM0g4s-G`dXV%8>@6!2D-!hN=_4chQic+1|ZKJ5Ap4=PYq%%^L zsFDvt9}Tx}Hc`aHRw%@v76YQ!U&c+*HUoS=6@)wPC}PoWA6Nt}NYo6V6{;A~9njOuQO$Mc4obhjo`n2)pqAMaFLNBEFQ{m)O6_fZ1N2R5TSx3+0`nlN>csmfdgxI7BPSfg0;+>1Kb%+C!xU!o~{<`=SiDu-nfn>qH#aND^-2NawA2 zwMD7cnbT61K@!rmUWcA_&pA2Bry(kcFc@g=}g(EHn&<~NuH!i9~s9}$S z(~bhlXI@cmn0)kk6D}+Bb?x)fE!=-}cMSY$CslsaT$|SA^LY_a?vQZmuj!ozKKkes zRAxcVh1?7!9aGr9`cEGWJGV-0X>S+O)QPy>VDP|^AC7^NkX7i8UVZ0=8~!c&{o5Wu zugX0va80hJ72f51oI&E)YbeDyHLOyJ6VoDq0Htrk6m2uwqyj zuBemVq^H0BpLzX1w!+EmkT@zmM(B$X;)HKD+Fp4%lnR2~^Yr7a87wgHjcIASYWB7P zj-lS!jH=x+)Yl0$l~`L%N2-QNW*Zf|5qPE_|}8dBw% zDAn@i^#ZrW*S0Cb75PRy`BUstbWwD%3FN##6oUuUVPLEe5$i6Cz)-ilR=vjZF18^{ zFO^PcRpM75+peMQ>8uNx(ve|J&Au-!7*QMxVw2}p0wvo8x^7P;*$`mL(*KdsbW*!^ zIYlRv)E5+KAVY3F`Sxt+eA-ZxHpckM$`X+&Z6Ip34Rn%;{gfjvj#pRxE&bFr{(Tjz zFy22>9ZlDE=UePLyCdtSKpUWlVpX}9D>1zYa0Hl5>^_UUZjMdob)|UyW}Vd32I-{q z+THsbsODsXi{8+C1KT<0==_cx(@^ne;Z{{Z22RNze)90D2YX~3_Lxst{^x(?ROu4H zU*gP!JXfoT*;2_DLO>fnX!o8z0oiW(;C3iK8u)?a8sXX-$=DzU(7fFL7JS(~;h@hv zXJA-bdQ%&1gB}1}Mv+_z!icO?AWk4stboo4z6`P)eP{k&I6zrkgRWOR7RvZUKnn{;g;Bt52tIt@}&!sv7P=c>HwJvgOLYNuqK zb8U=ETi{1Xyj4MW=~vjqWee3O_E6-+#Z6X7pM=Ukg9sXUbB1O%gzI|6mwA>3_A>-< zvZ@fOego+TEo4So-Be`GS)YlY zG+bN!)9itr$}8A1_R-^oD2=m=B@Nk}n#x$$Ek3L^ADD4=JPEeQSz{jW6r28JtT8%! zi8y8L0rkjb9w1mIId_-ZWZk}V+{ycsF{%i-!OSRADsYT`(jfqh`Tg%C?`+Kb4sP`n z1_dk%$PG#mRG>P7=CY>*w#kB9!gFP<9B^q&TB@;&Vnprb{^qXSz+x5%A@ptFc(y zqN2bq;Gp_X1&wSUJ$9t42R-E|6c=wD`r?0`?DI;FeE~nNg68g)6YQ13u>oF&syH4t zNzC|a;5rVRo5Ig`RM5}88$|DN9z1kVdNOF~@|DzTUZVpzT+FknVkTGSgccLy)mqZA zW4#9YFUOD4E8up$YEBqzzMa=853HO)ORoY*SNpuF_>^tFyy66!!HmME?-!N6VeaHc z80d5DT=K*!4!N-ji_cXg=0~7#UOZ@tC{lImNk=+S^&|QTuc2fnm7={7@BWWrC2sNSQs~+=-wSK@W_74q647fXPCnE@a|rvBA5 z2>G-lMb$&q^b?S!D|<|cTezQIsc+~zxd8Oe79jE^^M*Ug;LO5`!t#)QXms|tI)4j~ zBR9fG|G_XbF2H}BPOzyJ>DSV_W(ov)L1g30mjK(#?ubW-&H<~<*A(f=HWhT}jN=l= zGB33cfcmSob&R zu4ZU^MCRmNSKRJv#j=%$@kIjbYYF#TOEHe|f}zgRCARLwV(#GdCht)N!Iqk12= zCP-~x+etRwK-0K`RjX!nx81}oO2$NqA8Q7I*HF+#8 z{SGN${K>0CS&!SaE$Od}IOT$PBfrkcKZ`vP7js7}_T$z7^%cPuJS1x|(ISS0AGZr? z_-yK2?J-!MH*mJ%ajXEko9PD&sp_C*Zz>}oQUx_>7=y&RG*lZHUhw(hI&Dcy&%b7sf8Yayo&LqMv_drCuyZNGG&utEgghV{+?` z5LvY{ugO3fJ@&>kSF`Gtg?qwSE`}a5E*|FV}jGo~6eO+RZ@_H=)1*n%0nI zs_-g%TQ_`t%`(lighgqgR_SitgLhWuu&rQyJrP+zF_jis??#C_32bNB% k`KVa}s;&A^vA-P13X`h(JSYR8Eql(yz*4_j&;8;50eyWvfdBvi diff --git a/docs/icons/icon-128x128.png b/docs/icons/icon-128x128.png deleted file mode 100755 index bdd1eb427c7d1b65c3a29ccc3a0ab0fcac79aed0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6634 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 diff --git a/docs/icons/icon-512x512.png b/docs/icons/icon-512x512.png deleted file mode 100644 index f149e220dc33b86af397f82b11cb91aea635d31c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30184 zcmd3NWmjBX%;A)O2D1aQh)IC9dI_e$*VMjo(jn^ZG*3dfT*WNN@Ek3Kt(E zI}m;cg0_?XwF@E;nVbC8=quJ?dAUHjfUFdb^v6|w&Bu~d_1WRjl>LI%9`OPoSuf|O+ z!^X?l>=hA#iW~O==ST6LUnGQHbcKZ9W@g~r?@G5@oL^|Gd&Uth6F55A`3Aw6!`De${irYX@&ea2QZV3`#oda zJQY7>B&-*{;)a*}Szqv6TEh0I>1fWF%V{~fL%A8Gb9ZEGtcqG)7@(ru;S?~}i*Loz zVc`GBiyaM9iK!^chz1S&;2BZUT~O!1_UN!#uWXgC;oOXd0Z~!9VZ#ls|IjrAF@bv5 z`}z)9^QD?Fb^BtJ^SQ(Lb+gD{OXOGl({{HJv?c;AYI?lBh3&*TJnR7)hc{m!QKC6{b?|L6nP9^k= z=kI^IP<~KEMY-NNtMKom<7$44|3RGS%lbb9HIYYST=?z0A-egJpU*Lv;q}e*loVYf zBRhP5p^S`ohl{xzW!YlXN0?|phr3CL=cAgCaKFFdus`XrdtJznYZpzrfhw;6?wNrs z{ObhKh9}v)S1tX&O)o$3>dz*V&R#TsQ?X(~czB!@-yNOysEnF;xL*VgHr0sjz|q6! zaNz^N1nWvo-fTt&TeEx|+jsl*Y?PNi35E)hd@&`-O)q#!eC4bO*^-2Fw_o9G83_axwRKrmbuIC|lpmylJ_zR{7-kB#d+UiJAAUxY0J zSBqso**H~5H)DQm-0lj2n|=_ie$n-i4=zu^C5xl!Y|Qy!0fT1iic+k(!yD)%C@*e>SW)0@!)x$eeuYQ zJQ!&53H0Pbx3bW)vcwgGgVXgF79V^FEkZWNW1g&j5sz?zBipY}H)EtdvOwS2x! z$@ZCU?^Z9RGocKGH*Vb}%-`BI+ut#vey<3FhurZgTyzHoJr%vT|H{dN>gj*|k>Jt% z!7C(S@R9CkF_aV6y|x=2eLgahT;VP1clJ=&66TJhN6}~#vcvVyPLuKOlVZVeMJIDb zLsY>BgvrR?16^e8ghWT<5$IhrAa@2Z(Z>9i9;2jO@0D%6eU3S#`nkVYCc+T#?c@Fg z_0l{NJBtZ>#TS+$V(J$V8nD5q%OxU6tDZpryv=7nNKIa2l zpJ1QIr~$-;wHJEh!Y?rMU!&)%@10Dlb+FOWTe?%;Q^vMLPP`1&UXUd-TPZd ze0w?7uHvp3$Zpj9RazADHO!p2G%8rqckUTvz+6a7%>+cjS+zFT_o=Fw9Bw3RPO8Pg zT|aJboSIg$+dD~}5{2dK6MsCRMBbjk;w0S=br>K+SK8yo5_w$<+k}|t ze&m&3%b164%h<_{rxjxbQz5al9}|!cI)6yy7fvWE&T&LG6r21YZ%jW;#_rC1 zO?!6?R${dn(SQ>D-S!s zTv}4{_$feu4`9ihH3@Ik z)7rZiU_HDiN*>J$?C1lZH$M*LPdlu zzcDh}lto&P1sVz>&5OKR^?faL$YPQb#}Yx&$cPZ(j}ITy(?+$V$4N!#kbl}|*}h9n zYw$Q~ry2S6xy>{ifUEn{s}~}VJ))a10UXGYZw^yXlWL` z&7@GpZ~{j4Mx>yBiIXg}(;%iEl7Q)im6aZ1n)5+VeP z1ACV5qLyb`Z67{$P4$a=vEZEYrPQr!Taxy_m0hZHL42TYXZe$#D~kS+1?Bnd>lWQF z`|J>^85}(d%-I=^LUqwLHkc^rH`-}his4e7PA8tzVIVA*2ss8|eojcUuM$bNC=83Z zMiW6%QFVc)($}ZrGe#1fo#8OPna)RKYZ`$Jm=xePy6Ib(DTW)bC;WcU#eOqfq=$31 zMdNZ1RC=Ec#s_9XxLkZe#sneUy;)KZaZ|!EY|xUj`vDFM2$mY416F_d_{2?0^ex51 zL1Xeso^FE5yn(ZcfzZieGw>7A94uF~JKw;4%?Z(?f8UEpSf6Ss{!=brv|qW*oB!2Y z=Lns#n&eo}$&3kLiD5B!wBISoHC^$Tc!2Tx>qQcMiKD3MU4naUuQuPl4BVnPoQdhX zmG5|X^KXok8SVV%tCnFTt={$$?D&H1Y}c2YUFF+kV0>Y#d#0TZwB55&(=UtmW=Os9 z4PVmOj@L#U8M4q(Au(}-(F^f(j;|>H@wGMVTe*qj@FfgWl3WIlBmby$hScLDbi*nh zZYBi24c?i7jeYl<_`vh-r*+jgzSTR89qFg0pGbF%bJwYvCE(7=;)%jHH#vIIceFz9 zPqMu+rQZmI?fh#`SAf1jayl&>?3f9JUrY16R69Bu+G%Jr&`xG-EI*;c?f=4Q(UvR5 z-}=28t-*BeLJjcYdGiXtI)-AU&H1nOqzEm1EB;HTK!Rx|BRN?Rfzw-n1p~2dmga6-?lS_BwpO*Yrug)WqsC*L zT-_MCcJj5by;66eaWR$2dnTX-18HN5C2_Ot0B4$QS&lAN+57-)=mATsXLA#eo2QQx z#u6OCY1jC;eYD_^JKS<(4_)kgo)X+G>Et3LbtE5Vd>~8FCSY!s$f_}L$^cCFORhmq z%cT09q$9S0?x2leic>KB+E?su)$V94{^}~;Ma-T0O>!`9cz&KqBKpv6SoObj+K{$c zNw~AsrWQutzwsyFiD#?EP5b{~{w`@E4PA%Eaal*+!;aZCQBSwX3dMGk1d~Kp|79}a zaH$6-kM#X_qY8H}Z#vNiAQb`dYpb5;%*GkPldWO8Cj-w`zvSo|e|?}=CZTpS$0(zG z;86pfXz#V}2BebN?EF2R7eBzTFs5*=t)U=U#KRdQA-1i)xv2O~fXZKnJH-9(RS7rT zydu_W4}&lHwd$F@E&&K*SC+Nr_kzj%9Qe_MJe&ACJgUl)$!A_s9zWKTah# zvC?#+y+;ZQsf2fISxA8^X7zxlSNLw1NgcY0cao}0^HjGO-Jrbr_3)!UI(KWKMLt{) za1VvAi$34d6x?jV=D|+=8-gU>HtAXyah9PUZ7G^AsWDz3F7f)U;*AGEYGLc*%6;eD z^Pha97ri)-DJ&ozI&fzX0XnHscox2l`awkfd(g41BFci9FeAtu!PkIE=+6l!Oy z{Ag2Cw>e7I^trjPT9d#+I=4pc`PT+f?pk5}EnaIwLWbTDmg;9gWazcS`wGgDa0rQ} z^B=HfW6DSI8-b5h2_mm?;y_JZ`xI?qXGZDdhgK zjOJ=p(L6vE^i!%x_tBI`a_NuuwJ%=*kfgkvso4ycF!J*eyY=K=G^`BbPF3a zsjts`<_|h1hLq@MAAM4}43noU%;ww;c#9G5>aQ*DuU^+^t5=l7nTl^75B#(`%`{cY zOrNJ5cxL={B)Nn4B^G%gM#lHU3CA>;XeRWUgvqW(F>QV_@@d$Nt$D?u{%|>3M4AFa za(bPqiSgulNOik11LR`yDH-pr83v=@_ey!H&tkV8Y25pr$nVFM({K>@Zpoelp)~Mf zDCd_#iO0oD#+g4F_{3x5pIGuYRhsYsrtGmGd$|J^_DD?w-rgGx$Q@jN-z$*n8ET$AyS)^ z2kWBigGJocPp@4I!=v(2XCI5?4dj2Q^|eHqy6u#i8{PMTTwi~jk{9K9(WtQ*t>Ey1 zFY+emQ+fIM&=~4VW<}bSXWpD<$lZ>1C&!*XNrC$wsE$ZRlrTrL`TYSQkx?t{PZos- zaC^%~81LdvV?5MTap0L#*T!u;A36LlqtcMhe>gv&mMLu+?==l;jAoRB-_nZj<=MmDiE3$U{H4O`rdy_R9TetO*%Zs_qD>AZH3@W zKkV+s#a>-Fd8?%3qfBAdyJb=F-D!U9WD-;&UQ(~EUD^?HKy<`(bJ?_sQRzx17L!|i zMvL<2Hc}kCiM*N6hah2*-r~LoRRkiZtVp}Y`{;IiN9E)-MBQ=@@j89>XVFhqvG+fQ z9U!+V#J(4!vgy1)`RVp2c=3l{t_7$obj$-jwm-gtNdA7cZHsRAyrlNNok%I)TR=hD z*rxFFLeyU-EYjdrwPnWpS$fVsEUh&i1 z&V71xP0ezz&RA}tUxR3l^E*2%jI!=&Fq`#=X%l$QF``M|j&OkK6V&ssQ;KR%FfpN} zFn0^gZwkPC+HPS}M_W0updpD;g<1E)yKQcO;~!e-a2NBUXyQ|F_nJZ9$DLjQdsE@b zxzrNU(W%!w50;cr-@=f#VgmAjh21QdIsjXOJbkEY$s~PWgG9CJ_muuYi0%nT4`N~1 zCKz;n;$qog6RE;_NV6h>w>wj{J?s+59_6M!Zs*Royci@rIHhH(WYJfQ{x^o$t9-Y0 z%^Z%}Z+W=-d79*nufi?Eo;|1TtB!Uu0j76vB_ojl*8q#3w-~FFhZ|AcbJ-C<(6%Y` zi}b!#E)h~yR&EVBE_+xTmbj-AR#r?euHgH~6((A>J9hs=jAddaC%-U2DE%9M%#)pYxT6{irHh4W~5@<3&`)yON(H z7fAQT`>S8B;(UkCOgJDfhcdV})eo z%~cy0AN;kNa^!72F&)$^QFVxVd?X%grkQV9P9-~@AiTTcG`x5=NT&e?B17z-X$^Un z^>gs7OZlR{1i8FGTaZ^ohXp1dC+S7d)%EB`O1A~%`4ofPY)h*huu{KaVd zJKF!y3NWGoF6O*(Km1CQD)pMWd1my#^;&~xbB@i^cIlL$B#*J|*V(l>IO@jcZ^JJ6X*)}0O9MqeeLysW;5v-1 zr!;QQ1G;R6@)J{Z(zpKP$NTBqVVt{x&-~HLUOt;K_WmJ@j5b?45FK zrR>E7&d*pzvEqIJGLKDvxh8h)YQTL*&ir1RDmR{5ie?9msY>n9x5Sm~=B zIe{`y8CkhSKD)$2Xu&vDy+?CJ7*Wn){p!w+wAIrJbO*Yb>1%>|>(iPeyfa(baMaO5 zRudgE{e>*YQCIV^PO~VgKNq;MS9b*U?HFE2rU~l529Bz9nL1K417U(LQ*e)M9NNjN zC|QQphLfz`^wBYG-69;X{!k$VG$#Q~k9isp^($c(d6|LIt<1j3g*v0ZJKa-!uM!zI zu8bu9()OYErW|{(pzqdu@GT@EL#+j2vAz}izY3HGlc>HeZ~!_+u=}bixCG9yVVCbk z2j)-pSJN=vCS@Mh9qC*q~@0pB=*N;uE zBQp!)g#3j}YDAwn2850zu{TEKGbeQ{Af*_tPPwlOUen?#-yz0Y?=9mf4EZAj1@8+V zk}sRzJq^#istc^zT*z8fq~`~JfdWiy*k9wElfw#0!@&EkSL;tH_?ShrF0Ks%7+rkS z5t$LJl5=uY$}_XHZcZhyV_snm?WJCxm&AXE2`8mJx_`CXb{RLkO3aEjw#Gjd9^s{@ zw5R8h9qYhR->6#c_?5gYf0P|Vp}K^EmqcNmfpfm!>)8eN68spKKX>DOGqkFb*kf#U zL+@Xt>}a792CHo|(}A!evTgg;G^-T>VEc_Q7?i#Chb#S4G(Hf+etG_jV@dJTac9gG z73m4)$3tY3@lT{zj4y~Tn@m}{;IR5mloU9xzl$+t+KKFoGPw>nsccRC;2XQc~E|o`YP!tL?#~NV2%TA+{`B6C~(QasJ9!yy_a(*htZWx5feI zY{N&kj@;R#c}TAEfLzSiOSEMp^d4#Cwat1{X5;ePt%5y8f9QROTE#6%w&Eeh5!NTW z&IDg2oz}C_*0x)B37hRgoY&E+ml%*ZOkHVll}lRHv8BOg2x9$q@A(MAJZ(FDulaNv z6F>OZ%=bH=a$`PX8%LGa$Lv&%i*t10+54AcUaFsDEs|y#RC*njc`}deLKAQbbu-zr z^zUA2Kn5E2>7y=3DiBEo2!GYjLBh9oc+(0#^8U2b7iuPP zm`iEtoI2SXQzxO8j@|rX4CqGjZp=jt_#!x*XMID(aad7nLawW`(?{Qo$2D)p?T+{G zwHZ&1B=Ju2<(usB*F|qYs9{JptR0(b8X+w9MP}e3?7nk_M2VU4mXYOqUu!2(onIE5 z-Qe?>xK;Y9o`f@w<<}t z5hnR0@1OYP^^da;;y+PSx0M#`!3HybRpKM`)j3Dx$Kn?$E$;OB&)tQC@4AMEeS95! z{JoP1&|XE&A$lL+&9yrf*n7R^oB#uXHsr@n>iIQu;HO9eOLmj^&5!)Y$ugs02T%RB zBzLoCVG;8-?b^k5KkCEgb#E z0B0RT4`;PdYYpDdPpIW(U!f`xUnB^Bt75_{$U+dkO*|hQd)gyrOpFhNeM#YRP?X|F zbGo?C#hO#KgdAn~i%*8YiE!{^`}J8CIF(xbVrRP$rcgTk;L{W6nCS6(I&~n{s`LeF zk$e0e7*OnL(wbXUtyjo)-M;EMj@ki4P&chGP3QX zcF8ufXoGyq7knEX@GYFU!$jT=+(%}0ev>yqq>!nHVAJ0$O`XfsIv!{*z~35#`Jna^ zC!)|o^W0qPfM;JR^+x=OYol9Oq~zQx!TN&8TtmqQG8?UHH}*Pj)51mZ)o_?u0M`69 z-hvZcTw7i?@ZL3SZe!m~NP8oQeqfxrt|5LDZqLP-byeHnSUQgW;`heJ{ft z?CG5BhnS*_=Zj761HG*^bin+|crT@XBCU$0&V&P$UP8+b^epAGHSdxm55#J;G zF|ftx=OkgIwWvo&3wA4|8EuKUXqIS3*@0kZ=lUL}Wr)M??nbMpB9=rV;IbtMu^ifl z>5xrMbnS}1Z0e2P)VwUTwuu2lYal#?tP$|?ve5R9zwL~(8Fg%ytgz7J#qf)N2Nq7z zUub)~o~SXgwPPjRSg&GQGD;Fy*Kf?Y><}8}B-imR!L$W^t3Ho)3k}vlMa+bj(XTuN zX!Fl{MY`hyD4$)lk2cHtdGj0Z7s4MNtj#vpGCRw8VdKf7n!qJF3J^l{kLUQOVFO-wnpuLXyh#tsX-s#NC zt~ioL`YdXu*bLHyCdJe_;!Emnr8r|NL?Gy0y+|?PC23a@@F+zey;Gjw8h4!eHUH46 zty)8aSYB>cP(kh&I=XAZ4hJJDt}VSPnEsppm+I&Zu!8@+6yfN&ME>#6&RPEUcDiRe zsOaxr2fL}5)V;ooJB>arB3HrN#&&XWO>X|Rw$^A>IgXKT=RlPDwSR;mLfg4pX%YAe z6L@~scDlZqMGAr4{kpCvaZqoZv->E1P>{{shp%2XtwYvRJmJs79r_Yfi@84W&P?+; zE7u=pwx4B~kM{FY4vay}*pGb|tKgd*4w|SrLR1i~f^kHa6*MHr|wLD}za&Vnkh z&jgmw6^X+=M!PHRc|}nQjvi$^URPbgkiak> z9n2$wYih<5e|UX&U?0AGGG6vE%jJ8mbx>(4R{F3NIGL-L>mmK3Z3OSY@j#(Xu)E zK-1f`JiHul$c&;^yLb=2>+Nh$(c0ne%^W96$48C$v*YG@4X5NSv`<3ukE)eFr?O&a zPSNJspiGo1LlzZObDI!V>F|2*;8kdAg0CAo%v{d;9K~c9={^v2$d^wZ@D|+;E$nEio2ChLCrSJK#cd#7aCc?pseP>J|nA{6Uoj(7FDytXo_I8ynShAnw!QukIqW1dS7G` zh`u!yY&JPx(&+AiORyVx*mw{2b@szhx`2e2AJkekc3wB*1Fg@A{#oFN07p%8Fo4NK z0xUn(=A54$Mf=tw1wu(Tjud#s36Cf_`q5jBGMUQ!o6!6C1wQ;}ZZb0liNHQza1EtO z?YoFItpY2lwSea{51`e;ral%9`cC*auI;K>0Dn`e+s&jGLeBeX!^GDYXOom=OcdPU z>oJAyR9A9s-9atKyO4{IF`S}3nxX&Rdz!!V{q~KE#Py#{5lvy-<{Imh$zOO&R;Ozw?ui0(F!} zSh&%hbnL4|I`dF?Kxf?Xz=L!@vx@_GRpjSzcspw50d=o;pZ0AGJ4Z>CyJ<6p!)1{q zAk@m;ROVO3i0#R4)RylS36Pbsi1A^k_ zBGZ;c2nPt%*eEl$!-^`qF>d6Ggtixp z(l~Zkba-8KGL`nRaWElR#&Uf45~V}k^I2>tJjCVXl>nG{5Y`YE79_<|GQXb<5yr?U z$;pJ>?UUBkfmFcSh3uE|At|#~!71{aLSiqyN$%ArhSg)do`;^v3hed`x*=*z_H#tu!38Go8KS+BQb zqF~fz@VU|5{ftwh&vX^Y)xEYk3V!|rK)JH!o13GkS!Rbqs<6Ce#^HW7%d4Dc*BYGj zmURoAY>il(xB}xms3{@8GTJ3z{}!`oe2>-huKJJ9(RrzmgOHcz{}rb%gI?EJ&4 z^H~vyu8j>#5v|1g zs<~U4>Mc>(#*P|Ws5gd4bLry-Q|?|Re`|QzVZ`L0bsbgWO)OobR;uH_)}>**JRL?d z0rsRoRJaWVR1)&;wGn|#{@_}o_Z?I)X23sC?UO`OUDvqdf{qjMCTgC6sV&_R=?_)5 zuW{FhZqeT--ncvxuL?vAE4Q&26CW31Ih7uz-svb^&=1af&xq{6&vOHrOFO=1IdSJb z{^o!y#*|FKMw<543qnqPT~^F_=r6W~EtI+UxLF1hUrVW&yQ=Lr=6n)o$r%wkm^_G& z;mpiy*|yET{cxV1aTWJY9ycEZuw`eeu{3MgXvTQ(F$+d$IB(X@^cwqo0-?y+681+w z^pVy#BMpjdeholYh46^#&aQ=B6nKb_ZL0j(EuOWenZORVZcJ4{<0gxUkf*5K+wLJi zZIdQPCbsx#)HbwR`TtbB9yAQ^NR-NfA`TR!D=h`THw}Ybl!S%;cV^_#VdY#yuviN0K>9${5^^ zqDpVmo0rf2xS(>eANtQ$Ka6u(Ho%?;D7xX`!NtYMkR0ca6$W%)VjSVSE3QvZaDvrw zoG!b!mwhBf(@BwOn@sDAyvW~1x)}S?fla&|SbX!US?8Dl^RY7Wm}5|l$^>C2M!rhU zPZAVltxxx=*dMYJA|9>oR{HIYXo)Exox&!;Nf*8r&keT0e|Z%vXAMo_BRI)s(`0sxTj|DW4krhD;=as?Xs2{mctCvUDEt^c$BcC0TH8~Ab8ffwwd7KG|GWnTl zO>Pk?mSpRE2(SD?gEIK(Lhs4zyAx%9;Z(Qj3&Y`UNX~@j^Rdwd_45=Q_zD8&xR9vs zHS@g=1%lq|DT87jYD3X6#&4^wnKpx|o_CQ&&4Lu@>6${7+`Gfu`Kz6yPv7Qy7D(q6 zTU4X)6fvmDM28?*53F_7*7@(~TvM2jzgik7O>193vL%5jF|QTZ!-h)%JS7B*j`W_Z+y&u02<2Ni@w+w8vNk zo9d5bQ40zN!J9_fLhWhJj;p_xi*hX!byd7Ja*C}uU3|HTk@YXMt3sj5jwT|<(Z3A|2iE_HQ;ftk_I z4u2#p5lE#t4<>?Y!YL|qm*7PF0-?+i#^))@E@}jOhnUaLCMLi_8q%GazwzE7;)RPf zlafjY59oaEi~A`#yB|IAhdEuRW#Fe%Z$8^x;h#jBjB#RHDlCT}(_1vsSDNqaNX$}> zj7P`C*I)>orkX!uGUD@-2E+Abh`2Zh4NlTc2MB#`IPU41YgwzN4rK-tqCNVp6={qY zVIeFJhi>rIJxA{^zvrLBWnYB#`t-TBhX?UiV9yxwT2s`2ZxiI}BVMSk#i}!g<1u2c z9dj0le9&XI`}?ev4454`b2lAhBVQPtm?O5O$R9q6#G1vULlMk5drPGWdbqQD295U| zXd^y8F!!DwgE)g_rh^6c>m6_#p)sP3-GhqPS+zDUFihTBm0Fs$?l^O76WF$7a1Ijd z(DGY%ykN=Be>(4fUSG{T43G+q9mI}K^ip{}O0ZL1^9vyr@^oUFonP_Z>}ealsG#hA zc@i~U29gC4^brG2TI{(B!fb>OI?x5@4&tcEleh#uPk}u=U?PK+y?P(ngk5xRAG6uV zRF0=lrG2{dyy*I91<~juosu`cVD+hgR|K4zIzuRLm{$83FZ>T`5`Z#%~- zk@I$7H_uj_-M>tgT2HOH#Dv{{Zyh8IQzb%_9b^z`xnhvUUL7euZVD5)%_QUlU{}E31HCo50#;DlQ3HYNh$W)GH$UcmWv8uXpzFIK1bdJgF!8n2d zWOAcsPl?f>U+pl(fNQY;`|@y86u}e@f#~vsnYOXoh|#r^`HNqS*!JD>Q+AptMpR%w ztI4#rP-Td4)4(c0N=5gt(^s+?G+?YNduNUlUjy6**b-ooymx-&9DapGL1$~k!=t?G zpE9qq*C<_%aAVWphCA_ATMjmYB&;5@!?}#h1HEz^G^CW5-Opu!=Z%`Ha&Y3h9+@r$ znHZ}?ZF?CsJ(LKwLt?41%Uf3Luh>tLvF3NKW$=biIn`8G;ShECxBH5MwF|`Bz*5t7!L}LU`+=0b)Vlm_9rrhh@7zF=j`6stY z7COn7;sO%iw7S6)1kZ&}#CQjCPWS!9<-Ot<14t=xNK+ z{?<+AZNP&+epSH^mNZQOnAq`rNrOrw^<{H#rnvDFRg2JJvk3geTBwlSm~UYXb8m3< zq;n=qEZpo#3!lFv!=hQ>-Nz|XDJS&q>c@?pZ+>-U0CG4%bIag}mH z^)Y^>G*PUwb6#8o)7#%E#o6H#pViN#miU=fjY>Ozr4Swx8-cy0^ne77HNpz3i>5Q6m6Yb2AKvOC;mu=9&Y_0lZ+E zH6?3;4Yz=L?}RMDA#l0bp;gs=5Jw3n*6*0+jY>tgK9tZK@q_oY2%M4}T=<-lm6CJ* ziZ6b%)=j?SzrrA5o4UZG@@%$@acg4sVL(q z%pj95Rrw%TlFV#X>WDOtr6r@ryBND5O08gsV+eyw^t0t15fiP(AV%2aql31Zo(Q0@ z8ZN@BVYp;K*f&yMIGtk#Vq(dLDS!PeKH)o2On1iM(-KaL6OX7nD8mNs``u#Es-GW9DXil8+0_l-B2 z3#$!7sz=+4mpVp-X*1}uwLL4>P&0gUsn3GCUdYU~n27gokIvQ5=KiF`MTLuhdfFi& zv?;@mh)^FO{XU#8rn^vmjGHt=UpbeW2e)p5fdj#m2xUZSUr=*Fw7!3oa@%|MY-8Z^RsPiirh@$l9g&7~y>bF&5~LvENQ3gf6{jX(Yo^3MsG6mSm}m z44$DG`#`)9Ea635gUR<+;zP@`0_DNj4z<}3uT$PO$Yk?lB5pBHIMOoa!h$V1Vwr7c zo;Pfm$kfo>#@L9#NCc0MJp%9XZY06}9-p_F3d;_)`M_+~)1FKr?K_M&~K99Ka5C`{$Mta}0U@l%xN~ zvg=)v69H0L=W2;ELQOdLsmP-#Sg)B6_4Q%7o0gi3Fl*7)h6J|#sQ0C&!DzrTv#T95 zJ+6$aY*`>|&Z%_pxJ0P=Lk-Hbp0wDZoXzcAA?aQVPALzav0h z9i?nGzEA(vQHyZl%f3h;2ZMBl)NaEVXUF|tVjE56<{mCt3NBzk;r{2yPngk7iS24_ z>L{UwO{3eOVTsi zT~6qXCUI)JULPs0<%SpC7o$3MX{q;F-AxiG`;76wFqrfg#lP?F}I;tXRXq+C0lGnys$}$F$7cEOkv#P15-Wxy%wY)Dtt3SCTU4CdW{(M zpEv5$G}EQF3U5FDQuvYoCZ063#DCy*nwwC+%k+|;cmZ{lKyVFv?8HInEfVSU&kVrT zak>JlnsJ<5Ef9($T_J5*g$5`t_rD^aYH^a>7Co%3Q5`?3uCV^l7a5>}rPcn>Z_4&0 zF=dBhUho5@19B4I+A=;u^*`-RA|boA;Vioth^7nSTSd3u$8k6z=?i3)jhg9epBs|R zzZ^g98ToB+h+g6~`laM4%Mih=adD;^>HQd#fjdHSSL?Hz4tEmFknN?u{o7l*>r^hR zG|@7nw|{zx1V^;j5X(hsDI`P$#xvCl1!&~iDqzwkY>95GZnF=H&XqFo#)J{pR%%k% zX8`-*b6OufIbCf6VfOfnLB4<}d)spkav5+=Pv|C8>S;=`m&Vdh>a8pNEXa2TvV0Wj z7|k$A8oeOX?rPS5>X%eMGidUoUuh!jc9N2>WMWkxOtmGjO(PxgpY%m(?|_4v5|mJZ z`d!92C^Pg?r%g38kKG+pM0O-mkv~!J&EGl=>COPv&OoVAASXcDBcA8!>PW8< zq+C*rEQZYsug;RuTNu^$4^Q_5qt0GLzcJWBci7#rCrEJqJm_i4#cv&>74~t}KN`v< zoEWO_Rx#a?RvVfDOz*b3oiwiv)!ELdnit=aKcmCEie=Q|IuG+b0v*WYks%eNfXyqh zz-!j(%i(lRgku~O0y5c$*J59|4}-*RLLGVLsxx5PL_zL>3CxpH@q0kNr(Ai6N@>1l zDH-CU$0yh%=X#qCKk#Ljlpes%TVFH!Z>p1=80L%}0xUG7u^ZF^lo>kmF3H58u-pF& z{sGvjYIr|JO&M#Ra@1st9fMlwyaoI>`iT`)05YL0Aw$Qs760hq`kCi<2rAE7pZNbG z9lQk&x+I?U#>5)(FaP+lmMX#y&)^`lbwGzBY&tyP;k*hDqEh;B&LsFD%o^o8HHvJ{ z1e{4SCB!EMdH)TEICgYYK~caCbfHqMf_JJSNTt-P7OI7DvbVYS`|WpiHt37ZVN}8csu?@l6hetSc=9^z^w+ z9ZlWIc|D;aptU;}qav)SGIUhby`_kluohpqUzUNm!K`=Jq;_K{n+40WoueAZF~*F3 z_+5(h$ssPN*xK5~mJ|h~A8Tpq5@Vl=o-!6Vxkyc#L+7Xw<0jP@)bzNlQ=(HcD!rYK zM2TgiEH|s?uTtz+BfP>XyLVhhEx2{_ZYwZ-9g|jkBFaBtfaRZB4%Rc| z7Ju|_FzHY>oCKV|_tM+CglA*uId%KT3sA10i+)4+_S5r17hO+>i8WAbo<~D3>1;G^kOH!3> z?U4Ka)*mDE!qLicVHp@5?Fy;t#4Mv?554I>CDSSpGtr4M7_ghUfRM|F5-ns~UYKxy zJg7Beu^8CWn!)_6$#-zkLv0dj%a{w>Fnm{!oqpX%Ff7T!0!{@nN*Kj{(78Hx^N!`> z*3_oio3p@(RB?{yfoFbWW(_rd(UYDIUh4jzbmo&DgPup|Z>jGIg!@wwHo*9`>8@Yz z5gZ3YXjGfdJcvWN!_BdKD)4-sw?Ri0TV`jQS-nC)h7U4l4x>OP{=@ufp9lso$Dm|6 zK{9Pfe4Syyb08MeqN6UJCkD$)%MEtVi-|K3-cP*A&>Qc^P72hn5VQw|hE2!MIf0|k z4dt2yNr19`dm7(=3>{XzGR2J$CzN(`OYLfD;7-{_sbZ&E0RM8VkuzZ5ETlM5%sAYN-;%7(rxLp(i3LT9Xz zmZ|gc04gcgn!a8eJ7wtLf;sk2vs$EUYFcZo#RS3B0_ZMzKEa()Njf5`MLM= z;7Rfn;YR9jI+QZxbxi6vsBhvd=pa$S2R}64X?Sq=+aL18+N?o^A%YɦHKNn0eC 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,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc;border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#2758ff}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #3389f9}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#aaa}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#2758ff;border-left-color:#2758ff}.sidebar-heading.clickable:hover{color:#2758ff}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#2758ff}a.sidebar-link.active{font-weight:600;color:#2758ff;border-left-color:#2758ff}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#2758ff}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;-ms-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#2758ff}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.home .hero .action-button{background-color:#2758ff}.home .hero .action-button:hover{background-color:#388cfa}.header-anchor{color:#9b35fa}.sidebar-group.is-sub-group>.sidebar-heading span{font-weight:700;color:#2c3e50}.sidebar-group.is-sub-group>p{opacity:1!important}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.sidebar-group-items.hidden{display: none;}a[id]{scroll-margin-top: 4.6rem;} .sidebar-heading-link {font-weight: 700; color:#2c3e50;} .sidebar-heading-link:hover {color:#2758ff;} .active.sidebar-heading-link {color:#2758ff;} diff --git a/docs/testing/README.md b/docs/testing/README.md deleted file mode 100644 index d7dfa259..00000000 --- a/docs/testing/README.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -permalink: 'testing/index.html' -title: Testing -section: guides -tags: - - guides ---- - -# Testing - -[//]: # 'AUTO INSERT HEADER PREPUBLISH' - -Testing is an important part of any software project. We have collected a set of libraries, tools and best practices to get you started with testing. - -Our setup is aimed specifically at working with minimal tooling, using the native es module loader of the browser just like our [developing setup](https://open-wc.org/developing/). We have special helper functions available for testing web components, but our setup works without web components as well. - -## Setup - -The easiest way to set up testing in your project is to use our project scaffolding. You can use this to create a new project or to upgrade an existing project: - -```bash -npm init @open-wc -``` - -### Manual setup - -To set up testing in your project manually, you will need to follow the instructions of the separate tools and packages below. - -## Step by step guide - -To help you get started with testing, we recommend [reading this article](https://dev.to/open-wc/testing-workflow-for-web-components-g73) for a great step by step guide. - -## Web Test Runner - -For testing in the browser, we recommend [Web Test Runner](https://modern-web.dev/docs/test-runner/overview/). With Web Test Runner, you can run unit tests on JavaScript code, as well as component tests on the rendered DOM elements. - -See the [this guide](https://modern-web.dev/guides/test-runner/getting-started/) for a step by step guide how to set up the test runner. - -## Testing libraries - -When testing with web test runner, we recommend the following libraries: - -- [mocha](https://mochajs.org/) for setting up the testing structure. -- [chai](https://www.chaijs.com/) for doing assertions -- [@open-wc/testing-helpers](https://open-wc.org/testing/testing-helpers.html) for setting up test fixtures and helper functions -- [@open-wc/semantic-dom-diff](https://open-wc.org/testing/semantic-dom-diff.html) for snapshot testing the rendered HTML -- [@open-wc/chai-axe-a11y](https://open-wc.org/testing/testing-chai-a11y-axe.html) for testing accessibility - -To use these testing libraries, we recommend [@open-wc/testing](https://open-wc.org/testing/testing.html). This is an opinionated package that combines and configures many of these testing libraries, to minimize the amount of ceremony required to set up tests. For example, it exports chai with plugins already registered. - -## Integration testing - -A large part of the tests that are traditionally done with selenium can be done with Web Test Runner. However, there are still tests that should be run after an application has been deployed. We're still looking for good solutions here, help us improve this documentation by making a pull request! diff --git a/docs/testing/semantic-dom-diff.md b/docs/testing/semantic-dom-diff.md deleted file mode 120000 index 3dd0fd40..00000000 --- a/docs/testing/semantic-dom-diff.md +++ /dev/null @@ -1 +0,0 @@ -../../packages/semantic-dom-diff/README.md \ No newline at end of file diff --git a/docs/testing/testing-chai-a11y-axe.md b/docs/testing/testing-chai-a11y-axe.md deleted file mode 120000 index 6dc49350..00000000 --- a/docs/testing/testing-chai-a11y-axe.md +++ /dev/null @@ -1 +0,0 @@ -../../packages/chai-a11y-axe/README.md \ No newline at end of file diff --git a/docs/testing/testing-helpers.md b/docs/testing/testing-helpers.md deleted file mode 120000 index 65a8a0c3..00000000 --- a/docs/testing/testing-helpers.md +++ /dev/null @@ -1 +0,0 @@ -../../packages/testing-helpers/README.md \ No newline at end of file diff --git a/docs/testing/testing.md b/docs/testing/testing.md deleted file mode 120000 index 48223027..00000000 --- a/docs/testing/testing.md +++ /dev/null @@ -1 +0,0 @@ -../../packages/testing/README.md \ No newline at end of file diff --git a/docs/webmanifest.json b/docs/webmanifest.json new file mode 100644 index 00000000..f65241e2 --- /dev/null +++ b/docs/webmanifest.json @@ -0,0 +1,29 @@ +{ + "name": "Open Web Componets", + "short_name": "Open Web Components", + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone", + "orientation": "portrait", + "Scope": "/", + "start_url": "/", + "icons": [ + { + "src": "./_merged_assets/icons/android-chrome-192x192.png", + "sizes": "128x128", + "type": "image/png" + }, + { + "src": "./_merged_assets/icons/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "./_merged_assets/icons/maskable-icon.jpg", + "sizes": "1024x1024", + "type": "image/jpg", + "purpose": "any maskable" + } + ], + "splash_pages": null +} diff --git a/netlify.toml b/netlify.toml index af7d7a86..f4a39934 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,7 +1,7 @@ -[[plugins]] -package = "netlify-plugin-checklinks" - -[plugins.inputs] -pretty = true - -skipPatterns = ['open-wc-org.netlify.app'] +# [[plugins]] +# package = "netlify-plugin-checklinks" +# +# [plugins.inputs] +# pretty = true +# +# skipPatterns = ['open-wc-org.netlify.app'] diff --git a/package.json b/package.json index 76c522c9..55ea1271 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,6 @@ "license": "MIT", "scripts": { "codelabs:build": "node ./packages/codelabs/build-codelabs.js", - "docs:build": "rimraf _site && node cli-build.js", - "docs:serve-build": "node packages/es-dev-server/dist/cli.js -o docs/", - "docs:start": "node cli-start.js", "format": "npm run format:eslint && npm run format:prettier", "format:eslint": "eslint --ext .js,.html . --fix", "format:prettier": "prettier \"**/*.{js,md}\" \"**/package.json\" --write", @@ -15,13 +12,12 @@ "lint:prettier": "prettier \"**/*.{js,md}\" \"**/package.json\" --check", "lint:types": "npm run types", "lint:versions": "node ./scripts/lint-versions.js", - "postinstall": "patch-package && npm run setup", + "postinstall": "npm run setup", "release": "changeset publish && yarn format", "setup": "npm run setup:ts-configs", "setup:ts-configs": "node scripts/generate-ts-configs.mjs", - "site:build": "npm run docs:build && node scripts/workspaces-scripts-bin.mjs site:build", - "site:start": "npm run docs:start", - "start": "npm run docs:start", + "site:build": "node scripts/workspaces-scripts-bin.mjs site:build && npm run codelabs:build && rocket build", + "start": "rocket start", "test": "yarn test:web && yarn test:node", "test:node": "mocha --exit --retries 3 --timeout 10000 \"packages/*/test-node/**/*.test.{ts,js,mjs,cjs}\" ", "test:node:watch": "mocha --watch \"packages/*/test-node/**/*.test.{ts,js,mjs,cjs}\" ", @@ -33,7 +29,9 @@ "update-dependency": "node scripts/update-dependency.js" }, "dependencies": { - "patch-package": "^6.2.2" + "@d4kmor/cli": "^0.5.6", + "@d4kmor/launch": "^0.4.10", + "@d4kmor/search": "^0.1.2" }, "devDependencies": { "@11ty/eleventy": "^0.11.0", @@ -67,6 +65,8 @@ "lit-element": "^2.2.1", "mocha": "^6.2.2", "mock-require": "^3.0.3", + "netlify-cli": "^2.63.2", + "node-fetch": "^2.6.1", "npm-run-all": "4.1.3", "prettier": "^2.0.0", "prettier-plugin-package": "^1.0.0", diff --git a/packages/building-utils/package.json b/packages/building-utils/package.json index a1b8a968..84edf003 100644 --- a/packages/building-utils/package.json +++ b/packages/building-utils/package.json @@ -16,7 +16,7 @@ "scripts": { "test": "npm run test:node", "test:node": "mocha test-node", - "test:update-snapshots": "mocha test/**/*.test.js test/*.test.js --update-snapshots" + "test:update-snapshots": "mocha test-node/**/*.test.js test-node/*.test.js --update-snapshots" }, "files": [ "*.js", diff --git a/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-multiple-legacy.html b/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-multiple-legacy.html index a53722f5..5e7df5d0 100644 --- a/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-multiple-legacy.html +++ b/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-multiple-legacy.html @@ -1 +1 @@ -My app

    Hello world!

    \ No newline at end of file +My app

    Hello world!

    \ No newline at end of file diff --git a/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-multiple.html b/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-multiple.html index 31f607f7..080724bc 100644 --- a/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-multiple.html +++ b/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-multiple.html @@ -1 +1 @@ -My app

    Hello world!

    \ No newline at end of file +My app

    Hello world!

    \ No newline at end of file diff --git a/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-wc.html b/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-wc.html index a6830f45..0aede7a3 100644 --- a/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-wc.html +++ b/packages/building-utils/test-node/index-html/snapshots/create-index-html/polyfill-wc.html @@ -1 +1 @@ -My app

    Hello world!

    \ No newline at end of file +My app

    Hello world!

    \ No newline at end of file diff --git a/packages/codelabs/src/basics/web-components.md b/packages/codelabs/src/basics/web-components.md index 9db009de..6b3227d5 100644 --- a/packages/codelabs/src/basics/web-components.md +++ b/packages/codelabs/src/basics/web-components.md @@ -356,9 +356,7 @@ To see the encapsulation in action, we can add the same content of our template - +

    Hello world!

    @@ -382,9 +380,7 @@ Similarly we can add styles to the main page, and you will see that it doesn't a - +