From 79f0eb8be63f85155a71852ec981ceafc1c33a5b Mon Sep 17 00:00:00 2001 From: Dominique Wirz Date: Tue, 20 Feb 2024 15:52:35 +0100 Subject: [PATCH] feat: add todo app example (#167) Co-authored-by: Dominique Wirz --- packages/app/README.md | 9 +- packages/app/src/app/layout.tsx | 17 +++- packages/app/src/app/navigation.tsx | 56 ++++++++++++ packages/app/src/app/page.tsx | 5 +- packages/app/src/app/test/[count]/page.tsx | 8 +- packages/app/src/app/todo/layout.tsx | 15 ++++ .../app/src/app/todo/server-only/input.tsx | 16 ++++ .../app/src/app/todo/server-only/list.tsx | 33 +++++++ .../app/src/app/todo/server-only/page.tsx | 28 ++++++ .../app/src/app/todo/server-only/use-todo.tsx | 23 +++++ packages/app/src/app/todo/styles.css | 22 +++++ packages/app/src/app/todo/wrapper/page.tsx | 48 ++++++++++ packages/web-components/src/components.d.ts | 66 ++++++++++++++ .../src/components/todo-input/todo-input.css | 29 ++++++ .../src/components/todo-input/todo-input.tsx | 41 +++++++++ .../src/components/todo-item/todo-item.css | 88 +++++++++++++++++++ .../src/components/todo-item/todo-item.tsx | 41 +++++++++ 17 files changed, 529 insertions(+), 16 deletions(-) create mode 100644 packages/app/src/app/navigation.tsx create mode 100644 packages/app/src/app/todo/layout.tsx create mode 100644 packages/app/src/app/todo/server-only/input.tsx create mode 100644 packages/app/src/app/todo/server-only/list.tsx create mode 100644 packages/app/src/app/todo/server-only/page.tsx create mode 100644 packages/app/src/app/todo/server-only/use-todo.tsx create mode 100644 packages/app/src/app/todo/styles.css create mode 100644 packages/app/src/app/todo/wrapper/page.tsx create mode 100644 packages/web-components/src/components/todo-input/todo-input.css create mode 100644 packages/web-components/src/components/todo-input/todo-input.tsx create mode 100644 packages/web-components/src/components/todo-item/todo-item.css create mode 100644 packages/web-components/src/components/todo-item/todo-item.tsx diff --git a/packages/app/README.md b/packages/app/README.md index 82649bab..2b425472 100644 --- a/packages/app/README.md +++ b/packages/app/README.md @@ -4,16 +4,9 @@ This application showcases React Web Components generated using a custom output - Demonstrates side-by-side comparisons of different rendering strategies: `'wrapper'`, `'server-only'`, and `'use client';`. - Provides test pages with varying numbers of components (50, 100, 200, and 500) for performance evaluation. +- A TodoMVC example basec on [vogloblinsky/web-components-benchmark](https://github.com/vogloblinsky/web-components-benchmark) to demonstrate the interactive use of `'wrapper'` and `'server-only'`. - Includes a Storybook environment for isolated component exploration. ## Deployment Live version: https://stencil-nextjs-example-app.vercel.app (`'wrapper'`, `'server-only'`, and `'use client';`) - -Test pages (`'server-only'` approach only, for performance evaluation): -- 50 elements: https://stencil-nextjs-example-app.vercel.app/test/50 -- 100 elements: https://stencil-nextjs-example-app.vercel.app/test/100 -- 200 elements: https://stencil-nextjs-example-app.vercel.app/test/200 -- 500 elements: https://stencil-nextjs-example-app.vercel.app/test/500 - -Storybook: https://stencil-nextjs-example-app.vercel.app/storybook/index.html (`'use client';`) diff --git a/packages/app/src/app/layout.tsx b/packages/app/src/app/layout.tsx index 95d25eeb..1b67e7d0 100644 --- a/packages/app/src/app/layout.tsx +++ b/packages/app/src/app/layout.tsx @@ -1,17 +1,24 @@ /* eslint-disable @next/next/no-before-interactive-script-outside-document */ import type { Metadata } from 'next'; +import { Inter } from 'next/font/google'; import Script from 'next/script'; +import { FC, PropsWithChildren } from 'react'; + +const inter = Inter({ + subsets: ['latin'], + display: 'swap', +}); export const metadata: Metadata = { title: 'Next.js ABC Web Components App', description: 'This Next.js App demonstrates how to use the ABC Web Components.', }; -export default async function RootLayout({ children }: { children: React.ReactNode }) { +const RootLayout: FC = async ({ children }) => { await import('abc-web-components-react-wrapper/server'); return ( - + {children} -