diff --git a/demo/lit/.gitignore b/demo/lit/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/demo/lit/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/demo/lit/.storybook/main.ts b/demo/lit/.storybook/main.ts
new file mode 100644
index 0000000..65eef53
--- /dev/null
+++ b/demo/lit/.storybook/main.ts
@@ -0,0 +1,27 @@
+import type { StorybookConfig } from "@storybook/web-components-vite";
+import { mergeConfig } from "vite";
+
+import autoStoryGenerator from "@takuma-ru/auto-story-generator";
+
+const config: StorybookConfig = {
+ stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
+ addons: ["@storybook/addon-links", "@storybook/addon-essentials"],
+ framework: {
+ name: "@storybook/web-components-vite",
+ options: {},
+ },
+ docs: {
+ autodocs: "tag",
+ },
+ viteFinal: (config) => {
+ return mergeConfig(config, {
+ plugins: [
+ autoStoryGenerator.vite({
+ preset: "lit",
+ imports: ["**/src/components/**/*.ce.ts"],
+ }),
+ ],
+ });
+ },
+};
+export default config;
diff --git a/demo/lit/.storybook/preview.ts b/demo/lit/.storybook/preview.ts
new file mode 100644
index 0000000..cce8b59
--- /dev/null
+++ b/demo/lit/.storybook/preview.ts
@@ -0,0 +1,15 @@
+import type { Preview } from "@storybook/web-components";
+
+const preview: Preview = {
+ parameters: {
+ actions: { argTypesRegex: "^on[A-Z].*" },
+ controls: {
+ matchers: {
+ color: /(background|color)$/i,
+ date: /Date$/i,
+ },
+ },
+ },
+};
+
+export default preview;
diff --git a/demo/lit/index.html b/demo/lit/index.html
new file mode 100644
index 0000000..283e961
--- /dev/null
+++ b/demo/lit/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ Vite + Lit + TS
+
+
+
+
+
+ Vite + Lit
+
+
+
diff --git a/demo/lit/package.json b/demo/lit/package.json
new file mode 100644
index 0000000..e02996f
--- /dev/null
+++ b/demo/lit/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "lit",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "preview": "vite preview",
+ "sb:dev": "storybook dev -p 6006 --no-open",
+ "sb:build": "storybook build"
+ },
+ "dependencies": {
+ "@takuma-ru/auto-story-generator": "workspace:^",
+ "lit": "^3.1.0"
+ },
+ "devDependencies": {
+ "@storybook/addon-essentials": "^7.6.12",
+ "@storybook/addon-links": "^7.6.12",
+ "@storybook/blocks": "^7.6.12",
+ "@storybook/web-components": "^7.6.12",
+ "@storybook/web-components-vite": "^7.6.12",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "storybook": "^7.6.12",
+ "typescript": "^5.2.2",
+ "vite": "^5.0.8"
+ }
+}
diff --git a/demo/lit/public/vite.svg b/demo/lit/public/vite.svg
new file mode 100644
index 0000000..e7b8dfb
--- /dev/null
+++ b/demo/lit/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/demo/lit/src/assets/lit.svg b/demo/lit/src/assets/lit.svg
new file mode 100644
index 0000000..4a9c1fe
--- /dev/null
+++ b/demo/lit/src/assets/lit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/demo/lit/src/components/ce-test-a/ce-test-a.ce.ts b/demo/lit/src/components/ce-test-a/ce-test-a.ce.ts
new file mode 100644
index 0000000..98554d9
--- /dev/null
+++ b/demo/lit/src/components/ce-test-a/ce-test-a.ce.ts
@@ -0,0 +1,16 @@
+import { LitElement, html } from "lit";
+import { customElement, property } from "lit/decorators.js";
+
+export type CeTestAProps = {
+ propA: string;
+};
+
+@customElement("vum-button")
+export class CeTestA extends LitElement {
+ @property({ attribute: "prop-a", type: String })
+ propA: CeTestAProps["propA"] = "default value";
+
+ render() {
+ return html`${this.propA}
`;
+ }
+}
diff --git a/demo/lit/src/components/ce-test-a/ce-test-a.stories.ts b/demo/lit/src/components/ce-test-a/ce-test-a.stories.ts
new file mode 100644
index 0000000..fe6dc93
--- /dev/null
+++ b/demo/lit/src/components/ce-test-a/ce-test-a.stories.ts
@@ -0,0 +1,23 @@
+import { html } from "lit";
+
+import type { Meta, StoryObj } from "@storybook/web-components";
+
+import { CeTestA, CeTestAProps } from "../ce-test-a/ce-test-a.ce";
+
+const meta: Meta = {
+ title: "components/ce-test-a",
+ tags: ["autodocs"],
+ render: (args) => {
+ new CeTestA();
+
+ return html`ce-test-a`;
+ },
+ args: { propA: undefined },
+ argTypes: { propA: { control: "text" } },
+};
+
+export default meta;
+
+export type CeTestAStory = StoryObj;
+
+export const Primary: CeTestAStory = {};
diff --git a/demo/lit/src/components/ce-test-b/ce-test-b.ce.ts b/demo/lit/src/components/ce-test-b/ce-test-b.ce.ts
new file mode 100644
index 0000000..e69de29
diff --git a/demo/lit/src/index.css b/demo/lit/src/index.css
new file mode 100644
index 0000000..a86963e
--- /dev/null
+++ b/demo/lit/src/index.css
@@ -0,0 +1,38 @@
+:root {
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+ font-weight: 400;
+
+ color-scheme: light dark;
+ color: rgba(255, 255, 255, 0.87);
+ background-color: #242424;
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+a {
+ font-weight: 500;
+ color: #646cff;
+ text-decoration: inherit;
+}
+a:hover {
+ color: #535bf2;
+}
+
+body {
+ margin: 0;
+ display: flex;
+ place-items: center;
+ min-width: 320px;
+ min-height: 100vh;
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+}
diff --git a/demo/lit/src/my-element.ts b/demo/lit/src/my-element.ts
new file mode 100644
index 0000000..88b188f
--- /dev/null
+++ b/demo/lit/src/my-element.ts
@@ -0,0 +1,127 @@
+import { LitElement, css, html } from 'lit'
+import { customElement, property } from 'lit/decorators.js'
+import litLogo from './assets/lit.svg'
+import viteLogo from '/vite.svg'
+
+/**
+ * An example element.
+ *
+ * @slot - This element has a slot
+ * @csspart button - The button
+ */
+@customElement('my-element')
+export class MyElement extends LitElement {
+ /**
+ * Copy for the read the docs hint.
+ */
+ @property()
+ docsHint = 'Click on the Vite and Lit logos to learn more'
+
+ /**
+ * The number of times the button has been clicked.
+ */
+ @property({ type: Number })
+ count = 0
+
+ render() {
+ return html`
+
+
+
+
+
+ ${this.docsHint}
+ `
+ }
+
+ private _onClick() {
+ this.count++
+ }
+
+ static styles = css`
+ :host {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 2rem;
+ text-align: center;
+ }
+
+ .logo {
+ height: 6em;
+ padding: 1.5em;
+ will-change: filter;
+ transition: filter 300ms;
+ }
+ .logo:hover {
+ filter: drop-shadow(0 0 2em #646cffaa);
+ }
+ .logo.lit:hover {
+ filter: drop-shadow(0 0 2em #325cffaa);
+ }
+
+ .card {
+ padding: 2em;
+ }
+
+ .read-the-docs {
+ color: #888;
+ }
+
+ ::slotted(h1) {
+ font-size: 3.2em;
+ line-height: 1.1;
+ }
+
+ a {
+ font-weight: 500;
+ color: #646cff;
+ text-decoration: inherit;
+ }
+ a:hover {
+ color: #535bf2;
+ }
+
+ button {
+ border-radius: 8px;
+ border: 1px solid transparent;
+ padding: 0.6em 1.2em;
+ font-size: 1em;
+ font-weight: 500;
+ font-family: inherit;
+ background-color: #1a1a1a;
+ cursor: pointer;
+ transition: border-color 0.25s;
+ }
+ button:hover {
+ border-color: #646cff;
+ }
+ button:focus,
+ button:focus-visible {
+ outline: 4px auto -webkit-focus-ring-color;
+ }
+
+ @media (prefers-color-scheme: light) {
+ a:hover {
+ color: #747bff;
+ }
+ button {
+ background-color: #f9f9f9;
+ }
+ }
+ `
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'my-element': MyElement
+ }
+}
diff --git a/demo/lit/src/vite-env.d.ts b/demo/lit/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/demo/lit/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/demo/lit/tsconfig.json b/demo/lit/tsconfig.json
new file mode 100644
index 0000000..69e31ac
--- /dev/null
+++ b/demo/lit/tsconfig.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "experimentalDecorators": true,
+ "useDefineForClassFields": false,
+ "module": "ESNext",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"]
+}
diff --git a/package.json b/package.json
index 1f92e94..29fc946 100644
--- a/package.json
+++ b/package.json
@@ -6,10 +6,11 @@
"asg": "pnpm -F \"@takuma-ru/auto-story-generator\"",
"doc": "pnpm -F \"docs\"",
"d:react": "pnpm -F \"react\"",
- "d:next": "pnpm -F \"next\""
+ "d:next": "pnpm -F \"next\"",
+ "d:lit": "pnpm -F \"lit\""
},
"author": "takuma-ru (https://github.com/takuma-ru/)",
- "license": "MIT",
+ "license": "ISC",
"packageManager": "pnpm@8.14.1",
"engines": {
"npm": "use pnpm please!",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9e5bdc6..771d1cd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,46 @@ importers:
.: {}
+ demo/lit:
+ dependencies:
+ '@takuma-ru/auto-story-generator':
+ specifier: workspace:^
+ version: link:../../packages/auto-story-generator
+ lit:
+ specifier: ^3.1.0
+ version: 3.1.2
+ devDependencies:
+ '@storybook/addon-essentials':
+ specifier: ^7.6.12
+ version: 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-links':
+ specifier: ^7.6.12
+ version: 7.6.12(react@18.2.0)
+ '@storybook/blocks':
+ specifier: ^7.6.12
+ version: 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/web-components':
+ specifier: ^7.6.12
+ version: 7.6.12(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/web-components-vite':
+ specifier: ^7.6.12
+ version: 7.6.12(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(vite@5.0.12)
+ react:
+ specifier: ^18.2.0
+ version: 18.2.0
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.2.0(react@18.2.0)
+ storybook:
+ specifier: ^7.6.12
+ version: 7.6.12
+ typescript:
+ specifier: ^5.2.2
+ version: 5.3.3
+ vite:
+ specifier: ^5.0.8
+ version: 5.0.12
+
demo/next:
dependencies:
next:
@@ -2413,6 +2453,14 @@ packages:
resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
dev: true
+ /@lit-labs/ssr-dom-shim@1.2.0:
+ resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==}
+
+ /@lit/reactive-element@2.0.4:
+ resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==}
+ dependencies:
+ '@lit-labs/ssr-dom-shim': 1.2.0
+
/@mdx-js/react@2.3.0(react@18.2.0):
resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==}
peerDependencies:
@@ -3718,6 +3766,44 @@ packages:
- supports-color
dev: true
+ /@storybook/builder-vite@7.6.12(typescript@5.3.3)(vite@5.0.12):
+ resolution: {integrity: sha512-VJIn+XYVVhdJHHMEtYDnEyQQU4fRupugSFpP9XLYTRYgXPN9PSVey4vI/IyuHcHYINPba39UY2+8PW+5NgShxQ==}
+ peerDependencies:
+ '@preact/preset-vite': '*'
+ typescript: '>= 4.3.x'
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0
+ vite-plugin-glimmerx: '*'
+ peerDependenciesMeta:
+ '@preact/preset-vite':
+ optional: true
+ typescript:
+ optional: true
+ vite-plugin-glimmerx:
+ optional: true
+ dependencies:
+ '@storybook/channels': 7.6.12
+ '@storybook/client-logger': 7.6.12
+ '@storybook/core-common': 7.6.12
+ '@storybook/csf-plugin': 7.6.12
+ '@storybook/node-logger': 7.6.12
+ '@storybook/preview': 7.6.12
+ '@storybook/preview-api': 7.6.12
+ '@storybook/types': 7.6.12
+ '@types/find-cache-dir': 3.2.1
+ browser-assert: 1.2.1
+ es-module-lexer: 0.9.3
+ express: 4.18.2
+ find-cache-dir: 3.3.2
+ fs-extra: 11.2.0
+ magic-string: 0.30.5
+ rollup: 3.29.4
+ typescript: 5.3.3
+ vite: 5.0.12
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ dev: true
+
/@storybook/builder-vite@7.6.9(typescript@5.3.3)(vite@5.0.11):
resolution: {integrity: sha512-fiUYd/r+gYWsIwAtOLMyFq4yxmnyCEmyXyPeIKiPR+r76IDJu+12s7CvEXc0jKjHg+KwHWXZT8C9kROU0ivgDA==}
peerDependencies:
@@ -4902,6 +4988,52 @@ packages:
file-system-cache: 2.3.0
dev: true
+ /@storybook/web-components-vite@7.6.12(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(vite@5.0.12):
+ resolution: {integrity: sha512-kXDIYYBnbvMWXLOIDebqbxgr0GcNrE4Dd8P3UFgKXS5B298vAm5y/FRfTTcldYKoKFed5O3BksgTJT1AQV67Qg==}
+ engines: {node: ^14.18 || >=16}
+ dependencies:
+ '@storybook/builder-vite': 7.6.12(typescript@5.3.3)(vite@5.0.12)
+ '@storybook/core-server': 7.6.12
+ '@storybook/node-logger': 7.6.12
+ '@storybook/web-components': 7.6.12(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0)
+ magic-string: 0.30.5
+ transitivePeerDependencies:
+ - '@preact/preset-vite'
+ - bufferutil
+ - encoding
+ - lit
+ - react
+ - react-dom
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - vite
+ - vite-plugin-glimmerx
+ dev: true
+
+ /@storybook/web-components@7.6.12(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-kPGLXk8iu71XdInOCPeCpZE4uUJYWBveHfSuBYzuJrrR0UPVbpIHGSH/a3CcixSX/01NLPrZ2stc1dfB/hJr6A==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ lit: ^2.0.0 || ^3.0.0
+ dependencies:
+ '@storybook/client-logger': 7.6.12
+ '@storybook/core-client': 7.6.12
+ '@storybook/docs-tools': 7.6.12
+ '@storybook/global': 5.0.0
+ '@storybook/manager-api': 7.6.12(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.6.12
+ '@storybook/types': 7.6.12
+ lit: 3.1.2
+ tiny-invariant: 1.3.1
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - encoding
+ - react
+ - react-dom
+ - supports-color
+ dev: true
+
/@swc/core-darwin-arm64@1.3.107:
resolution: {integrity: sha512-47tD/5vSXWxPd0j/ZllyQUg4bqalbQTsmqSw0J4dDdS82MWqCAwUErUrAZPRjBkjNQ6Kmrf5rpCWaGTtPw+ngw==}
engines: {node: '>=10'}
@@ -5382,6 +5514,9 @@ packages:
'@types/node': 20.11.5
dev: true
+ /@types/trusted-types@2.0.7:
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+
/@types/unist@2.0.10:
resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
dev: true
@@ -9588,6 +9723,25 @@ packages:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
dev: true
+ /lit-element@4.0.4:
+ resolution: {integrity: sha512-98CvgulX6eCPs6TyAIQoJZBCQPo80rgXR+dVBs61cstJXqtI+USQZAbA4gFHh6L/mxBx9MrgPLHLsUgDUHAcCQ==}
+ dependencies:
+ '@lit-labs/ssr-dom-shim': 1.2.0
+ '@lit/reactive-element': 2.0.4
+ lit-html: 3.1.2
+
+ /lit-html@3.1.2:
+ resolution: {integrity: sha512-3OBZSUrPnAHoKJ9AMjRL/m01YJxQMf+TMHanNtTHG68ubjnZxK0RFl102DPzsw4mWnHibfZIBJm3LWCZ/LmMvg==}
+ dependencies:
+ '@types/trusted-types': 2.0.7
+
+ /lit@3.1.2:
+ resolution: {integrity: sha512-VZx5iAyMtX7CV4K8iTLdCkMaYZ7ipjJZ0JcSdJ0zIdGxxyurjIn7yuuSxNBD7QmjvcNJwr0JS4cAdAtsy7gZ6w==}
+ dependencies:
+ '@lit/reactive-element': 2.0.4
+ lit-element: 4.0.4
+ lit-html: 3.1.2
+
/load-tsconfig@0.2.5:
resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}