Repository: ProjectEvergreen/greenwood
Pull request #611 (2021-05-20 21:47:38)

upgrade website to `lit@2`
<!--
## Submitting a Pull Request
We love contributions and appreciate any help you can offer!
-->

## Related Issue
related to this discussion on SSR
https://github.com/ProjectEvergreen/greenwood/discussions/576 and includes fix for #675 

In order for the website, using Lit to benefit from SSR, we would need to be on the latest version so figured I would start work on the discussion by introducing **Lit@2** as a first step

## Summary of Changes
1. [Upgraded website to **Lit@2**](https://lit.dev/docs/releases/upgrade/) and got website working with 1st party components (see TODO section 👇 )
1. Added `ExportAllDeclaration` case when walking a module with acorn
1. Did a little refactoring around setting entries into `importMap` and added bare import "re-map" support
1. Ensured backwards compatibility locally with [my website project](https://github.com/thegreenhouseio/www.thegreenhouse.io)
1. Per [Lit's website](https://lit.dev/docs/tools/requirements/#polyfills), shipping _polyfill-support.js_ with our polyfill plugin for now, but will refactor that into its own plugin(s) as part of #709 where dedicated Lit plugins will be created

Also, **LitElement** bundle size dropped significantly, going from 27KB -> 15KB!  ⚡ 

> _Will be doing some further research after this on how to actually implement SSR and hydration with Lit, as another PR (or more!)_

## TODO
1. [x] Need to get **@evergreen-wc** upgraded to **Lit@2**, or vendor for the short term
    - opened issue to initiate discussion - https://github.com/hutchgrant/evergreen-web-components/issues/33
1. [x] Need to get **lit-redux-router** upgraded to **Lit@2** (for SPA mode spec)
    - opened issue to initiate discussion https://github.com/fernandopasik/lit-redux-router/issues/55
    - re-enable SPA `mode` spec
1. [x] Get specs passing
1. [x] Needs #672 merged and rebased into this PR
1. [x] Find cause of big logo flash / FOUC - after more debugging, may be related to observations seen in the below TODO - https://github.com/ProjectEvergreen/greenwood/issues/675#issuecomment-914629130
1. [x] find a solution to https://github.com/ProjectEvergreen/greenwood/issues/675
1. [x] Breakout **plugin-node-modules** changes into standalone PR that should get merged first - https://github.com/ProjectEvergreen/greenwood/pull/613
1. [x] Lit perf benchmark
1. [x] Update website documentation and samples and merge (only when `Lit@2` is out of RC)
1. [x] Potential [(new) issue resulting from doing a rebase](https://github.com/ProjectEvergreen/greenwood/pull/611#issuecomment-926018893)? 😞  - created #739
1. [x] Communicate final [lit bumps to relevant dependencies](https://github.com/ProjectEvergreen/greenwood/pull/611#issuecomment-928502480) - using Yarn resolutions for now
    - ~~**lit-redux-router**~~ - [already bumped](https://github.com/fernandopasik/lit-redux-router/commit/3009dba27f7c767351808cbbef46174b4fe55613#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519R107), and updated the project here
    - **@evergreen**-wc - https://github.com/hutchgrant/evergreen-web-components/issues/34
    - **@lion** - https://github.com/ing-bank/lion/pull/1489
1. [x] ship [lit polyfills to prod as well](https://lit.dev/docs/tools/requirements/#polyfills) like with **@webcomponentsjs** bundles?

---

As this has a couple upstream dependencies, it may be worth considering breaking out the _rollup.config.js_ change from this PR.

thescientist13: Noticed after testing with #649 that **lit-html** has a `dependency` on **@types/trusted-types**
https://github.com/lit/lit/blob/main/packages/lit-html/package.json#L82

Appears it [could to be (better) documented on the **lit** end](https://github.com/lit/lit/issues/1203).

As observed in #649, its `package.json#main` is just [an empty string](https://unpkg.com/@types/trusted-types@2.0.2/index.js) fro what I see
![Screen Shot 2021-07-04 at 1 53 30 PM](https://user-images.githubusercontent.com/895923/124394863-40e4a780-dccf-11eb-9108-446ad143a38c.png)

So it needs to be accounted for as a dependency which has been done in #649 and will get filtered out from the `importMap`.  For test scaffolding updated this PR though.
thescientist13: Hmm, it seems pulling in the latest from master not only exacerbates the home page issue, but completely borks pages but only for the `build` command 😞  😨 
<img width="1606" alt="Screen Shot 2021-07-28 at 11 21 26 AM" src="https://user-images.githubusercontent.com/895923/127349476-f821e40d-228f-4b9b-8d98-6d4080ab0235.png">
<img width="1652" alt="Screen Shot 2021-07-28 at 11 21 36 AM" src="https://user-images.githubusercontent.com/895923/127349479-16338094-3cd4-4bd7-8af6-bfbbee725a1d.png">
<img width="1672" alt="Screen Shot 2021-07-28 at 11 22 42 AM" src="https://user-images.githubusercontent.com/895923/127349692-6db093c7-9157-4835-9a61-dcf16ba6ac5d.png">

`yarn develop is still fine, surprisingly, so good for us on that one I guess?  😅 
thescientist13: hmm, still keeps showing old build agent, not new ones.... can't get the CI status to show up here :/
thescientist13: Hmm, (only?) after rebasing it seems that occasionally the manifestation of #675 comes back, even though Shady DOM looks correct in the raw HTML
![Screen Shot 2021-09-23 at 1 26 10 PM](https://user-images.githubusercontent.com/895923/134556055-eaad13a8-dd7d-4866-a1a2-7a8760da7254.png)
![Screen Shot 2021-09-23 at 11 16 52 AM](https://user-images.githubusercontent.com/895923/134556056-7e208909-5c03-4461-8c93-9d2f016377a4.png)

Will have to test on the pre-rebase branch to see if I can reproduce or not and if it's perhaps a Lit regression or not?

Patch:
diff --git a/package.json b/package.json
index 11293720..b093718b 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,9 @@
     "lint:css": "stylelint \"./www/**/*.js\", \"./www/**/*.css\"",
     "lint": "ls-lint && yarn lint:js && yarn lint:ts && yarn lint:css"
   },
+  "resolutions": {
+    "lit": "^2.0.0"
+  },
   "devDependencies": {
     "@ls-lint/ls-lint": "^1.9.2",
     "@typescript-eslint/eslint-plugin": "^4.28.2",
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 5f1a18f1..24320844 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -25,7 +25,7 @@
   "dependencies": {
     "@rollup/plugin-node-resolve": "^9.0.0",
     "@rollup/plugin-replace": "^2.3.4",
-    "@webcomponents/webcomponentsjs": "^2.4.4",
+    "@webcomponents/webcomponentsjs": "^2.6.0",
     "acorn": "^8.0.1",
     "acorn-walk": "^8.0.0",
     "commander": "^2.20.0",
@@ -50,12 +50,12 @@
   },
   "devDependencies": {
     "@babel/runtime": "^7.10.4",
-    "@lion/button": "~0.12.0",
-    "@lion/calendar": "~0.15.0",
+    "@lion/button": "^0.14.3",
+    "@lion/calendar": "^0.16.5",
     "@mapbox/rehype-prism": "^0.5.0",
     "@types/trusted-types": "^2.0.2",
-    "lit-element": "^2.4.0",
-    "lit-redux-router": "^0.17.1",
+    "lit": "^2.0.0",
+    "lit-redux-router": "~0.20.0",
     "lodash-es": "^4.17.20",
     "postcss-nested": "^4.1.2",
     "pwa-helpers": "^0.9.1",
diff --git a/packages/cli/src/plugins/resource/plugin-standard-html.js b/packages/cli/src/plugins/resource/plugin-standard-html.js
index 234c8ea2..cc073421 100644
--- a/packages/cli/src/plugins/resource/plugin-standard-html.js
+++ b/packages/cli/src/plugins/resource/plugin-standard-html.js
@@ -197,11 +197,24 @@ const getAppTemplate = (contents, templatesDir, customImports = [], contextPlugi
   return appTemplateContents;
 };
 
-const getUserScripts = (contents) => {
-  // polyfill chromium for WCs support
+const getUserScripts = (contents, context) => {
+  // polyfill chromium for WC support
+  // https://lit.dev/docs/tools/requirements/#polyfills
   if (process.env.__GWD_COMMAND__ === 'build') { // eslint-disable-line no-underscore-dangle
+    const { projectDirectory, userWorkspace } = context;
+    const dependencies = fs.existsSync(path.join(userWorkspace, 'package.json')) // handle monorepos first
+      ? JSON.parse(fs.readFileSync(path.join(userWorkspace, 'package.json'), 'utf-8')).dependencies
+      : fs.existsSync(path.join(projectDirectory, 'package.json'))
+        ? JSON.parse(fs.readFileSync(path.join(projectDirectory, 'package.json'), 'utf-8')).dependencies
+        : {};
+
+    const litPolyfill = dependencies && dependencies.lit
+      ? '<script src="/node_modules/lit/polyfill-support.js"></script>\n'
+      : '';
+
     contents = contents.replace('<head>', `
       <head>
+        ${litPolyfill}
         <script src="/node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js"></script>
     `);
   }
@@ -353,7 +366,7 @@ class StandardHtmlResource extends ResourceInterface {
         }
 
         body = getAppTemplate(body, userTemplatesDir, customImports, contextPlugins);  
-        body = getUserScripts(body, customImports);
+        body = getUserScripts(body, this.compilation.context);
         body = getMetaContent(normalizedUrl.replace(/\\/g, '/'), config, body);
         
         if (processedMarkdown) {
@@ -404,6 +417,7 @@ class StandardHtmlResource extends ResourceInterface {
         if (hasHead && hasHead.length > 0) {
           let contents = hasHead[0];
 
+          contents = contents.replace(/<script src="(.*lit\/polyfill-support.js)"><\/script>/, '');
           contents = contents.replace(/<script src="(.*webcomponents-bundle.js)"><\/script>/, '');
           contents = contents.replace(/<script type="importmap-shim">.*?<\/script>/s, '');
           contents = contents.replace(/<script defer="" src="(.*es-module-shims.js)"><\/script>/, '');
diff --git a/packages/plugin-polyfills/README.md b/packages/plugin-polyfills/README.md
index 1fedafdf..7891ef48 100644
--- a/packages/plugin-polyfills/README.md
+++ b/packages/plugin-polyfills/README.md
@@ -1,7 +1,7 @@
 # @greenwood/plugin-polyfills
 
 ## Overview
-A Greenwood plugin adding support for [Web Component related polyfills](https://github.com/webcomponents/polyfills) for browsers that need support for part of the Web Component spec like **Custom Elements** and **Shadow DOM**.  It uses [feature detection](https://github.com/webcomponents/polyfills/tree/master/packages/webcomponentsjs#using-webcomponents-loaderjs) to determine what polyfills are actually needed based on the user's browser, to ensure only the minumum extra code is loaded.
+A Greenwood plugin adding support for [Web Component related polyfills](https://github.com/webcomponents/polyfills) for browsers that need support for part of the Web Component spec like **Custom Elements** and **Shadow DOM**.  It uses [feature detection](https://github.com/webcomponents/polyfills/tree/master/packages/webcomponentsjs#using-webcomponents-loaderjs) to determine what polyfills are actually needed based on the user's browser, to ensure only the minumum extra code is loaded.  If you are using **Lit@2**, it also loads the needed [_polyfill-support.js_](https://lit.dev/docs/tools/requirements/#polyfills) file.
 
 As of right now, you will likely need this plugin to load additional polyfills if you want to support these browser(s):
 
diff --git a/packages/plugin-polyfills/package.json b/packages/plugin-polyfills/package.json
index 26bcfb4d..000be6ad 100644
--- a/packages/plugin-polyfills/package.json
+++ b/packages/plugin-polyfills/package.json
@@ -22,7 +22,7 @@
     "@greenwood/cli": "^0.4.0"
   },
   "dependencies": {
-    "@webcomponents/webcomponentsjs": "^2.3.0"
+    "@webcomponents/webcomponentsjs": "^2.6.0"
   },
   "devDependencies": {
     "@greenwood/cli": "^0.16.1"
diff --git a/packages/plugin-polyfills/src/index.js b/packages/plugin-polyfills/src/index.js
index 3ab49ab2..64331c19 100644
--- a/packages/plugin-polyfills/src/index.js
+++ b/packages/plugin-polyfills/src/index.js
@@ -16,10 +16,19 @@ class PolyfillsResource extends ResourceInterface {
     const polyfillPackageName = '@webcomponents/webcomponentsjs';
     const filename = 'webcomponents-loader.js';
     const polyfillNodeModulesLocation = getNodeModulesLocationForPackage(polyfillPackageName);
+    const litNodeModulesLocation = getNodeModulesLocationForPackage('lit');
 
     return new Promise(async (resolve, reject) => {
       try {
-        const { outputDir } = this.compilation.context;
+        const { outputDir, projectDirectory, userWorkspace } = this.compilation.context;
+        const dependencies = fs.existsSync(path.join(userWorkspace, 'package.json')) // handle monorepos first
+          ? JSON.parse(fs.readFileSync(path.join(userWorkspace, 'package.json'), 'utf-8')).dependencies
+          : fs.existsSync(path.join(projectDirectory, 'package.json'))
+            ? JSON.parse(fs.readFileSync(path.join(projectDirectory, 'package.json'), 'utf-8')).dependencies
+            : {};
+        const litPolyfill = dependencies && dependencies.lit
+          ? '<script src="/node_modules/lit/polyfill-support.js"></script>\n'
+          : '';
         const polyfillFiles = [
           'webcomponents-loader.js',
           ...fs.readdirSync(path.join(polyfillNodeModulesLocation, 'bundles')).map(file => {
@@ -40,8 +49,16 @@ class PolyfillsResource extends ResourceInterface {
             : Promise.resolve();
         }));
 
+        if (litPolyfill !== '' && !fs.existsSync(path.join(outputDir, 'polyfill-support.js'))) {
+          await fs.promises.copyFile(
+            path.join(litNodeModulesLocation, 'polyfill-support.js'),
+            path.join(outputDir, 'polyfill-support.js')
+          );
+        }
+
         const newHtml = body.replace('<head>', `
           <head>
+            ${litPolyfill}
             <script src="/node_modules/${polyfillPackageName}/${filename}"></script>
         `);
 
diff --git a/www/components/banner/banner.js b/www/components/banner/banner.js
index cf482e74..446a0f23 100644
--- a/www/components/banner/banner.js
+++ b/www/components/banner/banner.js
@@ -1,4 +1,4 @@
-import { css, html, LitElement, unsafeCSS } from 'lit-element';
+import { css, html, LitElement, unsafeCSS } from 'lit';
 import bannerCss from './banner.css?type=css';
 import buttonCss from './button.css?type=css';
 import '@evergreen-wc/eve-button';
diff --git a/www/components/card/card.js b/www/components/card/card.js
index 208d9128..debde13f 100644
--- a/www/components/card/card.js
+++ b/www/components/card/card.js
@@ -1,4 +1,4 @@
-import { css, html, LitElement, unsafeCSS } from 'lit-element';
+import { css, html, LitElement, unsafeCSS } from 'lit';
 import cardCss from './card.css?type=css';
 
 class Card extends LitElement {
diff --git a/www/components/footer/footer.js b/www/components/footer/footer.js
index a5229ec7..562e0009 100644
--- a/www/components/footer/footer.js
+++ b/www/components/footer/footer.js
@@ -1,4 +1,4 @@
-import { css, html, LitElement, unsafeCSS } from 'lit-element';
+import { css, html, LitElement, unsafeCSS } from 'lit';
 import json from '../../package.json?type=json';
 import footerCss from './footer.css?type=css';
 
diff --git a/www/components/header/header.js b/www/components/header/header.js
index 1f08417f..db6779c3 100644
--- a/www/components/header/header.js
+++ b/www/components/header/header.js
@@ -1,4 +1,4 @@
-import { css, html, LitElement, unsafeCSS } from 'lit-element';
+import { css, html, LitElement, unsafeCSS } from 'lit';
 import client from '@greenwood/plugin-graphql/core/client';
 import MenuQuery from '@greenwood/plugin-graphql/queries/menu';
 import '@evergreen-wc/eve-container';
diff --git a/www/components/icons/chevron-down.js b/www/components/icons/chevron-down.js
index 437c78f7..b6d5eaa9 100644
--- a/www/components/icons/chevron-down.js
+++ b/www/components/icons/chevron-down.js
@@ -1,4 +1,4 @@
-import { svg } from 'lit-element';
+import { svg } from 'lit';
 
 const chevronDwn = svg`
   <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
diff --git a/www/components/icons/chevron-right.js b/www/components/icons/chevron-right.js
index a4c79396..5dddc3d4 100644
--- a/www/components/icons/chevron-right.js
+++ b/www/components/icons/chevron-right.js
@@ -1,4 +1,4 @@
-import { svg } from 'lit-element';
+import { svg } from 'lit';
 
 const chevronRt = svg`
   <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512">
diff --git a/www/components/icons/github-icon.js b/www/components/icons/github-icon.js
index b9d02952..bdb537af 100644
--- a/www/components/icons/github-icon.js
+++ b/www/components/icons/github-icon.js
@@ -1,4 +1,4 @@
-import { svg } from 'lit-element';
+import { svg } from 'lit';
 
 const githubIcon = svg`<svg
   height="35"
diff --git a/www/components/icons/slack-icon.js b/www/components/icons/slack-icon.js
index b244c5c9..ee6ab499 100644
--- a/www/components/icons/slack-icon.js
+++ b/www/components/icons/slack-icon.js
@@ -1,4 +1,4 @@
-import { svg } from 'lit-element';
+import { svg } from 'lit';
 
 const slackIcon = svg`<svg
   width="35"
diff --git a/www/components/icons/twitter-icon.js b/www/components/icons/twitter-icon.js
index 3909b591..c5979951 100644
--- a/www/components/icons/twitter-icon.js
+++ b/www/components/icons/twitter-icon.js
@@ -1,4 +1,4 @@
-import { svg } from 'lit-element';
+import { svg } from 'lit';
 
 const twitterIcon = svg`<?xml version="1.0" ?>
   <!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
diff --git a/www/components/scroll/scroll.js b/www/components/scroll/scroll.js
index 46a7d7bb..833711e8 100644
--- a/www/components/scroll/scroll.js
+++ b/www/components/scroll/scroll.js
@@ -1,4 +1,4 @@
-import { html, LitElement } from 'lit-element';
+import { html, LitElement } from 'lit';
 
 class scroll extends LitElement {
   constructor() {
diff --git a/www/components/shelf/shelf.js b/www/components/shelf/shelf.js
index 057e2f73..3cb06c81 100644
--- a/www/components/shelf/shelf.js
+++ b/www/components/shelf/shelf.js
@@ -1,4 +1,4 @@
-import { css, html, LitElement, unsafeCSS } from 'lit-element';
+import { css, html, LitElement, unsafeCSS } from 'lit';
 import client from '@greenwood/plugin-graphql/core/client';
 import MenuQuery from '@greenwood/plugin-graphql/queries/menu';
 import shelfCss from './shelf.css?type=css';
diff --git a/www/components/social-icons/social-icons.js b/www/components/social-icons/social-icons.js
index 6621bdf7..5be95bc6 100644
--- a/www/components/social-icons/social-icons.js
+++ b/www/components/social-icons/social-icons.js
@@ -1,4 +1,4 @@
-import { css, html, LitElement, unsafeCSS } from 'lit-element';
+import { css, html, LitElement, unsafeCSS } from 'lit';
 import socialCss from './social-icons.css?type=css';
 import githubIcon from '../icons/github-icon.js';
 import twitterIcon from '../icons/twitter-icon.js';
diff --git a/www/package.json b/www/package.json
index 3b03d695..89c28ea5 100644
--- a/www/package.json
+++ b/www/package.json
@@ -7,9 +7,9 @@
   "author": "Owen Buckley <owen@thegreenhouse.io>",
   "license": "MIT",
   "dependencies": {
-    "@evergreen-wc/eve-button": "^0.0.9",
-    "@evergreen-wc/eve-container": "^0.0.10",
-    "lit-element": "^2.4.0",
+    "@evergreen-wc/eve-button": "^0.1.1",
+    "@evergreen-wc/eve-container": "^0.1.1",
+    "lit": "^2.0.0",
     "prismjs": "^1.21.0"
   },
   "devDependencies": {
diff --git a/www/pages/docs/component-model.md b/www/pages/docs/component-model.md
index b74ecb65..7660c97d 100644
--- a/www/pages/docs/component-model.md
+++ b/www/pages/docs/component-model.md
@@ -77,7 +77,7 @@ An alternative like [**LitElement**](https://lit.dev/) would work the same way.
 
 _src/components/greeting.js_
 ```javascript
-import { html, LitElement } from 'lit-element';
+import { html, LitElement } from 'lit';
 
 class GreetingComponent extends LitElement {
 
@@ -118,7 +118,7 @@ customElements.define('x-greeting', GreetingComponent);
 
 
 > Some notes / recommendations about ShadowDOM from [our research](https://github.com/ProjectEvergreen/greenwood/pull/454)
-> - [`<slot>` should be named](https://github.com/Polymer/lit-element/issues/824#issuecomment-535574662)
+> - [`<slot>` should be named](https://github.com/Polymer/lit/issues/824#issuecomment-535574662)
 > - `<slot>` only supports a [shallow (one) level of nesting](https://javascript.info/slots-composition).  A `<slot>` tag must be within a direct descendant of its `:host`.
 > ```html
 > <h3>Content from inside the custom element. (inside HTMLElement)</h3>
diff --git a/www/pages/docs/css-and-images.md b/www/pages/docs/css-and-images.md
index 17af0b25..3b1d24a3 100644
--- a/www/pages/docs/css-and-images.md
+++ b/www/pages/docs/css-and-images.md
@@ -65,7 +65,7 @@ You can do the same in your HTML
 > If you like an all-the-things-in-JS approach, Greenwood can be extended with [plugins](/plugins/) to support "webpack" like behavior as seen in the below example:
 >
 > ```javascript
-> import { html, LitElement } from 'lit-element';
+> import { html, LitElement } from 'lit';
 > import headerCss from './header.css';
 >
 > class HeaderComponent extends LitElement {
diff --git a/www/pages/docs/data.md b/www/pages/docs/data.md
index 2fb79bad..ff322e34 100644
--- a/www/pages/docs/data.md
+++ b/www/pages/docs/data.md
@@ -312,7 +312,7 @@ Then you can use `import` anywhere in your components!
 Now of course comes the fun part, actually seeing it all come together.  Here is an example from the Greenwood website's own [header component](https://github.com/ProjectEvergreen/greenwood/blob/master/www/components/header/header.js).
 
 ```javascript
-import { LitElement, html } from 'lit-element';
+import { LitElement, html } from 'lit';
 import client from '@greenwood/plugin-graphql/core/client';
 import MenuQuery from '@greenwood/plugin-graphql/queries/menu';
 
diff --git a/www/pages/docs/menus.md b/www/pages/docs/menus.md
index 8e0a6d79..dfd95cd3 100644
--- a/www/pages/docs/menus.md
+++ b/www/pages/docs/menus.md
@@ -80,7 +80,7 @@ Now in order to use our navigation menu within a component we need to query it v
 `navigation.js`
 
 ```js
-import { LitElement, html } from 'lit-element';
+import { LitElement, html } from 'lit';
 import client from '@greenwood/plugin-graphql/core/client';
 import MenuQuery from '@greenwood/plugin-graphql/queries/menu';
 
diff --git a/yarn.lock b/yarn.lock
index d30d3804..2f00052c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1232,19 +1232,19 @@
   resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
   integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
 
-"@evergreen-wc/eve-button@^0.0.9":
-  version "0.0.9"
-  resolved "https://registry.yarnpkg.com/@evergreen-wc/eve-button/-/eve-button-0.0.9.tgz#831eb39bbfc2990205edf4bb2b2ef8a92e86574c"
-  integrity sha512-peNYzu9/3a2glSBncOAJgb7o+C1KkHJefg/aOxfqS1SxPOVh/x30+uQ43iLJUkygg6ApyRoaka5E6ruLjQiylQ==
+"@evergreen-wc/eve-button@^0.1.1":
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/@evergreen-wc/eve-button/-/eve-button-0.1.1.tgz#352d02efe6458c8ff433d2d36d9b291066e99794"
+  integrity sha512-ALPaycuPXJP7CbWJ9M31L8VcchBVZoVRQLPV6rucdklVPtUyIPkUhO5Ewln2OZbZXv/R+f5eWCbdRUFeqlSk7w==
   dependencies:
-    lit-element "^2.0.1"
+    lit "^2.0.0-rc.2"
 
-"@evergreen-wc/eve-container@^0.0.10":
-  version "0.0.10"
-  resolved "https://registry.yarnpkg.com/@evergreen-wc/eve-container/-/eve-container-0.0.10.tgz#f27f9db8fc1e7ebdbd4e6afdfe3993189c00cfd8"
-  integrity sha512-ZkHhKcjcgKeUAbcjYowTmD6DYGu0mZoJtWef8qF/1XAbIZPsZhs+6QgQEuvergCOdm8SlBypjB0FjDOcYDY5Cw==
+"@evergreen-wc/eve-container@^0.1.1":
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/@evergreen-wc/eve-container/-/eve-container-0.1.1.tgz#768956d1d789de9e9236f993fbe47a6a0ee744e1"
+  integrity sha512-F35u9tBuyrIGwBgpPgB0OiF4CFHkgrQhSFAkRTFqAATTLBrIWZxtNC57k81lm4szBsUhwMnU5qZQJq0M555UmQ==
   dependencies:
-    lit-element "^2.0.1"
+    lit "^2.0.0-rc.2"
 
 "@evocateur/libnpmaccess@^3.1.2":
   version "3.1.2"
@@ -2010,40 +2010,44 @@
     npmlog "^4.1.2"
     write-file-atomic "^2.3.0"
 
-"@lion/button@~0.12.0":
-  version "0.12.0"
-  resolved "https://registry.yarnpkg.com/@lion/button/-/button-0.12.0.tgz#e93d3772bf4f3384b76598b3d58efd9a9f18b897"
-  integrity sha512-kJ/NkSrnc6hPEtV7ICSGx9cH+H/NiBjSUoEPR6pp3+MQTzEwIfoSEPBe88xMflRLqnrq8GhjPKdhH8Ce/G5yRw==
+"@lion/button@^0.14.3":
+  version "0.14.3"
+  resolved "https://registry.yarnpkg.com/@lion/button/-/button-0.14.3.tgz#5d067f07c72e0da1343066a941297cc8d3390964"
+  integrity sha512-QQ79Nio3HcsF7wX72wi45DA2dzoCsH9bULYEh6E8xEZqM7gF9CMIUSKgTVZ19V9XKycbRLfKjh6dAAH8aamzFw==
   dependencies:
-    "@lion/core" "0.17.0"
+    "@lion/core" "0.18.3"
 
-"@lion/calendar@~0.15.0":
-  version "0.15.0"
-  resolved "https://registry.yarnpkg.com/@lion/calendar/-/calendar-0.15.0.tgz#9655448250805fd4247b1d1dad003b48682d6407"
-  integrity sha512-MaIZpxuF+tUAwPejI5/bns8VbJXftbAABk+i247fnUvI0Xi4tu0agKE2A13o9RXKQLm2IY/ohLWVjAffBuM9+A==
+"@lion/calendar@^0.16.5":
+  version "0.16.5"
+  resolved "https://registry.yarnpkg.com/@lion/calendar/-/calendar-0.16.5.tgz#3988c0fd86b504b2548f27cc0c209d2eec245a9a"
+  integrity sha512-UnRUtzSym53v+ykCsjq1BpLEaaGupe8RO1F+46ABNiB9fqTXqUz8w9miK10IEyfZgUsf0biQMrJlG9KrZn1l9w==
   dependencies:
-    "@lion/core" "0.17.0"
-    "@lion/localize" "0.19.0"
+    "@lion/core" "0.18.3"
+    "@lion/localize" "0.21.1"
 
-"@lion/core@0.17.0":
-  version "0.17.0"
-  resolved "https://registry.yarnpkg.com/@lion/core/-/core-0.17.0.tgz#0af5d7873c1e110fd57d54c331fb22dd01702bb3"
-  integrity sha512-s4z7qxzX+bgMPyxRiZcLuBd3BePPvQRkgTlUxKf+4ao0QBgebuNyoFHUWvZifuWH2gFmcORy3aL7+0HYNMkqoQ==
+"@lion/core@0.18.3":
+  version "0.18.3"
+  resolved "https://registry.yarnpkg.com/@lion/core/-/core-0.18.3.tgz#fbf649e23b5712d5998ef8233013f48fcc598012"
+  integrity sha512-BDRuwLnsyg/kDE382xBoe4ytsEsiDkov0h3VN66Y9tvMpnChf6BxAkfY7g+LlxgbsNihmZnykE+eGE7cfP5PSw==
   dependencies:
     "@open-wc/dedupe-mixin" "^1.2.18"
-    "@open-wc/scoped-elements" "^1.3.3"
-    lit-element "~2.4.0"
-    lit-html "^1.3.0"
+    "@open-wc/scoped-elements" "^2.0.0-next.3"
+    lit "^2.0.0-rc.2"
 
-"@lion/localize@0.19.0":
-  version "0.19.0"
-  resolved "https://registry.yarnpkg.com/@lion/localize/-/localize-0.19.0.tgz#7df884554f1a14d9184241c20bc1939139c566d3"
-  integrity sha512-zkFu5j2eiZYxtmweM96psO7rvzMZqdaX6/+wQwABKGmKdg02I4h1kwdfFvRw5MWZNiFlftyxES/yMY/Q2VJZuA==
+"@lion/localize@0.21.1":
+  version "0.21.1"
+  resolved "https://registry.yarnpkg.com/@lion/localize/-/localize-0.21.1.tgz#f1b97879448c5953a3a80bf3310ece7d88f59f66"
+  integrity sha512-v9Jb0ZGmCqdaHX3zTqDnGo3cX7L4H5kb9hcTWd3Cvppujr/r3x7XOzWB7tJo6fk49l3El2V7SoV8/FtVvJfK2w==
   dependencies:
     "@bundled-es-modules/message-format" "6.0.4"
-    "@lion/core" "0.17.0"
+    "@lion/core" "0.18.3"
     singleton-manager "1.4.2"
 
+"@lit/reactive-element@^1.0.0", "@lit/reactive-element@^1.0.0-rc.1":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.0.0.tgz#7b6e6a85709cda0370c47e425ac2f3b553696a4b"
+  integrity sha512-Kpgenb8UNFsKCsFhggiVvUkCbcFQSd6N8hffYEEGjz27/4rw3cTSsmP9t3q1EHOAsdum60Wo64HvuZDFpEwexA==
+
 "@ls-lint/ls-lint@^1.9.2":
   version "1.9.2"
   resolved "https://registry.yarnpkg.com/@ls-lint/ls-lint/-/ls-lint-1.9.2.tgz#689f1f4c06072823a726802ba167340efcefe19c"
@@ -2206,13 +2210,14 @@
   resolved "https://registry.yarnpkg.com/@open-wc/dedupe-mixin/-/dedupe-mixin-1.3.0.tgz#0df5d438285fc3482838786ee81895318f0ff778"
   integrity sha512-UfdK1MPnR6T7f3svzzYBfu3qBkkZ/KsPhcpc3JYhsUY4hbpwNF9wEQtD4Z+/mRqMTJrKg++YSxIxE0FBhY3RIw==
 
-"@open-wc/scoped-elements@^1.3.3":
-  version "1.3.4"
-  resolved "https://registry.yarnpkg.com/@open-wc/scoped-elements/-/scoped-elements-1.3.4.tgz#96e27e13c8b09668ee631e9fccd5623a05af5cc2"
-  integrity sha512-WD+ObocdzcFCpBxnc8bQa7NoATeA+tJrK0/c/yV1Nx4leV+1PmJNNu+WCcuckBEGd0Op6FP8w1TidoqmVVba6g==
+"@open-wc/scoped-elements@^2.0.0-next.3":
+  version "2.0.0-next.5"
+  resolved "https://registry.yarnpkg.com/@open-wc/scoped-elements/-/scoped-elements-2.0.0-next.5.tgz#46ce9abe3bedbb8c7dc098839f21fe442a93c0c1"
+  integrity sha512-yprRHBRDDKhS3CacWi8+UJHG+avhMUO8k6X91AQiHHOcIO4P9E8v2skdGg4bhE2fF/tg5wVex8Sa5ZlsZ21pDg==
   dependencies:
+    "@lit/reactive-element" "^1.0.0-rc.1"
     "@open-wc/dedupe-mixin" "^1.3.0"
-    lit-html "^1.0.0"
+    "@webcomponents/scoped-custom-element-registry" "0.0.2"
 
 "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
   version "1.1.2"
@@ -2708,10 +2713,15 @@
   resolved "https://registry.yarnpkg.com/@ungap/global-this/-/global-this-0.4.4.tgz#8a1b2cfcd3e26e079a847daba879308c924dd695"
   integrity sha512-mHkm6FvepJECMNthFuIgpAEFmPOk71UyXuIxYfjytvFTnSDBIz7jmViO+LfHI/AjrazWije0PnSP3+/NlwzqtA==
 
-"@webcomponents/webcomponentsjs@^2.3.0", "@webcomponents/webcomponentsjs@^2.4.4":
-  version "2.4.4"
-  resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.4.4.tgz#14b7e78da47f8f0071ff96c35335b871534179bc"
-  integrity sha512-UWXZYbaDLLfhm+xONXTiDciyhOSwKRrZieGQHFMSMGSxY4mbjZ5uYzOKgnuX0luYFvjJw32G3r0sCwQZPJIR4Q==
+"@webcomponents/scoped-custom-element-registry@0.0.2":
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/@webcomponents/scoped-custom-element-registry/-/scoped-custom-element-registry-0.0.2.tgz#c863d163cb39c60063808e5ae23e06a1766fbe5f"
+  integrity sha512-lKCoZfKoE3FHvmmj2ytaLBB8Grxp4HaxfSzaGlIZN6xXnOILfpCO0PFJkAxanefLGJWMho4kRY5PhgxWFhmSOw==
+
+"@webcomponents/webcomponentsjs@^2.6.0":
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.6.0.tgz#7d1674c40bddf0c6dd974c44ffd34512fe7274ff"
+  integrity sha512-Moog+Smx3ORTbWwuPqoclr+uvfLnciVd6wdCaVscHPrxbmQ/IJKm3wbB7hpzJtXWjAq2l/6QMlO85aZiOdtv5Q==
 
 "@wry/context@^0.5.2":
   version "0.5.4"
@@ -7486,24 +7496,36 @@ list-item@^1.1.1:
     is-number "^2.1.0"
     repeat-string "^1.5.2"
 
-lit-element@^2.0.1, lit-element@^2.4.0, lit-element@~2.4.0:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-2.4.0.tgz#b22607a037a8fc08f5a80736dddf7f3f5d401452"
-  integrity sha512-pBGLglxyhq/Prk2H91nA0KByq/hx/wssJBQFiYqXhGDvEnY31PRGYf1RglVzyLeRysu0IHm2K0P196uLLWmwFg==
+lit-element@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-3.0.0.tgz#0e9e64ddbc3dd6a8da4d6fbfadbc070a54cf0597"
+  integrity sha512-oPqRhhBBhs+AlI62QLwtWQNU/bNK/h2L1jI3IDroqZubo6XVAkyNy2dW3CRfjij8mrNlY7wULOfyyKKOnfEePA==
   dependencies:
-    lit-html "^1.1.1"
+    "@lit/reactive-element" "^1.0.0"
+    lit-html "^2.0.0"
 
-lit-html@^1.0.0, lit-html@^1.1.1, lit-html@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-1.3.0.tgz#c80f3cc5793a6dea6c07172be90a70ab20e56034"
-  integrity sha512-0Q1bwmaFH9O14vycPHw8C/IeHMk/uSDldVLIefu/kfbTBGIc44KGH6A8p1bDfxUfHdc8q6Ct7kQklWoHgr4t1Q==
+lit-html@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-2.0.0.tgz#ba6779269c382e66d7403a96ed99516ccc3d658b"
+  integrity sha512-tJsCapCmc0vtLj6harqd6HfCxnlt/RSkgowtz4SC9dFE3nSL38Tb33I5HMDiyJsRjQZRTgpVsahrnDrR9wg27w==
+  dependencies:
+    "@types/trusted-types" "^2.0.2"
 
-lit-redux-router@^0.17.1:
-  version "0.17.1"
-  resolved "https://registry.yarnpkg.com/lit-redux-router/-/lit-redux-router-0.17.1.tgz#ed0874c06b29c5b2ec7cfda37141adde34f8ce25"
-  integrity sha512-6Dgq087OF5DggJkEJcyOK9LjVDD4hZWgtwkQ0itdoGs4Hg7hVclIzcxJk/UgAZpR84mFkXVEubEtIAuXXaZJ0w==
+lit-redux-router@~0.20.0:
+  version "0.20.0"
+  resolved "https://registry.yarnpkg.com/lit-redux-router/-/lit-redux-router-0.20.0.tgz#8b0771d535b2909a23323e70eff0bfb45e575a96"
+  integrity sha512-dexzkjLN7owCT1SVF/rz63tihahhnOuHEf1Tcb6+U+fmZjRRYcuFxW0FTgjz3RNU96Wv78bZkSbNvTw3H1fKXA==
   dependencies:
-    regexparam "^1.3.0"
+    regexparam "^2.0.0"
+
+lit@^2.0.0, lit@^2.0.0-rc.2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/lit/-/lit-2.0.0.tgz#7710095dc518d9858dde579e9c76b9eed71e98ba"
+  integrity sha512-pqi5O/wVzQ9Bn4ERRoYQlt1EAUWyY5Wv888vzpoArbtChc+zfUv1XohRqSdtQZYCogl0eHKd+MQwymg2XJfECg==
+  dependencies:
+    "@lit/reactive-element" "^1.0.0"
+    lit-element "^3.0.0"
+    lit-html "^2.0.0"
 
 livereload-js@^3.1.0:
   version "3.3.1"
@@ -10252,10 +10274,10 @@ regex-not@^1.0.0, regex-not@^1.0.2:
     extend-shallow "^3.0.2"
     safe-regex "^1.1.0"
 
-regexparam@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-1.3.0.tgz#2fe42c93e32a40eff6235d635e0ffa344b92965f"
-  integrity sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==
+regexparam@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-2.0.0.tgz#059476767d5f5f87f735fc7922d133fd1a118c8c"
+  integrity sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==
 
 regexpp@^2.0.1:
   version "2.0.1"


Test patch:
diff --git a/packages/cli/test/cases/build.config.mode-spa/build.config.mode-spa.spec.js b/packages/cli/test/cases/build.config.mode-spa/build.config.mode-spa.spec.js
index 78f54df8..89bc0c8c 100644
--- a/packages/cli/test/cases/build.config.mode-spa/build.config.mode-spa.spec.js
+++ b/packages/cli/test/cases/build.config.mode-spa/build.config.mode-spa.spec.js
@@ -48,34 +48,64 @@ describe('Build Greenwood With: ', function() {
   describe(LABEL, function() {
 
     before(async function() {
-      const litElementLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lib/*.js`, 
-        `${outputPath}/node_modules/lit-element/lib/`
+      const lit = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/*.js`, 
+        `${outputPath}/node_modules/lit/`
+      );
+      const litDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/decorators/*.js`, 
+        `${outputPath}/node_modules/lit/decorators/`
+      );
+      const litDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/directives/*.js`, 
+        `${outputPath}/node_modules/lit/directives/`
+      );
+      const litPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/package.json`, 
+        `${outputPath}/node_modules/lit/`
       );
       const litElement = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lit-element.js`, 
+        `${process.cwd()}/node_modules/lit-element/*.js`, 
         `${outputPath}/node_modules/lit-element/`
       );
       const litElementPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-element/package.json`, 
         `${outputPath}/node_modules/lit-element/`
       );
+      const litElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-element/decorators/*.js`, 
+        `${outputPath}/node_modules/lit-element/decorators/`
+      );
       const litHtml = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lit-html.js`, 
+        `${process.cwd()}/node_modules/lit-html/*.js`, 
         `${outputPath}/node_modules/lit-html/`
       );
       const litHtmlPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-html/package.json`, 
         `${outputPath}/node_modules/lit-html/`
       );
-      const litHtmlLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lib/*.js`, 
-        `${outputPath}/node_modules/lit-html/lib/`
-      );
       const litHtmlDirectives = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/directives/*.js`,
+        `${process.cwd()}/node_modules/lit-html/directives/*.js`, 
         `${outputPath}/node_modules/lit-html/directives/`
       );
+      // lit-html has a dependency on this
+      // https://github.com/lit/lit/blob/main/packages/lit-html/package.json#L82
+      const trustedTypes = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@types/trusted-types/package.json`,
+        `${outputPath}/node_modules/@types/trusted-types/`
+      );
+      const litReactiveElement = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
+      );
+      const litReactiveElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/decorators/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/decorators/`
+      );
+      const litReactiveElementPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/package.json`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
+      );
       const litReduxRouterPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-redux-router/package.json`,
         `${outputPath}/node_modules/lit-redux-router/`
@@ -147,13 +177,20 @@ describe('Build Greenwood With: ', function() {
 
       await runner.setup(outputPath, [
         ...getSetupFiles(outputPath),
-        ...litElementLibs,
-        ...litElement,
+        ...lit,
+        ...litPackageJson,
+        ...litDirectives,
+        ...litDecorators,
         ...litElementPackageJson,
+        ...litElement,
+        ...litElementDecorators,
         ...litHtmlPackageJson,
         ...litHtml,
-        ...litHtmlLibs,
         ...litHtmlDirectives,
+        ...trustedTypes,
+        ...litReactiveElement,
+        ...litReactiveElementDecorators,
+        ...litReactiveElementPackageJson,
         ...litReduxRouterPackageJson,
         ...litReduxRouter,
         ...litReduxRouterLibs,
diff --git a/packages/cli/test/cases/build.config.mode-spa/package.json b/packages/cli/test/cases/build.config.mode-spa/package.json
index d820e6f6..c649d107 100644
--- a/packages/cli/test/cases/build.config.mode-spa/package.json
+++ b/packages/cli/test/cases/build.config.mode-spa/package.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
-    "lit-element": "^2.4.0",
-    "lit-redux-router": "^0.17.1",
+    "lit": "^2.0.0",
+    "lit-redux-router": "~0.20.0",
     "pwa-helpers": "^0.9.1",
     "redux": "^4.0.5",
     "redux-thunk": "^2.3.0"
diff --git a/packages/cli/test/cases/build.config.mode-spa/src/components/footer.js b/packages/cli/test/cases/build.config.mode-spa/src/components/footer.js
index e0a5f2ac..cad38627 100644
--- a/packages/cli/test/cases/build.config.mode-spa/src/components/footer.js
+++ b/packages/cli/test/cases/build.config.mode-spa/src/components/footer.js
@@ -1,4 +1,4 @@
-import { css, html, LitElement } from 'lit-element';
+import { css, html, LitElement } from 'lit';
 
 class FooterComponent extends LitElement {
 
diff --git a/packages/cli/test/cases/build.config.mode-spa/src/index.js b/packages/cli/test/cases/build.config.mode-spa/src/index.js
index e4f7baf4..491c4bb4 100644
--- a/packages/cli/test/cases/build.config.mode-spa/src/index.js
+++ b/packages/cli/test/cases/build.config.mode-spa/src/index.js
@@ -1,4 +1,4 @@
-import { html, LitElement } from 'lit-element';
+import { html, LitElement } from 'lit';
 import { connectRouter } from 'lit-redux-router';
 import { applyMiddleware, createStore, compose, combineReducers } from 'redux';
 import { lazyReducerEnhancer } from 'pwa-helpers';
@@ -16,12 +16,12 @@ class MyApp extends LitElement {
       <div class="app-content">
         <lit-route 
           path="/" 
-          component="app-home"
+          component="app-route-home"
           .resolve="${() => import('./routes/home.js')}"
         ></lit-route>
         <lit-route 
           path="/about" 
-          component="app-about"
+          component="app-route-about"
           .resolve="${() => import('./routes/about.js')}"
         ></lit-route>
       </div>
diff --git a/packages/cli/test/cases/build.config.mode-spa/src/routes/about.js b/packages/cli/test/cases/build.config.mode-spa/src/routes/about.js
index 5e80bcc2..7b33310f 100644
--- a/packages/cli/test/cases/build.config.mode-spa/src/routes/about.js
+++ b/packages/cli/test/cases/build.config.mode-spa/src/routes/about.js
@@ -1,4 +1,4 @@
-import { html, LitElement } from 'lit-element';
+import { html, LitElement } from 'lit';
 
 class AppAbout extends LitElement {
   render() {
@@ -6,4 +6,4 @@ class AppAbout extends LitElement {
   }
 }
 
-customElements.define('app-about', AppAbout);
\ No newline at end of file
+customElements.define('app-route-about', AppAbout);
\ No newline at end of file
diff --git a/packages/cli/test/cases/build.config.mode-spa/src/routes/home.js b/packages/cli/test/cases/build.config.mode-spa/src/routes/home.js
index c0a0f73e..778915d9 100644
--- a/packages/cli/test/cases/build.config.mode-spa/src/routes/home.js
+++ b/packages/cli/test/cases/build.config.mode-spa/src/routes/home.js
@@ -1,4 +1,4 @@
-import { html, LitElement } from 'lit-element';
+import { html, LitElement } from 'lit';
 
 class AppHome extends LitElement {
   render() {
@@ -6,4 +6,4 @@ class AppHome extends LitElement {
   }
 }
 
-customElements.define('app-home', AppHome);
\ No newline at end of file
+customElements.define('app-route-home', AppHome);
\ No newline at end of file
diff --git a/packages/cli/test/cases/build.default.import-node-modules/build.default.import-node-modules.spec.js b/packages/cli/test/cases/build.default.import-node-modules/build.default.import-node-modules.spec.js
index 2dd19ebc..edeb98f6 100644
--- a/packages/cli/test/cases/build.default.import-node-modules/build.default.import-node-modules.spec.js
+++ b/packages/cli/test/cases/build.default.import-node-modules/build.default.import-node-modules.spec.js
@@ -42,29 +42,63 @@ describe('Build Greenwood With: ', function() {
     let dom;
 
     before(async function() {
-      const litElementLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lib/*.js`, 
-        `${outputPath}/node_modules/lit-element/lib/`
+      const lit = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/*.js`, 
+        `${outputPath}/node_modules/lit/`
+      );
+      const litDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/decorators/*.js`, 
+        `${outputPath}/node_modules/lit/decorators/`
+      );
+      const litDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/directives/*.js`, 
+        `${outputPath}/node_modules/lit/directives/`
+      );
+      const litPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/package.json`, 
+        `${outputPath}/node_modules/lit/`
       );
       const litElement = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lit-element.js`, 
+        `${process.cwd()}/node_modules/lit-element/*.js`, 
         `${outputPath}/node_modules/lit-element/`
       );
       const litElementPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-element/package.json`, 
         `${outputPath}/node_modules/lit-element/`
       );
+      const litElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-element/decorators/*.js`, 
+        `${outputPath}/node_modules/lit-element/decorators/`
+      );
       const litHtml = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lit-html.js`, 
+        `${process.cwd()}/node_modules/lit-html/*.js`, 
         `${outputPath}/node_modules/lit-html/`
       );
       const litHtmlPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-html/package.json`, 
         `${outputPath}/node_modules/lit-html/`
       );
-      const litHtmlLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lib/*.js`, 
-        `${outputPath}/node_modules/lit-html/lib/`
+      const litHtmlDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-html/directives/*.js`, 
+        `${outputPath}/node_modules/lit-html/directives/`
+      );
+      // lit-html has a dependency on this
+      // https://github.com/lit/lit/blob/main/packages/lit-html/package.json#L82
+      const trustedTypes = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@types/trusted-types/package.json`,
+        `${outputPath}/node_modules/@types/trusted-types/`
+      );
+      const litReactiveElement = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
+      );
+      const litReactiveElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/decorators/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/decorators/`
+      );
+      const litReactiveElementPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/package.json`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
       );
       const reduxLibs = await getDependencyFiles(
         `${process.cwd()}/node_modules/redux/es/redux.mjs`, 
@@ -137,12 +171,20 @@ describe('Build Greenwood With: ', function() {
         ...tokensLibsPackageJson,
         ...symbolLibs,
         ...symobolLibsPackageJson,
+        ...lit,
+        ...litPackageJson,
+        ...litDirectives,
+        ...litDecorators,
         ...litElementPackageJson,
         ...litElement,
-        ...litElementLibs, 
+        ...litElementDecorators,
         ...litHtmlPackageJson,
         ...litHtml,
-        ...litHtmlLibs,
+        ...litHtmlDirectives,
+        ...trustedTypes,
+        ...litReactiveElement,
+        ...litReactiveElementDecorators,
+        ...litReactiveElementPackageJson,
         ...lodashEsLibs,
         ...lodashEsLibsPackageJson,
         ...pwaHelpersPackageJson,    
@@ -167,18 +209,18 @@ describe('Build Greenwood With: ', function() {
       });
 
       it('should have the total expected number of .js file in the output directory', async function() {
-        expect(await glob.promise(path.join(this.context.publicDir, '*.js'))).to.have.lengthOf(4);
+        expect(await glob.promise(path.join(this.context.publicDir, '*.js'))).to.have.lengthOf(3);
       });
 
       it('should have the expected main.js file in the output directory', async function() {
         expect(await glob.promise(path.join(this.context.publicDir, 'main.*.js'))).to.have.lengthOf(1);
       });
 
-      it('should have the expected output from main.js for lit-element (ESM) in the page output', async function() {
+      it('should have the expected output from main.js for lit (ESM) in the page output', async function() {
         const litOutput = dom.window.document.querySelectorAll('body > .output-lit');
         
         expect(litOutput.length).to.be.equal(1);
-        expect(litOutput[0].textContent).to.be.equal('import from lit-element Y2xhc3MgTGl0RWxl');
+        expect(litOutput[0].textContent).to.be.equal('import from lit W29iamVjdCBIVE1M');
       });
 
       it('should have the expected output from main.js for lodash-es (ESM) in the page output', async function() {
@@ -201,6 +243,13 @@ describe('Build Greenwood With: ', function() {
         expect(reduxOutput.length).to.be.equal(1);
         expect(reduxOutput[0].textContent).to.be.equal('import from redux ZnVuY3Rpb24gbyh0');
       });
+
+      it('should have the expected output from main.js for try / catch error of no error text', async function() {
+        const errorOutput = dom.window.document.querySelectorAll('body > .output-error');
+        
+        expect(errorOutput.length).to.be.equal(1);
+        expect(errorOutput[0].textContent).to.be.equal('');
+      });
     });
 
     describe('<script> tag with inline code in the <head> tag', function() {
@@ -210,26 +259,22 @@ describe('Build Greenwood With: ', function() {
         expect(scriptTagsInline.length).to.be.equal(2);
       });
 
-      it('should have the expected lit-element.js file in the output directory', async function() {
+      it('should have the expected lit related files in the output directory', async function() {
         expect(await glob.promise(path.join(this.context.publicDir, 'lit-element.*.js'))).to.have.lengthOf(1);
       });
 
-      it('should have the expected lit-html.js files in the output directory', async function() {
-        expect(await glob.promise(path.join(this.context.publicDir, 'lit-html.cdc8faae.js'))).to.have.lengthOf(1);
-      });
-
       it('should have the expected inline node_modules content in the first inline script', async function() {
         const inlineScriptTag = dom.window.document.querySelectorAll('head > script:not([src])')[0];
         
         expect(inlineScriptTag.textContent.replace('\n', '')).to
           // eslint-disable-next-line max-len
-          .equal('import"/lit-html.d69ea26f.js";import"/lit-element.ea26fec7.js";document.getElementsByClassName("output-script-inline")[0].innerHTML="script tag module inline"//# sourceMappingURL=1008626452-scratch.743d0af4.js.map');
+          .equal('import"/lit-element.23ccf9b1.js";import"/lit-html.5ab358db.js";document.getElementsByClassName("output-script-inline")[0].innerHTML="script tag module inline"//# sourceMappingURL=171628389-scratch.f6bbfcb9.js.map');
       });
 
       it('should have the expected inline node_modules content in the second inline script tag which should include extra code from rollup', async function() {
         const inlineScriptTag = dom.window.document.querySelectorAll('head > script:not([src])')[1];
-        
-        expect(inlineScriptTag.textContent.replace('\n', '')).to.equal('import"/lit-html.d69ea26f.js";import"/lit-element.ea26fec7.js";//# sourceMappingURL=1832243663-scratch.01361a49.js.map');
+
+        expect(inlineScriptTag.textContent.replace('\n', '')).to.equal('import"/lit-element.23ccf9b1.js";import"/lit-html.5ab358db.js";//# sourceMappingURL=866723778-scratch.8010d3c7.js.map');
       });
 
       it('should have the expected output from the first inline <script> tag in the page output', async function() {
@@ -244,14 +289,14 @@ describe('Build Greenwood With: ', function() {
       it('should have one <script src="..."> tag for lit-html loaded in the <head> tag', function() {
         const scriptTagsInline = dom.window.document.querySelectorAll('head > script[src]');
         const litScriptTags = Array.prototype.slice.call(scriptTagsInline).filter(script => {
-          return (/lit.*.js/).test(script.src);
+          return (/lit-.*.js/).test(script.src);
         });
 
         expect(litScriptTags.length).to.be.equal(1);
       });
 
       it('should have the expected lit-html.js files in the output directory', async function() {
-        expect(await glob.promise(path.join(this.context.publicDir, 'lit-html.d69ea26f.js'))).to.have.lengthOf(1);
+        expect(await glob.promise(path.join(this.context.publicDir, 'lit-html.*.js'))).to.have.lengthOf(1);
       });
     });
 
diff --git a/packages/cli/test/cases/build.default.import-node-modules/package.json b/packages/cli/test/cases/build.default.import-node-modules/package.json
index 2bff94f4..14648a46 100644
--- a/packages/cli/test/cases/build.default.import-node-modules/package.json
+++ b/packages/cli/test/cases/build.default.import-node-modules/package.json
@@ -1,7 +1,7 @@
 {
   "name": "test-import-node-modules",
   "dependencies": {
-    "lit-element": "^2.4.0",
+    "lit": "^2.0.0",
     "lodash-es": "^4.17.20",
     "pwa-helpers": "^0.9.1",
     "redux": "^4.0.5",
diff --git a/packages/cli/test/cases/build.default.import-node-modules/src/pages/index.html b/packages/cli/test/cases/build.default.import-node-modules/src/pages/index.html
index 54167c84..0e041a0e 100644
--- a/packages/cli/test/cases/build.default.import-node-modules/src/pages/index.html
+++ b/packages/cli/test/cases/build.default.import-node-modules/src/pages/index.html
@@ -4,12 +4,12 @@
   <head>
     <script type="module" src="../scripts/main.js"></script>
     <script type="module">
-      import { html } from 'lit-element';
+      import { html } from 'lit';
 
       document.getElementsByClassName('output-script-inline')[0].innerHTML = 'script tag module inline';
     </script>
     <script type="module">
-      import { html } from 'lit-element';
+      import { html } from 'lit';
     </script>
     <script type="module" src="/node_modules/lit-html/lit-html.js"></script>
     <link rel="stylesheet" href="/node_modules/prismjs/themes/prism-tomorrow.css"></link>
@@ -21,6 +21,7 @@
     <span class="output-pwa"></span>
     <span class="output-redux"></span>
     <span class="output-script-inline"></span>
+    <span class="output-error"></span>
   </body>
 
 </html>
\ No newline at end of file
diff --git a/packages/cli/test/cases/build.default.import-node-modules/src/scripts/main.js b/packages/cli/test/cases/build.default.import-node-modules/src/scripts/main.js
index dd58e67f..8276a796 100644
--- a/packages/cli/test/cases/build.default.import-node-modules/src/scripts/main.js
+++ b/packages/cli/test/cases/build.default.import-node-modules/src/scripts/main.js
@@ -1,9 +1,13 @@
-import { LitElement } from 'lit-element';
+import { LitElement } from 'lit';
 import { defaults } from 'lodash-es';
 import { lazyReducerEnhancer } from 'pwa-helpers';
 import { createStore } from 'redux';
 
-document.getElementsByClassName('output-lit')[0].innerHTML = `import from lit-element ${btoa(LitElement).slice(0, 16)}`;
-document.getElementsByClassName('output-lodash')[0].innerHTML = `import from lodash-es ${JSON.stringify(defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }))}`;
-document.getElementsByClassName('output-pwa')[0].innerHTML = `import from pwa-helpers ${btoa(lazyReducerEnhancer).slice(0, 16)}`;
-document.getElementsByClassName('output-redux')[0].innerHTML = `import from redux ${btoa(createStore).slice(0, 16)}`;
\ No newline at end of file
+try {
+  document.getElementsByClassName('output-lit')[0].innerHTML = `import from lit ${btoa(LitElement.prototype).slice(0, 16)}`;
+  document.getElementsByClassName('output-lodash')[0].innerHTML = `import from lodash-es ${JSON.stringify(defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }))}`;
+  document.getElementsByClassName('output-pwa')[0].innerHTML = `import from pwa-helpers ${btoa(lazyReducerEnhancer).slice(0, 16)}`;
+  document.getElementsByClassName('output-redux')[0].innerHTML = `import from redux ${btoa(createStore).slice(0, 16)}`;
+} catch (e) {
+  document.getElementsByClassName('output-error')[0].innerHTML = e;
+}
\ No newline at end of file
diff --git a/packages/cli/test/cases/develop.default/develop.default.spec.js b/packages/cli/test/cases/develop.default/develop.default.spec.js
index f7f6642b..6cbf6b79 100644
--- a/packages/cli/test/cases/develop.default/develop.default.spec.js
+++ b/packages/cli/test/cases/develop.default/develop.default.spec.js
@@ -86,29 +86,57 @@ describe('Develop Greenwood With: ', function() {
   describe(LABEL, function() {
 
     before(async function() {
-      const litElementLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lib/*.js`,
-        `${outputPath}/node_modules/lit-element/lib/`
+      const lit = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/*.js`,
+        `${outputPath}/node_modules/lit/`
+      );
+      const litDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/decorators/*.js`,
+        `${outputPath}/node_modules/lit/decorators/`
+      );
+      const litDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/directives/*.js`,
+        `${outputPath}/node_modules/lit/directives/`
+      );
+      const litPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/package.json`,
+        `${outputPath}/node_modules/lit/`
       );
       const litElement = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lit-element.js`,
+        `${process.cwd()}/node_modules/lit-element/*.js`,
         `${outputPath}/node_modules/lit-element/`
       );
       const litElementPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-element/package.json`,
         `${outputPath}/node_modules/lit-element/`
       );
+      const litElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-element/decorators/*.js`,
+        `${outputPath}/node_modules/lit-element/decorators/`
+      );
       const litHtml = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lit-html.js`,
+        `${process.cwd()}/node_modules/lit-html/*.js`,
         `${outputPath}/node_modules/lit-html/`
       );
       const litHtmlPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-html/package.json`,
         `${outputPath}/node_modules/lit-html/`
       );
-      const litHtmlLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lib/*.js`,
-        `${outputPath}/node_modules/lit-html/lib/`
+      const litHtmlDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-html/directives/*.js`,
+        `${outputPath}/node_modules/lit-html/directives/`
+      );
+      const litReactiveElement = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/*.js`,
+        `${outputPath}/node_modules/@lit/reactive-element/`
+      );
+      const litReactiveElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/decorators/*.js`,
+        `${outputPath}/node_modules/@lit/reactive-element/decorators/`
+      );
+      const litReactiveElementPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/package.json`,
+        `${outputPath}/node_modules/@lit/reactive-element/`
       );
       const litHtmlSourceMap = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-html/lit-html.js.map`,
@@ -202,6 +230,14 @@ describe('Develop Greenwood With: ', function() {
         `${process.cwd()}/node_modules/@types/trusted-types/package.json`,
         `${outputPath}/node_modules/@types/trusted-types/`
       );
+      const scopedCustomElementRegistryPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@webcomponents/scoped-custom-element-registry/package.json`,
+        `${outputPath}/node_modules/@webcomponents/scoped-custom-element-registry/`
+      );
+      const scopedCustomElementRegistryLibs = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@webcomponents/scoped-custom-element-registry/*.js`,
+        `${outputPath}/node_modules/@webcomponents/scoped-custom-element-registry/`
+      );
 
       // manually copy all these @babel/runtime files recursively since there are too many of them to do it individually
       const babelRuntimeLibs = await rreaddir(`${process.cwd()}/node_modules/@babel/runtime`);
@@ -234,12 +270,19 @@ describe('Develop Greenwood With: ', function() {
 
       await runner.setup(outputPath, [
         ...getSetupFiles(outputPath),
+        ...lit,
+        ...litPackageJson,
+        ...litDirectives,
+        ...litDecorators,
         ...litElementPackageJson,
         ...litElement,
-        ...litElementLibs,
+        ...litElementDecorators,
         ...litHtmlPackageJson,
         ...litHtml,
-        ...litHtmlLibs,
+        ...litHtmlDirectives,
+        ...litReactiveElement,
+        ...litReactiveElementDecorators,
+        ...litReactiveElementPackageJson,
         ...litHtmlSourceMap,
         ...simpleCss,
         ...simpleCssPackageJson,
@@ -264,7 +307,9 @@ describe('Develop Greenwood With: ', function() {
         ...singletonManagerLibs,
         ...trustedTypesPackageJson,
         ...regeneratorRuntimeLibs,
-        ...regeneratorRuntimeLibsPackageJson
+        ...regeneratorRuntimeLibsPackageJson,
+        ...scopedCustomElementRegistryPackageJson,
+        ...scopedCustomElementRegistryLibs
       ]);
 
       return new Promise(async (resolve) => {
@@ -316,16 +361,16 @@ describe('Develop Greenwood With: ', function() {
       it('should return an import map shim <script> in the <head> of the document', function(done) {
         const importMapTag = dom.window.document.querySelectorAll('head > script[type="importmap-shim"]')[0];
         const importMap = JSON.parse(importMapTag.textContent).imports;
+        const expectedImportMap = require('./import-map.snapshot.json');
 
-        expect(importMap['lit-html']).to.equal('/node_modules/lit-html/lit-html.js');
-        expect(importMap['lit-element']).to.equal('/node_modules/lit-element/lit-element.js');
-        expect(importMap['lit-html/lit-html.js']).to.equal('/node_modules/lit-html/lit-html.js');
-        expect(importMap['lit-html/lib/shady-render.js']).to.equal('/node_modules/lit-html/lib/shady-render.js');
+        Object.keys(expectedImportMap).forEach((key) => {
+          expect(importMap[key]).to.equal(expectedImportMap[key]);
+        });
 
         // https://github.com/ProjectEvergreen/greenwood/issues/715
         // export maps with "flat" entries
         expect(importMap['@lion/button']).to.equal('/node_modules/@lion/button/index.js');
-        expect(importMap['@lion/button/define']).to.equal('/node_modules/@lion/button/lion-button.js');
+        expect(importMap['@lion/button/define']).to.equal('/node_modules/@lion/button/define.js');
 
         // https://github.com/ProjectEvergreen/greenwood/issues/715
         // transient dependency import / exports
@@ -660,7 +705,7 @@ describe('Develop Greenwood With: ', function() {
       });
 
       it('should return the correct response body', function(done) {
-        expect(response.body).to.contain('Copyright (c) 2017 The Polymer Project Authors');
+        expect(response.body).to.contain('Copyright 2017 Google LLC');
         done();
       });
     });
diff --git a/packages/cli/test/cases/develop.default/import-map.snapshot.json b/packages/cli/test/cases/develop.default/import-map.snapshot.json
new file mode 100644
index 00000000..7f37c15f
--- /dev/null
+++ b/packages/cli/test/cases/develop.default/import-map.snapshot.json
@@ -0,0 +1,274 @@
+{
+  "@babel/runtime/helpers/typeof": "/node_modules/@babel/runtime/helpers/typeof/index.js",
+  "@babel/runtime/helpers/esm/typeof": "/node_modules/@babel/runtime/helpers/typeof/_index.mjs",
+  "@babel/runtime/helpers/jsx": "/node_modules/@babel/runtime/helpers/jsx/index.js",
+  "@babel/runtime/helpers/esm/jsx": "/node_modules/@babel/runtime/helpers/jsx/_index.mjs",
+  "@babel/runtime/helpers/asyncIterator": "/node_modules/@babel/runtime/helpers/asyncIterator/index.js",
+  "@babel/runtime/helpers/esm/asyncIterator": "/node_modules/@babel/runtime/helpers/asyncIterator/_index.mjs",
+  "@babel/runtime/helpers/AwaitValue": "/node_modules/@babel/runtime/helpers/AwaitValue/index.js",
+  "@babel/runtime/helpers/esm/AwaitValue": "/node_modules/@babel/runtime/helpers/AwaitValue/_index.mjs",
+  "@babel/runtime/helpers/AsyncGenerator": "/node_modules/@babel/runtime/helpers/AsyncGenerator/index.js",
+  "@babel/runtime/helpers/esm/AsyncGenerator": "/node_modules/@babel/runtime/helpers/AsyncGenerator/_index.mjs",
+  "@babel/runtime/helpers/wrapAsyncGenerator": "/node_modules/@babel/runtime/helpers/wrapAsyncGenerator/index.js",
+  "@babel/runtime/helpers/esm/wrapAsyncGenerator": "/node_modules/@babel/runtime/helpers/wrapAsyncGenerator/_index.mjs",
+  "@babel/runtime/helpers/awaitAsyncGenerator": "/node_modules/@babel/runtime/helpers/awaitAsyncGenerator/index.js",
+  "@babel/runtime/helpers/esm/awaitAsyncGenerator": "/node_modules/@babel/runtime/helpers/awaitAsyncGenerator/_index.mjs",
+  "@babel/runtime/helpers/asyncGeneratorDelegate": "/node_modules/@babel/runtime/helpers/asyncGeneratorDelegate/index.js",
+  "@babel/runtime/helpers/esm/asyncGeneratorDelegate": "/node_modules/@babel/runtime/helpers/asyncGeneratorDelegate/_index.mjs",
+  "@babel/runtime/helpers/asyncToGenerator": "/node_modules/@babel/runtime/helpers/asyncToGenerator/index.js",
+  "@babel/runtime/helpers/esm/asyncToGenerator": "/node_modules/@babel/runtime/helpers/asyncToGenerator/_index.mjs",
+  "@babel/runtime/helpers/classCallCheck": "/node_modules/@babel/runtime/helpers/classCallCheck/index.js",
+  "@babel/runtime/helpers/esm/classCallCheck": "/node_modules/@babel/runtime/helpers/classCallCheck/_index.mjs",
+  "@babel/runtime/helpers/createClass": "/node_modules/@babel/runtime/helpers/createClass/index.js",
+  "@babel/runtime/helpers/esm/createClass": "/node_modules/@babel/runtime/helpers/createClass/_index.mjs",
+  "@babel/runtime/helpers/defineEnumerableProperties": "/node_modules/@babel/runtime/helpers/defineEnumerableProperties/index.js",
+  "@babel/runtime/helpers/esm/defineEnumerableProperties": "/node_modules/@babel/runtime/helpers/defineEnumerableProperties/_index.mjs",
+  "@babel/runtime/helpers/defaults": "/node_modules/@babel/runtime/helpers/defaults/index.js",
+  "@babel/runtime/helpers/esm/defaults": "/node_modules/@babel/runtime/helpers/defaults/_index.mjs",
+  "@babel/runtime/helpers/defineProperty": "/node_modules/@babel/runtime/helpers/defineProperty/index.js",
+  "@babel/runtime/helpers/esm/defineProperty": "/node_modules/@babel/runtime/helpers/defineProperty/_index.mjs",
+  "@babel/runtime/helpers/extends": "/node_modules/@babel/runtime/helpers/extends/index.js",
+  "@babel/runtime/helpers/esm/extends": "/node_modules/@babel/runtime/helpers/extends/_index.mjs",
+  "@babel/runtime/helpers/objectSpread": "/node_modules/@babel/runtime/helpers/objectSpread/index.js",
+  "@babel/runtime/helpers/esm/objectSpread": "/node_modules/@babel/runtime/helpers/objectSpread/_index.mjs",
+  "@babel/runtime/helpers/objectSpread2": "/node_modules/@babel/runtime/helpers/objectSpread2/index.js",
+  "@babel/runtime/helpers/esm/objectSpread2": "/node_modules/@babel/runtime/helpers/objectSpread2/_index.mjs",
+  "@babel/runtime/helpers/inherits": "/node_modules/@babel/runtime/helpers/inherits/index.js",
+  "@babel/runtime/helpers/setPrototypeOf": "/node_modules/@babel/runtime/helpers/setPrototypeOf/index.js",
+  "@babel/runtime/helpers/esm/inherits": "/node_modules/@babel/runtime/helpers/inherits/_index.mjs",
+  "@babel/runtime/helpers/inheritsLoose": "/node_modules/@babel/runtime/helpers/inheritsLoose/index.js",
+  "@babel/runtime/helpers/esm/inheritsLoose": "/node_modules/@babel/runtime/helpers/inheritsLoose/_index.mjs",
+  "@babel/runtime/helpers/getPrototypeOf": "/node_modules/@babel/runtime/helpers/getPrototypeOf/index.js",
+  "@babel/runtime/helpers/esm/getPrototypeOf": "/node_modules/@babel/runtime/helpers/getPrototypeOf/_index.mjs",
+  "@babel/runtime/helpers/esm/setPrototypeOf": "/node_modules/@babel/runtime/helpers/setPrototypeOf/_index.mjs",
+  "@babel/runtime/helpers/isNativeReflectConstruct": "/node_modules/@babel/runtime/helpers/isNativeReflectConstruct/index.js",
+  "@babel/runtime/helpers/esm/isNativeReflectConstruct": "/node_modules/@babel/runtime/helpers/isNativeReflectConstruct/_index.mjs",
+  "@babel/runtime/helpers/construct": "/node_modules/@babel/runtime/helpers/construct/index.js",
+  "@babel/runtime/helpers/esm/construct": "/node_modules/@babel/runtime/helpers/construct/_index.mjs",
+  "@babel/runtime/helpers/isNativeFunction": "/node_modules/@babel/runtime/helpers/isNativeFunction/index.js",
+  "@babel/runtime/helpers/esm/isNativeFunction": "/node_modules/@babel/runtime/helpers/isNativeFunction/_index.mjs",
+  "@babel/runtime/helpers/wrapNativeSuper": "/node_modules/@babel/runtime/helpers/wrapNativeSuper/index.js",
+  "@babel/runtime/helpers/esm/wrapNativeSuper": "/node_modules/@babel/runtime/helpers/wrapNativeSuper/_index.mjs",
+  "@babel/runtime/helpers/instanceof": "/node_modules/@babel/runtime/helpers/instanceof/index.js",
+  "@babel/runtime/helpers/esm/instanceof": "/node_modules/@babel/runtime/helpers/instanceof/_index.mjs",
+  "@babel/runtime/helpers/interopRequireDefault": "/node_modules/@babel/runtime/helpers/interopRequireDefault/index.js",
+  "@babel/runtime/helpers/esm/interopRequireDefault": "/node_modules/@babel/runtime/helpers/interopRequireDefault/_index.mjs",
+  "@babel/runtime/helpers/interopRequireWildcard": "/node_modules/@babel/runtime/helpers/interopRequireWildcard/index.js",
+  "@babel/runtime/helpers/esm/interopRequireWildcard": "/node_modules/@babel/runtime/helpers/interopRequireWildcard/_index.mjs",
+  "@babel/runtime/helpers/newArrowCheck": "/node_modules/@babel/runtime/helpers/newArrowCheck/index.js",
+  "@babel/runtime/helpers/esm/newArrowCheck": "/node_modules/@babel/runtime/helpers/newArrowCheck/_index.mjs",
+  "@babel/runtime/helpers/objectDestructuringEmpty": "/node_modules/@babel/runtime/helpers/objectDestructuringEmpty/index.js",
+  "@babel/runtime/helpers/esm/objectDestructuringEmpty": "/node_modules/@babel/runtime/helpers/objectDestructuringEmpty/_index.mjs",
+  "@babel/runtime/helpers/objectWithoutPropertiesLoose": "/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose/index.js",
+  "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose": "/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose/_index.mjs",
+  "@babel/runtime/helpers/objectWithoutProperties": "/node_modules/@babel/runtime/helpers/objectWithoutProperties/index.js",
+  "@babel/runtime/helpers/esm/objectWithoutProperties": "/node_modules/@babel/runtime/helpers/objectWithoutProperties/_index.mjs",
+  "@babel/runtime/helpers/assertThisInitialized": "/node_modules/@babel/runtime/helpers/assertThisInitialized/index.js",
+  "@babel/runtime/helpers/esm/assertThisInitialized": "/node_modules/@babel/runtime/helpers/assertThisInitialized/_index.mjs",
+  "@babel/runtime/helpers/possibleConstructorReturn": "/node_modules/@babel/runtime/helpers/possibleConstructorReturn/index.js",
+  "@babel/runtime/helpers/esm/possibleConstructorReturn": "/node_modules/@babel/runtime/helpers/possibleConstructorReturn/_index.mjs",
+  "@babel/runtime/helpers/createSuper": "/node_modules/@babel/runtime/helpers/createSuper/index.js",
+  "@babel/runtime/helpers/esm/createSuper": "/node_modules/@babel/runtime/helpers/createSuper/_index.mjs",
+  "@babel/runtime/helpers/superPropBase": "/node_modules/@babel/runtime/helpers/superPropBase/index.js",
+  "@babel/runtime/helpers/esm/superPropBase": "/node_modules/@babel/runtime/helpers/superPropBase/_index.mjs",
+  "@babel/runtime/helpers/get": "/node_modules/@babel/runtime/helpers/get/index.js",
+  "@babel/runtime/helpers/esm/get": "/node_modules/@babel/runtime/helpers/get/_index.mjs",
+  "@babel/runtime/helpers/set": "/node_modules/@babel/runtime/helpers/set/index.js",
+  "@babel/runtime/helpers/esm/set": "/node_modules/@babel/runtime/helpers/set/_index.mjs",
+  "@babel/runtime/helpers/taggedTemplateLiteral": "/node_modules/@babel/runtime/helpers/taggedTemplateLiteral/index.js",
+  "@babel/runtime/helpers/esm/taggedTemplateLiteral": "/node_modules/@babel/runtime/helpers/taggedTemplateLiteral/_index.mjs",
+  "@babel/runtime/helpers/taggedTemplateLiteralLoose": "/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose/index.js",
+  "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose": "/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose/_index.mjs",
+  "@babel/runtime/helpers/readOnlyError": "/node_modules/@babel/runtime/helpers/readOnlyError/index.js",
+  "@babel/runtime/helpers/esm/readOnlyError": "/node_modules/@babel/runtime/helpers/readOnlyError/_index.mjs",
+  "@babel/runtime/helpers/writeOnlyError": "/node_modules/@babel/runtime/helpers/writeOnlyError/index.js",
+  "@babel/runtime/helpers/esm/writeOnlyError": "/node_modules/@babel/runtime/helpers/writeOnlyError/_index.mjs",
+  "@babel/runtime/helpers/classNameTDZError": "/node_modules/@babel/runtime/helpers/classNameTDZError/index.js",
+  "@babel/runtime/helpers/esm/classNameTDZError": "/node_modules/@babel/runtime/helpers/classNameTDZError/_index.mjs",
+  "@babel/runtime/helpers/temporalUndefined": "/node_modules/@babel/runtime/helpers/temporalUndefined/index.js",
+  "@babel/runtime/helpers/esm/temporalUndefined": "/node_modules/@babel/runtime/helpers/temporalUndefined/_index.mjs",
+  "@babel/runtime/helpers/tdz": "/node_modules/@babel/runtime/helpers/tdz/index.js",
+  "@babel/runtime/helpers/esm/tdz": "/node_modules/@babel/runtime/helpers/tdz/_index.mjs",
+  "@babel/runtime/helpers/temporalRef": "/node_modules/@babel/runtime/helpers/temporalRef/index.js",
+  "@babel/runtime/helpers/esm/temporalRef": "/node_modules/@babel/runtime/helpers/temporalRef/_index.mjs",
+  "@babel/runtime/helpers/slicedToArray": "/node_modules/@babel/runtime/helpers/slicedToArray/index.js",
+  "@babel/runtime/helpers/arrayWithHoles": "/node_modules/@babel/runtime/helpers/arrayWithHoles/index.js",
+  "@babel/runtime/helpers/iterableToArrayLimit": "/node_modules/@babel/runtime/helpers/iterableToArrayLimit/index.js",
+  "@babel/runtime/helpers/unsupportedIterableToArray": "/node_modules/@babel/runtime/helpers/unsupportedIterableToArray/index.js",
+  "@babel/runtime/helpers/nonIterableRest": "/node_modules/@babel/runtime/helpers/nonIterableRest/index.js",
+  "@babel/runtime/helpers/esm/slicedToArray": "/node_modules/@babel/runtime/helpers/slicedToArray/_index.mjs",
+  "@babel/runtime/helpers/slicedToArrayLoose": "/node_modules/@babel/runtime/helpers/slicedToArrayLoose/index.js",
+  "@babel/runtime/helpers/iterableToArrayLimitLoose": "/node_modules/@babel/runtime/helpers/iterableToArrayLimitLoose/index.js",
+  "@babel/runtime/helpers/esm/slicedToArrayLoose": "/node_modules/@babel/runtime/helpers/slicedToArrayLoose/_index.mjs",
+  "@babel/runtime/helpers/toArray": "/node_modules/@babel/runtime/helpers/toArray/index.js",
+  "@babel/runtime/helpers/iterableToArray": "/node_modules/@babel/runtime/helpers/iterableToArray/index.js",
+  "@babel/runtime/helpers/esm/toArray": "/node_modules/@babel/runtime/helpers/toArray/_index.mjs",
+  "@babel/runtime/helpers/toConsumableArray": "/node_modules/@babel/runtime/helpers/toConsumableArray/index.js",
+  "@babel/runtime/helpers/arrayWithoutHoles": "/node_modules/@babel/runtime/helpers/arrayWithoutHoles/index.js",
+  "@babel/runtime/helpers/nonIterableSpread": "/node_modules/@babel/runtime/helpers/nonIterableSpread/index.js",
+  "@babel/runtime/helpers/esm/toConsumableArray": "/node_modules/@babel/runtime/helpers/toConsumableArray/_index.mjs",
+  "@babel/runtime/helpers/arrayLikeToArray": "/node_modules/@babel/runtime/helpers/arrayLikeToArray/index.js",
+  "@babel/runtime/helpers/esm/arrayWithoutHoles": "/node_modules/@babel/runtime/helpers/arrayWithoutHoles/_index.mjs",
+  "@babel/runtime/helpers/esm/arrayWithHoles": "/node_modules/@babel/runtime/helpers/arrayWithHoles/_index.mjs",
+  "@babel/runtime/helpers/maybeArrayLike": "/node_modules/@babel/runtime/helpers/maybeArrayLike/index.js",
+  "@babel/runtime/helpers/esm/maybeArrayLike": "/node_modules/@babel/runtime/helpers/maybeArrayLike/_index.mjs",
+  "@babel/runtime/helpers/esm/iterableToArray": "/node_modules/@babel/runtime/helpers/iterableToArray/_index.mjs",
+  "@babel/runtime/helpers/esm/iterableToArrayLimit": "/node_modules/@babel/runtime/helpers/iterableToArrayLimit/_index.mjs",
+  "@babel/runtime/helpers/esm/iterableToArrayLimitLoose": "/node_modules/@babel/runtime/helpers/iterableToArrayLimitLoose/_index.mjs",
+  "@babel/runtime/helpers/esm/unsupportedIterableToArray": "/node_modules/@babel/runtime/helpers/unsupportedIterableToArray/_index.mjs",
+  "@babel/runtime/helpers/esm/arrayLikeToArray": "/node_modules/@babel/runtime/helpers/arrayLikeToArray/_index.mjs",
+  "@babel/runtime/helpers/esm/nonIterableSpread": "/node_modules/@babel/runtime/helpers/nonIterableSpread/_index.mjs",
+  "@babel/runtime/helpers/esm/nonIterableRest": "/node_modules/@babel/runtime/helpers/nonIterableRest/_index.mjs",
+  "@babel/runtime/helpers/createForOfIteratorHelper": "/node_modules/@babel/runtime/helpers/createForOfIteratorHelper/index.js",
+  "@babel/runtime/helpers/esm/createForOfIteratorHelper": "/node_modules/@babel/runtime/helpers/createForOfIteratorHelper/_index.mjs",
+  "@babel/runtime/helpers/createForOfIteratorHelperLoose": "/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose/index.js",
+  "@babel/runtime/helpers/esm/createForOfIteratorHelperLoose": "/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose/_index.mjs",
+  "@babel/runtime/helpers/skipFirstGeneratorNext": "/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext/index.js",
+  "@babel/runtime/helpers/esm/skipFirstGeneratorNext": "/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext/_index.mjs",
+  "@babel/runtime/helpers/toPrimitive": "/node_modules/@babel/runtime/helpers/toPrimitive/index.js",
+  "@babel/runtime/helpers/esm/toPrimitive": "/node_modules/@babel/runtime/helpers/toPrimitive/_index.mjs",
+  "@babel/runtime/helpers/toPropertyKey": "/node_modules/@babel/runtime/helpers/toPropertyKey/index.js",
+  "@babel/runtime/helpers/esm/toPropertyKey": "/node_modules/@babel/runtime/helpers/toPropertyKey/_index.mjs",
+  "@babel/runtime/helpers/initializerWarningHelper": "/node_modules/@babel/runtime/helpers/initializerWarningHelper/index.js",
+  "@babel/runtime/helpers/esm/initializerWarningHelper": "/node_modules/@babel/runtime/helpers/initializerWarningHelper/_index.mjs",
+  "@babel/runtime/helpers/initializerDefineProperty": "/node_modules/@babel/runtime/helpers/initializerDefineProperty/index.js",
+  "@babel/runtime/helpers/esm/initializerDefineProperty": "/node_modules/@babel/runtime/helpers/initializerDefineProperty/_index.mjs",
+  "@babel/runtime/helpers/applyDecoratedDescriptor": "/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor/index.js",
+  "@babel/runtime/helpers/esm/applyDecoratedDescriptor": "/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor/_index.mjs",
+  "@babel/runtime/helpers/classPrivateFieldLooseKey": "/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey/index.js",
+  "@babel/runtime/helpers/esm/classPrivateFieldLooseKey": "/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey/_index.mjs",
+  "@babel/runtime/helpers/classPrivateFieldLooseBase": "/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase/index.js",
+  "@babel/runtime/helpers/esm/classPrivateFieldLooseBase": "/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase/_index.mjs",
+  "@babel/runtime/helpers/classPrivateFieldGet": "/node_modules/@babel/runtime/helpers/classPrivateFieldGet/index.js",
+  "@babel/runtime/helpers/esm/classPrivateFieldGet": "/node_modules/@babel/runtime/helpers/classPrivateFieldGet/_index.mjs",
+  "@babel/runtime/helpers/classPrivateFieldSet": "/node_modules/@babel/runtime/helpers/classPrivateFieldSet/index.js",
+  "@babel/runtime/helpers/esm/classPrivateFieldSet": "/node_modules/@babel/runtime/helpers/classPrivateFieldSet/_index.mjs",
+  "@babel/runtime/helpers/classPrivateFieldDestructureSet": "/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet/index.js",
+  "@babel/runtime/helpers/esm/classPrivateFieldDestructureSet": "/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet/_index.mjs",
+  "@babel/runtime/helpers/classStaticPrivateFieldSpecGet": "/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet/index.js",
+  "@babel/runtime/helpers/esm/classStaticPrivateFieldSpecGet": "/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet/_index.mjs",
+  "@babel/runtime/helpers/classStaticPrivateFieldSpecSet": "/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet/index.js",
+  "@babel/runtime/helpers/esm/classStaticPrivateFieldSpecSet": "/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet/_index.mjs",
+  "@babel/runtime/helpers/classStaticPrivateMethodGet": "/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet/index.js",
+  "@babel/runtime/helpers/esm/classStaticPrivateMethodGet": "/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet/_index.mjs",
+  "@babel/runtime/helpers/classStaticPrivateMethodSet": "/node_modules/@babel/runtime/helpers/classStaticPrivateMethodSet/index.js",
+  "@babel/runtime/helpers/esm/classStaticPrivateMethodSet": "/node_modules/@babel/runtime/helpers/classStaticPrivateMethodSet/_index.mjs",
+  "@babel/runtime/helpers/decorate": "/node_modules/@babel/runtime/helpers/decorate/index.js",
+  "@babel/runtime/helpers/esm/decorate": "/node_modules/@babel/runtime/helpers/decorate/_index.mjs",
+  "@babel/runtime/helpers/classPrivateMethodGet": "/node_modules/@babel/runtime/helpers/classPrivateMethodGet/index.js",
+  "@babel/runtime/helpers/esm/classPrivateMethodGet": "/node_modules/@babel/runtime/helpers/classPrivateMethodGet/_index.mjs",
+  "@babel/runtime/helpers/classPrivateMethodSet": "/node_modules/@babel/runtime/helpers/classPrivateMethodSet/index.js",
+  "@babel/runtime/helpers/esm/classPrivateMethodSet": "/node_modules/@babel/runtime/helpers/classPrivateMethodSet/_index.mjs",
+  "@babel/runtime/helpers/wrapRegExp": "/node_modules/@babel/runtime/helpers/wrapRegExp/index.js",
+  "@babel/runtime/helpers/esm/wrapRegExp": "/node_modules/@babel/runtime/helpers/wrapRegExp/_index.mjs",
+  "@babel/runtime/regenerator": "/node_modules/@babel/runtime/regenerator/index.js",
+  "regenerator-runtime": "/node_modules/regenerator-runtime/runtime.js",
+  "@lion/button": "/node_modules/@lion/button/index.js",
+  "@lion/core": "/node_modules/@lion/core/index.js",
+  "@lion/core/differentKeyEventNamesShimIE": "/node_modules/@lion/core/src/differentKeyEventNamesShimIE.js",
+  "@lion/button/src/LionButton.js": "/node_modules/@lion/button/src/LionButton.js",
+  "@lion/button/define-button": "/node_modules/@lion/button/lion-button.js",
+  "@lion/button/src/LionButtonReset.js": "/node_modules/@lion/button/src/LionButtonReset.js",
+  "@lion/button/define-button-reset": "/node_modules/@lion/button/lion-button-reset.js",
+  "@lion/button/src/LionButtonSubmit.js": "/node_modules/@lion/button/src/LionButtonSubmit.js",
+  "@lion/button/define-button-submit": "/node_modules/@lion/button/lion-button-submit.js",
+  "@lion/button/define": "/node_modules/@lion/button/define.js",
+  "lit": "/node_modules/lit/index.js",
+  "lit/decorators.js": "/node_modules/lit/decorators.js",
+  "lit/directive.js": "/node_modules/lit/directive.js",
+  "lit/async-directive.js": "/node_modules/lit/async-directive.js",
+  "lit/directive-helpers.js": "/node_modules/lit/directive-helpers.js",
+  "lit/directives/async-append.js": "/node_modules/lit/directives/async-append.js",
+  "lit/directives/async-replace.js": "/node_modules/lit/directives/async-replace.js",
+  "lit/directives/cache.js": "/node_modules/lit/directives/cache.js",
+  "lit/directives/class-map.js": "/node_modules/lit/directives/class-map.js",
+  "lit/directives/guard.js": "/node_modules/lit/directives/guard.js",
+  "lit/directives/if-defined.js": "/node_modules/lit/directives/if-defined.js",
+  "lit/directives/repeat.js": "/node_modules/lit/directives/repeat.js",
+  "lit/directives/style-map.js": "/node_modules/lit/directives/style-map.js",
+  "lit/directives/unsafe-html.js": "/node_modules/lit/directives/unsafe-html.js",
+  "lit/directives/until.js": "/node_modules/lit/directives/until.js",
+  "@open-wc/scoped-elements": "/node_modules/@open-wc/scoped-elements/index.js",
+  "@open-wc/dedupe-mixin": "/node_modules/@open-wc/dedupe-mixin/index.js",
+  "@lion/core/test-helpers": "/node_modules/@lion/core/test-helpers/index.js",
+  "@lion/core/closestPolyfill": "/node_modules/@lion/core/src/closestPolyfill.js",
+  "@lit/reactive-element": "/node_modules/@lit/reactive-element/reactive-element.js",
+  "@lit/reactive-element/css-tag.js": "/node_modules/@lit/reactive-element/css-tag.js",
+  "@lit/reactive-element/decorators.js": "/node_modules/@lit/reactive-element/decorators.js",
+  "@lit/reactive-element/decorators/base.js": "/node_modules/@lit/reactive-element/decorators/base.js",
+  "@lit/reactive-element/decorators/custom-element.js": "/node_modules/@lit/reactive-element/decorators/custom-element.js",
+  "@lit/reactive-element/decorators/event-options.js": "/node_modules/@lit/reactive-element/decorators/event-options.js",
+  "@lit/reactive-element/decorators/property.js": "/node_modules/@lit/reactive-element/decorators/property.js",
+  "@lit/reactive-element/decorators/query-all.js": "/node_modules/@lit/reactive-element/decorators/query-all.js",
+  "@lit/reactive-element/decorators/query-assigned-nodes.js": "/node_modules/@lit/reactive-element/decorators/query-assigned-nodes.js",
+  "@lit/reactive-element/decorators/query-async.js": "/node_modules/@lit/reactive-element/decorators/query-async.js",
+  "@lit/reactive-element/decorators/query.js": "/node_modules/@lit/reactive-element/decorators/query.js",
+  "@lit/reactive-element/decorators/state.js": "/node_modules/@lit/reactive-element/decorators/state.js",
+  "@lit/reactive-element/polyfill-support.js": "/node_modules/@lit/reactive-element/polyfill-support.js",
+  "@lit/reactive-element/reactive-controller.js": "/node_modules/@lit/reactive-element/reactive-controller.js",
+  "@webcomponents/scoped-custom-element-registry": "/node_modules/@webcomponents/scoped-custom-element-registry/scoped-custom-element-registry.min.js",
+  "lit-html": "/node_modules/lit-html/lit-html.js",
+  "lit-element/lit-element.js": "/node_modules/lit-element/lit-element.js",
+  "lit-html/async-directive.js": "/node_modules/lit-html/async-directive.js",
+  "lit/decorators/custom-element.js": "/node_modules/lit/decorators/custom-element.js",
+  "lit/decorators/event-options.js": "/node_modules/lit/decorators/event-options.js",
+  "lit/decorators/property.js": "/node_modules/lit/decorators/property.js",
+  "lit/decorators/query-all.js": "/node_modules/lit/decorators/query-all.js",
+  "lit/decorators/query-assigned-nodes.js": "/node_modules/lit/decorators/query-assigned-nodes.js",
+  "lit/decorators/query-async.js": "/node_modules/lit/decorators/query-async.js",
+  "lit/decorators/query.js": "/node_modules/lit/decorators/query.js",
+  "lit/decorators/state.js": "/node_modules/lit/decorators/state.js",
+  "lit-html/directive-helpers.js": "/node_modules/lit-html/directive-helpers.js",
+  "lit-html/directive.js": "/node_modules/lit-html/directive.js",
+  "lit-html/directives/async-append.js": "/node_modules/lit-html/directives/async-append.js",
+  "lit-html/directives/async-replace.js": "/node_modules/lit-html/directives/async-replace.js",
+  "lit-html/directives/cache.js": "/node_modules/lit-html/directives/cache.js",
+  "lit-html/directives/class-map.js": "/node_modules/lit-html/directives/class-map.js",
+  "lit-html/directives/guard.js": "/node_modules/lit-html/directives/guard.js",
+  "lit-html/directives/if-defined.js": "/node_modules/lit-html/directives/if-defined.js",
+  "lit-html/directives/live.js": "/node_modules/lit-html/directives/live.js",
+  "lit/directives/live.js": "/node_modules/lit/directives/live.js",
+  "lit-html/directives/ref.js": "/node_modules/lit-html/directives/ref.js",
+  "lit/directives/ref.js": "/node_modules/lit/directives/ref.js",
+  "lit-html/directives/repeat.js": "/node_modules/lit-html/directives/repeat.js",
+  "lit-html/directives/style-map.js": "/node_modules/lit-html/directives/style-map.js",
+  "lit-html/directives/template-content.js": "/node_modules/lit-html/directives/template-content.js",
+  "lit/directives/template-content.js": "/node_modules/lit/directives/template-content.js",
+  "lit-html/directives/unsafe-html.js": "/node_modules/lit-html/directives/unsafe-html.js",
+  "lit-html/directives/unsafe-svg.js": "/node_modules/lit-html/directives/unsafe-svg.js",
+  "lit/directives/unsafe-svg.js": "/node_modules/lit/directives/unsafe-svg.js",
+  "lit-html/directives/until.js": "/node_modules/lit-html/directives/until.js",
+  "lit-element/experimental-hydrate-support.js": "/node_modules/lit-element/experimental-hydrate-support.js",
+  "lit/experimental-hydrate-support.js": "/node_modules/lit/experimental-hydrate-support.js",
+  "lit-html/experimental-hydrate.js": "/node_modules/lit-html/experimental-hydrate.js",
+  "lit/experimental-hydrate.js": "/node_modules/lit/experimental-hydrate.js",
+  "lit/html.js": "/node_modules/lit/html.js",
+  "lit/polyfill-support.js": "/node_modules/lit/polyfill-support.js",
+  "lit-html/static.js": "/node_modules/lit-html/static.js",
+  "lit/static-html.js": "/node_modules/lit/static-html.js",
+  "lit-element": "/node_modules/lit-element/index.js",
+  "lit-element/decorators.js": "/node_modules/lit-element/decorators.js",
+  "lit-element/decorators/custom-element.js": "/node_modules/lit-element/decorators/custom-element.js",
+  "lit-element/decorators/event-options.js": "/node_modules/lit-element/decorators/event-options.js",
+  "lit-element/decorators/property.js": "/node_modules/lit-element/decorators/property.js",
+  "lit-element/decorators/query-all.js": "/node_modules/lit-element/decorators/query-all.js",
+  "lit-element/decorators/query-assigned-nodes.js": "/node_modules/lit-element/decorators/query-assigned-nodes.js",
+  "lit-element/decorators/query-async.js": "/node_modules/lit-element/decorators/query-async.js",
+  "lit-element/decorators/query.js": "/node_modules/lit-element/decorators/query.js",
+  "lit-element/decorators/state.js": "/node_modules/lit-element/decorators/state.js",
+  "lit-element/polyfill-support.js": "/node_modules/lit-element/polyfill-support.js",
+  "lit-element/private-ssr-support.js": "/node_modules/lit-element/private-ssr-support.js",
+  "lit-html/lit-html.js": "/node_modules/lit-html/lit-html.js",
+  "lit-html/polyfill-support.js": "/node_modules/lit-html/polyfill-support.js",
+  "lit-html/private-ssr-support.js": "/node_modules/lit-html/private-ssr-support.js",
+  "@lion/calendar": "/node_modules/@lion/calendar/index.js",
+  "@lion/localize": "/node_modules/@lion/localize/index.js",
+  "@lion/calendar/src/LionCalendar.js": "/node_modules/@lion/calendar/src/LionCalendar.js",
+  "@lion/calendar/define": "/node_modules/@lion/calendar/lion-calendar.js",
+  "@lion/calendar/test-helpers": "/node_modules/@lion/calendar/test-helpers/index.js",
+  "@lion/localize/test-helpers": "/node_modules/@lion/localize/test-helpers/index.js",
+  "@bundled-es-modules/message-format/MessageFormat.js": "/node_modules/@bundled-es-modules/message-format/MessageFormat.js",
+  "@bundled-es-modules/message-format": "/node_modules/@bundled-es-modules/message-format/index.js",
+  "singleton-manager/src/SingletonManagerClass.js": "/node_modules/singleton-manager/src/SingletonManagerClass.js",
+  "singleton-manager": "/node_modules/singleton-manager/index.js"
+}
\ No newline at end of file
diff --git a/packages/cli/test/cases/develop.default/package.json b/packages/cli/test/cases/develop.default/package.json
index 07da0746..e300b2b6 100644
--- a/packages/cli/test/cases/develop.default/package.json
+++ b/packages/cli/test/cases/develop.default/package.json
@@ -2,9 +2,9 @@
   "name": "test-develop-command-default",
   "dependencies": {
     "@babel/runtime": "^7.10.4",
-    "@lion/button": "~0.12.0",
-    "@lion/calendar": "~0.15.0",
+    "@lion/button": "^0.14.3",
+    "@lion/calendar": "^0.16.5",
     "@types/trusted-types": "^2.0.2",
-    "lit-element": "^2.4.0"
+    "lit": "^2.0.0"
   }
 }
\ No newline at end of file
diff --git a/packages/plugin-graphql/test/cases/query-children/package.json b/packages/plugin-graphql/test/cases/query-children/package.json
index 75d12a9b..601aba9b 100644
--- a/packages/plugin-graphql/test/cases/query-children/package.json
+++ b/packages/plugin-graphql/test/cases/query-children/package.json
@@ -1,6 +1,6 @@
 {
   "name": "plugin-graphql-test-children-query",
   "dependencies": {
-    "lit-element": "^2.4.0"
+    "lit": "^2.0.0"
   }
 }
\ No newline at end of file
diff --git a/packages/plugin-graphql/test/cases/query-children/query-children.spec.js b/packages/plugin-graphql/test/cases/query-children/query-children.spec.js
index 21689110..1e992de9 100644
--- a/packages/plugin-graphql/test/cases/query-children/query-children.spec.js
+++ b/packages/plugin-graphql/test/cases/query-children/query-children.spec.js
@@ -55,41 +55,83 @@ describe('Build Greenwood With: ', function() {
         `${process.cwd()}/packages/plugin-graphql/src/queries/*.gql`, 
         `${outputPath}/node_modules/@greenwood/plugin-graphql/src/queries/`
       );
-      const litElementLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lib/*.js`, 
-        `${outputPath}/node_modules/lit-element/lib/`
+      const lit = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/*.js`, 
+        `${outputPath}/node_modules/lit/`
+      );
+      const litDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/decorators/*.js`, 
+        `${outputPath}/node_modules/lit/decorators/`
+      );
+      const litDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/directives/*.js`, 
+        `${outputPath}/node_modules/lit/directives/`
+      );
+      const litPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/package.json`, 
+        `${outputPath}/node_modules/lit/`
       );
       const litElement = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lit-element.js`, 
+        `${process.cwd()}/node_modules/lit-element/*.js`, 
         `${outputPath}/node_modules/lit-element/`
       );
       const litElementPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-element/package.json`, 
         `${outputPath}/node_modules/lit-element/`
       );
+      const litElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-element/decorators/*.js`, 
+        `${outputPath}/node_modules/lit-element/decorators/`
+      );
       const litHtml = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lit-html.js`, 
+        `${process.cwd()}/node_modules/lit-html/*.js`, 
         `${outputPath}/node_modules/lit-html/`
       );
       const litHtmlPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-html/package.json`, 
         `${outputPath}/node_modules/lit-html/`
       );
-      const litHtmlLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lib/*.js`, 
-        `${outputPath}/node_modules/lit-html/lib/`
+      const litHtmlDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-html/directives/*.js`, 
+        `${outputPath}/node_modules/lit-html/directives/`
+      );
+      // lit-html has a dependency on this
+      // https://github.com/lit/lit/blob/main/packages/lit-html/package.json#L82
+      const trustedTypes = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@types/trusted-types/package.json`,
+        `${outputPath}/node_modules/@types/trusted-types/`
+      );
+      const litReactiveElement = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
+      );
+      const litReactiveElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/decorators/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/decorators/`
+      );
+      const litReactiveElementPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/package.json`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
       );
 
       await runner.setup(outputPath, [
         ...getSetupFiles(outputPath),
         ...greenwoodGraphqlCoreLibs,
         ...greenwoodGraphqlQueryLibs, 
-        ...litElement,
+        ...lit,
+        ...litPackageJson,
+        ...litDirectives,
+        ...litDecorators,
         ...litElementPackageJson,
-        ...litElementLibs,
-        ...litHtml,
+        ...litElement,
+        ...litElementDecorators,
         ...litHtmlPackageJson,
-        ...litHtmlLibs
+        ...litHtml,
+        ...litHtmlDirectives,
+        ...trustedTypes,
+        ...litReactiveElement,
+        ...litReactiveElementDecorators,
+        ...litReactiveElementPackageJson
       ]);
       await runner.runCommand(cliPath, 'build');
     });
diff --git a/packages/plugin-graphql/test/cases/query-children/src/components/posts-list.js b/packages/plugin-graphql/test/cases/query-children/src/components/posts-list.js
index 24dab85b..72f78283 100644
--- a/packages/plugin-graphql/test/cases/query-children/src/components/posts-list.js
+++ b/packages/plugin-graphql/test/cases/query-children/src/components/posts-list.js
@@ -1,4 +1,4 @@
-import { html, LitElement } from 'lit-element';
+import { html, LitElement } from 'lit';
 import client from '@greenwood/plugin-graphql/core/client';
 import ChildrenQuery from '@greenwood/plugin-graphql/queries/children';
 
diff --git a/packages/plugin-graphql/test/cases/query-custom-frontmatter/package.json b/packages/plugin-graphql/test/cases/query-custom-frontmatter/package.json
index 83a44c51..4a70960c 100644
--- a/packages/plugin-graphql/test/cases/query-custom-frontmatter/package.json
+++ b/packages/plugin-graphql/test/cases/query-custom-frontmatter/package.json
@@ -1,6 +1,6 @@
 {
   "name": "plugin-graphql-test-query-custom-frontmatter",
   "dependencies": {
-    "lit-element": "^2.4.0"
+    "lit": "^2.0.0"
   }
 }
\ No newline at end of file
diff --git a/packages/plugin-graphql/test/cases/query-custom-frontmatter/query-custom-frontmatter.spec.js b/packages/plugin-graphql/test/cases/query-custom-frontmatter/query-custom-frontmatter.spec.js
index 8feb8967..f9b2ca88 100644
--- a/packages/plugin-graphql/test/cases/query-custom-frontmatter/query-custom-frontmatter.spec.js
+++ b/packages/plugin-graphql/test/cases/query-custom-frontmatter/query-custom-frontmatter.spec.js
@@ -57,41 +57,83 @@ describe('Build Greenwood With: ', function() {
         `${process.cwd()}/packages/plugin-graphql/src/queries/*.gql`, 
         `${outputPath}/node_modules/@greenwood/plugin-graphql/src/queries/`
       );
-      const litElementLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lib/*.js`, 
-        `${outputPath}/node_modules/lit-element/lib/`
+      const lit = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/*.js`, 
+        `${outputPath}/node_modules/lit/`
+      );
+      const litDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/decorators/*.js`, 
+        `${outputPath}/node_modules/lit/decorators/`
+      );
+      const litDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/directives/*.js`, 
+        `${outputPath}/node_modules/lit/directives/`
+      );
+      const litPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/package.json`, 
+        `${outputPath}/node_modules/lit/`
       );
       const litElement = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lit-element.js`, 
+        `${process.cwd()}/node_modules/lit-element/*.js`, 
         `${outputPath}/node_modules/lit-element/`
       );
       const litElementPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-element/package.json`, 
         `${outputPath}/node_modules/lit-element/`
       );
+      const litElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-element/decorators/*.js`, 
+        `${outputPath}/node_modules/lit-element/decorators/`
+      );
       const litHtml = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lit-html.js`, 
+        `${process.cwd()}/node_modules/lit-html/*.js`, 
         `${outputPath}/node_modules/lit-html/`
       );
       const litHtmlPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-html/package.json`, 
         `${outputPath}/node_modules/lit-html/`
       );
-      const litHtmlLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lib/*.js`, 
-        `${outputPath}/node_modules/lit-html/lib/`
+      const litHtmlDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-html/directives/*.js`, 
+        `${outputPath}/node_modules/lit-html/directives/`
+      );
+      // lit-html has a dependency on this
+      // https://github.com/lit/lit/blob/main/packages/lit-html/package.json#L82
+      const trustedTypes = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@types/trusted-types/package.json`,
+        `${outputPath}/node_modules/@types/trusted-types/`
+      );
+      const litReactiveElement = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
+      );
+      const litReactiveElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/decorators/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/decorators/`
+      );
+      const litReactiveElementPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/package.json`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
       );
 
       await runner.setup(outputPath, [
         ...getSetupFiles(outputPath),
         ...greenwoodGraphqlCoreLibs,
         ...greenwoodGraphqlQueryLibs,
-        ...litElement,
+        ...lit,
+        ...litPackageJson,
+        ...litDirectives,
+        ...litDecorators,
         ...litElementPackageJson,
-        ...litElementLibs,
-        ...litHtml,
+        ...litElement,
+        ...litElementDecorators,
         ...litHtmlPackageJson,
-        ...litHtmlLibs
+        ...litHtml,
+        ...litHtmlDirectives,
+        ...trustedTypes,
+        ...litReactiveElement,
+        ...litReactiveElementDecorators,
+        ...litReactiveElementPackageJson
       ]);
       await runner.runCommand(cliPath, 'build');
     });
@@ -160,11 +202,12 @@ describe('Build Greenwood With: ', function() {
         expect(authors.length).to.be.equal(2);
         expect(dates.length).to.be.equal(2);
         
-        expect(authors[0].innerHTML).to.be.contain('Written By: someone@blog.com');
-        expect(dates[0].innerHTML).to.be.contain('On: 07.08.2020');
+        // account for dynamic hydration markers added by lit
+        expect(authors[0].innerHTML).to.match(/Written By:(.*.)someone@blog.com/);
+        expect(dates[0].innerHTML).to.match(/On:(.*.)07.08.2020/);
 
-        expect(authors[1].innerHTML).to.be.contain('Written By: someone_else@blog.com');
-        expect(dates[1].innerHTML).to.be.contain('On: 07.09.2020');
+        expect(authors[1].innerHTML).to.match(/Written By:(.*.)someone_else@blog.com/);
+        expect(dates[1].innerHTML).to.match(/On:(.*.)07.09.2020/);
       });
     });
 
diff --git a/packages/plugin-graphql/test/cases/query-custom-frontmatter/src/components/posts-list.js b/packages/plugin-graphql/test/cases/query-custom-frontmatter/src/components/posts-list.js
index 74af3dad..f7f37ecd 100644
--- a/packages/plugin-graphql/test/cases/query-custom-frontmatter/src/components/posts-list.js
+++ b/packages/plugin-graphql/test/cases/query-custom-frontmatter/src/components/posts-list.js
@@ -1,4 +1,4 @@
-import { html, LitElement } from 'lit-element';
+import { html, LitElement } from 'lit';
 import client from '@greenwood/plugin-graphql/core/client';
 
 class PostsListTemplate extends LitElement {
diff --git a/packages/plugin-graphql/test/cases/query-graph/package.json b/packages/plugin-graphql/test/cases/query-graph/package.json
index 0acf9dd0..5a24063a 100644
--- a/packages/plugin-graphql/test/cases/query-graph/package.json
+++ b/packages/plugin-graphql/test/cases/query-graph/package.json
@@ -1,6 +1,6 @@
 {
   "name": "plugin-graphql-test-graph-query",
   "dependencies": {
-    "lit-element": "^2.4.0"
+    "lit": "^2.0.0"
   }
 }
\ No newline at end of file
diff --git a/packages/plugin-graphql/test/cases/query-graph/query-graph.spec.js b/packages/plugin-graphql/test/cases/query-graph/query-graph.spec.js
index cd5abd66..55cef985 100644
--- a/packages/plugin-graphql/test/cases/query-graph/query-graph.spec.js
+++ b/packages/plugin-graphql/test/cases/query-graph/query-graph.spec.js
@@ -53,41 +53,83 @@ describe('Build Greenwood With: ', function() {
         `${process.cwd()}/packages/plugin-graphql/src/queries/*.gql`, 
         `${outputPath}/node_modules/@greenwood/plugin-graphql/src/queries/`
       );
-      const litElementLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lib/*.js`, 
-        `${outputPath}/node_modules/lit-element/lib/`
+      const lit = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/*.js`, 
+        `${outputPath}/node_modules/lit/`
+      );
+      const litDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/decorators/*.js`, 
+        `${outputPath}/node_modules/lit/decorators/`
+      );
+      const litDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/directives/*.js`, 
+        `${outputPath}/node_modules/lit/directives/`
+      );
+      const litPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/package.json`, 
+        `${outputPath}/node_modules/lit/`
       );
       const litElement = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lit-element.js`, 
+        `${process.cwd()}/node_modules/lit-element/*.js`, 
         `${outputPath}/node_modules/lit-element/`
       );
       const litElementPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-element/package.json`, 
         `${outputPath}/node_modules/lit-element/`
       );
+      const litElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-element/decorators/*.js`, 
+        `${outputPath}/node_modules/lit-element/decorators/`
+      );
       const litHtml = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lit-html.js`, 
+        `${process.cwd()}/node_modules/lit-html/*.js`, 
         `${outputPath}/node_modules/lit-html/`
       );
       const litHtmlPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-html/package.json`, 
         `${outputPath}/node_modules/lit-html/`
       );
-      const litHtmlLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lib/*.js`, 
-        `${outputPath}/node_modules/lit-html/lib/`
+      const litHtmlDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-html/directives/*.js`, 
+        `${outputPath}/node_modules/lit-html/directives/`
+      );
+      // lit-html has a dependency on this
+      // https://github.com/lit/lit/blob/main/packages/lit-html/package.json#L82
+      const trustedTypes = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@types/trusted-types/package.json`,
+        `${outputPath}/node_modules/@types/trusted-types/`
+      );
+      const litReactiveElement = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
+      );
+      const litReactiveElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/decorators/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/decorators/`
+      );
+      const litReactiveElementPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/package.json`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
       );
 
       await runner.setup(outputPath, [
         ...getSetupFiles(outputPath),
         ...greenwoodGraphqlCoreLibs,
         ...greenwoodGraphqlQueryLibs,
-        ...litElement,
+        ...lit,
+        ...litPackageJson,
+        ...litDirectives,
+        ...litDecorators,
         ...litElementPackageJson,
-        ...litElementLibs,
-        ...litHtml,
+        ...litElement,
+        ...litElementDecorators,
         ...litHtmlPackageJson,
-        ...litHtmlLibs
+        ...litHtml,
+        ...litHtmlDirectives,
+        ...trustedTypes,
+        ...litReactiveElement,
+        ...litReactiveElementDecorators,
+        ...litReactiveElementPackageJson
       ]);
       await runner.runCommand(cliPath, 'build');
     });
diff --git a/packages/plugin-graphql/test/cases/query-graph/src/components/debug-output.js b/packages/plugin-graphql/test/cases/query-graph/src/components/debug-output.js
index df5ff8d6..321bf895 100644
--- a/packages/plugin-graphql/test/cases/query-graph/src/components/debug-output.js
+++ b/packages/plugin-graphql/test/cases/query-graph/src/components/debug-output.js
@@ -1,4 +1,4 @@
-import { html, LitElement } from 'lit-element';
+import { html, LitElement } from 'lit';
 import client from '@greenwood/plugin-graphql/core/client';
 import GraphQuery from '@greenwood/plugin-graphql/queries/graph';
 
diff --git a/packages/plugin-graphql/test/cases/query-menu/package.json b/packages/plugin-graphql/test/cases/query-menu/package.json
index eeef8448..7bd04156 100644
--- a/packages/plugin-graphql/test/cases/query-menu/package.json
+++ b/packages/plugin-graphql/test/cases/query-menu/package.json
@@ -1,6 +1,6 @@
 {
   "name": "plugin-graphql-test-menu-query",
   "dependencies": {
-    "lit-element": "^2.4.0"
+    "lit": "^2.0.0"
   }
 }
\ No newline at end of file
diff --git a/packages/plugin-graphql/test/cases/query-menu/query-menu.spec.js b/packages/plugin-graphql/test/cases/query-menu/query-menu.spec.js
index 1c8bf39e..20ae5be8 100644
--- a/packages/plugin-graphql/test/cases/query-menu/query-menu.spec.js
+++ b/packages/plugin-graphql/test/cases/query-menu/query-menu.spec.js
@@ -55,41 +55,83 @@ describe('Build Greenwood With: ', async function() {
         `${process.cwd()}/packages/plugin-graphql/src/queries/*.gql`, 
         `${outputPath}/node_modules/@greenwood/plugin-graphql/src/queries/`
       );
-      const litElementLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lib/*.js`, 
-        `${outputPath}/node_modules/lit-element/lib/`
+      const lit = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/*.js`, 
+        `${outputPath}/node_modules/lit/`
+      );
+      const litDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/decorators/*.js`, 
+        `${outputPath}/node_modules/lit/decorators/`
+      );
+      const litDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/directives/*.js`, 
+        `${outputPath}/node_modules/lit/directives/`
+      );
+      const litPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/package.json`, 
+        `${outputPath}/node_modules/lit/`
       );
       const litElement = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-element/lit-element.js`, 
+        `${process.cwd()}/node_modules/lit-element/*.js`, 
         `${outputPath}/node_modules/lit-element/`
       );
       const litElementPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-element/package.json`, 
         `${outputPath}/node_modules/lit-element/`
       );
+      const litElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-element/decorators/*.js`, 
+        `${outputPath}/node_modules/lit-element/decorators/`
+      );
       const litHtml = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lit-html.js`, 
+        `${process.cwd()}/node_modules/lit-html/*.js`, 
         `${outputPath}/node_modules/lit-html/`
       );
       const litHtmlPackageJson = await getDependencyFiles(
         `${process.cwd()}/node_modules/lit-html/package.json`, 
         `${outputPath}/node_modules/lit-html/`
       );
-      const litHtmlLibs = await getDependencyFiles(
-        `${process.cwd()}/node_modules/lit-html/lib/*.js`, 
-        `${outputPath}/node_modules/lit-html/lib/`
+      const litHtmlDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-html/directives/*.js`, 
+        `${outputPath}/node_modules/lit-html/directives/`
+      );
+      // lit-html has a dependency on this
+      // https://github.com/lit/lit/blob/main/packages/lit-html/package.json#L82
+      const trustedTypes = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@types/trusted-types/package.json`,
+        `${outputPath}/node_modules/@types/trusted-types/`
+      );
+      const litReactiveElement = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
+      );
+      const litReactiveElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/decorators/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/decorators/`
+      );
+      const litReactiveElementPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/package.json`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
       );
 
       await runner.setup(outputPath, [
         ...getSetupFiles(outputPath),
         ...greenwoodGraphqlCoreLibs,
         ...greenwoodGraphqlQueryLibs, 
-        ...litElement,
+        ...lit,
+        ...litPackageJson,
+        ...litDirectives,
+        ...litDecorators,
         ...litElementPackageJson,
-        ...litElementLibs,
-        ...litHtml,
+        ...litElement,
+        ...litElementDecorators,
         ...litHtmlPackageJson,
-        ...litHtmlLibs
+        ...litHtml,
+        ...litHtmlDirectives,
+        ...trustedTypes,
+        ...litReactiveElement,
+        ...litReactiveElementDecorators,
+        ...litReactiveElementPackageJson
       ]);
       await runner.runCommand(cliPath, 'build');
     });
diff --git a/packages/plugin-graphql/test/cases/query-menu/src/components/header.js b/packages/plugin-graphql/test/cases/query-menu/src/components/header.js
index e7d51644..7afe47d1 100644
--- a/packages/plugin-graphql/test/cases/query-menu/src/components/header.js
+++ b/packages/plugin-graphql/test/cases/query-menu/src/components/header.js
@@ -1,4 +1,4 @@
-import { LitElement, html } from 'lit-element';
+import { LitElement, html } from 'lit';
 import client from '@greenwood/plugin-graphql/core/client';
 import MenuQuery from '@greenwood/plugin-graphql/queries/menu';
 
diff --git a/packages/plugin-polyfills/test/cases/lit/greenwood.config.js b/packages/plugin-polyfills/test/cases/lit/greenwood.config.js
new file mode 100644
index 00000000..df0a2b27
--- /dev/null
+++ b/packages/plugin-polyfills/test/cases/lit/greenwood.config.js
@@ -0,0 +1,7 @@
+const polyfillsPlugin = require('../../../src/index');
+
+module.exports = {
+  plugins: [
+    polyfillsPlugin()
+  ]
+};
\ No newline at end of file
diff --git a/packages/plugin-polyfills/test/cases/lit/lit.spec.js b/packages/plugin-polyfills/test/cases/lit/lit.spec.js
new file mode 100644
index 00000000..2aff1103
--- /dev/null
+++ b/packages/plugin-polyfills/test/cases/lit/lit.spec.js
@@ -0,0 +1,182 @@
+/*
+ * Use Case
+ * Run Greenwood with Polyfills composite plugin with default options and using Lit.
+ *
+ * Uaer Result
+ * Should generate a bare bones Greenwood build with polyfills injected into index.html.
+ *
+ * User Command
+ * greenwood build
+ *
+ * User Config
+ * const polyfillsPlugin = require('@greenwod/plugin-polyfills');
+ *
+ * {
+ *   plugins: [
+ *     polyfillsPlugin()
+ *  ]
+ *
+ * }
+ *
+ * User Workspace
+ * Greenwood default
+ */
+const expect = require('chai').expect;
+const fs = require('fs');
+const { JSDOM } = require('jsdom');
+const path = require('path');
+const runSmokeTest = require('../../../../../test/smoke-test');
+const { getSetupFiles, getDependencyFiles, getOutputTeardownFiles } = require('../../../../../test/utils');
+const Runner = require('gallinago').Runner;
+
+const expectedLitPolyfillFiles = [
+  'polyfill-support.js'
+];
+
+const expectedPolyfillFiles = [
+  'webcomponents-loader.js',
+  'webcomponents-ce.js',
+  'webcomponents-ce.js.map',
+  'webcomponents-sd-ce-pf.js',
+  'webcomponents-sd-ce-pf.js.map',
+  'webcomponents-sd-ce.js',
+  'webcomponents-sd-ce.js.map',
+  'webcomponents-sd.js',
+  'webcomponents-sd.js.map'
+];
+
+describe('Build Greenwood With: ', function() {
+  const LABEL = 'Lit Polyfill Plugin with default options and Default Workspace';
+  const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js');
+  const outputPath = __dirname;
+  let runner;
+
+  before(async function() {
+    this.context = {
+      publicDir: path.join(outputPath, 'public')
+    };
+    runner = new Runner();
+  });
+
+  describe(LABEL, function() {
+    before(async function() {
+      const lit = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/*.js`, 
+        `${outputPath}/node_modules/lit/`
+      );
+      const litDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/decorators/*.js`, 
+        `${outputPath}/node_modules/lit/decorators/`
+      );
+      const litDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/directives/*.js`, 
+        `${outputPath}/node_modules/lit/directives/`
+      );
+      const litPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit/package.json`, 
+        `${outputPath}/node_modules/lit/`
+      );
+      const litElement = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-element/*.js`, 
+        `${outputPath}/node_modules/lit-element/`
+      );
+      const litElementPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-element/package.json`, 
+        `${outputPath}/node_modules/lit-element/`
+      );
+      const litElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-element/decorators/*.js`, 
+        `${outputPath}/node_modules/lit-element/decorators/`
+      );
+      const litHtml = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-html/*.js`, 
+        `${outputPath}/node_modules/lit-html/`
+      );
+      const litHtmlPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-html/package.json`, 
+        `${outputPath}/node_modules/lit-html/`
+      );
+      const litHtmlDirectives = await getDependencyFiles(
+        `${process.cwd()}/node_modules/lit-html/directives/*.js`, 
+        `${outputPath}/node_modules/lit-html/directives/`
+      );
+      // lit-html has a dependency on this
+      // https://github.com/lit/lit/blob/main/packages/lit-html/package.json#L82
+      const trustedTypes = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@types/trusted-types/package.json`,
+        `${outputPath}/node_modules/@types/trusted-types/`
+      );
+      const litReactiveElement = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
+      );
+      const litReactiveElementDecorators = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/decorators/*.js`, 
+        `${outputPath}/node_modules/@lit/reactive-element/decorators/`
+      );
+      const litReactiveElementPackageJson = await getDependencyFiles(
+        `${process.cwd()}/node_modules/@lit/reactive-element/package.json`, 
+        `${outputPath}/node_modules/@lit/reactive-element/`
+      );
+
+      await runner.setup(outputPath, [
+        ...getSetupFiles(outputPath),
+        ...expectedPolyfillFiles.map((file) => {
+          const dir = file === 'webcomponents-loader.js'
+            ? 'node_modules/@webcomponents/webcomponentsjs'
+            : 'node_modules/@webcomponents/webcomponentsjs/bundles';
+  
+          return {
+            source: `${process.cwd()}/${dir}/${file}`,
+            destination: `${outputPath}/${dir}/${file}`
+          };
+        }),
+        ...lit, // includes polyfill-support.js
+        ...litPackageJson,
+        ...litDirectives,
+        ...litDecorators,
+        ...litElementPackageJson,
+        ...litElement,
+        ...litElementDecorators,
+        ...litHtmlPackageJson,
+        ...litHtml,
+        ...litHtmlDirectives,
+        ...trustedTypes,
+        ...litReactiveElement,
+        ...litReactiveElementDecorators,
+        ...litReactiveElementPackageJson
+      ]);
+      await runner.runCommand(cliPath, 'build');
+    });
+
+    runSmokeTest(['public', 'index'], LABEL);
+
+    describe('Script tag in the <head> tag', function() {
+      let dom;
+
+      before(async function() {
+        dom = await JSDOM.fromFile(path.resolve(this.context.publicDir, 'index.html'));
+      });
+
+      it('should have one <script> tag for lit polyfills loaded in the <head> tag', function() {
+        const scriptTags = dom.window.document.querySelectorAll('head > script');
+        const polyfillScriptTags = Array.prototype.slice.call(scriptTags).filter(script => {
+          return script.src.indexOf('polyfill-support') >= 0;
+        });
+        
+        expect(polyfillScriptTags.length).to.be.equal(1);
+      });
+
+      it('should have the expected lit polyfill files in the output directory', function() {
+        expectedLitPolyfillFiles.forEach((file) => {  
+          expect(fs.existsSync(path.join(this.context.publicDir, file))).to.be.equal(true);
+        });
+      });
+    });
+  });
+
+  after(function() {
+    runner.teardown(getOutputTeardownFiles(outputPath));
+  });
+
+});
\ No newline at end of file
diff --git a/packages/plugin-polyfills/test/cases/lit/package.json b/packages/plugin-polyfills/test/cases/lit/package.json
new file mode 100644
index 00000000..a610e6b0
--- /dev/null
+++ b/packages/plugin-polyfills/test/cases/lit/package.json
@@ -0,0 +1,6 @@
+{
+  "name": "plugin-polyfills-lit-spec",
+  "dependencies": {
+    "lit": "^2.0.0"
+  }
+}
\ No newline at end of file