From f8d5d0c307111dc938ea75d7d3cffdcdc5072c50 Mon Sep 17 00:00:00 2001 From: Arturo Silva Date: Mon, 4 Dec 2023 15:39:11 -0500 Subject: [PATCH 01/53] chore: stub out dir --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 33ffc30fb..1dfcfb009 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,8 @@ "workspaces": [ "./ui/*", "./build.washingtonpost.com", - "./apps/*" + "./apps/*", + "./packages/*" ], "dependencies": { "@babel/standalone": "^7.17.11", From 16fe6d4690994da351c4676dc6c25d8265bbac1a Mon Sep 17 00:00:00 2001 From: Arturo Silva Date: Mon, 4 Dec 2023 15:39:24 -0500 Subject: [PATCH 02/53] chore: stub out dir --- packages/kit/README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/kit/README.md diff --git a/packages/kit/README.md b/packages/kit/README.md new file mode 100644 index 000000000..e69de29bb From 2a95357f26780d0048fe30cb00b271763329b663 Mon Sep 17 00:00:00 2001 From: Arturo Silva Date: Tue, 12 Dec 2023 20:19:53 -0500 Subject: [PATCH 03/53] chore: test nextjs 13 and 14 apps (page and app router) (#544) --- .github/workflows/interaction-tests.yml | 50 - .github/workflows/playwright.yml | 24 +- .gitignore | 1 + .storybook/main.js | 53 +- apps/nextjs13-approuter/.gitignore | 35 + apps/nextjs13-approuter/README.md | 1 + apps/nextjs13-approuter/next.config.js | 4 + apps/nextjs13-approuter/package.json | 18 + apps/nextjs13-approuter/src/app/layout.js | 12 + apps/nextjs13-approuter/src/app/page.js | 8 + apps/nextjs13-approuter/src/app/registry.js | 16 + apps/nextjs13-pagerouter/.gitignore | 35 + apps/nextjs13-pagerouter/README.md | 40 + apps/nextjs13-pagerouter/next.config.js | 6 + apps/nextjs13-pagerouter/package.json | 22 + apps/nextjs13-pagerouter/src/pages/_app.jsx | 8 + .../src/pages/_document.jsx | 16 + apps/nextjs13-pagerouter/src/pages/index.jsx | 6 + apps/nextjs14-approuter/.gitignore | 36 + apps/nextjs14-approuter/README.md | 36 + apps/nextjs14-approuter/next.config.js | 4 + apps/nextjs14-approuter/package.json | 18 + apps/nextjs14-approuter/src/app/layout.js | 12 + apps/nextjs14-approuter/src/app/page.js | 8 + apps/nextjs14-approuter/src/app/registry.js | 16 + apps/nextjs14-pagerouter/.gitignore | 36 + apps/nextjs14-pagerouter/README.md | 40 + apps/nextjs14-pagerouter/next.config.js | 6 + apps/nextjs14-pagerouter/package.json | 22 + apps/nextjs14-pagerouter/src/pages/_app.jsx | 8 + .../src/pages/_document.jsx | 16 + apps/nextjs14-pagerouter/src/pages/index.jsx | 6 + apps/vite-project/.gitignore | 24 - apps/vite-project/CHANGELOG.md | 137 - apps/vite-project/index.html | 13 - apps/vite-project/package.json | 23 - apps/vite-project/src/App.jsx | 16 - apps/vite-project/src/main.jsx | 9 - apps/vite-project/vite.config.js | 7 - apps/vite-v2-project/.gitignore | 24 - apps/vite-v2-project/CHANGELOG.md | 136 - apps/vite-v2-project/index.html | 13 - apps/vite-v2-project/package.json | 22 - apps/vite-v2-project/src/App.jsx | 16 - apps/vite-v2-project/src/main.jsx | 9 - apps/vite-v2-project/vite.config.js | 7 - babel.config.json | 7 +- build.washingtonpost.com/package.json | 13 +- docs/architecture/003-use-client-banner.md | 35 + docs/architecture/004-versioned-docs.md | 9 + jest.config.js | 13 +- package-lock.json | 58781 +++++++--------- package.json | 86 +- scripts/setupTests.ts | 3 +- ui/accordion/package.json | 2 +- ui/action-menu/package.json | 2 +- ui/alert-banner/package.json | 6 +- ui/app-bar/package.json | 6 +- ui/avatar/package.json | 2 +- ui/box/package.json | 6 +- ui/button/package.json | 6 +- ui/button/src/play.stories.tsx | 9 +- ui/card/package.json | 2 +- ui/carousel/package.json | 2 +- ui/carousel/src/CarouselNextButton.test.tsx | 10 +- .../src/CarouselPreviousButton.test.tsx | 10 +- ui/carousel/src/play.stories.jsx | 19 +- ui/carousel/src/useActiveDescendant.test.tsx | 69 +- ui/checkbox/package.json | 4 +- ui/container/package.json | 6 +- ui/container/src/play.stories.tsx | 3 + ui/divider/package.json | 2 +- ui/drawer/package.json | 2 +- ui/drawer/src/DrawerClose.test.tsx | 5 +- ui/drawer/src/DrawerContent.test.tsx | 11 +- ui/drawer/src/DrawerCustomTrigger.test.tsx | 14 +- ui/drawer/src/DrawerRoot.test.tsx | 11 +- ui/drawer/src/DrawerScrim.test.tsx | 5 +- ui/drawer/src/DrawerTrigger.test.tsx | 5 +- ui/error-message/package.json | 2 +- ui/fieldset/package.json | 2 +- ui/helper-text/package.json | 2 +- ui/icon/package.json | 6 +- ui/input-label/package.json | 2 +- ui/input-password/package.json | 2 +- ui/input-search/package.json | 2 +- ui/input-search/src/play.stories.tsx | 9 +- ui/input-shared/package.json | 2 +- ui/input-text/package.json | 2 +- ui/input-text/src/play.stories.tsx | 6 + ui/input-textarea/package.json | 4 +- ui/input-textarea/src/InputTextarea.tsx | 2 + ui/kit/package.json | 2 +- ui/kitchen-sink/package.json | 2 +- ui/navigation-menu/package.json | 2 +- ui/navigation-menu/src/play.stories.tsx | 6 +- ui/pagination-dots/package.json | 2 +- ui/pagination-dots/src/play.stories.tsx | 12 +- ui/popover/package.json | 2 +- ui/popover/src/PopoverContent.test.tsx | 2 +- ui/popover/src/play.stories.tsx | 3 + ui/radio-group/package.json | 2 +- ui/scrim/package.json | 2 +- ui/select/package.json | 2 +- ui/switch/package.json | 2 +- ui/tabs/package.json | 2 +- ui/tabs/src/TabsRoot.test.tsx | 5 +- ui/tabs/src/TabsTrigger.test.tsx | 5 +- ui/theme/package.json | 2 +- ui/tokens/package.json | 4 +- ui/tokens/scripts/build.mjs | 2 +- ui/tooltip/package.json | 2 +- ui/tooltip/src/play.stories.tsx | 3 + ui/visually-hidden/package.json | 6 +- 114 files changed, 25779 insertions(+), 34577 deletions(-) delete mode 100644 .github/workflows/interaction-tests.yml create mode 100644 apps/nextjs13-approuter/.gitignore create mode 100644 apps/nextjs13-approuter/README.md create mode 100644 apps/nextjs13-approuter/next.config.js create mode 100644 apps/nextjs13-approuter/package.json create mode 100644 apps/nextjs13-approuter/src/app/layout.js create mode 100644 apps/nextjs13-approuter/src/app/page.js create mode 100644 apps/nextjs13-approuter/src/app/registry.js create mode 100644 apps/nextjs13-pagerouter/.gitignore create mode 100644 apps/nextjs13-pagerouter/README.md create mode 100644 apps/nextjs13-pagerouter/next.config.js create mode 100644 apps/nextjs13-pagerouter/package.json create mode 100644 apps/nextjs13-pagerouter/src/pages/_app.jsx create mode 100644 apps/nextjs13-pagerouter/src/pages/_document.jsx create mode 100644 apps/nextjs13-pagerouter/src/pages/index.jsx create mode 100644 apps/nextjs14-approuter/.gitignore create mode 100644 apps/nextjs14-approuter/README.md create mode 100644 apps/nextjs14-approuter/next.config.js create mode 100644 apps/nextjs14-approuter/package.json create mode 100644 apps/nextjs14-approuter/src/app/layout.js create mode 100644 apps/nextjs14-approuter/src/app/page.js create mode 100644 apps/nextjs14-approuter/src/app/registry.js create mode 100644 apps/nextjs14-pagerouter/.gitignore create mode 100644 apps/nextjs14-pagerouter/README.md create mode 100644 apps/nextjs14-pagerouter/next.config.js create mode 100644 apps/nextjs14-pagerouter/package.json create mode 100644 apps/nextjs14-pagerouter/src/pages/_app.jsx create mode 100644 apps/nextjs14-pagerouter/src/pages/_document.jsx create mode 100644 apps/nextjs14-pagerouter/src/pages/index.jsx delete mode 100644 apps/vite-project/.gitignore delete mode 100644 apps/vite-project/CHANGELOG.md delete mode 100644 apps/vite-project/index.html delete mode 100644 apps/vite-project/package.json delete mode 100644 apps/vite-project/src/App.jsx delete mode 100644 apps/vite-project/src/main.jsx delete mode 100644 apps/vite-project/vite.config.js delete mode 100644 apps/vite-v2-project/.gitignore delete mode 100644 apps/vite-v2-project/CHANGELOG.md delete mode 100644 apps/vite-v2-project/index.html delete mode 100644 apps/vite-v2-project/package.json delete mode 100644 apps/vite-v2-project/src/App.jsx delete mode 100644 apps/vite-v2-project/src/main.jsx delete mode 100644 apps/vite-v2-project/vite.config.js create mode 100644 docs/architecture/003-use-client-banner.md create mode 100644 docs/architecture/004-versioned-docs.md diff --git a/.github/workflows/interaction-tests.yml b/.github/workflows/interaction-tests.yml deleted file mode 100644 index 7da16ff1c..000000000 --- a/.github/workflows/interaction-tests.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Interaction Tests - -on: deployment_status - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - tests: - if: github.event.deployment_status.state == 'success' && contains(github.event.deployment_status.target_url, 'storybook') && !contains(github.event.deployment_status.target_url, 'vitejs') - runs-on: ubuntu-latest - timeout-minutes: 10 - env: - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ secrets.TURBO_TEAM }} - steps: - - uses: actions/checkout@v4.1.1 - with: - fetch-depth: 0 - - - uses: actions/setup-node@v4.0.0 - with: - node-version-file: ".nvmrc" - registry-url: "https://registry.npmjs.org" - always-auth: true - cache: npm - - - name: Cache node_modules - id: cache-node_modules - uses: actions/cache@v3 - with: - path: | - **/node_modules - node_modules - key: node_modules-${{ hashFiles('package-lock.json') }} - restore-keys: node_modules - - - name: Install npm dependencies - if: steps.cache-node_modules.outputs.cache-hit != 'true' - run: npm ci - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ secrets.TURBO_TEAM }} - - - name: Run interaction tests - run: npm run test-storybook - env: - TARGET_URL: "${{ github.event.deployment_status.target_url }}" diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index f4ff5c547..0f1d09ce3 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -9,7 +9,9 @@ jobs: test: if: github.event.deployment_status.state == 'success' && !contains(github.event.deployment_status.target_url, 'storybook') && !contains(github.event.deployment_status.target_url, 'vitejs') runs-on: ubuntu-latest - timeout-minutes: 20 + container: + image: mcr.microsoft.com/playwright:v1.40.1-jammy + timeout-minutes: 25 env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} @@ -25,6 +27,14 @@ jobs: always-auth: true cache: npm + - name: Cache playwright binaries + uses: actions/cache@v3 + id: playwright-cache + with: + path: | + ~/.cache/ms-playwright + key: cache-playwright-linux-1.40.1 + - name: Cache node_modules id: cache-node_modules uses: actions/cache@v3 @@ -44,18 +54,12 @@ jobs: TURBO_TEAM: ${{ secrets.TURBO_TEAM }} - name: Install Playwright Browsers + if: steps.playwright-cache.outputs.cache-hit != 'true' run: npx playwright install --with-deps - name: Run Playwright tests - run: npx playwright test + run: npm run playwright env: BASEURL: "${{ github.event.deployment_status.target_url }}" TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ secrets.TURBO_TEAM }} - - # - uses: actions/upload-artifact@v3 - # if: always() - # with: - # name: playwright-report - # path: playwright-report/ - # retention-days: 30 + TURBO_TEAM: ${{ secrets.TURBO_TEAM }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index b49d78140..358eda459 100644 --- a/.gitignore +++ b/.gitignore @@ -135,3 +135,4 @@ build.washingtonpost.com/public/storybook/**/* /test-results/ /playwright-report/ /playwright/.cache/ +.turbo \ No newline at end of file diff --git a/.storybook/main.js b/.storybook/main.js index 5bc98b830..3cb6375ad 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -1,36 +1,49 @@ +import { dirname, join } from "path"; // add process.env require("dotenv").config(); module.exports = { stories: ["../ui/(**|!(node_modules))/src/*.stories.@(ts|tsx|js|jsx)"], exclude: ["node_modules", "dist"], + addons: [ - "@storybook/addon-essentials", - "@storybook/addon-interactions", - "@storybook/addon-a11y", + getAbsolutePath("@storybook/addon-essentials"), + getAbsolutePath("@storybook/addon-interactions"), + getAbsolutePath("@storybook/addon-a11y"), ], + previewBody: (body) => `${body}`, + features: { storyStoreV7: true, interactionsDebugger: true, }, - framework: "@storybook/react", - core: { - builder: "webpack5", + + framework: { + name: getAbsolutePath("@storybook/nextjs"), + options: {}, }, - typescript: { - check: true, - reactDocgen: "react-docgen-typescript", - reactDocgenTypescriptOptions: { - shouldExtractLiteralValuesFromEnum: true, - propFilter: (prop) => - prop.parent - ? /@radix-ui/.test(prop.parent.fileName) || - !/node_modules/.test(prop.parent.fileName) - : true, - compilerOptions: { - allowSyntheticDefaultImports: false, - }, - }, + + // typescript: { + // reactDocgen: "react-docgen-typescript", + // reactDocgenTypescriptOptions: { + // shouldExtractLiteralValuesFromEnum: true, + // propFilter: (prop) => + // prop.parent + // ? /@radix-ui/.test(prop.parent.fileName) || + // !/node_modules/.test(prop.parent.fileName) + // : true, + // compilerOptions: { + // allowSyntheticDefaultImports: false, + // }, + // }, + // }, + + docs: { + autodocs: true, }, }; + +function getAbsolutePath(value) { + return dirname(require.resolve(join(value, "package.json"))); +} diff --git a/apps/nextjs13-approuter/.gitignore b/apps/nextjs13-approuter/.gitignore new file mode 100644 index 000000000..8f322f0d8 --- /dev/null +++ b/apps/nextjs13-approuter/.gitignore @@ -0,0 +1,35 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/nextjs13-approuter/README.md b/apps/nextjs13-approuter/README.md new file mode 100644 index 000000000..376cab465 --- /dev/null +++ b/apps/nextjs13-approuter/README.md @@ -0,0 +1 @@ +# Next.js 13 App Router Test App diff --git a/apps/nextjs13-approuter/next.config.js b/apps/nextjs13-approuter/next.config.js new file mode 100644 index 000000000..658404ac6 --- /dev/null +++ b/apps/nextjs13-approuter/next.config.js @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {}; + +module.exports = nextConfig; diff --git a/apps/nextjs13-approuter/package.json b/apps/nextjs13-approuter/package.json new file mode 100644 index 000000000..b634f05f9 --- /dev/null +++ b/apps/nextjs13-approuter/package.json @@ -0,0 +1,18 @@ +{ + "name": "nextjs13-approuter", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "react": "^18", + "react-dom": "^18", + "next": "13.5.6", + "@washingtonpost/wpds-ui-kit": "*", + "@washingtonpost/wpds-kitchen-sink": "*" + } +} diff --git a/apps/nextjs13-approuter/src/app/layout.js b/apps/nextjs13-approuter/src/app/layout.js new file mode 100644 index 000000000..0f72f5a0f --- /dev/null +++ b/apps/nextjs13-approuter/src/app/layout.js @@ -0,0 +1,12 @@ +import React from "react"; +import StitchesRegistry from "./registry"; + +export default function RootLayout({ children }) { + return ( + + + {children} + + + ); +} diff --git a/apps/nextjs13-approuter/src/app/page.js b/apps/nextjs13-approuter/src/app/page.js new file mode 100644 index 000000000..1f2a3943a --- /dev/null +++ b/apps/nextjs13-approuter/src/app/page.js @@ -0,0 +1,8 @@ +"use client"; + +import React from "react"; +import { KitchenSink } from "@washingtonpost/wpds-kitchen-sink"; + +export default function Home() { + return ; +} diff --git a/apps/nextjs13-approuter/src/app/registry.js b/apps/nextjs13-approuter/src/app/registry.js new file mode 100644 index 000000000..7fa90b078 --- /dev/null +++ b/apps/nextjs13-approuter/src/app/registry.js @@ -0,0 +1,16 @@ +"use client"; + +import React from "react"; +import { useServerInsertedHTML } from "next/navigation"; +import { getCssText, globalCss } from "@washingtonpost/wpds-ui-kit"; + +export default function StitchesRegistry({ children }) { + useServerInsertedHTML(() => { + globalCss(); + return ( +